A DATA CARRIER AND APPARATUS FOR OPTICALLY READING DIGITAL DATA INSCRIBED IN AN ARCUATE PATTERN ON A DATA CARRIER

Abstract: An information record (100) has a body (102) of photographic film, paper, plastics material or the like, in which digital information (112, 116, 118, 120) is carried on a body in equal-radii, arcuate rows (114) which extend across the body. The information may be stored as dark spots, light spots or dark-to-light or light-to-dark transitions with respect to transparent substances and in reflective areas, non-reflective areas or reflective-to-non-reflective or non-reflective-to-reflective transitions. The data are read with a beam produced by a laser (388, 434) upon relative movement between the laser (388, 434) and the data record (100). In one embodiment the laser (434) is fixed and the data record (100) is rotated, while in another embodiment the laser (388) is rotated and the data record (100) is relatively fixed, but linearly incrementally moved transversely of the beam path.

Description: "A DATA CARRIER AND APPARATUS FOR OPTICALLY READING DIGITAL DATA INSCRIBED IN AN ARCUATE PATTERN ON A DATA CARRIER" D E S C R I P T I O N "A Data Carrier Method and Apparatus for Optically Reading Digital Data Inscribed in an Arcuate Pattern on Data Carrier" The present invention relates to a method and apparatus for optically reading data from an information record or information carrier in which the data is inscribed in an arcuate pattern, More particularly, the invention concerns the retrieval of digital information from a data carrier in which the digital information is stored on a body in parallel, spaced-apart rows, the rows extending in an arcuate manner across the body. Gokey et al U.S. Patent 4,213,040 and Gokεy et al U.S.Serial No. 956,426 disclose the provision of digital information in rows and columns on a data carrier, in which access and reading is performed with an X-Y transport adapted for skew correction, Gokey et al U.S. Serial No,. Q74.Q95 provides an information record which takes the form of a disc in whic rows of information are disposed as straight radial lines arcuate radial lines or circles with, respect to the * axis of rotation of the disc. Ackerman et al Serial Ho. 181,172 discloses an information record of the type which may be used in practicing the present invention and, in fact, forms the accompanying FIG, 1, and is included in this invention. The object of the present invention is to provide a method and apparatus for optically retrieving digital information from a data carrier in which the advantages of the rectangular carrier (skew correction and the like) is maintained along with the advantages of a constantly rotating and constantly scanning system, while avoiding the disadvantages associated with both types of systems. According to the invention, digital information is read from a body of material, such as photographic film, paper, various plastics material and the like, in which, the data is stored in spaced-apart. arcuate rows. The data is scanned by a moving light beam, preferably generated by a laser source, so that the light beam is modulated by the reflective-to- nonrεflective character of the data on the data carrier, and as be augmented by a reflective support behind the carrier, depending upon the material used for the data carrier. The material may vary, depending upon application, and may include paper, coated enamel paper, plastic filament paper, Mylar, Kodalith Pan, Dry Silver, Tri-X, Plus X, Diazo and Vesicular materials. In one embodiment of apparatus for practicing the invention, the light source is fixed and is guided by mirrors, prisms and the like for emission from a wheel which rotates past the data carrier. In another embodiment, a preferred embodiment, the light source is mounted on a rotating wheel and the light beam is directed in a similar manner so as to scan the data carrier. Inasmuch as the light path in this embodiment is much shorter than that of the fixed light source type of system, a much greater efficiency is achieved. According to the invention, thja method includes generating a beam of light, preferably a coherent beam of light, directing the beam of light so as to scan a data carrier along arcuate paths which correspond to the arcuate paths of data s age on the data carrier, reflecting the beam of light as modulated by the data and directing the. same along a path, and receiving and converting the modulated light beam into electrical signals which correspond to the data stored on the data carrier, The apparatus for optically reading digital data which is inscribed in an arcuate pattern on a data carrier comprises a data carrier support for receiving and holding a data carrier, a light source operable to emit a beam of light, preferably coherent light, a beam directing means for receiving and directing the beam of light toward the supported data carrier, including means for sweeping the light beam across the data carrier in an arcuate path which corresponds to the arcuate storage pattern of the data on the carrier; and receiving means mounted to receive the light beam after the same strikes the data carrier. As mentioned above, in one embodiment the light source is fixed and the light beam is directed to a beam sweeping structure, while in another embodiment, the light source is rotatably mounted with the beam directing means for causing the light beam to sweep across the data carrier, ON THE DRAWINGS Other objects, features and advantages of the invention, its organization, construction and operation will be best understood from the following detailed description, taken in conjunction with, the accompanying drawings, on which: FIG, 1 is a plan view of an information record of the type which, may be employed in practicing the present invention; and is a part thereof; FIG, 2 is an isometric view of an ' apparatus for practicing the present invention with, the outer cover removed, but shown in phantom; FIG. 3 is a sectional view taken substantially along the parting line III-III of FIG. 2; FIG, 4 is an isometric type of plan view of the base plate and apparatus supported by the base plate, including the data carrier support and carriage structure along with the skew correction and carriage * incrementing motors; FIG, 5 is an exploded view of the carriage structure of FIG. 4 and a wheel which mounts thereabσve and carries the light source and light beam directing structure, and specifically illustrating a radius control motor to compensate for manufacturing tolerances, ambient temperature conditions and the like with respect to the size of the data carrier; FIG. 6 is a schematic circuit diagram of the motor control circuits for controlling the skew and incrementing motors; FIG, 7 is a schematic circuit diagram of a motor control circuit for controlling the radius motor; FIGS. 8 and 9 are schematic illustrations of the incrementing or carriage drive motor and the skew motor; FIG*. 10 shows connector pin assignments for interconnecting the control circuits of FIG. 6 with the motors of FIGS. 8 -and 9 and the control inputs effective to cause operation of these motors; FIG, 11 is a schematic and .sectional view of a structure for transferring the modulated light beam as electrical signals to a computer; FIG. 12 is a schematic representation of a fixed light source with a rotating beam directing system, as seen from the top; and FIG, 13 is a portion of the system of FIG, 12 as seen from the right-hand side. Before turning to the method and apparatus for reading a data record, reference should be first made to FIG, 1 which illustrates a data carrier for use in practicing the present invention. The data carrier is generally illustrated at 100 as comprising a body 1 Q 2 which may have a header 104 affixed thereto, The header 104 may include visually perceptible information, as illustrated at 106, 108 and 110, dealing with, for example, the price list relating to a particular model number manufactured by a particular manufacturing organization. This information could also relate to any type of inventory and may find particular use in the banking, hardware, hospital and pharmaceutical areas. As a particular example, the digital information relating to each element which may be a part of a price list, for example, is recorded in a plurality of parallel^ appearing, spaced-apart rows of information 114 in an area 112 of the body 102, Although an operating program may tell a machine the address of a row with respect to distance from a datum line, so that the machine itself will respond accordingly to access the proper row, each row may include a row address at either or both ends, as referenced at 118, with the digital information to be retrieved located therebetween, such as at 116. The address information 118 may also be interspersed along the respective arcuate data line, assuming that the hardware and software is set up to read in such a manner. The record medium may be in the form of paper, plastics or the like, or may be a photographic film in which the background may be transparent or dark and the individual information dots may be of opposite character. The dots themselves may contain the digital information such that a dark dot on a light or transparent background OMPI ay be considered a "1" or such that a light dot en a dark background may represent a "1", . Preferably, however, and notwithstanding the transparency of the background, the information is contained in the opaque-to-transparent and transparent-to-opaque transitions. The transparency and opaqueness of a medium, for example a photographic film, is not limiting with respect to practicing the present invention. The information might be stored with respect to reflective elements carried by the body, whether the body is transparent or opaque. Again, the information may be stored as a result of the reflective material , being present or absent, or may be stored with respect to the transitions- between the reflective and non- reflective areas. . The camera for producing such a data record also has the capability of providing, in place of or in addition to the information 106, 108 and 110 carried on a header 104, the same or additional information on the film, as indicated at 122, 124 and 126, in the same manner as recording of the digital information. Such information may be graphic and/or digital, where graphic means all types of information, including alph -numeric, drawings, symbols and the like. The data record may also comprise leader ( railer1 indicia 120, which informs the reading device of the beginning and ending of digital information. Referring to FIGS. 2 and 3, the frame of a preferred apparatus for practicing the present invention is generally illustrated at 128 as comprising a top plate 130 and a base plate 132 which are fixed generally parallel to one another, spaced-apart, by way of a plurality of spacers 134, A front plate 136 is also provided and extends between the top plate 130 and the c.-*?ι base plate 132. The top plate 130 includes an aperture 131 with an access plate 133 and carries, towards the rear thereof, a power supply 138 and a computer 140. The entire structure may be covered with a protective cover 142 which includes a slot 144 for alignment with a slot 146 in the front plate 136 to receive the data record 100 there¬ through. The cover 142 may also include an aperture 148 for receiving the operating member of an on-off switch 150. The on-off switch 150 controls the application of power to the entire unit by way of a line cord and plug assembly 152 and transformer 154, the line cord being received through a mounting bracket 156 at the left-hand, rear corner of the unit. The power cord 152 may terminate a terminal block 158 which services the power supply 138 by way of a fuse holder 160 and further connections (not shown) . A motor 162 is mounted at the left-hand, rear corner of the unit by way of a mounting bracket 164, and receives power from the terminal block 158 by way of a connector 166 and, possibly, via a motor on-off switch 168. The motor 162, upon energization, constantly rotates a wheel or disc 174 by way of a belt 170 which is received in a groove 172 of the wheel 174 * carried by the wheel 174. Referring specifically to FIG. 3, a shaft 176 is rotatably mounted between the top plate 130 and the base plate 132. The shaft 176 is mounted in an upper bearing 178 received in a plate 180 which is affixed to the top plate 130 by way of screws 182, In a similar manner, a lower bearing 184 receives the shaft 176 and is mounted in a plate 186 which is affixed to the base plate 132 by way of screws 188, The upper portion of the shaft carries a first slip ring assembly, while the lower portion of the shaft carries a second slip ring assembly. The upper, first slip ring assembly comprises a plurality of slip rings 200, 202, 204 which are insulated with respect to the shaft, while the lower slip ring assembly comprises a pair of slip rings 206 and 208 which are also insulated from the shaft. The upper slip ring assembly comprises respective spring-loaded contacts Cbrush.es) 210, 212, 214, while the lower slip ring assembly comprises a pair of spring-loaded contacts 216 and 218 (brushes) , The upper brushes 210, 212, 214 are mounted in an insulating brush holder 220 which is secured to the plate ISO by way of a screw or screws 222 and a pair of plates 224 and 226. In the same manner, the lower contacts are held in a brush holder 228 which is secured to the plate 186 by way of a screw or screws 230 and a pair of plates 232, 234. As seen in FIG. 5, a connector and cable assembly 236 is provided to feed voltage potentials to the upper contacts 210, 212, 214; __ similar arrangement being provided, but not shown, for the lower contacts 216 and 218. The contacts 200, 210 may carry, for example, -4-12 VDC; the contacts 202, 212 may carry ground; the contacts 204, 214 may carry + 19 VDC unregulated for the radius motor; and the contacts 206, 216 and 208, 218 may carry, for example, 700 VAC for the laser. The wheel 174 includes a central aperture 190 which receives a portion of a stepped flange 192 and is secured thereto by a plurality of screws 19.4, As shown and described, the motor 162 by way of the belt 170 rotates the wheel 174 between the top plate 130 and the bottom plate 132, In reading data from the data record 100, the computer 140 must know at which time the data will be scanned, that is the computer must know the position of the wheel 174, at least .immediately prior to data scanning. For this purpose, and as shown in a cut-away portion of the plate 130 in FIG, 2, a bracket 238 mounts a Hall-effect device and supporting circuit for generating electrical pulses, as clock pulses, in each 0 instance as the wheel 174 carries a mounting bracket 244 mounting a magnet 242 there past. Therefore, for each revolution of the wheel 174, a pulse is delivered to the computer (connections not shown) for clocking data retrieval with respect to rotation. 5 Referring to FIG. 2, and as also illustrated in FIG. 4, the base plate 132 is provided with a threaded magnifier mounting ring 246. The mounting ring 246, when the unit is placed on its side, for example, receives a 5O magnifier for focusing. For this purpose, the wheel Q 174 is rotated such that a light beam via a prism 254 and a lens 258 (FIG. 3) are positioned above the mounting ring 246 and the magnifier. The lens 258 may therefore be adjusted to the focal plane of the data record 100, which plane is indicated in FIG. 3, It should be* pointed out here that the wheel 174 carries a plate 248 which mounts a prism holder 250 for holding a prism 254, the prism holder 250 receiving a lens mount 256 having- a lens 258 therein. As the light beam, as indicated by broken lines, passes through the lens and is ' reflected from the media, the same is received, at a slight angle, for example 15° , by a photo detector 260, such as a photodiode or a phototransistor. Turning now to FIGS, 4 and 5, the carriage OM?I structure is illustrated in detail as comprising a carrier 264 which is mounted for incremental movement along a track 262 as supported by a plurality of guide wheel assemblies 268 and a guide wheel assembl 29.0. Each guide wheel assembly 268 comprises a guide wheel 270, a spacer 272, an eccentric bushing 274 and a screw 76. These elements are all on the right-hand side of the unit. On the left-hand side of the unit, supporting the carriage, is a wheel 292 which is adjusted in height by an eccentric bushing 294 and a screw 29.6 to level the carriage. FIG. 5 illustrates that the guide wheel assemblies 268 are carried on respective flanges 278 and 280. On the rear flange 280, a magnet 29.8, via a washer -300 is secured in a magnet mount 320 which is, in turn, secured by way of screws 304 to the end of the flange 280, The magnet 298 cooperates with CFIG, 4) a Hall-effect device 308 and supporting circuitry 310 which is mounted adjacent the track 266 by way of a pair of circuitboard mounts 306. The movement of the magnet 29.8 toward and away from the Hall effect device 308 (connections not shown) tells the computer 140 whether the carriage 264 is in the home position or is away from the home position. In order to increment the carriage arcuate line- by-arcuate line, a carriage motor 314 is mounted to the base plate 132 by way of a mounting bracket 312 and includes a lead screw-type output shaft which is rotatably •connected to the carriage 264. As will be understood from a more detailed description below, the carriage motor 314 is controlled by a motor control circuit 320 (detailed in FIG. 6) via a cable assembly 318. The carriage structure also comprises a skew pivot plate 322 which is mounted spaced from the carriage 264 by way of a plurality of spacers 324 and corresponding washers 328 and screws 326. The plate 322 includes a pivot hole 330, and a plurality of skew- accommodating slots 332, 334 and 336. The skew plate 322 also includes a pair of L- shaped recesses .338 which open into a recess 340 in the top of the skew plate 322, The recess 340 receives a glass or mirror plate 0 342 which is held down by a pair of small L-shaped springs 344 and respective screws 346. The ends 348 of a media holding spring 35Q are received in the recesses 338 and secured therein by way of a pair of screws 352. Referring still to FIGS. 4 and 5, the base plate 5 132 includes an elongate aperture 354 for receiving the body of a skew motor 356 for movement therethrough in accordance with, the movements prescribed by the carriage motor 314. The skew motor 356 includes a front mounting bracket 358 which is connected to the rear end of a Q projection 360 of the carriage 264, The projection 360 includes a shaped slot 362 for receiving the forward (output shaft) portion 364 of the motor 356, the output shaft 364 contacting a lever 366 which is pivotally mounted at 368 to the carriage 264 by way of a shouldered 5 portion 370 and a screw 372. The lever 366 includes an arm portion 374, and an adjustable screw 376, for contacting and pivoting the skew plate 322, while a skew return or bias spring 378 is connected between the skew pivot plate 322 and the motor mounting flange 358 (FIG. 4). Q In reading data from a data record of the type illustrated in FIG, 1, care must be taken to accommodate the manufacturing tolerances and/or the temperature response of the record. For example, the accurate cutting of the data record in the direction across the data, that is vertically in FIG, 1, changes the radius of rotation with respect to the radius of the arcuate pattern. Also, expansion or contraction of the data record due to ambient conditions changes this dimension. Therefore, apparatus is provided for accommodating radius changes due to manufacturing tolerances, ambient temperature and the like. Referring to the upper portion of FIG, 5, radius Q correction structure is provided for the light beam emanating from the lens 258, This structure comprises a radius motor 380 which has an output lead screw 382 connected to the plate 248 at a pivot 384, the plate being pivotally mounted on the wheel 174 at a pivot 378 5 by means of a bushing, screw and the like Cπ.ot shown) . The motor 380 responds to control signals received from a radius motor control circuit 386, which is shown in detail in FIG. 7. As the disc rotates and the initializing operations are performed, the computer 0 determines the direction of movement of the lens 258 and operates the radius motor 380 accordingly, The light beam is generated, preferably, by a laser generator 388 which is powered by a respective power supply 390 fed from the master power supply 138.. The 5 laser generator 388 and the power supply 39.0 may advantageously be enclosed in a protective cover 392. The beam generated by the laser generator 388 is projected toward the periphery of the wheel 174 where it strikes_ a mirror 394 mounted on a mirror mount 396 and is reflected 0 to the prism 254 for direction downwardly through the lens 258. As illustrated in FIG, 3, the light beam through the lens 258 strikes the data record and is reflected therefrom, modulated, to be received by the photo- detector 26Q. The photo detector 260 has output leads 398 which are connected to a circuit 400 which is an optical/optical converter to eliminate noise having an optical output 402 connected to an optical connector 404 which feeds a fiber optic 406, A representative circuit is illustrated in FIG. 14, As illustrated in FIG, 3, the fiber optic 406 is- received in a radial passageway 4Q8 and extends up through 0 an axial passageway 410 of the shaft 176 to an optical ferrule 112, whereupon the light emanating therefrom is detected by an optical detector 413 and fed to the computer 140 for buffering and the like, A similar output may be had, referring to FIG, 5 11, by providing the output leads 398 to a circuit 414 which is essentially a pulse shaper having output leads 146 which extend through the radial passageway 4Q8 and the axial passageway 410 of the shaft 176 to a light--emitti g element 418, such as a light emitting diode. Again, a Q photo detector 420, such as a photo diode or a photo- transistor converts the light pulses to electrical pulses for feeding to the computer 144 for buffering and the like. Referring to FIGS. 6—10, the motor control 5 apparatus for the motors 314, 356 and 380 will be discussed. The motor control circuitboard 320 for the skew and carriage motors is illustrated in FIG. 6 as a plurality of identical circuits 422 each comprising an Q optical isolator 424 and a switching transistor 0. The alphabet letters indicate computer inputs for receiving carriage incrementing and skew adjustment signals, while the numbered outputs indicate, in connection with FIGS, OMPI 8 and 9, the connections to the coils of the skew and carriage motors. The radius motor 380 is similarly controlled, but with a dual circuit comprising optical isolators 426 5 and respective transistors 09 and Q10 in order to feed one polarity or another to the skew control motor. FIG. 10 relates the control inputs and the responsive outputs for the carriage, skew and radius motors with respect to the circuits of FIG. 6--9, 1Q For those times during which it is necessary to tilt the unit on its side, for example during the focusing operation, a carriage retaining structure is provided for the left-hand side of the carriage. This structure comprises a L-shaped member 428 which includes 15 a recessed surface 430 Cfrom the bottom) , secured to the base plate 132 by way of a pair of screws 432, As the carriage moves toward the front and toward the back, the left-hand edge thereof moves under the cut-out defining the surface 430 for retaining the carriage in the event of 20. tilting for focusing, packing and the like. Referring, to FIGS. 12 and 13, FIG, 12 is a top view of an alternative optical system, while FIG. 13 is a portion of the optical system of FIG, 12 as seen from the right-hand side, inasmuch as the optical system of 25 this embodiment covers at least three planes. In FIG. 12, and with a frame similar to that discussed above, a laser device 434 is fixed and emits a light beam 436 which is reflected to the right by a mirror 438 to form a beam segment 440 which, in turn, is reflected forwardly by a 30. mirror 442 * to form a beam segment 444, The beam segment 444 travels to a beam splitter 446 which passes a beam segment 448 to a prism 45Q (.shown as a mirror in FIG, 13 for simplicity) on the axis of the rotating wheel. The pris 45Q directs a beam segment 452 downwardly to a second prism 454, also on the axis of rotation which, in turn, directs a beam segment 456 toward a mirror 458 for reflection upwardly toward a data record 462 (1001 which is movable incrementally toward the front and toward the back of the unit, The reflected light beam segment 464 again strikes the mirror 458 at a slight angle and is reflected as a beam segment 466 to the prism 454, where the same is redirected as a beam segment 468 to the prism 450, The prism 450 again reflects the modulated beam as a segment 464 to the beam splitter 446 where the modulated beam is reflected as a beam segment 472 to a photo detector 480 for conversion into an electrical signal and transmission to the computer 140 for buffering, output and the like. It should be noted that in the preferred embodiment of FIGS. 2-5, as far as the mechanical rotating structure is concerned, and in the embodiment of FIG, 11, and in the embodiment of FIGS, 12 and 13, slip rings and the like for outputting the optical signal are not required, although the same could be utilized, As another alternative, the laser and beam directing system could be generally fixed, but incremented, with respect to a rotating data record. Also, instead of reflection of a modulated beam, the beam passage through a material having transparent portions could be detected and read with the beam passing through one side of the data record and being detected at the other side of the data record. With the exception of specific fasteners (screws, washers, etc.) the following TABLE I is a schedule of components listed by reference character and source code. The following TABLE II identifies the sources with respect to the source codes. TABLE T RΞF . NO . COMPONENT SOURCE SOURCE STOCK NO, 130 Top Plate A. 132 Base Plate A 133 Access Plate A 134 Support Column (.51 A 136 Front Panel A 138 Power Supply,+5 VDC, L Q +12 VDC,-12 VDC, -KL9.VDC unreg,, -19 VDC unreg, 140 STD Computer Rack N 142 Cabinet A 150 System Power Switch A 5 152 Line Cord Assembly K 154 Transformer and Board B LT-05R Assembly Rectifier) Cpart of) 156 Mounting Bracket A 158 Terminal Strip E Q 16Q Fuse Holder K 162 Drive Motor (Wheel). E 164 Motor Plate A 166 Connector CMotor Power) K 168 Slide Switch CMotor) K 170 Drive Belt F 174 Wheel (Drive Pulley A and Extension Ring). 176 Shaft A 178, 184 Bearing C2) M 18Q, 186 Top and Bottom A Bearing Plates OMPI -18- 192 Flange . Silver Soldered A to Shaf 1 2Q0- 208 Slip Rings (.5) A 210- 218 Spring-Loaded Brush C5) A 220- 228 Brush Holder Assy, C2) A 236 Connector and Lead A Assembly 238 Bracket for 240 A 240 Wheel Position Circuit A Board CClock.Tach) 242 Magnet I 244 Magnet Bracket A 246 Magnifier Mount Ring A 248 Radius Plate A 250 Prism Mount A 254 Prism C 3309 256 Lens Mount A 258 Lens C 260 Photodiode or V Pho otransistor 264 Carriage A 266 Track A 270 Guide Wheel C4) J 7016-1 272 Spacer (4) A 274 Eccentric Bushing C-1 A 282, 286 Track Block C2) A 284, 288 Riser Block C2) A 292 Guide Wheel CBall M Bearing) 294 Eccentric Bushing A 29.8 Magnet I 302 Magnet C2 .8 Mount A 306 Mount (21 for 3 Q 8 , 310 A 308 Hall-effect Switch H 276-1646 310 Hall-effect Switch. A Circuit Board 312 Carriage Motor Bracket A 314 , 316 Carriage Motor D L9.2121-P2 318 , 379 Motor Control Board A 10 Harness and Connector Ass 'y 320. Motor Control Circuit Board 322 Skew Plate A 15 324 Shoulder Spacer 4 A 342 * Plate CGlass, Mirror) A 344 Clip C2) A 350 Media Hold-down Spring A 356 , 364 Skew Motor D K92121-P2 20. 366 Skew Lever A 370 Shoulder Spacer A 378 Skew Return Spring A 380 ' Radius Drive Motor C 8813 382 Lead Screw C6-32) A 25 384 Lead Screw Pivot A 386 Radius Motor Control A (FIG. 7) 388 Laser Tube Assembly B 390 Laser Power Supply B LT-05R 30 Cpart of) 392 Laser Cover A 394 21 mm Mirror C 30, 621 396 Mirror Mount A 400,402 Electro-optical A Transducer Circuit 4Q4 Fiber Optic Connector G and Mount A 4Q6 Fiber Optic C 412,420 Fiber Optic Ferrule G 413 Opto-Electric Transducer V 414 Pulse Shaper Circuit A 418 Electro-optical V Transducer (£.__) 424,426 4N25 V Q1-Q10 1348 V D1-D10 IN4001 V OMPI TABLE TI SOURCE CODE SOURCE A Special Design by Richard Acker an for News Log International, Inc., P.O.Box 1 Q 5, 5 Fort Atkinson, WI 53538 B CW Radiation, subsidiary, Aerotech, Inc.. 101 Zeta Dr., Pittsburgh, PA 15238 C American Science Center, 5700 Northwest Hgwy, Chicago, IL, 6Q646 10 D Airpax, subsidiary of North American Phillips Co,, Cheshire, CN. 06410 E Lang & Epstein, Dayton St., Chicago, IL 6Q622 F Midwest Belting, 19.9. Gaylord Street, 15 Elk Grove Village, IL 60007 G AMP Inc., Pittsburgh, PA, or 1Q50 Morse, Elk Grove Village, IL 6000.7 H Radio Shack, 9515 N, Milwaukee Ave. Niles, IL 60648 20 I Micro Switch Division of Honeywell, Inc. J Stock Drive Products, 55 S, Denton Ave.,, New Eyde Park, NY 11Q40 K Joseph Electronics Inc. 8830 N. Milwaukee Ave., Niles, IL 60648 25 L Lab 1, News Log International, Inc., P.O.Box 105, Fort Atkinson, WI 53538 M Harrison Supply Co,, Milwaukee Ave., Wheeling, IL. N Pro Log Corp, 2411 Garden Ave., ■ ■ J " t nU Monterey, CA 9.3940 V Motorola, National, ' Semiconductor, Fairchild, Texas Instruments, et al OMPI METKOD OF OPERATION The system operates as follows, assuming all components have been placed in their operating conditions ' , ' wheel rotating, laser on, etc. The optical system reads data to determine if the scan crosses data lines so that skew correction is required; skew is then corrected, γ operating the skew motor and reading for a skew null. The optical system reads into the computer which then operates the radius motor to lengthen the optical path until data is transmitted over the optical path indicating a datum from which incrementing may begin. Subsequently, the data is scanned, row-by-row. and output to the computer for buffering and display. If an input addressing unit, e,g. keyboard, is employed, the supported data record is incremented until the correct data row is detected before data is output, decoded and displayed. The following is the software for cyclic reading of a data record in which error correction may he employed using, for example, a Hamming code. CMPI CP/M MACRO ASSEM 2.0 #001 READll READER SOFTWARE 10/23/80 AAJ (C) 1980 NLI TITLE 'READll READER SOFTWARE 10/23/80 AAJ (C) 1980 NLI' MACLIB Z80 MACLIB Z80EXT $*MACRO PAGE 60 0000 FALSE EQU 0 -FFFF TRUE EQU NOT FALSE 7 OOOD CR EQU ODH 000A LF EQU OAH 0OOC FF EQU OCH 0009 TAB EQU 09H 0006 ACK EQU 06H 0015 NAK EQU 15H 0002 STXT EQU 02H 0004 EOT EQU 04H 0020 SPACE EQU 20H r 2100 ORIGIN EQU 2100H ;LET'S EXECUTE FROM RAM. 2400 INBLEN EQU 2400H ;INPUT TRACK 3UFFER THIS LONG 2400 PIXLEN EQU 2400H INPUT TRACK LENGTH 4000 RAM EQU 4000H 0003 KBD EQU 3 0001 PORT EQU ;LSB IS WHEEL SENSOR MSB IS CARRIAGE 0000 = RDPORT EQU ;LS3 IS PHOTO SENSOR OMPI 0000 = STEPPER EQU 0 ;THIS IS STEPPER DRIVE PORT 0002 = FPORT EQU 2 .THIS IS FLAG OUTPUT PORT 015E # FMARGIN SET 350 ;THIS IS MARGIN AT FRONT OF FILM ; (FRONT OF FILM IS SIDE WITH TITLE TRACK) 007D BMARGIN SET 125 ;THIS IS MARGIN AT 3ACK OF FILM ;STEPPER MOTOR CONTROLLER BITS ARE AS FOLLOWS: SKEW MOTOR DRIVE 00D8 = SKLIMIT EQU 216 ;THIS IS SKEW MOTOR TOTAL TRAVEL 06F0 # STEPS SET 1776 ;THIS IS STEPS ACROSS ENTIRE FILM 0004 # TRACK SET 4 ;THIS MANY STEPS/ ' TRACK 01BC = TRACKS EQU STEPS/TRACK ;THIS MANY TOTAL TRACKS 0146 = DATA EQU TRACKS-(FMARGIN/TRACK) - (BMARGIN/TRACK) .THIS MANY DATA TRACKS FFFF = HAMMING EQU TRUE ;SET TRUE TO ENABLE ERROR CORRECTION OMPI 0000 = LEN60 EQU FALSE ; HESE EQUATES SET LINE LENGTH FFFF = LEN96 EQU TRUE 0000 = LEN144 EQU FALSE IF LEN60 LLENGTH EQU 60 BITLEN EQU 17 CP/M MACRO ASSΞM 2.0 #002 READll READER SOFTWARE 10/23/30 AAJ (C) 1980 NLI ENDIF IF LEN 96 0060 LLΞNGTH EQU 96 000A BITLENG EQU 10 ENDIF IF LEN144 LLENGTH EQU 144 BITLEN EQU 9 ENDIF 0008 = GROUPS EQU LLΞNGTH/12 ;HAMMING GROUPS STEPPER MOTOR EQUATES FFFF — TWOPHS EQU TRUE ;THIS IS TWO- PHASE CLOCKING 0000 = WAVE EQU FALSE ;THIS IS WAVE CLOCKING 0000 = HALFSTP EQU FALSE THIS IS HALF- STEP CLOCKING IF TWOPHS O00A STEPO EQU 1010B 0006 STEP1 EQU 01103 0005 STEP2 EQU 01013 0009 STEP3 EQU 10013 ENDIF OMPI TOO ' IF WAVE / STEPO EQU 1000B STEP1 EQU 0100B STEP2 EQU 0010B STEP3 EQU 0001B ENDIF IF HALFSTP STEPO EQU 1000B STEP1 EQU 1010B STEP2 EQU 0010B STEP3 EQU 0110B STEP4 EQU 0100B STΞP5 EQU 0101B STEP6 EQU 0001B STEP7 EQU 1001B ENDIF 0003 # SDELAY SET 03 . THIS MANY MS DELAY FOR EACH STEP 0087 # TCONST SET 135 ; THIS MANY LOOPS = 1 MS AT 2 . 5 MHZ 0195 # STIMER SET SDELAY*TCONST CP/M MACRO ASSΞM 2.0 #003 READll READER SOFTWARE 10/23/80 AAJ (C) 1980 NLI IF HALFSTP J* FMARGIN SET FMARGIN*2 BMARGIN SET BMARGIN*2 TRACK SET TRACK*2 STEPS SET STΞPS*2 STIMER SET STIMER/2 ENDIF FFFF = ERRIND EQU TRUE SE TRUE TO PRINT HAMMING RESULTS 2100 ORG ORIGIN 2100 C37021 START: JMP STARTl ;AROUND COPYRIGHT NOTICE 2103 C37C2A JMP SKEW 7TO FORTRAN SKEW ROUTINE 2106 C34025 JMP FSΞEK ;TO FORTRAN "SEEK" 2109 C35625 JJMMPP FFGGEETTCCIUR ;TO FORTRAN "GET CURRENT LINE" 210C C3C228 JMP EJECT ;TO FORTRAN EJECT ROUTINE 210F C37A25 JMP FCLLINΞ ;FORTRAN CLEAR LINE ROUTINE ;LINΞ # IN C 2112 C3692C JMP CRT ;FORTRAN PRINT ROUTINE FROM C 2115 C37525 JMP FCLΞAR FORTRAN CLEAR SCREEN ROUTINE 2118 C35628 JMP KBDWAIT ;FORTRAN K3D INPUT ROUTINE 211B 434F505952 DB 'COPYRIGHT 1980 LA31/NLI POB 105 FORT ATKINSON, ' 2149 2057495343 DB ' WISCONSIN 53538. ALL RIGHTS RESERVED. ' 2170 314040 STARTl: LXI SP,STACK ;SAFE STACK AREA 2173 21182Ξ LXI H.SKTABIE ;POINT TO MIDDLE OF TABLE 2176 22B240 SHLD SKADDR STORE THE TABLE POINTER 2179 21A400 LXI H, (8*16)+00100100B ; INIT THE BIT COUNTER 217C 22B440 SHLD BITBYTE ;STORE THIS TOO 217F 210000 LXI H,0 ; ESET THE TRACK COUNTER 2182 22B040 SHLD CUR INE 2185 010100 LXI B,l ;SΞT SKEW POLARITY REGISTER E X 2188+D9 2189 3ΞAA MVI A,STEP0+STΞP0*16 ;SET THE STEPPER PORT UP 218B D300 OUT STEPPER LXIY 0 ;STORE STEP 0 218D+FD21 218F+0000 2i91 210041 LXI H,INBUF ;CLEAR BUFFERS 2194 110141 LXI D,INBUF+1 2197 010020 LXI B,2000H 219A 3600 MVI M,0 LDIR 219C+EDB0 219E 3E0A MVI A,BITLΞN ;SET UP BIT LENGTH 21A0 32A640 STA LEN 21A3 0E1A MVI CCLR ;SCREEN CLEAR CHARACTER A5 CD692C CALL CRT ; INIT THE CRT DRIVER A8 DC692C CALL CRT IF (ORIGIN EQ 0 ) JMP OCOOH ;JUMP TO FORTRAN DIRECTLY IF ;THIS IS STAND¬ ALONE VERSION * ELSE CONSOLE COMMAND PROCESSOR OMPI_ CP/M MACRO ASSEM 2.0 #004 READll READER SOFTWARE 10/23/80 AAJ (C) 1980 NLI ; THIS ROUTINE TAKES KEYBOARD INPUT AND PERFORMS 7 VARIOUS TASKS. THE LEGAL COMMANDS ARE: [ , ] - STEP IN OR OUT 1 STEP / , ;> - SKEW IN OR OUT ONE STEP H - HOME CARRIAGE TO FULLY IN POSITION E - EJECT CARRIAGE TO FULLY OUT POSITION I - MOVE IN ONE TRACK O - MOVE OUT ONE TRACK T - TYPE CURRENT TRACK S - SKEW ADJUSTMENT ROUTINE Q - QUIT TO ZAP G (ADDR) - GOTO HEX TRACK ADDRESS N - RETRIEVE NEXT LINE C - CENTER STEPPER DRIVES & INIT POINTERS Z - SKEW CHECK ROUTINE W - WHAT TRACK ARE WE AT? X - PRINT UNCORRECTED LINE - , + INCREMENT AND DECREMENT BIT SIZE ? - QUERY PRESENT BIT SIZE A - DISPLAY ALL TRACKS OTHER CHARACTERS ARE IGNORED AB 314040 WAIT: LXI SP,STACK ;FIX STACK AE CD4C28 CALL KBDSTAT ; ATCH FOR CHARACTER JRZ WAIT 7JUMP IF NONE WAITING 2131+28FS 21B3 CD5B28 CALL KBDIN 7GET THE CHARACTER 2136 FΞ41 CPI 'A' 7 LL TRACKS? 2138 C28A22 JNZ K90 ;JUMP IF NOT 213B CD7C2A CALL SKEW 7ADJUST TO TRACK 0 21BE C2C724 JNZ NOSKW 7JUMP IF SKEW OUT OF -RANGE 21C1 CD2C29 CALL GΞTCUR 7START W/ TRACK 0 21C4 016001 LXI B,160H 7THIS MANY TRACKS 21C7 C5 K90LP: PUSH B . ?SAVE LINE COUNTER 21C8 114040 LXI D,OUTBUF 7BUFFER IS HERE 21C3 AF XRA A END THE STRING W/ NULL 21CC 328040 STA OUTBUT+(GROUPS*8) IF ΞRRIND 21CF 3AA940 LDA ΞRCOUNT GET HAMMING SCORE 21D2 B7 ORA A 7PERFECT? JRZ NOER ?JUMP IF PERFECT LINE 21D3+2822 21D5 217E40 LXI H,OUT3UT+(GROUPS*8)-2.-7END IT HERE 21D8 3600 MVI M,0 21DA CD5C2C CALL CONPRNT 21DD CD3325 CALL PLINΞ 7PRINT THE HAMMING MESSAGE 21Ξ0 2020455252 DB ' ERR = * ,0 21E9 3AA940 LDA ERCOUNT 7GET THE ERROR COUNT 21ΞC CD0025 CALL BASE10 ?CONVERT TO BASE 10 21ΞF CD1525 CALL PHΞX 7PRINT IT 21F2 CD4228 CALL CSLF 7PUT IN MISSING CR & LF JMPR K77 21F5+1803 ENDIF 21F7 CD5C2C NOER: CALL CONPRNT 7PRINT THE TRACK OMPI " CP/M MACRO ASSEM 2.0 #005 READll READER SOFTWARE 10/23/80 AAJ (C) 1980 NLI 21FA DB03 K77: IN KBD 7 GET K3D CHARACTER 21FC E67F AN I 07FH 21FE FE03 CPA * C * -40H 7 ABORT REQUEST? JRNZ K88 7 IGNORE OTHERS 2200+2025 2202 CD3325 CALL PLINE ELL THEM . . . 2205 0D0A2B2B2B DB CR, LF , ++++ FUNCTION ABORTED 1 , CR, LF , 0 2224 C3AB21 JMP WAIT 2227 CD712A K88: CALL GETNXT 7 GET NEXT TRACK TO BUFFER JRZ K89 . JUMP IF WE HAVE GOOD STRING 222A+283A 222C CD3325 CALL PLINE 7OR ELSE FESS UP 222F 0D0A504552 DB CR,LF, 'PERMANENT ERROR ON TRACK # ' ,0 224D 2AB040 LHLD CURLINΞ 7THIS LINE # 2250 7C MOV A,H 7PRINT HI BYTE 2251 CD1525 CALL PHEX 2254 7D MOV A,L 7THEN LO BYTE 2255 CD1525 CALL PHEX 2258 CD4228 CALL CRLF 225B Cl POP B 7COUNT THE LINE 225C OB DCX B 225D 78B1 MOV A,B 1 ORA C ; FINISHED? 225F CAAB21 JZ WAIT 7KICK OUT IF SO 2262 C5 PUSH B 7ELSE CONTINUE 2263 C32722 JMP K88 2266 Cl K89 : POP B 7CHECK THE LOOP 2267 OB DCX B 2268 78B1 MOV A,B i ORA C 226A C2C721 JNZ K90LP ?LOOP TILL ALL TRACKS DISPLAYED 226D CD3325 CALL PLINE 2270 414C4C2054 DB 'ALL TRACKS DISPLAYED ' ,CR, LF,0 2287 C3AB21 JMP WAIT 228A FΞ3F _ * ,-_* \_ • CPI ' ? ' 3 IT SIZE QUERY? JRZ PLNGTH 7 PRINT IT IF SO 228C+280B 228E FΞ2D K19: CPA '-' ? DECREMENT BIT SIZE? JRNZ K20 7 JUMP IF NOT 2290+2026 2292 3AA640 LDA LEN 7 MAKE ONE SMALLER 2295 3D DCR A 2296 32A640 LNGTH : STA LEN 2299 CD3325 PLNGTH: CALL PLINE 229C 0D0A424954 DB CR,LF, * B IT LENGTH = ' , 0 2AC 3AA640 LDA LEN 22AF CD1525 CALL PHEX 2232 CD4228 CALL CRLF 2235 C3AB21 JMP WAIT 2238 FΞ23 K20: CPI '+' ? MAKE BIGGER? JRNZ K21 7 JUMP IF NOT 22BA+2006 22BC 3AA640 LDA LEN 22BF 3C INR A JMPR LNGTH 7 FINISH UP 22C0+18D4 • 22C2 FΞ57 K21: CPI 'W' 7 TRACK ADDRESS REQUEST? 22C4 CA6423 JZ WTRK 7 JUMP IF SO 22C7 FE58 CPI 'X' 7 PRINT UNCORRΞCTΞD LINE? JRNZ K12 7 JUMP IF NOT 22C9+2061 22CB CD8225 CALL INTRACK ?GET PIXELS OM P CP/M MACRO ASSEM 2.0 #006 READll READER SOFTWARE 10/23/80 AAJ (C) 1980 NLI 22CE CD8F26 CALL GETFTA 7GET SYNC JRNC PRNT JUMP IF WE GOT IT 22D1+302C 22D3 CD3325 CALL PLINE 7PRINT BAD NEWS 22D6 0D0A204341 DB CR,LF,' CAN* 'T GET BEGINNING OF LINE SYNC* ,CR,LF,0 22FC C3AB21 JMP WAIT 7TRY AGAIN 22FF CD7D29 PRNT: CALL DECODE 7DECODE TO BYTES 2302 214040 LXI H,OUTBUF ;THEY ARE HERE 2305 5D54 MOV Ξ,L! MOV D,H COPY TO DΞ 2307 3E08 MVI A, 8 8 BYTE GROUPS 2309 32A540 STA HBYTES 230C 3E08 MVI A,GROUPS ;HAMMING GROUPS" TO A 230E CD9727 CALL HAMCODE 7DECODE STRING 2311 214040 LXI H,OUTBUF ? ESET POINTER 2314 0640 MVI B,GROUPS*3 7 HERE " ARE THIS MANY 2316 7E K13 MOV A,M CHECK THE BYTE 2317 E67F A I 7FH DROP HI BIT 2319 FE20 CPA ' ' CONTROL CHARACTER? JRNC K15 JUMP IF PRINTABLE 231B+3002 231D 3Ξ20 MVI A, ' » 7IT IS GAR3AGE 231F 4F K15: MOV C,A 7GET THIS BYTE TO C REG 2320 23 INX H 7POINT TO NEXT 2321 CD692C CALL CRT 7TO CRT SCREEN DJNZ K13 7TILL DONE 2324+10F0 2326 CD4228 CALL CRLF 7THEN CRLF 2329 C3AB21 JMP WAIT 232C FE5A K12 CPI ' z * 7SKEW TEST ? 232E C2B723 JNZ Kll 7JUMP IF NOT " 2331 CD5123 CALL SKΞW2 7DO FIRST SKEW ADJUST JRNC ST1 7JUMP IF SUCCESSFUL 2334+3015 2336 CD3325 ST4 CALL PLINE ELSE PRINT THE MESSAGE 2339 0D0A204241 DB CR,LF, ' BAD SKEW ', CR, LF,0 2348 C3AB21 JMP WAIT 7AND LOOP 2343 0E2A ST1: MVI C, '* * SHOW 1ST RY WAS GOOD 234D CD692C CALL CRT 2350 CD5123 CALL SKEW2 7THEN TRY FOR 2ND ONE JRC ST4 ?JUMP IF OUT OF RANGE 2353+38Ξ1 2355 0E2A MVI C, 1 *' 7ELSE SHOW THAT THIS ONE GOOD 2357 CD692C CALL CRT 235A CD512B CALL SKEW2 7DO FINAL ONE JRC ST4 7SHOW IF BAD 235D+38D7 235F 0Ξ2A MVI C, ** * 7SHOW LAST ONE GOOD 2361 CD692C CALL CRT 2364 CD8225 WTRK: CALL INTRAK 7GET CURRENT TRACK 2367 CD8F26 WTRK2 CALL GΞTFTA ;WE GOT A FTA? JRNC W2 7JUMP IF SO 236A+300D 236C CD3325 CALL PLINE 7TELL THEM WE AINT GOT 236F 4E4F204654 DB 'NO FTA. ' ,0 JMPR W3 2377+180F 2379 F5 W2; PUSH PSW 237A CD3325 CALL PLINE 7PRINT MESSAGE OMPI /,, V/IPO ' 237D 465441203D DB 'FTA = ' ,0 2384 Fl POP PSW CP/M MACRO ASSΞM 2.0 #007 READll READER SOFTWARE 10/23/80 AAJ (C) 1980 N3 2385 CD1525 CALL PHEX 7PRINT THE FTA 2388 CD0F27 W3: CALL GΞTBTA ?TRY FOR BACK ADDRESS JRNC W2 ?JUMP IF FOUND 238B+3011 238D CD3325 CALL PLINE 7PRINT THE MESSAGE 2390 204E4F2042 DB * NO 3TA ' ,CR,LF,0 239B C3AB21 JMP WAIT 239Ξ F5 W4: PUSH PSW 239F CD3325 CALL PLINE 23A2 2042544120 DB ' BTA = ' ,0 23AA Fl POP PSW 23AB CD1525 CALL PHEX 7PRINT THE TRACK 23AE CD3325 CALL PLINE 7END THE LINE 23B1 0D0AO0 DB CR,LF,0 23B4 C3AB21 JMP WAIT 23B7 FE53 Kll; CPA ' [ * 7STEP IN REQUEST? JRNZ Kl ?JUMP IF NOT 23B9+2006 2 BB CD7128 CALL INONE 233E C3AB21 JMP WAIT 7CONTINUE LOO? 23C1 FE5D Kl: CPI ' ] * 7STEP OUT REQUEST? JRNZ K2 7JUMP IF NOT 23C3+2003 23C5 CD6B28 CALL OUTONΞ 23C8 FE3C K2: CPI " 7SKEW IN REQUEST? JRNZ K3 JUMP IF NOT 23CA+2008 23CC 0601 MVI B,l ?STEP IN 1 23CΞ CD6328 CALL SKEWIN 23D1 C3AB21 JMP WAIT CONTINUE LOOP 23D4 FΞ3E K3: CPI * SKEW OUT REQUEST? JRNZ K14 JUMP IF NOT OMPI 23D6+2008 23D8 0601 MVI B,l 7SKEW OUT ONE 23DA CD6728 CALL SKEWOUT 23DD C3AB21 JMP WAIT 23E0 FE43 K14 CPI -C- 7CENTER & INIT? JRNZ K4 7JUMP IF NOT 23E2+2006 23Ξ4 CDF228 CALL CENTER 7DO IT 23E7 C3AB21 JMP WAIT 7AND LOOP 23EA FΞ51 K4 CPI 'Q' 7QUIT REQUEST? 23EC CA0000 JZ 0000 7REBOOT ON QUIT REQUEST 23EF FE49 CPI 'I' 7IN TRACK REQUEST? JRNZ K01 7JUMP IF NOT 23F1+200D 23F3 2AB040 LHLD CURLINE 7BUMP THE LINE COUNT 23F6 23 INX H 23F7 22B040 SHLD CURLINE 23FA CDA528 CALL INTRK 23FD C3A321 JMP WAIT 2400 FΞ4F KOI: CPI 'O' 7OUT TRACK REQUEST? JRNZ K02 7JUMP IF NOT 2402+200D 2404 2AB040 LHLD CURLINE 7GET LINE COUNT 2407 2B DCX H ?ONE LESS 2408 22B040 SHLD CURLINE 7 24OB CDAD28 CALL OUTTRK 240E C3AB21 JMP WAIT 2411 FE45 K02: CPI ' E - 7EJECT REQUEST? CP/M MACRO ASSΞM 2 . 0 #008 READll READER SOFTvvARE 10/23/80 AAJ (C) 1980 NLI 2413 CCC228 CS EJECT 7CALL IF SO 2416 FΞ48 CPI *H * 'HOME REQUEST? 2418 CCDB28 CZ HOME CALL IF SO 2413 FΞ47 CPI 'G* GOTO LINE? JRNZ K7 JUMP IF NOT 241D+203C 241F 4F MOV C,A 7ECHO TO CRT 2420 CD692C CALL CRT 2423 210000 LXI H,0 7CLEAR RESULT REGISTER 2426 CD5628 GETADD: CALL KBDWAIT 7GET CAHRACTΞR 2429 4F MOV C,A ?ECHO TO CRT 242A CD692C CALL CRT -242D FEOD CPI CR 7CARRIAGE RETURN? JRZ GOTADD 7JUMP IF COMPLETE 242F+2820 2431 FE08 CPI BS ?3ACK SPACE? JRNZ K6 7JUMP IF NOT 2433+200C 2435 0604 MVI 3,4 7BACK UP 4 BITS K0: RARR H 7SHIFT HI BYTE 2437+C31C RAR L ?AND LO BYTE 2439+CB1D - RES 7,H 7RESET HI BIT OF PAIR 243B+C3BC DJNZ K0 7UNTIL DONE 243D+10F8 JMPR GETADD 243F+18E5 2441 D630 K6: SUI '0' 7REMOVE ASCII 3IAS 2443 FΞOA CPI 10 ?TEST FOR DONE JRC ASCI 7JUMP IF DONE -$3R S OMPI 2445+3802 2447 D607 SUI'A'-'g'-l 7ELSE ADD CORRECTION 2449 29292929 ASCI: DAD H 1 DAD H ! DAD H 1 DAD H 7SHIFT LEFT 4 244D B5 ORA L 7PUT IN NYBBLE 244E 6F MOV L,A JMPR GETADD 7LOOP TILL CR FOUND 244F+18D5 2451 CD4228 GOTADD: CALL CRLF 7FINISH LINE 2454 EB XCHG 7EXCHANGE TO PUT POINTER IN DE 2455 CD372A CALL GOLINE 7GO THERE 2458 C3AB21 JMP WAIT 7AND LOOP 2458 FΞ4E K7: CPI 'N * 7GET NEXT LINE? JRNZ K5 7JUMP IF NOT 245D+2044 24-5F CD712A CALL GETNXT 7GET NEXT LINE JRZ K9 ?JUMP IF OK 2462+2832 2464 CD4228 K98; CALL CRLF 2467 CD3325 CALL PLINE 7TELL THEM 246A 4355525245 DB 'CURRENT TRACK HAS PERMANENT DATA ERROR' ,C ,LF,0 2493 C3AB21 JMP WAIT 2496 114040 K99: LXI D , OUT3UF POINT OF BEGINNING 2499 AF XRA A END THE STRING 249A 328040 STA OUTBUF+ (GROUPS* 8) 249D CD5C2C CALL CONPRNT ?PRINT IT 24A0 C3AB21 JMP WAIT 24A3 FE5 K5 CPI 'T* 7PRINT THIS TRACK? JRNZ K8 7JUMP IF NO OMP CP/M MACRO ASSΞM 2.0 #009 READll READER SOFTWARE 10/23/80 AAJ (C) 1980 NLI 24A5+2015 24A7 CD2C29 CALL GETCUR 7GET THE LINE JRNZ K93 24AA+20B8 24AC 114040 LXI D,OUTBUF 7POINT TO BEGINNING 24AF AF XRA A 7END THE STRING 24B0 328040 STA 0UT3UF+(GROUPS*8) 24B3 CD5C2C CALL CONPRNT 7PRINT IT 2436 CD4228 CALL CRLF 7ADD CARRIAGE RETURN & LINE FEED 24B9 C3A321 JMP WAIT 7RUN LOOP 24BC FΞ53 K8: CCPPII * -Ss** 7SKEW FUNCTION REQUEST? 243E C2A321 JNZ WAIT ?JUMP IF NOT 24C1 CD7C2A CALL SKEW 7DO SKEW ROUTINE 24C4 CA6723 JZ WTRK2 7SHOW ADDRESSES IF SUCCESSFUL 24C7 CD3325 NOSKW: C CAALLLL PPLLIINNEE 7ELSE PRINT THE ERROR 24CA 0D0A534345 DB CR,LF,'SKEW NOT WITHIN RANGE. PLEASE REPOSITION FILM. ' ,CR,LF, 24FD C3A321 JMP WAIT 2500 0600 BASΞ10: MVI B,0 7THIS IS 10S COUNTER 2502 FEOA B10: CPI 10 ? ENS GROUP? JRC ADONE 7JUMP IF NONE LEFT 2504+3805 2506 D60A SUI 10 * 7ELSE SUBTRACT IT 2508 04 INR B 7AND SAVE IT JMPR 310 2509+18F7 2503 4F ADONE: MOV C,A 7SAVE THE ONES 250C 78 MOV A,B 7GET THE TENS 250D 17171717 RAL I RAL IRAL 1 RAL 7 O HI NYBBLΞ 2511 E6F0 ANI 0FOH 2513 81 ADD C OMPI ' 2514 C9 RET 2515 47 PHEX; MOV 3,A 7SAVE BYTE IN B 2516 1F1F1F1F RAR 1 RAR i RAR ! RAR 7GET TOP HALF 251A CD2925 CALL HEXASC 7TO ASCII 251D 4F MOV C,A 7PRINT IT 251E CD692C CALL CRT 2521 78 MOV A,3 7THEN DO LO HALF 2522 CD2925 CALL HEXASC 2525 4F MOV CA 2526 C3692C JMP CRT 2529 E60F HEXASC; A I 0FH 7DROP HI 3ITS 252B C630 ADI '0 ' 7ADD ASCII OFFSET 252D FE3A CPA '9'+l 7IS IT A LETTER? 252F D8 RC 7DONE IF NO 2530 C607 ADI ' 1 7ELSE ADD REMAINDER 2532 C9 RET ENDIF 2533 El PLINE: POP H GET MESSAGE ADDRESS 25347E PL2: MOV A,M GET NEXT CHARACTER 2535 23 INX H POINT TO NEXT 2536 B7 ORA A DONE? JRNZ PL1 JUMP IF NOT 2537+2001 2539 E9 PCHL 7RETURN IF SO CP/M MACRO ASSΞM 2.0 #010 READll READER SOFTWARE 10/23/80 AAJ (C) 1980 NLI 253A 4F PL1: MOV C,A PASS CHARACTER IN C 253B CD692C CALL CRT TO THE SCREEN JMPR PL2 LOOP TILL ALL PRINTED 253Ξ+18F4 SUBROUTINE FSΞΞK SUBROUTINE FSΞΞK IS THE FORTRAN INTERFACE FOR 7 SEEKING, READING & DECODING A TRACK FROM FILM. 7 THE DESIRED TRACK IS POINTED TO 3Y THE (DE) PAIR 7 AND AN ERROR INDICATION IS RETURNED IN THE A REGISTER. ? THE RETRIEVED TRACK IS STORED AT OUTBUF. 2540 CD372A FSΞΞK: CALL GOLINE ;TRY TO GO THERE 2543 B7 ORA A JRZ FSEΞK1 7JUMP IF GOOD 2544+2806 2546 3EFF SEEKΞRR:MVI A,OFFH 7GET BAD RETRIEVE INDICATION 2548 32A840 STA ΞRRFLAG 7SHOW IT 254B C9 RET 254C CD2C29 FSΞΞK1: CALL GETCUR 7GET THE LINE 254F B7 ORA A JRNZ SEEKΞRR 7JUMP IF 3AD RETRIEVE 2550+20F4 2552 32A840 STA ΞRRFLAG 7SHOW GOOD RETRIEVE ^ O PI 2555 C9 RET SUBROUTINE FGETSUR SUBROUTINE FGΞTCUR IS THE FORTRAN INTERFACE FOR 7 DOING FORMATTED READS OF THE CURRENTLY READ TRACK. 7 IT POINTS TO THE RETRIEVED DATA WITH THE (DE) PAIR 7 AND RETURNS AN ERROR INDICATION IN THE A REGISTER. • 2556 114040 FGETSUR:LXI D,OUTBUF 7RECOVERED DATA IS HERE 2559 3AA840 LDA ERRFLAG 7ERROR INDICATION IS HERE 255C B7 ORA A 7SET THE FLAGS JRZ GΞTOK 7JUMP IF OK 255D+2802 255F AF XRA A ?SHOW NO BUFFER 2560 C9 RET 2561 3E40 GET OK: MVI A,GROUPS*8 7LINE LENGTH TO A 2563 C9 RET SUBROUTINE TOLINΞ SUBROUTINE TOLINE SETS UP THE CRT CURSOR TO THE 7 LINE POINTED TO BY THE C REGISTER 2564 3E02 TOLINE: MVI A,2 7GET THE CURSOR ADDRESS MODE 2566 3200Ξ4 STA CFLAG 2569 79 MOV A,C 7GET THE LINE NUMBER 256A C61F ADI SPACE-1 7ADD NECESSARY OFFSET 256C 4F MOV C,A PASS IN C REGISTER 256D CD692C CALL CRT TO THE CRT DRIVER 2570 0Ξ20 MVI CSPACE GET COLUMN 0 2572 C3692C JMP CRT DO IT & RETURN OMPI CP/M MACRO ASSEM 2.0 #011 READll READER SOFTWARE 10/23/30 AAJ (C) 1980 NLI SUBROUTINE FCLEAR SUBROUTINE FCLEAR CLΞARS AND INITS THE CRT SCREEN 2575 0Ξ1A FCLΞAR: MVI CCLR 7THIS SIMPLE 2577 C3692C JMP CRT SUBROUTINE FCLLINΞ SUBROUTINE FCLLINΞ CLΞARS THE CRT LINE POINTED TO 7 BY THE C REGISTER 257A CD6425 FCLLINE:CALL TOLINE 7GO THERE 257D 0E15 MVI CNAK ?CLEAR THE LINE 257F C3692C JMP CRT 7AND RETURN INTRAK WILL INPUT A WHOLE TRACK WAVEFORM OF ONES AND ZEROΞS. 2582 E5 INTRAK: PUSH H 7SAVE USER REGISTERS 2583 C5 PUSH B 2584 DB01 ITK: IN PORT 7GET THE READ PORT 2586 IF RAR MAG. SENSOR BIT TO CY JRC ITK 7 AIT FOR ACTIVE SENSOR 2587+38FB 7 WE WILL NOW DELAY UNTIL THE READ HEAD RΞACHΞS THΞ 7 BΞ GINNING OF THE TRACK . 7 2589 219501 LXI H , TCONST*3 ;ABOUT 5MS TO TRACK START 258C 23 DELAY : DCX H ? COUNT THΞ STEP 258D 7C MOV A, Ξ ? CHECK FOR DONE 258E B5 ORA L JRNZ DELAY 7LOOP TILL TIMEOUT 258F+20FB 7 WΞ WILL NOW MAP SAMPLES INTO RAM BUFFER. THE 3UFFΞR 7 IS QUITE LONG, AS. HΞ INPUT ROUTINE MAPS BΞTWΞΞN 5 ? AND 11 SAMPLES PER TRANSITION FOR LINE LENGTH OF 96 READ IN A 12K3 BUFFER FROM SCANNER. 2591 D302 j OUT FPORT 7 SEND PULSE TO FLAG PORT 2593 2F CMA ■ 2594 D302 OUT FPORT 2596 2F CMA 2597 D302 OUT FPORT 2599 210041 LXI H , INBUF ? SETUP DESTINATION POINTER 259C 0E00 MVI C RDPORT 7 SETUP I/O SOURCE POINTER. 259Ξ 0600 INLOOP: MVI 3,0 ' 7CLEAR TRANSFER COUNTER FOR 256 BYTES. OMPI SUBSTITUT KEPT 39 7 THIS SHOULD 3Ξ A 12K BUFFER. INIR NOP ΞNDM A0+ΞDB2 A2+00 A3+EDB2 OMPI " CP/M MACRO ASSΞM 2.0 . READ 11 READER SOFTWARE 10/23/80 AAJ (C) 1980 NLI 25A5+00 25A6+EDB2 25A8+00 25A9+ΞDB2 25AB+00 25AC+ΞDB2 25AΞ+00 * 25AF+ΞDB2 25B1+00 25B2+EDB2 25B4+00 25B5+EDB2 25B7+00 25B8+EDB2 253A+00 25B3+ΞDB2 25BD+00 25BΞ+ΞDB2 25C0+00 25C1+ΞDB2 25C3+00 25C4+ΞDB2 25C6+00 25C7+ΞDB2 25C9+00 25CA+ΞDB2 25CC+00 25CD+ΞDB2 25CF+00 25D0+EDB2 25D2+00 25D3+ΞDB2 OMPI SUBSTITUTE SHEET V/IPO 25D5+00 25D6+EDB2 25D8+00 25D9+EDB2 25DB+00 2SDB+EDB2 25DE+00 25DF+EDB2 25E1+00 25E2+EDB2 25E4+00 25E5+EDB2 25E7+00 25E8+ΞDB2 25EA+00 25EB+EDB2 25ED+00 25EE+EDB2 25F0+00 25F1+EDB2 25F3+00 25F4+EDB2 25F6+00 25F7+EDB2 25F9+00 25FA+EDB2 25FC+00 25FD+EDB2 OMPI CP/M MACRO ASSEM 2.0 i RΞAD11 READER SOFTWARE 10/23/80 AAJ (C) 1980 NLI 25FF+00 2600+ΞDB2 2602+00 2603+ΞDB2 2605+00 2606+ΞDB2 2608+00 2609+EDB2 260B+00 260C+ΞDB2 260E+00 260F+ΞDB2 2611+00 2612+ΞDB2 2614+00 2615 AF XRA A 7SEND END PULSE TO FLAG PORT 2616 D3Q2 OUT FPORT 2618 2F CMA- 2619 D302 OUT FPORT 261B 2F CMA 261C D302 OUT FPORT 261Ξ Cl POP B 261F Ξl POP H 2620 C9 RET SUBROUTINE GΞTLAST 7THIS SUBROUTINE IS IDENTICAL TO (AND IN FACT JUMPS 7TO) GΞT3IT WITH THΞ ΞXCΞPTION THAT IT DΞCODΞS BITS FROM THΞ BACK OF THΞ PIXEL BUFFER 7TOWARDS THE FRONT OF THE BUFFER. _OMPI 2621 C5 GETLAST:PUSH B 2622 D5 PUSH D 2623 4E MOV CM 2624 AF XRA A 7CLEAR CY. 2625 57 MOV D,A 7CLEAR HI HALF OF WORD 2626 3AA640 LDA LEN GET BIT LENGTH 2629 5F MOV Ξ,A 7TO COMPLETE THE WORD DSBC D 7SUBTRACT A BITLEI DISTANCE FROM HL. 262A+ED52 262C 22AE40 SHLD SAVHL 7EXPECTED POSITION OF NEXT TRANSISTION. JMPR GET3 7 GOT TO GETBIT CODE AND CONTINUE . 262F+180D SUBROUTINE GETBIT THIS ROUTINE IS A MORE SOPHISTICATED DECODING PROGRAM 7 TO ALLOW THE READING OF ASYMΞTRICAL DOT PATTERNS . 2631 C5. GETBIT: PUSH B SAVE B&C FOR USER 2632 D5 PUSH D ALSO O _Σ 2633 4E MOV C,M SAVE CURRENT POLARITY 2634 1600 MVI D,0 CLEAR HI HALF OF WORD 2636 3AA640 LDA LEN PLUS LENGTH COUNTER 2639 5F MOV Ξ,A COMPLETES THΞ WORD OMPI 263A 19 DAD D 263B 22AΞ40 SHLD SAVHL 7 EXPECTED NEXT BIT POSITION SUBSTITUTE SHEET OMPI__ CP/M MACRO ASSEM 2.0 1014 READll READER SOFTWARE 10/23/80 AAJ (C) 1980 NLI 263E 110100 GΞT3: LXI D,l ; SEARCH COUNTER IN D 2641 2B DCX H 7GET LAST CELL 2642 7E MOV A,M 2643 23 INX H 7POINT TO THIS CELL 2644 BE CxMP M ;SAME? JRNZ TFOUND 7JUMP IF SO 2645+202A 2647 3AA640 LDA LEN GET THΞ BYTE 264A IF RAR DIVIDE BY 2 2643 Ξ67F ANI 07FH DROP HI BIT 264D 47 MOV B,A THIS IS SEARCH DISTANCE 264E AF TRLOOP: XRA A CLEAR CARRY DS3C D 7SU3TRACT SEARCH LENGTH 264F+ΞD52 2651 2B DCX H 7GET LAST CELL 2652 7E MOV A,M 2653 23 INX H 7POINT TO THIS CELL 2654 BE CMP M 7SAME? JRNZ TFOUND 7JUMP IF SO 2655+201A 2657 19 DAD D 7TRY AHEAD SAME AMOUNT 2658 19 DAD D 2659 2B DCX H 7GET LAST CELL 265A 7E MOV A,M 265B 23 INX H 7POINT TO THIS CELL 265C 3E CMP M 7SAME? JRNZ TFOUND 7JUMP IF SO 265D+2012 265F AF XRA A 7ELSE CENTER IT UP DSBC D 2660+ΞD52 2622 1C INR Ξ 73UMP SEARCH LENGTH DJNZ TRLOOP 7 DO TILL TRANSISTION FOUND 2663+10E9 2665 2AAΞ40 LHLD SAVHL 7 PRΞTΞND THAT A LONG TRANSISTION WAS FOUND 2668 AF XRA A 7 IT HAS TO BΞ A ZERO , SO CY=0 AT RETURN . 2669 3D DCR A 7WΞ SET NON-ZERO FLAG TO INDICATE GARBAGE 266A 3E0O MVI A , 0 266C 37 STC 7 RESET CY 266D 3F CMC 266E Dl POP D 266F Cl POP B 2670 C9- RET 2671 3Ξ65 TFOUND : MVI A , ( ( INBUF SHR 8 ) + ( IN3LΞN SHR 8) ) 7CHBCK FOR TOP OF BUFF A SHOULD = 42H ÷ 30H = 72H 2673 BC CMP H 7ARE WE THERE YET? JRNZ T2 7JUMP IF NOT 2674+200D 2676 AF XRA A 7CLΞAR CARRY. 2677 57 MOV D,A 7FORM THΞ BIT LENGTH WORD 2678 3AA640 LDA LEN 7FROM STORED BYTE 267B 5F MOV E,A 267C AF XRA A DSBC D 7BACKUP HL BY ONE BITLENGTH. 267D+ED52 <-?* 17? I " -"?* OMPI 267F Dl POP D 7RESTORE REGISTERS 2680 Cl POP B 2581 3D DCR A 01 A=FF FOR 3UF OVERFLOW INDICATOR. 2682 C9 RET 2683 7Ξ T2 MOV A,M ;GET CURRENT POLARITY . OM?I CP/M MACRO ASSEM 2.0 #015 READll RΞADΞR SOFTWARE 10/23/80 AAJ (C) 1980 NLI 2684 B9 CMP C 7SAME AS OLD POLARITY? JRNZ ZERO 7JUMP IF ZERO 2685+2004 2687 37 SSTTCC ?RETURN WITH CY SΞT 2688 Dl POP D 2689 Cl POP B 268A C9 RET 268D AF ZΞRO: XXRRAA AA ?0 TO CY 268C Dl POP D 268D Cl POP B 268Ξ C9 RET SUBROUTINE GETFTA SUBROUTINE GETFTA RΞCOVΞRS THΞ FRONT TRACK ADDRESS 7 FROM INBUF. IF SUCCESSFUL, IT RΞTURNS WITH THΞ 7 ADDRESS IN THΞ A RΞGISTΞR, AND THΞ CARRY FLAG R SΞT. 7 IF UNSUCCESSFUL, IT RΞTURNS WITH THΞ CARRY FLAG 7 SΞT AND GARBAGΞ IN THΞ A RΞGISTΞR. 7 UPON SUCCESSFUL COMPLETION OF A ADDRESS FIND, IT WILL 7 ALSO STORE THΞ BEGINNING OF DATA AREA POINTER AT LSTART. SUBSTITUTE SHEET OMPI THIS ROUTINE STOMPS THE AF PAIR. 268F 3E0A GETFTA: MVI A, 3ITLEN?GET NORMAL LENGTH 2691 32A640 STA LEN 2694 C5 FTA : PUSH B 7 SAVE USER B &C 2695 D5 PUSH D 2696 E5 PUSH H 7 AND H&L 2697 0E40 MVI C , 64 7 LIMIT TO C REGISTER 2699 210041 LXI H , INBUF 7 PIXELS ARE HERE 269C 0608 LDR: MVI B , 8 7 FIRST WE GET AT LEAST 8 ZEROS IN A ROW 269E 0D LDR2 : DCR C COUNT LEADER LENGTH HRZ BADFTA KICK OUT IF TOO FAR 269F+2864 26A1 CD3126 CALL GETBIT 7 GET LEADER BIT JRC LDR 7 RESET COUNTER IF 1 FOUND 26A4+38F6 JRNZ LDR 7 OR IF GARBAGE B IT FOUND 26A6+20F4 DJNZ LDR2 7 LOOP FOR 8 ZEROS 26A8+10F4 26AA 48 MOV CB ; RESET COUNTER 26AB 0D LDR3 : DCR D 7 COUNT BITS JRZ BADFTA 7 KICK OUT IF TOO LONG 26AC+2857 26AE CD3126 CALL GETBIT LOOP TILL ONΞ FOUND JRNC LDR3 26B1+30F8 26B3 22AA40 SHLD POINTΞR ; SAVE POINTER IN CASE OF GARBAGE 2686 22AA40 PUSH H 7 LSO IN STACK 26B7 214040 LXI H , OUT3UF 7 GET THΞ FIRST 3 BYTES 3A Ξ3 XTHL 7TO OUT3UF BB 1E03 MVI E,3 / BD 0608 FTA1: MVI 3,8 ?8 BITS/BYTE BF CD3126 FTA2: CALL GETB: ET 7GET FTA TO D RALR D 7ONE BIT AT A TIME SUBSTITUTE SHEET CP/M MACRO ASSEM 2.0 #016 READll READER SOFTWARE 10/23/80 AAJ (C) 1980 NLI 26C2+C312 DJNZ FTA2 7TILL DONE 26C4+10F9 26C6 E3 XTHL 7OUTPUT POINTER 3ACK 26C7 72 MOV M,D 7PUT CHARACTER AWAY 26C8 23 INX H NEXT BUFFER POSITION 26C9 E3 XTHL INPUT POINTER BACK 26CA ID DCR E COUNT BYTE NO. JRNZ FTA1 LOOP TILL ALL BYTES FOUND 6CB+20F0 27CD E3 XTHL 7GET THE INPUT POINTER BACK 26CE El POP H 7RECOVER THE PIXEL POINTER ■ 26CF CD3126 CALL GETBIT 7THIS MUST BE A ONE JRNC FTA4 ?JUMP IF NOT 26D2+3036 26D4 0608 MVI B,8 7PLUS 8 ZEROS 26D6 CD3126 FTA3: CALL GETBIT 7 E WATCH FOR 8 ZEROS JRC FTA4 7JUMP IF A ONE FOUND 26D9+382F DJNZ FTA3 7LOOP FOR EIGHT ZEROS 26DB+10F9 26DD 22AC40 SHLD LSTART* 7STORE START OF DATA LINE 26Ξ0 114040 ADDONE: LXI D,OUTBUF 7THIS IS HAMMING BUFFER 26E3 626B MOV H,D 1 MOV L,Ξ 7IN AND OUT BUFFERS ARE THΞ SAME 26Ξ5 3Ξ02 MVI A,2 72' * .BYTΞ BLOCK TO DECODE 26Ξ7 32A540 STA H3YTΞS 26ΞA 3Ξ01 MVI A,l ?ONΞ SUCH BLOCK 26ΞC CD9727 CALL HAMCODΞ 7DECODE IT 26ΞF 3A4140 LDA OUTBUT+1 7GET THE BACKWARDS BYTE 26F2 0608 MVI 3,8 TURN IT RIGHT WAY AROUND 26F4 IF FTA5 : RAR 7SHIFT ONE BIT AT A TIME.. RALR D ? HROUGH CY TO D R GISTΞR 26F5+C312 DJNZ FTA5 26F7+10FB 26F9 3A4040 LDA OUTBUF 7GET FIRST 3YTΞ 26FC BA CMP D 7CHECK FOR CORRECT JRNZ FTA4 7JUMP IF GARBAGE 26FD+200B 26FF AF XRA A 7CLEAR CARRY FLAG 2700 7A MOV A,D ?PASS ADDRESS IN A RΞGISTΞR 2701 Ξl POP H ? RESTORE USER REGS 2702 Dl POP D 2703 Cl POP B 2704 C9 RET 2705 Ξl BADFTA: POP H 2706 Dl POP D OMPI 2702 Cl POP B 7RESTORE USDER REGS 2708 37 STC 7SHOW BAD FTA 2709 C9 RET 270A 2AAA40 FTA4 LHLD POINTER 7 RESET OUR MEMORY POINTER JMPR LDR 7 AND TRY AGAIN 270D+188D SUBROUTINE GETBTA 7 SUBROUTINE GETBTA RECOVERS THE BACK TRACK ADDRESS 7 FROM INBUF. IF SUCCESSFUL, IT RETURNS WITH THE CP/M MACRO ASSEM 2.0 #017 READll READER SOFTWARE 10/23/80 AAJ (C) 1980 NLI ? ADDRESS IN THΞ A RΞGISTΞR AND THΞ CARRY FLAG RESET. 7 IF UNSUCCESSFUL, IT RETURNS WITH THE CARRY FLAG SΞT AND GARBAGE IN THΞ A REGISTER. THIS ROUTINE REQUIRES THΞ EQUATE •■ PIXLΞN" WHICH IS 7 THΞ NUMBER OF BYTES FILLED WITH PIXELS FROM THΞ 7 START OF FILM TO THΞ Ξ D OF FILM. THIS IS INDΞPΞNDANT 7 OF DATA DΞNSITY, BUT CHANGES WITH CPU CLOCK FREQ. AND ALSO WITH WHΞΞL ROTATION SPΞΞD. THIS ROUTINE STOMPS THE ΞL PAIR AND THE AF PAIR. 270F 3E0A GETBTA: MVI A,BITLEN ?TRY ONE LΞSS 2711 3D DCR A 2712 32A640 STA LEN 2715 CD2027 CALL BTA 2718 DO RNC 2719 3AA640 LDA LEN 7OR ONE MORE 271C 3C INR A 271D 32A640 2720 C5 BTA: PUSH B 7SAVE USER B&C 2721 D5 PUSH D 2722 Ξ5 PUSH H 7ALSO H&L 2723 0Ξ40 MVI C,64 ; IMIT TO C RΞGISTΞR AS LIMIT 2725 210065 LXI H,INBUF+PIXLΞ ;END OF LINE IS HERE 2728 0608 BTA1: MVI B,8 7AT LEAST 8 ZEROS TO START OMPI SUBSTITUTE ' S 272A OD BTA2 DCR C COUNT BITS JRZ BADBTA 7 JUMP IF TOO FAR 272B+2860 272D CD2126 CALL GETLAST 7 GET NEXT B IT JRC BTA1 7 LOOP & RESET COUNT IF 1 FOUND 2730+38F6 JRNZ BTA1 7ALSO IF GARBAGE BIT FOUND 2732+20F4 DJNZ BTA2 7ELSE LOOP FOR 8 ZEROS 2734+10F4 2736 OD BTA3 DCR C 7 COUNT BITS JRZ BADBTA ? KICK OUT IF TOO MANY 2737+2854 2739 CD2126 CALL GETLAST 7 CHECK FOR FLAG JRNC BTA3 LOOP TILL FOUND 273C+30F8 273E 22AA40 SHLD POINTER 7 SAVE POINTΞR IN CASΞ WΞ GOT GAR3AGE 2741 E5 PUSH H 7ALSO IN STACK 2742 214040 LXI H ,OUTBUF ? HIS IS HAMMING BUFFER 2745 Ξ3 XTHL GET INPUT POINTΞR 2746 1Ξ03 MVI Ξ , 3 DO 3 BYTES 2748 0608 BTA0 : MVI B , 8 8 BITS/BYTE 274A CD2126 BTA4 : CALL GETLAST GET TRACK ADDRESS RALR D • TO D RΞGISTΞR 274D+CB12 DJZN BTA4 ONΞ BIT AT A TIME 274F+10F9 2751 E3 XTHL 7 OUTPUT POINTΞR 2752 72 2-iOV M,D 7SAVE THΞ RESULTANT BYTE 2753 23 INX H ;NEXT BUFFER POSITION 2754 Ξ3 XTHL ;GET INPUT POINTΞR 2755 ID DCR Ξ 7COUNT BYTE NUMBER JRNZ BTAO 7LOOP FOR 3 BYTES SUBSTITUTE SHEET - S * ~ Sδ m CP/M MACRO ASSEM 2 . 0 #018 READll READER SOFTWARE 10/23/80 AAJ ( C) 19 80 NLI 2756+20FQ 2758 Ξ3 XTHL 7 PIXEL POINTΞR TO STACK 2759 El POP H ' ?RECOVER PIXEL POINTER 275A CD2126 CALL GETLAST 7END FLAG THERE? JRNC BTA6 7JUMP IF END FLAG MISSING 275D+3033 275F 0608 MVI B , 8 ; E NEED 8 MORE ZEROS 2761 CD2126 BTA5 : CALL GETLAST 7GET NEXT BIT JRC BTA6 JUMP IF A ONE IS FOUND 2764+382C DJNZ BTA5 7LOOP TILL 8 ZEROS ARE FOUND 2766+10F9 2768 114040 LXI D , 0UT3UF 7 THIS IS HAMMING BUFFER 276B 626B MOV H,D I MOV L,E 7IN AND OUT BUFFERS ARE THE SAME 376D 3E02 MVI A,2 ?2 BYTE BLOCK TO DECODE 276F 32A540 STA HBYTES 2772 3E 01 MVI A,l 7ONE SUCH BLOCK 2774 CD9727 CALL HAMCODE ; DECODE IT 2777 3A4140 LDA OUTBUF+1 7GET THE BACKWARDS BYTE 277A 0608 MVI B,8 ?TURN IT RIGHT WAY AROUND 277C IF 3TA9 : RAR 7SHIFT ONΞ BIT AT A TIME-. RALR D ?THROUGH CY TO D RΞGISTΞR 277D+CB12 DJNZ BTA9 277F+10F3 2781 3A4040 LDA 0UT3UF ■ GET FIRST BYTE 2784 BA CMP D ;CHECK FOR CORRECT JRNZ BTA6 • JUMP IF GARBAGE 2785+200B 2787 AF XRA A ;CLEAR CARRY FLAG 2788 7A MOV A,D • PASS ADDRESS IN A RΞGISTΞR 2789 Ξl POP H . RESTORE USER REGS 278A Dl POP D 278B Cl POP 8 278C C9 RΞT 7 278D Ξl BADBTA: POP H 278Ξ Dl POP D 278F Cl POP B 7RΞSTORΞ USER 3SC 2790 37 STC 7SHOW BAD BTA 2791 C9 RΞT 2792 2AAA40 BTA6: LHLD POINTΞR GET THΞ OLD BUFFER POINTΞR JMPR BTA1 ?AND LOOP FOR NEW TRY 2795+1891 HAMMING ERROR CORRECTION DECODΞR MODULE THIS MODULE DECODΞS AND PERFORMS ERROR CORRECTION OMPI ON A ( 12 , 8 , 3 ) HAMMING CODE INTERLEAVED TO DEGREE 8 . THE INPUT IS A 12-BYTE STRING POINTED TO BY THE (HL) REGISTER . THE 8-BYTE OUTPUT STRING IS STORED AT (DE) . FOR MORE EFFICIENT MEMORY USAGE, (HL) AND (DE) MAY BE THΞ SAME BUFFER. THIS ROUTINE MAKES USE OF A IB-BYTE 10 WORKSPACE IN RAM, CALLED HMATRIX. THIS INTERMEDIATE WORKSPACE IS USED TO STORE DEMULTIPLEXED BUT UNCORRECTΞD BYTES. 15 THIS ROUTINE SHOULD BE CALLED WITH: THE INPUT BUFFER POINTER IN THE (HL) REGISTER, CP/M MACRO ASSEM 2.0 #019 READll READER SOFTWARE 10/23/80 AAJ (C) 1980 NLI 7 TEΞ OUTPUT BUFFER POINTΞR IN THΞ (DE) REGISTER, AND 7 THE NUMBER OF 12-3YTΞ BLOCKS TO DΞCODΞ IN TΞΞ A REGISTER 7 THIS ROUTINE RETURNS WITH THΞ NEXT INPUT BUFFER 7 ADDRESS IN THE (HL) RΞGISTΞR, THΞ NEXT OUTPUT BUFFER 7 ADDRESS IN THΞ (DE) REGISTΞR, AND THΞ A RΞGISTΞR CLΞARΞD TO 0. THIS ROUTINE STOMPS THE ALTERNATE ACCUMULATOR AS WELL 7 AS THΞ 3 AND C RΞGISTΞRS . HAMCODΞ:ΞXAF 7SAVE BLOCK COUNTER 2797+08 2798 D5 PUSH D 7SAVE OUTPUT ADDRESS IN STACK 2799 E5 PUSH H 7SAVE INPUT ADDRESS IN STACK 279A 21B640 LXI H,HMATRIX7CLΞAR THΞ WORKSPACE 279D 11B740 LXI D,HMATRIX÷1 27A0 010F00 LXI B,15 27A3 3600 MVI M,0 LDIR 27A5+ΞDB0 27A7 OΞOC MVI C,12 712 BITS TO UNSCRAMBLE 27A9 Dl POP D 7INPUT POINTΞR TO (DΞ) NOW 27AA 3AA540 LDA HBYTΞS 7HOW MANY TO DΞMUX? 27AD FΞ02 CPI 2 72 BYTΞ BLOCK? C -A SUBSTITUTE SHEET )M?I JRNZ DLOOP 7JUMP IF NOT 27AF+2020 THE FIRST STEP IS TO DEMULTIPLΞX THE INPUT BYTES. THE FOLLOWING ROUTINE PUTS THE RESULT OF THIS AT HMATRIX 27B1 21B640 DL: LXI H,HMATRIX?THIS IS RESULT BUFFER 27B4 3E04 MVI A,4 7CHECK FOR CORRECTION FIELD 27B6 B9 CMP C JRC D19 7JUMP IF NOT 27B7+3801 27B9 23 INX H 7 ELSE POINT TO CORRECTION BYTES 27BA 79 D19: MOV A,C 7 GET BIT COUNT 27BB Ξ603 ANI 3 7CHECK IF TIME FOR NEW BYTE JRNZ D18 7JUMP IF NOT 7BD+2003 7BF 1A LDAX D 7GET THΞ NEW ONE 7C0 13 INX D 7C1 47 MOV B,A 7NEW BYTE TO B D18:- RALR B 7SHIFT THE BITS OUT 7C2+CB10 RALR M 7TO MEMORY 7C4+CB16 7C6 2323 INX H 1 INX H?DO 2ND ONE RALR B 7C8+CB10 RALR M 27CA+C316 27CC OD DCR C 7CHΞCK FOR DONΞ JRNZ DL 27CD+20E2 JMPR HAMM 7THΞN FINISH UP 27CF+1819 27D1 21B640 DLOOP: LXI H,HMATRIX7RΞSΞT POINTΞR SUBSTITUTE SHEET Ol.-fPI CP/M MACRO ASSEM 2.0 #020 READll READER SOFTWARE 10/23/80 AAJ (C) 1980 NLI 27D4 3E04 MVI A,4 7CORRECTION FIELD BITS? 27D6 B9 CMP C JRC D9 7JUMP IF NOT 27D7+3803 27D9 21B740 LXI H,HMATRIX+1 ELSE RESET POINTΞR 27DC 0608 D9; MVI B , 8 BIT COUNT TO B 27DE 1A LDAX D GET THE NEXT BYTE 27DF 13 INX D BUMP POINTER 27E0 17 D2: RAL HI BIT TO CY RALR M TO MEMORY 27E1+CB16 27E3 2323 INX H 1 INX H TO NEXT OUTPUT BYTE DJNZ D2 7 UNTIL BYTE FINISHED 27E5+1QF9 27Ξ7 0D DCR C ? COUNT BIT NUMBER JRNZ DLOOP 7 LOOP TILL BLOCK DONE 27Ξ8+20E7 27EA EB HAMM: XCHG 7 INPUT POINTER TO HL 27EB Ξ3 XTHL 7 EXCHANGE FOR OUTPUT POINTΞR 27ΞC ΞB XCHG 7 POINTER TO (DΞ) 27ΞD 21B640 LXI H , HMATRIX 7 DEMUXED CODEWORDS ARE HERE 27F0.3AA540 LDA HBYTES 7 GET NUMBER OF BYTES TO DE-MUX 27F3 47 MOV B ,A ' 7 THIS COUNTER TO B 27F4 4E CORRECT -.MOVE C , M 7 GET NEXT 3YTE 27F5 Ξ5C5 HCODΞl: PUSH H ! PUSH 3 7SAVE USER REGISTERS 27F7 AF XRA A ? CLEAR FOR HAMMING fl UJ.1J 27F8 0608 MVI 3,8 78 BITS/BYTE 27FA 212A28 LXI H,HTABLΞ 7POINT TO ΞNCODING TA3LΞ HLOOP1: RALR C 7HI BIT OF CHARACTER TO CY 27FD+CB11 JRNC NOBITl 7JUMP IF NO BIT 27FF+3001 2801 AΞ XRA M ;RESIDUE ADD OF CODEWORD 2802 23 NOBITl: INX Ξ 7POINT TO NΞXT CODΞWORD DJNZ HLOOP1 7ΞNCODΞ ALL PARITY BITS 2803+10F8 2805 C1Ξ1 POP B 1 POP H RESTORE USER REGISTERS 280723 INX H ?POINT TO CORRECTION FIELD 2808 AΞ XAR M 7GET ERROR SYNDROME JRZ NOERROR 7JUMP IF DΞCODΞD CORRECTLY 2809+2812 280B Ξ5 PUSH H 7SAVΞ INPUT POINTΞR 280C 213228 LXI H,SYNDROM 7POINT TO CORRECTION TABLE 280F 85 ADD L ADD THE ' OFFSΞT 2810 6F MOV L,A 2811 3E00 MVI A,0 2813 8C ADC H 2814 67 MOV H,A 2815 79 MOV A,C 7 RECOVER THE MESSAGE BYTE 2816 AΞ XRA M 7CORRECT THΞ ΞRROR BIT(S) 2817 4F MOV C,A 7 RETURN CORRΞCTΞD BYTE 2818 21A940 LXI H,ERCOUNT 7 RECORD THΞ ΞRROR 281B 34 INR M 281C Ξl POP H 7 RESTORE INPUT POINTER 281D 23 NOΞRROR:INX H 7 NEXT INPUT 3YTΞ 281Ξ 79 MOV A,C 7 MOVE GOOD BYTE O OUTPUT 281F 12 STAX D CP/M MACRO ASSEM 2.0 #021 READll READER SOFTWARE 10/23/80 AAJ (C) 1980 NLI 2820 13 INX D DJNZ CORRΞCT 7UNTIL ALL DONE 2821+10D1 2823 Ξl POP H ?RESTORE INPUT POINTΞR ΞXAF 7RECOVER GROUP NUMBER 2824+08 2825 3D DCR A ?COUNT GROUP 2826 C29727 JNZ HAMCODE 7LOOP TILL DONE 2829 C9 RΞT 282A 0C0BQA0907HTABLΞ: DB OCH,OBH,OAH,09H,07H,06H,05H,03H 283 . 2 0000000100SYNDROM:DB 0,0,0,1,0,2,4,8,41H,10H720H,40H, 80H,28H,18H,22H SUBROUTINE CRLF SENDS A CARRIAGE RETURN AND A LINE FΞΞD TO THΞ CONSOLΞ DEVICE. 2842 0E0D CRLF: MVI CCR 2844 CD692C CALL CRT 2847 0E0A MVI C,LF 2849 C3692C JMP CRT 284C DB03 KBDSTATϊIN KBD 284Ξ 17 RAL JRNC CΞRWAIT ;JUMP IF CHARACTΞR WAITING 284F+3002 2851 AF XRA A 7ELSE RETURN W/ 0 " 2852 C9 RΞT 2853 AF CHRWAIT:XRA A 7SHOW CHARACTΞR WAITING 2854 3D DCR A 2855 C9 RET 2856 CD4C28 KBDWAIT:CALL KBDSTAT ?WAIT FOR INPUT JRZ KBDWAIT ,*THΞN FALL THRU OMPI 2859+28FB 285B CDB528 KBDIM: CALL STIMΞ 7 AIT FOR 3 MS TO LET BITS SETTLE 285E DB03 IN KBD THEN GET THE CHARACTER 2860 Ξ67F ANI 07FH 7DROP THΞ HI BIT 2862 C9 RET STΞPPER MOTOR CONTROLLER ROUTINΞS THESΞ ROUTINΞS ALLOW STΞPPΞR MOTOR CONTROL OUTTRK - STEP OUT ONE TRACK DISTANCE INTRK - STEP IN ONE TRACK DISTANCE SKEWINr NRLY 7INCREMENT SKEW COUNT 2863+FD 2864+2C IF HALFSTP CALL DOSTEP INRLY ΞNDIF JMPR DOSTΞP 7STEP IT OMPI CP/M MACRO ASSEM 2 . 0 #022 READll RΞADΞR SOFTWARE 10/23/80 AAJ (C) 1980 NLI 2865+180E SKΞWOUT:DCRLY 7DΞCRΞMENT SKΞY COUNT 2867+FD 2868+2D IF HALFSTP CALL DOSTΞP INRLY ENDIF JMPR DOSTΞP 2869+180A OUTONΞ: INRHY 7INCREMENT CARRIAGE COUNT 286B+FD 286C+24 DCXIX / • DECREMENT CARRIAGE POSITION 2S6D+DD2B JMPR DOSTΞP 286F+1804 INONΞ: DCRHY / • DECREMENT CARRIAGE COUNT 2871+FD 2872+25 INXIX /-INCREMENT CARRIAGE POSITION 28 3+DD23 DOSTΞP: EXAF ?SAVE THΞ ACCUMULATOR 2875+08 2876 CDB528 CALL STIMΞ 7WAIT FOR THΞ STΞPPΞR MOVALY ?GΞT THΞ SKEW COUNT * 2879+FD 287A+7D 287B CD8F28 CALL SBYTΞ • 7GET THΞ HI NYBBLΞ CODE 287E 8787 ADD A i ADD A 7*16 2880 8787 ADD A ! ADD A ΞXX 7STORE IN ALT D OMPI 2882+D9 2883 57 MOV D,A MOVAHY 7GET CARRIAGE COUNT 2884+FD 2885+7C 2886 CD8F28 CALL SBYTΞ GET THE LO NYBBLE 2889 32 SNYBLΞ: ORA D ADD THΞ HI NYBBLE ΞXX GET ORIG REGISTERS BACK 288A+D9 2883 D300 OUT STΞPPΞR 7SEND TO THE MOTORS EXAF /•RECOVER ACCUMULATOR 288D+08 288E C9 RET SBYTE: IF (NOT HALFSTP) 288F E603 AN 3 OD 4 FOR NORMAL STΞP ENDIF IF HALFSTP . ANI 7 7MOD 8 FOR HALF STΞP ENDIF JRNZ SI 7JUMP IF NOT STΞP 2891+2003 2893 3Ξ0AC9 MVI A,STEPO 1 RET 2896 3D SI: DCR A I JRNZ S2 2897+2003 2899 3Ξ06C9 MVI A,STΞP1 i RET CP/M MACRO ASSEM 2.0 #023 READll READER SOFTWARE 10/23/80 AAJ (C) 1980 NLI 289C 3D S2: DCR A I JRNZ S3 289D+2003 289F 3Ξ05C9 MVI A,STΞP2 I RΞT S3: IF HALFSTP DCR A ! JRNS S4 ENDIF 28A2 3Ξ09C9 MVI A,STΞP3 I RΞT IF HALFSTP S4: DCR A I JRNZ S5 MVI A, STΞP4 I RΞT S5: DCR A I JRNZ S6 MVI A,STEP5 I RET S6: DCR A I JRNZ S7 MVI A,STΞP6 I RΞT S7: MVI A,STΞP7 I RΞT ΞNDIF 28A5 0604 INTRK: MVI B,TRACK 7MOVE ONE TRACK DIS¬ TANCE 28A7 CD7128 STΞPIN: CALL INONE 7WΞ STEP CARRIAGE IN DJNZ STEPIN 7UNTIL FINISHED 28AA+10FB 28AC C9 RΞT 7 28AD 0604 OUTTRK: MVI B,TRACK 7MOVΞ ONΞ TRACK DIS¬ TANCE 28AF CD6B28 STΞPOUT:CALL OUTONE 7WE STΞP CARRIAGΞ OUT DJNZ STΞPOUT 7UNTIL FINISHΞD 28B2+10FB 28B4 C9 RΞT 7 7 SU3R0UTINΞ STIMΞ SETS THΞ STΞPPΞR MOTOR CLOCK DΞLAY. OMPI WIPO 28B5 F5 STIME: PUSH PSW SAVE THΞ ACCUMULATOR 28B6 Ξ5 PUSH H AND THΞ HL 28B7 219501 LXI H,STIMΞR TIME COUNTER TO HL 28BA 2B WAIT1: DCX H COUNT THΞ TIME 28BB 7C MOV A,H WATCH FOR 0 28BC B5 ORA L JRNZ WAITl LOOP_ TILL TIME UP 28BD+20FB 28BF El POP H ;RECOVER HL 28C0 Fl POP PSW ?RECOVER ACCUMULATOR 28C1 C9 RET SUBROUTINE EJΞCT SUBROUTINE EJΞCT CAUSΞS THΞ FILM TO BΞ HOMΞD TO ? THΞ FULLY "OUT" POSITION. 28C2 010407 EJΞCT: LXI B,STΞPS+20 yCOUNT TRACKS HΞRΞ 28C5 DB01 ΞJ1: IN PORT 7WATCH FOR SΞNSOR 28C7 17 RAL JRC ΞJ2 7CONTINUE IF NOT DONE 28C8+3806 LXIX 0 7CLEAR CARRIAGE POSI¬ TION RΞGISTΞR 8CA+DD21 ' CP/M MACRO ASSΞM 2.0 #024 RΞADll READΞR SOFTWARΞ 10/23/80 AAJ (C) 1980 NLI 28CC+000 28CE AF XRA A 28CF C9 RΞT 28DO CD6B28 ΞJ2: CALL OUTONΞ 7STΞP OUT 1 TRACK 28D3 OB DCX B 7COUNT TRACK # 28D4 78B1 MOV A,B i ORA C JRNZ ΞJ1 7TILL DONΞ 28D6+20ED 28D8 AF3D XRA A I DCR A 7SHOW BAD 28DA C9 RΞT SUBROUTINE HOMΞ SUBROUTINΞ HOMΞ CAUSΞS THΞ FILM TO: BΞ HOMED TO THE FULLY "IN" POSITION 28DB Ξ5 HOME: PUSH H SAVE USER HL 28DC 01F006 LXI B, STEPS COUNT STEPS HERE PUSHIX GΞT THΞ IX TO HL 28DF+DDΞ5 28Ξ1 Ξl POP H 28Ξ2 79 HOMΞ1: MOV A,C 7CHECK FOR DONΞ 28Ξ3 95 SUB L ? ' LO BYTΞ MATCH? JRNZ HOMΞ2 7CONTINUE IF NOT 28E4+2006 28Ξ6 7894 MOV A,B 1 SUB H 7HOWABOUT HI MATCH? JRNZ HOMΞ2 7CONTINUE IF NOT 28Ξ8+2002 29ΞA Ξl POP H 7RESTORE H 28ΞB C9 RET 28ΞC CD7128 HOME2 CALL INONE STΞP IN ONΞ STΞP OMPI 28ΞF 23 INX H 7COUNT IT JMPR HOME1 LOOP TILL DONΞ 28F0+18F0 7 SUBROUTINΞ CENTER INITS THE CARRIAGE POSITION 7 TO APPROX. TRACK 128 AND CΞNTΞRS THΞ SKEW MOTOR 7 TO THE CENTER OF ITS TRAVEL 28F2 CDC228 CENTER: CALL EJECT 7FULLY OUT POSITION 28F5 015E02 LXI B,FMARGIN+(64*TRACK) ?CARRIAGE DESTINATION ' 28F8 11EC00 LXI D,SKLIMIT÷20.7SKEW LIMIT 28FB 78B1 CLOOP: MOV A,B ! ORA C 7CHECK IF DONΞ WITH CARRIAGE JRNZ SK3 7JUMP IF NOT DONΞ YΞT 28FD+2007 28FF 7A MOV A,D 7CHECK SKEW ALSO REX 7,A 7CLEAR DIRECTION FLAG FOR TEST 2900+CBBF 2902 B3 ORA E 2903 C8 RZ 7RΞTURN IF BOTH DONE JMPR CDONΞ 7ELSΞ FINISH SKΞW 2904+1803 2906 0B SK3: DCX B 7COUNT THΞ CARRIAGE STΞP DCRHY 7BUMP THΞ STEPPER DRIVE COUNT 2907+FD 2908+25 CDONΞ: BIT 7,D 7ARΞ WE CENTERING THΞ SKΞW? 2909+CB7A JRZ SKI 7 JUMP IF STILL PINNING IT SUBSTITUTE SHEET OMPI CP/M MACRO ASSEM 2.0 #025 READll READER SOFTWARE 10/23/80 AAJ (C) 1980 NLI 290B+280F 290D 7B MOV A,Ξ 7CHΞCK FOR DONΞ 290E B7 ORA A JRNZ CLOOP1 7JUMP IF SKΞW NOT DONE 290F+2005 2911 CD7528 CALL DOSTΞP 7DO THΞ CARRIAGE STΞP JMPR CLOOP 7AND LOOP TILL COMPLETE 2914+18E5 2916 CD6328 CLOOP1: CALL SKEWIN DO CARRIAGE PLUS SKΞW 2919 ID DCR E DΞCRΞMENT THΞ COUNTER JMPR CLOOP TILL DONE 291A+18DF 291C IB SKI:DCX D ,-COUNT THE PIN DIREC¬ TION COUNTER 291D 7AB3 MOV A,D : ORA Ξ 7CHECK FOR PIN CYCLE DONΞ JRZ SK2 7JUMP IF FIRST HALF DONΞ 291F+2805 2921 CD6728 CALL SKEWOUT 7MOVΞ THΞ SKEW TO PINNED POSITION JMPR CLOOP 7LOOP TILL COMPLETE 2924+18D5 SK2:SΞTB 7,D 7SET 2ND HALF FLAG 2926+CBFA 2928 1E6C MVI E,SKLIMIT/2 7CΞNTΞRING COUNT TO Ξ JMPR CLOOP LOOP TILL DONΞ 292A+18CF SUBROUTINΞ GΞTCUR SUBROUTINΞ GΞTCUR FΞTCHΞS, DΞCODES, AND ΞRROR 7 CORRECTS THE CURRENT L NΞ (LINΞ POINTΞD TO BY CURLINΞ) . 7 IF THΞ INITIAL TRY AT DΞCODING IS UN- SUCCΞSSFUL, THΞ 7 ROUTINΞ WILL TRY A NUMBΞR OF DIFFΞRΞNT APPROACHΞS: 7 IT WILL TRY ÷-l and +-2 STΞPS FROM CΞNTΞR, AND ALSO 7 RΞ-SKΞW ADJUSTING THΞ FILM FOR THΞ CURRENT TRACK. 7 IF SUCCΞSSFUL, THIS ROUTINΞ RΞTURNS WITH THE LINΞ 7 AT OUTBUF AND THΞ CY FLAG RΞSΞT AND 0 IN THΞ A REGISTΞR. 7 IF UNSUCCΞSSFUL, IT WILL RETURN WITH CY SΞT AND ; NON-ZERO IN THΞ A RΞGISTΞR. OUTBUF WILL BΞ STOMPED 292C AF GΞTCUR: XRA A 7RΞSΞT THΞ SAFΞTY VALVE 292D 32A740 STA FUSΞ 2930 CD4029 CALL GC1 7TRY WITH NO SKΞW 2933 C8 RZ 2934 CD512B CALL SKΞW2 7ONLY IF WE EAVE TO 2937 CD412C CALL CΞFFΞCT 293A CD512B CALL SKΞW2 293D CD412C CALL CEFFECT 2940 AF GC1:XRA A 7RΞSΞT TRY NUMBΞR COUNTΞR 2941 32A440 STA TRYNO 2944 CD8225 WHERE: CALL INTRAK ?GΞT THΞ ADDRΞSS 2947 3AA740 LDA FUSΞ 7CHΞCK FOR GARBAGΞ LOOP 294A 3C INR A 294B 32A740 STA FUSΞ 294Ξ FΞ10 CPI 16 7ARE WE SICK? JR Z WARE 7JUMP IF NOT 2950+2004 2952 AF3D XRA A : DCR A ? SHOW BAD 2954 37 STC OMPI SUBS CP/M MACRO ASSEM 2.0 #026 READll READER SOFTWARE 10/23/80 AAJ (C) 1980 NLI 2955 C9 RET 2956 CD8F26 WARE: CALL GETFTA JRNC CURSE ,-JUMP IF ADDRESS FOUND 2959+3005 295B CD7128 CALL INONE 7STΞP CARRIAGE JMPR WHERE 7UNTIL TRACK ID FOUND 295Ξ+18Ξ4 2960 2AB040 CURSE: LHLD CURLINE WE SHOULD BE HERE 2963 95 SUB L OK? (OFFSET TO A) JRZ DEC1 DECODΞ PIXΞLS IF OK 2964+2832 2966 F27429 JP FAROUT ,-JUMP IF TOO FAR OUT NΞG ,-MAKΞ OFFSET POSITIVE 2969+ED 4 296B 4F MOV C,A / • COUNTER TO C 296C CDA528 GET1:CALL INTRK ,-GO OUT ONE TRACK DIS¬ TANCE 296F 0D DCR C 7COUNT OFFSET IN C REGISTΞR JRNZ GΞT1 / • LOOP UNTIL AT PROPER TRACK 2970+20FA JMPR GC1 ,-TRY AGAIN AT PROPER POSITION 2972+18CC 2974 4F FAROUT: MOV C,A / • COUNTER TO C 2975 CDAD28 GΞT2: CALL OUTTRK ,-GO IN ONE TRACK DIS¬ TANCE 2978 0D DCR C JRNZ GΞT2 ,-ϋNTIL THERE 2979+20FA JMPR GC1 7THEN RETRY AT PROPER PLACE 297B+18C3 297D 214040 DECODΞ: LXI H,OUTBUF ?THIS IS OUTPUT POINTER 2980 Ξ5 PUSH H ,-SAVΞ IN STACK 2981 2AAC40 LHLD LSTART 7GΞT START OF LINΞ 2984 0Ξ63 MVI C, (LLΞNGTH AND OFFH)+3 7LINΞ LENGTH COUNTΞR TO C 2986 0608 DX: MVI B,8 8 BITS/BYTΞ 2988 CD3126 Dl: CALL GΞTBIT GΞT NEXT BIT RALR Ξ PUT BYTE IN Ξ 298B+CB13 DJNZ Dl 7UNTIL DONΞ 298D+10F9 298F Ξ3 XTHL 7GΞT OUTPUT POINTΞR 2990 73 MOV M,Ξ 7COMPLΞTΞ BYTΞ TO MEMORY 2991 23 INX H ,-POINT TO NΞXT POSITION 2992 Ξ3 XTHL / • PUT POINTΞR BACK IN STACK 2993 OD DCR C ?COUNT BYTΞ # JRNZ DX ,-LOOP TILL WHOLΞ LINΞ DΞCODΞD 2994+20F0 2996 Ξl POP H 7FIX STACK 2997 C9 RΞT ?DONΞ 2998 CD7D29 DΞCl: CALL DECODE GET THΞ PIXΞLS IF BAMMING 299B 214040 LXI H,OUTBUF ,-POINT TO DΞCODΞD STRING 299Ξ 545D MOV D,H MOV Ξ,L 7 COPY TO DΞ 29A0 3Ξ08 MVI A,8 78 BYTΞ GROUPS 29A2 32A540 STA HBYTΞS 29A5 AF XRA A 29A6 32A940 STA ΞRCOUNT ?RΞSΞT HAMMING COUNT 29A9 3Ξ08 MVI A,GROUPS ?# OF HAMMING GROUPS TO A ' S UB S TITUTE CP/M MACRO ASSEM 2.0 #027 READll READΞR SOFTWARE 10/23/80 AAJ (C) I9S0 NLI 29AB CD9727 CALL HAMCODE ERROR CORRECT STRING ENDIF 29AE 3E02 MVI A,2 7CRC IS 2 BYTΞ GROUP 29B0 32A540 STA HBYTES 29B3 3Ξ01 MVI A,l ?ONE HAMMING GROUP 9B5 CD9727 CALL HAMCODE 7DECODE IT 9B8 2A8040 LHLD OUTBUF+(GROUPS*8) 7GΞT THΞ CRC WORD 9BB ΞB XCHG 7CRC IS IN DΞ ΞXX ?GΞT ALTΞRNATΞS 9BC+D9 9BD 210000 LXI H,0 ?CLΞAR CRC REGISTER ΞXX ?PUT THEM BACK 9C0+D9 IF HAMMING 9C1 0640 MVI B,(GROUPS*8) 7#OF RESULTANT BYTES IN B ELSE MVI B,LLENGTH 7THIS MANY BYTES ENDIF 9C3 214040 LXI H,OUTBUF 7POINT TO THΞ BYTΞS 9C6 7Ξ CRCLOOP:MOV A,M 7GΞT NΞXT BYTΞ 9C7 23 INX H / • BUMP COUNTER ? CRC SUBROUTINE 7 THIS SUBROUTINE COMPUTES THΞ 16-BIT CYCLIC RΞDUNDANCY 7 CHΞCK WORD USING TΞΞ STANDARD CCITT POLY¬ NOMIAL: 7 X A 16 + X Λ 15 + X Λ 13 + X Λ 7 + X Λ 4 + X 2 X + 1 7 THΞ INPUT BYTE IS PASSΞD IN THΞ A REGISTER, AND THΞ 7 NEW OUTPUT WORD IS STORED IN THΞ ALTΞRNATΞ H REGISTΞR. OMPI CRC:ΞXX 7 GΞT ALTΞRNATΞS 29C8+D9 29C9 4F MOV C,A SAVE NEW BYTΞ IN ALTERNATE C 29CA 7C MOV A,H 7LO BYTΞ OF CRC 29CB Ξ680 ANI 10000000B ?MASK FOR HI 3IT (Q BIT) ΞXAF ?SAVΞ STATUS IN ALTER¬ NATE F 29CD+08 29CΞ 29 DAD H 2 * R(X) 29CF 79 MOV A,C RECOVER THE NEW BYTΞ 29D0 85 ADD L ADD TO SHIFTED LO BYTΞ 29D1 6F - MOV L,A RESTORE NΞW BYTΞ ΞXAF RECOVER STATUS 29D2+08 JRZ QB2 ?JUMP IF Q BIT WAS ZΞRO 29D3+2808 29D5 7C QB: MOV A,H 7DO POLYNOMIAL IF Q BIT IS ONE 29D6 ΞΞAO XRI 10100000B ,-APPLY MSB OF POLY¬ NOMIAL 29D8 67 MOV H,A RESTORE 29D9 7D MOV A,L 7THEN APPLY LO BYTΞ 29DA ΞΞ97 XRI 10010111B 29DC 6F MOV L,A ?RESTORE QB2:ΞXX 7 STORE CRC WORD S RE¬ STORE REGISTΞRS 29DD+D9 DJNZ CRCLOO? 7CRC ON WHOLE LINE 29DE+10Ξ6 ΞXX / • RΞCOVΞR CRC REGISTER 29Ξ0+D9 OMPI CP/M MACRO ASSEM 2.0 #028 RΞADl.1 READER SOFTWARE 10/23/80 AAJ (C) 1980 NLI 29Ξ1 E5 PUSH H 7SAVE IN STACK EXX GΞT ORIGS BACK 29E2+D9 29E3 Ξl POP H 7CALCULATΞD CRC IN HL, / • RECEIVED CRC IN DE 29E4 AF XRA A ,-CLΞAR THE CY BIT DSBC D / • COMPARE THEM 29E5+ΞD52 29E7 7CB5 MOV A,H I ORA L 7ARE THEY THE SAME? 29Ξ9 C8 RZ / • RETURN IF GOOD 29ΞA 21A440 OHSHIT: LXI H,TRYNO ,-POINT TO TRY NUMBER COUNTER 29ΞD 7Ξ MOV A,M ?GET THIS VALUE 29EΞ 34 INR M 7UPDATE COUNTER TO NEXT VALUE 29EF B7 ORA A 7CHECK FOR 1ST PASS JRNZ BAD1 ,-JUMP IF NOT 1ST TIME THRU 29F0+2008 29F2 CD6B28 CALL OUTONE 7 OVΞ OUT 1 29F5 CD2A2A CALL TRYIT ?CHECK OUT THΞ LINΞ JMPR BAD1A 7GO TO NEXT TRY IF NO GOOD 29F8+1803 29FA 3D BAD1.-DCR A / • CHECK FOR TRY # 2 29FB+200A 29FD 0602 BAD1A:MVI B,2 ?MOVE IN 2 (NET IN ONE) 29FF CDA728 CALL STΞPIN 2A02 CD2A2A CALL TRYIT 7TRY AT ONE STΞP IN JMPR BAD2A 7DO NEXT RETRY IF BAD 2A05+1803 2A07 3D BAD2:DCR A 7CHECK FOR PASS #3 JRNZ BAD3 7JUMP IF NOT PASS 3 2A08+200A 2A0A 0603 BAD2A MVI B,3 73 STEPS OUT (NET OUT 2A0C CDAF28 CALL STΞPOUT ,-GO THΞRΞ 2A0F CD2A2A CALL TRYIT 7TRY AT TWO STΞPS OUT JMPR BAD3A ,-JUMP IF THIS TRY BAD 2A12+180C 2A14 3D " 3AD3:DCR A ?TRY FOR 4TH PASS JRZ BAD3A ?JUMP IF 4TH PASS 2A15+2809 2A17 0602 NOWAY: VI B,2 ,-CΞNTΞR THΞ CARRIAGΞ BACK UP 2A19 CDAF28 CALL STΞPOUT ?TO MIDDLΞ OF TRACK 2A1C AF3D XRA A I DCR A ?SHOW NON-ZΞRO 2A1Ξ 37 STC 2A1F C9 RΞT RΞTURN WITH NOTHING 2A20 0604 BAD3A:MVI 3,4 4 STΞPS IN(NET IN 2) 2A22 CDA728 CALL STΞPIN GO THΞRΞ 2A25 CD2A2A CALL TRYIT CHΞCK FOR GOOD LINΞ JMPR NOWAY KICK OUT IF NOT GOOD 2A28+18ΞD 2A2A CD8225 TRYIT:CALL INTRAK GΞT THΞ PIXΞLS 2A2D CD8F26 CALL GETFTA TRY FOR SYNC JRNC GOODFTA JUMP IF GOOD FTA IS FOUND 2A30+3001 2A32 C9 RET ,-CONT NUΞ f 2A33 Fl GOODFTA:POP PSW FIX TΞΞ STACK 2A34 C34429 JMP WHERΞ 7 TRY THΞ LINΞ HΞRΞ SUSSTϊTUT C''- ' -IS r 5_"*«» OMPI CP/M MACRO ASSΞM 2 . 0 # 029 READll READER SOFTWARE 10/23/80 AAJ (C) 1980 NLI 7 SUBROUTINE GOLINE 7 SUBROUTINΞ GOLINΞ GOΞS TO THΞ TRACK POINTΞD TO 7 BY THΞ (DΞ) RΞGISTΞR PAIR. 7 IF SUCCΞSSFUL, IT RΞTURNS WITH 0 IN THΞ A REGISTER 7 AND THE CY FLAG RESET. ? IF UNSUCCESSFUL(BAD TRACK NUMBER) IT RE¬ TURNS WITH 7 THE CY FLAG SΞT AND NON-ZΞRO IN THΞ A RΞGISTΞR. • 2A37 217701 GOLINΞ:LXI H,1500/TRACK ;MAX NUMBΞR OF LEGAL TRACKS 2A3A AF XRA A 7CL AR CY ... DSBC D 7FOR SUBTRACT 2A3B+ED52 BIT 7*,H 7DID WΞ GO NEGATIVE? 2A3D+CB7C JRZ GOODADD 7 JUMP IF NOT 2A3F+2802 2A41 3D DCR A SHOW BAD 2A42 C9 RET AND RETURN 2A43 2AB040 GOODADD:LHLD CURLINΞ GET CURRENT LOCATION 2A46 EB XCHG CURRENT LOC. IN DE, DESIRED IN HL 2A47 22B040 SHLD CURLINΞ / • SAVE DESIRED LOCATION AT CURLINΞ 2A4A EB XCHG 7SWAP BACK. 2A4B AF XRA A ?CLEAR THΞ CARRY BIT FOR DSBC D 716 BIT SUBTRACT 2A4C+ED52 BIT 7,H ,'ARE WE TOO CLOSE TO TRACK 0? 2A4Ξ+CB7C JRNZ Gθ2 7STΞP OUT IF TOO CLOSE 2A50+2009 2A52 7C35 GOl:MOV A,H I ORA L CHECK IF WE ARE THΞRΞ 2A54 C8 RZ DONΞ IF SO 2A55 CDAD28 CALL OUTTRK STΞP IN ONΞ TRACK DIS¬ TANCE 2A58 2B DCX Ξ 7COUNT THΞ STΞP JMPR GO1 LOOP TILL DONΞ 2A59+18F7 2A5B 7D GO2:MOV A,L ,-NΞGATΞ HL PAIR 2A5C 2F CMA 7BY COMPLΞMΞNT... 2A5D 6F MOV L,A 2A5Ξ 7C MOV A,H 2A5F 2F CMA 2A60 67 MOV H,A 2A61 23 INX H AND INCRΞMΞNT 2A627CB5 GO3:MOV A,H 1 ORA L CHΞCK FOR DONΞ 2A64 CS RZ RETURN IF FINISHΞD 2A65 CDA528 CALL INTRK GO OUT ONΞ TRACK DIS¬ TANCE 2A68 2B DCX H JMPR GO3 ?UNTIL WΞ ARE THΞRΞ 2A69+18F7 SUBROUTINΞ GΞTNUM SUBROUTINΞ GΞTNUM SEEKS TO A NUMBERED LINE POINTED 7 TO BE THE (DΞ) PAIR AND RΞTRIΞVΞS IT TO OUTBUF. 7 IF SUCCESSFUL, IT RETURNS WITH THE DATA AT OUTBU , 7 THΞ CY FLAG RΞSΞT AND 0 IN THΞ A RΞGISTΞR. 7 IF UNSUCCΞSSFUL, IT RETURNS WITH CY ΞΞT, NON-ZΞRO 7 IN THΞ A RΞGISTΞR AND GARBAGE AT OUTBUF. OMPI SUBST ' CP/M MACRO ASSEM 2.0 #030 READll RΞADΞR SOFTWARE 10/23/80 AAJ (C) 1980 NLI 2A6B CD372A GΞTNUM:CALL GOLINΞ ,-SΞΞK TO THΞ LINΞ 2A6E C32C29 KP GΞTCUR 7AND RΞTRIΞVE IT SUBROUTINE GETNXT SUBROUTINΞ GΞTNXT RΞTRIΞVES THE NEXT TRACK ON THE FILM. 7 IF SUCCESSFUL, IT RETURNS WITH THE CY FLAG RΞSΞT, ,- 0 IN THE A REGISTER, AND THE TRACK AT OUTBUF. 7 IF UNSUCCESSFUL, IT RETURNS WITH THΞ CY FLAG SET, 7 NON-ZERO IN THE A REGISTER AND GARBAGE AT ' OUTBUF. 2A71 2AB040 GETNXT:LHLD CURLINE GET THE LINΞ NUMBΞR 2A7 23 INX H GO TO NΞXT 2A75 EB XCHG TO DΞ 2A76 CD372A CALL GOLINE GO THERE 2A79 C32C29 JMP GΞTCUR AND GΞT IT SUBROUTINΞ SKΞW SUBROUTINΞ SKEW IS USED TO ROTATE THΞ FILM SO THAT THΞ TRACKS ARE PARALLEL WITH THE ROTATION OF THE READ HEAD, IF SUCCESSFUL, IT RETURNS WITH THΞ FILM POSITIONED OVER TRACK 0 THE ROTATION ADJUSTED, THΞ A REGISTΞR IS 0 AND THE CY FLAG IS CLEARED. OMPI IF UNSUCCESSFUL, THΞ A RΞGISTΞR CONTAINS A NON-ZΞRO AND THΞ CY FLAG IS SΞT. THΞ ROUTINΞ RUNS IN 4 PARTS: 1) THΞ CARRIAGΞ IS ΞJΞCTΞD, THΞ SKEW IS CΞNTΞRΞD, AND THΞ CARRIAGE IS ADVANCED TO APPROX. TRACK 128. 2) ROUGH SKΞW ADJUSTMΞNT IS DONE AT APPROX TRACK 7 128, AND THΞ CARRIAGΞ IS ADVANCED TO APPROX. TRACK 10. 3) FINE SKEW IS DONE AT APPROX TRACK 10 AND THΞ 7 FILM IS ADVANCED TO TRACK 1. ? 4) THΞ FILM IS ADVANCΞD A STΞP AT A TIME TO TRACK 7 0, AND FINAL SKΞW AND CARRIAGΞ ADJUSTMΞNT 7 IS DONΞ. 2A7C CDF228 SKΞ -.CALL CENTER 7INIT THΞ STEPPΞRS 2A7F 21182Ξ LXI H,SKTABLΞ 7POINT TO MIDDLΞ OF TABLE 2A82 22B240 SHLD SKADDR 7STORE THΞ TA3LΞ POINTΞR 2A85 21A400 LXI H, (8*16)+001001Q0B 7INIT TΞΞ BIT COUNTΞR 2A88 22B440 SHLD BITBYTE 7STORE THIS TOO 2A8B 210000 LXI H,0 7RESET THΞ TRACK COUNTΞR 2A8Ξ 22B040 SHLD CURLINE 2A91 CD512B CALL SKΞW2 ?ROUGH SKΞW AT TRACK 64 OMPI CP/M MACRO ASSΞM 2.0 #031 READll READER SOFTWARE 10/23/80 AAJ (C) 1980 NLI 2A94 CO RNZ 7RΞTURN IF SKΞW IM¬ POSSIBLE 2A95 7C MOV A,H FTA IN A 2A96 D60A SUI 10 LESS 10 TRACKS 2A98 5F1600 MOV Ξ,A I MVI D,0 ADDRESS TO DE 2A9B 210000 LXI H,0 CLΞAR RESULT RΞGISTΞR 2A9Ξ 0604 MVI B,TRACK TRACK WIDTH TO B 2AA0 19 SK5 :DAD D ADD TRACKS DJNZ SK5 UNTIL TOTAL STΞPS IN HL 2AA1+10FD 2AA3 59 MOV Ξ,C / • PLUS CARRIAGΞ OFFSET BIT 7,Ξ 7lS IT NEGATIVE? 2AA4+CB7B JRZ POS 7JUMP IF NOT 2AA6+2801 2AA8 15 DCR D 7TURN HI BYTΞ NEGATIVE 2AA9 19 POS :DAD D 7ADD THE CARRIAGE OFF¬ SET 2AAA CD6B28 SK6 :CALL OUTONE 7GOTO TRACK 10 2AAD 2B DCX H 7COUNT THE STΞPS 2AAE 7CB5 MOV A,H I ORA L ,-CHECK FOR DONE JRNZ SK6 7LOOP TILL THERE 2AB0+20FB t 2AB2 CD512B CAT,!, SKEW2 7FINE SKEW AT TRACK 10 2AB5 CO RNZ / • RETURN IF SKΞW NOT SUCCESSFUL 2AB6 AF XRA A / • CLEAR RESULT RΞGISTΞR 2AB7 25 DCR H ,-TRACK 1 DISTANCE LΞSS 1 2AB8 0604 MVI B,TRACK 7TURN INTO STΞPS 2ABA 84 SK0 :ADD H 7ADD TO GΞT TOTAL STΞPS DJNZ SKQ 2ABB+10FD 2ABD 3D DCR A 7LΞSS ONΞ STΞP 2ABE 47 MOV B,A 7COUNTΞR TO B OMPI 2ABF CDAF28 CALL STΞPOUT GOTO TRACK 1 2AC2 110000 LXI D,0 D IS FTA,Ξ IS 3TA 2AC5 CD6328 SK7:CALL OUTONB STΞP ONΞ CARRIAGΞ STΞP 2AC8 CD8225 CALL INTRAK 7GΞT PIXELS 2ACB 7A MOV A,D 7CHΞCK FOR FOUND AL¬ READY 2ACC B7 ORA A JRZ SK10 ,-JUMP IF NOT 2ACD+2803 2ACF 14 INR D 7BUMP OFFSET JMPR NOFTA 7LOOP FOR BTA 2ADQ+1809 2AD2 CD8F26 SK10:CALL GΞTFTA 7TRY FOR FTA JRC NOFTA ?JUMP IF NOT THΞRΞ 2AD5+3804 2AD7 B7 ORA. A 7PROPΞR TRACK _ JRNZ NOFTA 7JUMP IF NOT TRACK 0 2AD8+2001 2ADA 14 INR D ?SHOW WE GOT IT 2ADB 7B NOFTA:MOV A,Ξ 7CHECK IF WE GOT IT ALREADY 2ADC B7 ORA A JRZ SK11 7JUMP IF NOT FOUND YET 2ADD+2803 2ADF 1C INR E 7ADD OFFSET IF FOUND JMPR SK8 7LOOP FOR FTA 2AE0+1809 2AΞ2 CD0F27 SK11:CALL GΞTBTA 7TRY FOR BACK TRACK ADDRESS JRC SK7 ?JUMP IF NOT FOUND 2AΞ5+38DE UBSTITUTE SHEET OMPI CP/M MACRO ASSEM 2.0 #032 R ADll RΞADΞR SOFTWARE 10/23/80 AAJ (C) 1980 NLI 2AE7 B7 ORA A 7CHECK FOR TRACK 0 JRNZ SK7 ,-JUMP IF NOT TRACK 0 2AE8+20DB 2AEA 1C INR Ξ 7SHOW WE FOUND IT 2AEB 7A SK8:MOV A,D ,-CKECK IF WE GOT FTA TOO 2AEC B7 ORA A JRZ SK7 . 7JUMP IF WE NΞΞD FTA ALSO 2AED+28D6 ,-ΞLSΞ FALL THRU IF BOTH FOUND 2 EF 7A MOV A,D FTA TO A 2AF0 93 SUB Ξ OFFSET TO A JRZ SKDONΞ JUMP IF PERFΞCT 2AF1+280F 2AF3 FA382B ' JM SK9 JUMP IF OFF CCW 2AF6 47 MOV B,A SAVΞ THΞ BYTΞ 2AF7 AF XRA A CLΞAR CY TO SHOW CW ROTATION 2AF8 78 MOV A,B GΞT BYTΞ BACK 2AF9 CDD82B CW: CALL LOOKUP GΞT THE SKEW STEPS 2AFC 47 MOV B,A SKΞW OFFSΞT TO B 2AFD CD6328 SK12-.CALL SKΞWIN ADJUST SKEW DJNZ SK12 UNTIL CENTΞR D 2B00+10FB 2B02 0603 SKDONE:MVI B,3 ,-3 PASSΞS AT ΞND 2B04 CD8225 SKD:CALL INTRAK 7GΞT THΞ NΞW PIXΞLS 2B07 CD8F26 CALL GETFTA MAKE SURE WE GOT THERE JRC SKFTA ,-JUMP IF ΞRROR 2B0A+380D 2B0C B7 ORA A ? LSO CHΞCK FOR TRACK 0 JRNZ SKFTA 7THIS IS ALSO ERROR 2B0D+20OA 2B0F CD0F27 CALL BETBTA 7WE NEΞD THIS ONΞ TOO JRC SKFTA ?JUMP IF PROBLEM T OMPI 2B12+3805 2B14 37 ORA A 7OR IF NOT TRACK 0 JRNZ SKFTA 2B15+2002 2B17 AF XRA A ,-ΞLSΞ SHOW GOOD FINISH 2B18 C9 RΞT SKFTA:DJNZ SKR1 JUMP IF NOT LAST TRY 2B19+100C 2B1B CDA528 CALL INTRK ?IN TWO TRACKS 231Ξ CDA528 CALL INTRK 2B21 110000 LXI D,0 * 7AND DO IT AGAIN 2B2 C3C52A JMP SK7 SKRlrDJNZ SKR2 7JUMP IF NOT PASS 2 2B27+1009 2B29 CD6B28 CALL OUTONΞ ,-GO OUT NΞT ONΞ 2B2C CD6B28 CALL OUTONΞ 232F 04 INR B ?MAKΞ NΞXT ONΞ LAST PASS JMPR SKD 2B30+18D2 2B32 CD7128 SKR2:CALL INONΞ 7STΞP FOR 2ND PASS 2B35 04 INR B ?SET UP FOR 2ND PASS FLAG JMPR SKD 2B36+18CC SK9.-NΞG 7GΞT POSITIVΞ SKΞW DISTANCE 2B38+ΞD44 2B3A 47 MOV B,A 7SAVΞ THΞ 3YTΞ 2B3B AF3D XRA A I DCR A 7SΞT CY BIT TO SHOW CCW ROTATION 2B3D 78 MOV A,B 7RBCOVΞR VALUE _OMPI WIP CP/M MACRO ASSΞM 2.0 #( READll RΞADΞR SOFTWARE 10/23/80 AAJ (C) 1980 NLI 2B3E CDD82B CALL LOOKUP 7SKΞW STΞPS TO A 2B41 47 MOV B,A 7COUNTΞR TO B 2B42 CD6728 SK14:CALL SKΞWOUT 7ROTATE FILM CCW DJNZ SK14 7UNTIL DONE 2B45+10FB 2B47 79 SKl5:MOV A,C ?GET THΞ CARRIAGΞ CORRECTION 2B48 B7 ORA A 7DONΞ? JRZ SKDONΞ /•JUMP IF FINISHΞD 2B49+28B7 2B48 CD6B28 CALL OUTONE 7ELSE STΞP THE CARRIAGE 234Ξ OD DCR C ,-COUNT THΞ STΞP JMPR SKI5 7AND LOOP TILL DONΞ 2B4F+18F6 2351 110000 SKΞW2:LXI D,0 7CLΞAR BOTH COUNTERS 2B54 010000 LXI B,0 2B57 210000 LXI H,0 CLEAR VALID TRACK FLAG 2B5A CD8225 GΞT1ST:CALL INTRAK GΞT THΞ PIXELS 2B5D 7C MOV A,H CHECK IF WE GOT FRONT ADDRESS 2B5Ξ B7 ORA A JRNZ GΞTBAK ,-JUMP IF WE GOT A VALID ADDRESS 2B5F+2007 2B61 CD8F26 CALL GΞTFTA 7ΞLSE TRY FOR IT JRC GΞTBAK ,-JUMP IF NOT GOOD ADDRESS 2B64+3802 2B66 47 MOV B,A / • ELSE STORE IT IN B REGISTER 2B67 24 INR H ?SHOW GOOD FTA 2B68 7D GETBAK:MOV A,L ?DO WE HAVE BTA YET? 2B69 B7 ORA A JRNZ BAK2 7JUMP IF WE HAVE VALID BTA _pλffl 236A+2007 2B6C CD0F27 CALL GΞTBTA ?TRY FOR VALID BACK TRACK ADDRESS JRC BAK2 7JUMP IF INVALID ADDRESS 2B6F+3802 2B71 4F MOV C,A ,-ΞLSΞ STORE GOOD ADDRESS IN C 2B72 2C INR L / • SHOW GOOD 3TA 2B73 7C BAK2-.MOV A,H 7CHECK IF FIRST IS GOOD 2B74 B7 ORA A JRZ BAK3 ,-JUMP IF NO VALID FTA 2B75+2807 2B77 7D MOV A,L 7IS 3TA VALID? 2B78 37 ORA A JRNZ SKΞWDONΞ ,-JUMP IF WE HAVE 30TH 2B79+200D 2B78 14 INR D ?BUMP FTA OFFSET COUN¬ TΞR IF NO BTA JMPR BAK4* 7STΞP CARRIAGΞ AND TRY AGAIN 2B7C+1805 2B7Ξ 7C BAK3.-MOV A,H ,-CHΞCK FOR BTA GOOD 2B7F B7 ORA A JRZ BAK4 ,-JUMP IF NO VALID BTA 2B80+2801 2B82 1C INR Ξ 7BUMP THΞ BTA OFFSΞT COUNTΞR 2383 CD6B28 BAK4:CALL OUTONΞ ,-MOVΞ CARRIAGE ONE STΞP MORE JMPR GΞT1ST 7TRY AGAIN IN NEW POSI¬ TION 2B86+1802 / • NEITHER ONΞ IS GOOD 2B88 79 SKΞWDONΞ:MOV A,C 7BACK ADDRESS TO A 2B89 90 SUB B 7FIND THΞ OFFSΞT: FTA TO BTA JRNZ SKΞWYOU ,-JUMP IF NON ZΞRO TRACK OFFSΞT OMPI CP/M MACRO ASSEM 2 . 0 #034 READll READER SOFTWARE 10/23/80 AAJ (C) 1980 NLI 2B8A+200B 2B8C 4F MOV C ,A SAVΞ BYTΞ 2B8D 7AB3 MOV A , D 1 ORA Ξ ANY OFFSΞT AT ALL? JRNZ SKΞWMΞ JUMP IF SOMETHING 2B8F+2004 2B91 4F MOV C ,A 7SHOW NO CARRIAGE EFFECT 2B92 60 MOV H ,B *?GET FTA TO H RΞGISTΞR 2B93 78 MOV A,B 7AND TO A 2B94 C9 RΞT SKEWME :MOV A , C RECOVER 0 2B96 B7 ORA A SHOW WHAT IT IS 2B97 F5 SKΞWYOU : PUSH PSW SAVΞ THE POLARITY STATUS BIT 7 ,A / • NEGATIVE NUMBΞR? 2B98+CB7F JRZ BAKCCW ,- JUMP POLARITY OK 2B9A+2802 NEG 7TURN NUMBΞR POSITIVΞ 2B9C+ΞD44 2B9E 60 BAKCCW: OV H,B SAVE FTA IN H REGISTER 2B9F 0604 MVI B,TRACK STEPS/TRACK TO B 2BA1 4F MOV C,A OFFSET .TO C REGISTΞR 2BA2 3E00 MVI A,0 CLEAR RESULT REGISTΞR 2BA4 81 MULTI:ADD C ADD ΞM UP DJNZ MULT1 UNTIL MULTIPLIΞR GONE 2BA5+10FD 2BA7 93 SUB Ξ 7ADD OFFSETS 2BA8 82 ADD D 7TRACK ENDS ARE A STΞPS APART ,-ROTATΞD CW. (BTA CW FROM FTA) 2BA9 CDD82B CALL LOOKUP ,-TRANSLATΞ INTO SKΞW STΞPS IN A, CARRIAGΞ OFFSΞT IN C 2BAC FΞ6C CPI SKLIMIT/2 TOO FAR? 2BAΞ+3805 2BB0 Fl TOOBIG :?OP PSW 7 FIX STACK 2BB1 AF3D XRA A l DCR A 7 SHOW BAD SKΞW 2BB3 37 STC 2BB4 C9 RΞT 2BB5 47 SOK1 :MOV 3 , A ,- MOVΞ SKΞW COUNTΞR TO B 2BB6 Fl POP PSW 7 RECOVER DIRECTION STATUS JRC CCW2 7 JUMP IF ROTATION WAS CCW 2BB7+380Ξ 2BB9 CD6328 SKW: CALL SKΞWIN 7 ROTATE CARRIAGΞ CW DJNZ SKW ,- UNTIL PARALLΞL 2BBC+10FB 2BBΞ 79 MOV A, C 7 GΞT CARRIAGΞ OFFSΞT ΞXX ,-WΞ WILL SHOW 7 CW ROTA¬ TION AS - 2BBF+D9 2BC0 47 MOV B ,A 7 A NON- ZΞRO IN THΞ B RΞGISTΞR 2BC1 0Ξ00 MVI C O ? WITH THΞ C REG. CLEARΞD ΞXX 23C3+D 2BC4 AF XRA A ,- CLΞAR CY TO SHOW GOOD 2BC5 7C MOV A ,H / • RECOVER THE FTA 2BC6 C9 RΞT RΞTURN WITH CARRIAGΞ CORRECTION 7 IN C RΞGISTΞR, FTA IN A RΞGISTΞR 2BC7 CD6728 CCW2 :CALL SKΞWOUT ,- ROTATΞ CARRIAGΞ CCW DJNZ CCW2 ,- UNTIL PARALLΞL WITH HΞAD ROTATION 23CA+10FB 2BCC 79 MOV A,C 7 GΞT THΞ CARRIAGΞ POSITION ΞXX ?WΞ WILL SHOW CCW ROTATION OMPI SUBSTIT -"rr . _ V^r- . ιrI_.Pj * Ov « ; CP/M MACRO ASSΞM 2.0 #035 READll READER SOFTWARE 10/23/80 AAJ (C) 1980 NLI 23CD+D9 2BCΞ 4F MOV C,A ?BY NON-ZERO IN THΞ C RΞGISTΞR 2BCF 0600 MVI B,0 7CLEAR B REGISTΞR EXX 2BD1+D9 NEG ?MAKE IT NEGATIVE OFFSET 2BD2+ED44 2BD4 4F MOV C,A 7BACK TO C REGISTΞR 2BD5 AF XRA A 7CLEAR CY FOR GOOD RETURN 2BD6 7C MOV A,H / • RECOVER THE FTA TO A RΞGISTΞR BD7 C9 RET 7RΞTURN AS PER ABOVE »- 7 7 SUBROUTINE LOOKUP ; SUBROUTINΞ LOOKUP CONVERTS CARRIAGE STEP OFFSET (PASSED 7 IN THE A REGISTΞR) TO SKΞW STΞPS (IN THΞ A REGISTΞR) 7 AND CARRIAGΞ OFFSΞT CORRECTION (IN THΞ C RΞGISTΞR) . ? THΞ CALLING ROUTINΞ SHOULD SΞT TΞΞ CY BIT TO INDICATΞ 7 WHICH DIRECTION OF TRAVEL IS DESIRED. CY BIT SET INDICATES ; CCW ROTATION, WHILE CY BIT RESET (NO CY) INDICATES CW 7 ROTATION. IF UNSUCCESSFUL (IE: STEPPΞR OVΞRTRAVEL) , 7 THE ROUTINE WILL RETURN WITH THE CY SET AND NON-ZERO ? IN THΞ A RΞGISTΞR. BD8 B5 LOOKUP:PUSH H 7SAVE ALL _ ■„„-—. O 2BD9 D5 PUSH D 2BDA C5 PUSH B IF HALFSTP PUSH PSW 7SAVΞ STATUS RAR J ANI 7FH 7DIVTDΞ BY 2 MOV B,A 7SAVΞ HΞRE POP PSW 7RΞCOVΞR STATUS ΞNDIF 2BDB 2AB440 LHLD 3ITBYTΞ 7GΞT BREAKPOINT BYTΞ & BIT COUNTΞR 2BDB ΞB XCHG ?COUNTΞR TO D, BYTΞ TO Ξ 2BDF 2A3240 LHLD SKADDR 7GΞT TABLΞ ADDRESS POINTΞR JRC LOOKCCW 7JUMP IF CCW ROTATION 2BΞ2+383Ξ 2BΞ4 B7 ORA A / • CORRECTION RΞQUIRΞD? JRNZ LCW ?JUMP IF CW CORRECTION RΞQUIRΞD 2BΞ5+2013 2BΞ7 57 LDONΞ:MOV D,.A 7# OF STΞPS IN D 2BΞ8 Cl POP B 7USΞRS B RΞGISTΞR RE¬ STORED 2BΞ9 0ΞOO MVI CO CLEAR RESULT REGISTΞR 2BΞB D609 SUI 9 7GΞT FIRST HALF STΞP OF EFFECT JMPR LOOK0 7 EST IT _ ΞNTΞR LOOP 2BΞD+1802 IF NOT HALFSTP 2BΞF D613 LOOK4-.SUI 19 / • SUBTRACT ONΞ STΞP OF CARRIAGΞ ΞFFΞCT ΞLSΞ LOOK4:SUI 10 ΞNDIF LOOK0:JRC LOOKS 7JUMP IF WΞ ARE DONΞ 2BF1+3803 2BF3 INR C ?ADD THΞ CARRIAGΞ STΞP JMPR LOOK4 7LOOP TILL ALL FOUND OMPI 2BF4+18F9 23F6 7 A LOOK5:MOV A,D 7-RΞCOVΞR # OF SKΞW STΞPS TO A 2BF7 Dl POP D 7RΞCOVΞR OTHΞR USΞR RΞGS SUBS ~ ~" OMPI CP/M MACRO ASSΞM 2. 0 #036 RΞADll RΞADΞR SOFTWARE 10/23/80 AAJ (C) 1980 NLI 2BF8 Ξl POP H 2BF9 C9 RΞT 2BFA 47 LCW :MOV B ,A 7 CARRIAGΞ STΞPS TO 3 LCW1 : RLCR Ξ 7 BREAKPOINT BIT TO CY 2BFB+CB 03 2BFD CΞ03 ACI 3 7 PLUS STΞP CONSTANT DJNZ LOOK3 7 JUMP IF CARRIAGΞ STΞPS NOT DONE 2BFF+100A 2C01 22B240 LSAVΞ:SHLD SKADDR 7SAVΞ THΞ TABLΞ POINTΞR 2C04 626B MOV H,D I MOV L,Ξ 7GΞT THΞ BREAKPOINT BYTΞ & COUNTΞR 2C06 22B440 SHLD BITBYTE 7AND SAVE THEM TOO * JMPR LDONE 7FINISH UP & RETURN 2C09+18DC 2C0B 15 LOOK3:DCR D ?CHΞCK IF BREAKPOINT BITS DONΞ JRNZ CCW1 7JUMP IF BYTΞ STILL OK 2C0C+2015 2C0Ξ 1608 MVI D,8 ?RΞSΞT BIT COUNTΞR 2C10 2B DCX H 7TO NΞXT TABLΞ BYTΞ 2C11 5Ξ MOV Ξ,M 7GΞT IT ΞXAF ?SAVΞ THΞ SKΞW COUNT 2C12+08 2C13 3Ξ13 MVI A, (SKTABLΞ-S)AND OFFH ?ΞND OF TABLE ADDR. 2C15 BD CMP L 7WATCH TABLΞ POINTΞR JRZ LERROR ,-JUMP IF OUT OF TABLΞ RANGE 2C16+2803 ΞXAF 7RECOVER SKEW COUNT 2C18+08 JMPR LCW1 7AND CONTINUE 2C19+18Ξ0 2C1B C1D1Ξ1 LΞRROR:POP B ϊ POP D I POP H ,-RΞCOVΞR ALL 2C1Ξ AF XRA A 7GΞT 0 TO CARRIAGΞ CORRECTION OMPI SU 2C1F 4F MOV C,A 2C20 3D DCR A 7SHOW UNSUCCESSFUL TRY 2C21 C9 RET 2C22 47 LOOKCCW-.MOV B,A 7CARRIAGΞ STΞPS TO B CCW1:RRCR E / •BREAKPOINT BIT TO CY 2C23+C30B 2C25 CΞ03 ACI 3 7PLUS CONSTANT DJNZ LOOK8 LOOP TILL ALL STEPS DONE 2C27+1002 JMPR LSAVE 7THEN FINISH UP 2C29+18D6 2C2B 14 LOOK8:INR D 7CHECK BREAKPOINT BITS BIT 3,D ?DONΞ YΞT? 2C2C+CB5A JRZ CCW1 7LOOP IF BYTΞ STILL OK 2C2Ξ+28F3 BIT 0,D / • CHECKING FOR A 9 2C30+CB42 JRZ CCW1 2C32+28BF 2C34 1601 MVI D,l 7ΞLSΞ RΞSΞT COUNTER 2C36 23 INX H 7AND GΞT NEXT 2C37 5Ξ MOV B,M ΞXAF 7SAVΞ THE STEPPER COUNT 2C38+08 2C39 3Ξ1D MVI A, (DKTABLE+5) AND OFFH 7TOO FAR? 2C3B BD CMP L JRZ LERROR 7JUMP IF TOO FAR 2C3C+28DD OMPI CP/M MACRO ASSΞM 2.0 #037 RΞADll RΞADΞR SOFTWARΞ 10/23/80 AAJ (C) 1980 NLI ΞXAF 7RECOVER COUNT IF OK 2C3Ξ+08 JMPR CCWl ,-AND LOOP TILL DONΞ 2C3F+18Ξ2 SUBROUTINΞ CΞFFΞCT SUBROUTINE CΞFFΞCT MOVES THΞ CARRIAGΞ TO CORRECT 7 SKΞW MOTOR INTΞRACTION WITH ΞFFΞCTIVΞ CARRIAGΞ POSITION. CΞFFΞCT:ΞXX 7GΞT THΞ ALTΞRNATΞ REGISTERS 2C41+D9 2C42 78 MOV A,B 7CHΞCK FOR CW ROTATION (NΞΞDS IN) 2C43 B7 ORA A JRZ NOTCW ?JUMP IF NOT CLOCKWISΞ ROTATION 2C44+280A 2C46 79 CWLOOP:MOV A,C ,-CHΞCK FOR DONΞ 2C47 B7 ORA A JRZ CΞFDONΞ ,-JUMP IF SO 2C48+2810 2C4A 0D DCR C 7ELSE COUNT STEP 2C4B CD7128 CALL INONE STΞP THΞ CARRIAGΞ JMPR CWLOOP 7 ILL DONΞ 2C4Ξ+18F6 2C50 78 NOTCT * 7 :MOV A,B 7CHΞCK FOR DONΞ 2C51 B7 ORA A JRZ CEFDONΞ ,-JUMP IF SO 2C52+2806 2C54 05 DCR B 7COUNT THΞ STΞP 2C55 CD6B28 CALL OUTONΞ ,-MOVΞ THΞ CARRIAGΞ JMPR NOTCW ,*LOOP TILL DONΞ ' 2C58+18F6 CΞFDONΞ:ΞXX / • RESTORE NORMAL REGIS ΞRS 2C5A+D9 2C5B C9 RΞT SUBROUTINΞ CONPRNT THIS ROUTINΞ PRINTS A STRING TO THΞ CONSOLΞ. THΞ 7 STRING IS POINTΞD TO BY THΞ (DΞ) PAIR, AND IS TΞRMINATΞD ? WITH A 0 (NUL) 2C5C 1A CONPRNT:LDAX D GΞT THIS CHARACTΞR 2C5D 13 INX D POINT TO NΞXT 2C5Ξ B7 ORA A CHΞCK FOR TΞRMINATOR 2C5F C8 RZ RETURN IF DONΞ 2C60 CD652C CALL CHROUT SΞND CHARACTΞR OUT JMPR CONPRNT LOOP TILL DONE 2C63+18F7 2C65 4F CHROUT:MOV C,A 7CHARACTΞR TO PRINT TO C 2C66 C3692C JMP CRT 7TO THΞ CRT THIS MODULΞ IS A CRT DRIVER FOR THΞ MICRO- LINK 97098 7 CRT CONTROLLΞR CARD. AS SUPPLIED, IT WILL DRIVE THE 7 CARD AS SUPPLIED. IF YOU CHANGE THΞ MEMORY ADDRESS 7 JUMPΞR, IT WILL REQUIRE CHANGING THE BASΞAD ΞQUATΞ CP/M MACRO ASSΞM 2.0 #038 RΞADll RΞADΞR SOFTWARΞ 10/23/80 AAJ (C) 1980 NLI TO REFLECT THΞ NEW BASE ADDRESS OF THE CARD, UPON POWΞR-UP, THΞ FIRST CHARACTΞR SΞNT TO THIS ROUTINΞ SHOULD BΞ A SCREΞN CLEAR (1AH) . THIS IS TO INIT THΞ VARIOUS POINTΞRS AND ALSO SΞT UP TΞΞ MC6845 CRT CONTROLLER CHIP. E000 = BASΞAD ΞQU 0Ξ0OOΞ ?BOARD IS SHIPPED FOR 0A000H CHANGE THIS ΞQUATΞ IF YOU CHANGE 7THΞ BOARD ADDRESS JUMPER Ξ480 ~ SCRN ΞQU BASΞAD+ 8OH?SCRΞΞN LOCATION Ξ000 ADDRΞG ΞQU BASΞAD 7MC6845 ADDRESS RΞGI¬ STΞR. Ξ001 =. PARAM ΞQU BASΞAD+1 ,-PARAMΞTΞRS TO HΞRΞ 000Ξ = HCURSOR ΞQU 14 7THIS IS HI BYTΞ OF CURSOR FLAG 000F = LCURSOR ΞQU 15 / • THIS IS LO BYTΞ FLAG 7 Ξ400 -= FRΞΞRAM ΞQU BASΞAD+400H?WE USE SPARE CRT RAM FOR SCRATCH Ξ400 = CFLAG ΞQϋ FRΞΞRAM 7CURSOR ADDRESS MODΞ FLAG Ξ401 __; VPOS ΞQϋ FRΞΞRAM÷l 7CURSOR VERTICAL POSITION OMPI SUBSTITUT Ξ402 = HPOS EQU FREΞRAM+2 7 CURSOR HORIZONTAL POSITION Ξ403 = HLSAVΞ EQU FREΞRAM+3 7SAVΞ USΞRS H&L HERE E410 = LOCSTK EQU FRΞΞRAM+16 ,-LOCAL STACK HERE TOO 001Ξ = CURHOME EQU 1EH 7 CURSOR HOMΞ CHARACTΞR 0015 = NAK EQU 15H 7CLEAR TO ΞND OF LINΞ CHARACTΞR 0020 = SPACE EQU 2OH SPACΞ CHARACTΞR 0008 - BS EQU 08H BACK SPACE 001B = ESC EQU 1BH ESCAPE CHARACTER FOR CURSOR ADD. 000B = VT EQU OBH / • VERTICAL TAB (UP 1 LINΞ) 0009 = HT ΞQU 09H ,-HORIZONTAL TAB (ΞVERY 8 COLUMNS) 001A = CLR ΞQϋ 'Z'-40H ,-CONT-Z CLEARS SCRΞΞN THIS ROUTINE WILL EMULATE AN ADM3A TERMINAL OR AN IMSAI VIO VIDEO DISPLAY, INCLUDING CURSOR ADDRESS MODE AND ERASΞ-TO-ΞND-OF-LINΞ. 2C69 2203Ξ4 CRT: SHOULD HLSAVE PUT AWAY USΞRS H&L 2C6C 210000 LXI H,P CLEAR FOR REGISTER ADD 2C6F 39 DAD SP GET USΞRS SP 2C70 3110Ξ4 LSI SP,LOCSTK SET NEW STACK 2C73 79 MOV A,C MOVE CHARACTER TO A 2C74 Ξ5 PUSH H SAVE ALL REGS 2C75 D5 PUSH D 2C76 C5 PUSH B 2C77 F5 PUSH PSW 2C78 3A00Ef LDA CFLAG 7CHECK FOR CURSOR ADDRESS MODE 2C7B B7 ORA A 2C7C C204A2D JNC PRINT JUMP IF SO 2C7F 79 MOV A/C RECOVER CHARACTER 2C80 FE20 CPI SPACE IS IT PRINTABLE 2C82 D2582D JNC PRINT JUMP IF SO 2C85 FΞ15 CPI NAK CLEAR TO END OF LINΞ? 2C87 CAAΞ2D JZ LERASΞ JUMP IF SO 2C8A FΞ1Ξ CPI CURHOMΞ HOMΞ CURSOR? 2C8C CAF72C JZ CHOMΞ JUMP IF SO 2C8F FΞ09 CPI HT HORIZONTAL TAB? 2C91 CA9C2D JZ HTAB JUMP IF SO ΪΪJRE S UB S TITUT OMPI CP/M MACRO ASSEM 2.0 #039 READll READER SOFTWARE 10/23/80 AAJ (C) 1980 NLI 2C94 FΞOB CPI VT VERTICAL TA3? 2C96 CA782D JZ VTAB 2C99 FΞOD CPI CR CARRIAGΞ RETURN JRZ CR T JUMP IF SO 2C9B+2819 2C9D FΞOA CPI LF 7LINE FEED? JRZ LFΞΞD ? JUMP IF SO 2C9F+281C 2CAI FΞ08. CPI B ' S ?BACK SPACE? JRZ BACKSP ;BACK UP IF SO 2CA3+2828 2CA5 FΞ1B CPI ΞSC 7CURSOR ADDRESS MODE? JRZ CADDl 7 JUMP IF SO 2CA7+285A 2CA9 D61A SUI CLR SCRΞΞN CLEAR? JRZ CLΞAR CLR SCRΞΞN & RESET 2CAB+282D 2CAD Fl RETURN: POP PSW 7 RΞSTORΞ ALL REGISTERS 2CAB Cl. POP B 2CAF Dl POP D 2CB0 Ξl POP H 2CB1 F9 SPHL ?RETURN USERS SP 2CB2 2A03Ξ4 LHLD HLSAVΞ 7AND HL 2CB5 C9 RΞT 2CB6 AF CRΞT: XRA A GET 0 COLUMN 2CB7 3202E4 STA HPOS TO MEMORY 2CBA C3D62D JMP FINISH FINISH UP S UB 2CBD 2101Ξ4 LFΞΞD: LXI H,VPOS POINT TO ROW 3 2CC0 7# MOV A,M GΞT IT 2CC1 34 INR M NΞXT ROW 2CC2 FΞ17 CPI 23 LAST ROW? JRNZ LI JUMP IF NOT LAST ROW 2CC4+2004 2CC6 35 DCR M 7FIX FOR LAST ROW 2CC7 CDED2D CALL SCROLL 7PUSH UP SCRΞΞN 2CCA C3D62D LI: JMP FINISH ΞW ADDR. TO CRT CHIP 2CCD 3A02Ξ4 3ACKSP? LDA HPOS 7GΞT COLUMN POSITION 2CD0 B7 ORA A ,-CHΞCK FOR COLUMN 0 JRZ RETURN 7CAN'T BACKSPACE PAST MARGIN 2CD1+28DA 2CD3 3D DCR A BACK UP ONΞ POSITION 2CD4 3202Ξ4 STA HPOS PUT IN MEMORY 2CD7 C3D62D JMP FINISH TΞLL THΞ CRT CHIP ABOUT IT 2CDA 2180E4 CLΞAR: LXI H,SCRN 7CLΞAR THΞ SCRΞΞN 2CDD 1181Ξ4 LXI D ,SCRN÷1 2CΞ0 017F07 LXI B , (24 *80 ) -1 2CΞ3 77 MOV M,A ,*G TO MEMORY LDIR 2CΞ4+ΞDB0 2CΞ6 0610 MVI B,16 ,-WΞ MUST INIT. 16 RΞGISTΞRS SUBSTITUTE SHEET CP/M MACRO ASSΞM 2. 0 #040 READ 11 READER SOFTWARE 10/23/80 AAJ (C) 1980 NLI -__.- * * - * w 21U £ LXI H,INITBL 7POINT TO INIT.TABLΞ 2CΞB 79 INIT: MOV A,C 7GET THE COUNTER 2CΞD 3200E0 STA ADDREG 7TELL THΞ CHIP WHICH RΞGISTΞR 2CF0 7E MOV A,M GΞT THΞ TABLΞ VALUΞ 2CF1 3201Ξ0 STA PARAM TO THE CHIP 2CF4 23 INX H POINT TO NEXT TABLΞ VALUE DJNZ INIT LOOP TILL ALL DONΞ 2CF5+10F4 2CF7 AF CHOMΞ: XRA A 7GΞT 0 AGAIN 2CF8 2100Ξ4 LXI H,CFLAG 7POINT TO CURSOR ADDR. FLAG 2CFB 77 MOV M,A ?RΞSΞT IT 2CFC 23 INX H ,-POINT TO VERTICAL POSITION 2CFD 77 MOV M,A 7RE3ET IT 2CFΞ 23 INX H ? HEN HORIZ POSITION 2CFF 77 MOV M,A 2D00 C3D62D JMP FINISH 2D03 3E01 CADD1: MVI A,l / • SET CURSOR ADDRESS MODE 2D05 3200Ξ4 STA CFLAG JMPR RETURN 2D08+18A3 2D0A 3A00Ξ4 AMODΞ: LDA CFLAG 7GET FUNCTION # 2D0D 3D DCR A -/ • CHECK FOR 1 JRNZ Ml ;JUMP IF NOT 2D0Ξ+2019 _. OMPI 2D10 79 MOV A,C 7RΞCOVΞR CHARACTΞR 2D11 FΞ3D CPI '•= * 7CURSOR SΞQUΞNCΞ? JRNZ M2 ,-PRINT IF NOT 2D13+2007 2D15 3Ξ02 MVI A,2 7UPDATΞ MEMORY 2D17 3200Ξ4 STA CFLAG JMPR RETURN 2D1A+1891 2D1C AF M2: XRA A GΞT 0 2D1D 3200Ξ4 STA CFLAG RΞSΞT POINTΞR 2D20 79 MOV A,C RΞCOVΞR CHARACTΞR JMPR PRINT PRINT IT 2D21+1835 2D23 AF M9; XRA A 7 GΞT 0 2D24 3200Ξ4 STA CFLAG ? RΞSΞT FLAG JMPR RETURN 7 DONΞ 2D27+1884 • * 2D29 3D Ml; DCR A 7 CHΞCK FOR 2 JRNZ M3 ,- JUMP IF NOT 2D2A+2011 2D2C 79 MQV A,C GΞT VERTICAL VALUΞ 2D2D D620 SUI SPACE / • REMOVE BIAS JRC M9 7 ABORT IF ERROR 2D2F+38F2 2D31 FΞ18 CPI 24 7 CHΞCK IF TOO BIG JRNC M9 7 JUMP IF TOO 3IG 2D33+30ΞΞ SΞTB 7,A / • FLAG HI BIT CF IHES VALCΞ 2D35+C3FF 2D37 3200Ξ4 STA CFLAG ? SAVΞ FOR NEXT 2D3A C3AD2C JMP RETURN 2D3D 3A00Ξ4 M3: LDA CFLAG 7 GΞT - OLD VALUΞ 2D40 6F MOV L,A ? TO L REGISTΞR OMPI CP/M MACRO ASSEM 2. 0 #041 READ 11 RΞADΞR SOFTWARE 10/23/ 80 AAJ ( C) 1980 NLI RΞS 7 , L ? ILL BIAS 2D41+C3BD 2D43 79 MOV A,C GΞT NEW BYTΞ 2D44 D620 SU SPACΞ RΞMOVΞ BIAS JRNC M4 JUMP IF NOT TOO SMALL 2D46+3002 JMPR M9 7RΞSΞT & ΞXIT IF SMALL 2D48+18D9 2D4A FΞ50 M4: CPI 80 7TOO LARGΞ? JRNC M9 7JUMP IF SO 2D4C+30D5 2D4Ξ 67 MOV H,A SAVΞ IF OK 2D4F AF XRA A GΞT 0 2D50 3200Ξ4 STA CFLAG RΞSΞT CURSOR ADDRESS FLAG 2D53 2201E4 SHLD VPOS ;UPDATE TO MEMORY JMPR FINISH 7FINISH UP 2D56+187E ; 2D58 CDBF2D PRINT: CALL CURADD 7GET CURRENT ADDRESS 2D5B D620 SUI SPACΞ 7FIX CHARACTER FOR CRT 2D5D77 MOV M,A PRINT CHARACTER 2D5E 2101Ξ4 LXI H,VPOS POINT TO POINTERS 2D61 0C INR C NEXT COLUMN POS. 2D62 79 MOV A,C GET BYTE TO TEST 2D63 FΞ50 ' CPI 80 LAST COLUMN? JRNZ Pl JUMP IF OK 2D65+200D 2D67 0Ξ00 MVI C,0 CHANGE COLUMN 80 TO 0 2D69 7Ξ MOV A,M GΞT VERTICAL POINTΞR 2D6A FΞ17 CPI 23 AT BOTTOM? Q?.IFI JRZ P2 7 SCROLL IF SO 2D6C+2803 2D6Ξ 34 INR M 7 BUMP IT JMPR Pl 2D6F+1803 2D71 CDED2D P2: CALL SCROLL ?MGVΞ IT UP 2D74 23 Pl; INX H 7 POINT TO COLUMN LOCA¬ TION 2D75 71 MOV M,C 7 NΞW COLUMN # JMPR FINISH 7DONE 2D76+1S5Ξ 2D78 2101Ξ4 VTAB: LXI H,VPOS ,-POINT TO VERTICAL POSITION 2D7B 7Ξ MOV A,M 7GΞT POINTΞR 2D7C 37 ORA A 7CHΞCK FOR TOP OF SCRFΞN JRNZ VI ,-JUMP IF NOT TOP 2D7D+201A 2D7F 21AFE3 LXI H,SCRN+(23*80)-! ,- MOVΞ ■ IT DOWN 2D82 11FFΞB LXI D,SCRN÷(24*80)-1 2D85 013007 LXI B,23*80 LDDR 2D88+ΞDB8 2D8A 2180Ξ4 LXI H,SCRN ,-POINT TO FIRST LINΞ 2D8D 1181Ξ4 LXI D,SCRN+1 2D90 014F00 LXI 3,79 2D93 3600 MVI M,0 7CLΞAR FIRST LDIR / • 3LOCK MOVΞ DOΞS RΞST 2D95+ΞDB0 JMPR FINISH 7DONΞ 2D97+183D OMP CP/M MACRO ASSEM 2.0 #042 READ 11 RΞADΞR SOFTWARE 10/23/80 AAJ (C) 1980 NLI 2D99 35 VI: DCR M 7ONE ROW LESS JMPR FINISH 2D9A+183A 2D9C 2102E4 HTAB: LXI H,HPOS 7 GΞT HORIZONTAL POSITION 2D9F 34 HTAB1: INR M BUMP IT 2DA0 7E MOV A,M CHECK FOR TAB STOP 2DA1 FE50 CPI 80 TOO FAR? JRNZ HTAB2 JUMP IF OK 2DA3+2003 2DA5 35 DCR M 7FIX IT JMPR FINISH DA6+182E 2DA8 E607 HTAB2 ANI 7 7ARE WE OK? JRNZ HTAB1 7LOOP TILL FOUND 2DAA+20F3 JMPR FINISH ./ • SET IT & EXIT 2DAC+1828 2DAE CDBF2D LERASΞ; CALL CURADD GΞT ADDRESS 2DB1 79 MOV A,C THIS COLUMN # 2DB2 D650 SUI 80 SUBTRACT BIAS NΞG MAKΞ INTO POSITIVΞ NUMBΞR 2DB4+ΞD44 2D86 47 MOV B,A 7SET UP AS COUNTER 2DB7 3600 LOOP: MVI M,0 7 CLΞAR POSITION 2DB9 23 INX H POINT TO NΞXT DJNZ LOOP 7DO TILL END OF LINE OMPI 2DBA+10FB 2DBC C3AD2C JMP RETURN 7CURADD RΞTURNS THΞ CURRENT CURSOR ADDRESS IN (HL) 2DBF 2A01Ξ4 CURADD: LHLD VPOS GΞT HORIZ & VΞRT FLAGS 2DC2 4C MOV C,H SAVΞ HORIZ IN C 2DC3 2600 MVI H,0 CLΞAR HI BYTΞ 2DC5 1180Ξ4 LXI D,SCRN SCRΞΞN LOCATION IN DΞ 2DC8 29 DAD H *16 2DC9 29 DAD H 2DCA 29 DAD H 2DCB 29 DAD H 2DCC ΞB XCHG 7SWAP DΞ / HL 2DCD 19 DAD D ,-ASD * 16 TO BASΞ ADD, 2DCΞ ΞB XCHG ,-SWAP BACK 2DCF 29 * DAD H 7MAKΞ * 64 2DD0 29 DAD H 2DD1 19 DAD D ADD TO MAKE * 80 2DD2 0600 MVI B,0 CLΞAR HI BYTΞ 2DD4 09 DAD B ADD COLUMN POSITION 2DD5 C9 RΞT FINISH SΞTS THΞ CURSOR ADDRESS TO THΞ CURRENT RAM VALUΞS, THΞN ΞXITS TO RETURN TO THΞ USΞR. 2DD6 CDBF2D FINISH: CALL CURADD 7GΞT THΞ CURRENT ADDRESS IN (HL) 2DD9 11001C LXI D,-(SCRN-80H) -, REMOVE BIAS 2DDC 19 DAD D OMPI _ DDD 1100ΞO LXI D / ADDREG ;THIS IS CRT CONTROL¬ LER PORT DE0 E3 XCHG 7CRT CHIP AT (HL) , CURSOR ADD IN DE UTE " SHEET OMPI CP/M MACRO ASSΞM 2.0 =043 READ 11 READER SOFTWARE 10/23/80 AAJ (C) 1980 NLI 2DΞ1 360F MVI M,LCURSOR ;WΞ SΞND LO BYTΞ FIRST 2DΞ3 23 INX H POILNT TO PARAMETER PORT 2DΞ4 73 MOV M,Ξ LO BYTΞ TO CHIP 2DΞ5 2B • DCX H BACK TO ADDRESS PORT 2DΞ6 360Ξ MVI M, HCURSOR WΞ SΞND HI BYTΞ NOW 2DΞ8 23 INX H BACK TO PARAMETER PORT 2DΞ9 72 MOV M, D HI BYTE TO CHIP 2DΞA C3AD2C JMP RETURN THΞN ΞXIT 2DΞD 1180Ξ4 SCROLL: LXI D,SCRN ?TOP OF SCREΞN 2DF0 21D0Ξ4 LXI H,SCRN+80 72ND LINΞ 2DF3 013007 LXI B,23*80 LDIR ?MOVΞ IT 2DF6+ΞDB0 2DF8 62 MOV H,D ,-LOC OF LAST LINΞ 2DF9 6B MOV L,Ξ 7TO HL 2DFA 13 " INX D 7ONΞ MORΞ TO DΞ 2DFB 014F00 LXI B,79 ONΞ LINΞ LONG 2DFΞ 3600 MVI M,0 7CLΞAR FIRST CHAR LDIR 7BLOCK MOVΞ DOES RΞST 2Ξ00+ΞDB0 2Ξ02 C9 RET ? THIS IS THΞ INIT TABLΞ FOR THΞ CRT CONTROLLΞR. ,- THΞ VALUΞS RΞPRΞSΞNT THΞ 16 REGISTΞRS WHICH MUST BΞ SΞT UP FOR THΞ CRT CHIP TO FUNCTION. VALUE PORT # • "UNCTION OMPI E03 6B DB 80+27 7 0 HORIZONTAL TOTAL 2E04 50 DB 80 7 1 / • HORIZONTAL DISPLAYED CHARACTERS 2E05 55 DB 85 2 7 HORIZONTAL SYNC POSITION 2Ξ06 08 DB 08 7 3 / • HORIZONTAL SYNC WIDTH 2Ξ07 1A DB 26 7 4 /-VERTICAL TOTAL 2Ξ08 12 DB 12H ? 5 / • VERTICAL SCAN LINE ADJUST 2E09 18 DB 24 • 7VERTICAL DISPLAYED LINΞS 2Ξ0A 19 DB 25 7 7 ,-VERTICAL SYNC POSITION 2E0B 01 DB 1 7 8 ,-INTΞRLACΞ MODΞ FLAG 2E0C OB DB OBH 7 9 7MAX ' SCAN LINΞ ADDRESS 2Ξ0D 00 DB 0 7 10 / • CURSOR START LINE 2E0F OB DB Q,80H 7 11 7CURSOR END LINE 2E0-F 0080 DB 0,80H , • 12,13 ;THIS IS THΞ START¬ ING RAM ADDRESS Ξ11 0080 DB 0,80H ,-14,15 7THIS IS CURSOR POSITION PAGE CP/M MACRO ASSΞM 2 . 0 #044 READ 11 RΞADΞR SOFTWARΞ 10/23/80 AAJ (C) 1980 NLI RAM BUFFΞRS 2Ξ13 24 DB 001001003 SKΞW ADJUST 2Ξ14 A5 DB 101001013 / • BREAKPOINTS 2Ξ15 2A D3 00101010B 2Ξ16 AA DB 10101010B 2Ξ17 AB DB 10101011B 2Ξ18 56 SKTABLΞ:DB 0101011QB 2Ξ19 B6 DB 1Q110110B 2Ξ1A DB DB 110110113 2Ξ1B B7 DB 101101113 2Ξ1C 73 DB 01111011B 2Ξ1D 00 ROMΞND: DB 0 :THIS IS END OF ROM AREA 4000 ORG RAM 4000 DS 64 ? HIS IS STACK SPACΞ STACK: J 4040 OUTBUF: DS LLΞNGTH+4 7THIS IS OUTPUT 3UFFΞR t 40A4 TRYNO: DS 1 7RΞTRY FLAG 40A5 HBYTΞS: DS 1 ;HAMMING MUX COUNT 7 40A6 LΞN: DS 1 7BIT LΞNGTH COUNTΞR 40A7 FUSΞ: DS 1 7 THIS IS SAFΞTY VALVE 40A8 ΞRRFLAG : DS 1 7 THIS IS ΞRROR FLAG FOR RETRIEVES 40A9 ΞRCOUNT:DS 1 ? THIS IS HAMMING SCORE COUNTΞR 40AA POINTΞR :DS 2 ? LEADER/TAILΞR PIXEL* POINTΞR 0 AC LSTART : DS 2 ? LINE START ADDRESS 7 40AΞ SAVHL : DS 2 7 BIT POSITION STORAGE 40B0 CURLINΞ :DS2 / • CURRENT TRACK NUMBER t 40B2 SKADDR: DS2 7 SKEW TABLΞ ADDRESS POINTΞR STORAGΞ 40B4 BITBYTΞ:DS 2 / • BREAKPOINT BYTΞ & BIT COUNTΞR 40B6 HMATRIX :DS 16 / • HAMMING CODE WORK¬ SPACE 4100 ORG ($ AND OFFOOH) + 100 H 7 TO PAGE BORDER 4100 INBUF: DS INBLΞN ?12K BUFFER 6500 END START OMPI SUBS

