CP/M MACRO ASSEM 2.0 #001 JD-850M : CBIOS ASCII VERSION 1.0 ; ************************************************* ; * CP/M VER-2.2 CBIOS CREATE BY MCI * ; ************************************************* ;; JD-850 KANA/ASCII MACRO LIB SET 0001 = SW EQU 1 ; ASCII VERSION ; IF SW = 0 ; KANA TITLE 'JD-850M : CBIOS KANA VERSION 1.0' MACLIB K85DISK ; MACLIB K85CON ; MACLIB K85PORT ; ENDIF ; ; IF SW = 1 ; ASCII TITLE 'JD-850M : CBIOS ASCII VERSION 1.0' MACLIB A85DISK ; MACLIB A85CON ; MACLIB A85PORT ; ENDIF ; ; MACLIB K85WIN ; FIXED DISK IOX ; C000 = CPMB EQU 0C000H ; CP/M (CCP) TOP ADDRESS C010 = CPMMSG EQU CPMB+10H ; CP/M SYSTEM MESSAGE ADDRESS C806 = BDOS EQU CPMB+0806H ; BDOS ENTRY ADDRESS D600 = BIOS EQU CPMB+1600H ; BIOS TOP ADDRESS 0080 = DEFDMA EQU 80H ; CP/M DEFALT DMA ADDRESS 0003 = IOBYTE EQU 03H ; I/O BYTE ADDRESS 0004 = LOGDSK EQU 04H ; LOG-IN DISK ADDRESS 1000 = STACK0 EQU 01000H ; STACK POINTER 0080 = STACK1 EQU 80H ; STACK POINTER 0000 = KB EQU 00H ; KB DATA READ COMMAND 0080 = TRAPST EQU 80H ; TRAP STATUS READ ; 0032 = DMA EQU 32H ; DMA ADDRESS 0033 = DMATC EQU 33H ; DMA TERMINAL 0038 = DMAMD EQU 38H ; DMA MODE ; 0082 = RS6MSK EQU 82H ; RST 6.0 MASK 00F0 = SELCMD EQU 0F0H ; EXTERNAL UNIT SELECT COMMAND 00F8 = WINCMD EQU 0F8H ; WDDC CMND/PARA & STATUS READ 00F9 = WINST EQU 0F9H ; WDDC STATUS REG.READ 00FA = WININI EQU 0FAH ; WDDC INITIALIZE ; 0010 = ASSLEN EQU 16 ; ONE PF,PE KEY ASSIGN LENGTH 0150 = ASSSIZ EQU ASSLEN*21 ; ASSIGN SIZE (PF=15,PE=6) ; 0081 = BANK EQU 81H ; BANK SWITCH 8000 = RAM EQU 8000H ; ROM SAVE TOP ADDRESS 0800 = ROMSIZ EQU 2048 ; ROM SIZE ; F000 = ROM EQU 0F000H ; ROM TOP ADDRESS F006 = FDIOX1 EQU 0F006H ; R/W FLOPPY F00F = CLEAR EQU 0F00FH ; CRT CLEAR F012 = CRT EQU 0F012H ; DISPLAY 1 CHARA. F015 = CURSET EQU 0F015H ; CURSOR CONTROL CP/M MACRO ASSEM 2.0 #002 JD-850M : CBIOS ASCII VERSION 1.0 F02D = MSKOFF EQU 0F02DH ; MASK OFF F039 = FDIOX0 EQU 0F039H ; R/W FLOPPY (SINGLE) ; 001A = FDDSEC EQU 26 ; 26 SEC/TRK (FDD) 0020 = WDDSEC EQU 32 ; 32 SEC/TRK (WINCHESTER) 0100 = SECSIZ EQU 256 ; 256 BYTE/SECTOR 0016 = CPMSIZ EQU 22 ; CCP+BDOS SEC COUNT 0001 = INISEC EQU 1 ; IPL START SECTOR 0100 = DMYSIZ EQU INISEC*SECSIZ ; DUMMY DMA SIZE BF00 = INIDMA EQU CPMB-DMYSIZ ; INITIAL DMA ADDRESS ; 0010 = BLOCK EQU 16 ; 16 SECTOR/BLOCK 0800 = BLKSIZ EQU BLOCK*128 ; CP/M ALLOCATION SIZE 0002 = CPMBLK EQU SECSIZ/128 ; R/W BUFFER SIZE 0001 = SECMSK EQU CPMBLK-1 ; SECTOR MASK 0034 = FDDSPT EQU FDDSEC*CPMBLK ; CP/M FDD SEC/TRK (52) 0040 = WDDSPT EQU WDDSEC*CPMBLK ; CP/M WDD SEC/TRK (64) 0002 = FDDSIZ EQU 2 ; FDD SIZE 0008 = MAXDSK EQU 8 ; MAX DISK NUMBER 0004 = EXDISK EQU 4 ; EXTEND FDD DISK NUMBER 0003 = EXWDD EQU EXDISK-1 ; EXTEND WDD DISK NUMBER 0001 = WTDIR EQU 1 ; WRITE DIRECTORY SECTOR ; 0060 = RS0LEN EQU 96 ; PORT #0 LENGTH 0080 = RS1LEN EQU 128 ; PORT #1 LENGTH 0080 = RS2LEN EQU 128 ; PORT #2 LENGTH ; D600 ORG BIOS ; BIOS TOP ADDRESS ; D600 C351D6 JMP CBOOT ; SYSTEM INITIALIZE D603 C38DD6 WBOOTX: JMP WBOOT ; WORM START D606 C33FDA JMP KBST ; READ CONSOL STATUS D609 C371D7 JMP CONIN ; CONSOL 1 CHR. READ D60C C383D7 JMP CONOUT ; CONSOL 1 CHARA.PUT D60F C395D7 JMP LIST ; LIST 1 CHARA.PUT D612 C39DD7 JMP PUNCH ; TAPE 1 CHARA.PUNCH D615 C37BD7 JMP READER ; TAPE 1 CHARA.READ D618 C3F3D7 JMP HOME ; SET TRK NUMBER ZERO D61B C3DCD7 JMP SELDSK ; SET DSK NUMBER D61E C3F5D7 JMP SETTRK ; SET TRK NUMBER D621 C3FAD7 JMP SETSEC ; SET SEC NUMBER D624 C316D8 JMP SETDMA ; SET DMA ADDRESS D627 C35CD8 JMP READ ; READ FLOPPY (1 SEC) D62A C362D8 JMP WRIT ; WRITE FLOPPY (1 SEC) D62D C31CD8 JMP LISTST ; READ LIST STATUS D630 C31ED8 JMP SECTRN ; GET SECTOR NUMBER D633 000000 DB 0,0,0 ; EXTENDED ENTRY D636 C3D2DA JMP MSGOUT ; DISPLAY MESSAGE D639 C315DB JMP RSMODE ; SET RS-232C MODE & COMMAND D63C C31FDB JMP RSINI ; RESET 8251 LSI D63F C37CDB JMP RSPARA ; SET RS-232C PARA. D642 C3C0DB JMP RSLENG ; GET PORT LENGTH D645 C360D7 JMP CTLP ; PRINT OUT FLAG CONTROL D648 C352D7 JMP AUTO ; AUTO START COMMAND D64B C345D9 JMP WINIOX ; R/W WINCHESTER DISK ( 1 SEC ONLY) D64E C367D7 JMP SETCUR ; SET CURSOR KEY CODE TABLE CP/M MACRO ASSEM 2.0 #003 JD-850M : CBIOS ASCII VERSION 1.0 ; ;******************************** ;**** CBOOT **** ;******************************** D651 310010 CBOOT: LXI SP,STACK0 ; SET STACK POINTER D654 F3 DI ; D655 AF XRA A ; SET I/O BYTE D656 320300 STA IOBYTE ; CON=RS1,RDR=RS1,PUN=RS1,LST=RS1 D659 320400 STA LOGDSK ; SET LOG-IN DISK D65C 2136DA LXI H,TRAP ; SET TRAP INT.ADRS D65F 222500 SHLD 25H ; D662 215CDA LXI H,KBINT ; SET KB INT.ADRS D665 222D00 SHLD 2DH ; D668 3EC3 MVI A,0C3H ; D66A 323000 STA 30H ; D66D 2109DA LXI H,WININT ; WINCHESTER INT.ADRS D670 223100 SHLD 31H ; D673 215ADC LXI H,RSINT ; SET RS-232C INT.ADRS D676 223500 SHLD 35H ; D679 015001 LXI B,ASSSIZ ; D67C 2100E8 LXI H,ASSBUF ; D67F 3600 ASSCLR: MVI M,0 ; CLEAR KEY-ASSIGN BUFF D681 23 INX H ; D682 0B DCX B ; D683 78 MOV A,B ; D684 B1 ORA C ; D685 C27FD6 JNZ ASSCLR ; D688 060C MVI B,0CH ; D68A CD2DF0 CALL MSKOFF ; KB & PORT MASK OFF ; ;******************************* ;**** WBOOT ***** ;******************************* D68D 318000 WBOOT: LXI SP,STACK1 ; SET STACK POINTER D690 3A0400 LDA LOGDSK ; LOAD LOG-IN DISK D693 FE02 CPI FDDSIZ ; NORMAL FDD ? D695 DAA1D6 JC WBOOT1 ; D698 FE03 CPI EXWDD ; EXTEND DISK ? D69A DADAD6 JC WBOOT7 ; D69D AF WBOOT0: XRA A ; D69E 320400 STA LOGDSK ; LOG-IN DISK = "A" D6A1 07 WBOOT1: RLC ; GET NORMAL DISK PARA. D6A2 3C INR A ; D6A3 3297EE STA CPMDSK ; SET WORM BOOT DISK D6A6 AF XRA A ; D6A7 3298EE STA CPMTRK ; TRACK = 0 D6AA 329CEE STA RWFLAG ; READ MODE D6AD 3C INR A ; D6AE 3299EE STA CPMSEC ; SECTOR = 1 D6B1 2100C0 LXI H,CPMB ; D6B4 229AEE SHLD CPMDMA ; DMA ADDRESS = C000H D6B7 0616 MVI B,CPMSIZ ; B=BOOT SECTOR COUNT D6B9 C5 WBOOT2: PUSH B ; D6BA 2197EE LXI H,CPMDSK ; H.L=R/W PARA.TOP ADDRESS D6BD CD06F0 CALL FDIOX1 ; READ DOUBLE DENSITY D6C0 C1 POP B ; CP/M MACRO ASSEM 2.0 #004 JD-850M : CBIOS ASCII VERSION 1.0 D6C1 B7 ORA A ; D6C2 C2FAD6 JNZ EXBOOT ; D6C5 2199EE LXI H,CPMSEC ; H.L=SECTOR PARA.ADDRESS D6C8 34 INR M ; SEC=SEC+1 D6C9 110001 LXI D,SECSIZ ; D6CC 2A9AEE LHLD CPMDMA ; D6CF 19 DAD D ; GET NEXT DMA ADDRESS D6D0 229AEE SHLD CPMDMA ; SET DMA ADDRESS D6D3 05 DCR B ; WORM BOOT END ? D6D4 C2B9D6 JNZ WBOOT2 ; D6D7 C3E4D6 JMP SYSCHK ; ; D6DA 21FFDD WBOOT7: LXI H,WDBOOT ; BOOT WINCHESTER D6DD CD45D9 CALL WINIOX ; D6E0 B7 ORA A ; D6E1 C2FAD6 JNZ EXBOOT ; ; D6E4 3A06C8 SYSCHK: LDA BDOS ; CP/M SYSTEM CHECK D6E7 FEC3 CPI 0C3H ; D6E9 CA0BD7 JZ SYSINI ; D6EC 3A0400 LDA LOGDSK ; LOAD LOG-IN DISK D6EF C641 ADI 41H ; D6F1 32A6DD STA LOGNAM ; SET LOG-IN DISK NAME D6F4 218DDD LXI H,LOG00 ; D6F7 CDD2DA CALL MSGOUT ; DISPLAY SYSGEN MESSAGE D6FA 21A9DD EXBOOT: LXI H,LOG01 ; D6FD CDD2DA CALL MSGOUT ; D700 CD47DA WAITCR: CALL KEYIN ; WAIT CR D703 FE0D CPI 0DH ; CR ? D705 C200D7 JNZ WAITCR ; D708 C39DD6 JMP WBOOT0 ; ; D70B 21FEDD SYSINI: LXI H,SYSFLG ; SYSTEM INITIALIZE D70E 7E MOV A,M ; LOAD MESSAGE FLAG D70F B7 ORA A ; D710 C21AD7 JNZ NODISP ; D713 34 INR M ; MESSAGE FLAG ON D714 2110C0 LXI H,CPMMSG ; CP/M MESSAGE ADDRESS D717 CDD2DA CALL MSGOUT ; DISPLAY CP/M MESSAGE D71A 0E00 NODISP: MVI C,0 ; D71C CD1FDB CALL RSINI ; PORT #0 INITIALIZE D71F 0E01 MVI C,1 ; D721 CD1FDB CALL RSINI ; PORT #1 INITIALIZE D724 0E02 MVI C,2 ; D726 CD1FDB CALL RSINI ; PORT #2 INITIALIZE D729 3EC3 MVI A,0C3H ; JUMP COMMAND D72B 320000 STA 0 ; LOCATION 00H D72E 2103D6 LXI H,WBOOTX ; WBOOT ADDRESS D731 220100 SHLD 1 ; LOCATION 01H D734 320500 STA 5 ; LOCATION 05H D737 2106C8 LXI H,BDOS ; BDOS ENTRY ADDRESS D73A 220600 SHLD 6 ; LOCATION 06H D73D AF XRA A ; D73E 329EEE STA WTFLAG ; CLEAR WRITE FLAG D741 3D DCR A ; D742 3226DF STA DISK01 ; R/W DISK PARA.->'FF' CP/M MACRO ASSEM 2.0 #005 JD-850M : CBIOS ASCII VERSION 1.0 D745 018000 LXI B,DEFDMA ; B.C=DEFALT DMA ADRS D748 CD16D8 CALL SETDMA ; CP/M DMA=80H D74B 3A0400 LDA LOGDSK ; LOAD LOG-IN DISK D74E 4F MOV C,A ; ; D74F C300C0 JMP CPMB ; JUMP TO CCP ; D752 79 AUTO: MOV A,C ; SET AUTO START COMMAND D753 323EDF STA KBDLEN ; SET LENGTH D756 2180E9 LXI H,KBDBUF ; H.L=KBD BUFF TOP ADRS D759 CD2BDA CALL MVDEHL ; D75C 2241DF SHLD KBDBF1 ; SET WRITE BUFF ADRS D75F C9 RET ; ; D760 213DDF CTLP: LXI H,PFLAG ; H.L=PRINT OUT FLAG ADRS D763 7E MOV A,M ; D764 2F CMA ; FLAG ON / OFF CONTROL D765 77 MOV M,A ; D766 C9 RET ; ; SETCUR: D767 2100EA LXI H,CURTBL ; D76A 011000 LXI B,16 ; SET CURSOR KEY TABLE D76D CD2BDA CALL MVDEHL ; D.E : DATA ADDR. D770 C9 RET ; H.L : TABLE ADDR. ; D771 3A0300 CONIN: LDA IOBYTE ; READ 1 CHR. CONSOL D774 E603 ANI 3 ; D776 FE02 CPI 2 ; BATCH MODE ? D778 C247DA JNZ KEYIN ; NO READ K/B ; D77B 21BBD7 READER: LXI H,RDRTBL ; YES READ READER DEV. D77E 0601 MVI B,1 ; D780 C3A2D7 JMP GETIOB ; ; D783 3A0300 CONOUT: LDA IOBYTE ; PUT 1 CHR. CONSOL D786 E603 ANI 3 ; D788 FE02 CPI 2 ; BATCH MODE ? D78A CA95D7 JZ LIST ; YES PUT LIST DEV. ; D78D CDDEDA CALL CRTPUT ; CONSOL 1 CHARA.PUT D790 3A3DDF LDA PFLAG ; LOAD PRINT OUT FLAG D793 B7 ORA A ; PRINT OUT ? D794 C8 RZ ; ; D795 0603 LIST: MVI B,3 ; LIST 1 CHARA.PUT D797 21CBD7 LXI H,LSTTBL ; H.L=TABLE TOP ADRS D79A C3A2D7 JMP GETIOB ; ; D79D 0602 PUNCH: MVI B,2 ; TAPE 1 CHARA.PUT D79F 21C3D7 LXI H,PUNTBL ; H.L=TABLE TOP ADRS ; D7A2 3A0300 GETIOB: LDA IOBYTE ; LOAD I/O BYTE D7A5 04 INR B ; B=SHIFT COUNT D7A6 05 SHIFT0: DCR B ; SHIFT END ? D7A7 CAAFD7 JZ SHIFT1 ; CP/M MACRO ASSEM 2.0 #006 JD-850M : CBIOS ASCII VERSION 1.0 D7AA 0F RRC ; D7AB 0F RRC ; 2 BIT SHIFT RIGHT D7AC C3A6D7 JMP SHIFT0 ; D7AF E603 SHIFT1: ANI 3 ; GET I/O DEVICE D7B1 07 RLC ; GET I/O PROGRAM ADRS D7B2 5F MOV E,A ; D7B3 1600 MVI D,0 ; D7B5 19 DAD D ; H.L=TABLE ADRS D7B6 5E MOV E,M ; D7B7 23 INX H ; D7B8 56 MOV D,M ; D7B9 EB XCHG ; H.L=I/O PRPG.ADRS D7BA E9 PCHL ; ; D7BB D8DB RDRTBL: DW RS0GET ; TAPE READ TABLE D7BD 47DA DW KEYIN ; D7BF E0DB DW RS1GET ; D7C1 E8DB DW RS2GET ; D7C3 32DC PUNTBL: DW RS0PUT ; TAPE PUNCH TABLE D7C5 D3D7 DW NOTDEV ; D7C7 3ADC DW RS1PUT ; D7C9 42DC DW RS2PUT ; D7CB 32DC LSTTBL: DW RS0PUT ; LIST OUT TABLE D7CD DEDA DW CRTPUT ; D7CF 3ADC DW RS1PUT ; D7D1 42DC DW RS2PUT ; ; D7D3 217ADD NOTDEV: LXI H,DEVMSG ; H.L=DEVICE MSG ADRS D7D6 CDD2DA CALL MSGOUT ; DISPLAY 'DEVICE NOT USABLE' D7D9 C38DD6 JMP WBOOT ; ; D7DC 210000 SELDSK: LXI H,0 ; SELECT DISK NUMBER D7DF 79 MOV A,C ; D7E0 FE03 CPI EXWDD ; EXTEND WINCHESTER ? D7E2 C8 RZ ; D7E3 FE08 CPI MAXDSK ; D7E5 D0 RNC ; D7E6 3296EE STA DISK00 ; SET DISK NUMBER D7E9 69 MOV L,C ; D7EA 29 DAD H ; * 2 D7EB 29 DAD H ; * 4 D7EC 29 DAD H ; * 8 D7ED 29 DAD H ; * 16 D7EE 1107DE LXI D,DSKTBL ; D7F1 19 DAD D ; H.L=DISK TABLE ADRS D7F2 C9 RET ; ; D7F3 0E00 HOME: MVI C,0 ; SET TRK NUMBER 0 ; D7F5 79 SETTRK: MOV A,C ; SET TRK NUMBER D7F6 3298EE STA CPMTRK ; D7F9 C9 RET ; ; D7FA 79 SETSEC: MOV A,C ; SET SEC NUMBER D7FB 3299EE STA CPMSEC ; D7FE 3A96EE LDA DISK00 ; LOAD CP/M DISK CP/M MACRO ASSEM 2.0 #007 JD-850M : CBIOS ASCII VERSION 1.0 D801 FE04 CPI EXDISK ; EXTEND DISK ? D803 D0 RNC ; D804 FE02 CPI FDDSIZ ; R/W DISK=FDD ? D806 D20DD8 JNC SEC01 ; D809 07 SEC00: RLC ; GET FDD DISK PARA. D80A C310D8 JMP SEC02 ; D80D E601 SEC01: ANI 1 ; GET WDD DISK PARA. D80F 0F RRC ; D810 2197EE SEC02: LXI H,CPMDSK ; H.L=SIDE(HEAD) PARA.ADRS D813 86 ADD M ; D814 77 MOV M,A ; SET R/W DISK PARA. D815 C9 RET ; ; D816 69 SETDMA: MOV L,C ; SET DMA ADDRESS D817 60 MOV H,B ; D818 229AEE SHLD CPMDMA ; D81B C9 RET ; ; D81C AF LISTST: XRA A ; D81D C9 RET ; ; ;;+++++++++++++++++++++++++++++++ ;;++++ SECTRN JD-850 ++++++++ ;;+++++++++++++++++++++++++++++++ SECTRNM ;; MACRO CALL D81E+3A96EE SECTRN: LDA DISK00 ; LOAD UNIT NO. (0-7) D821+FE04 CPI EXDISK ; EXTEND DISK ? D823+DA37D8 JC TRN ; ELES JUMP(A=0 - D=3) D826+E603 ANI 03H ; MASK LAST 2-BIT D828+FE01 CPI 01H ; E(=4)=0 UNIT#0 SIDE 0 D82A+C22FD8 JNZ TRNX ; F(=5)=2 UNIT#1 SIDE 0 D82D+3E02 MVI A,02 ; G(=6)=2 UNIT#1 SIDE 0 D82F+6F TRNX: MOV L,A ; H(=7)=3 UNIT#1 SIDE 1 D830+AF XRA A ; D831+329FEE STA LOGSEC ; LOGICAL SECTOR = 0 D834+C352D8 JMP TRN03 ; D837+2634 TRN: MVI H,FDDSPT ; GET R/W SECTOR & SIDE D839+FE02 CPI FDDSIZ ; WINCHESTER DISK ? D83B+DA40D8 JC TRN00 ; ELES JUMP D83E+2640 MVI H,WDDSPT ; H=WIN.SEC/TRK D840+79 TRN00: MOV A,C ; D841+329FEE STA LOGSEC ; SET LOGICAL SECTOR D844+2E00 MVI L,0 ; SIDE=0 D846+BC TRN01: CMP H ; D847+DA4FD8 JC TRN02 ; D84A+2C INR L ; SIDE UP D84B+94 SUB H ; D84C+C346D8 JMP TRN01 ; D84F+B7 TRN02: ORA A ; CARRY=0 D850+1F RAR ; MOD 2 D851+4F MOV C,A ; D852+7D TRN03: MOV A,L ; SET SIDE PARA. D853+3297EE STA CPMDSK ; D856+EB XCHG ; D857+09 DAD B ; H.L=SECTOR TABLE ADDR D858+6E MOV L,M ; CP/M MACRO ASSEM 2.0 #008 JD-850M : CBIOS ASCII VERSION 1.0 D859+2600 MVI H,0 ; D85B+C9 RET ; ; D85C AF READ: XRA A ; DISK READ D85D 0E02 MVI C,2 ; WRITE TYPE D85F C36DD8 JMP RW00 ; D862 3A96EE WRIT: LDA DISK00 ; DISK WRITE D865 FE04 CPI EXDISK ; EXTEND DISK ? D867 3E01 MVI A,1 ; D869 DA6DD8 JC RW00 ; D86C 4F MOV C,A ; D86D 329CEE RW00: STA RWFLAG ; D870 79 MOV A,C ; D871 329DEE STA WTTYPE ; ; D874 0604 MVI B,4 ; D876 1196EE LXI D,DISK00 ; D.E=CP/M R/W PARA.TOP ADRS D879 2126DF LXI H,DISK01 ; H.L=DISK R/W PARA.TOP ADRS D87C 1A RW01: LDAX D ; D87D BE CMP M ; DSK,SID,TRK,SEC EQU ? D87E C28AD8 JNZ WTCHK ; D881 23 INX H ; NEXT PARA.ADRS D882 13 INX D ; D883 05 DCR B ; D884 C27CD8 JNZ RW01 ; D887 C3AAD8 JMP MATCH ; DSK,SID,TRK,SEC EQU ; D88A 219EEE WTCHK: LXI H,WTFLAG ; H.L=WRITE FLAG ADRS D88D 7E MOV A,M ; LOAD WRITE FLAG D88E 3600 MVI M,0 ; CLEAR WRITE FLAG D890 B7 ORA A ; WRITE ? D891 CA99D8 JZ MVPARA ; D894 CDEBD8 CALL DISKWT ; DISK WRITE D897 B7 ORA A ; D898 C0 RNZ ; ERROR RETURN D899 010400 MVPARA: LXI B,4 ; D89C 1196EE LXI D,DISK00 ; D.E=NEW PARA.ADRS D89F 2126DF LXI H,DISK01 ; H.L=OLD PARA.ADRS D8A2 CD2BDA CALL MVDEHL ; NEW PARA -> OLD PARA D8A5 CDE7D8 CALL DISKRD ; DISK READ D8A8 B7 ORA A ; D8A9 C0 RNZ ; ERROR RETURN ; D8AA 3A9FEE MATCH: LDA LOGSEC ; LOAD LOGICAL R/W SECTOR D8AD E601 ANI SECMSK ; SECTOR MASK D8AF 6F MOV L,A ; GET HIGH OR LOW BUFF ADRS D8B0 2600 MVI H,0 ; D8B2 29 DAD H ; * 2 D8B3 29 DAD H ; * 4 D8B4 29 DAD H ; * 8 D8B5 29 DAD H ; * 16 D8B6 29 DAD H ; * 32 D8B7 29 DAD H ; * 64 D8B8 29 DAD H ; * 128 D8B9 1190EA LXI D,DEFBUF ; D.E=DEFALT BUFF TOP ADRS D8BC 19 DAD D ; CP/M MACRO ASSEM 2.0 #009 JD-850M : CBIOS ASCII VERSION 1.0 D8BD EB XCHG ; D.E=DEFALT BUFF R/W ADRS D8BE 2A9AEE LHLD CPMDMA ; H.L=USER DMA ADRS D8C1 018000 LXI B,128 ; B.C=MOVING COUNT D8C4 3A9CEE LDA RWFLAG ; LOAD R/W FLAG D8C7 B7 ORA A ; READ ? D8C8 CAD1D8 JZ RWBUF ; D8CB 3E01 MVI A,1 ; WRITE D8CD 329EEE STA WTFLAG ; WRITE FLAG ON D8D0 EB XCHG ; H.L=BUFF ADRS D8D1 CD2BDA RWBUF: CALL MVDEHL ; R/W DEFALT BUFF D8D4 3A9DEE LDA WTTYPE ; LOAD WRITE TYPE D8D7 FE01 CPI WTDIR ; DIRECTORY WRITE ? D8D9 C2E5D8 JNZ RWEXIT ; D8DC AF XRA A ; D8DD 329EEE STA WTFLAG ; CLEAR WRITE FLAG D8E0 CDEBD8 CALL DISKWT ; WRITE DIRECTORY D8E3 B7 ORA A ; D8E4 C0 RNZ ; ERROR RETURN D8E5 AF RWEXIT: XRA A ; R/W NORMAL RETURN D8E6 C9 RET ; ; ;;+++++++++++++++++++++++++++++++ ;;+++++ EXEC R/W JD-850 ++++++++ ;;+++++++++++++++++++++++++++++++ RWEXEC ;; MACRO CALL D8E7+AF DISKRD: XRA A ; DISK READ D8E8+C3EDD8 JMP RDWT00 ; D8EB+3E01 DISKWT: MVI A,1 ; DISK WRITE D8ED+322CDF RDWT00: STA RWPARA ; SET R/W PARA D8F0+2127DF RDWT: LXI H,RWDSK ; H.L=R/W PARA TOP ADDR D8F3+3A26DF LDA DISK01 ; LOAD UNIT NO. D8F6+FE02 CPI FDDSIZ ; A,B ? D8F8+DA0BD9 JC RDWT02 ; THEN JUMP (0,1) D8FB+FE04 CPI EXDISK ; WIN. DISK ? D8FD+DA1ED9 JC WINDSK ; THEN JUMP (2,3) D900+FE06 CPI 6 ; EXTEND DISK ? D902+D20BD9 JNC RDWT02 ; THEN JUMP (6,7) JD-840 CPM V1.4 D905+CD39F0 CALL FDIOX0 ; R/W SINGLE DENSITY D908+C30ED9 JMP RDWT03 D90B+CD06F0 RDWT02: CALL FDIOX1 ; R/W DUBLE DENSITY D90E+B7 RDWT03: ORA A ; CHECK STATUS D90F+C8 RZ ; NORMAL RETURN D910+FE02 CPI 2 ; TIME OUT ? D912+C242D9 JNZ RWERR ; NO D915+216CDD LXI H,OFLMSG ; TIME OUT D918+CDD2DA CALL MSGOUT ; "DISK OFFLINE" D91B+C342D9 JMP RWERR ; ERROR RETURN D91E+3A27DF WINDSK: LDA RWDSK ; SET WINCHESTER R/W PARA. D921+322FDF STA WINSID ; SIDE (HEAD) D924+3A28DF LDA RWTRK ; D927+322EDF STA WINTRK ; TRACK (CYLINDER) D92A+3A29DF LDA RWSEC ; D92D+3230DF STA WINSEC ; SECTOR D930+212CDF LXI H,RWPARA ; H.L=R/W PARA. TOP ADDR D933+CD45D9 CALL WINIOX ; EXEC R/W WINCHESTER D936+FE01 CPI 1 ; TIME OUT ? CP/M MACRO ASSEM 2.0 #010 JD-850M : CBIOS ASCII VERSION 1.0 D938+D8 RC ; NORMAL RETURN D939+C242D9 JNZ RWERR ; D93C+216CDD LXI H,OFLMSG ; "DISK OFFLINE" D93F+CDD2DA CALL MSGOUT ; D942+3E01 RWERR: MVI A,1 ; R/W ERROR RETUTRN D944+C9 RET ; ; ;;+++++++++++++++++++++++++++++ ;;++ FIXED DISK IOX ++ ;;+++++++++++++++++++++++++++++ ; K85WIN ; MACRO CALL D945+DBF9 WINIOX: IN WINST ; READ STATUS REG. D947+E604 ANI 0000$0100B ; READY CHECK D949+CAD2D9 JZ WINER4 ; GO TO TIMEOUT ERROR D94C+3E05 MVI A,5 ; D94E+3237DF STA RCOUNT ; SET RETRY COUNT (WT ERR ONLY) D951+AF XRA A ; D952+D3F0 OUT SELCMD ; SELECT FIXD DISK D954+7E MOV A,M ; LOAD R/W PARA. D955+23 INX H ; H.L=RAW PARA.ADRS D956+2234DF SHLD HLSAVE ; H.L SAVE D959+3236DF STA FIXRW ; D95C+C602 ADI 2 ; GET R/W COMMAND PARA. D95E+4F MOV C,A ; D95F+CDD7D9 CMD00: CALL CMDOUT ; OUT R/W PARA. D962+0605 MVI B,5 ; D964+2A34DF LHLD HLSAVE ; H.L REMOVE D967+4E CMD01: MOV C,M ; LOAD RAW,CYL,SID,SEC D968+23 INX H ; H.L=H.L+1 D969+CDD7D9 CALL CMDOUT ; OUT PARA. D96C+05 DCR B ; D96D+C267D9 JNZ CMD01 ; D970+7E MOV A,M ; DMA ADRS. (L) D971+23 INX H ; H.L=H.L+1 D972+D332 OUT DMA ; D974+7E MOV A,M ; DMA ADRS. (H) D975+D332 OUT DMA ; D977+3EFF MVI A,0FFH ; TERMINAL COUNT (LOW) D979+D333 OUT DMATC ; D97B+3A36DF LDA FIXRW ; LOAD R/W PARA. D97E+B7 ORA A ; D97F+3E40 MVI A,40H ; READ (MEMORY <- FDD) D981+06C6 MVI B,0C6H ; READ DMA MODE D983+CA89D9 JZ DMA01 ; D986+07 RLC ; WRITE (MEMORY -> FDD) A=80H D987+06E6 MVI B,0E6H ; WRITE DMA MODE D989+0D DMA01: DCR C ; D98A+B1 ORA C ; D98B+D333 OUT DMATC ; TERMINAL COUNT (HIGH) D98D+78 MOV A,B ; DMA MODE D98E+D338 OUT DMAMD ; D990+CDE1D9 CALL WAITWD ; WAIT INTERRUPT D993+B7 ORA A ; TIME OUT ? D994+C2D2D9 JNZ WINER4 ; TIME OUT D997+3A38DF LDA WINSTB ; LOAD WDD STATUS CP/M MACRO ASSEM 2.0 #011 JD-850M : CBIOS ASCII VERSION 1.0 D99A+47 MOV B,A ; D99B+0F RRC ; NORMAL END ? D99C+D2A1D9 JNC WINER0 ; D99F+AF XRA A ; NORMAL RETURN D9A0+C9 RET ; D9A1+78 WINER0: MOV A,B ; D9A2+E610 ANI 10H ; PARAMETER ERROR ? D9A4+C2CFD9 JNZ WINER3 ; D9A7+78 MOV A,B ; D9A8+E620 ANI 20H ; TIME-OUT ERROR ? D9AA+C2D2D9 JNZ WINER4 ; D9AD+78 MOV A,B ; D9AE+E640 ANI 40H ; ALT.SECTOR FULL ? D9B0+C2C6D9 JNZ WINER2 ; D9B3+3A36DF LDA FIXRW ; LOAD R/W PARA. D9B6+B7 ORA A ; D9B7+CACFD9 JZ WINER3 ; D9BA+2137DF LXI H,RCOUNT ; H.L=RETRY COUNT ADRS D9BD+35 DCR M ; D9BE+0E07 MVI C,7 ; C=ALT.SECTOR WRITE PARA. D9C0+C25FD9 JNZ CMD00 ; D9C3+3E03 WINER1: MVI A,3 ; ALT.RETRY ERROR RETURN D9C5+C9 RET ; D9C6+21E4DD WINER2: LXI H,FULMSG ; DISPLAY FULL MESSAGE D9C9+CDD2DA CALL MSGOUT ; D9CC+3E04 MVI A,4 ; ALT.SECTOR FULL RETURN D9CE+C9 RET ; D9CF+3E02 WINER3: MVI A,2 ; R/W ERROR RETURN D9D1+C9 RET ; D9D2+DBFA WINER4: IN WININI ; WINCHESTER INITIALIZE D9D4+3E01 MVI A,1 ; TIME-OUT RETURN D9D6+C9 RET ; D9D7+DBF9 CMDOUT: IN WINST ; READ STATUS REG. D9D9+0F RRC ; INPUT BUFF FULL ? D9DA+D2D7D9 JNC CMDOUT ; D9DD+79 MOV A,C ; A=COMMAND PARA. D9DE+D3F8 OUT WINCMD ; D9E0+C9 RET ; D9E1+AF WAITWD: XRA A ; WAIT WINCHESTER INTERRUPT D9E2+D382 OUT RS6MSK ; RST 6.0 MASK OFF D9E4+323CDF STA WINFLG ; CLEAR INTERRUPT FLAG D9E7+0602 MVI B,2 ; SET SOFT TIMER D9E9+110000 TIME00: LXI D,0 ; D9EC+3A3CDF TIME01: LDA WINFLG ; INTERRUPT OK ? D9EF+B7 ORA A ; D9F0+C201DA JNZ TIME02 ; D9F3+1B DCX D ; D9F4+7A MOV A,D ; D9F5+B3 ORA E ; D9F6+C2ECD9 JNZ TIME01 ; D9F9+05 DCR B ; TIME OVER ? D9FA+C2E9D9 JNZ TIME00 ; D9FD+04 INR B ; B=1 D9FE+C303DA JMP TIME03 ; DA01+0600 TIME02: MVI B,0 ; NORMAL RETURN DA03+3E01 TIME03: MVI A,1 ; CP/M MACRO ASSEM 2.0 #012 JD-850M : CBIOS ASCII VERSION 1.0 DA05+D382 OUT RS6MSK ; RST 6.0 MASK ON DA07+78 MOV A,B ; DA08+C9 RET ; DA09+F3 WININT: DI ; RST 6.0 INTERRUPT DA0A+F5 PUSH A ; DA0B+C5 PUSH B ; DA0C+E5 PUSH H ; DA0D+0604 MVI B,4 ; DA0F+2138DF LXI H,WINSTB ; H.L=STATUS SAVE ADRS DA12+DBF9 STIN: IN WINST ; READ STATUS REG. DA14+E602 ANI 2 ; OUTPUT BUFF FULL ? DA16+C212DA JNZ STIN ; DA19+DBF8 IN WINCMD ; READ STATUS DA1B+77 MOV M,A ; STATUS SAVE DA1C+23 INX H ; DA1D+05 DCR B ; DA1E+C212DA JNZ STIN ; DA21+3EFF MVI A,0FFH ; INTERRUPT FLAG ON DA23+323CDF STA WINFLG ; DA26+E1 POP H ; DA27+C1 POP B ; DA28+F1 POP A ; DA29+FB EI ; DA2A+C9 RET ; ; DA2B 1A MVDEHL: LDAX D ; (D.E) -> (H.L) DA2C 77 MOV M,A ; DA2D 23 INX H ; DA2E 13 INX D ; DA2F 0B DCX B ; DA30 78 MOV A,B ; DA31 B1 ORA C ; DA32 C22BDA JNZ MVDEHL ; DA35 C9 RET ; ; DA36 F3 TRAP: DI ; TRAP INTERRUPT DA37 DB80 IN TRAPST ; READ TRAP STATUS DA39 1F RAR ; HARD DISK ? DA3A D200F0 JNC ROM ; CARRY=0 THEN KBD DA3D FB EI ; DA3E C9 RET ; ; ;+++++++++++++++ ;++ KB STATUS ++ ;+++++++++++++++ DA3F 3A3EDF KBST: LDA KBDLEN ; LOAD KEY-IN LENGTH DA42 B7 ORA A ; DA43 C8 RZ ; NO INT. DA44 3EFF MVI A,0FFH ; INT OK. DA46 C9 RET ; ; ;+++++++++++++++ ;++ KEY IN +++ ;+++++++++++++++ ;; MACRO CALL BIOS KEY INPUT ROUTINE K85KEYIN ;; MACRO CALL (( )) CP/M MACRO ASSEM 2.0 #013 JD-850M : CBIOS ASCII VERSION 1.0 DA47+213EDF KEYIN: LXI H,KBDLEN ; READ KEY IN LENGTH DA4A+7E KEYWIT: MOV A,M ; KEY IN LENGTH DA4B+B7 ORA A ; DA4C+CA4ADA JZ KEYWIT ; =0 INT. WAIT DA4F+35 DCR M ; LENGTH COUNT DOWN DA50+2A3FDF LHLD KBDBF0 ; H.L BUFF ADDR. DA53+46 MOV B,M ; B=INPUT DATA DA54+CDCADA CALL GETADR ; CHECK BUFF ADDR. DA57+223FDF SHLD KBDBF0 ; SET NEW BUFF ADDR DA5A+78 MOV A,B ; DA5B+C9 RET ; ; ;+++++++++++++++++ ;+++ KB INT. +++++ ;+++++++++++++++++ ;; MACRO CALL BIOS KEY BOARD INT. ROUTINE K85KBINT ;; MACRO CALL DA5C+F3 KBINT: DI ; KB INTERRUPT DA5D+F5 PUSH A ; DA5E+C5 PUSH B ; DA5F+D5 PUSH D ; DA60+E5 PUSH H ; DA61+2A41DF LHLD KBDBF1 ; H.L KEY IN DATA SAVE ADDR. DA64+DB00 IN KB ; READ KEY DA66+FE80 CPI 80H ; CTL-KEY ? DA68+DA7CDA JC INT01 ; DA6B+FEC0 CPI 0C0H ; CTL-ASCII ? DA6D+D27ADA JNC INT00 ; DA70+FEA0 CPI 0A0H ; CTL-SMALL-ASCII ? DA72+DA8EDA JC INT02 ; DA75+D620 SUI 20H ; CTL-SMALL ASCII DA77+C38EDA JMP INT02 ; DA7A+D6C0 INT00: SUI 0C0H ; CTL CUT DA7C+FE08 INT01: CPI 08H ; PF01-08 ? DA7E+DA99DA JC INT05 ; DA81+FE10 CPI 10H ; <- -HOME ? DA83+DA8BDA JC INT09 ; DA86+FE1D CPI 1DH ; DELETE ? DA88+DA97DA JC INT04 ; DA8B+CD3ADD INT09: CALL KEYCNV ; KEY CODE => INTERNAL CODE DA8E+E67F INT02: ANI 7FH ; DA90+47 INT03: MOV B,A ; SET KEY IN DATA DA91+CDBEDA CALL GETLEN ; GET BUFF ADDR. DA94+C3B5DA JMP INT08 ; DA97+D608 INT04: SUI 08H ; '10-'1C -> '08-'13 DA99+EB INT05: XCHG ; DA9A+3C INR A ; DA9B+011000 LXI B,ASSLEN ; B.C PF,PE KEY LENGTH DA9E+21F0E7 LXI H,ASSBUF-ASSLEN ; H.L INITIAL PF,PE DAA1+09 INT06: DAD B ; GET PF,PE KEY ADDR. DAA2+3D DCR A ; DAA3+C2A1DA JNZ INT06 ; DAA6+EB XCHG ; D.E PF,PE KEY ADDR. DAA7+1A INT07: LDAX D ; LOAD PF,PE DATA DAA8+B7 ORA A ; DATA END ? DAA9+CAB5DA JZ INT08 ; CP/M MACRO ASSEM 2.0 #014 JD-850M : CBIOS ASCII VERSION 1.0 DAAC+47 MOV B,A ; SET PF,PE DATA DAAD+CDBEDA CALL GETLEN ; GET BUFF ADDR. DAB0+13 INX D ; DATA ADDR +1 DAB1+0D DCR C ; DAB2+C2A7DA JNZ INT07 ; DAB5+2241DF INT08: SHLD KBDBF1 ; SET NEW BUFF ADDR. DAB8+E1 POP H ; DAB9+D1 POP D ; DABA+C1 POP B ; DABB+F1 POP A ; DABC+FB EI ; DABD+C9 RET ; ; DABE 3A3EDF GETLEN: LDA KBDLEN ; LOAD KEY-IN LENGTH DAC1 07 RLC ; LENGTH = 128 ? DAC2 D8 RC ; DAC3 E5 PUSH H ; DAC4 213EDF LXI H,KBDLEN ; KEY-IN LENGTH +1 UP DAC7 34 INR M ; DAC8 E1 POP H ; DAC9 70 MOV M,B ; SET KEY-IN DATA ; DACA 23 GETADR: INX H ; BUFF ADDRESS +1 UP DACB 7D MOV A,L ; GET BUFF ADDRESS DACC B7 ORA A ; BUFF END ? DACD C0 RNZ ; NO END DACE 2180E9 LXI H,KBDBUF ; H.L BUFF TOP ADDRESS DAD1 C9 RET ; ; DAD2 7E MSGOUT: MOV A,M ; DISPLAY MESSAGE DAD3 23 INX H ; DAD4 FE24 CPI '$' ; END CHARA ? DAD6 C8 RZ ; DAD7 4F MOV C,A ; DAD8 CDDEDA CALL CRTPUT ; DADB C3D2DA JMP MSGOUT ; ; ;++++++++++++++ ;++ CRT PUT +++ ;++++++++++++++ ;; MACRO CALL BIOS CRT-PUT ROUTINE K85CRTPUT ;; MACRO CALL DADE+C5 CRTPUT: PUSH B ; DADF+D5 PUSH D ; DAE0+E5 PUSH H ; DAE1+79 MOV A,C ; C=PUT CHARACTER DAE2+E67F ANI 7FH ; PARITY BIT OFF DAE4+FE08 CPI 08H ; DELETE CODE ? DAE6+CA0EDB JZ CRT31 ; DAE9+FE0C CPI 0CH ; CRT CLEAR ? DAEB+CA06DB JZ CRT2 ; DAEE+FE0D CPI 0DH ; CR ? DAF0+CA0CDB JZ CRT3 ; DAF3+CD53DD CALL CRTCNV ; INTERNAL CODE => CRT CODE DAF6+B9 CMP C ; DAF7+C20EDB JNZ CRT31 ; CP/M MACRO ASSEM 2.0 #015 JD-850M : CBIOS ASCII VERSION 1.0 DAFA+FE20 CPI 20H ; A MODE,COMMAND (PORT#0) DB1B CD2BDA CALL MVDEHL ; D.E+02 -> MODE,COMMAND (PORT#1) DB1E C9 RET ; D.E+04 -> MODE,COMMAND (PORT#1) ; RSINI: DB1F 79 MOV A,C ; INITIALIZE RS-232C PORT DB20 FE03 CPI 3 ; C=PORT NUMBER (0,1,2) DB22 D0 RNC ; DB23 6F MOV L,A ; DB24 2600 MVI H,0 ; DB26 29 DAD H ; H.L=MODE ADRS DB27 1190EE LXI D,RS0MOD ; PORT INITIALIZE DB2A 19 DAD D ; DB2B F3 DI ; DB2C CD34DB CALL RSINIT ; DB2F CD99DB CALL RSCLR ; DB32 FB EI DB33 C9 RET ; ; DB34 79 RSINIT: MOV A,C ; RESET 8251 LSI DB35 FE01 CPI 1 ; DB37 CA52DB JZ INIT01 ; DB3A D267DB JNC INIT02 ; DB3D AF INIT00: XRA A ; PORT #0 INITIALIZE DB3E D361 OUT 61H ; DB40 D361 OUT 61H ; DB42 D361 OUT 61H ; DB44 3E50 MVI A,50H ; DB46 D361 OUT 61H ; DB48 7E MOV A,M ; PORT #0 MODE DB49 23 INX H ; DB4A D361 OUT 61H ; DB4C DB60 IN 60H ; DB4E 7E MOV A,M ; PORT #0 COMMAND DB4F D361 OUT 61H ; DB51 C9 RET ; DB52 AF INIT01: XRA A ; PORT #1 INITIALIZE DB53 D371 OUT 71H ; DB55 D371 OUT 71H ; DB57 D371 OUT 71H ; DB59 3E50 MVI A,50H ; CP/M MACRO ASSEM 2.0 #016 JD-850M : CBIOS ASCII VERSION 1.0 DB5B D371 OUT 71H ; DB5D 7E MOV A,M ; PORT #1 MODE DB5E 23 INX H ; DB5F D371 OUT 71H ; DB61 DB70 IN 70H ; DB63 7E MOV A,M ; PORT #1 COMMAND DB64 D371 OUT 71H ; DB66 C9 RET ; DB67 AF INIT02: XRA A ; PORT #2 INITIALIZE DB68 D351 OUT 51H ; DB6A D351 OUT 51H ; DB6C D351 OUT 51H ; DB6E 3E50 MVI A,50H ; DB70 D351 OUT 51H ; DB72 7E MOV A,M ; PORT #2 MODE DB73 23 INX H ; DB74 D351 OUT 51H ; DB76 DB50 IN 50H ; DB78 7E MOV A,M ; PORT #2 COMMAND DB79 D351 OUT 51H ; DB7B C9 RET ; ; DB7C F3 RSPARA: DI ; DB7D 79 MOV A,C ; SET PORT PARAMETER DB7E FE03 CPI 3 ; B =PORT NUMBER (0,1,2) DB80 D0 RNC ; D.E=PORT BUFF TOP ADRS DB81 C5 PUSH B ; H.L=PORT BUF SIZE DB82 EB XCHG ; DB83 E5 PUSH H ; DB84 19 DAD D ; DB85 E3 XTHL ; DB86 D5 PUSH D ; DB87 E5 PUSH H DB88 CDB4DB CALL RSTBLA ; DB8B D1 POP D ; DB8C 73 MOV M,E ; SET PORT BUF. SIZE DB8D 23 INX H DB8E 72 MOV M,D ; DB8F 23 INX H ; DB90 D1 POP D ; DB91 73 MOV M,E ; SET PORT BUF. TOP ADDR. DB92 23 INX H ; DB93 72 MOV M,D ; DB94 D1 POP D ; DB95 73 MOV M,E ; SET PORT BUF. END ADDR. DB96 23 INX H DB97 72 MOV M,D DB98 C1 POP B ; ; DB99 F3 RSCLR: DI ; DB9A 79 MOV A,C ; CLEAR RS PORT PARA. DB9B CDB4DB CALL RSTBLA ; GET TABLE ADDR. DB9E 23 INX H ; DB9F 23 INX H ; DBA0 4E MOV C,M ; B.C <== BUF. TOP ADDR. DBA1 23 INX H ; CP/M MACRO ASSEM 2.0 #017 JD-850M : CBIOS ASCII VERSION 1.0 DBA2 46 MOV B,M ; DBA3 23 INX H ; DBA4 23 INX H ; DBA5 23 INX H ; DBA6 AF XRA A ; CLEAR CURRENT LENGTH DBA7 77 MOV M,A ; DBA8 23 INX H ; DBA9 77 MOV M,A ; DBAA 23 INX H ; DBAB 71 MOV M,C ; INITIAL READ BUF. ADDR. DBAC 23 INX H ; DBAD 70 MOV M,B ; DBAE 23 INX H ; DBAF 71 MOV M,C ; INITIAL WRITE BUF. ADDR. DBB0 23 INX H ; DBB1 70 MOV M,B ; DBB2 FB EI ; DBB3 C9 RET ; DBB4 87 RSTBLA: ADD A ; HL <== RS TABLE TOP ADDR DBB5 81 ADD C ; DBB6 07 RLC ; DBB7 07 RLC ; DBB8 5F MOV E,A ; DBB9 1600 MVI D,0 ; DBBB 2144DF LXI H,RS0TBL ; DBBE 19 DAD D ; PORT# * 12 + ( TABLE TOP ADDR. ) DBBF C9 RET ; DBC0 79 RSLENG: MOV A,C ; GET PORT LENGTH IN H.L DBC1 FE03 CPI 3 ; DBC3 D0 RNC ; DBC4 FE01 CPI 1 ; DBC6 CAD0DB JZ LENG01 ; DBC9 D2D4DB JNC LENG02 ; DBCC 2A4ADF LENG00: LHLD RS0TBL+6 ; PORT #0 LENGTH DBCF C9 RET ; DBD0 2A56DF LENG01: LHLD RS1TBL+6 ; PORT #1 LENGTH DBD3 C9 RET ; DBD4 2A62DF LENG02: LHLD RS2TBL+6 ; PORT #2 LENGTH DBD7 C9 RET ; ; ;+++++++++++++++++++++ ;++ PORT IN ++ ;+++++++++++++++++++++ K85PORTIN ;; MACRO DBD8+214ADF RS0GET: LXI H,RS0TBL+6 DBDB+0601 MVI B,1 ; DBDD+C3EDDB JMP RSGET DBE0+2156DF RS1GET: LXI H,RS1TBL+6 DBE3+0602 MVI B,2 ; DBE5+C3EDDB JMP RSGET DBE8+2162DF RS2GET: LXI H,RS2TBL+6 DBEB+0604 MVI B,4 ; DBED+7E RSGET: MOV A,M ; CHECK LENGTH DBEE+23 INX H ; CP/M MACRO ASSEM 2.0 #018 JD-850M : CBIOS ASCII VERSION 1.0 DBEF+B6 ORA M ; DBF0+2B DCX H ; DBF1+C201DC JNZ RSG11 ; DBF4+3A43DF LDA RSCND ; DBF7+A0 ANA B ; DBF8+78 MOV A,B ; DBF9+1F RAR ; DBFA+4F MOV C,A ; DBFB+C409DD CNZ RSRST ; DBFE+C3EDDB JMP RSGET ; DC01+F3 RSG11: DI ; DC02+5E MOV E,M ; GET LENGTH DC03+23 INX H DC04+56 MOV D,M ; DC05+1B DCX D ; LENGTH DOWN DC06+72 MOV M,D DC07+2B DCX H DC08+73 MOV M,E DC09+2B DCX H ; DC0A+56 MOV D,M ; GET END ADDR. DC0B+2B DCX H ; DC0C+5E MOV E,M ; DC0D+D5 PUSH D DC0E+23 INX H ; DC0F+23 INX H ; DC10+23 INX H ; DC11+23 INX H ; DC12+5E MOV E,M ; GET READ POINT ADDR. DC13+23 INX H ; DC14+56 MOV D,M ; DC15+E3 XTHL ; DC16+EB XCHG ; DC17+4E MOV C,M ; READ DATA DC18+23 INX H ; COUNTUP READ POINTER DC19+CD35DD CALL SBHLDE ; BUFF END ? DC1C+EB XCHG ; DC1D+DA2BDC JC RSG99 ; NO DC20+E3 XTHL ; YES BUFF. END DC21+54 MOV D,H DC22+5D MOV E,L DC23+E3 XTHL ; DC24+21F9FF LXI H,-7 ; DC27+19 DAD D ; DC28+5E MOV E,M ; D.E <== BUFF. TOP ADDR. DC29+23 INX H ; DC2A+56 MOV D,M DC2B+E1 RSG99: POP H ; DC2C+72 MOV M,D ; SET READ POINTER DC2D+2B DCX H ; DC2E+73 MOV M,E ; DC2F+79 MOV A,C ; DC30+FB EI DC31+C9 RET ; ;+++++++++++++++++++++ ;++ PORT OUT +++ CP/M MACRO ASSEM 2.0 #019 JD-850M : CBIOS ASCII VERSION 1.0 ;+++++++++++++++++++++ K85PORTOUT ;; MACRO DC32+3E61 RS0PUT: MVI A,61H ; PORT ADDR (STATUS) DC34+3248DC STA RSPUT+1 DC37+C347DC JMP RSPUT DC3A+3E71 RS1PUT: MVI A,71H ; PORT ADDR (STATUS) DC3C+3248DC STA RSPUT+1 DC3F+C347DC JMP RSPUT DC42+3E51 RS2PUT: MVI A,51H ; PORT ADDR (STATUS) DC44+3248DC STA RSPUT+1 DC47+DB00 RSPUT: IN 0 ; READ STATUS DC49+1F RAR DC4A+D247DC JNC RSPUT ; NOT READY DC4D+F3 DI ; DC4E+3A48DC LDA RSPUT+1 DC51+3D DCR A DC52+3257DC STA RSP99+1 DC55+79 MOV A,C DC56+D300 RSP99: OUT 0 ; PUT 1 CHR. DC58+FB EI ; DC59+C9 RET ; DC5A F3 RSINT: DI ; RS-232C INTERRUPT DC5B F5 PUSH A ; DC5C C5 PUSH B ; DC5D D5 PUSH D ; DC5E E5 PUSH H ; DC5F 2144DF LXI H,RS0TBL ; DC62 110C00 LXI D,12 ; DC65 0E00 MVI C,0 ; PORT NO DC67 DB61 IN 61H ; READ PORT#1 STATUS DC69 E602 ANI 2 ; RECEIVE READY ? DC6B 3E60 MVI A,60H ; PORT#1 DATA DC6D C286DC JNZ RSINT0 ; YES DC70 0C INR C ; DC71 19 DAD D ; DC72 DB71 IN 71H ; NO / READ PORT#2 STATUS DC74 E602 ANI 2 ; RECEIVE READY ? DC76 3E70 MVI A,70H ; PORT#2 DATA DC78 C286DC JNZ RSINT0 ; YES DC7B 0C INR C ; DC7C 19 DAD D ; DC7D DB51 IN 51H ; NO / READ PORT#3 STAT DC7F E602 ANI 2 ; DC81 3E50 MVI A,50H ; PORT#3 DATA DC83 CAD4DC JZ RSINT6 ; NO ; DC86 328ADC RSINT0: STA $+4 ; DC89 DB00 IN 0 ; DC8B 47 MOV B,A ; DC8C 5E MOV E,M ; GET BUF. SIZE DC8D 23 INX H ; DC8E 56 MOV D,M ; DC8F D5 PUSH D ; DC90 110500 LXI D,5 ; DC93 19 DAD D ; CP/M MACRO ASSEM 2.0 #020 JD-850M : CBIOS ASCII VERSION 1.0 DC94 5E MOV E,M ; GET CURRENT BUF. LENGTH DC95 23 INX H ; DC96 56 MOV D,M ; DC97 E3 XTHL ; DC98 EB XCHG ; DC99 CD35DD CALL SBHLDE ; BUFF. FULL ? DC9C D2D3DC JNC RSINT7 ; BUFF. FULL DC9F 1B DCX D ; DCA0 1B DCX D ; DE-2 DCA1 CD35DD CALL SBHLDE ; DCA4 D4DADC CNC RSSTOP ; STOP PORT INPUT DCA7 23 INX H ; DCA8 EB XCHG ; DCA9 E3 XTHL ; DCAA 72 MOV M,D ; COUNT UP CURRENT BUF. LENGTH DCAB 2B DCX H ; DCAC 73 MOV M,E ; DCAD 2B DCX H ; DCAE 56 MOV D,M ; GET END BUF. ADDR. DCAF 2B DCX H ; DCB0 5E MOV E,M ; DCB1 D5 PUSH D ; DCB2 110600 LXI D,6 ; DCB5 19 DAD D ; DCB6 5E MOV E,M ; GET BUF. END ADDR. DCB7 23 INX H ; DCB8 56 MOV D,M ; DCB9 E3 XTHL ; DCBA EB XCHG ; DCBB 70 MOV M,B ; BUFFERRING DATA DCBC 23 INX H ; WRITE COUNTER UP DCBD CD35DD CALL SBHLDE ; BUF. END ? DCC0 EB XCHG ; DCC1 DACFDC JC RSINT2 ; NO DCC4 E3 XTHL ; DCC5 54 MOV D,H ; DCC6 5D MOV E,L ; DCC7 E3 XTHL ; DCC8 21F7FF LXI H,-9 ; DCCB 19 DAD D ; DCCC 5E MOV E,M ; BUF. TOP ADDR. DCCD 23 INX H ; DCCE 56 MOV D,M ; ; DCCF E1 RSINT2: POP H ; DCD0 72 MOV M,D ; SET BUF. WRITE POINTER DCD1 2B DCX H ; DCD2 73 MOV M,E ; DCD3 F1 RSINT7: POP PSW ; DCD4 E1 RSINT6: POP H ; DCD5 D1 POP D ; DCD6 C1 POP B ; DCD7 F1 POP A ; DCD8 FB EI ; DCD9 C9 RET ; ; CP/M MACRO ASSEM 2.0 #021 JD-850M : CBIOS ASCII VERSION 1.0 RSSTOP: ; STOP RS-IN DCDA E5 PUSH H ; DCDB 79 MOV A,C ; DCDC 3D DCR A ; DCDD 79 MOV A,C ; DCDE 17 RAL ; DCDF 4F MOV C,A ; DCE0 3A43DF LDA RSCND ; DCE3 B1 ORA C DCE4 3243DF STA RSCND ; DCE7 2193EE LXI H,RS1MOD+1 ; COMMAND PORT1 DCEA 0EFD MVI C,0FDH ; MASK PATAERN DCEC CAFDDC JZ RSS00 ; DCEF 23 INX H ; COMMAND ADDR PORT 2 DCF0 23 INX H ; DCF1 D203DD JNC RSS01 ; DCF4 2191EE LXI H,RS0MOD+1 ; ; DCF7 7E MOV A,M ; GET COMMAND DCF8 A1 ANA C ; MASK DTR DCF9 D361 OUT 61H ; DCFB E1 POP H ; DCFC C9 RET ; DCFD 7E RSS00: MOV A,M ; DCFE A1 ANA C ; DCFF D371 OUT 71H ; DD01 E1 POP H ; DD02 C9 RET ; ; DD03 7E RSS01: MOV A,M ; GET COMMAND DD04 A1 ANA C ; DD05 D351 OUT 51H ; DD07 E1 POP H ; DD08 C9 RET ; RSRST: ; RESET MODE COMMAND DD09 E5 PUSH H ; DD0A D5 PUSH D ; DD0B C5 PUSH B ; DD0C 1143DF LXI D,RSCND ; DD0F 06FE MVI B,0FEH ; DD11 2191EE LXI H,RS0MOD+1 ; DD14 79 MOV A,C ; DD15 3D DCR A ; DD16 3E61 MVI A,61H ; DD18 FA29DD JM RSR00 ; DD1B 05 DCR B ; B=0FDH DD1C 23 INX H DD1D 23 INX H DD1E 3E71 MVI A,71H ; DD20 CA29DD JZ RSR00 ; DD23 06FB MVI B,0FBH ; DD25 23 INX H DD26 23 INX H ; ; CP/M MACRO ASSEM 2.0 #022 JD-850M : CBIOS ASCII VERSION 1.0 DD27 3E51 MVI A,51H ; DD29 322DDD RSR00: STA $+4 ; DD2C D300 OUT 0 ; DD2E 1A LDAX D ; DD2F A0 ANA B ; DD30 12 STAX D ; DD31 C1 POP B ; DD32 D1 POP D ; DD33 E1 POP H ; DD34 C9 RET ; ; ; DD35 7D SBHLDE: MOV A,L ; H.L-D.E DD36 93 SUB E ; DD37 7C MOV A,H ; CARRY=0 PLUS DD38 9A SBB D ; CARRY=1 MINUS DD39 C9 RET ; ; KEYCNV: ; KEY CODE ==> INTERNAL CODE DD3A E5 PUSH H ; DD3B C5 PUSH B ; DD3C 0E08 MVI C,8 ; DD3E 2100EA LXI H,CURTBL ; DD41 BE KC00: CMP M ; DD42 CA4EDD JZ KC01 ; DD45 23 INX H ; DD46 23 INX H ; DD47 0D DCR C ; DD48 C241DD JNZ KC00 ; DD4B C1 POP B ; DD4C E1 POP H ; DD4D C9 RET DD4E 23 KC01: INX H ; DD4F 7E MOV A,M ; DD50 C1 POP B ; DD51 E1 POP H ; DD52 C9 RET ; CRTCNV: ; INTERNAL CODE ==> CRT CODE DD53 E5 PUSH H ; DD54 C5 PUSH B ; DD55 0E08 MVI C,8 ; DD57 2101EA LXI H,CURTBL+1 ; DD5A BE CK00: CMP M ; DD5B CA67DD JZ CK01 ; DD5E 23 INX H ; DD5F 23 INX H ; DD60 0D DCR C ; DD61 C25ADD JNZ CK00 ; DD64 C1 POP B ; DD65 E1 POP H ; DD66 C9 RET DD67 2B CK01: DCX H ; DD68 7E MOV A,M ; DD69 C1 POP B ; DD6A E1 POP H ; CP/M MACRO ASSEM 2.0 #023 JD-850M : CBIOS ASCII VERSION 1.0 DD6B C9 RET ; DD6C 0D4449534BOFLMSG: DB 0DH,'DISK OFFLINE','$' DD7A 4445564943DEVMSG: DB 'DEVICE NOT USABLE',0DH,'$' ; DD8D 0D504C4541LOG00: DB 0DH,'PLEASE SYSGEN FOR DISK "' DDA6 202224 LOGNAM: DB ' "','$' DDA9 0D53455420LOG01: DB 0DH,'SET JD-850 SYSTEM DISKETTE IN DISK "A"' DDD0 0D4F4B2054 DB 0DH,'OK THEN HIT RETURN','$' ; DDE4 0D414C5445FULMSG: DB 0DH,'ALTERNATIVE SECTOR FULL',0DH,'$' ; DDFE 00 SYSFLG: DB 0 ; SYSTEM MESSAGE FLAG ; DDFF 00 WDBOOT: DB 0 ; WINCHESTER BOOT TABLE DE00 00 DB 0 ; CYLINDER HIGH = 0 DE01 01 DB 1 ; CYLINDER LOW = 1 DE02 01 DB 1 ; HEAD = 1 DE03 01 DB 1 ; SECTOR = 1 DE04 16 DB CPMSIZ ; SECTOR LENGTH DE05 00C0 DW CPMB ; DMA=CCP TOP ADDRESS ;++++++++++++++++++++ ;++ DISK PARAMETER ++ ;++++++++++++++++++++ K85DSKPARA ; MACRO CALL DE07+87DE0000 DSKTBL: DW FDSTBL,00000H ; DISK PARA. FOR DISK 00 DE0B+00000000 DW 00000H,00000H ; DE0F+10EAEADE DW DIRBUF,FDDBLK DE13+90EB10EC DW CHECK0,ALLOC0 DE17+87DE0000 DW FDSTBL,00000H ; DISK PARA. FOR DISK 01 DE1B+00000000 DW 00000H,00000H ; DE1F+10EAEADE DW DIRBUF,FDDBLK ; DE23+D0EB50EC DW CHECK1,ALLOC1 ; DE27+A1DE0000 DW WDSTBL,00000H ; DISK PSRA. FOR DISK 02 DE2B+00000000 DW 00000H,00000H ; DE2F+10EAF9DE DW DIRBUF,WINBLK DE33+000090EC DW 00000H,ALLOC2 ; DE37+A1DE0000 DW WDSTBL,00000H ; DISK PARA. FOR DISK 03 DE3B+00000000 DW 00000H,00000H ; DE3F+10EAF9DE DW DIRBUF,WINBLK ; DE43+00000000 DW 00000H,00000H ; DE47+87DE0000 DW FDSTBL,00000H ; DISK PARA. FOR DISK 04 DE4B+00000000 DW 00000H,00000H ; DE4F+10EA08DF DW DIRBUF,BLK800 ; DE53+90ED10EE DW CHECK4,ALLOC4 ; DE57+87DE0000 DW FDSTBL,00000H ; DISK PARA. FOR DISK 05 DE5B+00000000 DW 00000H,00000H DE5F+10EA08DF DW DIRBUF,BLK800 DE63+B0ED30EE DW CHECK5,ALLOC5 DE67+C1DE0000 DW FSSTBL,00000H ; DISK PARA. FOR DISK 06 DE6B+00000000 DW 00000H,00000H ; DE6F+10EA17DF DW DIRBUF,BLK840 DE73+D0ED50EE DW CHECK6,ALLOC6 DE77+C1DE0000 DW FSSTBL,00000H ; DISK PARA FOR DISK 07 DE7B+00000000 DW 00000H,00000H DE7F+10EA17DF DW DIRBUF,BLK840 CP/M MACRO ASSEM 2.0 #024 JD-850M : CBIOS ASCII VERSION 1.0 DE83+F0ED70EE DW CHECK7,ALLOC7 DE87+01070D1319FDSTBL: DB 01,07,13,19,25,05,11,17 ; SECTOR 01-08 DE8F+1703090F15 DB 23,03,09,15,21,02,08,14 ; 09-16 DE97+141A060C12 DB 20,26,06,12,18,24,04,10 ; 17-24 DE9F+1016 DB 16,22 ; 25-26 DEA1+0102030405WDSTBL: DB 01,02,03,04,05,06,07,08 ; SECTOR 01-08 DEA9+090A0B0C0D DB 09,10,11,12,13,14,15,16 ; 09-16 DEB1+1112131415 DB 17,18,19,20,21,22,23,24 ; 17-24 DEB9+191A1B1C1D DB 25,26,27,28,29,30,31,32 ; 25-32 DEC1+01070D1319FSSTBL: DB 01,07,13,19,25,31,37,02 ; SECTOR 01-08 DEC9+080E141A20 DB 08,14,20,26,32,38,03,09 ; 09-16 DED1+0F151B2127 DB 15,21,27,33,39,04,10,16 ; 17-24 DED9+161C222805 DB 22,28,34,40,05,11,17,23 ; 25-32 DEE1+1D2329060C DB 29,35,41,06,12,18,24,30 ; 33-40 DEE9+24 DB 36 ; 41 DEEA+6800 FDDBLK: DW 104 ; SEC/TRK DEEC+04 DB 4 ; BLOCK SHIFT FACTOR DEED+0F DB 15 ; BLOCK MASK DEEE+00 DB 0 ; NULL MASK DEEF+ED01 DW 493 ; DISK SIZE-1 DEF1+FF00 DW 255 ; DIRECTORY MAX-1 DEF3+F0 DB 1111$0000B ; ALLOC 0 DEF4+00 DB 0 ; ALLOC 1 DEF5+4000 DW 64 ; CHECK SIZE DEF7+0100 DW 1 ; TRACK OFFSET DEF9+0001 WINBLK: DW 256 ; SEC/TRK DEFB+05 DB 5 ; BLOCK SHIFT FACTOR DEFC+1F DB 31 ; BLOCK MASK DEFD+00 DB 0 ; NULL MASK DEFE+E707 DW 2023 ; DISK SIZE-1 DF00+FF03 DW 1023 ; DIRECTORY MAX-1 DF02+FF DB 1111$1111B ; ALLOC 0 DF03+00 DB 0000$0000B ; ALLOC 1 DF04+0000 DW 0 ; CHECK SIZE DF06+0200 DW 2 ; TRACK OFFSET DF08+1A00 BLK800 DW 26 ; SECTRK DF0A+03 DB 3 ; BLOCK SHIFT DF0B+07 DB 7 ; BLOCK MASK DF0C+00 DB 0 ; DF0D+F200 DW 242 ; DISK SIZE-1 DF0F+3F00 DW 63 ; DIRECTORY MAX-1 DF11+C0 DB 1100$0000B ; ALLOC 0 DF12+00 DB 0 ; ALLOC 1 DF13+1000 DW 16 ; CHECK SIZE DF15+0200 DW 2 ; TRACK OFFSET DF17+2900 BLK840: DW 41 ; SEC/TRK DF19+04 DB 4 ; BLOCK SHIFT DF1A+0F DB 15 ; BLOCK MASK DF1B+00 DB 0 ; DF1C+BF00 DW 191 ; DISK SIZE-1 DF1E+3F00 DW 63 ; DIRECTORY MAX-1 DF20+80 DB 1000$0000B ; ALLOC 0 DF21+00 DB 0 ; ALLOC 1 DF22+1000 DW 16 ; CHECK SIZE DF24+0200 DW 2 ; TRACK OFFSET ; CP/M MACRO ASSEM 2.0 #025 JD-850M : CBIOS ASCII VERSION 1.0 DF26 DISK01: DS 1 ; IOX R/W DISK NUMBER DF27 00 RWDSK: DB 0 ; R/W DISK PARA. DF28 00 RWTRK: DB 0 ; R/W TRACK PARA. DF29 00 RWSEC: DB 0 ; R/W SECTOR PARA. DF2A 90EA RWDMA: DW DEFBUF ; DMA ADDRESS PARA. ; DF2C 00 RWPARA: DB 0 ; R/W PARA. ; DF2D 00 DB 0 ; TRACK PARA.(HIGH) DF2E 01 WINTRK: DB 1 ; TRACK (0-255) DF2F 00 WINSID: DB 0 ; SIDE (0-3) DF30 01 WINSEC: DB 1 ; SECTOR (1-32) DF31 01 WINLEN: DB 1 ; SECTOR LENGTH (1) DF32 90EA WINDMA: DW DEFBUF ; DEFALT DMA ADRS ; DF34 HLSAVE: DS 2 ; H.L SAVE DF36 00 FIXRW: DB 0 ; FIXED DISK R/W PARA. DF37 00 RCOUNT: DB 0 ; FIXED DISK RETRY COUNT ; DF38 00000000 WINSTB: DB 0,0,0,0 ; WINCHESTER STATUS BUFF DF3C 00 WINFLG: DB 0 ; WINCHESTER INTERRUPT FLAG ; DF3D 00 PFLAG: DB 0 ; CTL-P FLAG (1=PRINT) ; DF3E 00 KBDLEN: DB 0 ; KEY-IN LENGTH DF3F 80E9 KBDBF0: DW KBDBUF ; KEY-IN DATA READ ADRS DF41 80E9 KBDBF1: DW KBDBUF ; KEY-IN DATA WRITE ADRS ; DF43 00 RSCND: DB 0 ; ; DF44 6000 RS0TBL: DW RS0LEN ; PORT #0 MAX LENGTH DF46 A0EE DW RS0BUF ; TOP BUFF ADRS DF48 00EF DW RS0LEN+RS0BUF ; END BUFF ADRS DF4A 0000 DW 0 ; CURRENT LENGTH DF4C A0EE DW RS0BUF ; READ BUFF ADRS DF4E A0EE DW RS0BUF ; WRITE BUFF ADRS DF50 8000 RS1TBL: DW RS1LEN ; PORT #1 MAX LENGTH DF52 00EF DW RS1BUF ; TOP BUFF ADRS DF54 80EF DW RS1LEN+RS1BUF ; END BUFF ADRS DF56 0000 DW 0 ; CURRENT LENGTH DF58 00EF DW RS1BUF ; READ BUFF ADRS DF5A 00EF DW RS1BUF ; WRITE BUFF ADRS DF5C 8000 RS2TBL: DW RS2LEN ; PORT #2 MAX LENGTH DF5E 80EF DW RS2BUF ; TOP BUFF ADRS DF60 00F0 DW RS2LEN+RS2BUF ; END BUFF ADRS DF62 0000 DW 0 ; CURRENT LENGTH DF64 80EF DW RS2BUF ; START BUFF ADRS DF66 80EF DW RS2BUF ; END BUFF ADRS ; E800 ORG 0E800H ; ; E800 ASSBUF: DS 336 ; KEY-ASSIGN BUFF. E950 BASWRK: DS 48 ; BASIC WORK AREA E980 KBDBUF: DS 128 ; KEY-IN BUFF EA00 CURTBL: DS 16 ; ; CP/M MACRO ASSEM 2.0 #026 JD-850M : CBIOS ASCII VERSION 1.0 ;++++++++++++++++++++++++ ;+++ FDD SYSTEM AREA +++ ;++++++++++++++++++++++++ K85SYDISK ; MACRO CALL EA10+ DIRBUF: DS 128 ; DIRECTORY BUFF. EA90+ DEFBUF: DS 256 ; DEFALT R/W DMA ADDRESSS EB90+ CHECK0: DS 64 ; CHECK VECT.0 EBD0+ CHECK1: DS 64 ; .1 EC10+ ALLOC0: DS 64 ; ALLOC VECT.0 EC50+ ALLOC1: DS 64 ; .1 EC90+ ALLOC2: DS 256 ; .2 ; ;++++++++++++++++++++++++ ;+++ EXTEND DISK AREA +++ ;++++++++++++++++++++++++ K85EXDISK ;; MACRO CALL ED90+ CHECK4: DS 32 ; CHECK VECT.4 EDB0+ CHECK5: DS 32 ; .5 EDD0+ CHECK6: DS 32 ; .6 EDF0+ CHECK7: DS 32 ; .7 EE10+ ALLOC4: DS 32 ; ALLOC VECT.4 EE30+ ALLOC5: DS 32 ; .5 EE50+ ALLOC6: DS 32 ; .6 EE70+ ALLOC7: DS 32 ; .7 ; EE90 RS0MOD: DS 1 ; PORT #0 MODE EE91 DS 1 ; COMMAND EE92 RS1MOD: DS 1 ; 1 EE93 DS 1 ; COMMAND EE94 RS2MOD: DS 1 ; 2 EE95 DS 1 ; COMMAND ; ;++++++++++++++++++++++++ ;+++ CP/M DISK TABLE +++ ;++++++++++++++++++++++++ EE96 DISK00: DS 1 ; CP/M DISK NUMBER EE97 CPMDSK: DS 1 ; CP/M DISK PARA. EE98 CPMTRK: DS 1 ; CP/M TRACK PARA. EE99 CPMSEC: DS 1 ; CP/M SECTOR PARA. EE9A CPMDMA: DS 2 ; CP/M DMA PARA. ; EE9C RWFLAG: DS 1 ; R/W FLAG EE9D WTTYPE: DS 1 ; WRITE TYPE EE9E WTFLAG: DS 1 ; WRITE FLAG EE9F LOGSEC: DS 1 ; HIGH & LOW BUFF GET SECTOR ; ;++++++++++++++++++++++++ ;+++ PORT BUFF ++++ ;++++++++++++++++++++++++ EEA0 RS0BUF: DS RS0LEN ; PORT #0 BUFF EF00 RS1BUF: DS RS1LEN ; PORT #1 BUFF EF80 RS2BUF: DS RS2LEN ; PORT #2 BUFF ; F000 FINE: END ; END ADDRESS