;ENHANCED FILE TRANSFER PROGRAM FOR 5/8 AND 8/5 DISCS. ;DEBUGGED AND ENHANCED BY ROD HART WA3MEZ ; AUGUST 14, 1980 ; ; FURTHER DEBUGGED AND MODIFIED BY W6BSK: 10 DEC 81 ; ; TO USE, BRING UP THE DESTINATION SYSTEM FIRST; ; THEN USE DDT (OR ANOTHER METHOD) TO CALL THE SOURCE SYSTEM. ; ;THE PROGRAM REQUIRES THAT ONE SYSTEM BE AT SOME LOW LOCATION ;(SUCH AS 20K) AND THE OTHER BE AT A HIGH LOCATION (SUCH AS 48K.) ;BOTH MUST BE UP AT THE SAME TIME. THE PROPER LOADING PROCEDURE ;IS TO COLD BOOT (OR OTHERWISE COME UP ON) THE DESTINATION SYSTEM ;FIRST, THEN USE DDT TO COLD BOOT THE SOURCE SYSTEM.THE SOURCE ;SYSTEM WILL THEREBY BE IN THE BASE PAGE AND THE DESTINATION ;SYSTEM WILL BE CALLED BY THE PROGRAM. ; SYSTEM EQUATES: 0001 = TRUE EQU 1 FFFE = FALSE EQU NOT TRUE 0001 = X5TO8 EQU TRUE ;SET TRUE IF 5" TO 8" TRANSFER. FFFE = X8TO5 EQU FALSE ;SET TRUE IF 8" TO 5" TRANSFER. 001A = VT EQU 1AH ;VIO-C CLEAR SCREEN 0005 = BDOS EQU 5 ; BDOS ENTRY POINT. IF X8TO5 REBDOS EQU 3506H ;DESTINATION ENTRY POINT. ENDIF ;CURRENT VALUE FOR 20K SYSTEM IF X5TO8 C506 = REBDOS EQU 0C506H ;CURRENT VALUE FOR 56K SYSTEM ENDIF ;CHANGE THESE VALUES AS NEEDED. 005C = DEFFCB EQU 5CH ;DEFAULT FILE CONTROL BLOCK. 000F = OPEN EQU 15 ;OPEN THE FILE. 001A = SETBUF EQU 26 ;SET THE BUFFER. 0013 = DELETE EQU 19 ;DELETE THE FILE. 0016 = MAKE EQU 22 ;WRITE TO DIRECTORY. 0014 = READ EQU 20 ;READ THE DISK. 0015 = WRITE EQU 21 ;WRITE THE DISK. 0010 = CLOSE EQU 16 ;CLOSE THE FILE. 0009 = PRINT EQU 9 ;OUTPUT A MESSAGE. 007C = FCBCR EQU DEFFCB+32 ;SOURCE FILE CONTROL BLOCK. 0000 = WBOOT EQU 0 ;WARMBOOT. 0100 ORG 100H 0100 210000 START LXI H,00 0103 39 DAD SP 0104 22A402 SHLD OLDSP 0107 316903 LXI SP,STACK 010A 0620 MVI B,20H ;SET COUNTER AND MOVE 010C 115C00 LXI D,DEFFCB 010F 216002 LXI H,NFCB ;MOVE FILE NAME TO THE NEW CONTROL 0112 1A LOOP1 LDAX D ;BLOCK AT NFCB 0113 77 MOV M,A 0114 23 INX H 0115 13 INX D 0116 05 DCR B 0117 C21201 JNZ LOOP1 011A 115C00 LXI D,DEFFCB ;POINT TO THE DEFAULT FCB 011D 0E0F MVI C,OPEN ;AND USE THIS TO OPEN THE FILE 011F CD0500 CALL BDOS ;TO BE TRANSMITTED. 0122 FEFF CPI 255 0124 C24F01 JNZ OPNOK 0127 CD4F02 CALL ERROR ;BAD FILE OR NONEXISTENT. 012A 46696C6520 DB 'File not present on the source disc.$' 014F 11A602 OPNOK LXI D,MSG1 ;FILE PROPERLY OPENED. 0152 0E09 MVI C,PRINT 0154 CD0500 CALL BDOS 0157 AF XRA A 0158 327C00 STA FCBCR ;PUT A ZERO IN THE FIRST FCB CELLS. 015B 328002 STA NFCB+32 015E 116002 LXI D,NFCB 0161 0E13 MVI C,DELETE ;DELETE THE FILE IF ON DESTINATION 0163 CD06C5 CALL REBDOS ;DISC. 0166 116002 LXI D,NFCB 0169 0E16 MVI C,MAKE ;WRITE A NEW ENTRY INTO THE DIRECTORY OF 016B CD06C5 CALL REBDOS ;THE DESTINATION DISC. 016E F29601 JP OKOPN 0171 CD4F02 CALL ERROR 0174 43616E6E6F DB 'Cannot open the destination file.$' 0196 11BE02 OKOPN LXI D,MSG2 ;READING A SECTOR FROM THE N" DISC. 0199 0E09 MVI C,PRINT 019B CD0500 CALL BDOS 019E CD0E02 CALL READIT ;READ THE SOURCE SECTOR. 01A1 FE00 CPI 0 01A3 CAD201 JZ HERE ;GOOD READ. 01A6 FE01 CPI 1 ;LAST SECTOR? 01A8 CA3C02 JZ DONE ;YES. 01AB CD4F02 CALL ERROR 01AE 5468657265 DB 'There was an error in calling BDOS.$' 01D2 11C002 HERE LXI D,MSG3 ;WRITING A SECTOR TO THE N" DISC. 01D5 0E09 MVI C,PRINT 01D7 CD0500 CALL BDOS 01DA CD2502 CALL WRITIT ;WRITE THE SECTOR TO THE DESTINATION DISC. 01DD FE02 CPI 2 ;GOOD WRITE? 01DF C29601 JNZ OKOPN ;YES, GET THE NEXT. 01E2 CD4F02 CALL ERROR ;NO- 01E5 4469736320 DB 'Disc full; no further transfer possible.$' 020E C5 READIT PUSH B ;PUSH ALL. 020F D5 PUSH D 0210 E5 PUSH H 0211 0E1A MVI C,SETBUF ;SET THE ADDRESS TO THE NORMAL 0213 118000 LXI D,0080H ;FCB AT 0080. 0216 CD0500 CALL BDOS 0219 0E14 MVI C,READ 021B 115C00 LXI D,DEFFCB ;DO A SEQUENTIAL READ TO THE 021E CD0500 CALL BDOS ;DEFAULT BUFFER AT 005C. 0221 E1 POP H 0222 D1 POP D 0223 C1 POP B ;RESTORE THE REGISTERS. 0224 C9 RET 0225 C5 WRITIT PUSH B ;PUSH ALL. 0226 D5 PUSH D 0227 E5 PUSH H 0228 0E1A MVI C,SETBUF ;SET THE ADDRESS TO 022A 118000 LXI D,0080H ;THE STANDARD FCB. 022D CD06C5 CALL REBDOS 0230 0E15 MVI C,WRITE ;WRITE THE BUFFER TO THE DESTINATION 0232 116002 LXI D,NFCB ;DISC. 0235 CD06C5 CALL REBDOS 0238 E1 POP H 0239 D1 POP D 023A C1 POP B ;RESTORE THE REGISTERS. 023B C9 RET 023C 11C202 DONE LXI D,MSG4 ;THE FILE IS BEING CLOSED. 023F 0E09 MVI C,PRINT 0241 CD0500 CALL BDOS 0244 0E10 MVI C,CLOSE ;DO THE ACTUAL CLOSING. 0246 116002 LXI D,NFCB 0249 CD06C5 CALL REBDOS 024C C30000 JMP WBOOT ;NOW GO HOME 024F D1 ERROR POP D 0250 0E09 MVI C,PRINT ;PRINT ERROR ROUTINE. 0252 CD0500 CALL BDOS 0255 118002 LXI D,ERASE ;GET FCB FOR $$$.SUB 0258 0E13 MVI C,DELETE ;AND DELETE IT. 025A CD0500 CALL BDOS 025D C30000 JMP WBOOT 0260 NFCB DS 32 ;NEW FILE CONTROL BLOCK AREA. 0280 0024242420ERASE DB 000H,'$$$ SUB' 028C DS 24 ;ERASE FILE CONTROL BLOCK. 02A4 OLDSP DS 2 02A6 46696C6520MSG1 DB 'File properly opened.' 02BB 0A0D24 DB 0AH,0DH,'$' MSG2 IF X8TO5 DB '@' ENDIF IF X5TO8 02BE 2B DB '+' ENDIF 02BF 24 DB '$' MSG3 IF X5TO8 02C0 2A DB '*' ENDIF IF X8TO5 DB '#' ENDIF 02C1 24 DB '$' 02C2 0D0A546865MSG4 DB 0DH,0AH,'The file is being closed.' 02DD 0A0D24 DB 0AH,0DH,'$' MSG5 IF X8TO5 DB VT,0AH,0DH,'8" to 5" File Transfer Program:' ENDIF IF X5TO8 02E0 1A0A0D3522 DB VT,0AH,0DH,'5" to 8" File Transfer Program:' ENDIF 0302 0A0D24 DB 0AH,0DH,'$' 0369 = STACK EQU $+100 0305 END