home *** CD-ROM | disk | FTP | other *** search
-
- FALSE EQU 0
- TRUE EQU NOT FALSE
- STDCPM EQU TRUE
- ALTCPM EQU FALSE
- IF STDCPM
- BASE EQU 0
- ENDIF
- IF ALTCPM
- BASE EQU 4200H
- ENDIF
- EXITCHR EQU 01H
- ESC EQU 19H
- FASTCLK EQU FALSE
- SIO EQU FALSE
- I8251 EQU FALSE
- IMS6402 EQU FALSE
- INITREQ EQU FALSE
- BINIT EQU FALSE
- BINIT1 EQU 03H
- BAUDRP EQU 333Q
- MODCTLP EQU 335Q
- MODDATP EQU 330Q
- MODSNDB EQU 20H
- MODSNDR EQU 20H
- MODRCVB EQU 01H
- MODRCVR EQU 01H
- 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 'MBOOT as of '
- DB '3/21/81',CR,LF,0
- LDA FCB+1
- CPI ' '
- JNZ TERMI
- CALL ILPRT
- DB 'It would be nice if you told me a file name.',CR,LF,0
- JMP EXIT
- TERMI: CALL INITMOD
- IN MODDATP
- IN MODDATP
- CALL ILPRT
- DB CR,LF,'System now in terminal mode',CR,LF
- DB 'CONTROL A EXITS TO CP/M, CONTROL Y BEGINS FILE TRANSFER.'
- DB CR,LF,0
- TERM: CALL STAT
- JZ TERML
- CALL KEYIN
- CPI EXITCHR
- JZ EXIT
- CPI ESC
- JZ RCVFIL
- OUT MODDATP
- TERML: IN MODCTLP
- ANI MODRCVB
- CPI MODRCVR
- JNZ TERM
- IN 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
- CALL ILPRT
- DB '*',0
- JMP RCVLP
- RCVEOT: CALL WRBLOCK
- CALL ILPRT
- DB CR,LF,0
- CALL SENDACK
- CALL CLOSFIL
- CALL ERXIT
- DB CR,LF,'Transfer Complete... Congratulations!$'
- 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
- CALL ILPRT
- DB CR,LF,' Retrying Sector ',0
- LDA ERRCT
- INR A
- STA ERRCT
- CPI ERRLIM
- JC RCVRPT
- RCVSABT: CALL CLOSFIL
- CALL ERXIT
- DB CR,LF,'Unable to receive block'
- DB CR,LF,'Transfer aborted$'
- 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: IN MODCTLP
- ANI MODSNDB
- CPI MODSNDR
- JNZ SENDW
- POP PSW
- OUT 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 'MBOOT 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 'That file already exists. Type a Y to erase and overwrite. ',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 that file.',CR,LF
- DB 'The Directory must be full.$'
- CLOSFIL: LXI D,FCB
- MVI C,16
- CALL BDOS
- INR A
- RNZ
- CALL ERXIT
- DB 'Sorry, but I can''t close that 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
- IF FASTCLK
- MOV A,B
- ADD A
- MOV B,A
- ENDIF
- MSEC: LXI D,50000
- MWTI: IN MODCTLP
- ANI MODRCVB
- CPI MODRCVR
- JZ MCHAR
- DCR E
- JNZ MWTI
- DCR D
- JNZ MWTI
- DCR B
- JNZ MSEC
- POP D
- STC
- RET
- MCHAR: IN 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 $
- IF INITREQ
- NOP
- NOP
- NOP
- ENDIF
- IF BINIT
- MVI A,BINIT1
- OUT BAUDRP
- ENDIF
- RET
- 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
-