IMD 1.17: 3/01/2010 9:25:59 dosplus 3.4   A     -1/29/85REV -GENSYS DOC$-GENSYS MORB BIGBOARDDOC BOOT5 ASM& BOOT5 HEXBOOT5 PRN7BOOT560 HEXBOOT5Q HEXBOOT8 ASM&BOOT8 HEXBOOT860 HEXCOPY5 COM2CRC COM !CRC DOC"CRCKLISTCRC #1/29/85 REV. (BG)- REPLACED FORMATX.COM WITH FORMAT5M.COM REPLACED 4MHZFMT.COM WITH FORMAT4M.COM (DO NOT USE FOR 5 MHZ.) FORMAT5M.COM IS FOR SYSTEMS OPERATING AT 5 MHZ. OR FASTER FORMAT4M.COM IS FOR SYSTEMS OPERATING AT 4 MHZ. (ONLY 4 MHZ.) THESE ARE ONLY NECESSARY FOR 8" DOUBLE DENSITY, EITHER WILL WORK AT LOWER CLOCK RATES FOR OTHER FORMATS. 1/16/85 REV. (BG)- ADDED BIGBOARD.DOC AND VER2ROM.DOC TO DISK 1/11/85 REV.(BG)- CORRECTED GEN860.SUB OFFSET WAS: R2980 CORRECTED TO: R3580 CHANGED FD COM$%DRMOVCPMSUB&ERRATA DOC'(EX14 COM)*FORMAT4MCOM2+,-.FORMAT5MCOM2/012GEN5 SUB3GEN560 SUB 4GEN5Q SUB5GEN860 SUB 6GEN8D SUB7GEN8S SUB 8SYSGEN5 COM9SYSGEN8DCOM:SYSGEN8SCOM;TERMINALDOC<=ROM: MOVCPM 63 * TO: SYSGEN A ADDED COMMENTS WITH INSTRUCTIONS TO ALL GEN.SUB FILES ADDED MORE COMMENTS TO BOOT.ASM FILES AND REASSEMBLED ADDED COPY5.COM PROGRAM TO DISK. RAN NEW CRC CHECK LIST 1/8/85 REV. (BG)- CORRECTED GEN560.SUB OFFSET WAS: R2980 CORRECTED TO:R3580 11/25/84 (BG)- MAJOR CHANGE: DELETED 'U' AND 'T' OPTIONS FROM XBIOS.HEX FILES. REASSEMBLED ALL HEX FILES USING 'CONST TIMEOUT' METHOD. ADDED LONG TIMEOUT CAPABILITY TO THIS CONVENTION CHANGED SERIAL PRINTER VER2ROM DOC>?WHATDOI GET@X AX8VER206OBJ BCXBIOS5 AZM{DEFGHIJKXBIOS5 HEXLMXBIOS560HEXNOXBIOS860HEXPQXBIOS8D HEXRSXBIOS8S HEXTUXBIOS8S PRN^VWXYZ[\]^_`abc  PORT TO 'B' SIDE OF SIO (PRINTER PORT). CHANGED ALL GEN.SUB FILES TO CORRESPOND TO THE NEW FILE NAMES. UPDATED -GENSYS.MOR TO REFLECT CHANGES. RAN NEW CRC CHECK LIST REASON FOR CHANGE: OLD SYSTEM WAS MUCH TOO COMPLICATED 10/24/84 REV. (BG) ADDED -GENSYS.MOR FILE FOR BETTER EXPLANATION OF SYSGEN PROCESS ADDED XBIOS8S6.HEX, BOOT86.ASM,(HEX), GEN8S6.SUB, XBIOS56.HEX BOOT56.HEX, AND GEN56.SUB FILES FOR PEOPLE WITHOUT MOVCPM.COM  disk in drive B. Log on to drive B by entering B:. Now enter: EX14 GEN8S to create an 8 inch system disk or EX14 GEN5 to create a 5 1/4 inch system disk (If you've already booted a single density 8 inch XPRO system and want to make an 8 inch double density system disk, first format a disk in b: with FORMATX, then put all the afore mentioned files on the disk in b (with pip) log onto b as above and enter EX14 GEN8D ) The disk in b: will be sysgened with the new XPRO syst which are used to create and maintain your new system. SYSGEN8D.COM sysgen program for 8 inch double density SYSGEN8S.COM sysgen program for 8 inch single density SYSGEN5.COM sysgen program for 5 1/4 inch double density FORMATX7.COM formatting program to create any of the supported disk formats GEN8S.SUB submit program for creating 8 inch single density system GEN8D.SUB submit program for creating 8 inch double density system GEN5.SUB submit program for creating 5 1/4 inch, 48 TPI, syst and write double density on your other drives even if you boot a single density disk. You should be able to generate an 8 inch single density system disk on any system running single density 8 inch CP/M, but remember that the CP/M that is made will be constructed from the CP/M that is running on the system at the time. A system track can also be made using one of the DISK UTILITIES, but this is something that requires some experience using the disk utility. If you are presently running a Kem. A couple of 'gotcha's' need to be mentioned here. If you have the MOVCPM from Digital Research of Texas (the big board people) you will need to enter: EX14 DRMOVCPM.SUB ********************************************************************** ************************ Only do this once! ********************** *** And only if you have a 60K CP/M from DIGITAL RESEARCH of Texas *** ********************************************************************** This will patch your MOVCPM program to orem GEN5Q.SUB submit program for creating 5 1/4 inch, 96 TPI, system GEN560.SUB submit program for creating 5 1/4 inch, 48 TPI, 60K system GEN8S60.SUB submit program fro creating 8 inch SD, 60K system EX14.COM a public domain replacement for SUBMIT The source for the BIOS is in XBIOSx.AZM which may be assembled with M80 or the Z80MR macro assembler from Micro Cornucopia (user disk K25- $12.00 503-382-8048). The file BOOT.ASM is an image for the first sector of the system tracks and must be editedaypro, you will be able to create a 5 1/4 inch system disk and boot that in the Xerox on a 5 1/4 inch drive. The first thing you must do is assemble BOOT.ASM (after editing to describe your system) by entering ASM BOOT. The assembler will generate a BOOT.HEX and BOOT.PRN file, which you will use to make your new system. Then put all of the files on this disk, the BOOT.HEX file you got from the proceding step, MOVCPM.COM, and DDT.COM from your CPM system master on a blank formatted Installing your new bios in your old CP/M In order to run the new double density roms on your old single density system, you will first need to modify your bios. The new CP/M will provide you with a larger transient program area because most of the bios routines are actually in ROM. The maximum size system (63K) maps out like this: FA80h-FFFFh Reserved for ROM variables and disk deblocking buffers FA00h-FA7Fh Interrupt vectors F600h-F9FFh Bios Space There are a number of files on this disk to reflect the drive arrangement on your system. It can be assembled with ASM.COM. To decide which programs you need to use to create your system disk you must choose a format suitable for your A drive. If you are presently running 8 inch single density you would want to create a single density system disk initially then install the daughter board. Once you boot this single density system you will be able to format a double density disk and create a double density system. You will be able to readA     g at the correct address. (Not 512 bytes lower). Also if you have reassembled the bios and want to use these .SUB files to load it onto a system disk, You will have to change the name of the hex file to reflect the type of disk it is going to. Use: XBIOS5.HEX for 5 1/4 inch disks XBIOS8S.HEX for 8 inch single density XBIOS8D.HEX for 8 inch double density Now do the modifications to your board and boot up the XPRO system. Good luck, and happy computing, DmC & BG last update 11/25/84 BG ve to RESET to get it going again. If this is a problem, you can make a smaller system (providing that you aren't stuck with a 64K system, which won't quite fit with the X-8 rom) by reassembling the BOOT.ASM and XBIOS.AZM files to ORG at the right location. A set of HEX files is included that has been assembled for a 60K system, for those of you that have the XEROX CP/M without MOVCPM.COM. There is a patch called MOVPATCH.ASM that you oards up and running well, and you have speeded up your board to at least 4, preferably 5 mHz., since the Z80 just can't keep up with the data transfer rate at 2.5 mHz. 5 1/4" double density works just fine at 2.5 mHz. since its data transfer rate is half as fast as 8". The MOVCPM.COM that you use MUST match the copy of CP/M that is CURRENTLY IN USE ON THAT SYSTEM. When you use MOVCPM it reads the serial number from the CP/M that is ican get to confuse MOVCPM, and get it to go ahead and move it even if they aren't matched. It's in the CPM User's Group catalog (possibly SIGM too) somewhere, and also on one of the user disks at MICRO CORNUCOPIA. Contrary to what I may have told some of you, you will have to go thru all of the steps of getting the right BOOTx.HEX, GENx.HEX, and XBIOSx.HEX together for each type of drive that you plan to boot from (only if you plan to  MORE ON SYSGENing YOUR SYSTEM TRACKS A number of people have asked me to elaborate on SYSGENing your disks so that you may boot CP/M on your disks. The file called -GENSYS.DOC covers many of the more gross details, and I hope to include some of the finer points here. First of all, plan to SYSGEN several disks before you do any mods on your board (assuming that your board is up and running). This will give you sn memory, and compares it to the serial number in the MOVCPM.COM that you use. It might be a good idea to test this first if you're not sure, by entering the command: MOVCPM 63 * This will respond with a message that it constructing a 63K CP/M, and will end up by telling you that you're ready for SYSGEN or SAVE 34 CPM63.COM. If it isn't matched it will just stop and say "SYNCRONIZATION ERROR", after which you will haome chance of recovery should something happen to your disk when you first try to boot it up (say you break a lead on a crystal while you're doing the mod and it erases your track 0, or you accidently format the wrong disk). This also gives you a point of argument when you call me up and tell me it doesn't work. At least we can probably rule out a bad disk. Stick with single density for your 8" system disks until after you have your b  use a number of different kinds of drives for your 'A' drive). This isn't too hard, but you've got to be sure that you've got the right combination. Because of this, I've made a list of most of the combinations that are assembled on this disk. From this group, you ought to be able to find a combination that will work with the drives that you have. You should start off by using one of these sets to get your system up and running, and  GEN560.SUB, XBIOS560.HEX, BOOT560.HEX 'A' drive = 5 1/4", 48 TPI, double density, Kaypro format (II or 4, single or double sided), drives are turned off at the completion of a task (when the console status is checked), 'B'=5 1/4", 'C' & 'D' = 8", and a 60K CP/M is generated. GEN8S.SUB, XBIOS8S.HEX, BOOT8.HEX 'A' drive = 8", single density, single sided, IBM 3740 (CP/M standard and XEROX 820-1) format, drives arees automatically anyway- as long as you warm boot after each disk change). The XBIOSx that you use needs to match the drive type that you are planning to use as 'A', either 5 1/4" double density, 8" single density, or 8"double density. The BOOTx that you needs to be set for 5 1/4" or 8", and 48 TPI (5 1/4" and 8") or 96 TPI (5 1/4" quad drives). Both the XBIOS, BOOT, and GEN files must be set for the same value for "msize", either 63, for 1200 baud (the COMM connector- J3), 300 baud for the 'B' side (the PRINTER connector- J4), with the SIO CTS signals active; the default list device as "A side" Centronics (lst:=lpt:); have the disk drives turned off by the CONST loop (not CTC controlled); and have the keypad translate table option disabled. GEN5.SUB, XBIOS5.HEX, BOOT5.HEX 'A' drive = 5 1/4", 48 TPI, double density, Kaypro format (II or 4, single or double sidmake your BIOS changes after you know that everything works. When you select the combination of the XBIOS and BOOT for your system, you will be making the selection based primarily on the characteristics of the disk drive that you are going to use on your 'A' drive. The factors that are critical are: 5 1/4" or 8", 48 TPI or 96 TPI (5 1/4"), and single or double density (8"). I recommend that you start out SYSGENing to diskettes that  turned off at the completion of a task (when the console status is checked), 'B'= 8", 'C' & 'D' = 5 1/4", 48 TPI, and a 63K CP/M is generated. GEN8D.SUB, XBIOS8D.HEX, BOOT8.HEX 'A' drive = 8", 48 TPI, double density, single or double sided, Big Board II format (16 sectors of 512 bytes), 'B'= 8", 'C' & 'D' = 5 1/4", 48 TPI, and a 63K CP/M is generated. GEN8S60.SUB, XBIOS860.HEX, BOOT860.HEX 'A' drive = 8", 48 TPI 60, or some other value that you determine when you edit them. The GENx.SUB file that you use must have all of the filenames correct, and present on the disk, or the program will go on and try to install CP/M, without actually putting in the correct data. The errors can be identified by such messages as "file is not there" in EX14, and just simple question marks, "?", in DDT. If you see either of these when EX14 is active, go back aned), drives are turned off at the completion of a task (when the console status is checked), 'B'=5 1/4", 'C' & 'D' = 8", and a 63K CP/M is generated. GEN5Q.SUB, XBIOS5U.HEX, BOOT5Q.HEX 'A' drive = 5 1/4", 96 TPI, double density, Kaypro 8 format (Micro Cornucopia Kaypro upgrade), drives are turned off at the completion of a task (when the console status is checked), 'B'=5 1/4", 'C' & 'D' = 8", and a 63K CP/M is generated.have been formatted as single sided, since it really doesn't make much difference if you are using double sided drives. The XBIOS hex files have been assembled for 5 1/4" double density, and 8" single and double density. The density that you use on your 'A' drive doesn't affect the density that you use on the other disks in the system, since the parameters for each diskette are dependent on how they are formatted (which the X-8 determind check the GENx.SUB file and make sure the names match what is on the disk. For each combination of drives in the description, you will need to be sure to have the files that are listed on your disk to completely install a copy of CPM on your 'B' drive that can be booted later. Here is the detailed discription of what to use with each combination of files: All of the XBIOSx.HEX's have the baud rate of serial port 'A' setA     , single density, single sided, IBM 3740 (CP/M standard and XEROX 820-1) format, 'B'= 8", 'C' & 'D' = 5 1/4", 48 TPI, and a 60K CP/M is generated. Good luck, BG 11/25/84  density, single or double sided, Big Board II format (16 sectors of 512 bytes), 'B'= 8", 'C' & 'D' = 5 1/4", 48 TPI, and a 63K CP/M is generated. GEN8S60.SUB, XBIOS860.HEX, BOOT860.HEX 'A' drive = 8", 48 TPI 14 U109, 2 15 U111,14 16 +5 VOLTS DC Only the signals connecting to U111 are necessary if you do not plan to use J1 to connect 8" drives on the BBI itself. If J1 on the BBI is to still be used to connect drives, pin 4 of U104 should be pulled out of its socket, and connected to pin 14 of U104, and a jumper is required on the X120 board between J1-28 and the 2791 to be removed from the BBI, and no cuts should be necessary. I do recommend that the 1771 socket be replaced with female headers for best installation. The signal list for J2 on the X120 board is as follows: J2 pin Big Board I, chip-pin 1 U111-13 2 NOT USED, CAN BE RUN TO BBI J1-4 3 U111-15 4 U109-1  pin 28 to return the HEAD LOAD signal to the BBI. The DVSEL2 and DVSEL3 signals are not returned to the BBI, but may be picked up from pins 5 (DVSEL2) and 9 (DVSEL3) of the 7445 on the X120 board if they are needed. The BBI will now have true side select capabilities also. cket, and connected to pin 14 of U104, and a jumper is required on the X120 board between J1-28 and the 2791\JC INSTALLING THE X120 BOARD ON A BIG BOARD I \JL The Emerald Microware X120 Double Density adaptor board may be used on the Ferguson Big Board I, as well as the Xerox 820-1, since they are functionally the same board. However, some of the parts are not the same, and in any case have different locations on the board. The installation is slightly less elegant, in that though J1 can still plug into the WD1771 location, b 5 VIDEO VSYNC, NOT NECESSARY 6 VIDEO VSYNC RETURN, NOT NECESSARY 7 GND, 0 VOLTS 8 U111-8 9 U111-9 10 VIDEO HSYNC RETURN, NOT NECESSARY 11 VIDEO HSYNC, NOT NECESSARY 12 VIDOE RETURN, NOT NECESSARY 13 VIDEO, NOT NECESSARY ut a single ended dip jumper is necessary to pick up and return the signals that are handled through J2. The crystal for the baud rate generator will also need to be laid down, as with other upgrades. You can ignore the composite video adaptor on the X120 board, since the BBI already has this feature. The SYSPIO which is U105 on the Xerox board is U111 on the BBI, and the WD1771 is U102. The 7445 at U109 is the only component that needs   speed equ 02h ; Steprate to use on drives requiring ; slow steprates. 00H is 3ms (6 ms) ; 01H is 6 ms (12 ms) ; 02H is 10 ms (20 ms) ; 03H is 15 ms (30 ms) ; Times for 8 inch operations (all times ; double for 5 1/4 inch). ;################################ ;### Cursor default character ### ;################################ cursor equ 0DFh ; cursor character use 0DFH for blinking ; underscore (05FH for non-blink). Use ascii ; for ascii e.g. cursor e ### ;### Added retry # at 0Bh. BG 10/24/84 ### ;### Added more explanation of ABCDabcd. BG 1/11/85 ### ;### ### ;### Assemble with ASM.COM - ASM boot ### ;########################################################################## ORG 900h ;############################ ;### Address calculations ### ;############################ msize equ 63 ; m____Bit for drive C (48 TPI or 8 inch as shown) ;###################################### ;### 8 inch and slow steprate flags ### ;###################################### x8flg equ 11110011b ; ABCDabcd where each letter describes drive. ; ^^^^^^^^ A one in a given drive position in the ABCD ; ABCDabcd group will mean that the slow steprate must ; |||||||| be used with that drive. ; ||||drivetype A one in a given drive position in the abcd ; |||||||| group indicates that the drive is 8 inqu '#'. ; blinking solid block = 082h (non-blink=02h) ; blinking halftone block = 08Dh (n-b=0Dh) ; blinking heavy underscore = 093h (n-b=13h) ;################################ retry equ 002h ; number of 'homes' per retry +1 ;################################ ;### Begin sector image ### ;################################ db 18h,0FEh ; self: jr self dw loadpt ; where to load the system image dw bios ; where to jump after loading dw length ; length of system image isize must match 'msize' in XBIOS.AZM bias equ (msize-20)*1024 ccp equ 3400h+bias bios equ ccp+1600h ;################################ ;### Define sector variables ### ;################################ loadpt equ ccp length equ 33h ; XPRO CP/M system length in sectors config equ 0DCh ; don't change this ;########################### ;### Drives A and B type ### ;########################### drvtype equ 10010001b ; quad density flag for drives A & B ; ^ ^ ^ ; must be 0 for 96 TPI ch, a ; steprate|||| zero means 5 1/4 inch ; ||||||||_________D drive = 8 inch ; |||||||__________C drive = 8 inch ; ||||||___________B drive = 5 1/4 inch ; |||||____________A drive = 5 1/4 inch ; ||||_____________slow step drive D (1=yes) ; |||______________slow step drive C (1=yes) ; ||_______________slow step drive B (1=yes) ; |________________slow step drive A (1=yes) ; ;################################# ;### step rate for slow drives ### ;#################################  ;########################################################################## ;### Header sector for XPRO system ### ;### This sector goes where the boot sector normally goes on CPM ### ;### systems (first sector of system image) and contains information ### ;### about the disk drives on your system. Use this file when first ### ;### bringing up your XPRO system. After boot the SET prorams will ### ;### allow you to make any changes. DmC 10/4/84 drives ; | | | ; or 1 for 8 inch and 48 TPI drives ; | | |_______ Bit for drive B (48 TPI or 8 inch as shown) ; | |___________ don't change this ; |______________ Bit for drive A (48 TPI or 8 inch as shown) ;########################### ;### Drives C and D type ### ;########################### xdrvtyp equ 10000001b ; same as above- 1 for 8" or 48 TPI ; ^ ^ ; 0 for 96 TPI ; | |________Bit for drive D (48 TPI or 8 inch as shown) ; |___________A     n 128 byte sectors db drvtype ; what type of drives are a and b db 0 ; reserved for expansion db config ; disk configuration flag db retry ; number of 'homes' per retry +1 db cursor ; hex value of the cursor character db speed ; slow steprate to use for drives needing it db xdrvtyp ; what type of drives are c and d db x8flg ; which drives are 8 inch and which need ; slow step rate ;0900 18 FE 00 E0 00 F6 33 00 91 00 DC 02 DF 02 81 F3 sample dump of above dw 0,0,0, ;########################################################################## ;### Header sector for XPRO system ### ;### This sector goes where the boot sector normally goes on CPM ### ;### systems (first sector of system image) and contains information ### ;### about the disk drives on your system. Use this file when first ### ;### bringing up y0,0,0,0,0 ;the rest of the sector is not used dw 0,0,0,0,0,0,0,0 dw 0,0,0,0,0,0,0,0 dw 0,0,0,0,0,0,0,0 dw 0,0,0,0,0,0,0,0 dw 0,0,0,0,0,0,0,0 dw 0,0,0,0,0,0,0,0 end eprate to use for drives needing it db xdrvtyp ; what type of drives are c and d db x8flg ; which drives are 8 inch and which need ; slow step rate ;0900 18 FE 00 E0 00 F6 33 00 91 00 DC 02 DF 02 81 F3 sample dump of above dw 0,0,0,our XPRO system. After boot the SET prorams will ### ;### allow you to make any changes. DmC 10/4/84 ### ;### Added retry # at 0Bh. BG 10/24/84 ### ;### Added more explanation of ABCDabcd. BG 1/11/85 ### ;### ### ;### Assemble with ASM.COM - ASM boot ### :1009000018FE00E000F633009100DC02DF0281F304 :1009100000000000000000000000000000000000D7 :1009200000000000000000000000000000000000C7 :1009300000000000000000000000000000000000B7 :1009400000000000000000000000000000000000A7 :100950000000000000000000000000000000000097 :100960000000000000000000000000000000000087 :100970000000000000000000000000000000000077 :0000000000    ;########################################################################## 0900 ORG 900h ;############################ ;### Address calculations ### ;############################ 003F = msize equ 63 ; msize must match 'msize' in XBIOS.AZM AC00 = bias equ (msize-20)*1024 E000 = ccp equ 3400h+bias F600 = bios equ(non-blink=02h) ; blinking halftone block = 08Dh (n-b=0Dh) ; blinking heavy underscore = 093h (n-b=13h) ;################################ 0002 = retry equ 002h ; number of 'homes' per retry +1 ;################################ ;### Begin sector image ### ;################################ 0900 18FE db 18h############ ;### Drives C and D type ### ;########################### 0081 = xdrvtyp equ 10000001b ; same as above- 1 for 8" or 48 TPI ; ^ ^ ; 0 for 96 TPI ; | |________Bit for drive D (48 TPI or 8 inch as shown) ; |_______________Bit for drive C (48 TPI or 8 inch as shown) ;###################################### ;### 8 inch and  ; |________________slow step drive A (1=yes) ; ;################################# ;### step rate for slow drives ### ;################################# 0002 = speed equ 02h ; Steprate to use on drives requiring ; slow steprates. 00H is 3ms (6 ms) ; 01H is 6 ms (12 ms) ; 02H is 10 ms (20 ms) ; 03H is 15 ms (30 ms)  ccp+1600h ;################################ ;### Define sector variables ### ;################################ E000 = loadpt equ ccp 0033 = length equ 33h ; XPRO CP/M system length in sectors 00DC = config equ 0DCh ; don't change this ;########################### ;### Drives A and B type ### ;##########################,0FEh ; self: jr self 0902 00E0 dw loadpt ; where to load the system image 0904 00F6 dw bios ; where to jump after loading 0906 3300 dw length ; length of system image in 128 byte sectors 0908 91 db drvtype ; what type of drives are a and b 0909 00 db 0 ; reserved for expansion 090A DC db config ; disk configuration flag 090B 02 db retry ; number of 'homes' per retry +1 090C DF db cursor ; hex value of the cuslow steprate flags ### ;###################################### 00F3 = x8flg equ 11110011b ; ABCDabcd where each letter describes drive. ; ^^^^^^^^ A one in a given drive position in the ABCD ; ABCDabcd group will mean that the slow steprate must ; |||||||| be used with that drive. ; ||||drivetype A one in a given drive position in the abcd ; |||||||| group indicates th ; Times for 8 inch operations (all times ; double for 5 1/4 inch). ;################################ ;### Cursor default character ### ;################################ 00DF = cursor equ 0DFh ; cursor character use 0DFH for blinking ; underscore (05FH for non-blink). Use ascii ; for ascii e.g. cursor equ '#'. ; blinking solid block = 082h # 0091 = drvtype equ 10010001b ; quad density flag for drives A & B ; ^ ^ ^ ; must be 0 for 96 TPI drives ; | | | ; or 1 for 8 inch and 48 TPI drives ; | | |_______ Bit for drive B (48 TPI or 8 inch as shown) ; | |___________ don't change this ; |______________ Bit for drive A (48 TPI or 8 inch as shown) ;###############at the drive is 8 inch, a ; steprate|||| zero means 5 1/4 inch ; ||||||||_________D drive = 8 inch ; |||||||__________C drive = 8 inch ; ||||||___________B drive = 5 1/4 inch ; |||||____________A drive = 5 1/4 inch ; ||||_____________slow step drive D (1=yes) ; |||______________slow step drive C (1=yes) ; ||_______________slow step drive B (1=yes) A     rsor character 090D 02 db speed ; slow steprate to use for drives needing it 090E 81 db xdrvtyp ; what type of drives are c and d 090F F3 db x8flg ; which drives are 8 inch and which need ; slow step rate ;0900 18 FE 00 E0 00 F6 33 00 91 00 DC 02 DF 02 81 F3 sample dump of above 0910 0000000000 dw 0,0,0,0,0,0,0,0 ;the rest of the sector is not used 0920 000000:1009000018FE00E000F633001000DC02DF0281F385 :1009100000000000000000000000000000000000D7 :1009200000000000000000000000000000000000C7 :1009300000000000000000000000000000000000B7 :1009400000000000000000000000000000000000A7 :100950000000000000000000000000000000000097 :100960000000000000000000000000000000000087 :100970000000000000000000000000000000000077 :0000000000 0000 dw 0,0,0,0,0,0,0,0 0930 0000000000 dw 0,0,0,0,0,0,0,0 0940 0000000000 dw 0,0,0,0,0,0,0,0 0950 0000000000 dw 0,0,0,0,0,0,0,0 0960 0000000000 dw 0,0,0,0,0,0,0,0 0970 0000000000 dw 0,0,0,0,0,0,0,0 0980 end bove 0910 0000000000 dw 0,0,0,0,0,0,0,0 ;the rest of the sector is not used 0920 000000:1009000018FE00D400EA33009100DC02DF0281F31C :1009100000000000000000000000000000000000D7 :1009200000000000000000000000000000000000C7 :1009300000000000000000000000000000000000B7 :1009400000000000000000000000000000000000A7 :100950000000000000000000000000000000000097 :100960000000000000000000000000000000000087 :100970000000000000000000000000000000000077 :0000000000    speed equ 02h ; Steprate to use on drives requiring ; slow steprates. 00H is 3ms (6 ms) ; 01H is 6 ms (12 ms) ; 02H is 10 ms (20 ms) ; 03H is 15 ms (30 ms) ; Times for 8 inch operations (all times ; double for 5 1/4 inch). ;################################ ;### Cursor default character ### ;################################ cursor equ 0DFh ; cursor character use 0DFH for blinking ; underscore (05FH for non-blink). Use ascii ; for ascii e.g. cursor e ### ;### Added retry # at 0Bh. BG 10/24/84 ### ;### Added more explanation of ABCDabcd. BG 1/11/85 ### ;### ### ;### Assemble with ASM.COM - ASM boot ### ;########################################################################## ORG 900h ;############################ ;### Address calculations ### ;############################ msize equ 63 ; m____Bit for drive C (48 TPI or 8 inch as shown) ;###################################### ;### 8 inch and slow steprate flags ### ;###################################### x8flg equ 11111100b ; ABCDabcd where each letter describes drive. ; ^^^^^^^^ A one in a given drive position in the ABCD ; ABCDabcd group will mean that the slow steprate must ; |||||||| be used with that drive. ; ||||drivetype A one in a given drive position in the abcd ; |||||||| group indicates that the drive is 8 inqu '#'. ; blinking solid block = 082h (non-blink=02h) ; blinking halftone block = 08Dh (n-b=0Dh) ; blinking heavy underscore = 093h (n-b=13h) ;################################ retry equ 002h ; number of 'homes' per retry +1 ;################################ ;### Begin sector image ### ;################################ db 18h,0FEh ; self: jr self dw loadpt ; where to load the system image dw bios ; where to jump after loading dw length ; length of system image isize must match 'msize' in XBIOS.AZM bias equ (msize-20)*1024 ccp equ 3400h+bias bios equ ccp+1600h ;################################ ;### Define sector variables ### ;################################ loadpt equ ccp length equ 33h ; XPRO CP/M system length in sectors config equ 0DCh ; don't change this ;########################### ;### Drives A and B type ### ;########################### drvtype equ 10010001b ; quad density flag for drives A & B ; ^ ^ ^ ; must be 0 for 96 TPI ch, a ; steprate|||| zero means 5 1/4 inch ; ||||||||_________D drive = 5 1/4 inch ; |||||||__________C drive = 5 1/4 inch ; ||||||___________B drive = 8 inch ; |||||____________A drive = 8 inch ; ||||_____________slow step drive D (1=yes) ; |||______________slow step drive C (1=yes) ; ||_______________slow step drive B (1=yes) ; |________________slow step drive A (1=yes) ; ;################################# ;### step rate for slow drives ### ;#################################  ;########################################################################## ;### Header sector for XPRO system ### ;### This sector goes where the boot sector normally goes on CPM ### ;### systems (first sector of system image) and contains information ### ;### about the disk drives on your system. Use this file when first ### ;### bringing up your XPRO system. After boot the SET prorams will ### ;### allow you to make any changes. DmC 10/4/84 drives ; | | | ; or 1 for 8 inch and 48 TPI drives ; | | |_______ Bit for drive B (48 TPI or 8 inch as shown) ; | |___________ don't change this ; |______________ Bit for drive A (48 TPI or 8 inch as shown) ;########################### ;### Drives C and D type ### ;########################### xdrvtyp equ 10000001b ; same as above- 1 for 8" or 48 TPI ; ^ ^ ; 0 for 96 TPI ; | |________Bit for drive D (48 TPI or 8 inch as shown) ; |___________A     n 128 byte sectors db drvtype ; what type of drives are a and b db 0 ; reserved for expansion db config ; disk configuration flag db retry ; number of 'homes' per retry +1 db cursor ; hex value of the cursor character db speed ; slow steprate to use for drives needing it db xdrvtyp ; what type of drives are c and d db x8flg ; which drives are 8 inch and which need ; slow step rate ;0900 18 FE 00 E0 00 F6 33 00 91 00 DC 02 DF 02 81 FC sample dump of above dw 0,0,0,:1009000018FE00D400EA33009100DC02DF0281FC13 :1009100000000000000000000000000000000000D7 :1009200000000000000000000000000000000000C7 :1009300000000000000000000000000000000000B7 :1009400000000000000000000000000000000000A7 :100950000000000000000000000000000000000097 :100960000000000000000000000000000000000087 :100970000000000000000000000000000000000077 :0000000000 0,0,0,0,0 ;the rest of the sector is not used dw 0,0,0,0,0,0,0,0 dw 0,0,0,0,0,0,0,0 dw 0,0,0,0,0,0,0,0 dw 0,0,0,0,0,0,0,0 dw 0,0,0,0,0,0,0,0 dw 0,0,0,0,0,0,0,0 end eprate to use for drives needing it db xdrvtyp ; what type of drives are c and d db x8flg ; which drives are 8 inch and which need ; slow step rate ;0900 18 FE 00 E0 00 F6 33 00 91 00 DC 02 DF 02 81 FC sample dump of above dw 0,0,0,:1009000018FE00E000F633009100DC02DF0281FCFB :1009100000000000000000000000000000000000D7 :1009200000000000000000000000000000000000C7 :1009300000000000000000000000000000000000B7 :1009400000000000000000000000000000000000A7 :100950000000000000000000000000000000000097 :100960000000000000000000000000000000000087 :100970000000000000000000000000000000000077 :0000000000   !Y~$( _#˯ :zA(B(C(D > >>>2V ͗ .: >22>2g ͗ y2!F~$( _#!F~$( _#!b~$( _#y2u# :< :2:2V { :2y(:(:uG =ͳ q0 ͤV yŷ2̌ :f>2fͺͺ *: 8#8E>22>2>22f>'2>22>2(>2>O2>22> 2(>2!>v g>J >J ͺ>j >j :!~$( ......Exit to CP/M (place system disk in A: first) Selection...........?S xF xîX xC x ͭ Track to Format <3 decimal digits> (000-159) or an ESC to Abort ? ###90!!x02!x02!x02ͭ Carriage return if track number is correct or any other key to reenter  :>(>d2:( G :2:O:O͆'ͭ Now Verifying ͘2͌ >2!~$( _#˯ !F~$( _#͆!6#z 6#z 6N#z  6#z 6#z 6#z 6#z 6#z 6N#z ±6N#z iXR"IV !w:f>2f (B>2 :(:uG(:O: =Z >v v 2f7?R ! O ~0:0GyOy0d8d{0(0 8:_OO:OO:q2͌ z :(V g >mg yŷ2̌ y2:(y?28˗:():OG8:_#˯ Unable to select source drive Hit any key to return to main menu $ Copying Track > $ Single sided source disk on tpi drive $ Double sided source disk on tpi drive Destination drive must be double sided $ Quad density source disk Destination drive must be quad density $ to continue any other key to abort $ to begin copy any other key to abort $g :f>2f!w (;:(:uG(:O* >v v 2fF~$( _#v!~$( _#!~$( _#! ~$( _#!R~$( _#!~$( _#˯!~$( _#A( B(1C(Y!~$( _#>22>'2[! ~$( _#> 2>2>O2/!R~$( _#>2>2>2>2!~$( _#˯ !~$( _#˯222l2/A(B( C(DD(hÆ:>(>2>2x:O O|y 2G>(>2>2> :::>* G - g *I!iX:f>2f>vGJ 2f! ~$( _#˯ Read Error on source diskette. Hit any key to return to main menu $>2!~$( _#˯  :(>922>622>422>822: !~$( _#(>2>2(:O O|y 2G>(>2>2!~$( _#˯ !&~$( _#˯Q >S>!~$( _#!~$( _#˯>2g ͗ !X~$( _## g :< !F~$( _#!X~$( _## ͗ ͳ q0 ! !iX P6N#z  6#z 6#z 6#z 6N#z 6#z 6#z 6#z :y(?w#6#z :~( ~A(:#w#A     !)~$( _#˯ Write Error on destination disk Strike any key to return to main menu $>22:2!S~$( _#!S~$( _#!~$( _#!S~$( _#!S~$( _#͟>2:f>2fͧ:2!x~$( _#+!)9"2Ϳ:< 8:O:<82f: .!~$( _#˯y2<2!z~$( _#2:(:G( :O::.*{vv"#CRC.COM 5.0 6/18/82CRCKFILE???!9" 1 M @ CRC Ver 5.0 CTL-S pauses, CTL-C aborts :] O@ ++Searching for CRCKLIST file++@ Now searching for "CRCKFILE" file++ !  1 .) F!  ͡]͸! ͔0CRCKLIST???CRCKFILE???!9" M à*,*.}|ډ!".*,{z{** u*.".G*.",!".***,}>*.#".ɯ22)! ",". <  NO FILECRC FILE$!   >. @ Checking wi Disk :.....Any other key to abort $ Drive has not been selected since last cold start. Enter Q if it is a quad density or S if it is standard double density. $ Destination Drive.......( A,B,C, or D )? $ Insert destination disk into drive to continue any other key to abort $ Source Drive...........( A,B,C, or D )? $ Insert source disk into drive to continue any other key to abort $ Cannot select...Boot 4 drive system disk to format C: or D: $ Copy a diskette-( *B>!!O ~ ͧ>͑:2:(:?28˗:(':OG8:>͑:::>vG >͑wˇˏO:˯˷2z>͑::(?=!V~$( _#K# >2!x~$( _#!f~$( _#!]~$( _#:O# !o~$( _#!S~$( _#ͧ Format a diskette for the Xpro System Press a carriage return to contth file - ! ~T #M M 2 2 2 2 ! >2 3o: : @ ***No CRC Files found***$> ʉ ʉw#: <2 P6: .6@ Can not parse string ! ~ʽT #ñM ! > 6 #6^#6! ~T #! 4M #x] #e w~ T #>2 @ - s M@ File not found ! 4 >2 o: G: „: G: „@ *Match* 2 ! 4@ <-- is, was --> : ) > T : ) M 2 ! 4<2 ~# @ Not a space between CRC values<2 G-CATALOG??? on the Xpro system Enter to begin any other key to quit.$ $ $Track $ Sector $Drive $ >>BAD<<$ $ Format Verified $ Please type any key to continue.$Verifying disk to be readable $Qe $ >>BAD<<$ $ FormaRETURN> to continue any other key to abort $ Source Drive...........( A,B,C, or D )? $ Insert source disk into drive to continue any other key to abort $ Cannot select...Boot 4 drive system disk to format C: or D: $ Copy a disketteinue Any other key to quit. $ Function Complete $ Formatting track:$ Enter to format, any other key to abort $ Formats available ::::::::::::::::::::::::::::::::::::::::::::::::::::$ A....Kaypro 2 Format$ B....Kaypro 4 Format (Destination drive must be double sided)$ C....Kaypro 8 Format (Destination drive must be quad density)$ Selection.(A,B, or C)............................?$ Format selected is: $ to Format  @ ++ Now searching for "-CATALOG" file++ !  ) .) ! ”>.”#””͡”››tK››͸›* =: =͔="  ʳ ª~#.  ¿~  #~  .+~#0:0~#!A.O.Gy~#0M0 K MMɷ:m2 FSÄCRCKLIST$$$››tK›, › **}|!"*{z*~]*"Ü  DISK FULL: CRCFILE$!"*~ match - : ̓ : J M @ Quantity of lines failed parse test - : ̓ : ~ M @ Quantity of file(s) not found - : ̓ * d͔  ͔ 0T  Җ Wyʩ 0T 0ztiilh2|2   ~$#~# x  : F} *}= ">͇1 ]2 s : ~# ++FILE NOT FOUND++$: F*}’">͇†]<  CANNOT CLOSE CRCFILE$CRCKLISTCRCSK FULL: CRCFILE$  w# !]͐ DONE$!e S!]Q !eZ @ --> FILE: XXXXXXXX.XXX CRC = oS) \<‘@ ++OPEN FAILED++ !" !" * | ʹ) \!~2 #" Ý: ) > T : ) @ ++FILE READ ERROR++ <* |): o% |g}o" 2  ; 0T ~T #~A > T > _h : F{͇2h2|: ʲ !\   :\2 ! \  \ ! \  \! \  \<7=Ɓo&   ]  2h2|2   ~$#~# x  : F} *}= ">͇1 ] FILE: -1/29/85.REV CRC = 15 6C --> FILE: -GENSYS .DOC CRC = AB 44 --> FILE: -GENSYS .MOR CRC = 51 9A --> FILE: BIGBOARD.DOC CRC = EE C3 --> FILE: BOOT5 .ASM CRC = 06 3E --> FILE: BOOT5 .HEX CRC = 62 58 --> FILE: BOOT5 .PRN CRC = D3 71 --> FILE: BOOT560 .HEX CRC = 05 FF --> FILE: BOOT5Q .HEX CRC = 82 D8 --> FILE: BOOT8 .ASM CRC = 7C 56 --> FILE: BOOT8 .HEX CRC = 52 DC --> FILE: BOOT860 .HEX CRC = 92 F5 --> FILE: COPY5 .COM CRC = DC BA --> FILE: CRC *( * " 3*1 #" " " *5 " > # R : B * +" ! +s#r( ! 6: " * ~2 * #" * +" > ʶ : 2 Ғ * +" : <2 O>ҳ ! 6* #" * ~2 p ̓: AOK = * Ͱ= * ͷ= * Ͱ= *# ͷ= * Ͱ= . g S -A >>!  ~?l W >#^ : /!:' —  ʑ #‹  W ʢ #™ i`N#FogDM!>))덑o|g =¼ DM!>)) = ^#V) ^#V|g}o OS8S .PRN CRC = 41 BCM "I *K  )*= ^#V"O I G  *G )*= N#F*O ? J*G #"G (*I )*= ^#V*O DM? m*I +"I JI G  *G )*= ^#V"Q *I )*= *G )*= N#Fq#p*I )*= *Q s#r*G #"G *I +"I K I  G M   !M G  :S <2S O!T *G s#r*S &l ) *M s#r*I "M ^I K  X:S <2S O!T *K s#r*S &l ) *I s#r*G "K û!" "    #* #" )*= * #" )*= N#Fq#p   * )*= * ) *= ^#VN#F? H * #" )*= ^#V";  *; ^#V" * )*=  .COM CRC = B2 07 --> FILE: CRC .DOC CRC = E5 81 --> FILE: D .COM CRC = 66 48 --> FILE: DRMOVCPM.SUB CRC = 64 02 --> FILE: ERRATA .DOC CRC = EC 68 --> FILE: EX14 .COM CRC = 02 E3 --> FILE: FORMAT4M.COM CRC = 13 B3 --> FILE: FORMAT5M.COM CRC = C1 8A --> FILE: GEN5 .SUB CRC = AA 43 --> FILE: GEN560 .SUB CRC = D4 95 --> FILE: GEN5Q .SUB CRC = E0 4D --> FILE: GEN860 .SUB CRC = 7C E4 --> FILE: GEN8D .SUB CRC = AE DA --> FILE: GEN8S .SUB CRC = 33  _{ozgO{ozgi`N#Fogo&og_{_z#W OK = Y -S {-_ ! s+p+q*  ͼ 2 <2 : ! ڗ  K ! 4Á ! 6: =! ڻ * & NK ! 4œ >3  03} Z; { ) #  Hit Space: KK : k Used: /k Not used: k *% DMf : remain on 1 !9" ! J> # ->! . *ͪe> # < * v K  K  K !B r+s+p+qA ?  p*A *? :]$Ž l]Q !]6 !E 6!C 6 :C *C &l ~2D U¼:E 2 :D S:E 2:D F:E 2:D V:E 2:D P:E 2 :D N2E !^#V"; *;  ͪ  *; q#pÝn* " ! p+q* )*= ^#V"; ! 6> ! i* &*; >OK : <2 E:/ *; ^#V*% DMf kK : *; Nf E*; ~ڻWK þE *; ~SK E = ! 6:! ':/ : = !: = : <2 * " !" >! .  * *&͵ "( * *&͵ > j*( #"( *DM*( V"( !" (   K!" }2 : <2 O:* * * "    >! = * DM** +" *( * " Ø* #" *&17 --> FILE: SYSGEN5 .COM CRC = 21 97 --> FILE: SYSGEN8D.COM CRC = AC 0E --> FILE: SYSGEN8S.COM CRC = 12 ED --> FILE: TERMINAL.DOC CRC = 7E 26 --> FILE: VER2ROM .DOC CRC = BB 9A --> FILE: WHATDOI .GET CRC = 67 4B --> FILE: X8VER206.OBJ CRC = 9E 8E --> FILE: XBIOS5 .AZM CRC = 5C 98 --> FILE: XBIOS5 .HEX CRC = FA 27 --> FILE: XBIOS560.HEX CRC = ED 0E --> FILE: XBIOS860.HEX CRC = 54 24 --> FILE: XBIOS8D .HEX CRC = E0 FC --> FILE: XBIOS8S .HEX CRC = 4A 74 --> FILE: XBIC 4Ø:!4:!5(  ! I3= : [= t:\a:\=_: :] t ?]\ : ҃! 6?Î : 2   ]Q  ?\\ : DM, Q ! "= *3 ##)*= "; */ &# "! *3 #"#  !! "% >!1 . 2' \: 2 : ʩ: ƀo&"* ~ʛ*# +"# ** DMY қ** DM  *; q#p* " . ** #DM*; -e**  *; w* #" )*= *; s#r*; "; : 2 !S 6!"V * "n >!S d*S &T ) ^#V"K O!l ^#V"M :S =2S M K  a*K "G *  DOUBLE DENSITY OPERATION You need to upgrade your clock rate on your XEROX 820 board to 4 or 5 Mhz to be able to run your 8" drives on double density. This is not necessary to run 5 1/4" double density. This is because the data transfer rate for 8" drives is twice as fast as for 5 1/4" drives, and the processor can't quite keep up at 2.5 Mhz. The conversion to 5 Mhz is fairly simple, since all of the necessary signals are already present o\JC X120 BOARD ERRATA \JL ***** IMPORTANT NOTE ***** One signal has accidently been overlooked on the X120B double density board. This is the 8" HEAD LOAD signal that returns to the 820 board. In its present state the heads on any 8" drive that is connected to the J1 (37 pin) connector on the 820 board will stay loaded. To correct this, simply place a small jumper wire between pin 28 of the 2791 (2793 n the board, providing of course that the components on your board are fast enough to keep up. Most of the factory assembled boards have RAM that is fast enough, but many of the Z80 components (PIO, SIO, CTC, & CPU) are not. You may find that replacing these chips, though not very expensive, is more work or more complicated than you want to undertake. The CPU should be a 'B' rated part, with the rest being at least an 'A' rating. The a maybe) and pin 28 of J1 on the X120 board. This will restore normal head load operation to your 8" drives. This jumper is only necessary if you plan to connect your 8" drives using the 37 pin connector at J1 on the 820 board. The signal is already correctly implimented on the X120 J4 connector. It is also unnecessary to install the TEST jumper (F) for normal operation, as the 279x chips have an internal pull-up resistor. 8" ren omovcpm.com=movcpm.com ddt omovcpm.com a16f jmp 2a00 . a2a00 push b lxi b,200 dad b pop b jmp 1a5 . ^C save 42 movcpm.com A     ctual modication is this: \I15 Cut the CAS trace between U11 pin 5 and U25 pins 11 or 13 Cut the MUXC trace between U11 pin 4 and U71 pin 1 Cut the 2.5 Mhz trace between U10 pin 4 and U9 pin 3 Jumper U11 pin 4 to U25 pins 11 and 13 Jumper U11 pin 3 to U71 pin 1 Jumper U10 pin 5 to U9 pin 3 \I10 This completes the 5 Mhz modification. The modification to run 4 Mhz is the same, but youu u!Kw!Ww2*"x: :y2è*~+"*#"**{z­og"!m*å1!J!m*! (~#:!0:A[a{2:~$#Oͨ!A!!u >>>Ex Aborted<<< $ (Ex Active)$ (Ex Completed) >$ßâåèBDOS>   "IH! !B"$$HB!$BD$$$$H"D $$I """~+"21*|w+#~!A:+P_^#V{P w#&*2#"2!)6!86kb"0"9 :(:&:8<28", ʜ os#r#:*b ʜ ‰o>  ~ µ> #_ê!ͤ@ͤ*2*0~# 6 ~#_   |{0_~#'_x{ w#0SUB error line # $ (Ex Already Present)$ Text buffer empty$ Input/EX Buffer Overlap$ No parameter or default parameter$ Parameter$ File filename.typ$ not there$ Control character$ Too man will need to replace your 20 Mhz crystal with a 16 Mhz, and change your floppy disk clock rates by removing U12, and jumpering U12 pin 8 to U10 pin 5, and U12 pin 9 to U10 pin 4. The 4 Mhz modification seems to be a bit more touchy than the 5 Mhz, and I recommend that you only use it if you know that the parts in your board will only make the 4 Mhz rate. GOOD LUCK, BG 10/2/84 (revised 12/5/84) !9"$1>2ͤ*?*}_|W!x< ~#/bkxp :/<2/Z~#2.:.2.lA+";#:o&6 !S0> 2*h:!"2>2!"4*2#"2:  G*4H'6 #6 #"4òe!='2|\<%!]&6.#e&6$z*4!"4\%*46"6}|q2&2'2(28!"2*;"9"= „2u| > 2O:&yʯ;A^$2) O:8yuNu͒:; ?|$%.ʘ#ʓ<ʪ>y arguments - $EX 1.4 11-22-82$ $ppppppppppppppppppppppppppppppppI"""~+"21*|g."*" *! 1*~*"*"#^#V!_:O*AâÐu!9"!ͥ͢ʽ½ͥ*#w">*:2́a OC[[ 2> O:y½ͨÚ*"222Úͥ͢ʽ 7ͨOù>ù>ù>ù> > 2)u!A0> 2*h> ~!)w¹O:(yʹ:&yʹ#!):8=28ʏ jw:8ʉ> > ~> ~>ù>!(£w>ù>2)!&u2&2'ù>2)!'u2'2&ù*6}|ʉw+*###>E#>X#>Oͤ*$:6+6} %. 6+6X+6E+:w+:w+6*'ͤͤͤͤ*,ͪ fͤ ͤͤ zͤ|`ڣ{G @;:?$.#<>G@G$^|1Y:Y12+!U _^#V{   !~$( _#!!~$( _#͡ ͫͽU y 2>2yʠ![!P6N#z  6#z 6#z 6#z 26N#z  6#z 6#z 6#z :y(?w#6#z :~( ~A(:#w#6#z 6#z 6N#z  6#z 6#z 6#z 6#z 6#z 6N#z š 6N#z    ![O ~OO::  q2 y>  y͂ , yŷ2 y !~* N * "!>v C...........Change Eight Inch DD Skew X...........Exit to CP/M (place system disk in A: first) Selection...........?S xF xX xC xͭ Track to Format <3 decimal digits> (000-159) or an ESC to Abort ? ###90!!x02!x02!x02ͭ Carriage Return if track number is correct or any other key to reenter  :>(>d2:( G :2:O:O͚> ͭ Now Verifying 2 ͭ S2A :&gʛ :'>(>2>2:&gʛ :'G>(>2>2!~$( _#˯ !~$( _#˯Q >D>!~$( _#!e~$( _#˯:ʹ  !!~$( _#͡ ] :< : !~$( _#!!~$( _#͡   m :n ͒ !o ! P6N#z  6#z 6#z 6#z 6N#z 6#z 6#z 6#z :y(?w#6#z :~( ~A(:#w#6# f!fNwy#yͫ!!~$( _#͡ ͖ :< !~$( _#!!~$( _#͡ ͫͽ͠!i!(6#z 6#z 6#z 6#z 6#z 6#z yw#6#z ~#w#6#z 6#z  6#z 6#z 6#z 6#z 6#z 6#z 6#z  !iO ~ñ:! :!(!"w>2͓: :(>2:<2!+~$( _#!+~$( _#kew for Eight Inch Double Density (3,4,5) ?x2m3!(4!( 5 ![ͭ Skew Changed to for Eight Inch Double Density Formats Hit any key to continue˯            !z~$( _#˯ !~$( _#͚> ͐>22!g~$( _#!~$( _#!~$( _#!~$( _#!d~$( _#!~$( _#!~$( _#z 6#z 6N#z  6#z 6#z 6#z 6#z 6#z 6N#z ­ 6N#z  !o O ~0:0GyOy0d8d{0(0 8:_OO:q2 z  > m ͂ , yŷ2 y2:(y?28˗:():OG8:>͂ :::>͌ G ͏ !:f>2f>vG© 2f:"yͫ!!~$( _#͡ ; :< :V(88ȼ88ȼ8ȸ8FR##8Fl#OY F#N#~x x ͹~#x1kͭ################################################################### ## Diskette Format Program for the XPRO System 4Mhz Version 2.0 ## ################################################################### Selections: F...........Format an entire disk S...........Format a single track !!~$( _#˯!Y~$( _#A(B(BCʹDE#F@>!~$( _#>22>'2r!~$( _#> 2>2>O2r!~$( _#>2>2>2>2r!d~$( _#>2>222>L2>2r!~$( _#!~$( _#>2>2>2>22!q~$( _#˯ !V~$( _#˯222D2A(B(!C(3D(LÚ:&>(>2>2A :&G>(>2> A     !~$( _#!+~$( _#!+~$( _#b>2:f>2fj:2!P~$( _#ͤ!@"g(2ͮ( :<:O:<82f: 1!e~$( _#˯͓y2<2Y!R~$( _#2u:(:G( :uO::u:(7.*{vSvY"Z-( *B>.*{vŠ"Z-( *B>*wO ~       j>T:2(88ȼ88ȼ8ȸ8FR##8Fl#OY F#N#~x x ͹~#x1kͭ################################################################### ## Diskette Format Program for the XPRO System 5Mhz Version 2.0 ## ################################################################### Selections: F...........Format an entire disk S...........Format a single track Inch Double Sided Double Density$ Selection.(A,B,C,D,E, or F)......................?$ Format selected is: $ to Format Disk :.....Any other key to abort $ Drive has not been selected since last cold start. Enter Q if it is a 5 inch quad density drive or D if it is a 5 inch double density or an 8 inch drive. $ Destination Drive.......( A,B,C, or D )? $ Insert destination disk into drive to continue any other key to abort $ Cannot select...Boot 4 drive systv:(:?2v8˗:(':vOG8:v>T:v:v:v>vG > TwˇˏO:˷2zƒ>T::(=?=!.~$( _#K͡ >2!P~$( _#!>~$( _#ͤ!5~$( _#:ͮO͡ !G~$( _#!+~$( _#ͤj( Format a diskette for the Pro8+ System Press a carriage return to begin Any other key to quit. $ Functio C...........Change Eight Inch DD Skew X...........Exit to CP/M (place system disk in A: first) Selection...........?S xF xX xC xͭ Track to Format <3 decimal digits> (000-159) or an ESC to Abort ? ###90!!x02!x02!x02ͭ Carriage Return if track number is correct or any other key to reenter  :>(>d2:( G :2:O:O͚> ͭ Now Verifying 2 ͭ Sem disk to format C: or D: $ $ $Track $ Sector $Drive $ >>BAD<<$ $ Format Verified $ Please type any key to continue.$Verifying disk to be readable $Qe $ >>BAD<<$ $ Format Verified $ Please type any key to conuad density drive or D if it is a 5 inch double density or an 8 inch drive. $ Destination Drive.......( A,B,C, or D )? $ Insert destination disk into drive to continue any other key to abort $ Cannot select...Boot 4 drive systn Complete $ Formatting track:$ Enter to format, any other key to abort $ Formats available ::::::::::::::::::::::::::::::::::::::::::::::::::::$ A....Kaypro 2 Format$ B....Kaypro 4 Format (Destination drive must be double sided)$ C....Kaypro 8 Format (Destination drive must be quad density)$ D....IBM 3740 Format (Single density Eight Inch)$ E....XPRO Eight Inch Double Density (16 512 byte sectors)$ F....XPRO Eight   kew for Eight Inch Double Density (3,4,5) ?x2m3!(4!( 5 ![ͭ Skew Changed to for Eight Inch Double Density Formats Hit any key to continue˯            !S~$( _#˯ !~$( _#͚> i>22!@~$( _#!~$( _#!~$( _#!~$( _#!=~$( _#!y~$( _#!~$( _#tting track:$ Enter to format, any other key to abort $ Formats available ::::::::::::::::::::::::::::::::::::::::::::::::::::$ A....Kaypro 2 Format$ B....Kaypro 4 Format (Destination drive must be double sided)$ C....Kaypro 8 Format (Destination drive must be quad density)$ D....IBM 3740 Format (Single density Eight Inch)$ E....XPRO Eight Inch Double Density (16 512 byte sectors)$ F....XPRO Eight Inch Double Sided Double Density$ Sez 6#z 6N#z  6#z 6#z 6#z 6#z 6#z 6N#z ­ 6N#z  !o O ~0:0GyOy0d8d{0(0 8:_OO:q2 z  > m ͂ , yŷ2 y2:(y?28˗:():OG8:>͂ :::>͌ G ͏ !:f>2f>vG© 2f:yͫ!~$( _#͡ ; :< :/~$( _#!~$( _#;>2:f>2fC:2!)~$( _#}!@"@(2͇( Ġ:<:O:<82f: 1!>~$( _#˯ly2<22!+~$( _#2N:(:G( :NO::N:(7.*{v,v2"3-( *B>.*{vc"3-( *B>*PO ~       C>-:2O:(:?2O8˗:(':OO!~$( _#˯!2~$( _#A(B(BCʹDE#F@>!~$( _#>22>'2r!~$( _#> 2>2>O2r!~$( _#>2>2>2>2r!=~$( _#>2>222>L2>2r!y~$( _#!~$( _#>2>2>2>22!J~$( _#˯ !/~$( _#˯22e22A(B(!C(3D(LÚ:&>(>2>2A :&G>(>2>lection.(A,B,C,D,E, or F)......................?$ Format selected is: $ to Format Disk :.....Any other key to abort $ Drive has not been selected since last cold start. Enter Q if it is a 5 inch quad density drive or D if it is a 5 inch double density or an 8 inch drive. $ Destination Drive.......( A,B,C, or D )? $ Insert destination disk into drive to continue any other key to abort $ Cannot select...Boot 4 drive system disk to format C: or D: $ $!~$( _#!~$( _#͡ ͫͽU y 2>2yy![!P6N#z  6#z 6#z 6#z 26N#z  6#z 6#z 6#z :y(?w#6#z :~( ~A(:#w#6#z 6#z 6N#z  6#z 6#z 6#z 6#z 6#z 6N#z š 6N#z    ![O ~OO::  q2 y>  y͂ , yŷ2 y!:f>2f>vG2fyͫG8:O>-:O:O:O>vG > -wˇˏO:˷2z\>-::(=?=!~$( _#K͡ >2!)~$( _#!~$( _#}!~$( _#:͇O͡ ! ~$( _#!~$( _#}C( Format a diskette for the Pro8+ System Press a carriage return to begin Any other key to quit. $ Function Complete $ Forma2A :&gʛ :'>(>2>2:&gʛ :'G>(>2>2!]~$( _#˯ !~$( _#˯Q >D>!~$( _#!>~$( _#˯:ʹ  !~$( _#͡ ] :< : !~$( _#!~$( _#͡   m :n ͒ !o ! P6N#z  6#z 6#z 6#z 6N#z 6#z 6#z 6#z :y(?w#6#z :~( ~A(:#w#6#!~$( _#͡ o :< !~$( _#!~$( _#͡ ͫͽy!B!(6#z 6#z 6#z 6#z 6#z 6#z yw#6#z ~#w#6#z 6#z  6#z 6#z 6#z 6#z 6#z 6#z ®6#z  !BO ~Ê:! :!(!"P>2l: :(>2:<2!~$( _#!~$( _#!`~$( _#! A      $Track $ Sector $Drive $ >>BAD<<$ $ Format Verified $ Please type any key to continue.$Verifying disk to be readable $Qe $ >>BAD<<$ $ Format Verified $ Please type any key to continue.$Verifying disk to be readable $ a 5 inch double density or an 8 inch drive. $ Destination Drive.......( A,B,C, or D )? $ Insert destination disk into drive to continue any other key to abort $ Cannot select...Boot 4 drive system disk to format C: or D: $ $; GEN560.SUB ; ; THIS IS A SUBMIT PROGRAM FOR USE WITH EX14.COM TO GENERATE A ; 60K SYSTEM DISK FOR BOOTING CP/M ON A XEROX 820-1 WITH THE ; MICRO CORNUCOPIA - EMERALD MICROWARE XPRO 8 ROM SET. THIS ; FILE COPIES THE SYSTEM TRACKS ON YOUR 'A' DRIVE, USES DDT.COM ; TO PATCH IN THE NEW BOOT SECTOR AND CBIOS, AND SYSGENS THE ; DISK IN YOUR 'B' DRIVE WITH THE NEW SYSTEM. USE THIS FILE ; IF YOU DO NOT HAVE MOVCPM.COM, OR IF YOU ARE HAVING PROBLEMS ; GETTING A 63K SYSTEM TO WORK. ; ; YOU WILL NEED TO HAVE THIS FILE (GEN560.SUB), EX14.COM, ; DDT.COM, SYSGEN.COM (FROM YOUR SYSTEM), BOOT560.HEX, ; XBIOS560.HEX, AND SYSGEN5.COM ON YOUR LOGGED ON DISK (IT ; CAN BE A OR B). ; TO RUN, JUST TYPE: A>EX14 GEN560 ; IF YOU GET ANY ERROR MESSAGES (A QUESTION MARK, '?', WHILE ; IN DDT IS AN ERROR MESSAGE), CHECK TO MAKE SURE THAT ALL OF ; THE FILES ARE PRESENT ON THE DRIVE, AND ARE CORRECTLY NAMED. ; sysgen A | | save 40 xcpm5.com ddt xcpm5.com iboot560.hex r ixbios560.hex r3580 ^C sysgen5; GEN5.SUB ; ; THIS IS A SUBMIT PROGRAM FOR USE WITH EX14.COM TO GENERATE A ; 63K SYSTEM DISK FOR BOOTING CP/M ON A XEROX 820-1 WITH THE ; MICRO CORNUCOPIA - EMERALD MICROWARE XPRO 8 ROM SET. THIS ; FILE COPIES THE SYSTEM TRACKS ON YOUR 'A' DRIVE, MAKES A 63K ; COPY OF THAT SYSTEM, USES DDT.COM TO PATCH IN THE NEW BOOT ; SECTOR AND CBIOS, AND SYSGENS THE DISK IN YOUR 'B' DRIVE ; WITH THE NEW SYSTEM. ; ; YOU WILL NEED TO HAVE THIS FILE (GEN5.SUB), EX14.COM, ; DDT.COM, MOVCPM.COM (FROM YOUR SYSTEM), BOOT5.HEX, ; XBIOS5.HEX, AND SYSGEN5.COM ON YOUR LOGGED ON DISK (IT ; CAN BE A OR B). ; TO RUN, JUST TYPE: A>EX14 GEN5 ; IF YOU GET ANY ERROR MESSAGES (A QUESTION MARK, '?', WHILE ; IN DDT IS AN ERROR MESSAGE), CHECK TO MAKE SURE THAT ALL OF ; THE FILES ARE PRESENT ON THE DRIVE, AND ARE CORRECTLY NAMED. ; movcpm 63 * save 40 xcpm5.com ddt xcpm5.com iboot5.hex r ixbios5.hex r2980 ^C sysgen5 | B | era xcpm5.com    | B | era xcpm5.com en8s | B | era xcpm8s.com EM), BOOT5.HEX, ; XBIOS5.HEX, AND SYSGEN5.COM ON YOUR LOGGED ON DISK (IT ; CAN BE A OR B). ; TO RUN, JUST TYPE: A>EX14 GEN5 ; IF YOU GET ANY ERROR MESSAGES (A QUESTION MARK, '?', WHILE ; IN DDT IS AN ERROR MESSAGE), CHECK TO MAKE SURE THAT ALL OF ; THE FILES ARE PRESENT ON THE DRIVE, AND ARE CORRECTLY NAMED. ; movcpm 63 * save 40 xcpm5.com ddt xcpm5.com iboot5q.hex r ixbios5.hex r2980 ^C sysgen5 | B | era xcpm5.com ; GEN860.SUB ; ; THIS IS A SUBMIT PROGRAM FOR USE WITH EX14.COM TO GENERATE A ; 60K SYSTEM DISK FOR BOOTING CP/M ON A XEROX 820-1 WITH THE ; MICRO CORNUCOPIA - EMERALD MICROWARE XPRO 8 ROM SET. THIS ; FILE COPIES THE SYSTEM TRACKS ON YOUR 'A' DRIVE, USES DDT.COM ; TO PATCH IN THE NEW BOOT SECTOR AND CBIOS, AND SYSGENS THE ; DISK IN YOUR 'B' DRIVE WITH THE NEW SYSTEM. USE THIS FILE ; IF YOU DO NOT HAVE MOVCPM.COM, OR IF YOU ARE HAVING PROBLEMS ; GETTING A 63K SYSTEM TO WORK. ; ; YOU WILL NEED TO HAVE THIS FILE (GEN860.SUB), EX14.COM, ; DDT.COM, SYSGEN.COM (FROM YOUR SYSTEM), BOOT860.HEX, ; XBIOS860.HEX, AND SYSGEN8S.COM ON YOUR LOGGED ON DISK (IT ; CAN BE A OR B). ; TO RUN, JUST TYPE: A>EX14 GEN860 ; IF YOU GET ANY ERROR MESSAGES (A QUESTION MARK, '?', WHILE ; IN DDT IS AN ERROR MESSAGE), CHECK TO MAKE SURE THAT ALL OF ; THE FILES ARE PRESENT ON THE DRIVE, AND ARE CORRECTLY NAMED. ; sysgen A | | save 40 xcpm8s.com ddt xcpm8s.com iboot860.hex r ixbios860.hex r3580 ^C sysg; GEN5.SUB ; ; THIS IS A SUBMIT PROGRAM FOR USE WITH EX14.COM TO GENERATE A ; 63K SYSTEM DISK FOR BOOTING CP/M ON A XEROX 820-1 WITH THE ; MICRO CORNUCOPIA - EMERALD MICROWARE XPRO 8 ROM SET. THIS ; FILE COPIES THE SYSTEM TRACKS ON YOUR 'A' DRIVE, MAKES A 63K ; COPY OF THAT SYSTEM, USES DDT.COM TO PATCH IN THE NEW BOOT ; SECTOR AND CBIOS, AND SYSGENS THE DISK IN YOUR 'B' DRIVE ; WITH THE NEW SYSTEM. ; ; YOU WILL NEED TO HAVE THIS FILE (GEN5.SUB), EX14.COM, ; DDT.COM, MOVCPM.COM (FROM YOUR SYST A     ; GEN8D.SUB ; ; THIS IS A SUBMIT PROGRAM FOR USE WITH EX14.COM TO GENERATE A ; 63K SYSTEM DISK FOR BOOTING CP/M ON A XEROX 820-1 WITH THE ; MICRO CORNUCOPIA - EMERALD MICROWARE XPRO 8 ROM SET. THIS ; FILE COPIES THE SYSTEM TRACKS ON YOUR 'A' DRIVE, MAKES A 63K ; COPY OF THAT SYSTEM, USES DDT.COM TO PATCH IN THE NEW BOOT ; SECTOR AND CBIOS, AND SYSGENS THE DISK IN YOUR 'B' DRIVE ; WITH THE NEW SYSTEM. ; ; YOU WILL NEED TO HAVE THIS FILE (GEN8D.SUB), EX14.COM, ; DDT.COM, MOVCPM.COM (FROM YOUR SY>COPYRIGHT (C) 1978, DIGITAL RESEARCH Portions (C) 1982, NLSo&)))))))a{__> W> W^~W#nO****!*$*'! "y2s2t>(2u>2s>2t>2u:sO̓:tO<2t͋*y"y͓2{:{!nI )^6<2{:x/ͣ2͛!u51!;n:] ʜ\ͰEX14 GEN8D ; IF YOU GET ANY ERROR MESSAGES (A QUESTION MARK, '?', WHILE ; IN DDT IS AN ERROR MESSAGE), CHECK TO MAKE SURE THAT ALL OF ; THE FILES ARE PRESENT ON THE DRIVE, AND ARE CORRECTLY NAMED. ; movcpm 63 * save 40 xcpm8d.com ddt xcpm8d.com iboot8.hex r ixbios8d.hex r2980 ^C sysgen8d | B | era xcpm8d.com Az!iI )^!x6͵! n>z^!i5 1/4" SYSGEN VER 2.2SOURCE DRIVE NAME (OR RETURN TO SKIP)SOURCE ON , THEN TYPE RETURNDESTINATION DRIVE NAME (OR RETURN TO REBOOT)DESTINATION ON , THEN TYPE RETURNPERMANENT ERROR, TYPE RETURN TO IGNOREFUNCTION COMPLETEINVALID DRIVE NAME (USE A, B, C, OR D)NO SOURCE FILE ON DISKSOURCE FILE INCOMPLETE; GEN8S.SUB ; ; THIS IS A SUBMIT PROGRAM FOR USE WITH EX14.COM TO GENERATE A ; 63K SYSTEM DISK FOR BOOTING CP/M ON A XEROX 820-1 WITH THE ; MICRO CORNUCOPIA - EMERALD MICROWARE XPRO 8 ROM SET. THIS ; FILE COPIES THE SYSTEM TRACKS ON YOUR 'A' DRIVE, MAKES A 63K ; COPY OF THAT SYSTEM, USES DDT.COM TO PATCH IN THE NEW BOOT ; SECTOR AND CBIOS, AND SYSGENS THE DISK IN YOUR 'B' DRIVE ; WITH THE NEW SYSTEM. ; ; YOU WILL NEED TO HAVE THIS FILE (GEN8S.SUB), EX14.COM, ; DDT.COM, MOVCPM.COM (FROM YOUR SYSTEM), BOOT8.HEX, ; XBIOS8S.HEX, AND SYSGEN8S.COM ON YOUR LOGGED ON DISK (IT ; CAN BE A OR B). ; TO RUN, JUST TYPE: A>EX14 GEN8S ; IF YOU GET ANY ERROR MESSAGES (A QUESTION MARK, '?', WHILE ; IN DDT IS AN ERROR MESSAGE), CHECK TO MAKE SURE THAT ALL OF ; THE FILES ARE PRESENT ON THE DRIVE, AND ARE CORRECTLY NAMED. ; movcpm 63 * sysgen8s | | save 40 xcpm8s.com ddt xcpm8s.com iboot8.hex r ixbios8s.hex r2980 ^C era xcpm8s.com save 36 xcpm8s.com xcpm8S | B | era xcpm8s.com ; INSTAL   ^!h6͵!n>z^!iDouble Density SysgenSOURCE DRIVE NAME (OR RETURN TO SKIP)SOURCE ON , THEN TYPE RETURNDESTINATION DRIVE NAME (OR RETURN TO REBOOT)DESTINATION ON , THEN TYPE RETURNPERMANENT ERROR, TYPE RETURN TO IGNOREFUNCTION COMPLETEINVALID DRIVE NAME (USE A, B, C, OR D)NO SOURCE FILE ON DISKSOURCE FILE INCOMPLETERN TO IGNOREFUNCk!Li!AiI Aڧ$ÌA2qAz^!gnI ^2h͵!n!iI A$A2Az!iIxCOPYRIGHT (C) 1978, DIGITAL RESEARCH  o&)))))))a{__> ̓> ̓͊~̓#ÚO****!*$*'! ">2!4:(wNͯ>2:)!4f!^!*FNͷyj*DMͿ2: K!͚u c͊<2:\_/:)j*"1!u͚:] \<œ!x͕c2|\ ¢! DMͿ\õ!͕c!͕u AnA2Aͦ͊!͚u c͊2!?͚!͕u cA7nA2Aͦ!͕u c͊!6!?͚>ͦ͊!Q͕SYSGEN VER 2.0SOURCE DRIVE NAME (OR RETURN TO SKIP)SOURCE ON , THEN TYPE RETURNDESTINATION DRIVE NAME (OR RETURN TO REBOOT)DESTINATION ON , THEN TYPE RETURNPERMANENT ERROR, TYPE RETURN TO IGNOREFUNCTION COMPLETEINVALID DRIVE NAME (USE A, B, C, OR D)NO SOURCE FILE ON DISKSOURCE FILE INCOMPLETE.COPYRIGHT (C) 1978, DIGITAL RESEARCH Portions (C) 1982, NLSo&)))))))a{__> W> W^~W#nO****!*$*'! "i>2c2d>@2e:cO̓:dO<2d͋*i"i͓2k:k!nI ^&<2k:hͣ"͛!e51!+n:] ʌ\Ͱ  DDO    O!F#N#~y!@"!= >G^/22M:>L (>2:d ((y>>] >2021> 2-!-F*+|0gp ~2- :.w"+˹0 y 8:1G(ya8Oq#}PX ͳ ! ͩ 2 ͊::2 :!#!:&g yyз!2(!C( !(!:_y2!{#( ( (( y!#(! ( !(!~(Ec!>'2*:(#(((!+!s!I>?2*!:>2R5(> 2R5V>'2*s#r cs#r5c!> : 8 8 !+> >>!2 :(W:(((Z &R  J B rs#r Ts#r>ͮ>2R5ͨ >>?2*s#r cs#r5 :8 !0>!sS>!IS> 2s#r ROM: MOVCPM 63 * TO: SYSGEN A ADDED COMMENTS WITH INSTRUCTIONS TO ALL GEN.SUB FILES ADDED MORE COMMENTS TO BOOT.ASM FILES AND REASSEMBLED ADDED COPY5.COM PROGRAM TO DISK. RAN NEW CRC CHECK LIST 1/8/85 REV. (BG)- CORRECTED GEN560.SUB OFFSET WAS: R2980 CORRECTED TO:R3580 11/25/84 (BG)- MAJOR CHANGE: DELETED 'U' AND 'T' OPTIONS FROM XBIOS.HEX FILES. REASSEMBLED ALL HEX FILES USING 'CONST TIMEOUT' METHOD. ADDED LONG TIMEOUT CAPABILITY TO THIS CONVENTION CHANGED SERIAL PRINTER  M / = 5 X t ] ' + >>}+}O#}xP}o˧}o!00 6 >2/}O>PG t :/O}|(ͨ |0&;|<&0}|Oͨ :/ )|2/}oP6 # >6 /y=(&_G(A(E(MRʄ :121:1ˇ21> >:/0`g.< y P0Po X }|:/W_z0Wbk{z bk ͝ PX X }|O:/  ͨ PX  N#F~#O͙ &c ,&cRr! ˿1!>_2KÃÈ  G|ËL T c d j r Å Ä | Ù Ò1 ͒ ͈ ̓> 2.ͳ =$ XPRO System Monitor Version 2.06 >22>2R>vL ( >T 2͒̓>2)>2&>2(>2*>2:((:(¨: KCKKA: +:2&: 2: 2.: 2):&g(%:2':2(:(_(:( >?2*¨*" :*< :*'(ͳ > Bad System Disk <T &c&cR(s#r>U!:#( ( (!>v ͞gR2>ÞR:( (yO0:(=:0 :&( 8-:'8#y2G8y>͞yyxGy2>Þ:(=(=(:(g:(o:(w:(:)G:((Wy( :y   :y Wy(z`i n&>|:(  ><_ܳ!w˷2͒z•vG >j>J:Wͪ O:W͙ O:O)Ki:OPORT TO 'B' SIDE OF SIO (PRINTER PORT). CHANGED ALL GEN.SUB FILES TO CORRESPOND TO THE NEW FILE NAMES. UPDATED -GENSYS.MOR TO REFLECT CHANGES. RAN NEW CRC CHECK LIST REASON FOR CHANGE: OLD SYSTEM WAS MUCH TOO COMPLICATED 10/24/84 REV. (BG) ADDED -GENSYS.MOR FILE FOR BETTER EXPLANATION OF SYSGEN PROCESS ADDED XBIOS8S6.HEX, BOOT86.ASM,(HEX), GEN8S6.SUB, XBIOS56.HEX BOOT56.HEX, AND GEN56.SUB FILES FOR PEOPLE WITHOUT MOVCPM.COM ?     (?(_?@+      @/ !R!2R2 2 >2>2222 2#! "!:9y2)y2CC:O: 2 O:2 >22>2Å:´2y2=>2 :2 *" :2: }=2 :! }! }:!}4:*v6* #" 2Å2 <22:2! ~6:!º!º:!: :2*":2:2 :o&)))))))[: >  . =$ XPRO System Monitor Version 2.06 B = boot CP/M from Drive A D nn = dump MEMORY from PAGE nn E nnnn = examine/edit MEMORY from nnnn P nn = display/write PORT nn X nnnn = execute CODE @ nnnn Z = zero MEMORY Select option: !T v_cB!vDTEPUX Z!6e.p Dump Mode: (sp) for next page, (cr) to exit |K}Kaa~#K |~# 88>.c | !T v Z p Insert Mode: (sp) to skip, (crc equ gpvec+4 pinvec equ tikvec+2 ;## Interrupt Service Scratch Ram ######################################### FIFO equ pinvec+2 FIFOCT equ FIFO+16 FIFOIN equ FIFOCT+1 FIFOUT equ FIFOIN+1 SPSAVE equ FIFOUT+1 endvar equ spsave+2 ; end of variables ;## CP/M system size variables ############################################ msize equ 63 ; system memory size in k vers equ 22 ; CP/M version number bias equ (msize-20)*1024 ; bias for systems larger than 20k ccp equ 3400H+bias ; start of CCP 84 ## ;## Revised 11/25/84 BEG changed timeout and serial printer port ## ;## ## ;## Assemble with Z80MR the z80 macro assembler from Micro Cornucopia ## ;## though M80 can handle it if you add an ASEG and .Z80 and change ## ;## .LOW. to LOW ## ;## Z80MR XBIOS ## ;## Integrate into your System Image ## ;## MOVCPM 63 * ############################### intdrv equ true ; true for interrupt driven print driver Aside equ true ; true for A side of port false for B side IF Aside lstdat equ 8 ; ports for the A side of the GPPIO lstcnt equ 9 ELSE lstdat equ 0Ah ; ports for the B side of the GPPIO lstcnt equ 0Bh ENDIF ;Aside ptsioc equ 07h ; serial printer port b status/control ptsiod equ 05h ; serial printer port b data tbe equ 4 ; transmit buffer empty flag bit ;## Misc Conditionals ################) to exit |K}K = ~K <-x(uy #}2 p Port Mode: < to last port, > to next port, (sp) same port, (cr) to exit : OK = xK <-x(: Oiy >(<(: <2 (: =2 ( ~#ca!!T v˿`8 O0 8 ))))oycT0:8c> O! v>c2!:)))oycT0:8c> O! v>c2!: bdos equ ccp+806H ; start of BDOS (The resident portion of CP/M) bios equ ccp+1600H ; start of Basic I/O Subsystem (BIOS) cpml equ bios-ccp ; length of CP/M system in bytes (less BIOS) nsects equ cpml/128 ; length of CP/M system in sectors(less BIOS) time equ 10 ; sets length of time before disks turn off bauda equ 0 ; baud rate port a baudb equ 0Ch ; baud rate port b baud3 equ 05h ; byte to set for 300 baud baud12 equ 07H ; byte to set for 1200 baud baud24 equ 0Ah ; byte to set for 2400 bau ## ;## save 40 xcpm.com ## ;## ddt xcpm.com ## ;## ixbios5.hex ; or ixbios8s.hex or ixbios8d.com ## ;## r2980 ## ;## ^C ## ;## sysgen (when asked for a source drive answer with a carriage ## ;## return and then choose a destination drive) ## ;## The n##################################### HiBit equ FALSE ; set to true to enable translation of ; keys with high bit set (msb). dtimer equ FALSE ; TRUE enables ctc drive timeout slodrv equ FALSE ; TRUE slows 'reads' down for disk drives ; with slow settling times (older 5 1/4's) ;## Interrupt Mode 2 Vectors ############################################## Vector equ 0FA00h ; beginning of vector table siovec equ vector ctcvec equ siovec+16 sysvec equ ctcvec+8 gpvec equ sysvec+4 tikve ;########################################################################## ;## CBIOS for CP/M 2.2 and the Xerox 820-1+8 ## ;########################################################################## ;## ## ;## This bios derived from the Kaypro II CBIOS from Non Linear Sys., ## ;## the PFM system monitor by Russell Smith, and the custom CBIOS ## ;## by Mark Stieglitz and Gary Kaufman Version 3.0 DmC 10/3/84 ## ;## With minor mods by BEG 10/16/ew bios will be loaded on the next cold start (reset) ## ;## ## ;########################################################################## TRUE equ 0ffh FALSE equ 0 ;## Conditionals for destination ("A") drive type ######################### ; ONLY ONE OF THESE SHOULD BE TRUE Sing8 equ FALSE ; Eight inch single density Doub8 equ FALSE ; Eight inch double density Doub5 equ TRUE ; Five inch double density (Kaypro Format) ;## Conditionals for printer driver ########A     d baud48 equ 0Ch ; byte to set for 4800 baud baud96 equ 0Eh ; byte to set for 9600 baud ttime equ 0A000H ; loop value for drive turn off motrflg equ 08H ; address of drive motor flag IF Sing8 trksec equ 27 ; sectors/track + 1 nexsec equ 1 ; first sector on track 1 firsec equ 1 ; first sector on track ENDIF ;Sing8 IF Doub8 trksec equ 64 ; sectors per track nexsec equ 1 ; doesn't matter firsec equ 0 ; first sector on track ENDIF ;Doub8 IF doub5 trksec equ 40 ; sec dec b jp z,goccp ; done loading inc c ; bump sector count ld a,trksec ; on to next track? cp c jp nz,wb1 ld c,nexsec ; first sector on next track push bc ; save counters ld c,1 call settrk ; set track pop bc jr wb1 ; I/O devices are selected using the IOBYTE ; logical devices are con: rdr: pun: and lst: ; physical devices are: ; crt: video and kbd ; tty: serial ; lpt: centronics parallel ; ul1: serial with cts as busy ; pun: same as ul1 ; ;con: tty, crt bits 0,1 ;rdtsafe: defb FALSE ; write safe flag IF HiBit vtab: defb ' ',3,' ' ; vector pad xlate table defb 8,' *+ -.' defb 12 ; setup for Keytronic kbd (FRANKLIN ACE) defb '0123456789 ' defb 27,' ',10 ENDIF ;HiBit bdrata: defb baud12 bdratb: defb baud3 ; Cold boot entry point, set up system pointers and pass control to the CCP boot: call diskint ld a,0 ld (0fe31H),a ; turn off alternate character set. ld a,TRUE ld (motrflg),a xor a ; clear system disk number ld (4),a hl ld e,(hl) inc hl ld d,(hl) inc hl ldir bit 7,(hl) jr z,loop2 inc hl loop3: ld b,(hl) ; initialize interrupting I/O dev. inc hl ld c,(hl) inc hl otir bit 7,(hl) jr z,loop3 ld hl,vector ; set Z80 to interrupt mode 2 ld a,h ld i,a im 2 ret ; Warm boot entry point, re-load the CCP and BDOS wboot: call diskint call print defb 0DH,0AH,'Booting..',0DH,0AH,00H wb0: ld sp,100H ; re-set stack ld c,0 ; select drive A: call seldsk ld a,TRUE ld (motrtors per track nexsec equ 16 ; first sector on track 1 firsec equ 0 ; first sector on track ENDIF ;doub5 bitport equ 1CH ; status/control bit mapped port iobyte equ 3 ; logical to physical map rom equ 00000H ; base of rom ram equ 0FC00H ; scratch ram dmaadr equ ram+14H ; dma address maxdsk equ 4 ORG BIOS jp boot ; arrive here from cold start jp wboot ; arrive here for warm start jp const ; console status return in A FF=ready, 00=not jp conin ; console char in jp conor: tty bits 2,3 ;pun: tty, pun bits 4,5 ;lst: tty, crt, lpt, ul1 bits 6,7 const: IF dtimer ELSE call motrof ENDIF ;dtimer ld a,(iobyte) ; get i/o byte and 03H ; strip to con bits ld hl,rom+33H ; serial status jp z,callrom kbdst: ld a,(fifoct) ; if fifo is empty, return 0 or a ret z ld a,255 ret conin: ld a,(iobyte) and 03H ; check i/o byte ld hl,rom+36H ; serial input jp z,callrom kbdin: IF dtimer ELSE call motrof ENDIF ;dtimer call kbdst jrld a,(ioconfig) ; init value for i/o byte ld (iobyte),a ld a,(bdrata) out (bauda),a ld a,(bdratb) out (baudb),a ld a,03h ; initialize serial printer port out (ptsioc),a ld a,0E1h out (ptsioc),a call intinit ; initialize I/O interrupts ei call print defb 1AH,0DH,0AH defb 'XEROX 820 1+8 Version 2.0' defb 0DH,0AH,00H call kbdst ; flush boot charater from keyboard or a call nz,kbdin goccp: ld a,0C3H ; set up CP/M jumps to bdos and wboot ld hl,bios+3 ; wboot entry flg),a IF DOUB8 ld bc,1 ELSE ld bc,0 ; set track ENDIF ;DOUB8 call settrk ld hl,ccp ; first memory location to load ld (dmaadr),hl ld bc,nsects*256+(firsec+1) wb1: push bc ; save sector count and current sector call setsec ; select sector call read pop bc or a jr nz,wb0 ; oops, error on warm boot ld hl,(dmaadr) ; update dma address for next sector ld de,128 ; new dma address add hl,de ld (dmaadr),hl xor a ld (ccp+7),a ; get rid of the autostart command lineut ; console char out jp list ; listing char out jp punch ; punch char out jp reader ; reader char in jp home ; move to track 0 on selected disk drive jp seldsk ; select disk drive jp settrk ; set track # jp setsec ; set sector # jp setdma ; set DMA address jp read ; read selected sector jp write ; write selected sector jp listst ; list status (Ready to print a char) jp sectran ; sector translate ioconfig: defb 00000001B ; initial value for i/o byte (may be patched) wrpoint ld (0),a ld (1),hl ld hl,bdos ; entry point to bdos ld (5),a ld (6),hl ld a,(4) ; last logical disk unit used ld c,a ; pass to ccp to select and 0fh ; make sure this is valid drive cp maxdsk jp c,ccp ; pass control to ccp and 0f0h ld c,a jp ccp intinit: ; initialize interrupt structure di ld b,endvar-vector ld hl,vector-1 zloop: inc hl ; zero out FIFO ld (hl),0 djnz zloop ld hl,inttbl loop2: ld b,0 ; load up interrupt vectors ld c,(hl) inc    z,kbdin push hl call remove ; remove a character from the FIFO pop hl IF HiBit or a ; if msb set translate character ret p ; msb not set AND 01FH ; FORM TABLE INDEX TO VTAB ld hl,vtab ld c,a ld b,0 add hl,bc ld a,(hl) ; pick up xlated character ENDIF ;HiBit and 07FH ; strip bit 7 ret remove: ld hl,fifoct dec (hl) ld hl,fifout index: ld a,(hl) inc a and 0fh ld (hl),a ld hl,fifo add a,l ld l,a ld a,(hl) ret conout: ld a,(iobyte) ; check i/o b call callrom ELSE reti motrof: ld a,(motrflg) or a ret z ld hl,(turnof) ld a,h or l ret z dec hl ld (turnof),hl ld a,h or l ret nz ld hl,rom+27h call callrom ret ENDIF ;dtimer keysrv: ld (spsave),sp ld sp,tmpstk push hl push de push bc push af in a,(1eh) cpl ld hl,(pinvec) jr dsptch ret stash: ld c,a ld hl,fifoct ld a,(hl) inc a cp 16 ret nc ld (hl),a ld hl,fifoin call index ld (hl),c ret timer: ld (spsave),sp ldet listst: ld a,(iobyte) ; check i/o byte and 0C0H jp z,siost ;check status on sio port b IF intdrv cp 80h jr nz,giveup ld a,(lstrdy) ret ELSE ld hl,rom+3CH ; centronics cp 80H jp z,callrom ENDIF ;intdrv giveup: ld a,0ffh ; 0ffh=ready ret siost: in a,(ptsioc) and tbe ; is it ready ret z ld a,0FFh ; set the ready flag ret diskint:ld hl,rom+03H ; re-set disk software sub-system jr callrom home: ld hl,rom+0CH ; home disk drive rom routine jr callrom seysical sector jr callrom callrom:di exx ; save cp/m arguments in a,(bitport) ; turn rom on set 7,a out (bitport),a ld (savsp),sp ; save current stack (may be under rom) ld sp,stack ; set a local stack ld de,biosret ; rom to "RET" here push de exx ; restore cp/m arguments and call loc jp (hl) ; to rom routine specified in hl biosret:ex af,af' ; save reg A ld sp,(savsp) ; restore stack in a,(bitport) ; off the rom res 7,a out (bitport),a ex af,af' ; restore reg A yte and 03H ld hl,rom+39H ; serial output jp z,callrom ld hl,rom+45H ; assume video jp callrom reader: ld hl,rom+36H ; serial input jp callrom punch: ld hl,rom+39h ;serial punch jp callrom list: ld a,(iobyte) and 0C0H ; strip IOBYTE to lst: devices jp z,serial ; serial on SIO port B if lst:=tty:=00xxxxxxb IF intdrv cp 80h ; centronics if lst:=lpt:=10xxxxxxb jp z,intlst ; centronics with interrupts ELSE ld hl,rom+3FH ; centronics with polled status cp 80H ; a sp,tmpstk push hl push de push bc push af ld hl,(tikvec) dsptch: call callhl ; common interrupt dispatch point pop af ; will return here pop bc pop de pop hl ld sp,(spsave) ei reti callhl: jp (hl) ;## Interrupt vector initialization table First byte is number of bytes ## ;## to move, Next two bytes is where to move, Following is what to move ### inttbl: defb 2 ; source of interrupt vectors defw sysvec+2 defw keysrv ; keyboard interrupt vector defb 2 dldsk: IF slodrv ld a,0ffh ; set new disk flag ld (newdsk),a ; store it ENDIF ;slodrv ld hl,rom+0FH ; select disk drive jr callrom settrk: ld hl,rom+12H ; seek track jr callrom setsec: ld hl,rom+15H ; set sector number jr callrom setdma: ld hl,rom+18H ; set dma address jr callrom read: IF dtimer ld a,time ld (motor),a ELSE ld hl,ttime ld (turnof),hl ENDIF ;dtimer IF slodrv ld a,(newdsk) ; waste some time if its a new drive or a jr z,pass olp: ld de,80h ;ei ret ; done with rom routine print: ex (sp),hl ; pop return address, points to text to print ld a,(hl) ; get a byte of text, stop on zero byte inc hl ex (sp),hl ; save new return address or a ; is it a zero byte? ret z ld c,a ; no, so print it call conout jr print IF intdrv listih: ld (spsave),sp ld sp,tmpstk push af ld a,0ffh ld (lstrdy),a pop af ld sp,(spsave) ei reti ENDIF ;intdrv dsktmr: IF dtimer ld hl,motor dec (hl) ret nz ld hl,rom+27hs lst:=lpt: (same as Kaypro) jp z,callrom ENDIF ;intdrv ld hl,rom+45H ; video cp 40H ; video if lst:=crt:=01xxxxxxb jp z,callrom ld hl,rom+39h ; ul1: default to serial on SIO port A jp callrom ; if lst:=ul1:=11xxxxxxb IF intdrv intlst: ld a,(lstrdy) or a jr z,intlst xor a ld (lstrdy),a ld a,c out (lstdat),a ret ENDIF ;intdrv serial: in a,(ptsioc) ; see if SIO port is busy and tbe jr z,serial ;loop until it's ready ld a,c out (ptsiod),a ;send the character r delay loop ilp: dec de ld a,d or e jp nz,ilp djnz olp xor a ld (newdsk),a pass: ENDIF ;slodrv ld hl,rom+1BH ; read a logical sector jr callrom write: IF dtimer ld a,time ld (motor),a ELSE ld hl,ttime ld (turnof),hl ENDIF ;dtimer ld hl,rom+1EH ; write a logical sector ld a,(wrtsafe) ; write safe flag or a ; true or false jr z,callrom ; normal operation ld c,1 ; directory write code (forces write op) jr callrom sectran:ld hl,rom+21H ; xlate logical to phA     efw ctcvec+6 defw timer ; one second interrupt counter IF intdrv defb 2 defw gpvec defw listih ENDIF ;intdrv defb 4 ; 'software' interrupts defw tikvec defw dsktmr ; disk motor timeout defw stash ; FIFO maintenance defb 0ffh ; end of table marker ;## I/O initialization table ############################################## ;## First byte is how many to send, next byte is where to send, following # ;## is what to send ###################################################F80216FAB6F8021CFA8F :10F8E00060F80420FA75F8A4F8FF011810021A272E :10F8F00069021BC75D031F4F1A8303090F1C87FF93 :01F92000FFE7 :07F923000A00A0FF446D4340 :0000000000 A75F8A4F8FF011810021A272E :10F8F00069021BC75D031F4F1A8303090F1C87FF93 :01F92000FFE7 :F97C64 :10F88000B5C82B2224F97CB5C0212700CD31F8C999 :10F89000ED7337FA3120F9E5D5C5F5DB1E2F2A22A5 :10F8A000FA1821C94F2134FA7E3CFE10D077213559 :10F8B000FACD79F771C9ED7337FA3120F9E5D5C57D :10F8C000F52A20FACDD2F8F1C1D1E1ED7B37FAFB70 :10F8D000ED4DE9021AFA902F7E1E61F :10F770007FC92134FA352136FA7E3CE60F77212401 :10F78000FA856F7EC93A0300E603213900CA31F8D1 :10F79000214500C331F8213600C331F8213900C3B7 :10F7A00031F83A0300E6C0CACBF7FE80CABDF721A4 :10F7B0004500FE40CA31F8213900C331F83A26F934 :10F7C000B728FAAF3226F979D308C9DB07E604284F :10F7D000FA79D305C93A0300E6C0CAE8F7FE8020EB :10F7E000043A26F9C93EFFC9DB07E604C83EFFC953 :10F7F000210300183C210C001837210F001832217A :10F800001200182D21150018282118001823210096 :10F81000A02224F9211B0018182100A02224F9217C :10F82#### ctc0 equ 18h ctc1 equ ctc0+1 ctc2 equ ctc1+1 ctc3 equ ctc2+1 defb 1,ctc0 ; program CTC for disk motor timeout defb .LOW.ctcvec defb 2,ctc2 defb 27h,69h defb 2,ctc3 defb 0c7h,5dh kbdctl equ 01fh defb 3,kbdctl ; program keyboard port for interrupt defb 4fh ; drive defb .LOW.(sysvec+2) defb 83h IF intdrv defb 3,LSTCNT defb 0fh defb .LOW.gpvec defb 087h ENDIF ;intdrv defb 0ffh stkbot: defs 32 tmpstk equ $ ; interrupt stack will use this space n:10F60000C337F6C3E2F6C341F7C357F7C385F7C361 :10F61000A2F7C39CF7C396F7C3F5F7C3FAF7C3FF86 :10F62000F7C304F8C309F8C30EF8C319F8C3D5F734 :10F63000C32CF801000705CDF0F73E003231FE3E45 :10F64000FF320800AF3204003A33F63203003A3595 :10F65000F6D3003A36F6D30C3E03D3073EE1D30788 :10F66000CDB2F6FBCD54F81A0D0A5845524F58202A :10F6700038323020312B382056657273696F6E2016 :10F68000322E300D0A00CD4FF7B7C462F73EC321CA :10F6900003F63200002201002106E83205002206AE :10F6A000003A04004FE60FFE04DA00E0E6F04FC334 :10F6B00000E0F3060001E003A34F6B728090E01180521210018E8 :10F8300000F3D9DB1CCBFFD31CED7321F931FFF9A9 :10F840001146F8D5D9E908ED7B21F9DB1CCBBFD3F4 :10F850001C08FBC9E37E23E3B7C84FCD85F718F436 :10F86000ED7337FA3120F9F53EFF3226F9F1ED7BE1 :10F8700037FAFBED4DED4D3A0800B7C82A24F97C64 :10F88000B5C82B2224F97CB5C0212700CD31F8C999 :10F89000ED7337FA3120F9E5D5C5F5DB1E2F2A22A5 :10F8A000FA1821C94F2134FA7E3CFE10D077213559 :10F8B000FACD79F771C9ED7337FA3120F9E5D5C57D :10F8C000F52A20FACDD2F8F1C1D1E1ED7B37FAFB70 :10F8D000ED4DE9021AFA90ewdsk: defb 0ffh ; flag for drive select savsp: defs 2 ; stack pointer during rom call motor: defb time turnof: defw ttime ; counter for disk turn off lstrdy: defb 0ffh defb 'DmC' ; to mark end of bios stack equ 0F9ffh ; a local stack ; (just below vector table at FA00h) end 3921FFF923360010FB21D3F8CF :10F6C00006004E235E235623EDB0CB7E28F2234660 :10F6D000234E23EDB3CB7E28F62100FA7CED47EDD7 :10F6E0005EC9CDF0F7CD54F80D0A426F6F74696EA4 :10F6F000672E2E0D0A003100010E00CDFAF73EFFF5 :10F70000320800010000CDFFF72100E02214FC01C7 :10F71000012CC5CD04F8CD0EF8C1B720D92A14FCB0 :10F72000118000192214FCAF3207E005CA8DF60CD7 :10F730003E28B9C212F70E10C50E01CDFFF7C11851 :10F74000D1CD77F83A0300E603213300CA31F83A05 :10F7500034FAB7C83EFFC93A0300E603213600CAAF :10F7600031F8CD77F8CD4FF728F8E5CD7  3921FFF923360010FB21D3ECF3 :10EAC00006004E235E235623EDB0CB7E28F223466C :10EAD000234E23EDB3CB7E28F62100FA7CED47EDE3 :10EAE0005EC9CDF0EBCD54EC0D0A426F6F74696EC8 :10EAF000672E2E0D0A003100010E00CDFAEB3EFF0D :10EB0000320800010000CDFFEB2100D42214FC01EB :10EB1000012CC5CD04ECCD0EECC1B720D92A14FCD4 :10EB2000118000192214FCAF3207D405CA8DEA0CFB :10EB30003E28B9C212EB0E10C50E01CDFFEBC11875 :10EB4000D1CD77EC3A0300E603213300CA31EC3A29 :10EB500034FAB7C83EFFC93A0300E603213600CABB :10EB600031ECCD77ECCD4FEB28F8E5CD7EC0216FAB6EC021CFAB3 :10ECE00060EC0420FA75ECA4ECFF011810021A275E :10ECF00069021BC75D031F4F1A8303090F1C87FF9F :01ED2000FFF3 :07ED23000A00A0FF446D434C :0000000000 A75ECA4ECFF011810021A275E :10ECF00069021BC75D031F4F1A8303090F1C87FF9F :01ED2000FFF3 :ED7C7C :10EC8000B5C82B2224ED7CB5C0212700CD31ECC9BD :10EC9000ED7337FA3120EDE5D5C5F5DB1E2F2A22BD :10ECA000FA1821C94F2134FA7E3CFE10D077213565 :10ECB000FACD79EB71C9ED7337FA3120EDE5D5C5A1 :10ECC000F52A20FACDD2ECF1C1D1E1ED7B37FAFB88 :10ECD000ED4DE9021AFA902EBE1E65B :10EB70007FC92134FA352136FA7E3CE60F7721240D :10EB8000FA856F7EC93A0300E603213900CA31ECE9 :10EB9000214500C331EC213600C331EC213900C3DB :10EBA00031EC3A0300E6C0CACBEBFE80CABDEB21D4 :10EBB0004500FE40CA31EC213900C331EC3A26ED64 :10EBC000B728FAAF3226ED79D308C9DB07E6042867 :10EBD000FA79D305C93A0300E6C0CAE8EBFE802003 :10EBE000043A26EDC93EFFC9DB07E604C83EFFC96B :10EBF000210300183C210C001837210F0018322186 :10EC00001200182D211500182821180018232100A2 :10EC1000A02224ED211B0018182100A02224ED21A0 :10EC2:10EA0000C337EAC3E2EAC341EBC357EBC385EBC3A9 :10EA1000A2EBC39CEBC396EBC3F5EBC3FAEBC3FFCE :10EA2000EBC304ECC309ECC30EECC319ECC3D5EB88 :10EA3000C32CEC01000705CDF0EB3E003231FE3E69 :10EA4000FF320800AF3204003A33EA3203003A35AD :10EA5000EAD3003A36EAD30C3E03D3073EE1D307AC :10EA6000CDB2EAFBCD54EC1A0D0A5845524F58204E :10EA700038323020312B382056657273696F6E2022 :10EA8000322E300D0A00CD4FEBB7C462EB3EC321EE :10EA900003EA3200002201002106DC3205002206D2 :10EAA000003A04004FE60FFE04DA00D4E6F04FC34C :10EAB00000D4F3060001E003A34EAB728090E0118052121001800 :10EC300000F3D9DB1CCBFFD31CED7321ED31FFF9C1 :10EC40001146ECD5D9E908ED7B21EDDB1CCBBFD318 :10EC50001C08FBC9E37E23E3B7C84FCD85EB18F44E :10EC6000ED7337FA3120EDF53EFF3226EDF1ED7B05 :10EC700037FAFBED4DED4D3A0800B7C82A24ED7C7C :10EC8000B5C82B2224ED7CB5C0212700CD31ECC9BD :10EC9000ED7337FA3120EDE5D5C5F5DB1E2F2A22BD :10ECA000FA1821C94F2134FA7E3CFE10D077213565 :10ECB000FACD79EB71C9ED7337FA3120EDE5D5C5A1 :10ECC000F52A20FACDD2ECF1C1D1E1ED7B37FAFB88 :10ECD000ED4DE9021AFA90A     :10EA0000C337EAC3E2EAC341EBC357EBC385EBC3A9 :10EA1000A2EBC39CEBC396EBC3F5EBC3FAEBC3FFCE :10EA2000EBC304ECC309ECC30EECC319ECC3D5EB88 :10EA3000C32CEC01000705CDF0EB3E003231FE3E69 :10EA4000FF320800AF3204003A33EA3203003A35AD :10EA5000EAD3003A36EAD30C3E03D3073EE1D307AC :10EA6000CDB2EAFBCD54EC1A0D0A5845524F58204E :10EA700038323020312B382056657273696F6E2022 :10EA8000322E300D0A00CD4FEBB7C462EB3EC321EE :10EA900003EA3200002201002106DC3205002206D2 :10EAA000003A04004FE60FFE04DA00D4E6F04FC34C :10EAB00000D4F306:10F60000C337F6C3E2F6C341F7C357F7C385F7C361 :10F61000A2F7C39CF7C396F7C3F5F7C3FAF7C3FF86 :10F62000F7C304F8C309F8C30EF8C319F8C3D5F734 :10F63000C32CF801000705CDF0F73E003231FE3E45 :10F64000FF320800AF3204003A33F63203003A3595 :10F65000F6D3003A36F6D30C3E03D3073EE1D30788 :10F66000CDB2F6FBCD54F81A0D0A5845524F58202A :10F6700038323020312B382056657273696F6E2016 :10F68000322E300D0A00CD4FF7B7C462F73EC321CA :10F6900003F63200002201002106E83205002206AE :10F6A000003A04004FE60FFE04DA00E0E6F04FC334 :10F6B00000E0F3060001E003A34EAB728090E0118052121001800 :10EC300000F3D9DB1CCBFFD31CED7321ED31FFF9C1 :10EC40001146ECD5D9E908ED7B21EDDB1CCBBFD318 :10EC50001C08FBC9E37E23E3B7C84FCD85EB18F44E :10EC6000ED7337FA3120EDF53EFF3226EDF1ED7B05 :10EC700037FAFBED4DED4D3A0800B7C82A24ED7C7C :10EC8000B5C82B2224ED7CB5C0212700CD31ECC9BD :10EC9000ED7337FA3120EDE5D5C5F5DB1E2F2A22BD :10ECA000FA1821C94F2134FA7E3CFE10D077213565 :10ECB000FACD79EB71C9ED7337FA3120EDE5D5C5A1 :10ECC000F52A20FACDD2ECF1C1D1E1ED7B37FAFB88 :10ECD000ED4DE9021AFA903921FFF923360010FB21D3ECF3 :10EAC00006004E235E235623EDB0CB7E28F223466C :10EAD000234E23EDB3CB7E28F62100FA7CED47EDE3 :10EAE0005EC9CDF0EBCD54EC0D0A426F6F74696EC8 :10EAF000672E2E0D0A003100010E00CDFAEB3EFF0D :10EB0000320800010000CDFFEB2100D42214FC01EB :10EB1000022CC5CD04ECCD0EECC1B720D92A14FCD3 :10EB2000118000192214FCAF3207D405CA8DEA0CFB :10EB30003E1BB9C212EB0E01C50E01CDFFEBC11891 :10EB4000D1CD77EC3A0300E603213300CA31EC3A29 :10EB500034FAB7C83EFFC93A0300E603213600CABB :10EB600031ECCD77ECCD4FEB28F8E5CD73921FFF923360010FB21D3F8CF :10F6C00006004E235E235623EDB0CB7E28F2234660 :10F6D000234E23EDB3CB7E28F62100FA7CED47EDD7 :10F6E0005EC9CDF0F7CD54F80D0A426F6F74696EA4 :10F6F000672E2E0D0A003100010E00CDFAF73EFFF5 :10F70000320800010100CDFFF72100E02214FC01C6 :10F71000012CC5CD04F8CD0EF8C1B720D92A14FCB0 :10F72000118000192214FCAF3207E005CA8DF60CD7 :10F730003E40B9C212F70E01C50E01CDFFF7C11848 :10F74000D1CD77F83A0300E603213300CA31F83A05 :10F7500034FAB7C83EFFC93A0300E603213600CAAF :10F7600031F8CD77F8CD4FF728F8E5CD7EC0216FAB6EC021CFAB3 :10ECE00060EC0420FA75ECA4ECFF011810021A275E :10ECF00069021BC75D031F4F1A8303090F1C87FF9F :01ED2000FFF3 :07ED23000A00A0FF446D434C :0000000000 A75ECA4ECFF011810021A275E :10ECF00069021BC75D031F4F1A8303090F1C87FF9F :01ED2000FFF3 :ED7C7C :10EC8000B5C82B2224ED7CB5C0212700CD31ECC9BD :10EC9000ED7337FA3120EDE5D5C5F5DB1E2F2A22BD :10ECA000FA1821C94F2134FA7E3CFE10D077213565 :10ECB000FACD79EB71C9ED7337FA3120EDE5D5C5A1 :10ECC000F52A20FACDD2ECF1C1D1E1ED7B37FAFB88 :10ECD000ED4DE9021AFA902EBE1E65B :10EB70007FC92134FA352136FA7E3CE60F7721240D :10EB8000FA856F7EC93A0300E603213900CA31ECE9 :10EB9000214500C331EC213600C331EC213900C3DB :10EBA00031EC3A0300E6C0CACBEBFE80CABDEB21D4 :10EBB0004500FE40CA31EC213900C331EC3A26ED64 :10EBC000B728FAAF3226ED79D308C9DB07E6042867 :10EBD000FA79D305C93A0300E6C0CAE8EBFE802003 :10EBE000043A26EDC93EFFC9DB07E604C83EFFC96B :10EBF000210300183C210C001837210F0018322186 :10EC00001200182D211500182821180018232100A2 :10EC1000A02224ED211B0018182100A02224ED21A0 :10EC2  2F7E1E61F :10F770007FC92134FA352136FA7E3CE60F77212401 :10F78000FA856F7EC93A0300E603213900CA31F8D1 :10F79000214500C331F8213600C331F8213900C3B7 :10F7A00031F83A0300E6C0CACBF7FE80CABDF721A4 :10F7B0004500FE40CA31F8213900C331F83A26F934 :10F7C000B728FAAF3226F979D308C9DB07E604284F :10F7D000FA79D305C93A0300E6C0CAE8F7FE8020EB :10F7E000043A26F9C93EFFC9DB07E604C83EFFC953 :10F7F000210300183C210C001837210F001832217A :10F800001200182D21150018282118001823210096 :10F81000A02224F9211B0018182100A02224F9217C :10F822F7E1E61F :10F770007FC92134FA352136FA7E3CE60F77212401 :10F78000FA856F7EC93A0300E603213900CA31F8D1 :10F79000214500C331F8213600C331F8213900C3B7 :10F7A00031F83A0300E6C0CACBF7FE80CABDF721A4 :10F7B0004500FE40CA31F8213900C331F83A26F934 :10F7C000B728FAAF3226F979D308C9DB07E604284F :10F7D000FA79D305C93A0300E6C0CAE8F7FE8020EB :10F7E000043A26F9C93EFFC9DB07E604C83EFFC953 :10F7F000210300183C210C001837210F001832217A :10F800001200182D21150018282118001823210096 :10F81000A02224F9211B0018182100A02224F9217C :10F82:10F60000C337F6C3E2F6C341F7C357F7C385F7C361 :10F61000A2F7C39CF7C396F7C3F5F7C3FAF7C3FF86 :10F62000F7C304F8C309F8C30EF8C319F8C3D5F734 :10F63000C32CF801000705CDF0F73E003231FE3E45 :10F64000FF320800AF3204003A33F63203003A3595 :10F65000F6D3003A36F6D30C3E03D3073EE1D30788 :10F66000CDB2F6FBCD54F81A0D0A5845524F58202A :10F6700038323020312B382056657273696F6E2016 :10F68000322E300D0A00CD4FF7B7C462F73EC321CA :10F6900003F63200002201002106E83205002206AE :10F6A000003A04004FE60FFE04DA00E0E6F04FC334 :10F6B00000E0F3060001E003A34F6B728090E01180521210018E8 :10F8300000F3D9DB1CCBFFD31CED7321F931FFF9A9 :10F840001146F8D5D9E908ED7B21F9DB1CCBBFD3F4 :10F850001C08FBC9E37E23E3B7C84FCD85F718F436 :10F86000ED7337FA3120F9F53EFF3226F9F1ED7BE1 :10F8700037FAFBED4DED4D3A0800B7C82A24F97C64 :10F88000B5C82B2224F97CB5C0212700CD31F8C999 :10F89000ED7337FA3120F9E5D5C5F5DB1E2F2A22A5 :10F8A000FA1821C94F2134FA7E3CFE10D077213559 :10F8B000FACD79F771C9ED7337FA3120F9E5D5C57D :10F8C000F52A20FACDD2F8F1C1D1E1ED7B37FAFB70 :10F8D000ED4DE9021AFA900001E003A34F6B728090E01180521210018E8 :10F8300000F3D9DB1CCBFFD31CED7321F931FFF9A9 :10F840001146F8D5D9E908ED7B21F9DB1CCBBFD3F4 :10F850001C08FBC9E37E23E3B7C84FCD85F718F436 :10F86000ED7337FA3120F9F53EFF3226F9F1ED7BE1 :10F8700037FAFBED4DED4D3A0800B7C82A24F97C64 :10F88000B5C82B2224F97CB5C0212700CD31F8C999 :10F89000ED7337FA3120F9E5D5C5F5DB1E2F2A22A5 :10F8A000FA1821C94F2134FA7E3CFE10D077213559 :10F8B000FACD79F771C9ED7337FA3120F9E5D5C57D :10F8C000F52A20FACDD2F8F1C1D1E1ED7B37FAFB70 :10F8D000ED4DE9021AFA903921FFF923360010FB21D3F8CF :10F6C00006004E235E235623EDB0CB7E28F2234660 :10F6D000234E23EDB3CB7E28F62100FA7CED47EDD7 :10F6E0005EC9CDF0F7CD54F80D0A426F6F74696EA4 :10F6F000672E2E0D0A003100010E00CDFAF73EFFF5 :10F70000320800010000CDFFF72100E02214FC01C7 :10F71000022CC5CD04F8CD0EF8C1B720D92A14FCAF :10F72000118000192214FCAF3207E005CA8DF60CD7 :10F730003E1BB9C212F70E01C50E01CDFFF7C1186D :10F74000D1CD77F83A0300E603213300CA31F83A05 :10F7500034FAB7C83EFFC93A0300E603213600CAAF :10F7600031F8CD77F8CD4FF728F8E5CD7F80216FAB6F8021CFA8F :10F8E00060F80420FA75F8A4F8FF011810021A272E :10F8F00069021BC75D031F4F1A8303090F1C87FF93 :01F92000FFE7 :07F923000A00A0FF446D4340 :0000000000 A75F8A4F8FF011810021A272E :10F8F00069021BC75D031F4F1A8303090F1C87FF93 :01F92000FFE7 :F97C64 :10F88000B5C82B2224F97CB5C0212700CD31F8C999 :10F89000ED7337FA3120F9E5D5C5F5DB1E2F2A22A5 :10F8A000FA1821C94F2134FA7E3CFE10D077213559 :10F8B000FACD79F771C9ED7337FA3120F9E5D5C57D :10F8C000F52A20FACDD2F8F1C1D1E1ED7B37FAFB70 :10F8D000ED4DE9021AFA90A     F80216FAB6F8021CFA8F :10F8E00060F80420FA75F8A4F8FF011810021A272E :10F8F00069021BC75D031F4F1A8303090F1C87FF93 :01F92000FFE7 :07F923000A00A0FF446D4340 :0000000000 A75F8A4F8FF011810021A272E :10F8F00069021BC75D031F4F1A8303090F1C87FF93 :01F92000FFE7 :F97C64 :10F88000B5C82B2224F97CB5C0212700CD31F8C999 :10F89000ED7337FA3120F9E5D5C5F5DB1E2F2A22A5 :10F8A000FA1821C94F2134FA7E3CFE10D077213559 :10F8B000FACD79F771C9ED7337FA3120F9E5D5C57D :10F8C000F52A20FACDD2F8F1C1D1E1ED7B37FAFB70 :10F8D000ED4DE9021AFA90 ;## ## ;########################################################################## 00FF TRUE equ 0ffh 0000 FALSE equ 0 ;## Conditionals for destination ("A") drive type ######################### ; ONLY ONE OF THESE SHOULD BE TRUE 00FF Sing8 equ TRUE ; Eight inch single density 0000 Doub8 equ FALSE ; Eigh change ## ;## .LOW. to LOW ## ;## Z80MR XBIOS ## ;## Integrate into your System Image ## ;## MOVCPM 63 * ## ;## save 40 xcpm.com ## ;## ddt xcpe.com ## t inch double density 0000 Doub5 equ FALSE ; Five inch double density (Kaypro Format) ;## Conditionals for printer driver ####################################### 00FF intdrv equ true ; true for interrupt driven print driver 00FF Aside equ true ; true for A side of port false for B side IF Aside 0008 lstdat equ 8 ; ports for the A side of the GPPIO 0009 lst Z80MR VER 1.2 FILE XBIOS8S ;########################################################################## ;## CBIOS for CP/M 2.2 and the Xerox 820-1+8 ## ;########################################################################## ;## ## ;## This bios derived from the Kaypro II CBIOS from Non Linear Sys., ## ;## the PFM system monitor by Russell ;## ixbios5.hex ; or ixbios8s.hex or ixbios8d.com ## ;## r2980 ## ;## ^C ## ;## sysgen (when asked for a source drive answer with a carriage ## ;## return and then choose a destination drive) ## ;## The new bios will be loaded on the next cold start (reset) ##  Smith, and the custom CBIOS ## ;## by Mark Stieglitz and Gary Kaufman Version 3.0 DmC 10/3/84 ## ;## With minor mods by BEG 10/16/84 ## ;## Revised 11/25/84 BEG changed timeout and serial printer port ## ;## ## ;## Assemble with Z80MR the z80 macro assembler from Micro Cornucopia ## ;## though M80 can handle it if you add an ASEG and .Z80 and  cnt equ 9 ELSE lstdat equ 0Ah ; ports for the B side of the GPPIO lstcnt equ 0Bh ENDIF ;Aside 0007 ptsioc equ 07h ; serial printer port b status/control 0005 ptsiod equ 05h ; serial printer port b data 0004 tbe equ 4 ; transmit buffer empty flag bit ;## Misc Conditionals #####################################################  F600 C337F6 jp boot ; arrive here from cold start F603 C3E2F6 jp wboot ; arrive here for warm start F606 C341F7 jp const ; console status return in A FF=ready, 00=not F609 C357F7 jp conin ; console char in F60C C385F7 jp conout ; console char out F60F C3A2F7 jp list ; listing char out F612 C39CF7 jp punch ; punch char out F615 C396F7 jp reader ; reader char in F618 C3F5F7 jp home ; move to track 0 on selected disk drive F61B C3FAF7 jp seldA37 SPSAVE equ FIFOUT+1 FA39 endvar equ spsave+2 ; end of variables ;## CP/M system size variables ############################################ 003F msize equ 63 ; system memory size in k 0016 vers equ 22 ; CP/M version number AC00 bias equ (msize-20)*1024 ; bias for systems larger than 20k E000 ccp equ 3400H+bias ; start of CCP E806 bdos equ ccp+806H ; start of BDOS (The resid 0001 firsec equ 1 ; first sector on track ENDIF ;Sing8 IF Doub8 trksec equ 64 ; sectors per track nexsec equ 1 ; doesn't matter firsec equ 0 ; first sector on track ENDIF ;Doub8 IF doub5 trksec equ 40 ; sectors per track nexsec equ 16 0000 HiBit equ FALSE ; set to true to enable translation of ; keys with high bit set (msb). 0000 dtimer equ FALSE ; TRUE enables ctc drive timeout 0000 slodrv equ FALSE ; TRUE slows 'reads' down for disk drives ; with slow settling times (older 5 1/4's) ;## Interrupt Mode 2 Vectors ############################################## FA00 Vector equ 0FA00h ; beginning of vesk ; select disk drive F61E C3FFF7 jp settrk ; set track # F621 C304F8 jp setsec ; set sector # F624 C309F8 jp setdma ; set DMA address F627 C30EF8 jp read ; read selected sector F62A C319F8 jp write ; write selected sector F62D C3D5F7 jp listst ; list status (Ready to print a char) F630 C32CF8 jp sectran ; sector translate F633 01 ioconfig: defb 00000001B ; initial value for i/o byte (may be patched) F634 00 wrtsafe: defb FALSE ; write saent portion of CP/M) F600 bios equ ccp+1600H ; start of Basic I/O Subsystem (BIOS) 1600 cpml equ bios-ccp ; length of CP/M system in bytes (less BIOS) 002C nsects equ cpml/128 ; length of CP/M system in sectors(less BIOS) 000A time equ 10 ; sets length of time before disks turn off 0000 bauda equ 0 ; baud rate port a 000C baudb equ 0Ch ; baud rate port b 0005 baud3 equ 05h ; byte to set for 300 baud 0007 baud ; first sector on track 1 firsec equ 0 ; first sector on track ENDIF ;doub5 001C bitport equ 1CH ; status/control bit mapped port 0003 iobyte equ 3 ; logical to physical map 0000 rom equ 00000H ; base of rom FC00 ram equ 0FC00H ; scratch ram FC14 dmaadr equ ram+14H ; dma address 0004 maxdsk equ 4 F600 ORG BIOS ctor table FA00 siovec equ vector FA10 ctcvec equ siovec+16 FA18 sysvec equ ctcvec+8 FA1C gpvec equ sysvec+4 FA20 tikvec equ gpvec+4 FA22 pinvec equ tikvec+2 ;## Interrupt Service Scratch Ram ######################################### FA24 FIFO equ pinvec+2 FA34 FIFOCT equ FIFO+16 FA35 FIFOIN equ FIFOCT+1 FA36 FIFOUT equ FIFOIN+1 F12 equ 07H ; byte to set for 1200 baud 000A baud24 equ 0Ah ; byte to set for 2400 baud 000C baud48 equ 0Ch ; byte to set for 4800 baud 000E baud96 equ 0Eh ; byte to set for 9600 baud A000 ttime equ 0A000H ; loop value for drive turn off 0008 motrflg equ 08H ; address of drive motor flag IF Sing8 001B trksec equ 27 ; sectors/track + 1 0001 nexsec equ 1 ; first sector on track 1 A     fe flag IF HiBit vtab: defb ' ',3,' ' ; vector pad xlate table defb 8,' *+ -.' defb 12 ; setup for Keytronic kbd (FRANKLIN ACE) defb '0123456789 ' defb 27,' ',10 ENDIF ;HiBit F635 07 bdrata: defb baud12 F636 05 bdratb: defb baud3 ; Cold boot entry point, set up system pointers and pass control to the CCP sector count and current sector F713 CD04F8 call setsec ; select sector F716 CD0EF8 call read F719 C1 pop bc F71A B7 or a F71B 20D9 jr nz,wb0 ; oops, error on warm boot F71D 2A14FC ld hl,(dmaadr) ; update dma address for next sector F720 118000 ld de,128 ; new dma address F723 19 add hl,de F724 2214FC ld (dmaadr),hl F727 AF xor a F728 3207E0 ld (ccp+7),a ; get rid of the autostart command line F72B 05 dec b F7C462F7 call nz,kbdin F68D 3EC3 goccp: ld a,0C3H ; set up CP/M jumps to bdos and wboot F68F 2103F6 ld hl,bios+3 ; wboot entry point F692 320000 ld (0),a F695 220100 ld (1),hl F698 2106E8 ld hl,bdos ; entry point to bdos F69B 320500 ld (5),a F69E 220600 ld (6),hl F6A1 3A0400 ld a,(4) ; last logical disk unit used F6A4 4F ld c,a ; pass to ccp to select F6A5 E60F andhl) F6D7 28F6 jr z,loop3 F6D9 2100FA ld hl,vector ; set Z80 to interrupt mode 2 F6DC 7C ld a,h F6DD ED47 ld i,a F6DF ED5E im 2 F6E1 C9 ret ; Warm boot entry point, re-load the CCP and BDOS F6E2 CDF0F7 wboot: call diskint F6E5 CD54F8 call print F6E8 0D0A426F defb 0DH,0AH,'Booting..',0DH,0AH,00H F6F6 310001 wb0: ld sp,100H ; re-set stack F6F9 0E00 ld c,0 ; selF637 CDF0F7 boot: call diskint F63A 3E00 ld a,0 F63C 3231FE ld (0fe31H),a ; turn off alternate character set. F63F 3EFF ld a,TRUE F641 320800 ld (motrflg),a F644 AF xor a ; clear system disk number F645 320400 ld (4),a F648 3A33F6 ld a,(ioconfig) ; init value for i/o byte F64B 320300 ld (iobyte),a F64E 3A35F6 ld a,(bdrata) F651 D300 out (bauda),a F653 3A36F6 ld a,(bdratb) F2C CA8DF6 jp z,goccp ; done loading F72F 0C inc c ; bump sector count F730 3E1B ld a,trksec ; on to next track? F732 B9 cp c F733 C212F7 jp nz,wb1 F736 0E01 ld c,nexsec ; first sector on next track F738 C5 push bc ; save counters F739 0E01 ld c,1 F73B CDFFF7 call settrk ; set track F73E C1 pop bc F73F 18D1 jr wb1 ; I/O devices are selected using the IOBYTE ; logical 0fh ; make sure this is valid drive F6A7 FE04 cp maxdsk F6A9 DA00E0 jp c,ccp ; pass control to ccp F6AC E6F0 and 0f0h F6AE 4F ld c,a F6AF C300E0 jp ccp F6B2 intinit: ; initialize interrupt structure F6B2 F3 di F6B3 0639 ld b,endvar-vector F6B5 21FFF9 ld hl,vector-1 F6B8 23 zloop: inc hl ; zero out FIFO F6B9 3600 ld (hl),0 F6BB 10FB djnz zloop F6BD 21D3F8 ld hl,inttbl F6C0 0600 ect drive A: F6FB CDFAF7 call seldsk F6FE 3EFF ld a,TRUE F700 320800 ld (motrflg),a IF DOUB8 ld bc,1 ELSE F703 010000 ld bc,0 ; set track ENDIF ;DOUB8 F706 CDFFF7 call settrk F709 2100E0 ld hl,ccp ; first memory location to load F70C 2214FC ld (dmaadr),hl F70F 01022C ld bc,nsects*256+(firsec+1) F712 C5 wb1: push bc ; save 656 D30C out (baudb),a F658 3E03 ld a,03h ; initialize serial printer port F65A D307 out (ptsioc),a F65C 3EE1 ld a,0E1h F65E D307 out (ptsioc),a F660 CDB2F6 call intinit ; initialize I/O interrupts F663 FB ei F664 CD54F8 call print F667 1A0D0A defb 1AH,0DH,0AH F66A 5845524F defb 'XEROX 820 1+8 Version 2.0' F683 0D0A00 defb 0DH,0AH,00H F686 CD4FF7 call kbdst ; flush boot charater from keyboard F689 B7 or a F68A  loop2: ld b,0 ; load up interrupt vectors F6C2 4E ld c,(hl) F6C3 23 inc hl F6C4 5E ld e,(hl) F6C5 23 inc hl F6C6 56 ld d,(hl) F6C7 23 inc hl F6C8 EDB0 ldir F6CA CB7E bit 7,(hl) F6CC 28F2 jr z,loop2 F6CE 23 inc hl F6CF 46 loop3: ld b,(hl) ; initialize interrupting I/O dev. F6D0 23 inc hl F6D1 4E ld c,(hl) F6D2 23 inc hl F6D3 EDB3 otir F6D5 CB7E bit 7,(   devices are con: rdr: pun: and lst: ; physical devices are: ; crt: video and kbd ; tty: serial ; lpt: centronics parallel ; ul1: serial with cts as busy ; pun: same as ul1 ; ;con: tty, crt bits 0,1 ;rdr: tty bits 2,3 ;pun: tty, pun bits 4,5 ;lst: tty, crt, lpt, ul1 bits 6,7 F741  and tbe F7CF 28FA jr z,serial ;loop until it's ready F7D1 79 ld a,c F7D2 D305 out (ptsiod),a ;send the character F7D4 C9 ret F7D5 3A0300 listst: ld a,(iobyte) ; check i/o byte F7D8 E6C0 and 0C0H F7DA CAE8F7 jp z,siost ;check status on sio port b IF intdrv F7DD FE80 cp 80h F7DF 2004 jr nz,giveup F7E1 3A26F9 ld a,(lstrdy) F7E4 C9 ret ELSE  IF HiBit or a ; if msb set translate character ret p ; msb not set AND 01FH ; FORM TABLE INDEX TO VTAB ld hl,vtab ld c,a ld b,0 add hl,bc ld a,(hl) ; pick up xlated character ENDIF ;HiBit F76F E67F and 07FH ; strip bit 7 F771 C9 ret F772 2134FA remo IF intdrv F7AA FE80 cp 80h ; centronics if lst:=lpt:=10xxxxxxb F7AC CABDF7 jp z,intlst ; centronics with interrupts ELSE ld hl,rom+3FH ; centronics with polled status cp 80H ; as lst:=lpt: (same as Kaypro) jp z,callrom ENDIF ;intdrv F7AF 214500 ld hl,rom+45H ; video F7B2 FE40 cp 40H ; video if lst:=crt:=01xxxxxxb F7B4 CA31F8 jp z,callrom const: IF dtimer ELSE F741 CD77F8 call motrof ENDIF ;dtimer F744 3A0300 ld a,(iobyte) ; get i/o byte F747 E603 and 03H ; strip to con bits F749 213300 ld hl,rom+33H ; serial status F74C CA31F8 jp z,callrom F74F 3A34FA kbdst: ld a,(fifoct) ; if fifo is empty, return 0 F752 B7 or a F753 C8 ret z F754 3EFF ld a,255 F756 C9 ret  ld hl,rom+3CH ; centronics cp 80H jp z,callrom ENDIF ;intdrv F7E5 3EFF giveup: ld a,0ffh ; 0ffh=ready F7E7 C9 ret F7E8 DB07 siost: in a,(ptsioc) F7EA E604 and tbe ; is it ready F7EC C8 ret z F7ED 3EFF ld a,0FFh ; set the ready flag F7EF C9 ret F7F0 210300 diskint:ld hl,rom+03H ; re-set disk software sub-system F7F3 183C jr callrom ve: ld hl,fifoct F775 35 dec (hl) F776 2136FA ld hl,fifout F779 7E index: ld a,(hl) F77A 3C inc a F77B E60F and 0fh F77D 77 ld (hl),a F77E 2124FA ld hl,fifo F781 85 add a,l F782 6F ld l,a F783 7E ld a,(hl) F784 C9 ret F785 3A0300 conout: ld a,(iobyte) ; check i/o byte F788 E603 and 03H F78A 213900 ld hl,rom+39H ; serial output F78D CA31F8 jp z,callrom F790 214500  F7B7 213900 ld hl,rom+39h ; ul1: default to serial on SIO port A F7BA C331F8 jp callrom ; if lst:=ul1:=11xxxxxxb IF intdrv F7BD 3A26F9 intlst: ld a,(lstrdy) F7C0 B7 or a F7C1 28FA jr z,intlst F7C3 AF xor a F7C4 3226F9 ld (lstrdy),a F7C7 79 ld a,c F7C8 D308 out (lstdat),a F7CA C9 ret ENDIF ;intdrv F7CB DB07 serial: in a,(ptsioc) ; see if SIO port is busy F7CD E604  F757 conin: F757 3A0300 ld a,(iobyte) F75A E603 and 03H ; check i/o byte F75C 213600 ld hl,rom+36H ; serial input F75F CA31F8 jp z,callrom F762 kbdin: IF dtimer ELSE F762 CD77F8 call motrof ENDIF ;dtimer F765 CD4FF7 call kbdst F768 28F8 jr z,kbdin F76A E5 push hl F76B CD72F7 call remove ; remove a character from the FIFO F76E E1 pop hl ld hl,rom+45H ; assume video F793 C331F8 jp callrom F796 213600 reader: ld hl,rom+36H ; serial input F799 C331F8 jp callrom F79C punch: F79C 213900 ld hl,rom+39h ;serial punch F79F C331F8 jp callrom F7A2 3A0300 list: ld a,(iobyte) F7A5 E6C0 and 0C0H ; strip IOBYTE to lst: devices F7A7 CACBF7 jp z,serial ; serial on SIO port B if lst:=tty:=00xxxxxxb A     F7F5 210C00 home: ld hl,rom+0CH ; home disk drive rom routine F7F8 1837 jr callrom F7FA seldsk: IF slodrv ld a,0ffh ; set new disk flag ld (newdsk),a ; store it ENDIF ;slodrv F7FA 210F00 ld hl,rom+0FH ; select disk drive F7FD 1832 jr callrom F7FF 211200 settrk: ld hl,rom+12H ; seek track F802 182D jr callrom F804 211500 setsec: 87C 2A24F9 ld hl,(turnof) F87F 7C ld a,h F880 B5 or l F881 C8 ret z F882 2B dec hl F883 2224F9 ld (turnof),hl F886 7C ld a,h F887 B5 or l F888 C0 ret nz F889 212700 ld hl,rom+27h F88C CD31F8 call callrom F88F C9 ret ENDIF ;dtimer F890 ED7337FA keysrv: ld (spsave),sp F894 3120F9 ld sp,tmpstk F897 E5 push hl F898 D5 push de Fld a,time ld (motor),a ELSE F819 2100A0 ld hl,ttime F81C 2224F9 ld (turnof),hl ENDIF ;dtimer F81F 211E00 ld hl,rom+1EH ; write a logical sector F822 3A34F6 ld a,(wrtsafe) ; write safe flag F825 B7 or a ; true or false F826 2809 jr z,callrom ; normal operation F828 0E01 ld c,1 ; directory write code (forces write op) F82A 1805 jr callrom F82C 212100 sectran:ld hl,rom+21H ; ,(hl) ; get a byte of text, stop on zero byte F856 23 inc hl F857 E3 ex (sp),hl ; save new return address F858 B7 or a ; is it a zero byte? F859 C8 ret z F85A 4F ld c,a ; no, so print it F85B CD85F7 call conout F85E 18F4 jr print IF intdrv F860 ED7337FA listih: ld (spsave),sp F864 3120F9 ld sp,tmpstk F867 F5 push af F868 3EFF ld a,0ffh F86A 3226F9 ld (lstrdy),a F86D F1 ld hl,rom+15H ; set sector number F807 1828 jr callrom F809 211800 setdma: ld hl,rom+18H ; set dma address F80C 1823 jr callrom F80E read: IF dtimer ld a,time ld (motor),a ELSE F80E 2100A0 ld hl,ttime F811 2224F9 ld (turnof),hl ENDIF ;dtimer IF slodrv ld a,(newdsk) ; waste some time if its a new drive 899 C5 push bc F89A F5 push af F89B DB1E in a,(1eh) F89D 2F cpl F89E 2A22FA ld hl,(pinvec) F8A1 1821 jr dsptch F8A3 C9 ret F8A4 4F stash: ld c,a F8A5 2134FA ld hl,fifoct F8A8 7E ld a,(hl) F8A9 3C inc a F8AA FE10 cp 16 F8AC D0 ret nc F8AD 77 ld (hl),a F8AE 2135FA ld hl,fifoin F8B1 CD79F7 call index F8B4 71 ld (hl),c F8B5 C9 ret xlate logical to physical sector F82F 1800 jr callrom F831 F3 callrom:di F832 D9 exx ; save cp/m arguments F833 DB1C in a,(bitport) ; turn rom on F835 CBFF set 7,a F837 D31C out (bitport),a F839 ED7321F9 ld (savsp),sp ; save current stack (may be under rom) F83D 31FFF9 ld sp,stack ; set a local stack F840 1146F8 ld de,biosret ; rom to "RET" here F843 D5 push de F844 D9 exx ; restore cp/m arguments a pop af F86E ED7B37FA ld sp,(spsave) F872 FB ei F873 ED4D reti ENDIF ;intdrv F875 dsktmr: IF dtimer ld hl,motor dec (hl) ret nz ld hl,rom+27h call callrom ELSE F875 ED4D reti F877 motrof: F877 3A0800 ld a,(motrflg) F87A B7 or a F87B C8 ret z F or a jr z,pass olp: ld de,80h ; delay loop ilp: dec de ld a,d or e jp nz,ilp djnz olp xor a ld (newdsk),a pass: ENDIF ;slodrv F814 211B00 ld hl,rom+1BH ; read a logical sector F817 1818 jr callrom F819 write: IF dtimer nd call loc F845 E9 jp (hl) ; to rom routine specified in hl F846 08 biosret:ex af,af' ; save reg A F847 ED7B21F9 ld sp,(savsp) ; restore stack F84B DB1C in a,(bitport) ; off the rom F84D CBBF res 7,a F84F D31C out (bitport),a F851 08 ex af,af' ; restore reg A F852 FB ei F853 C9 ret ; done with rom routine F854 E3 print: ex (sp),hl ; pop return address, points to text to print F855 7E ld a   F8B6 ED7337FA timer: ld (spsave),sp F8BA 3120F9 ld sp,tmpstk F8BD E5 push hl F8BE D5 push de F8BF C5 push bc F8C0 F5 push af F8C1 2A20FA ld hl,(tikvec) F8C4 CDD2F8 dsptch: call callhl ; common interrupt dispatch point F8C7 F1 pop af ; will return here F8C8 C1 pop bc F8C9 D1 pop de F8CA E1 pop hl F8CB ED7B37FA ld sp,(spsave) F8CF FB ei F8D0 ED4D reti F8D2 E LSTRDY F926 MAXDSK 0004 MOTOR F923 MOTRFL 0008 MOTROF F877 MSIZE 003F NEWDSK F920 NEXSEC 0001 NSECTS 002C PINVEC FA22 PRINT F854 PTSIOC 0007 PTSIOD 0005 PUNCH F79C RAM FC00 READ F80E READER F796 REMOVE F772 ROM 0000 SAVSP F921 SECTRA F82C SELDSK F7FA SERIAL F7CB SETDMA F809 SETSEC F804 SETTRK F7FF SING8 00FF SIOST F7E8 SIOVEC FA00 SLODRV 0000 SPSAVE FA37 STACK F9FF STASH F8A4 STKBOT F900 SYSVEC FA18 TBE 0004 TIKVEC FA20 TIME 000A TIMER F8B6 TMPSTK F920 TRKSEC 001B T############################################# ;## First byte is how many to send, next byte is where to send, following # ;## is what to send ####################################################### 0018 ctc0 equ 18h 0019 ctc1 equ ctc0+1 001A ctc2 equ ctc1+1 001B ctc3 equ ctc2+1 F8EA 0118 defb 1,ctc0 ; program CTC for disk motor timeout F8EC 10 defb .LOW.ctcvec F8ED 021A 'DmC' ; to mark end of bios F9FF stack equ 0F9ffh ; a local stack ; (just below vector table at FA00h) F92A end ASEG SYMBOLS ASIDE 00FF BAUD12 0007 BAUD24 000A BAUD3 0005 BAUD48 000C BAUD96 000E BAUDA 0000 BAUDB 000C BDOS E806 BDRATA F635 BDRATB F636 BIAS AC00 BIOS F600 BIOSRE F846 BITPOR 001C BOOT F637 CALLHL F8D2 CALLRO F831 CCP E000 CONIN F757 CONOUT F785 CONST F741 CPML 1600 CTC0 9 callhl: jp (hl) ;## Interrupt vector initialization table First byte is number of bytes ## ;## to move, Next two bytes is where to move, Following is what to move ### F8D3 02 inttbl: defb 2 ; source of interrupt vectors F8D4 1AFA defw sysvec+2 F8D6 90F8 defw keysrv ; keyboard interrupt vector F8D8 02 defb 2 F8D9 16FA defw ctcvec+6 F8DB B6F8 defw timer ;RUE 00FF TTIME A000 TURNOF F924 VECTOR FA00 VERS 0016 WB0 F6F6 WB1 F712 WBOOT F6E2 WRITE F819 WRTSAF F634 ZLOOP F6B8 0000 ERROR(S) ASSEMBLY COMPLETE  VERS 0016 WB0 F6F6 WB1 F712 WBOOT F6E2 WRITE F819 WRTSAF F634 ZLOOP defb 2,ctc2 F8EF 2769 defb 27h,69h F8F1 021B defb 2,ctc3 F8F3 C75D defb 0c7h,5dh 001F kbdctl equ 01fh F8F5 031F defb 3,kbdctl ; program keyboard port for interrupt F8F7 4F defb 4fh ; drive F8F8 1A defb .LOW.(sysvec+2) F8F9 83 defb 83h IF intdrv F8FA 0309 defb 3,LSTCNT F8FC 0F defb 0fh F8FD 1C defb .LOW.gpvec F8FE 87 0018 CTC1 0019 CTC2 001A CTC3 001B CTCVEC FA10 DISKIN F7F0 DMAADR FC14 DOUB5 0000 DOUB8 0000 DSKTMR F875 DSPTCH F8C4 DTIMER 0000 ENDVAR FA39 FALSE 0000 FIFO FA24 FIFOCT FA34 FIFOIN FA35 FIFOUT FA36 FIRSEC 0001 GIVEUP F7E5 GOCCP F68D GPVEC FA1C HIBIT 0000 HOME F7F5 INDEX F779 INTDRV 00FF INTINI F6B2 INTLST F7BD INTTBL F8D3 IOBYTE 0003 IOCONF F633 KBDCTL 001F KBDIN F762 KBDST F74F KEYSRV F890 LIST F7A2 LISTIH F860 LISTST F7D5 LOOP2 F6C0 LOOP3 F6CF LSTCNT 0009 LSTDAT 0008 one second interrupt counter IF intdrv F8DD 02 defb 2 F8DE 1CFA defw gpvec F8E0 60F8 defw listih ENDIF ;intdrv F8E2 04 defb 4 ; 'software' interrupts F8E3 20FA defw tikvec F8E5 75F8 defw dsktmr ; disk motor timeout F8E7 A4F8 defw stash ; FIFO maintenance F8E9 FF defb 0ffh ; end of table marker ;## I/O initialization table #defb 087h ENDIF ;intdrv F8FF FF defb 0ffh F900 stkbot: defs 32 F920 tmpstk equ $ ; interrupt stack will use this space F920 FF newdsk: defb 0ffh ; flag for drive select F921 savsp: defs 2 ; stack pointer during rom call F923 0A motor: defb time F924 00A0 turnof: defw ttime ; counter for disk turn off F926 FF lstrdy: defb 0ffh F927 446D43 defbA       A       A       A       A       A       A       A       A       A       A       A        A     !  !A     "  "A     #  #A     $  $A     %  %A     &  &A     '  'A