home *** CD-ROM | disk | FTP | other *** search
- ; MBOOT100.A86 - MBOOT for the DEC PC100 Rainbow microcomputer
- ; M. J. Mellinger, St. Louis RCPM 4/10/83
- ;
- FALSE EQU 0
- TRUE EQU NOT FALSE
- ;
- BASE EQU 0
- ;
- EXITCHR EQU 06H ;CTL-F TO EXIT TERM MODE TO CP/M
- ESC EQU 01H ;CTL-A TO EXIT TERM MODE TO FILE RCVE
- ;
- FASTCLK EQU TRUE ; VT180 HAS 4 MHZ CLOCK
- ;
- ;
- ; modem definitions
- modctlp equ 042h
- modctl2 equ 002h
- modsndb equ 4
- modsndr equ 4
- modrcvb equ 1
- modrcvr equ 1
- moddatp equ 040h
- baudrp equ 006h
- ;
- ;
- ;
- ERRLIM EQU 10
- ;
- SOH EQU 1
- EOT EQU 4
- ACK EQU 6
- NAK EQU 15H
- CAN EQU 18H
- LF EQU 10
- CR EQU 13
- ;
- FCB EQU BASE+5CH
- ;
- cseg
- ; ORG BASE+100H
- ;
- cld
- CALL INITADR
- CALL ILPRT
- DB 'MBOOT-Rainbow as of '
- DB '4/10/83',CR,LF,0
- mov al,fcb+1
- cmp al,' '
- JNZ TERMI
- CALL ILPRT
- DB '++NO FILE NAME SPECIFIED++',CR,LF,0
- JMP EXIT
- ;
- TERMI: CALL INITMOD
- IN AL,MODDATP
- IN AL,MODDATP
- CALL ILPRT
- DB CR,LF,'Terminal mode',CR,LF
- DB 'CTL-F exits to CP/M, CTL-A starts file transfer.'
- DB CR,LF,0
- ;
- TERM: CALL STAT
- JZ TERML
- CALL KEYIN
- cmp al,exitchr
- JNZ TERM01
- JMP EXIT
- TERM01:
- cmp al,esc
- jz rcvfil
- OUT MODDATP,AL
- TERML: IN AL,MODCTLP
- AND AL,MODRCVB
- CMP AL,MODRCVR
- JNZ TERM
- IN AL,MODDATP
- AND AL,7FH
- CALL TIPE
- 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:
- Xor Al,al
- mov errct,al
- ;
- RCVRPT: Mov CH,10
- CALL RECV
- JC RCVSERR
- cmp al,soh
- jz rcvsoh
- or al,al
- jz rcvrpt
- cmp al,eot
- STC
- jnz rcvserr
- ret
- ;
- RCVSERR:
- mov CH,1
- CALL RECV
- JNC RCVSERR
- mov al,nak
- CALL SEND
- MOV AL,ERRCT
- INC AL
- MOV ERRCT,AL
- CMP AL,ERRLIM
- JC RCVRPT
- ;
- RCVSABT:
- CALL CLOSFIL
- CALL ERXIT
- DB '++UNABLE TO RECEIVE BLOCK'
- DB CR,LF,'++ABORTING++$'
- ;
- RCVSOH: MOV CH,1
- CALL RECV
- JC RCVSERR
- MOV DH,AL
- MOV CH,1
- CALL RECV
- JC RCVSERR
- NOT AL
- CMP AL,DH
- JZ RCVDATA
- JMP RCVSERR
- ;
- RCVDATA:
- MOV AL,DH
- MOV RCVSNO,AL
- MOV CL,0
- MOV BX,OFFSET BASE+80H
- ;
- RCVCHR: MOV CH,1
- CALL RECV
- JC RCVSERR
- MOV DS: BYTE PTR [BX],AL
- INC BL
- JNZ RCVCHR
- MOV DH,CL
- MOV CH,1
- CALL RECV
- JC RCVSERR
- CMP DH,AL
- JZ RCVCHR01
- JMP RCVSERR
- RCVCHR01:
- MOV CH,RCVSNO
- MOV AL,SECTNO
- CMP CH,AL
- JZ RECVACK
- INC AL
- CMP CH,AL
- JNZ ABORT
- RET
- ;
- RECVACK:
- CALL SENDACK
- JMP RCVSECT
- ;
- SENDACK:
- MOV AL,ACK
- ;
- SEND: PUSH AX
- ADD CL,AL
- SENDW: IN AL,MODCTLP
- AND AL,MODSNDB
- CMP AL,MODSNDR
- JNZ SENDW
- POP AX
- OUT MODDATP,AL
- RET
- ;
- ABORT:
- ;
- ABORTL: MOV CH,1
- CALL RECV
- JNC ABORTL
- MOV AL,CAN
- CALL SEND
- ;
- ABORTW: MOV CH,1
- CALL RECV
- JNC ABORTW
- MOV AL,' '
- CALL SEND
- CALL ERXIT
- DB 'MBOOT PROGRAM CANCELLED$'
- ;
- INCRSNO:
- INC SECTNO
- RET
- ;
- ERASFIL:
- MOV DX,OFFSET FCB
- MOV CL,17
- CALL BDOS
- INC AL
- JNZ ERAS01
- RET
- ERAS01:
- CALL ILPRT
- DB '++FILE EXISTS, TYPE Y TO ERASE:',0
- CALL KEYIN
- PUSH AX
- CALL TIPE
- CALL CRLF
- POP AX
- AND AL,5FH
- CMP AL,'Y'
- JZ ERAS02
- JMP MXIT
- ERAS02:
- MOV DX,OFFSET FCB
- MOV CL,19
- JMP BDOS
- ;
- MAKEFIL:
- MOV DX,OFFSET FCB
- MOV CL,22
- CALL BDOS
- INC AL
- JZ MAKE01
- RET
- MAKE01:
- CALL ERXIT
- DB '++ERROR - CAN''T MAKE FILE',CR,LF
- DB '++DIRECTORY MUST BE FULL$'
- ;
- CLOSFIL:
- MOV DX,OFFSET FCB
- MOV CL,16
- CALL BDOS
- INC AL
- JZ CLOS01
- RET
- CLOS01:
- CALL ERXIT
- DB '++CAN''T CLOSE FILE$'
- ;
- WRSECT: MOV BX,SECPTR
- XCHG BX,DX
- MOV BX,OFFSET 80H
- CALL MOVE128
- XCHG BX,DX
- MOV SECPTR,BX
- MOV AL,SECINBF
- INC AL
- MOV SECINBF,AL
- CMP AL,16
- JZ WRBLOCK
- RET
- ;
- WRBLOCK:
- MOV AL,SECINBF
- OR AL,AL
- JNZ WRBL01
- RET
- WRBL01:
- MOV CL,AL
- MOV DX,OFFSET DBUF
- ;
- DKWRLP: PUSH BX
- PUSH DX
- PUSH CX
- MOV CL,26
- CALL BDOS
- MOV DX,OFFSET FCB
- MOV CL,21
- CALL BDOS
- POP CX
- POP DX
- POP BX
- OR AL,AL
- JNZ WRERR
- MOV BX,OFFSET 80H
- ADD BX,DX
- XCHG BX,DX
- DEC CL
- JNZ DKWRLP
- XOR AL,AL
- MOV SECINBF,AL
- MOV BX,OFFSET DBUF
- MOV SECPTR,BX
- RSDMA:
- MOV DX,OFFSET 80H
- MOV CL,26
- JMP BDOS
- ;
- WRERR: CALL RSDMA
- CALL ILPRT
- DB '++ERROR WRITING FILE',CR,LF,0
- JMP ABORT
- ;
- RECV: PUSH DX
- ;
- IF FASTCLK
- MOV AL,CH
- ADD AL,AL
- MOV CH,AL
- ENDIF
- ;
- MSEC: MOV DX,15000
- ;
- MWTI:
- IN AL,MODCTLP
- AND AL,MODRCVB
- CMP AL,MODRCVR
- JZ MCHAR
- DEC DL
- JNZ MWTI
- DEC DH
- JNZ MWTI
- DEC CH
- JNZ MSEC
- POP DX
- STC
- RET
- ;
- MCHAR: IN AL,MODDATP
- POP DX
- ADD CL,AL
- OR AL,AL
- RET
- ;
- INITADR:
- RET
- ;
- ;
- INITMOD:
- ;
- MOV AL,24
- OUT MODCTLP,AL
- MOV AL,4
- OUT MODCTLP,AL
- MOV AL,68
- OUT MODCTLP,AL
- MOV AL,1
- OUT MODCTLP,AL
- MOV AL,0
- OUT MODCTLP,AL
- MOV AL,3
- OUT MODCTLP,AL
- MOV AL,193
- OUT MODCTLP,AL
- MOV AL,5
- OUT MODCTLP,AL
- MOV AL,234
- OUT MODCTLP,AL
- MOV AL,0
- OUT MODCTLP,AL
- MOV AL,00 ; CLEAR BITS TO SET DTR
- OUT MODCTL2,AL ; OUT TO COMM CONTROL REGISTER
- RET
- ;
- ;
- EXIT: MOV CL,0
- mov dl,0
- ;
- BDOS: PUSH ES ; PRESERVE ES
- INT 224 ; CPM-86 BDOS CALL
- POP ES
- RET
- ;
- CRLF: MOV AL,CR
- CALL TIPE
- MOV AL,LF
- ;
- TIPE: PUSH CX
- PUSH DX
- PUSH BX
- PUSH SI
- AND AL,07FH
- MOV DL,AL
- MOV CL,DCONIO
- CALL BDOS
- POP SI
- POP BX
- POP DX
- POP CX
- RET
- ;KEYBOARD STATUS
- Stat: mov cl,DCONIO
- mov dl,0FEH
- call bdos
- OR AL,AL ;0 => NOT READY
- RET
- ;
- ;KEYBOARD INPUT
- ;
- keyin: mov cl,DCONIO
- mov dl,0ffh
- call bdos
- or al,al
- jz keyin
- ret
- ;
- ILPRT: POP SI
- XCHG BX,SI
- PUSH SI
- ;
- ILPLP: MOV AL,CS: byte ptr [BX]
- OR AL,AL
- JZ ILPRET
- CALL TIPE
- INC BX
- JMP ILPLP
- ;
- ILPRET: INC BX
- POP SI
- XCHG BX,SI
- PUSH SI
- RET
- ;
- ERXIT: POP DX
- PUSH DS
- MOV AX,CS
- MOV DS,AX
- MOV CL,9
- CALL BDOS
- POP DS
- ;
- MXIT: CALL ILPRT
- DB CR,LF,'Don''t forget to disconnect modem'
- DB CR,LF,0
- JMP EXIT
- ;
- MOVE128:
- MOV CH,128
- ;
- MOVE: MOV AL,ds:BYTE PTR [BX]
- XCHG BX,DX
- MOV ds: byte ptr [BX],AL
- XCHG BX,DX
- INC BX
- INC DX
- DEC CH
- JNZ MOVE
- RET
- endcs equ $
- ;
- dseg
- ; org offset endcs
- ORG 100H
- RCVSNO DB 0
- SECTNO DB 0
- ERRCT DB 0
- EOFLG DB 0
- SECPTR DW DBUF
- SECINBF DB 0
- DBUF RB 16*128
- ;
- ;bdos equates
- DCONIO EQU 6
- CONST EQU 11
- END
-