TITLE 'COPYFAST 3.5 DISASSEMBLED 26 APR 85 RHP' ; ORG 00100H ; REBOOT EQU 00000H DUMMY EQU 00000H WBTADR EQU 00001H CMDBUF EQU 0005DH CTRLC EQU 003H CR EQU 00DH LF EQU 00AH ; BEGIN: JMP START ; ; THE FOLLOWINW DUMMY ADDRESS LOCATIONS ARE FILLED ; WITH THE ADDRESSES OF THE BIOS JUMP TABLE ; JMP DUMMY ;BIOS ADDRESS OF WARM BOOT ; CONST: JMP DUMMY ;BIOS ADDRESS OF CONST ; CONIN: JMP DUMMY ;BIOS ADDRESS OF CONIN ; CONOUT: JMP DUMMY ;BIOS ADDRESS OF CONOUT ; JMP DUMMY ;BIOS ADDRESS OF LIST ; JMP DUMMY ;BIOS ADDRESS OF PUNCH ; JMP DUMMY ;BIOS ADDRESS OF READER ; HOME: JMP DUMMY ;BIOS ADDRESS OF HOME ; SELDSK: JMP DUMMY ;BIOS ADDRESS OF SELDSK ; SETTRK: JMP DUMMY ;BIOS ADDRESS OF SETTRK ; SETSEC: JMP DUMMY ;BIOS ADDRESS OF SETSEC ; SETDMA: JMP DUMMY ;BIOS ADDRESS OF SETDMA ; READ: JMP DUMMY ;BIOS ADDRESS OF READ ; WRITE: JMP DUMMY ;BIOS ADDRESS OF WRITE ; D012D: DB 002H ; D012E: DB 04DH ; D012F: NOP ; D0130: NOP ; A0131: LXI SP,STACK LXI D,T05A4 CALL A0498 A013A: CALL CONIN CPI CTRLC JZ ABORT ANI 05FH CPI 'A' JC A013A CPI 'F' JZ A0154 JC A0154 JMP A013A ; A0154: STA D053B SUI 'A' STA D069D LDA D053B CALL CONOUT LXI D,T05C0 CALL A0498 A0168: CALL CONIN CPI CTRLC JZ ABORT ANI 05FH CPI 'A' JC A0168 CPI 'F' JZ A0182 JC A0182 JMP A0168 ; A0182: LXI H,D053B CMP M JZ A0168 STA D0548 SUI 'A' STA D069E LDA D0548 CALL CONOUT LXI D,T052F CALL A0498 A019D: CALL CONIN CPI CTRLC JZ ABORT CPI CR JNZ A019D LXI D,T05A1 CALL A0498 CALL A0206 LXI D,T04B7 CALL A0498 ABORT: LXI SP,STACK LDA D069D MOV C,A CALL A04B0 CALL HOME LDA D069E MOV C,A CALL A04B0 CALL HOME LXI D,T057B CALL A0498 CALL CONIN ANI 05FH CPI 'R' JZ A0131 CPI CR JNZ ABORT MVI C,000H CALL A04B0 JMP REBOOT ; A01ED: PUSH PSW RAR RAR RAR RAR CALL A01F6 POP PSW A01F6: ANI 00FH ADI 030H CPI 03AH JC A0201 ADI 007H A0201: MOV C,A CALL CONOUT RET ; A0206: LDA D069D MOV C,A CALL A04B0 CALL HOME LDA D012D CALL A02D9 LDA D069E MOV C,A CALL A04B0 CALL HOME A0220: LDA D069C STA D0699 XRA A STA D069B LXI D,T05DC CALL A0498 LDA D0699 CALL A01ED LDA D069D CALL A02C1 A023C: CALL A0344 JZ A0249 LDA D06A2 ORA A JNZ A023C A0249: LDA D06A2 ORA A JNZ A0271 MVI A,010H STA D06A2 LDA D069B INR A STA D069B CPI 004H JNZ A023C LXI D,T04FF CALL A0498 XRA A STA D069B CALL A0475 JNZ A023C A0271: XRA A STA D069B A0275: LDA D069E CALL A02C1 A027B: CALL A0385 JZ A0288 LDA D06A2 ORA A JNZ A027B A0288: LDA D06A2 ORA A JNZ A02AD LDA D069B INR A STA D069B CPI 004H JNZ A0275 LXI D,T04FF CALL A0498 LDA D012F MOV H,A LDA D069C INR A SUB H STA D0699 A02AD: LDA D012F MOV H,A LDA D0699 ADD H STA D069C LXI H,D012E CMP M RNC JNZ A0220 RET ; A02C1: MOV C,A CALL A04B0 LXI H,013A6H SHLD D0697 MVI A,010H STA D06A2 LDA D012F STA D069A LDA D0699 A02D9: STA D069C LDA D069F MOV C,A LDA D069D CMP C LDA D069C JNZ A02EF MOV C,A LDA D0130 ADD C A02EF: MOV C,A JMP SETTRK ; A02F3: MOV C,L MOV B,H PUSH B CALL SETDMA POP B RET ; A02FB: LXI D,T050E JMP A0304 ; A0301: LXI D,T051E A0304: CALL A0498 LXI D,T04D8 CALL A0498 LDA D069C CALL A01ED LXI D,T04F1 CALL A0498 LDA D06A3 CALL A01ED LXI D,T04CF CALL A0498 LDA D069F ADI 'A' MOV C,A CALL CONOUT XRA A STA D06A2 CALL CONST ORA A JZ A0475 CALL CONIN CPI CTRLC JZ ABORT JMP A0475 ; A0344: CALL CONST ORA A JZ A0353 CALL CONIN CPI CTRLC JZ ABORT A0353: MVI C,000H MVI B,01AH A0357: INR C PUSH B LXI H,T0656 MVI B,000H DAD B MOV C,M CALL A04A6 MVI H,000H DCR C MOV L,C DAD H DAD H DAD H DAD H DAD H DAD H DAD H XCHG LHLD D0697 DAD D CALL A02F3 CALL READ RAR CC A02FB POP B DCR B JNZ A0357 JMP A0475 ; A0385: CALL CONST ORA A JZ A0394 CALL CONIN CPI CTRLC JZ ABORT A0394: LHLD D0697 SHLD D06A0 MVI C,000H MVI B,01AH A039E: PUSH B LXI H,T063D MVI B,000H DAD B MOV C,M CALL A04A6 MVI H,000H DCR C MOV L,C DAD H DAD H DAD H DAD H DAD H DAD H DAD H XCHG LHLD D06A0 DAD D CALL A02F3 MVI C,002H CALL WRITE RAR CC A0301 POP B INR C DCR B JNZ A039E MVI C,000H MVI B,01AH A03CF: INR C PUSH B LXI H,T0656 MVI B,000H DAD B MOV C,M CALL A04A6 MVI H,000H DCR C MOV L,C DAD H DAD H DAD H DAD H DAD H DAD H DAD H XCHG LXI H,A06A6 DAD D CALL A02F3 CALL READ RAR CC A02FB POP B DCR B JNZ A03CF LXI B,00D00H LHLD D0697 LXI D,A06A6 A0403: LDAX D CMP M JNZ A0413 INX H INX D DCX B MOV A,C ORA B JNZ A0403 JMP A0475 ; A0413: PUSH H PUSH D PUSH B LXI D,T05ED CALL A0498 LDA D069C CALL A01ED LXI D,T04F1 CALL A0498 POP H DCX H DAD H MVI A,01AH SUB H CALL A01ED LXI D,T0615 CALL A0498 POP H MOV A,M STA D06A4 PUSH H MOV A,H CALL A01ED POP H MOV A,L CALL A01ED MVI C,02CH CALL CONOUT POP H MOV A,M STA D06A5 PUSH H MOV A,H CALL A01ED POP H MOV A,L CALL A01ED LXI D,T0629 CALL A0498 LDA D06A4 CALL A01ED MVI C,02CH CALL CONOUT LDA D06A5 CALL A01ED XRA A STA D06A2 A0475: LDA D06A2 ORA A RZ LDA D069C INR A LXI H,D012E CMP M RZ CALL A02D9 LXI H,D069A DCR M RZ LXI D,00D00H LHLD D0697 DAD D SHLD D0697 ORI 0FFH RET ; A0498: LDAX D CPI '$' RZ PUSH D MOV C,A CALL CONOUT POP D INX D JMP A0498 ; A04A6: MOV A,C STA D06A3 PUSH B CALL SETSEC POP B RET ; A04B0: MOV A,C STA D069F JMP SELDSK ; T04B7: DB CR,LF,'*** COPY COMPLETE ***$' ; T04CF: DB ', DRIVE $' ; T04D8: DB CR,LF,'+ ERROR ON TRACK (HEX)$' ; T04F1: DB ' SECTOR (HEX)$' ; T04FF: DB CR,LF,'++' ; T0503: DB 'PERMANENT $' ; T050E: DB CR,LF,'+ READ ERROR $' ; T051E: DB CR,LF,'+ WRITE ERROR $' ; T052F: DB CR,LF,'SOURCE ON ' ; D053B: DB 000H DB ': OBJECT ON ' ; D0548: DB 000H DB ':'CR,LF,'TYPE TO CONTINUE,' DB ' OR CONTROL-C TO EXIT:$' ; T057B: DB CR,LF,'TYPE OR "R",' DB ' TO REPEAT COPY:$' ; T05A1: DB CR,LF,'$' ; T05A4: DB CR,LF,'SOURCE DRIVE (A THRU F):$' ; T05C0: DB CR,LF,'OBJECT DRIVE (A THRU F):$' ; T05DC: DB CR,LF,'COPYING TRACK $' ; T05ED: DB CR,LF,'+ MEMORY COMPARE ERROR' DB ' ON TRACK (HEX)$' ; T0615: DB CR,LF'+ MEMORY ADDRESS $' ; T0629: DB ' (OBJ,SRC) DATA $' ; T063D: LXI B,T0503 RLC DAD B DCX B DCR C RRC LXI D,01513H RAL DAD D STAX B INR B MVI B,008H LDAX B INR C MVI C,010H STAX D INR D MVI D,018H T0656: LDAX D LXI B,T0503 RLC DAD B DCX B DCR C RRC LXI D,01513H RAL DAD D STAX B INR B MVI B,008H LDAX B INR C MVI C,010H STAX D INR D MVI D,018H LDAX D ; ; PROGRAM STARTS HERE ; START: LHLD WBTADR MOV B,H LXI D,00D00H LXI H,013A6H START1: DAD D MOV A,H CMP B JZ A06A6 JNC A06A6 LDA D07BC INR A STA D07BC JMP START1 ; ; STACK AREA ; DB ', TO REP' STACK: NOP ; D0697: NOP NOP ; D0699: NOP ; D069A: NOP ; D069B: NOP ; D069C: NOP ; D069D: NOP ; D069E: NOP ; D069F: NOP ; D06A0: NOP NOP ; D06A2: NOP ; D06A3: NOP ; D06A4: DB CR ; D06A5: DB LF ; A06A6: LHLD WBTADR ;GET WARM BOOT BIOS ADDRESS SPHL ;PUT IT ON THE STACK ; LXI H,00003H ;POINT TO CONST BIOS ADDRESS DAD SP ;GET IT SHLD CONST+1 ;STORE IT ; LXI H,00006H ;POINT TO CONIN BIOS ADDR. DAD SP ;GET IT SHLD CONIN+1 ;STORE IT ; LXI H,00009H ;POINT TO CONOUT BIOS ADDR. DAD SP ;GET IT SHLD CONOUT+1 ;STORE IT ; LXI H,00015H ;POINT TO HOME BIOS ADDR. DAD SP ;GET IT SHLD HOME+1 ;STORE IT ; LXI H,00018H ;POINT TO SELDSK BIOS ADDR. DAD SP ;GET IT SHLD SELDSK+1 ;STORE IT ; LXI H,0001BH ;POINT TO SETTRK BIOS ADDR. DAD SP ;GET IT SHLD SETTRK+1 ;STORE IT ; LXI H,0001EH ;POINT TO SETSEC BIOS ADDR. DAD SP ;GET IT SHLD SETSEC+1 ;STORE IT ; LXI H,00021H ;POINT TO SETDMA BIOS ADDR. DAD SP ;GET IT SHLD SETDMA+1 ;STORE IT ; LXI H,00024H ;POINT TO READ DSK BIOS ADDR. DAD SP ;GET IT SHLD READ+1 ;STORE IT ; LXI H,00027H ;POINT TO WRITE DSK BIOS ADDR. DAD SP ;GET IT SHLD WRITE+1 ;STORE IT ; LXI SP,STACK LXI D,T07BD CALL A0498 LHLD D012D LDA CMDBUF ANI 05FH CPI 000H JZ A0772 MOV B,A XRA A STA D0130 MOV A,B CPI 'A' JZ A073D ; CPI 'D' JZ A0744 ; CPI 'F' JZ A074B ; CPI 'L' JZ A0752 ; CPI 'O' JZ A0759 ; CPI 'P' JZ A0760 ; CPI 'S' JZ A0767 ; CPI 'Z' JZ A076E ; LXI D,T0811 CALL A0498 JMP REBOOT ; A073D: MVI H,04DH MVI L,000H JMP A0772 ; A0744: MVI H,04DH MVI L,002H JMP A0772 ; A074B: MVI H,003H MVI L,002H JMP A0772 ; A0752: MVI H,04DH MVI L,04CH JMP A0772 ; A0759: MVI H,002H MVI L,001H JMP A0772 ; A0760: MVI H,04DH MVI L,001H JMP A0772 ; A0767: MVI H,002H MVI L,000H JMP A0772 ; A076E: MVI H,001H MVI L,000H A0772: SHLD D012D LXI D,T0879 CALL A0498 LDA D012D CALL A01ED LXI D,T088F CALL A0498 LDA D012E DCR A CALL A01ED LDA D012F ORA A JZ A07AF DCR A STA D012F LXI H,D07BC CMP M JZ A07B5 JC A07B5 LXI D,T07E4 CALL A0498 LDA D07BC CALL A01ED A07AF: LDA D07BC STA D012F A07B5: LXI H,A0131 SHLD D0101 PCHL ; D07BC: NOP ; T07BD: DB CR,LF,'FAST DISKETTE COPY ' DB 'PROGRAM, VER. 3.5$' ; T07E4: DB CR,LF,'CP/M IS TOO SMALL - ' DB 'BUFFER SPACE REDUCED: $' ; T0811: DB CR,LF,'INVALID PARAMETER ' DB 02EH,02EH DB ' VALID COPYFAST PARAMETERS ARE' DB CR,LF,'ALL, DATA, FIRST, LAST,' DB ' ONE, PASCAL, SYSTEM, ZERO$' ; T0879: DB CR,LF,'COPYING FROM TRACK $' ; T088F: DB ' TO TRACK $' ; END