home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Oakland CPM Archive
/
oakcpm.iso
/
cpm
/
turbodos
/
xmtd-1.asm
< prev
Wrap
Assembly Source File
|
1984-11-22
|
3KB
|
146 lines
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