home *** CD-ROM | disk | FTP | other *** search
- TITLE 'XMODEM PATCH FILE FOR TURBODOS'
- ;
- ; TDPAT - patch file for TurboDOS / XMODEM
- ; uses COMM port
- ;
- ; EDITED: 07/14/84 SFK
- ;
- BASE EQU 100H ;start of TPA
- ;
- PORT EQU 0 ;0=modem port, 1=console port
- ;
- ;-------------------------------------------------------------------
- ;
- ; Jump table: The jump table must be in exactly the same sequence
- ; as the one in XMODEM. Note the ORG of 103H - This jump table has
- ; no jump to BEGIN.
- ;
- ORG BASE+3 ;start after JMP BEGIN
- ;
- CONOUT: JMP COUT
- PMINIT: JMP MINIT ;initialize whatever has to be (or do RET)
- PUNINIT:JMP UNINIT ;undo whatever MINIT did (or RET)
- PSENDR: JMP SENDR ;send data byte on stack (POP PSW / OUT)
- PCAROK: JMP CAROK ;test for carrier. RET Z=ok, NZ=no carrier
- PMDIN: JMP MDIN ;receive data byte
- PGETCHR:JMP GETCHR ;must point to a RET
- PRCVRDY:JMP RCVRDY ;check receive ready RET Z=ready
- PSNDRDY:JMP SNDRDY ;check send ready RET Z=ready
- PSPEED: JMP SPEED ;get speed factor in ACC
- PSPARE1:JMP SPARE ;3 jumps for custom routines
- PSPARE2:JMP SPARE
- PSPARE3:JMP SPARE
- ;
- ;-----------------------------------------------------------------------
- ;
- GETCHR: ;no garbage collection done
- SPARE: ;for later use
- MINIT: ; No Init
- UNINIT: ; No Init so no Un-init!
- RET
- ;
- ; SNDRDY - check if ready to send
- ;
- SNDRDY: xra a ;assume always ready
- ret
- ;
- if not port
- COUT: push b
- push d
- push h
- mvi d,1
- jmp go
- endif
- ;
- ; SENDR - send character
- ;
- SENDR: pop psw
- push b
- push d
- push h
- mov e,a
- mvi d,port
- go: mvi c,36
- call 50h
- pop h
- pop d
- pop b
- ret
- ;
- ; RCVRDY - check receive ready
- ; RET with Z = character available.
- ; return error code in A
- ;
- RCVRDY: push b
- push d
- push h
- mvi c,34
- mvi d,port
- call 50h
- pop h
- pop d
- pop b
- ora a
- jnz rdy
- mvi a,0afh
- rdy equ $-1
- ora a
- ret
- ;
- ; MDIN - receive a character (GETCHR is identical)
- ;
- MDIN: push b
- push d
- push h
- mvi c,34
- mvi d,0
- call 50h
- ora a
- jnz nochar
- mvi c,35
- mvi d,port
- call 50h
- nochar:
- pop h
- pop d
- pop b
- ret
- ;
- ; SPEED - This routine returns the speed code.
- ; 0=110, 1=300, 2=450, 3=600, 4=710, 5=1200
- ; Load your speed byte from low memory, or
- ; simply MVI A,n and RET for default speed only
- ;
- ; the following will work correctly for 300 and 1200:
- ;
- SPEED: push b
- push d
- push h
- mvi c,38
- mvi d,port
- call 50h
- lxi h,table
- ani 0fh
- add l
- mov l,a
- mvi a,0
- adc h
- mov h,a
- mov a,m
- pop h
- pop d
- pop b
- ret
- ;
- ; table for baud rates (110,300,600,1200,2400,4800,9600,19200)
- ; invalid entries return 110 baud
- ;
- table: db 0,0,0,0,0,1,3,5,0,0,6,0,7,0,8,9
- ;
- ; CAROK - check for presence of carrier.
- ; RET with Z = carrier on
- ;
- CAROK: xra a
- RET
- END
-