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