home *** CD-ROM | disk | FTP | other *** search
- ;
- ; 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
-