; ; APMBOOT.ASM ver 3.0 ; (revised 5 Nov 80) ; ; MODIFIED FOR USE ON APPLE W/MMII BY DAVID MORITZ, 2/1/81 ; ;MODEM BOOT PROGRAM by Keith Petersen, W8SDZ. ;Thanks to John Taylor for idea of incorporating ;simple terminal routine. Based on MODEM.ASM V2.0, ;by Ward Christensen with enhancements from MODEM527. ; ;CP/M - CP/M file transfer program (receive-only) ; ;This program is intended for use as a way to ;initially transfer APMODEM.COM or APMODEM.ASM to ;A NEW USER. ;ALL EQUATES, FLAGS AND PORTS ARE SET UP FOR ;DCH MMII: 'ORIGINATE' MODE, 300BAUD. ; ;A simple terminal routine at start of program allows ;user to communicate with a remote system prior to ;receiving a file to make it possible to down-load ;a file without intervention on the part of the host ;system's operator. ; ;COMMANDS: MBOOT FILENAME.FILETYPE ; or MBOOT A:FILENAME.FILETYPE ; or MBOOT B:FILENAME.FILETYPE ; ;The program will operate as a dumb terminal until ;an 'ESC' key is typed (ctrl-[). It then branches ;to the receive routine. The user may also exit ;to CP/M without opening the receive file by typing ;ctrl-E from the terminal. The values for the escape ;and exit keys may be changed in accordance with the ;needs of the user - some keyboards do not have the ;'ESC' key and/or provision for control characters. ;See equates. ; ;HOW TO USE APBOOT.ASM: THE PROGRAM IS SHORT ENOUGH ;TO TYPE IN WITHIN A REASONABLE PERIOD OF TIME. ;ONCE INSTALLED AS A COM FILE, DIAL A REMOTE SYSTEM ;CONTAINING A COPY OF APMODEM.ASM(ANY VERSION) AND ;WHEN THE CARIER IS HEARD TYPE: APMBOOT APMODEM.ASM (CR). ;THIS WILL TURN ON YOUR MMII IN ORIGINATE MODE AND ;ALLOW YOU YOU COMMUNICATE WITH THE REMOTE AS A TERMINAL. THEN TYPE:XMODEM S APMODEM.ASM AND A CR. WHEN THE ;REMOTE IS PROPERLY INITIATED TOSEND, TYPE AN ESC ;AND THE PROGRAM WILL BEGIN TO TRANSFER. THE TRANSFER ;IS 'QUIET' AND TAKES ABOUT 20 MIN (A GUESS) SO THE ;ONLY WAY YOU'LL KNOW THE PROGRAM WORKS IS BY WATCHING ;FOR THE DISK ACCESS LED TO COME ON AS THE BUFFER IS ;DUMPED TO DISK EVERY 16 SECTORS. IF YOU HAVE ANY ;PROBLEMS OR QUESTIONS FEEL FREE TO CONTACT ME.: ; DAVID MORITZ ; 312 384-4762 ; (24HR MODEM) ; ;NOTE: Comments for the source code and tabs have been ;removed to make this file easier to transport from one ;system to another. (KBP) ; NOTE:IF TYPING IN PROG..BEGINHERE: ; FALSE EQU 0 TRUE EQU NOT FALSE ; ; BASE EQU 0 ; ; EXITCHR EQU 05H ;CTL-E TO EXIT TERM MODE TO CP/M ESC EQU 1BH ;ESCAPE TO EXIT TERM MODE TO FILE RCVE ; FASTCLK EQU FALSE ;TRUE FOR 4 MHZ CLOCK ; ; ;IF YOU ARE USING AN EXTERNAL MODEM (NOT S-100 PLUG-IN) ;CHANGE THESE EQUATES FOR YOUR MODEM PORT REQUIREMENTS ; ; ; ; MODCTLP EQU 0E0A6H MODSNDB EQU 2 MODSNDR EQU 2 MODRCVB EQU 1 MODRCVR EQU 1 MODDATP EQU 0E0A7H MODCTL2 EQU 0E0A5H ORIGMOD EQU 8FH ANSWMOD EQU 8AH ; ERRLIM EQU 10 ; SOH EQU 1 EOT EQU 4 ACK EQU 6 NAK EQU 15H CAN EQU 18H LF EQU 10 CR EQU 13 ; BDOS EQU BASE+5 FCB EQU BASE+5CH ; ORG BASE+100H ; LXI H,0 DAD SP SHLD STACK LXI SP,STACK CALL INITADR CALL ILPRT DB 'APMBOOT as of ' DB '2/1/81',CR,LF,0 LDA FCB+1 CPI ' ' JNZ TERMI CALL ILPRT DB '++NO FILE NAME SPECIFIED++',CR,LF,0 JMP EXIT ; TERMI CALL INITMOD LDA MODDATP LDA MODDATP CALL ILPRT DB CR,LF,'TERMINAL MODE',CR,LF DB 'CTL-E exits to CP/M, ESC starts file transfer' DB CR,LF,0 ; TERM CALL STAT JZ TERML CALL KEYIN CPI EXITCHR JZ EXIT CPI ESC JZ RCVFIL STA MODDATP ; ; TERML LDA MODCTLP ; ANI MODRCVB CPI MODRCVR JNZ TERM LDA MODDATP ANI 7FH CALL TYPE JMP TERM ; RCVFIL CALL ERASFIL CALL MAKEFIL CALL ILPRT DB 'FILE OPEN, READY TO RECEIVE',CR,LF,0 ; RCVLP CALL RCVSECT JC RCVEOT CALL WRSECT CALL INCRSNO CALL SENDACK JMP RCVLP ; RCVEOT CALL WRBLOCK CALL SENDACK CALL CLOSFIL CALL ERXIT DB CR,LF,'TRANSFER COMPLETE$' ; RCVSECT XRA A STA ERRCT ; RCVRPT MVI B,10 CALL RECV JC RCVSERR CPI SOH JZ RCVSOH ORA A JZ RCVRPT CPI EOT STC RZ ; RCVSERR MVI B,1 CALL RECV JNC RCVSERR MVI A,NAK CALL SEND LDA ERRCT INR A STA ERRCT CPI ERRLIM JC RCVRPT ; RCVSABT CALL CLOSFIL CALL ERXIT DB '++UNABLE TO RECEIVE BLOCK' DB CR,LF,'++ABORTING++$' ; RCVSOH MVI B,1 CALL RECV JC RCVSERR MOV D,A MVI B,1 CALL RECV JC RCVSERR CMA CMP D JZ RCVDATA JMP RCVSERR ; RCVDATA MOV A,D STA RCVSNO MVI C,0 LXI H,BASE+80H ; RCVCHR MVI B,1 CALL RECV JC RCVSERR MOV M,A INR L JNZ RCVCHR MOV D,C MVI B,1 CALL RECV JC RCVSERR CMP D JNZ RCVSERR LDA RCVSNO MOV B,A LDA SECTNO CMP B JZ RECVACK INR A CMP B JNZ ABORT RET ; RECVACK CALL SENDACK JMP RCVSECT ; SENDACK MVI A,ACK ; SEND PUSH PSW ADD C MOV C,A ; ; SENDW LDA MODCTLP ; ANI MODSNDB CPI MODSNDR JNZ SENDW POP PSW STA MODDATP RET ; ABORT LXI SP,STACK ; ABORTL MVI B,1 CALL RECV JNC ABORTL MVI A,CAN CALL SEND ; ABORTW MVI B,1 CALL RECV JNC ABORTW MVI A,' ' CALL SEND CALL ERXIT DB 'APMBOOT PROGRAM CANCELLED$' ; INCRSNO LDA SECTNO INR A STA SECTNO RET ; ERASFIL LXI D,FCB MVI C,17 CALL BDOS INR A RZ CALL ILPRT DB '++FILE EXISTS, TYPE Y TO ERASE: ',0 CALL KEYIN PUSH PSW CALL TYPE CALL CRLF POP PSW ANI 5FH CPI 'Y' JNZ MXIT LXI D,FCB MVI C,19 JMP BDOS ; MAKEFIL LXI D,FCB MVI C,22 CALL BDOS INR A RNZ CALL ERXIT DB '++ERROR - CAN''T MAKE FILE',CR,LF DB '++DIRECTORY MUST BE FULL$' ; CLOSFIL LXI D,FCB MVI C,16 CALL BDOS INR A RNZ CALL ERXIT DB '++CAN''T CLOSE FILE$' ; WRSECT LHLD SECPTR XCHG LXI H,BASE+80H CALL MOVE128 XCHG SHLD SECPTR LDA SECINBF INR A STA SECINBF CPI 16 RNZ ; WRBLOCK LDA SECINBF ORA A RZ MOV C,A LXI D,DBUF ; DKWRLP PUSH H PUSH D PUSH B MVI C,26 CALL BDOS LXI D,FCB MVI C,21 CALL BDOS POP B POP D POP H ORA A JNZ WRERR LXI H,80H DAD D XCHG DCR C JNZ DKWRLP XRA A STA SECINBF LXI H,DBUF SHLD SECPTR ; RSDMA LXI D,BASE+80H MVI C,26 JMP BDOS ; WRERR CALL RSDMA CALL ILPRT DB '++ERROR WRITING FILE',CR,LF,0 JMP ABORT ; RECV PUSH D ; ; MSEC LXI D,50000 ; ; MWTI LDA MODCTLP ; ANI MODRCVB CPI MODRCVR JZ MCHAR DCR E JNZ MWTI DCR D JNZ MWTI DCR B JNZ MSEC POP D STC RET ; MCHAR LDA MODDATP POP D PUSH PSW ADD C MOV C,A POP PSW ORA A RET ; INITADR LHLD BASE+1 LXI D,3 DAD D SHLD VSTAT+1 DAD D SHLD VKEYIN+1 DAD D SHLD VTYPE+1 RET ; INITMOD EQU $ ; ; ; MVI A,15H STA MODCTLP ; ; LXI H,4000 ; OFFDLY DCR L JNZ OFFDLY DCR H JNZ OFFDLY MVI A,ORIGMOD STA MODCTL2 ; RET ;<--THIS RET MUST BE HERE ; CRLF MVI A,CR CALL TYPE MVI A,LF ; TYPE PUSH PSW PUSH B PUSH D PUSH H MOV C,A VTYPE CALL $-$ POP H POP D POP B POP PSW RET ; STAT PUSH B PUSH D PUSH H VSTAT CALL $-$ POP H POP D POP B ORA A RET ; KEYIN PUSH B PUSH D PUSH H VKEYIN CALL $-$ POP H POP D POP B ANI 7FH RET ; ILPRT XTHL ; ILPLP MOV A,M ORA A JZ ILPRET CALL TYPE INX H JMP ILPLP ; ILPRET XTHL RET ; ERXIT POP D MVI C,9 CALL BDOS ; MXIT CALL ILPRT DB CR,LF,'DON''T FORGET TO DISCONNECT MODEM' DB CR,LF,0 ; EXIT LHLD STACK SPHL RET ; MOVE128 MVI B,128 ; MOVE MOV A,M STAX D INX H INX D DCR B JNZ MOVE RET ; RCVSNO DB 0 SECTNO DB 0 ERRCT DB 0 EOFLG DB 0 SECPTR DW DBUF SECINBF DB 0 DS 60 STACK DS 2 DBUF EQU $ ; END