.PAGE
85
,TITLE
'TURB0I)OS OPERATING SYSTEMSERIAL/F'ARALLEL
DRIVER (MuSYSNET/82)"
.SBTTL
'COPYRIGHT(C)
1982y
SOFTWARE 2O00yINC.'
^ y'
; COPYRIGHT
(C)
1982y
SOFTWARE 200OyINC,
;; ALJTHORM RONALI)
E.
RAIKES
; MICHAEL
[I.
BUSCH;
;
UERSION:
06/21/82
;%
,II)ENT
SPI)N82 ;MODULEII)
'';
.INSERT
I)REGIUATEA)RIUER
SYMBOLIC EQUIVALENCES^ y
SIOUEC = 2OH :
SX)
INTERRUPT VECTOR ADDRESS;
SIOAI)R = OOH :
SX)
PORT A DATA REGISTERSIOACR = O1H :
sno
PORT A CONTROL REGISTERSIOBDR = 02H :
tno
PORT B DATA REGISTER,SIOBCR = 03H :
SX)
F'ORT B CONTROL REGISTERi;
iRDA = O
;RECEIUED
DATAAVAILABLE
BIT
'TBE = 2
;TRANSMIT
BUFFER EMPTYBIT
DCD = 3 A)ATA CARRIER DETECT
BIT
CTS = 5
.
;CLEAR TO SEND
BIT
;TIMO = 1OH
;TIMER
O DATA REGISTERTIMI
= 11H;TIMER
1 DATA REGISTERTIM2
= 12H;TIMER
2 DATA REGISTERTIMCTL
= 13H;TIMER
CONTROL REGISTER^ y
TOCMD = 36H
;TIMER
O COMMANDT1CMI) = 76H
;TIMER
1 COMMANDT2CMD = OB6H
;TIMER
2 COMMAND;
.LDC
.I)ATA,#
;L0CATE
IN
DATA AREA ;soIBsz:
:.lAloRrj
64
;SERIAL
O INPUT BUFFERSIZE
SOIBUFU .bjORLl O
;SERIAL.
O INPUT BUFFER ADDRESSSOIPTR:
.WORD O;SERIAL
O INPUT F'OINTERS0OF'TR: .WORD O
;SERIAL
O OUTF'UT POINTERSOICNT:
.WORlí OH3ERIAL
O INPUT COUNTSOIHC13
.BYTE
O;SERIAL
O INPUT WAIT COUNTSOOCHR:
.BYTE
O M3ERIAL O OUTPUT CHARACTERS0ElR:
,BYTE
O;SERIAL
OBAwt
RATE CODE^ y
SOISPH:
;SERIAL-
O INPUT SEMAF'HORE.WORD O ;SEMAPH0RE COUNT
..SOIH:
.WORD.OSOIH
;SEMAF'H0REP/D
HEAD .WORDO.SOIH
;
;SERIAL
O OUTPUT SEMAPHORESOOSPH: .hlORLÍ O M3EMAPHORE COUNT
..SOOFK
.WORD ++SOOH M3EMAPHOREP/D
HEAD .WORD .+SO0H;
;SERIAL
O OUTF'UT SEMAF'HORESOXSPH: .WORI) 1 ;SEMAPH0RE COUNT
..S0XH:
.WORD..SOXH
;SEMAPH0REP/D
HEAD .WORI) .OSOXHa y
S11BSZX.bjORI)
16;SERIAL
1INPUT
BUFFERSIZE
S.lIBLjF:
.WORI) Obd&&ú JV49 +v'vbjjr&· lp 7aÉ^.Lrm j.
tzwruj"
T1jtWl'l~l< S1OF'TRU .WORD O M3ERIAL 1 OUTPUT F'OINTERS1ICNT:
,W0RI) OH3ERIAL
1 INF'UT COUNTS1IbjCT:
.BYTE
O;SERIAL
1 INF'UT WAIT COUNTS1OCHR:
.BYTE
O;SERIAL
1 OUTPUT CHARACTERS1BR:
,BYTE
O;SERIAL
1 BAUD RATE CODE;
;SERIAL
1 INF'UT SEMAPHORES1ISF'H:
.WORD O ;SEMAPHORE COUNT.0S1IH:
.WORD..S1IH
;SEMAPHDRE F'/IJ HEAlí .WORD..S1IH
^ y
;SERIAL
1 OUTPUT SEMAPHORES1OSF'H: .WORD O H3EMAPHORE COUNT
..S10H:
.WORD,.S1OH
;SEMAPH0REP/D
HEAD .I40RII..S1OH
^ y
M3ERIAL 1 OUTPUT SEMAPHORE
S1XSF'H: .ldORI) 1 H3EMAPHORE COUNT
.+S1XH:
.WORI)..S1XH
M3EMAPHOREP/D
HEAD .bjORli..S1XH
;
,LOC
.INIT.#
;LOCATEIN INITIALIZATION
AREA;
SF'INITXLXI
HN3I0ISR
43ET SIC) INTERRUPT SERVICE ADI)R SHLI) SIOUEC;SET SID
INTERRUPT VECTOR ADDRESS L.XI HA3IOPGM 43ET SIC) PROGRAMLIST
LXI
ElySIOAPL·::8!SIOACR
;B=LENGTH/C=C0NTR0L
REGOUTIR WROGRAM
SID
PORT AL-XI HySIOPGM 43ET SIC) PROGRAM
LIST
LXI
EhSIOBPL<8!SIOBCR
;B=LENGTH/C=C0NTROL REGOUTIR ;PRO6RAM
SID
PORT BLHLD SOIBSZ 43ET
SERIAL
O INPUT BUFFERSIZE
CALL ALLOC#
HáLLocATE
PACKET FORSERIAL
BUFFER SHLD SOIBUF :SWE
SERIAL
O INPUT BUFFER AI)IJRESSSHLI) SOIPTR
AIET SERIAL
O INPUT POINTERSHLI) SOOPTR A3ET
SERIAL
O OUTPUT POINTERLHLI)
S1IBSZ
43ETSERIAL
1 INPUT BUFFERSIZE
CALL
ALL0C#
;ALL0CATE
PACKET FORSERIAL
BUFFER SHLI)S1IBUF
K3AUESERIAL
1 INF'UT BUFFER ADDRESSSHLI)
S1IPTR
;SET SERIAL
1INPUT
POINTERSHLIJ S1OPTR
KÍET SERIAL
1 OUTPUT POINTERRET :OONE
;
SIOF'GI'R
.BYTE
18H ;RESET CHANNEL.BYTE
4;SELECT
ldR4.BYTE
44HNRITE
REGISTER 4 CONTROL MORÍ).BYTE
5 M3ELECT HRS.BYTE
OEAHWRITE
REGISTER 5 CONTROL MORD.BYTE
3 H3ELECT hlR3.BYTE
OC1HWRITE
REGISTER 3 CONTROL WORD.BYTE
1 H3ELECT KIRI.BYTE
1OHWRITE
REGISTER 1 CONTROL WORD ^y
SIOAF'L =
+-SI0PGM
:sro
PORT A PROGRAM LENGTH^ y
.BYTE
2 M3ELECT IJR2.BYTE
SIOUECAJRITE
REGISTER 1 CONTROL WORD;
YOBF'L
= +-SIOF'(3M :SX)
F'ORT EI PROGRAM LENGTH.LDC
.F'R0G.#
;L0CATE
IN
PROGRAM AREAa
fER]:
AL::
COMDRUXMOU A?É 43ET FUNCTION NUMBER
m~. p 4~ u t a. r ~~ r ~HCUV S 4. aY bjb.
IJCR A
;FUNCTI0N
NUMBER=1?JRZ SERIN
;IF
SCh CONTINUE OCR A;FUNCTION
NUMBER=2?JZ
SEROUTFIF
SCh CONTINUE OCR A;FUNCTION
NUMBER=3?JZ SERSBR
AF'SCb
CONTINUEOCR A
;FUNCTI0N
NUMBER=4?JZ
SERRBRAF
SCh CONTINUEOCR A
;FUNCTI0N
NUMBER=5?JZ
SERSMCFIF
SCh CONTINUE I)CR A;FUNCTION
NUMBER=6?JZ
SERRMC;IF
SCh CONTINUERET
;ELSEy
DONE^ y
SERST: LDEI) SOICNT
WET SERIAL
O INF'UT BUFFER COUNTLHLlí
SOOPTR 43ETSERIAL
O OUTF'UT F'OINTERMOU
MB
43ET CHANNEL NUMBERORA A ;CHANNEL NUMBER=0
JRZ
..COM
AF
SCh CONTINUELLÍEI)
S1ICNT
WET SERIAL
1 INPUT BUFFER COUNTLHLD S1OPTR
WET SERIAL
1 OUTF'UT POINTER..com
MOU AYÍ)ORA E
;SERIAL
INPUT BUFFER COUNT=O?RZ
;IF
SCh DONEHUI
AÁ)FFH
;ELSEy
SET RETURN C0DE=OFFHMOU
cn
;(3ETSERIAL
INPUT CHARACTERRET :OONE
;
SERIN:
MOUAJ3
43ET CHANNEL NUMBERORA A ;CHANNEL NUMBER=O?
JRNZ
..SIl
AF
N0Ty CONTINUE..SOIÑ
DI
;ELSEy
DISABLE
INTERRUPTS LHLD SOICNT 43ETSERIAL
O INPUT COUNTPfOV
MH
ORA L
;SERIAL
O INPUT C0UNT=O?JRZ
..(dTO
;IF
SCh CONTINUEDCX H ;rlEcREMENT
SERIAL
O INPUT COUNTSHLI) SOICNT :
W'DATE SERIAL
O INPUT COUNTLHLI) SOOPTR 43ET
SERIAL
O 0UTF°UT F'OINTERMOU
MM
43ET CHARACTER FROM BUFFERINX
H ;INCREMENTSERIAL
O OUTPUT POINTERXCH(3 M3ERIAL O OUTPUT POINTER TO DE-REG
LHLI)
SOIBSZ
43ETSERIAL
O INPUT BUFFERSIZE
DCX H AiEcREMENT
INPUT
BUFFERSIZE
LBCI) SOIBUF 43ET
SERIAL
O INPUT BUFFER ADDRESSDAD B ;CALC LAST INPUT BUFFER ADDRESS
I)SBC [I :
WFFER
WRAP-AROUND?JRNC ..NWAO
UF
NOTy CONTINUEMOU EyC 43ET
SERIAL
O INPUT BUFFER ADDRESSMOU
IhB
Í.NbjAW
SI)ED SOOF'TR 4JPI)ATE
SERIAL
O OUTPUT POINTEREI
;ENABLE INTERRUPTSRET :OONE
|.WT(X
LXI
HySOIbjCT 43ETSERIAL
O INPUT WAIT COUNTINR
M ;INCREMENTINPUT
WAIT COUNTLXI
Hñ30IspH
WET SERIAL
O INF'UT SEMAPHORECALL
bjAIT#
WAIT
FOR CONSOLE INF'UTJMPR
.,SOI
:CONTINUE|+S1IÑ
DI
;r|IsABLE
INTERRUPTSLHLI)
S1ICNT
43ETSERIAL
1 INPUT COUNTMOU
MH
ORA L
;SERIAL
1 INF'UT COUNT=O?JRZ
,,HT1
AF
SÓ? CONTINUEDCX H ñjEcREMENT
SERIAL
1 INPUT COUNT""
'"'"""'=7TErr"""'"""": yTurT7T"m
ijl
ij'l3',lhl.
i
á"4 , ' ¿' Ii
a.rt, ,1'L ,MOU
Añí
43ET CHARACTER FROM BUFFERINX
H ;INCREMENTSERIAL
1 OUTPUT POINTERXCH(3
AIERIAL
1 OUTF'UT F'OINTER TO DE-REGLHLI)
S1IBSZ
43ETSERIAL
1 INF'UT BUFFERSIZE
I)CX H ;rlEcREMENT INF'UT BUFFER
SIZE
LBCI)
S1IBUF
;GETSERIAL
1 INF'UT BUFFER ADDRESSI)ÁÍi Ei :
cm-c
LAST INPUT BUFFER ADDRESS I)SBC I) ;BUFFER WRAP-AROUNI)?JRNC +.N(4A1
;IF
NOb
CONTINUEMOU EyC 43ET
SERIAL
1 INF'UT BUFFER ADDRESSMOU
rlyB
..NblAIÁ
SDED S1OF'TR WPIJATESERIAL
1 OUTPUT POINTEREI
;ENABLE INTERRUPTSRET :OONE
,.ldT1:
LXI
HA31IldCT
43ETSERIAL
1 INPUT WAIT COUNTINR M FINCREMENT
INPUT
WAIT COUNTLXI
HyS1ISPH
A3ETSERIAL
1 INPUT SEMAPHORECALL
ldAIT#
ñjAIT
FOR CONSOLEINPUT
JMPR
,.S1I
:CONTINUE;
SEROUK MOU AAB 43ET CHANNEL NUMBER
ORA A ;CHANNEL NUMBER=1?
JRNZ
.oSlO
;IF
SCh CONTINUELXI
FbSOXSF'H 43ETSERIAL
O OUT SEMAPHOREPUSH H :
WWE SERIAL
O OUT SEMAPHORECALL 6JAIT#
WAIT
ON MUTUAL EXCLUSIONLXI
HA30OCHR 43ETSERIAL
O OUTPUT CHARACTERMOU FhC M3AUE OUTPUT CHARACTER
LXI
riySO0F'0L 43ETSERIAL
O OUT POLL ROUTINECALL LNKF'0L# ;CREATE F'OLL ROUTINE CALL SOOF'R ;EXECUTE POLL ROUTINE
LXI
HvSOOSPH 43ETSERIAL
O OUT SEMAPHORECALL
bjAIT#
;rlIsF'ATcH
IF
NECESSARYPOP H 43ET MUTUTAL EXCLUSION SEMAPHORE
JMF'
SIGNAL#
$SI(3NAL F'ROCESS AS READY..SiO:
L-XI HA31XSPH 43ET MUTUAL EXCLUSION SEMAPHOREPUSH H ;SAUE MUTUAL EXCLUSION SEMAPHORE
CALL WAIT#
WAIT
ON MUTUAL EXCLUSIONLXI
HyS1OCHR 43ETSERIAL
1 OUTPUT CHARACTERMOU PhC H3AUE OUTPUT CHARACTER
LXI
IhS1OPOL
W(3ETSERIAL
1 OUT POLL ROUTINECALL
LNKP0L#
;CREATE POLL ROUTINE CALL S1OPR ;EXECUTE POLL ROUTINELXI
FbS1OSPHWET SERIAL
1 OUT SEMAPHORECALL WAIT# :W$3PATCH
IF
NECESSARYPOP H 43ET MUTUTAL EXCLUSION SEMAPHORE
JMP SI(3NAL# :SW(3NAL PROCESS AS READY
& y
S00P0L:
M3ERIAL O OUTPUT F'OLL ROUTINE.(40RI) O A)UCCESSOR
LINK
POINTER.WORD O X'REDECESSOR
LINK
POINTER^ y
SOOPR: MUÍ Ay1OH 43ET RESET EXTERNAL STATUS COMMAND OUT SIOACR ;RESET EXTERNAL STATUS
IN
SI'OACR W(3ET SIC) PORT A STATUSBIT
TBEyA;TRANSMIT
BUFFER EMPTY?RZ
LIF
NOTy DONELXI
HAíOBR;ELSEy
GETSERIAL
O BAUD RATE CODEBIT
6yM;CTS
HANDSHAKING REQUESTED?JRZ +,NCTS
KIF
NOTy CONTINUEBIT
CTSná;ELSEy
CHECK CLEAR TO SEND STATUSRZ
UF
CLEAR TO SEN!) FALSEy DONE,oNCTEA LOA SOOCHR 43ET
SERIAL
O OUTF'UT CHARACTEROUT
SI0AI)R
:OWF'UT
CHARACTERcrigg
tjwK.LjYNW yu¶wjrYTT _t"kjgu "nuuv_j;TYÉ__ _ _LXI
FbSOOSF'H A3ET SERIAL. O OUT SEMAPHOREJMF'
SIGNAL#
R3IGNAL PROCESS AS READY; '
S1OF'OLÁ
AíERIAL
1 OUTPUT F'OL-L ROUTINE,ld0RIi
O H3UCCESSORLINK
POINTER,bjOR1i O
;F'RErlEcEssoR
LINK
POINTER;
S1OF'M MUÍ Ay1OH 43ET RESET EXTERNAL STATUS COMMAND OUT SIOBCR ;RESET EXTERNAL STATUS
IN
SIOBCR 43ET SIC) PORT B STATUSBIT
TBEná;transmit
BUFFER EMPTY?RZ
UF
NOTy DONELXI
HAABR
;ELSEy
GETSERIAL
1 BAUD RATE CODEBIT
6ñ'í
;CTS
HANDSHAKING REQUESTED? JRZ..NCTS
AF
NOTy CONTINUEBIT
CTSN
;ELSEy
CHECK CLEAR TO SEND STATUSRZ
KIF
CLEAR TO SEND FALSEy DONE.+NCTM
LI)A S1OCHR 43ETSERIAL
1 OUTPUT CHARACTEROUT SIOBDR :CWTPUT CHARACTER
LXI
HyS10POL 43ETSERIAL
1 OUT POLL ROUTINECALL
UNLINK#
AJNLINK
POLL ROUTINELXI
HyS10SPH 43ETSERIAL
1 OUT SEMAPHOREJMP SI(3NAL# :
SWNAL
PROCESS AS READY ;SIOISR:
SSPI) INTSF'# :WWE
STACK POINTERLXI
SF'L1NTSTK#;SET
UP AUX STACK POINTER PUSH F'S(ÁJ K3AUE REGISTERSF'USH B
F'USH I)
PUSH H
CALL
..SOl
;CHECK" FORSERIAL
O INPUTCALL
O.S1I
;CHECK" FORSERIAL
1 INPUTPOP H ;RESTORE REGISTERS
POP I)
POP B
POP F'SH
LSPI)
INTSP#
;REST0RE STACK POINTEREI
;ENABLE INTERRUPTSRETI
:OONE,.SO1Ñ
IN
SIOACR 43ETSID
PORT A STATUSBIT
RI)MA
;CHARACTERAUAILABLE
RZ
UF
N0Ty DONEIN
SI0AI)R
43ET SIC) PORT A DATA CHARACTERLXI
HyS0BRWET SERIAL
O BAUD RATE C0I)EBIT
"yj'f
UNHIBIT
INPUT
FLAG SET?RNZ
;IF
SÓ? DONEMOU
cNi
K3ERIAL
O DATA CHARACTER TO C-REGBIT
7yM;SIGN
BIT
ON BAUI) RATE CODE? JRZ'..NADO
;IF
NOTy CONTINUERES 7yC
;ELSEy
STRIP
SIGNBIT
ON CHARACTER CALL SLURES# ;CHECK FOR SLAVE RESETLI)A ATNCHR# 43ET ATTENTION CHARACTER
CMF' C ;CHARACTER=ATTENTION CHARACTER?
JRNZ
..NADO
UF
NOTy CONTINUELHLI) SOIF'TR
;ELSEy
BETSERIAL
O INPUT POINTERsHLIi
SOOF'TR ;RESETSERIAL
O OUTPUT POINTERLXI
FbOSHLI) SOICNT
;SET SERIAL
O INPUT COUNT=0..NA1i(X
l-HLli
SOIBSZ
;GETSERIAL
O INPUT BUFFERSIZE
LI)EI) SOICNT ;GET
SERIAL
O INF'UT COUNTINX
[l FINCREMENTSERIAL
O INPUT COUNTORA A ;CLEAR CARRY FLAG
DSBC I)
;SERIAL
O INPUT BUFFERFULL?
RC
UF
SCh IJONEgiigl'
"aum
llí
JÍJKI mg6tLhtK u XlCl LJl luLlt5glb
~MOU I%C M3TORE
INf'ljT
CHARACTERIN
BUFFERINX
H ;INCREMENT INPUT F'OINTERXCHG
;[|E=INPUT
F'0INTER/HL=BUFFER SIZE
LHLDSOIBSZ
43ETSERIAL
O INF'UT BUFFERSIZE
DCX H ;rlEcREMENT INPUT BUFFER
SIZE
LBCI) SOIBUF 43ET
SERIAL
O INPUT BUFFER AI)I)RESSI)AI) B
4MLC
LAST INF'UT BUFFER AI)I)RESS!)SBC
Ii
:WJFFER WRAP-AROUND?JRNC
..NHAO
UF
NOTy CONTINUEMOU EyC W(3ET
SERIAL
O INF'UT BUFFER ADDRESSHOV
IhB
..NldA(K
SDEI) SOIF'TR 4JPDATESERIAL
O INPUT F'OINTERLXI
rlyS0IbjCT
WET SERIAL
O INPUT WAIT COUNTLXI
HDOISPH
;GETSERIAL
O INF'UT SEMAPHORECALL
..SIGC
;SIGNAL
IF
NECESSARYJMPR
..SOl
:CONTINUE..sin
IN
SIOBCR 43ET SIC) PORT B STATUSBIT
ROMA
;CHARACTERAVAILABLE
RZ
AF
NOTy DONEIN
SIOBDR 43ETSID
PORT B KATA CHARACTERLXI
HyS1BR 43ETSERIAL
1 BAUD RATE CODEBIT
5?MFINHIBIT
INPUT FLAG SET?RNZ
;IF
SCh DONEMOU CyA
K3ERIAL
1 DATA CHARACTER TO C-REGBIT
7ñí
;ATTENTION
DETECTION FLAG SET? JRZ..NAD1
AF
NOb
CONTINUERES
7A
;ELSEy
STRIP
SIGNBIT
ON CHARACTERCALL SLURES# ;CHECK FOR SLAVE RESET LOA ATNCHR# 43ET ATTENTION CHARACTER
CMP C ;CHARACTER=ATTENTION CHARACTER?
JRNZ
..NAI)1
;IF
NOTy CONTINUELHLIJ
S1IPTR
;ELSEy
GETSERIAL
1 INPUT POINTERSHLI) S1OPTR ;RESET
SERIAL
1 OUTPUT POINTERLXI
HA)
SHLI)
S1ICNT
:srr
SERIAL
1 INPUT COUNT=1..NAI)G
LHLI)S1IBSZ
43ETSERIAL
1 INPUT BUFFERSIZE
LIJEI)
S1ICNT
43ETSERIAL
1 INPUT COUNTINX
[i
;INCREMENTSERIAL
1INPUT
COUNTORA A ;CLEAR CARRY FLAG
DSBC D
;SERIAL
1INPUT
BUFFERFULL?
RC :
W
SCh DONESDEI)
S1ICNT
;ELSE?
UPDATESERIAL
1 INPUT COUNTLHLI)
S1IPTR
WET SERIAL
1 INPUT POINTERMOU
l'bC
M3TORE INF'UT CHARACTERIN
BUFFERINX
H ANCREMENT INPUT POINTERXCHG
A)E=INPUT
POINTER/HL=BUFFER SIZE
LHLI)S1IBSZ
W(3ETSERIAL
1 INPUT BUFFERSIZE
IiCX H ;rlEcREMENT INPUT BUFFER
SIZE
LBCIi
S1IBUF
43ETSERIAL
1 INPUT BUFFER ADDRESSIJAI) B
4MLC
LAST INPUT BUFFER ADDRESSIíSBC D ;BUFFER WRAP-AROUND?
JRNC
,.NldA1
;IF
NOTy CONTINUEMOU EyC
WET SERIAL
i
INPUT BUFFER ADDRESSMOU
rIyB
..NWA1:
SI)EI)S1IPTR
AJPDATESERIAL
1INPUT
POINTERLXI
1wS1IldCT
43ETSERIAL
1 INPUT WAIT COUNTLXI
HA31ISPH
43ETSERIAL
1INPUT
SEMAPHORECALL
..SIGC
:SWNAL
IF
NECESSARY JMF'R..SIl
:CONTINUE..SI(3M
LIJAX II ;GETSERIAL
INPUT WAIT COUNTORA A
R3ERIAL
INPUT WAIT C0UNT=O?RZ
AF
SCh DONEOCR A ;[lECREMENT
SERIAL
INF'UT WAIT COUNTL T
SERSBFU MOU AyB 43ET CHANNEL NUMBER
LXI
Hñ3oBR 43ETSERIAL
O BAUD RATE CODEORA A ;CHANNEL NUMBER=O?
JRZ
..COM1
;IF
SCh CONTINUELXI
Hñ31BR;ELSEy
GETSERIAL
1 BAUD RATE CODE..ccmi:
mou FbC :wwe
baud
rate
code
CALL (3ETBTU ;GET BAUD RATE TIMER VALUE
MOU
MB
;GET CHANNEL NUMBERORA A ;CHANNEL NUMBER=O?
MUÍ AyT0CMrl 43ET TIMER O COMMAND
MUÍ C>TIMO 43ET TIMER O DATA REGISTER
JRZ ..CC)M2
;IF
CHANNEL NUMBER=0y CONTINUE MUÍAfT1CMI) ;ELSEy
GET TIMER 1 COMMANDMUÍ
(>TIM1
43ET TIMER 1 DATA REGISTER..C0M2:
OUTTIMCTL
;SELECT
TIMEROUTP E :WJTPUT LSB OF TIMER VALUE
OUTF'
li
:WTPUT
MSB OF TIMER VALUERET :OONE
^ y
GETBTUUMOU
mc
43ET REQUESTED BAUD RATE CODEANI
OFH ;EXTRACT RELEVANTBITS
ADD A
;X2
MOU E9Á
;jjj
E-REGMUÍ IGO #NK"E
IT
DOUBLE LENGTHLXI
FbBRTBL 43ET BAUI) RATE TABLEI)AI) [I K1NI)EX INTO TAÉLE
MOU EÁM 43ET TIMER VALUE
INX
HMOU rlyM
RET :OONE
db y
BRTBLÑ ,l4C)Rlí
3072
:m
BAUD TIMER VALUE .WORI)2048
us
BAUI) TIMER VALUE .ldORI)1396
nio
baui)
timer value
.word
1142
:i:u.s
baud
timer value
.WORD
1024
:iso
BAUD TIMER VALUE .ldORl)"r'
K300 BAUD TIMER VALUE.WORD
256
;6OO BAUD TIMER UALIJE,i4orli
128
:imoo
baud
timer value
.WORI)85
;180O
BAUI) TIMER VALUE .I4ORI)77
;2OO0 BAUD TIMER VALUE .WORK64
;24OO BAUIJ TIMER VALUE .WORI)43
K3600
BAUD TIMER VALUENORI)
32
;48OO BAUD TIMER UALUE .ldC)R1i 21U200
BAUD TIMER VALUE.WORI) 16
H600
BAUD TIMER VALUE.WORD 8
KL9200
BAUD TIMER VALUE^ y
SERRBFU
LXI
Hñ30BR 43ETSERIAL
O BAUD RATEMOU
MB
WET
CHANNEL NUMBERORA A ;CHANNEL NUMBER=0?
JRZ
..COM
UF
SCh CONTINUELXI
HyS1BR;ELSEy
GETSERIAL
1 BAUD RATE+.COPK FÍOU ¢hM 43ET CURRENT BAUD RATE CODE
RET A)ONE
;
SERSMM MUÍ AA)EAH 43ET WRITE REGISTER 5 CONTROL bjORI)
ANI
#82H
K3TRIP RTS/CTS
CONTROLBITS
BIT
7yC;RTS
REQUESTED?JRZ
.,NRTS
SET
1J
AF
SCh SET RTSBIT
..NRTM
BIT
6yCXiTR
REQUESTED? JRZ.oNI)TR
SET
7yA
;IF
SCh SET DTRBIT
-..--,-, ¥$'\ IN ¥'=*~Z-B~1·¥·'·r
"-'
W ,,.
k -Mm .'IQ dMOU
MB
43ET CHANNEL NUMBERORA A ;CHANNEL- NUMBER=O?
JRZ .+CC)M
KIF
SCh CONTINUEMUÍ C?SIOBCR 43ET
'uo
F'ORT E¢ CONTROL REGISTER.+COPN MUÍ
M5
;SELECT
WRITE REGISTER 5, OUTF'
A
OUTP Ií 4JUTF'UT CONTROL ldORti
RET AMINE
' ^ y
serrmu
muí
c>si0acr
:rnn
sic)
port
acontrol
register
MOll AyB 43ET CHANNEL NUMBER
ORA A ;CHANNEL NUMBER=0?
JRZ
..COM
;IF
SCh CONTINUEMUÍ C>SIOBCR 43ET
SID
PORT B CONTROL REGISTER,,,COM:
MUÍ AñLoH 43ET RESET EXTERNAL STATUS COMMANDOUTF' A ;RESET EXTERNAL STATUS
INF'
li
43ETSID
MOIJEM STATUSXRA A ;CLEAR RETURN UECTOR
BIT
cTsñj
:cts
SET?JRZ .+NCTS
;IF
NOTy CONTINUE SET 7YÁ;ELSEy
SET CTSBIT
+óncts:
bit
[|cr|?rl
:ocd set?
RZ
AF
NOb
DONESET
%A
;ELSEy
SET I)CI)BIT
RET :OONE
; .XSYM