Claims: CLAIMS : 1. Apparatus for reading a data record on which the data is inscribed in an arcuate pattern on a data carrier, comprising: a data carrier support for receivin g and holding a data carrier; a light source operable to emit a beam of light; beam directing means for receivinp and directing the beam of light toward the supported data carrier, including sweep means for moving the lisht beam across the data carrier in arcs corresponding to the arcuate pattern; and receiving means mounted to receive the light beam after the same strikes the data carrier. 2. The apparatus of claim 1, wherein-, said light source is fixed; and said beam sweep means is rotatably mounted. 3. The apparatus of claim 2, wherein: said light source is fixed to said rotatably mounted beam sweep means. 4. The apparatus of claim 1, and further comprising: a carriage mounting said data carrier support for movement radially of the arcuate pattern. 5. Apparatus for reading digital data which is inscribed in an arcuate pattern on a data carrier, comprising; a source of light operable to emit a bear. of light; mounting means mountin said light source and the data carrier for movement one relative to the other such that the beam of light impinges on the data carrier in accordance with the arcuate pattern and the data correspondingly modulates the beam of light; and light receiving means mounted to receive the modulated light beam and convert the same into electrical signals corresponding to the data carried bv the light beam. 6. The apparatus of claim 5, wherein said light BAD ORIGINAL - source comprises a laser. 7. The apparatus of claim 5, wherein said mounting means comprises: a frame; a carriage for holding the data carrier, said carriage mounted on said frame for movement radially of the arcuate pattern; and light beam directing means mounted on said frame for rotation to rotate the light beam for arcuate scanning of the* data carrier. 8. The apparatus of claim 7, wherein: said carriage includes a pivotally mounted data carrier support: first motor means connected to said carriage for moving the same in the racial direction of the arcuate pattern; and second motor means connected to said suptort for pivoting the same to correct fcr skew. 9. The apparatus of claim 7, wherein said light beam directing means comprises: a substantially disc- shaped member carrying said light source, said disc- shaped member rotatably mounted on said frame . 10. The apparatus of claim 7, wherein said light beam directing means, comprises: a member mounted on said frame for rotation; and an optical system for receiving the light beam and directing the- same alσ r* a path toward and which follows the arcuate pattern of the data carrier. 11- The apparatus of claim 10, wherein sai light source is mounted on said member, 12. The apparatus of claim 10, wherein: said light source is fixed on said frame; and said optical system includes the axis of rotation of said member, 13. The apparatus of claim 1Q, wherein: said carriage includes a reflective surface for supporting the data carrier and for reflecting the beam of light after passage through the data carrier; and said light PJ Λ OFUGINM, OMPI receiving means includes a light receiver mounted on said member. 14. The apparatus of claim 10, wherein said light beam directing means comprises a light directing member in said optical system mounted on said rotatable . member for movement in the radial direction with respect to the axis of rotation; and motor means connected to said light directing member and operable to move the same to compensate for manufacturing tolerances of the data carrier and for size changes due to ambient temperature. 15. The apparatus of claim 14. wherein said light directing means comprises a beam directing member and a pivotally mounted member carrying said beam directing member, and wherein said motor means comprises an output shaft coupled to pivot said pivotally mounted member. 16. The apparatus of claim 15, wherein said beam directing member comprises: a prism. 17. Apparatus for optically reading a data record having data inscribed on a data carrier in an arcuate pattern of parallel spaced-aoart arcuate data paths, comprising: a frame structure including a base plate and a rotatably mounted member mounted for rotation parallel to said base plate, and drive means for rotating said member; light beam generating means mounted on said frame structure and operable to emit a light beam; a carriage to carry the data record mounted on said frame structure for movement radially of the arcuate pattern of the data; carriage drive means mounted on said frame structure and connected to and operable to move said carriage in increments each equal to ' at least an equal division of the incremental distance between the data BADORIGINAL paths; beam directing means mounted on said rotatably mounted member to rotate therewith for directing the light beam alon arcuate paths, including beam adjustment means; and light beam receiving means mounted on said frame structure for receiving the light bear, after the same strikes and is modulated by the data record. 18. The apparatus of claim 17, and further comprising: a magnifier adapter mounted on and extending through said base plate for releasably receiving a magnifier as an aid in adjusting said bear- adjustment means for adjusting the light bear, to the * focal plane of said data record. 19. The apparatus of claim 17, wherein said carriage drive means comprises: a stepping motor mounted on said base plate and connected to said carriage. 20. The apparatus of claim 17, wherein said carriage includes a pivotally mounted data record sutncrt and further comprising: skew correction means connected to said data record support and operable to align the data record such that the arcuate path of the liquid beam has the same axis of rotation as the arcuate data paths of the data record. 21. The apparatus of claim 20, wherein said skew correction means comprises: a motor mounted on said carriage and coupled to said data record suppor . 22. The apparatus of claim 21, wherein said skew correction means further comprises: lever means pivotally mounted on said carriage and contacting said data record support; and an output shaft of said motor for moving said lever means. 23. The apparatus of claim 22, wherein said skew correction means further comprises: bias means &ADORIβlNAt '• - 132 - urging said data record carrier towards said motor, 24. The apparatus of claim 17, wherein said carriage comprises: guide track means mounted on said base plate; and wheel means roliingly supporting said carriage along said guide track. 25. The apparatus of claim 24, wherein said wheel means comprises: a plurality of guide wheels each engaging said guide track means; and a pluralit y of respective adjustable eccentric wheel mounting devices for adjusting the axis of rotation of said guide wheels with respect to said track. 26. The apparatus of claim 25, and further comprising: an additional wheel supporting said carriage on said base plate on the side of said carriage opposite said track means, 27. The apparatus of claim 26, and further comprising-, an additional "adjustable eccentric wheel mounting device mounting said additional wheel on said carriage and adjustable to level said carriage. 23. The apparatus of claim 17, wherein said carriage comprises: a data record support including a glass plate. 29. The apparatus of claim 23, -.."-herein, said glass plate comprises: a mirror. 30. .The apparatus of claim 28, and further comprising: a data record holding device on said data record support. 31. The apparatus of claim 30, wherein said data record holding device comprises: spring means. 32. The apparatus of claim 30, wherein said data record holding device comprises: a spring having a shape to engage at least one peripheral edge of the data record, 33. The apparatus of claim 30 , wherein s-aiπ data record holding device comprises: a spring havin g a shape to engage at least three peripheral edges of the data record. 34. The apparatus of claim 17, wherein: said light beam generating means and said beam directing means are both mounted on said rotatable member; and said carriage is mounted on said base plate. 35. The apparatus of claim 34, wherein said 0 beam directing means comprises: beam deflectin? means mounted and defining a beam path between said beam generating means and said beam adjustment means, said beam adjustment means including a lens, 36. The apparatus of claim 35, wherein said 5 beam deflecting means comprises • . mirror means 37. The apparatus of claim 35, wherein said beam deflecting means comprises: prism means. 38. The apparatus of claim 35, wherein said beam deflecting means comprises: prism means for 0 directing. the light beam towards said lens: and mirror means for directing the light beam towards said prisr means. 39. The apparatus of claim 34, wherein said beam generating means comprises: a source of coherent 5 light. 40. The apparatus of claim 39, wherein said source comprises: a laser device. 41. The apparatus of claim 17, wherein said light beam receiving means comprises: a first opto/ Q electronic transducer mounted on said rotatable member for converting the modulated light beam into first electrical signals; an electro/optical transducer mounted on said rotatable member, and connected to said first BAD ORIGINAL OMPI - - opto/electronic transducer for converting said first electrical signals into optical signals; an optical transmission line coupled to said electro/optical transducer and extending along the axis of rotation of said rotatable member; and a second opto/electronic transducer mounted coaxially of the axis of rotation of said rotatable member light coupled to said transmission line for converting said optical signals into second electrical signals. 42. The apparatus of claim 17, wherein said light beam receiving means comprises: a- first opto¬ electronic transducer mounted on said rotatable member for receiving and converting the modulated light beam into first electrical signals; a pulse shaping circuit carried on said rotatable member and connected to said first opto/electronic transducer for reshaping said first electrical signals into second electrical signals; an electro/optical transducer mounted on the axis of rotation of said rotatable member and connected to said pulse shaping circuit for converting said second ■ electrical signals into optical siεnals: and a second opto/electronic transducer mounted coaxially of the axis of rotation of said rotatable member light coupled to said electro/optical transducer for converting said optical signals into third electrical signals. 43. The apparatus of claim 17, wherein: said rotatably mounted member carries circuit components requiring first and second ranges of voltages; and shaft means mounting said rotatable member and including a slip ring structure for coupling said voltages of said first and second ranges between the fixed and rotating parts. 44, Apparatus for reading a data record on which the data is recorded on a data carrier in a plurality of spaced arcuate data paths, comprising: a frame including a base plate and a top plate secured together spaced apart and substantially parallel to one another, and a wheel rotatably mounted between said base and top plates; a wheel drive motor coupled to said wheel for rotating the same; carriage means mounted on said base plate for linear movement radially with respect to the arcuate data paths, including data record support means for supporting a data record; skew correction means coupled to said data record support means and operable to correct skew of the data record with respect to the linear movement thereof; beam generating means mounted on said wheel for rotation therewith, said beam generating means including a laser device operable to emit a coherent light beam; beam directing means mounted on said wheel for rotation therewith, said beam directing means including lens means for directing a light beam in an arc towards and across the supported data record, beam deflecting means for receiving and deflecting the light beam from said beam generating means to said lens means, and radius correction means including means ovably mounting said lens means and operable to move the same to correct the difference between the axes of rotation of said arcuate data paths and said wheel; beam receiving means for receiving the light beam after the same strikes and is modulated by the data record and converting the same into electrical signals representing the scanned data; and control means connected to said carriage means for incrementing said carriage means to said skew correction means for control- ling skew correction, to said radius correction means for controlling radius correction, and to* said beam receiving means for receiving and outputting said electrical signals. OMP " 45. The apparatus of claim 44, wherein said beam receiving means comprises.- shaft means rotatably mounting said wheel, including passageway means therein extending to and along the axis of rotation thereof to and exiting at one end thereof; and signal transmission means for transmitting signals through said passageway means to said one end of said shaft. 46. The apparatus of claim 45, wherein said signal transmission means comprises: a fiber optic extending through said passageway means; and an opto¬ electronic transducer light coupled to said fiber optic and fixed to said top plate axially of said shaft means and connected to said control means. 47. The apparatus of claim 45, wherein said signal transmission means comprises: electrical leads extending through said passageway means; and electro/. - optical transducer connected to said electrical leads for converting electrical to optical signals; and an opto/ electronic transducer light coupled to said electro/ optical transducer and fixed to said top- plate axially of said shaft means and connected to said control means. 4S. Apparatus for reading digital data from a data record on which the data is recorded in a plurality of spaced data rows, comprising: a light source operable to emit a light beam; beam directing means mounted to receive the light beam and cyclically sweep the beam over a path including a section corresponding to the extent of a data row; a movably mounted carriage for supporting the data record in the area of the beam sweep path; control means connected to said carriage and operable to incrementally move said carriage between beam sweeps of said segment; and light receiving and conversion means mounted to receive the light beam after - JΕET OMPI - - the same strikes the data record and is modulated by the data and operable to convert the modulated light beam into electrical signals corresponding to the data. 49. The apparatus of claim 48, wherein: said light source comprises a laser device for emitting a coherent laser light beam. 50. The apparatus of claim 49, wherein: said laser device is fixed; and said beam directing means comprises a rotatable member and beam directing members mounted to direct the light beam along the axis of rotation of said movable member. 51. The apparatus of claim 49, wherein: said beam directing means comprises a rotatable member and beam deflecting members carried on said movable member-, and said laser device is mounted on and rotates with said movable member. ' . 52. A method of reading data from a data record which has data inscribed on a data carrier in spaced data rows, comprising the steps of: mounting the data record on a carriage; incrementally moving the carriage corresponding to the spacing of the data rows; generating a light beam; cyclically sweeping the light beam over the data record along the row path to modulate the light beam with the inscribed data; and receiving and converting the modulated light beam into electrical signals representing the data. 53. The method of claim 52, wherein the step of generating a light beam is further defined as: generating a coherent light beam. 54. The method of claim 52, ' wherein the step of cyclically sweeping the light beam is further defined as : rotating the light beam in a circle. 5 * 5. The method of claim 52, wherein the step of - - cyclically sweeping is further defined as: directing the light beam over a path including a plurality of segments. 56. The method of claim 55, wherein the step of directing is further defined as: reflecting the lirht beam along parallel paths of different vertical position. 57. The method of claim 55, wherein the step of directing is further defined as: reflecting the light beam along a plurality of paths in horizontal and vertical planes. 58. The method of claim 52, wherein the step of receiving and converting is further defined as: shaping the electrical signals into defined pulses. 59. The method of claim 52, wherein the data record has a predetermined dimension in the direction of incremental movement, and further comprising the steps of: sensing changes in the predetermined dimension: and changing the length of the light beam path to compensate for dimensions differing from said predetermined dimension. 60. The method of claim 52, wherein the data record is to be incrementally moved with a predetermined orientation of the data rows , and further comprising the steps of: sensing the orientation of the data rows, and changing and correcting the orientation in response to sensing skew from said predetermined orientation. 61. A method of reading data from a data record which has data recorded on a data carrier in spaced arcuate data rows, comprising the steps of: incrementally moving the data record transversely of the data rows; projecting a light beam in a plane generally parallel to the plane in which the data record moves: rotating a deflection structure in.the plane of the light beam to deflect the light beam to travel substantially OMPI perpendicular to and be swept arcuately across the data record whereupon the data modulates the light beam; and receiving and converting the modulated light beam into electrical signals. 62. The method of claim 61, wherein the step of projecting a light beam is further defined as: generating a laser light beam and emitting the same in the plane generally parallel to the plane in which the data record moves. 63. The method of claim 61, and further comprising the step of: controlling the steps of incrementally moving the data record and rotating the deflection structure to provide incrementation equal to the data row spacing per revolution of the deflection structure. 64. A method of optically reading data from a data record which has data inscribed in a plurality of arcuate spaced rows having the same axis of rotation and borne on a substantially polygonal planar data carrier, comprising the steps of: rotating the data carrier about the axis of rotation of the arcuate data rows and in plane which is coplanar with its own plane; projecting a laser beam substantially perpendicular to the plane of rotation to strike and scan the data record to define a scanning arc corresponding to the arcs of the data rows; incrementally moving the scanning arc in steps of at least the spacing from one data row to the adjacent data row to modulate the laser beam with scanned data; and receiving and demodulating the modulated laser beam to recover the data. 65. An information record comprising: a body; and digital information carried on said body in arcuate rows, said rows of digital information having the same HEET radius and disposed in a spaced-apart nested arrangement. 66. The information record of claim 65, wherein: said body is a photographic film and said digital information comprises transparent portions of the film. 67. The information record of claim 65, wherein: said body is a photographic film and said digital information comprises opaque portions of the film. 68. The information record of claim 65. wherein- said body is a photographic film and said digital 0 information comprises opaque-to-transparent and transparent-to-opaque transitions of the film. 69. The information record of claim 65. wherein: said body is substantially opaque; and said digital information comprises reflective areas on said body. 5 70. The information record of claim 65, wherein: said body is substantially reflective and comprising non- reflective areas on said body to provide reflective-tc-non- reflective transitions representing the digital information. _0._ 71. The information record of claim 65, wherein: said body is substantially non-reflective and comprising reflective areas on said body to provide nσn-reflectivε- to-reflective transitions representing the digital information. 5 72. An information record comprising: a body of photographic film; and a plurality of arcuate rows of digital information borne by said body, said digital information comprising transitions between opaque and transparent areas and said rows being spaced and nested 0 and having equal radii. 73. An Information carrier comprising: a body of substantially non-reflective material, and reflective areas carried by said body in equal radii, arcuate, nested rows and constituting at the transitions between reflective and non-reflective areas, digital information. 74. An information carrier comprising: a body of substantially reflective material, and non- reflective areas carried by said body in equal radii , arcuate, nested rows and constitutin at the transitions between reflective and non-reflective areas, digital information. 75. An information record comprising a carrier of a material having a first light transm.issive characteristic: rows of marks carried on said carrier, said rows being spaced apart and each of said rows extending in an arcuate manner and having the same radius as the other rows; and each of said marks having a seconc light trans issive characteristic which is different from said first light transmissive characteristic to therewith define digital data. 76. The information record of claim 75, wherein: said first light transmissive characteristic is greater than that of said second light transmissive characteristic, the differences defining the digital data. 77. The information record of claim 75, wherein: said second light transmissive characteristic is greater than that of said first light transmissive characteristic , the difference defining the digital data. 78. The information record of claim 75, wherein: the transitions between the first and second light transmissive characteristics of said carrier and marks constitutes the digital data. 79. The information record of claim 75, and further comprising: a header along one edge of the carrier, said header bearing visually perceptible information related to the digital data of said rows of marks. ^\- _,Λ __ _ SHEET OMPI

Inventors: ACKERMAN RICHARD C, HURLBUT DONOVAN H, JEWER ALAN A
Applicants: ACKERMAN RICHARD C, HURLBUT DONOVAN H, JEWER ALAN A
Application year: 1981
Main classification: G11B7
IPC codes: G06K7, G06K19