TDL Z80 CP/M DISK ASSEMBLER VERSION 2.21 PAGE 1 < GSR COMPUTERS CPM BOOT PROGRAM > VERSION III.2 10-1-82 ; ***************************************** ; * THE GSR CPM BOOT PROGRAM VER III.2 * ; * REQUIRES SBC-880 CPU BOARD * ; * AND UFDC-1 FLOPPY DISK CONTROLLER * ; * REQUIRES 2.2 CPM * ; * CONFIGURED FOR 20K MEMORY SIZE * ; * 2.2 CPM BIOS CONTAINED IN ROM AND * ; * DISK PARAMETERS ARE SET FOR * ; * 8" OR 5 1/4" SINGLE DENSITY DISK * ; * PRINT DRIVER FOR CENTRONIX PARALLEL * ; * INTERFACE AND CONSOLE DRIVER FOR * ; * 9600 BAUD TERMINAL ARE IN BIOS * ; * WRITTEN BY R. D. CATILLER * ; * COPYRIGHT 1982 (C) COMPUTIME & GSR * ; ***************************************** ; ; .PHEX .XLINK .PABS ; ; MEMORY USED BY PROGRAM ; D400 BASE = 0D400H ;PROGRAM BASE ADDRESS. 00FF STACK = 00FFH ;PROGRAM STACK ; ; CONSTANTS FOR PROGRAM ; 000D CR = 0DH ;ASCII CARRIAGE RET 000A LF = 0AH ;ASCII LINE FEED ; ; I/O PORTS ON CPU BOARD ; 0028 T0 = 028H 0029 T1 = T0+1 002A T2 = T0+2 002B TCTL = T0+3 002C INOUT = T0+4 002E CONDTA = T0+6 002F CONCTL = T0+7 002F CONSTS = CONCTL ; ; ; I/O PORTS ON CT256K RAM BOARD ; 0088 MEMSTS = 88H ;MEMORY STATUS PORT ; ; ; DISK DEFINES ; 0016 VERS = 22 ;CP/M VERSION NUMBER 0014 MSIZE = 20 ;CP/M MEMORY SIZE 0000 BIAS = (MSIZE-20)*1024 3400 CCP = 3400H+BIAS ;BASE OF CCP 3C06 BDOS = CCP+806H ;BASE OF BDOS TDL Z80 CP/M DISK ASSEMBLER VERSION 2.21 PAGE 2 < GSR COMPUTERS CPM BOOT PROGRAM > VERSION III.2 10-1-82 4A00 BIOS = CCP+1600H ;BASE OF BIOS 0000 WRALL = 0 ;WRT TO ALOC BLK 0001 WRDIR = 1 ;WRT TO DIRECTORY 0002 WRUAL = 2 ;WRT TO UNALOC BLK 4A03 WBOOTE = BIOS+3 ;WARM BOOT ENTRY ; ; ;DISK I/O PORTS ; 009C DSTAT = 9CH ;DISK STATUS PORT 009C DCMMD = DSTAT ;DISK COMMAND PORT 009D DTRCK = DSTAT+1 ;DISK TRACK PORT 009E DSCTR = DSTAT+2 ;DISK SECTOR PORT 009F DDATA = DSTAT+3 ;DISK DATA PORT 009B DFLAG = 9BH ;STATUS REGISTER 1 009B DCNTL = DFLAG ;CONTROL REGISTER 1 ; ; ;MEMORY USED BY CPM ; 0004 CURDSK = 4 ;CURRENT DISK DRIVE 0080 TBUF = 80H ;DEFAULT CPM BUFFER ; ; ; PROGRAM CODE BEGINS: ; D400 .LOC BASE ; ;LET US BEGIN ; D400 C3 D549 JMP BEGIN ; ; PROGRAM SIGN-ON MESSAGE ; D403 0D0A MSG: .BYTE CR,LF D405 47535220434F .ASCII 'GSR COMPUTERS CPM BOOT PROGRAM' D423 0D0A0D0A0D0A .BYTE CR,LF,CR,LF,CR,LF D429 52454D4F5645 .ASCII 'REMOVE THE SYSTEM DISK FROM DRIVE A.' D44D 0D0A0D0A .BYTE CR,LF,CR,LF D451 494E53455254 .ASCII 'INSERT A DISK IN DRIVE A THAT CONTAINS A 2.2 CPM IMAGE' D487 0D0A .BYTE CR,LF D489 544841542049 .ASCII 'THAT IS CONFIGURED FOR 20K OF MEMORY.' D4AE 0D0A0D0A .BYTE CR,LF,CR,LF D4B2 505245535320 .ASCII 'PRESS CARRIAGE RETURN KEY WHEN READY.' D4D7 0D0A0D0A0D0A .BYTE CR,LF,CR,LF,CR,LF,CR,LF 00DC MSGL = .-MSG ; ; MEMORY PARITY ERROR MESSAGE ; D4DF 0D0A MSG1: .BYTE CR,LF D4E1 504152204552 .ASCII 'PAR ERR' 0009 MSG1L = .-MSG1 ; ; CPM SIZE ERROR MESSAGE TDL Z80 CP/M DISK ASSEMBLER VERSION 2.21 PAGE 3 < GSR COMPUTERS CPM BOOT PROGRAM > VERSION III.2 10-1-82 ; D4E8 0D0A MSGW: .BYTE CR,LF D4EA 544845204350 .ASCII 'THE CPM IMAGE IS THE WRONG SIZE.' D50A 0D0A .BYTE CR,LF D50C 555345204D4F .ASCII 'USE MOVCPM AND SYSGEN TO GENERATE ONE O F' D534 0D0A .BYTE CR,LF D536 544845205052 .ASCII 'THE PROPER SIZE' D545 0D0A0D0A .BYTE CR,LF,CR,LF 0061 MSGWL = .-MSGW ; D549 31 00FF BEGIN: LXI SP,STACK ;SET UP STACK D54C 06DC HELLO: MVI B,MSGL ;SAY HELLO D54E CD D55F CALL MESG D551 31 00FF START: LXI SP,STACK ;RESTORE STACK D554 CD D5C9 CALL MAININ ;GET INPUT D557 FE0D CPI CR D559 C2 D549 JNZ BEGIN D55C C3 D5F7 JMP BOOT ; ;MESSAGE OUTPUT ROUTINE. ; D55F 21 D403 MESG: LXI H,MSG D562 4E MESG1: MOV C,M ;GET A CHARACTER D563 23 INX H ;MOVE POINTER D564 CD D572 CALL CO ;OUTPUT IT D567 10F9 DJNZ MESG1 ;KEEP GOING TILL B=0 D569 C9 RET ; ; ;CRLF BEFORE HLBLK ROUTINE ; D56A CD D586 CRLFHL: CALL CRLF ; ;PRINT THE CURRENT VALUE OF H&L, ;AND A SPACE. ; D56D CD D5B6 HLBLK: CALL DISPHL ; ;PRINT A SPACE ON THE CONSOLE ; D570 0E20 SPACE: MVI C,' ' ; ;THIS IS THE MAIN CONSOLE ;OUTPUT ROUTINE. ; D572 DB2F CO: IN CONCTL D574 E601 ANI 01H D576 28FA JRZ CO D578 79 MOV A,C D579 D32E OUT CONDTA D57B C9 RET ; ; CONVERT HEX TO ASCII ; TDL Z80 CP/M DISK ASSEMBLER VERSION 2.21 PAGE 4 < GSR COMPUTERS CPM BOOT PROGRAM > VERSION III.2 10-1-82 D57C E60F HTA: ANI 0FH ;LOW NIBBLE ONLY D57E C690 ADI 90H D580 27 DAA D581 CE40 ACI 40H D583 27 DAA D584 4F MOV C,A D585 C9 RET ; ; ; CONSOLE CARRIAGE RETURN & ; LINE FEED ROUTINE. ; D586 E5 CRLF: PUSH H ;SAVE HL D587 0602 MVI B,2 ;CRLF LENGTH D589 CD D55F CALL MESG ;SEND CRLF D58C E1 POP H D58D C9 RET ; ;CONSOLE STATUS TEST ROUTINE. ; D58E DB88 CSTS: IN MEMSTS ;TEST FOR PAR ERR D590 E6C0 ANI 0C0H D592 FE80 CPI 80H D594 2017 JRNZ CSTS1 ;NO PAR ERR D596 3A 53BF LDA PARFLG ;1ST PAR ERR? D599 FE00 CPI 0 D59B 2010 JRNZ CSTS1 ;NOT 1ST D59D 3C INR A ;SET PAR FLG D59E 32 53BF STA PARFLG D5A1 E5 PUSH H D5A2 C5 PUSH B D5A3 21 D4DF LXI H,MSG1 ;DISPLAY PAR ERR D5A6 0609 MVI B,MSG1L D5A8 CD D562 CALL MESG1 D5AB C1 POP B D5AC E1 POP H D5AD DB2F CSTS1: IN CONCTL D5AF E602 ANI 02H D5B1 3EFF MVI A,0FFH D5B3 C0 RNZ D5B4 2F CMA D5B5 C9 RET ; ; ;PRINT H&L ON CONSOLE ; D5B6 7C DISPHL: MOV A,H D5B7 CD D5BB CALL DISPB D5BA 7D MOV A,L D5BB F5 DISPB: PUSH PSW D5BC 0F RRC D5BD 0F RRC D5BE 0F RRC D5BF 0F RRC D5C0 CD D5C4 CALL HTA2 TDL Z80 CP/M DISK ASSEMBLER VERSION 2.21 PAGE 5 < GSR COMPUTERS CPM BOOT PROGRAM > VERSION III.2 10-1-82 D5C3 F1 POP PSW D5C4 CD D57C HTA2: CALL HTA D5C7 18A9 JMPR CO ; ;MAIN KEYBOARD ROUTINE ; D5C9 CD D5CF MAININ: CALL CI ;GET INPUT D5CC 4F MOV C,A ;ECHO IT D5CD 18A3 JMPR CO ; ;MAIN CONSOLE INPUT ROUTINE ; D5CF CD D58E CI: CALL CSTS ;TEST FOR INPUT D5D2 B7 ORA A D5D3 28FA JRZ CI D5D5 DB2E IN CONDTA D5D7 E67F ANI 7FH D5D9 C9 RET ; ; ;PRINTER OUTPUT ROUTINE ; D5DA DB2C PRINT: IN INOUT D5DC E601 ANI 1 D5DE 20FA JRNZ PRINT D5E0 79 MOV A,C D5E1 F680 ORI 80H D5E3 D32C OUT INOUT D5E5 E67F ANI 7FH D5E7 D32C OUT INOUT D5E9 F680 ORI 80H D5EB D32C OUT INOUT D5ED C9 RET ; ; PRINTER STATUS ROUTINE ; D5EE DB2C PSTS: IN INOUT D5F0 E601 ANI 1 D5F2 3EFF MVI A,0FFH D5F4 C8 RZ D5F5 2F CMA D5F6 C9 RET ; ; ;BOOT CPM AND RUN ; D5F7 21 D723 BOOT: LXI H,TPLT ;MOVE DOWN JMP VECTORS D5FA 11 0000 LXI D,0 D5FD 01 0008 LXI B,8 D600 EDB0 LDIR D602 31 00FF WBOOT: LXI SP,STACK ;RESTORE STACK D605 21 4A33 LXI H,BEGDAT ;CLEAR SCRATCH RAM D608 11 4A34 LXI D,BEGDAT+1 D60B 01 09F1 LXI B,DATSIZ D60E 3600 MVI M,0 TDL Z80 CP/M DISK ASSEMBLER VERSION 2.21 PAGE 6 < GSR COMPUTERS CPM BOOT PROGRAM > VERSION III.2 10-1-82 D610 EDB0 LDIR D612 21 DA7C LXI H,EPBASE ;SET UP CPM TABLES D615 11 53DE LXI D,DPBASE D618 01 0040 LXI B,EPLGTH D61B EDB0 LDIR D61D 21 3400 LXI H,CCP ;SET DMA ADR D620 22 53BD SHLD DMAAD D623 3E02 MVI A,2 ;SECTOR = 2 D625 32 53B9 STA SECTOR D628 32 53D2 STA LUNIT D62B AF XRA A D62C CD D79E CALL LOGDS2 ;LOG ON DRIVE A D62F C2 D551 JNZ START ;LOG ON ERROR D632 DD2A 53D8 LIXD CTBLP ;GET TBL POINTER D636 3E31 MVI A,49 ;NO OF SECS D638 32 53D5 STA BTSEC D63B 1619 MVI D,25 ;8" SECS ON TRK 0 D63D DB9B IN DFLAG D63F E604 ANI 4 ;8" OR 5 1/4" ? D641 2802 JRZ WBOOT8 ;8" D643 1611 MVI D,17 D645 3A 53D5 WBOOT8: LDA BTSEC ;SUBTRACT SECTORS D648 92 SUB D D649 32 53D5 STA BTSEC D64C 060A MVI B,10 D64E C5 BRWAGN: PUSH B D64F 3A 53B9 LDA SECTOR D652 D39E OUT DSCTR D654 CD DA46 CALL SETUP D657 D5 PUSH D ;SAVE FOR RETRY D658 2A 53BD LHLD DMAAD ;GET DMA ADR D65B 3A 53B9 BOOTRD: LDA SECTOR ;TEST FOR SIDE 1 D65E E680 ANI 80H D660 3E98 MVI A,98H ;READ COMMAND D662 2802 JRZ BTRW3 ;SIDE 0 D664 3E9A MVI A,9AH ;SELECT SIDE 1 D666 32 53BB BTRW3: STA CMND D669 D39C OUT DCMMD D66B 01 809F BTRW1: LXI B,(128*256)+DDATA D66E EDB2 INIR D670 15 DCR D ;LOOP CONTROL D671 20F8 JRNZ BTRW1 D673 0632 MVI B,50 D675 10FE BWTDLY: DJNZ BWTDLY D677 3ED0 MVI A,0D0H ;FORCE INT COMMAND D679 D39C OUT DCMMD ;EXECUTE IT D67B 060A MVI B,10 ;DELAY D67D 10FE FRC1: DJNZ FRC1 D67F DB9C IN DSTAT ;READ STATUS D681 D1 POP D ;RESTORE LENGTH D682 CD D9C7 CALL EOJ D685 E69C ANI 9CH D687 C1 POP B D688 2808 JRZ WBOOTA ;DONE, NO ERRORS D68A 10C2 DJNZ BRWAGN ;RETRY TDL Z80 CP/M DISK ASSEMBLER VERSION 2.21 PAGE 7 < GSR COMPUTERS CPM BOOT PROGRAM > VERSION III.2 10-1-82 D68C CD D73D DERROR: CALL DERR1 ;DISPLAY ERROR D68F C3 D551 JMP START D692 22 53BD WBOOTA: SHLD DMAAD ;UPDATE DMAAD D695 3A 53D5 LDA BTSEC ;ALL SECS DONE? D698 B7 ORA A D699 CA D6C3 JZ GOCPM ;DONE D69C DD7E12 MOV A,18(X) ;TEST FOR DOUBLE SIDE D69F E602 ANI 2 D6A1 3E81 MVI A,81H ;SIDE 1 SELECT D6A3 200B JRNZ WBOOT9 ;DOUBLE SIDE D6A5 0658 MVI B,58H ;STEP IN 1 TRACK D6A7 CD D9B9 CALL EOJA D6AA 21 53B8 LXI H,TRACK ;TRK + 1 D6AD 34 INR M D6AE 3E01 MVI A,1 ;SECTOR = 1 D6B0 32 53B9 WBOOT9: STA SECTOR D6B3 3A 53D5 LDA BTSEC ;BTSEC > SEC/TRK? D6B6 DDBE00 CMP 0(X) D6B9 57 MOV D,A ;REMAINING SECS D6BA DA D645 JC WBOOT8 ;DO THE REST D6BD DD5600 MOV D,0(X) ;SECS PER TRK D6C0 C3 D645 JMP WBOOT8 ;DO NEXT TRK D6C3 3A 3402 GOCPM: LDA CCP+2 ;SEE IF RIGHT SIZE D6C6 E6FC ANI 0FCH D6C8 FE34 CPI 34H D6CA C2 D6E5 JNZ WSIZE ;WRONG SIZE D6CD 21 D6F0 LXI H,BIOSCD ;MOVE BIOS VECTORS D6D0 11 4A00 LXI D,BIOS D6D3 01 0033 LXI B,BCDL D6D6 EDB0 LDIR D6D8 21 0080 LXI H,TBUF ;DEFAULT CPM BUFFER D6DB 22 53D6 SHLD SEKDMA ;SET DMA ADDRESS D6DE 3A 0004 LDA CURDSK ;LOG-ON DSK D6E1 4F MOV C,A ;SEND TO CPM D6E2 C3 3400 JMP CCP ;GO TO CP/M D6E5 0661 WSIZE: MVI B,MSGWL ;SEND ERROR MESG D6E7 21 D4E8 LXI H,MSGW D6EA CD D562 CALL MESG1 D6ED C3 D549 JMP BEGIN ; ; ;PROGRAM BIOS JUMP VECTORS ; D6F0 C3 D5F7 BIOSCD: JMP BOOT ;COLD BOOT D6F3 C3 D602 JMP WBOOT ;WARM BOOT D6F6 C3 D58E JMP CSTS ;CONSOLE STATUS D6F9 C3 D5CF JMP CI ;CONSOLE INPUT D6FC C3 D572 JMP CO ;CONSOLE OUTPUT D6FF C3 D5DA JMP PRINT ;LIST DEVICE D702 C3 D572 JMP CO ;PUNCH DEVICE D705 C3 D5CF JMP CI ;READER DEVICE D708 C3 D844 JMP HOME ;MOVE HEAD TO TRK 0 D70B C3 D778 JMP SELDSK ;SELECT DISK D70E C3 D80B JMP SETTRK ;SET TRACK NUMBER D711 C3 D810 JMP SETSEC ;SET SECTOR NUMBER TDL Z80 CP/M DISK ASSEMBLER VERSION 2.21 PAGE 8 < GSR COMPUTERS CPM BOOT PROGRAM > VERSION III.2 10-1-82 D714 C3 D83F JMP SETDMA ;SET DMA ADDRESS D717 C3 D84D JMP HREAD ;READ DISK D71A C3 D859 JMP HWRITE ;WRITE DISK D71D C3 D5EE JMP PSTS ;LIST STATUS D720 C3 D815 JMP SECTRN ;SECTOR TRANSLATE 0033 BCDL = .-BIOSCD ; ;JUMPS AT START OF MEMORY AND IOBYTE ; D723 C3 4A03 TPLT: JMP WBOOTE D726 BD IOBYT: .BYTE 0BDH D727 00 .BYTE 0 D728 C3 3C06 JMP BDOS ; ; D72B DERRM: D72B 44534B54524B .ASCII 'DSKTRKSCTSTSCMDDMA' ; ; ;DISPLAYS ALL DISK PARAMETERS ; D73D C5 DERR1: PUSH B ;SAVE REGISTERS D73E D5 PUSH D D73F E5 PUSH H D740 21 D72B LXI H,DERRM ;POINT TO NAMES D743 11 53B7 LXI D,DISKNO ;POINT TO PARAMETERS D746 CD D586 CALL CRLF ;DISPLAY CRLF D749 0E05 MVI C,5 ;SET TALLY D74B 0603 DERR2: MVI B,3 D74D C5 PUSH B ;SAVE BC D74E CD D562 CALL MESG1 ;DISPLAY NAME D751 CD D570 CALL SPACE ;DISPLAY SPACE D754 E5 PUSH H ;SAVE HL D755 1A LDAX D ;GET DATA D756 13 INX D ;STEP TO NEXT D757 CD D5BB CALL DISPB ;DISPLAY DATA D75A CD D570 CALL SPACE ;DISPLAY SPACE D75D E1 POP H ;GET HL D75E C1 POP B ;GET BC D75F 0D DCR C ;TALLY - 1 D760 20E9 JRNZ DERR2 ;CONTINUE D762 0603 MVI B,3 ;DISPLAY NAME D764 CD D562 CALL MESG1 D767 CD D570 CALL SPACE ;DISPLAY SPACE D76A 2A 53BD LHLD DMAAD ;LAST PARAMETER D76D CD D5B6 CALL DISPHL ;DISPLAY IT D770 E1 POP H ;RESTORE REGISTERS D771 D1 POP D D772 C1 POP B D773 3A 53BA LDA STATUS D776 B7 ORA A D777 C9 RET ; ; ; TDL Z80 CP/M DISK ASSEMBLER VERSION 2.21 PAGE 9 < GSR COMPUTERS CPM BOOT PROGRAM > VERSION III.2 10-1-82 ;SELECT DISK GIVEN BY REGISTER C ; D778 21 0000 SELDSK: LXI H,0 ;ERROR RETURN CODE D77B 79 MOV A,C D77C 32 53C9 STA SEKDSK ;STORE DSK NO. D77F FE04 CPI 4 ;MUST BE 0,1,2,OR 3 D781 D0 RNC ;INVALID DSK NO. D782 DDE5 PUSH X ;LOG ON DISK D784 E5 PUSH H D785 CD D79E CALL LOGDS2 D788 E1 POP H D789 C0 RNZ ;ERROR RETURN D78A DDE1 POP X D78C 3A 53C9 LDA SEKDSK ;GET DISK NO. D78F 6F MOV L,A D790 60 MOV H,B D791 29 DAD H ;*2 D792 29 DAD H ;*4 D793 29 DAD H ;*8 D794 29 DAD H ;*16 D795 EB XCHG D796 21 53DE LXI H,DPBASE D799 19 DAD D ;HL=DPBASE+(DISKNO*16) D79A C9 RET ; D79B 3A 53B7 LOGDSK: LDA DISKNO D79E 4F LOGDS2: MOV C,A ;SAVE DSK NO IN C D79F 3C INR A D7A0 DD21 4E33 LXI X,DP0 ;BUILD TBL ADR IN X D7A4 11 0080 LXI D,128 D7A7 3D DABLD1: DCR A D7A8 2804 JRZ DABLD2 D7AA DD19 DADX D D7AC 18F9 JMPR DABLD1 D7AE DD22 53D8 DABLD2: SIXD CTBLP D7B2 3EC0 MVI A,0C0H D7B4 B1 ORA C D7B5 32 53C0 STA HSELCD ;STORE SELECT CODE D7B8 21 53B3 LXI H,DSKSEL ;SEE IF NEW DISK D7BB 0600 MVI B,0 D7BD 09 DAD B D7BE 7E MOV A,M D7BF B7 ORA A D7C0 202D JRNZ DBPARM ;NOT NEW DISK D7C2 2F CMA D7C3 77 MOV M,A ;MARK AS USED D7C4 3A 53C0 LDA HSELCD ;GET SEL CODE D7C7 D39B OUT DCNTL ;SEL DRIVE D7C9 CD D9B7 CALL EOJB ;RESTORE DRIVE D7CC E680 ANI 80H ;TEST FOR NOT READY D7CE C2 D73D JNZ DERR1 ;NOT RDY ERROR D7D1 060A MVI B,10 ;RETRY COUNT D7D3 C5 NTAGN: PUSH B D7D4 3E01 MVI A,1 ;SELECT SEC 1 D7D6 D39E OUT DSCTR TDL Z80 CP/M DISK ASSEMBLER VERSION 2.21 PAGE 10 < GSR COMPUTERS CPM BOOT PROGRAM > VERSION III.2 10-1-82 D7D8 57 MOV D,A ;SEC SIZE=128 D7D9 2A 53D8 LHLD CTBLP D7DC 3A 53C0 LDA HSELCD ;GET SELECT CODE D7DF D39B OUT DCNTL D7E1 3E8C MVI A,8CH ;READ OP D7E3 CD D993 CALL RDAT ;READ TABLES D7E6 C1 POP B ;RETRY COUNT D7E7 B7 ORA A ;TEST FOR ERRORS D7E8 2805 JRZ DBPARM ;DONE, NO ERRORS D7EA 10E7 DJNZ NTAGN ;RETRY D7EC C3 D73D JMP DERR1 ;DISP PARAMETERS D7EF DD6E0F DBPARM: MOV L,15(X) ;GET BYTES/SEC D7F2 DD6610 MOV H,16(X) D7F5 29 DAD H D7F6 7C MOV A,H D7F7 32 53C1 STA HSTBLK ;CPM SEC/PHY SEC D7FA 3D DCR A D7FB 32 53C3 STA SECMSK ;SECTOR MASK D7FE DD4602 MOV B,2(X) ;GET BLK SHIFT FACTOR D801 3E01 MVI A,1 ;CPM ALOC SIZE/128 D803 07 BLKCAL: RLC D804 10FD DJNZ BLKCAL D806 32 53C2 STA BLKCNT D809 AF XRA A ;RETURN, NO ERRORS D80A C9 RET ; ; ;SET TRACK GIVEN BY REGISTER C ; D80B 79 SETTRK: MOV A,C D80C 32 53CA STA SEKTRK D80F C9 RET ; ; ;SET SECTOR GIVEN BY REGISTER C ; D810 79 SETSEC: MOV A,C D811 32 53CB STA SEKSEC D814 C9 RET ; ; ;TRANSLATE THE SECTOR GIVEN BY BC USING THE ;TRANSLATE TABLE GIVEN BY DE ; D815 DDE5 SECTRN: PUSH X ;SAVE X D817 21 FFEC LXI H,0FFECH ;TBL POINTER-20 D81A 19 DAD D D81B E5 PUSH H ;POINTER TO X D81C DDE1 POP X D81E DD7E12 MOV A,18(X) ;TEST FOR DBL SIDE D821 E602 ANI 2 D823 2811 JRZ SECTR1 ;SINGLE SIDE D825 AF XRA A ;DOUBLE SIDE D826 DD6E00 MOV L,0(X) ;GET CPM SEC/TRK D829 67 MOV H,A TDL Z80 CP/M DISK ASSEMBLER VERSION 2.21 PAGE 11 < GSR COMPUTERS CPM BOOT PROGRAM > VERSION III.2 10-1-82 D82A CB3D SRLR L ;DIVIDE BY 2 D82C 2D DCR L ;SUBTRACT 1 D82D ED42 DSBC B ;SEC ON SD 0 OR 1? D82F 3005 JRNC SECTR1 ;SECTOR ON SIDE 0 D831 7D MOV A,L ;BUILD ADR FOR SD 1 D832 2F CMA D833 4F MOV C,A D834 3E80 MVI A,80H ;SIDE SELECT = SD 1 D836 EB SECTR1: XCHG ;HL=TRANS TBL D837 09 DAD B ;ADD SEC INDEX D838 B6 ORA M ;OR SIDE SELECT D839 6F MOV L,A ;HL = TRANS(SECTOR) D83A 2600 MVI H,0 D83C DDE1 POP X ;RESTORE X D83E C9 RET ; ; ;SET DMA ADDRESS GIVEN BY REGISTERS B AND C ; D83F ED43 53D6 SETDMA: SBCD SEKDMA ;SAVE THE ADDRESS D843 C9 RET ; ; ;MOVE TO THE TRACK 00 POSITION OF CURRENT DRIVE ; D844 3A 53CE HOME: LDA HSTWRT ;TEST FOR WRITE PEND D847 B7 ORA A D848 C0 RNZ D849 32 53CF STA HSTACT ;CLEAR HSTACT FLAG D84C C9 RET ; ; ;DEBLOCKING ROUTINES ; D84D 3E01 HREAD: MVI A,1 ;SET READOP=READ D84F 32 53D1 STA READOP D852 3C INR A D853 32 53C4 STA WRTYPE ;TREAT AS UNALOC D856 C3 D8B7 JMP ALLOC D859 AF HWRITE: XRA A ;SET READOP=WRITE D85A 32 53D1 STA READOP D85D 79 MOV A,C ;SAVE WRITE TYPE D85E 32 53C4 STA WRTYPE D861 FE02 CPI WRUAL ;UNALOC WRITE? D863 2018 JRNZ CHKUNA ;NOT UNALOC WRT D865 2A 53C9 LHLD SEKDSK ;UNADSK=SEKDSK D868 22 53C6 SHLD UNADSK ;UNATRK=SEKTRK D86B 3A 53C2 LDA BLKCNT ;RECORDS/CPM BLOCK D86E 32 53C5 STA UNACNT D871 3A 53CB LDA SEKSEC ;UNASEC=SEKSEC D874 32 53C8 STA UNASEC D877 2A 53D8 LHLD CTBLP ;SAVE TBL ADR D87A 22 53DA SHLD UTBLP D87D 3A 53C5 CHKUNA: LDA UNACNT ;ANY UNALOC REMAIN? D880 B7 ORA A TDL Z80 CP/M DISK ASSEMBLER VERSION 2.21 PAGE 12 < GSR COMPUTERS CPM BOOT PROGRAM > VERSION III.2 10-1-82 D881 2834 JRZ ALLOC ;NONE REMAIN D883 3D DCR A ;UNACNT-1 D884 32 53C5 STA UNACNT D887 2A 53C6 LHLD UNADSK ;SEK = UNA? D88A 3A 53CB LDA SEKSEC D88D 4F MOV C,A D88E 3A 53C8 LDA UNASEC D891 CD D966 CALL CMP3 D894 2021 JRNZ ALLOC ;NOT EQUAL D896 2A 53DA LHLD UTBLP ;GET TBL ADR D899 4E MOV C,M ;CPM SEC/TRK D89A 0600 MVI B,0 D89C 11 0014 LXI D,20 ;SEC TRANSL TBL D89F 19 DAD D D8A0 3A 53C8 LDA UNASEC ;SEARCH FOR UNASEC D8A3 EDB1 CCIR ;END OF TRK? D8A5 EA D8B0 JO NOOVF ;NOT END D8A8 21 53C7 LXI H,UNATRK ;UNATRK + 1 D8AB 34 INR M D8AC 3E01 MVI A,1 ;UNASEC = 1 D8AE 1801 JMPR OVF D8B0 7E NOOVF: MOV A,M ;GET NEXT SECTOR D8B1 32 53C8 OVF: STA UNASEC ;STORE NEXT UNASEC D8B4 AF XRA A ;RESET RSFLAG D8B5 1805 JMPR ALLOC2 D8B7 AF ALLOC: XRA A ;SET UNACNT=0 D8B8 32 53C5 STA UNACNT D8BB 3C INR A ;SET RSFLAG D8BC 32 53D0 ALLOC2: STA RSFLAG ;NEED PREREAD D8BF 21 4A33 LXI H,DBUF ;SET DMA ADR D8C2 22 53BD SHLD DMAAD D8C5 DDE5 RWOPER: PUSH X D8C7 3A 53C9 LDA SEKDSK ;LOG ON SEKDSK D8CA CD D79E CALL LOGDS2 D8CD 3A 53CB LDA SEKSEC ;COMPUTE PHY SEC ADR D8D0 4F MOV C,A D8D1 E680 ANI 80H ;GET SIDE SELECT D8D3 32 53CD STA SIDSEL ;SAVE IT D8D6 79 MOV A,C ;MASK OFF SIDE SEL D8D7 E67F ANI 7FH D8D9 4F MOV C,A D8DA 3A 53C1 LDA HSTBLK D8DD 0D DCR C D8DE 1F PSEC1: RAR D8DF 3804 JRC SECDN D8E1 CB39 SRLR C D8E3 18F9 JMPR PSEC1 D8E5 0C SECDN: INR C D8E6 3A 53CD LDA SIDSEL ;GET SIDE SELECT D8E9 B1 ORA C ;OR IT WITH SECTOR D8EA 32 53CC STA SEKHST ;SAVE IT D8ED 21 53CF LXI H,HSTACT ;TEST & SET HSTACT FLG D8F0 7E MOV A,M D8F1 3601 MVI M,1 ;SET FLAG D8F3 B7 ORA A ;TEST FLAG TDL Z80 CP/M DISK ASSEMBLER VERSION 2.21 PAGE 13 < GSR COMPUTERS CPM BOOT PROGRAM > VERSION III.2 10-1-82 D8F4 2816 JRZ FILHST ;NOT SET D8F6 2A 53B7 LHLD DISKNO ;SEEK=HOST? D8F9 3A 53CC LDA SEKHST D8FC 4F MOV C,A D8FD 3A 53B9 LDA SECTOR D900 CD D966 CALL CMP3 D903 281E JRZ MATCH ;SAME D905 3A 53CE LDA HSTWRT ;HOST WRITTEN? D908 B7 ORA A D909 C4 D974 CNZ DWRITE ;WRITE HOST BUF D90C 2A 53C9 FILHST: LHLD SEKDSK ;GET SET TO FILL BUF D90F 22 53B7 SHLD DISKNO D912 3A 53CC LDA SEKHST ;PHYSICAL SEC ADR D915 32 53B9 STA SECTOR D918 3A 53D0 LDA RSFLAG ;RSFLAG SET? D91B B7 ORA A D91C C4 D970 CNZ DREAD ;YES DO READ D91F AF XRA A D920 32 53CE STA HSTWRT ;NO PENDING WRT D923 3A 53CB MATCH: LDA SEKSEC ;MASK BUF SEL BITS D926 3D DCR A D927 6F MOV L,A D928 3A 53C3 LDA SECMSK D92B A5 ANA L D92C 67 MOV H,A ;BUF SEL BITS X 128 D92D 2E00 MVI L,0 D92F CB3C SRLR H D931 CB1D RARR L D933 11 4A33 LXI D,DBUF ;ADD BUFFER INDEX D936 19 DAD D D937 ED5B 53D6 LDED SEKDMA ;GET SEEK DMA ADR D93B 01 0080 LXI B,128 ;SIZE OF MOVE D93E 3A 53D1 LDA READOP ;READOP=1? D941 B7 ORA A D942 2006 JRNZ RWMOVE ;YES MOVE READ DATA D944 3E01 MVI A,1 D946 32 53CE STA HSTWRT ;SET HOST WRITTEN D949 EB XCHG ;MOVE WRITE DATA D94A EDB0 RWMOVE: LDIR ;MOVE THE DATA D94C 3A 53C4 LDA WRTYPE ;WRITE TO DIRECTORY? D94F FE01 CPI WRDIR D951 3A 53D3 LDA ERFLAG ;GET ERROR FLAG D954 200D JRNZ RWD ;NOT DIR WRT D956 B7 ORA A ;ERRORS? D957 200A JRNZ RWD ;DONE IF ERRORS D959 AF XRA A D95A 32 53CE STA HSTWRT ;RESET HSTWRT FLAG D95D CD D974 CALL DWRITE ;WRITE TO DIRECTORY D960 3A 53D3 LDA ERFLAG ;GET ERROR FLAG D963 DDE1 RWD: POP X D965 C9 RET ;DONE D966 ED5B 53C9 CMP3: LDED SEKDSK ;GET SEKDSK & SEKTRK D96A B7 ORA A D96B ED52 DSBC D ;COMPARE HL & DE D96D C0 RNZ ;RETURN NOT EQUAL TDL Z80 CP/M DISK ASSEMBLER VERSION 2.21 PAGE 14 < GSR COMPUTERS CPM BOOT PROGRAM > VERSION III.2 10-1-82 D96E B9 CMP C ;COMPARE A & C D96F C9 RET ;DONE ; ; ;DISK READ AND WRITE ROUTINES ; D970 3E01 DREAD: MVI A,1 ;SET READ FLAG D972 1801 JMPR STRFLG D974 AF DWRITE: XRA A ;SET WRITE FLAG D975 32 53BC STRFLG: STA RWFLG ;SAVE IT FOR LATER USE D978 060A DORDWT: MVI B,10 ;NUMBER OF RETRIES D97A C5 AGN: PUSH B ;SAVE BC D97B CD D9D8 CALL SEEK ;SEEK THE TRACK D97E CC D98B CZ RDWR ;NO ERROR D981 32 53D3 STA ERFLAG ;STORE ERROR FLAG D984 C1 READ3: POP B ;GET ERROR RETRY COUNT D985 C8 RZ ;RETURN IF NO ERRORS D986 10F2 DJNZ AGN ;DO A RETRY D988 C3 D73D JMP DERR1 ;DISP PARAMETERS ; D98B 5F RDWR: MOV E,A ;SAVE COMMAND D98C 3A 53BC LDA RWFLG D98F B7 ORA A D990 7B MOV A,E ;REGET THE COMMAND D991 2813 JRZ WRDAT ;WRITE IF ZERO D993 D39C RDAT: OUT DCMMD ;DISK COMMAND PORT D995 32 53BB STA CMND D998 01 809F READ1: LXI B,(128*256)+DDATA D99B EDB2 READ2: INIR D99D 15 DCR D ;LOOP CONTROL D99E 20F8 JRNZ READ1 D9A0 CD D9C7 CALL EOJ D9A3 E69C ANI 9CH ;ISOLATE READ ERROR BITS D9A5 C9 RET ; D9A6 F620 WRDAT: ORI 20H ;ADD WRITE COMMAND D9A8 D39C OUT DCMMD ;DISK COMMAND PORT D9AA 32 53BB STA CMND D9AD 01 809F WRT1: LXI B,(128*256)+DDATA D9B0 EDB3 OUTIR D9B2 15 DCR D ;LOOP CONTROL D9B3 20F8 JRNZ WRT1 D9B5 1810 JMPR EOJ D9B7 0608 EOJB: MVI B,8 ;BASIS OF RESTORE COMMAND D9B9 DB9B EOJA: IN DFLAG ;STEP RATE BITS D9BB E603 ANI 3 D9BD B0 ORA B ;ADD ON THE COMMAND D9BE 32 53BB STA CMND D9C1 D39C OUT DCMMD ;DO THE COMMAND D9C3 0680 MVI B,128 ;DELAY D9C5 10FE SKDLY: DJNZ SKDLY D9C7 DB9C EOJ: IN DSTAT ;TEST FOR INTRQ D9C9 E601 ANI 1 D9CB 20FA JRNZ EOJ ;WAIT FOR INTRQ D9CD CD DA74 CALL DWAIT ;DISABLE WAITS TDL Z80 CP/M DISK ASSEMBLER VERSION 2.21 PAGE 15 < GSR COMPUTERS CPM BOOT PROGRAM > VERSION III.2 10-1-82 D9D0 DB9C EOJ1: IN DSTAT ;GET THE DISK STATUS D9D2 32 53BA STA STATUS D9D5 E6FC ANI 0FCH D9D7 C9 RET ; D9D8 3A 53B7 SEEK: LDA DISKNO ;GET DISK NO D9DB 21 53D2 LXI H,LUNIT ;POINT TO LAST UNIT D9DE BE CMP M ;SEE IF SAME D9DF 77 MOV M,A ;SAVE THIS UNIT D9E0 CA D9FD JZ SEEK1 ;ALREADY LOGGED IN D9E3 CD DA46 CALL SETUP D9E6 21 541E LXI H,IDSV D9E9 1601 MVI D,1 D9EB 3EC4 MVI A,0C4H ;READ ADR COMMAND D9ED D39C OUT DCMMD D9EF 32 53BB STA CMND D9F2 01 069F LXI B,(6*256)+DDATA D9F5 CD D99B CALL READ2 D9F8 3A 541E IDRD1: LDA IDSV D9FB D39D OUT DTRCK ;SET THE TRACK D9FD CD D79B SEEK1: CALL LOGDSK ;LOG ON DISKNO DA00 C0 RNZ ;ERROR RETURN DA01 3A 53B9 LDA SECTOR ;SET THE SECTOR DA04 D39E OUT DSCTR ;DISK SECTOR PORT DA06 DB9D SEEK2: IN DTRCK ;DISK TRACK PORT DA08 4F MOV C,A ;SAVE IT DA09 3A 53B8 LDA TRACK ;GET DESIRED TRACK DA0C B9 CMP C DA0D 280A JRZ RDWRT ;NO SEEK NEEDED DA0F D39F OUT DDATA ;SET THE TRACK DA11 0618 MVI B,18H ;SEEK COMMAND DA13 CD D9B9 CALL EOJA ;DO THE SEEK DA16 E680 ANI 80H ;ERROR MASK DA18 C0 RNZ ;SEEK ERROR DA19 CD DA46 RDWRT: CALL SETUP ;GET READY DA1C DB9B IN DFLAG DA1E E610 ANI 10H ;HEAD LOADED? DA20 3E04 MVI A,4 DA22 2801 JRZ RDWRT1 ;JUMP IF NOT DA24 AF XRA A ;RESET HEAD LD FLAG DA25 C688 RDWRT1: ADI 88H ;READ COMMAND DA27 4F MOV C,A ;SAVE IT DA28 3A 53B8 LDA TRACK ;TEST FOR TRK 0 DA2B B7 ORA A DA2C 1601 MVI D,1 DA2E 2808 JRZ RDWRT2 ;TRK 0 = SD DA30 DD6E0F MOV L,15(X) ;GET SECTOR SIZE DA33 DD6610 MOV H,16(X) DA36 29 DAD H DA37 54 MOV D,H DA38 2A 53BD RDWRT2: LHLD DMAAD ;GET DMA ADDRESS DA3B 3A 53B9 RDWRT3: LDA SECTOR ;TEST FOR SIDE 1 DA3E E680 ANI 80H DA40 79 MOV A,C ;REGET COMMAND DA41 C8 RZ ;SIDE 0 TDL Z80 CP/M DISK ASSEMBLER VERSION 2.21 PAGE 16 < GSR COMPUTERS CPM BOOT PROGRAM > VERSION III.2 10-1-82 DA42 F602 ORI 2 ;SELECT SIDE 1 DA44 BF CMP A ;CLEAR THE FLAGS DA45 C9 RET ; ; ;SELECTS DRIVE ; DA46 C5 SETUP: PUSH B DA47 3A 53C0 LDA HSELCD ;GET SEL CODE DA4A 4F MOV C,A DA4B DB9B IN DFLAG DA4D E640 ANI 40H ;TEST FOR TRK 0 DA4F 2008 JRNZ SETUP2 ;NOT TRK 0 DA51 3A 53B9 LDA SECTOR ;TEST FOR SIDE 1 DA54 E680 ANI 80H DA56 CA DA6F JZ SETUP3 ;TRK 0, SIDE 0 IS SD DA59 DD7E12 SETUP2: MOV A,18(X) ;TEST FOR SD/DD DA5C E680 ANI 80H DA5E 2804 JRZ SETUP4 ;THIS DSK IS SD DA60 3EBF MVI A,0BFH ;SET DD DA62 A1 ANA C DA63 4F MOV C,A DA64 3A 53B9 SETUP4: LDA SECTOR ;TEST FOR SIDE 1 DA67 E680 ANI 80H DA69 2804 JRZ SETUP3 ;SIDE 0 DA6B 3E20 MVI A,20H ;SELECT SIDE 1 DA6D B1 ORA C DA6E 4F MOV C,A DA6F 79 SETUP3: MOV A,C DA70 D39B OUT DCNTL DA72 C1 POP B DA73 C9 RET ; ; ;DISABLE WAIT STATES ; DA74 3A 53C0 DWAIT: LDA HSELCD ;RESET AUTO-WAIT DA77 E67F ANI 7FH DA79 D39B OUT DCNTL DA7B C9 RET ; ; DA7C EPBASE: ;DISK PARAMETER HEADER FOR DISK 00 DA7C 4E47 0000 WORD TD0,0 DA80 0000 0000 WORD 0,0 DA84 5033 4E33 WORD DIRBF,DP0 DA88 52B3 50B3 WORD CHK00,ALL00 ;DISK PARAMETER HEADER FOR DISK 01 DA8C 4EC7 0000 WORD TD1,0 DA90 0000 0000 WORD 0,0 DA94 5033 4EB3 WORD DIRBF,DP1 DA98 52F3 5133 WORD CHK01,ALL01 ;DISK PARAMETER HEADER FOR DISK 02 DA9C 4F47 0000 WORD TD2,0 TDL Z80 CP/M DISK ASSEMBLER VERSION 2.21 PAGE 17 < GSR COMPUTERS CPM BOOT PROGRAM > VERSION III.2 10-1-82 DAA0 0000 0000 WORD 0,0 DAA4 5033 4F33 WORD DIRBF,DP2 DAA8 5333 51B3 WORD CHK02,ALL02 ;DISK PARAMETER HEADER FOR DISK 03 DAAC 4FC7 0000 WORD TD3,0 DAB0 0000 0000 WORD 0,0 DAB4 5033 4FB3 WORD DIRBF,DP3 DAB8 5373 5233 WORD CHK03,ALL03 0040 EPLGTH = .-EPBASE ; ; ;SCRATCH RAM AREA FOR BDOS USE ; 4A33 BEGDAT = BIOS+BCDL ;BEGINNING OF DATA AREA 4A33 .LOC BEGDAT 4A33 DBUF: .BLKB 1024 ;DEBLOCK BUFFER 4E33 DP0: .BLKB 20 4E47 TD0: .BLKB 108 4EB3 DP1: .BLKB 20 4EC7 TD1: .BLKB 108 4F33 DP2: .BLKB 20 4F47 TD2: .BLKB 108 4FB3 DP3: .BLKB 20 4FC7 TD3: .BLKB 108 5033 DIRBF: .BLKB 128 ;SCRATCH DIRECTORY AREA 50B3 ALL00: .BLKB 128 ;ALLOCATION VECTOR 0 5133 ALL01: .BLKB 128 ;ALLOCATION VECTOR 1 51B3 ALL02: .BLKB 128 ;ALLOCATION VECTOR 2 5233 ALL03: .BLKB 128 ;ALLOCATION VECTOR 3 52B3 CHK00: .BLKB 64 ;CHECK VECTOR 0 52F3 CHK01: .BLKB 64 ;CHECK VECTOR 1 5333 CHK02: .BLKB 64 ;CHECK VECTOR 2 5373 CHK03: .BLKB 64 ;CHECK VECTOR 3 53B3 DSKSEL: .BLKB 4 ;DISK ACCESS TABLE 53B7 DISKNO: .BLKB 1 ;DISK PARAMATERS 53B8 TRACK: .BLKB 1 53B9 SECTOR: .BLKB 1 53BA STATUS: .BLKB 1 53BB CMND: .BLKB 1 53BC RWFLG: .BLKB 1 53BD DMAAD: .BLKB 2 53BF PARFLG: .BLKB 1 ;PAR ERROR FLAG 53C0 HSELCD: .BLKB 1 ;HOST SELECT CODE 53C1 HSTBLK: .BLKB 1 ;CPM SEC/PHY SEC 53C2 BLKCNT: .BLKB 1 ;REC/CPMBLK 53C3 SECMSK: .BLKB 1 ;SECTOR MASK 53C4 WRTYPE: .BLKB 1 ;WRITE TYPE 53C5 UNACNT: .BLKB 1 ;UNALOC REC COUNT 53C6 UNADSK: .BLKB 1 ;LAST UNALOC DISK 53C7 UNATRK: .BLKB 1 ;LAST UNALOC TRACK 53C8 UNASEC: .BLKB 1 ;LAST UNALOC SECTOR 53C9 SEKDSK: .BLKB 1 ;SEEK DISK 53CA SEKTRK: .BLKB 1 ;SEEK TRACK 53CB SEKSEC: .BLKB 1 ;SEEK SECTOR 53CC SEKHST: .BLKB 1 ;PHYSICAL SEC ADR TDL Z80 CP/M DISK ASSEMBLER VERSION 2.21 PAGE 18 < GSR COMPUTERS CPM BOOT PROGRAM > VERSION III.2 10-1-82 53CD SIDSEL: .BLKB 1 ;SIDE SELECT STORAGE 53CE HSTWRT: .BLKB 1 ;HOST WRITTEN FLAG 53CF HSTACT: .BLKB 1 ;HOST ACTIVE FLAG 53D0 RSFLAG: .BLKB 1 ;READ SECTOR FLAG 53D1 READOP: .BLKB 1 ;1=READ, 0=WRITE 53D2 LUNIT: .BLKB 1 ;LAST SELECTED DRIVE 53D3 ERFLAG: .BLKB 1 ;ERROR FLAG 53D4 RFLAG: .BLKB 1 ;CPM READ FLAG 53D5 BTSEC: .BLKB 1 ;NO OF BOOT SECS 53D6 SEKDMA: .BLKB 2 ;SEEK DMA ADDRESS 53D8 CTBLP: .BLKB 2 ;CURRENT TBL ADR 53DA UTBLP: .BLKB 2 ;UNALOC TBL ADR 53DC HLSTR: .BLKB 2 53DE DPBASE: .BLKB EPLGTH ;CPM DISK PARAMETER HEADERS 541E IDSV: .BLKB 6 ; 09F1 DATSIZ = .-BEGDAT ;SIZE OF SCRATCH RAM ; ; ;END OF PROGRAM ; ; ; .END TDL Z80 CP/M DISK ASSEMBLER VERSION 2.21 PAGE 19 < GSR COMPUTERS CPM BOOT PROGRAM > +++++ SYMBOL TABLE +++++ AGN D97A ALL00 50B3 ALL01 5133 ALL02 51B3 ALL03 5233 ALLOC D8B7 ALLOC2 D8BC BASE D400 BCDL 0033 BDOS 3C06 BEGDAT 4A33 BEGIN D549 BIAS 0000 BIOS 4A00 BIOSCD D6F0 BLKCAL D803 BLKCNT 53C2 BOOT D5F7 BOOTRD D65B BRWAGN D64E BTRW1 D66B BTRW3 D666 BTSEC 53D5 BWTDLY D675 CCP 3400 CHK00 52B3 CHK01 52F3 CHK02 5333 CHK03 5373 CHKUNA D87D CI D5CF CMND 53BB CMP3 D966 CO D572 CONCTL 002F CONDTA 002E CONSTS 002F CR 000D CRLF D586 CRLFHL D56A CSTS D58E CSTS1 D5AD CTBLP 53D8 CURDSK 0004 DABLD1 D7A7 DABLD2 D7AE DATSIZ 09F1 DBPARM D7EF DBUF 4A33 DCMMD 009C DCNTL 009B DDATA 009F DERR1 D73D DERR2 D74B DERRM D72B DERROR D68C DFLAG 009B DIRBF 5033 DISKNO 53B7 DISPB D5BB DISPHL D5B6 DMAAD 53BD DORDWT D978 DP0 4E33 DP1 4EB3 DP2 4F33 DP3 4FB3 DPBASE 53DE DREAD D970 DSCTR 009E DSKSEL 53B3 DSTAT 009C DTRCK 009D DWAIT DA74 DWRITE D974 EOJ D9C7 EOJ1 D9D0 EOJA D9B9 EOJB D9B7 EPBASE DA7C EPLGTH 0040 ERFLAG 53D3 FILHST D90C FRC1 D67D GOCPM D6C3 HELLO D54C HLBLK D56D HLSTR 53DC HOME D844 HREAD D84D HSELCD 53C0 HSTACT 53CF HSTBLK 53C1 HSTWRT 53CE HTA D57C HTA2 D5C4 HWRITE D859 IDRD1 D9F8 IDSV 541E INOUT 002C IOBYT D726 LF 000A LOGDS2 D79E LOGDSK D79B LUNIT 53D2 MAININ D5C9 MATCH D923 MEMSTS 0088 MESG D55F MESG1 D562 MSG D403 MSG1 D4DF MSG1L 0009 MSGL 00DC MSGW D4E8 MSGWL 0061 MSIZE 0014 NOOVF D8B0 NTAGN D7D3 OVF D8B1 PARFLG 53BF PRINT D5DA PSEC1 D8DE PSTS D5EE RDAT D993 RDWR D98B RDWRT DA19 RDWRT1 DA25 RDWRT2 DA38 RDWRT3 DA3B READ1 D998 READ2 D99B READ3 D984 READOP 53D1 RFLAG 53D4 RSFLAG 53D0 RWD D963 RWFLG 53BC RWMOVE D94A RWOPER D8C5 SECDN D8E5 SECMSK 53C3 SECTOR 53B9 SECTR1 D836 SECTRN D815 SEEK D9D8 SEEK1 D9FD SEEK2 DA06 SEKDMA 53D6 SEKDSK 53C9 SEKHST 53CC SEKSEC 53CB SEKTRK 53CA SELDSK D778 SETDMA D83F SETSEC D810 SETTRK D80B SETUP DA46 SETUP2 DA59 SETUP3 DA6F SETUP4 DA64 SIDSEL 53CD SKDLY D9C5 SPACE D570 STACK 00FF START D551 STATUS 53BA STRFLG D975 T0 0028 T1 0029 T2 002A TBUF 0080 TCTL 002B TD0 4E47 TD1 4EC7 TD2 4F47 TD3 4FC7 TPLT D723 TRACK 53B8 UNACNT 53C5 UNADSK 53C6 UNASEC 53C8 UNATRK 53C7 UTBLP 53DA VERS 0016 WBOOT D602 WBOOT8 D645 WBOOT9 D6B0 WBOOTA D692 WBOOTE 4A03 WRALL 0000 WRDAT D9A6 WRDIR 0001 WRT1 D9AD WRTYPE 53C4 WRUAL 0002 WSIZE D6E5