ORG 0100H BOOT EQU 0B00H CONOUT EQU 0B0CH HOME EQU 0B18H L0000 EQU 00H L0001 EQU 01H L0003 EQU 03H L0004 EQU 04H L0007 EQU 07H L000A EQU 0AH L000C EQU 0CH L000F EQU 0FH L0010 EQU 10H L0011 EQU 11H L005D EQU 5DH LEECD EQU 0EECDH LFF80 EQU 0FF80H LFFFF EQU 0FFFFH MOVE EQU 0B4BH SECTRAN EQU 0B30H SELDSK EQU 0B1BH SETDMA EQU 0B24H SETSEC EQU 0B21H SETTRK EQU 0B1EH TBUFF EQU 80H VERDK EQU 0D3EH FDSD0 EQU 0D51H FDSD1 EQU 0D74H FDSD2 EQU 0D97H FDSD3 EQU 0DBAH DRVTYP EQU 1100H CIOPB EQU 1103H EXEC EQU 0ECBH RDWRIT EQU 105FH BRK EQU 10AFH DOSEEK EQU 0E93H FDREAD EQU 0E5CH VERMV EQU 1114H LXI SP,HEADERTABLE ;0281H CALL BOOT ;0B00H MVI C,0DH CALL BDOS ;028DH MVI C,9 LXI D,SIGNONMESS ;0225H CALL BDOS ;028DH MVI C,0FH LXI D,FCB ;01ABH CALL BDOS ;028DH CPI 0FFH LXI D,OPENERRM ;01CFH JZ ERREXIT ;01A2H LXI D,TBUFF ;80H CALL DMAREQ ;018FH ;READ HEADER RECORD OF CPM3.SYS INTO TBUFF CALL READ ;0195H LXI H,TBUFF ;80H LXI D,HEADERTABLE ;0281H MVI C,6 ;MOVE HEADER TOP PAGE, LENGTH AND BOOT ENTRY ADDRESS MVHDRLOOP: ;0134 MOV A,M STAX D INX D INX H DCR C JNZ MVHDRLOOP ;0134H ;READ 2ND RECORD, PRINT TEXT FOR SIGNON CALL READ ;0195H MVI C,9 LXI D,TBUFF ;80H ;PRINT LOAD TABLE CALL BDOS ;028DH ;LOAD THE RESIDENT PORTION OF SYSTEM LDA RESLENGTH ;0282H MOV H,A ;THIS IS ALSO THE TOP PAGE OF RESIDENT PORTION LDA HEADERTABLE ;0281H CALL GETRECORDS ;0173H ;NOW LOAD THE BANKED PORTION LDA BANKLENGTH ;0284H ORA A JZ NOBANK ;015FH MOV H,A LDA BANKTOP ;0283H CALL GETRECORDS ;0173H NOBANK: ;015F LXI H,L005D ;5DH MOV A,M CPI '$' ;24H ;SEE IF $ IS ON COMMAND TAIL REQUESTING OPTION JNZ NOOPTION ;016FH ;POINT TO 2ND CHARACTER OF COMMAND TAIL INX H MOV A,M CPI 'B' ;42H ;$B IN COMMAND TAIL MEANS TO BREAK AFTER LOADING FOR SID CZ TOSID ;01A9H NOOPTION: ;016F LXI SP,COLDBOOTADDR ;0285H RET ;H=# OF RECORDS TO LOAD GETRECORDS: ;0173 ORA A ;A=TOP PAGE OF MEMORY MOV D,A MVI E,0 MOV A,H RAL MOV H,A GETSECTORLOOP: ;017A XCHG LXI B,LFF80 ;0FF80H ;SUBTRACT ONE SECTOR FROM DMA ADDRESS DAD B XCHG PUSH D PUSH H CALL DMAREQ ;018FH CALL READ ;0195H POP H POP D DCR H JNZ GETSECTORLOOP ;017AH RET DMAREQ: ;018F MVI C,1AH CALL BDOS ;028DH RET READ: ;0195 MVI C,14H LXI D,FCB ;01ABH CALL BDOS ;028DH ORA A LXI D,READERRM ;01FAH RZ ERREXIT: ;01A2 MVI C,9 CALL BDOS ;028DH DI HLT ;RETURN TO SID VIA RESTART TOSID: ;01A9 RST 7 ;I GUESS THIS IS HERE SO YOU COULD PATCH OUT THE RESTART & RETURN RET FCB: ;01AB DB 0,'CPM3 SYS',0,0,0,0,0 DB 0,0,0,0,0,0,0,0,0,0,0,0,0 DB 0,0,0,0,0,0 OPENERRM: ;01CF DB 0DH,0AH,'CPMLDR ' DB 'error: failed to open CPM3.SYS' DB 0DH,0AH,'$' READERRM: ;01FA DB 0DH,0AH,'CPMLDR ' DB 'error: failed to read CPM3.SYS' DB 0DH,0AH,'$' SIGNONMESS: ;0225 DB 0DH,0AH,0AH,0AH DB 0AH,0AH,0AH,0AH,0AH,0AH,0AH DB 0AH,0AH,0AH,0AH,0AH,0AH,0AH DB 0AH,0AH,0AH,0AH,0AH,0AH,0AH DB 'CP/M V3.0 Loader',0DH,0AH DB 'Copyright (C) 1982, Digital ' DB 'Research',0DH,0AH,'$021182' DB 0,0,0,0 ;DATA FROM HEADER RECORD OF CPM3.SYS (1ST ENTRY IS TOP PAGE OF RES) HEADERTABLE: ;0281 DB 0 RESLENGTH: ;0282 DB 0 BANKTOP: ;0283 DB 0 BANKLENGTH: ;0284 DB 0 COLDBOOTADDR: ;0285 DW L0000 ;0 ;.THIS IS PROBABLY SPACE FOR A SERIAL NUMBER DB 0,0,0,0,0,0 ;THIS IS A MINI VERSION OF CPM THAT ONLY READS ONE FILE BDOS: ;028D XCHG SHLD INFO ;09DFH XCHG MOV A,C CPI 0EH JC L02A5 ;02A5H STA L09E2 ;09E2H XRA A STA L09B7 ;09B7H LDA CURDISK ;09DEH STA L09BE ;09BEH L02A5: ;02A5 MOV A,E STA L09BA ;09BAH LXI H,L0000 ;0 SHLD L0409 ;0409H SHLD L09E1 ;09E1H DAD SP SHLD L0340 ;0340H LXI SP,NOTAB ;0392H LXI H,L094E ;094EH PUSH H MOV A,C CPI '2' ;32H JNC L02CA ;02CAH MOV C,E LXI H,FUNCTABLE ;02DCH JMP L02CF ;02CFH L02CA: ;02CA SBI 64H JC L079B ;079BH L02CF: ;02CF MOV E,A MVI D,0 DAD D DAD D MOV E,M INX H MOV D,M LHLD INFO ;09DFH XCHG PCHL FUNCTABLE: ;02DC DW RETURN ;03E8H DW RETURN ;03E8H DW CHAROUT ;03BBH DW RETURN ;03E8H DW RETURN ;03E8H DW RETURN ;03E8H DW RETURN ;03E8H DW RETURN ;03E8H DW RETURN ;03E8H DW PRINTSTRING ;03DFH DW RETURN ;03E8H DW RETURN ;03E8H DW RETURN ;03E8H DW RESETDISK ;0900H DW SELECTDSK ;0917H DW OPENFILE ;091DH DW RETURN ;03E8H DW RETURN ;03E8H DW RETURN ;03E8H DW RETURN ;03E8H DW READNEXT ;093BH DW RETURN ;03E8H DW RETURN ;03E8H DW RETURN ;03E8H DW RETURN ;03E8H DW GETDISK ;0941H DW SETDMAFUNCT ;0947H DW RETURN ;03E8H DW RETURN ;03E8H DW RETURN ;03E8H DW RETURN ;03E8H DW RETURN ;03E8H DW RETURN ;03E8H DW RETURN ;03E8H DW RETURN ;03E8H DW RETURN ;03E8H DW RETURN ;03E8H DW RETURN ;03E8H DW RETURN ;03E8H DW RETURN ;03E8H DW RETURN ;03E8H DW RETURN ;03E8H DW RETURN ;03E8H DW RETURN ;03E8H DW RETURN ;03E8H DW RETURN ;03E8H DW RETURN ;03E8H DW RETURN ;03E8H DW RETURN ;03E8H DW RETURN ;03E8H L0340: ;0340 DW L0000 ;0 DW 0C7C7H DW 0C7C7H DW 0C7C7H DW 0C7C7H DW 0C7C7H DW 0C7C7H DW 0C7C7H DW 0C7C7H DW 0C7C7H DW 0C7C7H DW 0C7C7H DW 0C7C7H DW 0C7C7H DW 0C7C7H DW 0C7C7H DW 0C7C7H DW 0C7C7H DW 0C7C7H DW 0C7C7H DW 0C7C7H DW 0C7C7H DW 0C7C7H DW 0C7C7H DW 0C7C7H DW 0C7C7H DW 0C7C7H DW 0C7C7H DW 0C7C7H DW 0C7C7H DW 0C7C7H DW 0C7C7H DW 0C7C7H DW 0C7C7H DW 0C7C7H DW 0C7C7H DW 0C7C7H DW 0C7C7H DW 0C7C7H DW 0C7C7H DW 0C7C7H NOTAB: ;0392 LDA COMPCOL ;03EEH ORA A JNZ COMPOUT ;039EH PUSH B CALL CONOUT ;0B0CH POP B COMPOUT: ;039E MOV A,C LXI H,COLPOSITION ;09DAH CPI 7FH RZ INR M CPI ' ' ;20H RNC DCR M MOV A,M ORA A RZ MOV A,C CPI 8 JNZ NOTBACKSP ;03B5H DCR M RET NOTBACKSP: ;03B5 CPI 0AH RNZ MVI M,0 RET CHAROUT: ;03BB MOV A,C CPI 9 JNZ NOTAB ;0392H TABLOOP: ;03C1 MVI C,' ' ;20H CALL NOTAB ;0392H LDA COLPOSITION ;09DAH ANI 7 JNZ TABLOOP ;03C1H RET PRTSTRING: ;03CF LXI H,TERMCHAR ;09DBH LDAX B CMP M RZ INX B PUSH B MOV C,A CALL CHAROUT ;03BBH POP B JMP PRTSTRING ;03CFH PRINTSTRING: ;03DF XCHG MOV C,L MOV B,H JMP PRTSTRING ;03CFH L03E5: ;03E5 STA L0409 ;0409H RETURN: ;03E8 RET L03E9: ;03E9 MVI A,1 JMP L03E5 ;03E5H COMPCOL: ;03EE DB 0 BDOSERRM: ;03EF DB 0DH,0AH,'BDOS ERR: $' SELMSG: ;03FC DB 'Select$' PERMSG: ;0403 DB 'Perm.$' L0409: ;0409 DB 0,0 PERMERROR: ;040B LXI B,BDOSERRM ;03EFH CALL PRTSTRING ;03CFH LXI B,SELMSG ;03FCH JMP PRINTHALT ;0420H L0417: ;0417 LXI B,BDOSERRM ;03EFH CALL PRTSTRING ;03CFH LXI B,PERMSG ;0403H PRINTHALT: ;0420 CALL PRTSTRING ;03CFH DI HLT L0425: ;0425 MOV A,E SUB L MOV E,A MOV A,D SBB H MOV D,A RNC DCR B RET L042E: ;042E MOV A,E ADD L MOV E,A MOV A,D ADC H MOV D,A RNC INR B RET L0437: ;0437 INR C L0438: ;0438 DCR C RZ DAD H ADC A JMP L0438 ;0438H L043F: ;043F LDAX D CMP M RNZ INX H INX D DCR C RZ JMP L043F ;043FH L0449: ;0449 INR C L044A: ;044A DCR C RZ LDAX D MOV M,A INX D INX H JMP L044A ;044AH L0453: ;0453 MOV C,D CALL SELDSK ;0B1BH MOV A,H ORA L RZ MOV E,M INX H MOV D,M INX H INX H INX H SHLD L0990 ;0990H INX H INX H SHLD L0992 ;0992H INX H INX H INX H INX H INX H INX H XCHG SHLD L09B8 ;09B8H LXI H,L0998 ;0998H MVI C,0DH CALL L0449 ;0449H LHLD L0998 ;0998H XCHG LXI H,L09A5 ;09A5H MVI C,11H CALL L0449 ;0449H LHLD L09AA ;09AAH MOV A,H LXI H,L09BD ;09BDH MVI M,0FFH ORA A JZ L0495 ;0495H MVI M,0 L0495: ;0495 STC RET L0497: ;0497 CALL HOME ;0B18H XRA A LHLD L0990 ;0990H MOV M,A INX H MOV M,A LHLD L0992 ;0992H MOV M,A INX H MOV M,A INX H MOV M,A RET L04AA: ;04AA LXI H,L09C3 ;09C3H MOV E,M INX H MOV D,M INX H MOV B,M RET L04B3: ;04B3 CALL L04AA ;04AAH CALL 0B27H ORA A RZ MOV C,A CPI 3 JC L0417 ;0417H MVI C,1 JMP L0417 ;0417H L04C6: ;04C6 LHLD L09E3 ;09E3H MVI C,2 CALL L0626 ;0626H MVI B,0 XCHG LXI H,L09C3 ;09C3H MOV M,E INX H MOV M,D INX H MOV M,B RET L04DA: ;04DA LHLD L0990 ;0990H MOV C,M INX H MOV B,M PUSH B LHLD L0992 ;0992H MOV E,M INX H MOV D,M INX H MOV B,M LHLD L09C3 ;09C3H LDA L09C5 ;09C5H MOV C,A L04F0: ;04F0 MOV A,L SUB E MOV A,H SBB D MOV A,C SBB B PUSH H JNC L0507 ;0507H LHLD L09A5 ;09A5H CALL L0425 ;0425H POP H XTHL DCX H XTHL JMP L04F0 ;04F0H L0507: ;0507 LHLD L09A5 ;09A5H CALL L042E ;042EH POP H MOV A,L SUB E MOV A,H SBB D MOV A,C SBB B JC L051E ;051EH XTHL INX H XTHL PUSH H JMP L0507 ;0507H L051E: ;051E XTHL PUSH H LHLD L09A5 ;09A5H CALL L0425 ;0425H POP H PUSH D PUSH B PUSH H XCHG LHLD L09B2 ;09B2H DAD D MOV B,H MOV C,L SHLD L09CE ;09CEH CALL SETTRK ;0B1EH POP D LHLD L0990 ;0990H MOV M,E INX H MOV M,D POP B POP D LHLD L0992 ;0992H MOV M,E INX H MOV M,D INX H MOV M,B POP B MOV A,C SUB E MOV L,A MOV A,B SBB D MOV H,A CALL L056B ;056BH MOV B,H MOV C,L LHLD L09B8 ;09B8H XCHG CALL SECTRAN ;0B30H MOV C,L MOV B,H SHLD SECTOR ;09D0H CALL SETSEC ;0B21H LHLD DMAADR ;098AH MOV C,L MOV B,H JMP SETDMA ;0B24H L056B: ;056B LDA L09B4 ;09B4H MOV C,A JMP L0626 ;0626H L0572: ;0572 LXI H,L09A7 ;09A7H MOV C,M LDA L09C1 ;09C1H L0579: ;0579 ORA A RAR DCR C JNZ L0579 ;0579H MOV B,A MVI A,8 SUB M MOV C,A LDA L09C0 ;09C0H L0587: ;0587 DCR C JZ L0590 ;0590H ORA A RAL JMP L0587 ;0587H L0590: ;0590 ADD B RET L0592: ;0592 LHLD INFO ;09DFH LXI D,L0010 ;10H DAD D RET L059A: ;059A CALL L0592 ;0592H DAD B LDA L09BD ;09BDH ORA A JZ L05A8 ;05A8H MOV L,M MOV H,B RET L05A8: ;05A8 DAD B MOV A,M INX H MOV H,M MOV L,A RET L05AE: ;05AE CALL L0572 ;0572H STA L09BB ;09BBH MOV C,A MVI B,0 CALL L059A ;059AH SHLD L09C3 ;09C3H MOV A,L ORA H RET L05C0: ;05C0 LDA L09A7 ;09A7H MOV C,A LHLD L09C3 ;09C3H XRA A CALL L0437 ;0437H SHLD L09C3 ;09C3H STA L09C5 ;09C5H SHLD L09C6 ;09C6H LDA L09A8 ;09A8H MOV C,A LDA L09C1 ;09C1H ANA C MOV B,A STA L09B6 ;09B6H LXI H,L09C3 ;09C3H ORA M MOV M,A RET L05E6: ;05E6 LHLD INFO ;09DFH LXI D,L000C ;0CH DAD D RET L05EE: ;05EE LHLD INFO ;09DFH LXI D,L000F ;0FH DAD D RET L05F6: ;05F6 CALL L05EE ;05EEH XCHG LXI H,L0011 ;11H DAD D RET L05FF: ;05FF CALL L05F6 ;05F6H MOV A,M STA L09C1 ;09C1H XCHG MOV A,M STA L09BF ;09BFH CALL L05E6 ;05E6H LDA L09A9 ;09A9H ANA M STA L09C0 ;09C0H RET L0616: ;0616 CALL L05F6 ;05F6H MVI C,1 LDA L09C1 ;09C1H ADD C MOV M,A XCHG LDA L09BF ;09BFH MOV M,A RET L0626: ;0626 INR C L0627: ;0627 DCR C RZ MOV A,H ORA A RAR MOV H,A MOV A,L RAR MOV L,A JMP L0627 ;0627H L0633: ;0633 INR C L0634: ;0634 DCR C RZ DAD H JMP L0634 ;0634H L063A: ;063A LDA CURDISK ;09DEH PUSH B MOV C,A LXI H,L0001 ;1 CALL L0633 ;0633H POP B MOV A,C ORA L MOV L,A MOV A,B ORA H MOV H,A RET L064D: ;064D LDA CURDISK ;09DEH MOV C,A CALL L0626 ;0626H MOV A,L ANI 1 RET L0658: ;0658 LHLD L098C ;098CH LDA L09C9 ;09C9H ADD L MOV L,A RNC INR H RET L0663: ;0663 CALL L05E6 ;05E6H MOV A,M ANI 1FH MOV M,A RET L066B: ;066B MOV A,E SUB L MOV L,A MOV A,D SBB H MOV H,A RET L0672: ;0672 PUSH D LXI D,L000A ;0AH DAD D MOV E,M INX H MOV D,M XCHG POP D RET L067D: ;067D CALL L04C6 ;04C6H LDA L09B5 ;09B5H ORA A JZ L068F ;068FH MVI A,3 CALL L09E8 ;09E8H JMP SELECT ;069BH L068F: ;068F CALL L06A1 ;06A1H SHLD L098C ;098CH CALL L04DA ;04DAH CALL L04B3 ;04B3H SELECT: ;069B LHLD DMAAD1 ;09DCH JMP STOREDMA ;06A7H L06A1: ;06A1 LHLD L099E ;099EH CALL L0672 ;0672H STOREDMA: ;06A7 SHLD DMAADR ;098AH RET L06AB: ;06AB LXI H,L09E3 ;09E3H MOV A,M INX H CMP M RNZ INR A RET L06B4: ;06B4 LXI H,LFFFF ;0FFFFH SHLD L09E3 ;09E3H RET L06BB: ;06BB LHLD L09AC ;09ACH XCHG LHLD L09E3 ;09E3H INX H SHLD L09E3 ;09E3H CALL L066B ;066BH JC L06B4 ;06B4H LDA L09E3 ;09E3H ANI 3 MVI B,5 L06D3: ;06D3 ADD A DCR B JNZ L06D3 ;06D3H STA L09C9 ;09C9H ORA A RNZ PUSH B CALL L067D ;067DH POP B RET L06E3: ;06E3 PUSH B PUSH PSW LDA L09A9 ;09A9H CMA MOV B,A MOV A,C ANA B MOV C,A POP PSW ANA B SUB C ANI 1FH POP B RET L06F4: ;06F4 CALL L05F6 ;05F6H MVI C,10H MOV B,C INR C PUSH B L06FC: ;06FC POP B DCR C XRA A L06FF: ;06FF DCX H DCR B CMP M JNZ L0709 ;0709H DCR C JNZ L06FF ;06FFH L0709: ;0709 MOV A,C STA L09BB ;09BBH LDA L09BD ;09BDH ORA A MOV A,B JNZ L0716 ;0716H RAR L0716: ;0716 PUSH B PUSH H MOV L,A MVI H,0 LDA L09A7 ;09A7H MOV D,A MVI A,7 SUB D MOV C,A CALL L0626 ;0626H MOV B,L LDA L09A9 ;09A9H CMP B POP H JC L06FC ;06FCH CALL L05E6 ;05E6H MOV C,M CMA ANI 1FH ANA C ORA B POP B RET L073A: ;073A LHLD INFO ;09DFH SHLD L09E5 ;09E5H MOV A,C STA L09E7 ;09E7H CALL L06B4 ;06B4H CALL L0497 ;0497H L074A: ;074A MVI C,0 CALL L06BB ;06BBH CALL L06AB ;06ABH JZ L079B ;079BH LHLD L09E5 ;09E5H XCHG CALL L0658 ;0658H LDA L09E7 ;09E7H MOV C,A MVI B,0 MOV A,M CPI 0E5H JZ L074A ;074AH L0768: ;0768 MOV A,C ORA A JZ L0794 ;0794H MOV A,B CPI 0DH JZ L078D ;078DH CPI 0CH JZ L0782 ;0782H LDAX D SUB M ANI 7FH JNZ L074A ;074AH JMP L078D ;078DH L0782: ;0782 LDAX D PUSH B MOV C,M CALL L06E3 ;06E3H POP B ORA A JNZ L074A ;074AH L078D: ;078D INX D INX H INR B DCR C JMP L0768 ;0768H L0794: ;0794 XRA A STA L0409 ;0409H MOV B,A INR B RET L079B: ;079B MVI A,0FFH MOV B,A INR B JMP L03E5 ;03E5H L07A2: ;07A2 MVI C,0FH CALL L073A ;073AH RZ L07A8: ;07A8 CALL L05E6 ;05E6H MOV A,M PUSH PSW CALL L0658 ;0658H XCHG LHLD INFO ;09DFH MVI C,' ' ;20H CALL L0449 ;0449H CALL L06F4 ;06F4H MOV C,A POP PSW MOV M,A L07BF: ;07BF MVI B,0 XCHG LXI H,L0003 ;3 DAD D LDAX D SUB C JZ L07D8 ;07D8H MOV A,B JNC L07D2 ;07D2H MVI A,80H MOV B,M L07D2: ;07D2 MOV M,A MOV A,B STA L09BC ;09BCH RET L07D8: ;07D8 STA L09BC ;09BCH MOV A,M ORA A RNZ LDA L09BB ;09BBH ORA A RZ LDA L09E2 ;09E2H CPI 0FH RZ MVI M,80H RET L07EC: ;07EC PUSH H LDA L09BC ;09BCH ORA A JZ L07FD ;07FDH LXI D,L0003 ;3 DAD D MOV M,A XRA A STA L09BC ;09BCH L07FD: ;07FD POP H RET L07FF: ;07FF CALL L05E6 ;05E6H MOV A,M MOV C,A INR C CALL L06E3 ;06E3H JZ L0821 ;0821H MVI A,1FH ANA C MOV M,A MVI C,0FH CALL L073A ;073AH CALL L07A8 ;07A8H L0817: ;0817 CALL L05FF ;05FFH XRA A STA L09C1 ;09C1H JMP L03E5 ;03E5H L0821: ;0821 INR M CALL L06F4 ;06F4H MOV C,A CMP M JNC L082E ;082EH DCR M JMP L03E9 ;03E9H L082E: ;082E CALL L07EC ;07ECH CALL L07BF ;07BFH JMP L0817 ;0817H SEQDISKREAD: ;0837 CALL L05FF ;05FFH LDA L09C1 ;09C1H LXI H,L09BF ;09BFH CMP M JC L0853 ;0853H CPI 80H JNZ L03E9 ;03E9H CALL L07FF ;07FFH LDA L0409 ;0409H ORA A JNZ L03E9 ;03E9H L0853: ;0853 CALL L05AE ;05AEH JZ L03E9 ;03E9H CALL L05C0 ;05C0H LDA L09B5 ;09B5H ORA A JNZ L09D2 ;09D2H CALL SELECT ;069BH CALL L04DA ;04DAH CALL L04B3 ;04B3H JMP L0616 ;0616H L086F: ;086F LDA CURDISK ;09DEH INR A JZ PERMERROR ;040BH DCR A LXI H,L09C2 ;09C2H CMP M RZ MOV M,A MOV D,A LHLD DISKLOG ;0988H CALL L064D ;064DH MOV E,A PUSH D CALL L0453 ;0453H POP H JNC PERMERROR ;040BH DCR L RZ LHLD DISKLOG ;0988H MOV C,L MOV B,H CALL L063A ;063AH SHLD DISKLOG ;0988H RET L089B: ;089B LDA L09BA ;09BAH STA CURDISK ;09DEH RET L08A2: ;08A2 XRA A STA L09C8 ;09C8H JMP L08D2 ;08D2H RESELECT: ;08A9 MVI A,80H MOV B,A DCR A MOV C,A LHLD INFO ;09DFH LXI D,L0007 ;7 XCHG DAD D MOV A,M ANA B MOV A,M ANA C MOV M,A INX H MOV A,M ANA B STA L09C8 ;09C8H MOV A,M ANA C MOV M,A CALL L0663 ;0663H CALL L05EE ;05EEH MOV A,M ANA B JZ L08D2 ;08D2H MOV A,M ANA C MOV M,B L08D2: ;08D2 STA L09BC ;09BCH LXI H,L0000 ;0 SHLD L09CA ;09CAH MVI A,0FFH STA L09E1 ;09E1H LHLD INFO ;09DFH MOV A,M ANI 1FH DCR A STA L09BA ;09BAH CPI 0FFH JZ L08F6 ;08F6H MOV A,M STA L09CA ;09CAH CALL L089B ;089BH L08F6: ;08F6 CALL L086F ;086FH MVI A,0 LHLD INFO ;09DFH MOV M,A RET RESETDISK: ;0900 LXI H,L0000 ;0 SHLD DISKLOG ;0988H XRA A STA CURDISK ;09DEH DCR A STA L09C2 ;09C2H LXI H,TBUFF ;80H SHLD DMAAD1 ;09DCH JMP SELECT ;069BH SELECTDSK: ;0917 CALL L089B ;089BH JMP L086F ;086FH OPENFILE: ;091D CALL L08A2 ;08A2H CALL L07A2 ;07A2H CALL L0927 ;0927H RET L0927: ;0927 CALL L06AB ;06ABH RZ CALL L05F6 ;05F6H MOV A,M INR A JNZ L0937 ;0937H DCX D DCX D LDAX D MOV M,A L0937: ;0937 POP H MVI C,'@' ;40H RET READNEXT: ;093B CALL RESELECT ;08A9H JMP SEQDISKREAD ;0837H GETDISK: ;0941 LDA CURDISK ;09DEH JMP L03E5 ;03E5H SETDMAFUNCT: ;0947 XCHG SHLD DMAAD1 ;09DCH JMP SELECT ;069BH L094E: ;094E LDA L09E2 ;09E2H CPI 0FH JC L097E ;097EH LDA L09BE ;09BEH STA CURDISK ;09DEH LDA L09E1 ;09E1H ORA A JZ L097E ;097EH LHLD INFO ;09DFH MVI M,0 LDA L09CA ;09CAH ORA A JZ L0970 ;0970H MOV M,A L0970: ;0970 INX H LDA L09C8 ;09C8H ORA M MOV M,A CALL L05EE ;05EEH LDA L09BC ;09BCH ORA M MOV M,A L097E: ;097E LHLD L0340 ;0340H SPHL LHLD L0409 ;0409H MOV A,L MOV B,H RET DISKLOG: ;0988 DB 0,0 DMAADR: ;098A DB 0,0 L098C: ;098C DB 0,0,0,0 L0990: ;0990 DB 0,0 L0992: ;0992 DB 0,0,0 DB 0,0,0 L0998: ;0998 DB 0,0,0,0,0,0 L099E: ;099E DB 0,0 L09A0: ;09A0 DB 0,0 DB 0,0,0 L09A5: ;09A5 DB 0,0 L09A7: ;09A7 DB 0 L09A8: ;09A8 DB 0 L09A9: ;09A9 DB 0 L09AA: ;09AA DB 0,0 L09AC: ;09AC DB 0,0,0 DB 0,0,0 L09B2: ;09B2 DB 0,0 L09B4: ;09B4 DB 0 L09B5: ;09B5 DB 0 L09B6: ;09B6 DB 0 L09B7: ;09B7 DB 0 L09B8: ;09B8 DB 0,0 L09BA: ;09BA DB 0 L09BB: ;09BB DB 0 L09BC: ;09BC DB 0 L09BD: ;09BD DB 0 L09BE: ;09BE DB 0 L09BF: ;09BF DB 0 L09C0: ;09C0 DB 0 L09C1: ;09C1 DB 0 L09C2: ;09C2 RST 7 L09C3: ;09C3 DB 0,0 L09C5: ;09C5 DB 0 L09C6: ;09C6 DB 0,0 L09C8: ;09C8 DB 0 L09C9: ;09C9 DB 0 L09CA: ;09CA DB 0 L09CB: ;09CB DB 0 L09CC: ;09CC DB 0,0 L09CE: ;09CE DB 0,0 SECTOR: ;09D0 DB 0,0 L09D2: ;09D2 DB '>' LXI B,LEECD ;0EECDH DAD B JMP L0616 ;0616H COLPOSITION: ;09DA NOP TERMCHAR: ;09DB DB '$' DMAAD1: ;09DC DB 80H DB 0 CURDISK: ;09DE DB 0 INFO: ;09DF DB 0,0 L09E1: ;09E1 DB 0 L09E2: ;09E2 DB 0 L09E3: ;09E3 DB 0,0 L09E5: ;09E5 DB 0,0 L09E7: ;09E7 DB 0 L09E8: ;09E8 DB '*' SBB M DAD B JMP L09F1 ;09F1H LHLD L09A0 ;09A0H L09F1: ;09F1 PUSH PSW CALL L0A54 ;0A54H LDA L09C3 ;09C3H MOV E,A ANA B STA L09CB ;09CBH MOV A,E ANA C STA L09C3 ;09C3H SHLD L09CC ;09CCH CALL L0672 ;0672H SHLD DMAADR ;098AH CALL L0A5B ;0A5BH POP PSW PUSH PSW CPI 4 JNC L0A1C ;0A1CH CALL L043F ;043FH JZ L0A2C ;0A2CH XRA A L0A1C: ;0A1C CALL L0A64 ;0A64H MVI A,2 CALL L0A6C ;0A6CH CALL L0A5B ;0A5BH CALL L0449 ;0449H MVI M,0 L0A2C: ;0A2C LDA L09CB ;09CBH INR A LXI D,TBUFF ;80H LXI H,LFF80 ;0FF80H L0A36: ;0A36 DAD D DCR A JNZ L0A36 ;0A36H XCHG LHLD DMAADR ;098AH DAD D POP PSW CPI 3 JNZ MOVSECTOR ;0A4AH SHLD L098C ;098CH RET MOVSECTOR: ;0A4A XCHG LHLD DMAAD1 ;09DCH LXI B,TBUFF ;80H JMP MOVE ;0B4BH L0A54: ;0A54 LDA L09B5 ;09B5H MOV B,A CMA MOV C,A RET L0A5B: ;0A5B LHLD L09CC ;09CCH LXI D,L09C2 ;09C2H MVI C,4 RET L0A64: ;0A64 LXI D,L0004 ;4 LHLD L09CC ;09CCH DAD D RET L0A6C: ;0A6C PUSH PSW CALL L04DA ;04DAH POP PSW DCR A CP L04B3 ;04B3H CALL L0A64 ;0A64H INX H INX H LXI D,L09CE ;09CEH MVI C,4 JMP L0449 ;0449H DB 0,0,0,0,0,0,0,0,0,0,0,0,0 DB 0,0,0,0,0,0,0,0,0,0,0,0,0 DB 0,0,0,0,0,0,0,0,0,0,0,0,0 DB 0,0,0,0,0,0,0,0,0,0,0,0,0 DB 0,0,0,0,0,0,0,0,0,0,0,0,0 DB 0,0,0,0,0,0,0,0,0,0,0,0,0 DB 0,0,0,0,0,0,0,0,0,0,0,0,0 DB 0,0,0,0,0,0,0,0,0,0,0,0,0 DB 0,0,0,0,0,0,0,0,0,0,0,0,0 DB 0,0,0,0,0,0,0,0,0 BOOT: ;0B00 END 0,0,0,0,0,0,0,0,