|
|
|
@ -39,6 +39,13 @@ SIO1_VEC .EQU VEC(INT_SIO1) |
|
|
|
; |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
#IF (SIO0MODE == SIOMODE_STD) |
|
|
|
SIO0A_CMD .EQU SIO0BASE + $01 |
|
|
|
SIO0A_DAT .EQU SIO0BASE + $00 |
|
|
|
SIO0B_CMD .EQU SIO0BASE + $03 |
|
|
|
SIO0B_DAT .EQU SIO0BASE + $02 |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
#IF (SIO0MODE == SIOMODE_RC) |
|
|
|
SIO0A_CMD .EQU SIO0BASE + $00 |
|
|
|
SIO0A_DAT .EQU SIO0BASE + $01 |
|
|
|
@ -60,15 +67,15 @@ SIO0B_CMD .EQU SIO0BASE + $07 |
|
|
|
SIO0B_DAT .EQU SIO0BASE + $05 |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
#IF (SIO0MODE == SIOMODE_EZZ80) |
|
|
|
SIO0A_CMD .EQU SIO0BASE + $01 |
|
|
|
SIO0A_DAT .EQU SIO0BASE + $00 |
|
|
|
SIO0B_CMD .EQU SIO0BASE + $03 |
|
|
|
SIO0B_DAT .EQU SIO0BASE + $02 |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
#IF (SIOCNT >= 2) |
|
|
|
; |
|
|
|
#IF (SIO1MODE == SIOMODE_STD) |
|
|
|
SIO1A_CMD .EQU SIO1BASE + $01 |
|
|
|
SIO1A_DAT .EQU SIO1BASE + $00 |
|
|
|
SIO1B_CMD .EQU SIO1BASE + $03 |
|
|
|
SIO1B_DAT .EQU SIO1BASE + $02 |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
#IF (SIO1MODE == SIOMODE_RC) |
|
|
|
SIO1A_CMD .EQU SIO1BASE + $00 |
|
|
|
SIO1A_DAT .EQU SIO1BASE + $01 |
|
|
|
@ -90,13 +97,6 @@ SIO1B_CMD .EQU SIO1BASE + $07 |
|
|
|
SIO1B_DAT .EQU SIO1BASE + $05 |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
#IF (SIO1MODE == SIOMODE_EZZ80) |
|
|
|
SIO1A_CMD .EQU SIO1BASE + $01 |
|
|
|
SIO1A_DAT .EQU SIO1BASE + $00 |
|
|
|
SIO1B_CMD .EQU SIO1BASE + $03 |
|
|
|
SIO1B_DAT .EQU SIO1BASE + $02 |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
SIO_PREINIT: |
|
|
|
@ -158,44 +158,6 @@ SIO_PREINIT2: |
|
|
|
; |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
; FOR NOW, THIS IS SPECIFICALLY FOR A CTC TO DRIVE AN SIO |
|
|
|
; AT 1:1 USING CTC CHANNELS A & B. IN OTHER WORDS, IT JUST |
|
|
|
; PASSES THE INCOMING TRIGGER OUT AT 1:1. |
|
|
|
; |
|
|
|
#IF (SIOCNT >= 1) |
|
|
|
#IF (SIO0CTCC >= 0) |
|
|
|
LD A,%01010111 ; CTCC CONTROL WORD VALUE |
|
|
|
; |||||||+-- 1=CONTROL WORD FLAG |
|
|
|
; ||||||+--- 1=SOFTWARE RESET |
|
|
|
; |||||+---- 1=TIME CONSTANT FOLLOWS |
|
|
|
; ||||+----- 0=AUTO TRIGGER WHEN TIME CONST LOADED |
|
|
|
; |||+------ 1=RISING EDGE TRIGGER |
|
|
|
; ||+------- 0=PRESCALER OF 16 (NOT USED) |
|
|
|
; |+-------- 1=COUNTER MODE |
|
|
|
; +--------- 0=NO INTERRUPTS |
|
|
|
OUT (CTCA + SIO0CTCC),A ; SETUP CTCC |
|
|
|
LD A,1 ; CTC TIMER CONSTANT = 1 |
|
|
|
OUT (CTCA + SIO0CTCC),A ; SETUP CTC TIMER CONSTANT |
|
|
|
#ENDIF |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
#IF (SIOCNT >= 2) |
|
|
|
#IF (SIO1CTCC >= 0) |
|
|
|
LD A,%01010111 ; CTCC CONTROL WORD VALUE |
|
|
|
; |||||||+-- 1=CONTROL WORD FLAG |
|
|
|
; ||||||+--- 1=SOFTWARE RESET |
|
|
|
; |||||+---- 1=TIME CONSTANT FOLLOWS |
|
|
|
; ||||+----- 0=AUTO TRIGGER WHEN TIME CONST LOADED |
|
|
|
; |||+------ 1=RISING EDGE TRIGGER |
|
|
|
; ||+------- 0=PRESCALER OF 16 (NOT USED) |
|
|
|
; |+-------- 1=COUNTER MODE |
|
|
|
; +--------- 0=NO INTERRUPTS |
|
|
|
OUT (CTCA + SIO1CTCC),A ; SETUP CTCC |
|
|
|
LD A,1 ; CTC TIMER CONSTANT = 1 |
|
|
|
OUT (CTCA + SIO1CTCC),A ; SETUP CTC TIMER CONSTANT |
|
|
|
#ENDIF |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
SIO_PREINIT3: |
|
|
|
XOR A ; SIGNAL SUCCESS |
|
|
|
RET ; AND RETURN |
|
|
|
@ -538,72 +500,195 @@ SIO_INITDEV1: |
|
|
|
CALL PRTHEXWORD |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
LD A,E ; GET CONFIG LSB |
|
|
|
AND $E0 ; CHECK FOR DTR, XON, PARITY=MARK/SPACE |
|
|
|
JR NZ,SIO_INITFAIL ; IF ANY BIT SET, FAIL, NOT SUPPORTED |
|
|
|
PUSH DE ; SAVE TARGET CONFIG |
|
|
|
; |
|
|
|
; WE WANT TO DETERMINE A DIVISOR FOR THE SIO CLOCK |
|
|
|
; THAT RESULTS IN THE DESIRED BAUD RATE. |
|
|
|
; BAUD RATE = SIO CLK / DIVISOR, OR TO SOLVE FOR DIVISOR |
|
|
|
; DIVISOR = SIO CLK / BAUDRATE. |
|
|
|
; TAKE ADVANTAGE OF ENCODED BAUD RATES ALWAYS BEING A FACTOR OF 75. |
|
|
|
; SO, WE CAN USE (SIO OSC / 75) / (BAUDRATE / 75) |
|
|
|
; |
|
|
|
; GET SERIAL CLOCK VALUE AND DIVIDE IT BY 75 |
|
|
|
PUSH IY ; GET CONFIG TABLE ENTRY PTR |
|
|
|
POP HL ; MOVE TO HL |
|
|
|
LD A,9 ; OFFSET TO CLK VALUE |
|
|
|
CALL ADDHLA ; HL IS NOW PTR TO 32 BIT CLK |
|
|
|
CALL LD32 ; LOAD DE:HL W/ RAW CLK VAL |
|
|
|
LD C,75 ; DIVIDE BY 75 LIKE BAUD RATE |
|
|
|
CALL DIV32X8 ; HL NOW HAS (CLK / 75) |
|
|
|
; |
|
|
|
#IF (SIODEBUG) |
|
|
|
PRTS(" CLK75=$") |
|
|
|
CALL PRTHEX32 |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
; SCALE DOWN THE 32 BIT VALUE TO FIT IN 16 BITS KEEPING |
|
|
|
; TRACK OF THE NUMBER OF BITS SHIFTED OUT IN B |
|
|
|
LD B,0 |
|
|
|
SIO_INITDEV1A: |
|
|
|
LD A,D |
|
|
|
OR E |
|
|
|
JR Z,SIO_INITDEV1B |
|
|
|
SRL D |
|
|
|
RR E |
|
|
|
RR H |
|
|
|
RR L |
|
|
|
INC B |
|
|
|
JR SIO_INITDEV1A |
|
|
|
SIO_INITDEV1B: |
|
|
|
; |
|
|
|
#IF (SIODEBUG) |
|
|
|
PRTS(" CLK=$") |
|
|
|
CALL PRTHEX32 |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
POP DE ; RECOVER INCOMING TARGET CFG |
|
|
|
PUSH DE ; RESAVE IT |
|
|
|
PUSH HL ; SAVE CLK VALUE |
|
|
|
PUSH BC ; SAVE BITS SHIFTED |
|
|
|
|
|
|
|
; NOW DECODE THE BAUDRATE, BUT WE USE A CONSTANT OF 1 INSTEAD |
|
|
|
; OF THE NORMAL 75. THIS PRODUCES (BAUDRATE / 75). |
|
|
|
LD A,D ; GET CONFIG MSB |
|
|
|
AND $1F ; ISOLATE ENCODED BAUD RATE |
|
|
|
LD L,A ; PUT IN L |
|
|
|
LD H,0 ; H IS ALWAYS ZERO |
|
|
|
LD DE,1 ; USE 1 FOR ENCODING CONSTANT |
|
|
|
CALL DECODE ; DE:HL := BAUD RATE, ERRORS IGNORED |
|
|
|
; |
|
|
|
#IF (SIODEBUG) |
|
|
|
PRTS(" BAUD75=$") |
|
|
|
CALL PRTHEX32 |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
#IF (SIODEBUG) |
|
|
|
PRTS(" ENC=$") |
|
|
|
; SCALE DOWN CLK BY SAME AMOUNT AS BAUD RATE |
|
|
|
POP BC ; RESTORE BITS TO SHIFT |
|
|
|
LD A,B |
|
|
|
OR A |
|
|
|
JR Z,SIO_INITDEV1D |
|
|
|
SIO_INITDEV1C: |
|
|
|
SRL D |
|
|
|
RR E |
|
|
|
RR H |
|
|
|
RR L |
|
|
|
DJNZ SIO_INITDEV1C |
|
|
|
SIO_INITDEV1D: |
|
|
|
; |
|
|
|
#IF (SIODEBUG) |
|
|
|
PRTS(" BAUD=$") |
|
|
|
CALL PRTHEX32 |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
POP DE ; RECOVER CLOCK |
|
|
|
EX DE,HL ; SWAP CLOCK & BAUD FOR DIV |
|
|
|
; *** HANDLE DIVIDE BY ZERO??? *** |
|
|
|
CALL DIV16 ; BC := HL/DE == TARGET DIVISOR |
|
|
|
; |
|
|
|
#IF (SIODEBUG) |
|
|
|
PRTS(" DIV=$") |
|
|
|
CALL PRTHEXWORD |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
; NOW THAT WE HAVE THE TARGET BAUD RATE DIVISOR, WE WILL |
|
|
|
; ATTEMPT TO IMPLEMENT IT. THE SIO ITSELF CAN APPLY |
|
|
|
; A DIVISOR OF 1, 16, 32, OR 64. IF A CTC CHANNEL IS |
|
|
|
; CONFIGURED FOR THIS SERIAL PORT, THEN WE CAN ADDITIONALLY |
|
|
|
; APPLY A SCALER OF 1-256. |
|
|
|
; |
|
|
|
; WE START BY DETERMINING THE MAXIMUM POSSIBLE SIO |
|
|
|
; SCALING. |
|
|
|
; |
|
|
|
; WARNING: IF THE INCOMING SIO CLOCK IS THE SAME AS THE |
|
|
|
; CPU CLOCK AND WE USE THE 1:1 DIVISOR, THE SIO WILL NOT |
|
|
|
; WORK WELL. |
|
|
|
; |
|
|
|
PUSH BC ; MOVE WORKING DIVISOR VALUE |
|
|
|
POP HL ; ... TO HL |
|
|
|
LD A,L ; LOAD LSB OF DIVISOR |
|
|
|
LD BC,$0004 ; SHIFT 0 BITS / SIO WR4 DIV 1 |
|
|
|
LD A,L ; LOAD LSB OF DIVISOR |
|
|
|
AND %00001111 ; DIV 16 POSSIBLE? |
|
|
|
JR NZ,SIO_INITDEV2 ; NOPE, DONE TRYING |
|
|
|
LD BC,$0444 ; SHIFT 4 BITS / SIO WR4 DIV 16 |
|
|
|
LD A,L ; LOAD LSB OF DIVISOR |
|
|
|
AND %00011111 ; DIV 32 POSSIBLE? |
|
|
|
JR NZ,SIO_INITDEV2 ; NOPE, DONE TRYING |
|
|
|
LD BC,$0584 ; SHIFT 5 BITS / SIO WR4 DIV 32 |
|
|
|
LD A,L ; LOAD LSB OF DIVISOR |
|
|
|
AND %00111111 ; DIV 32 POSSIBLE? |
|
|
|
JR NZ,SIO_INITDEV2 ; NOPE, DONE TRYING |
|
|
|
LD BC,$06C4 ; SHIFT 6 BITS / SIO WR4 DIV 64 |
|
|
|
; |
|
|
|
; NOW APPLY THE SIO DIVISOR TO THE WORKING DIVISOR |
|
|
|
; AND SAVE THE RESULTANT SIO REGISTER VALUE TO APPLY LATER. |
|
|
|
SIO_INITDEV2: |
|
|
|
; SHIFT BITS |
|
|
|
XOR A ; ZERO ACCUM |
|
|
|
OR B ; ZERO BITS TO SHIFT? |
|
|
|
JR Z,SIO_INITDEV4 ; BYPASS SHIFTING IF SO |
|
|
|
SIO_INITDEV3: |
|
|
|
RR H ; SHIFT HL RIGHT BY |
|
|
|
RR L ; ONE BIT |
|
|
|
DJNZ SIO_INITDEV3 ; UNTIL ALL BITS DONE |
|
|
|
SIO_INITDEV4: |
|
|
|
LD B,C ; MOVE SIO WR4 VALUE TO B |
|
|
|
; |
|
|
|
POP DE ; RESTORE DE = SERIAL CONFIG |
|
|
|
; |
|
|
|
#IF (SIODEBUG) |
|
|
|
PUSH BC |
|
|
|
PUSH HL |
|
|
|
POP BC |
|
|
|
PRTS(" CTCDIV=$") |
|
|
|
CALL PRTHEXWORD |
|
|
|
POP BC |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
#IF (CTCENABLE) |
|
|
|
LD A,(IY+13) ; GET CTC CHANNEL |
|
|
|
INC A ; $FF -> 0 |
|
|
|
JR Z,SIO_NOCTC ; NO CTC CHANNEL, BYPASS |
|
|
|
; |
|
|
|
; HL HAS THE DIVISOR THAT WE WANT TO PROGRAM INTO THE |
|
|
|
; DESIGNATED CTC CHANNEL. HOWEVER, THE CTC REGISTER IS ONE |
|
|
|
; BYTE. A VALUE OF 0 MEANS 256. SO WE NEED TO VALIDATE |
|
|
|
; THAT HL IS BETWEEN 1 AND 256. |
|
|
|
DEC HL ; 1-256 -> 0-255 |
|
|
|
LD A,H ; MSB NOW MUST BE ZERO |
|
|
|
OR A ; SET FLAGS |
|
|
|
JR NZ,SIO_INITFAIL ; IF ANY BIT SET, FAIL |
|
|
|
INC HL ; RESTORE HL |
|
|
|
; |
|
|
|
; ALL GOOD. PROGRAM THE CTC CHANNEL |
|
|
|
LD A,(IY+13) ; GET CTC CHANNEL |
|
|
|
ADD A,CTCA ; ADD TO CTC BASE PORT ADR |
|
|
|
#IF (SIODEBUG) |
|
|
|
PRTS(" CTC=$") |
|
|
|
CALL PRTHEXBYTE |
|
|
|
#ENDIF |
|
|
|
LD C,A ; AND PUT IN C FOR I/O |
|
|
|
LD A,%01010111 ; CTCC CONTROL WORD VALUE |
|
|
|
; |||||||+-- 1=CONTROL WORD FLAG |
|
|
|
; ||||||+--- 1=SOFTWARE RESET |
|
|
|
; |||||+---- 1=TIME CONSTANT FOLLOWS |
|
|
|
; ||||+----- 0=AUTO TRIGGER WHEN TIME CONST LOADED |
|
|
|
; |||+------ 1=RISING EDGE TRIGGER |
|
|
|
; ||+------- 0=PRESCALER OF 16 (NOT USED) |
|
|
|
; |+-------- 1=COUNTER MODE |
|
|
|
; +--------- 0=NO INTERRUPTS |
|
|
|
OUT (C),A ; PREP CTC CHANNEL |
|
|
|
OUT (C),L ; SET CTC TIMER CONSTANT |
|
|
|
JR SIO_INITBROK ; AND REJOIN MAIN SETUP |
|
|
|
; |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
PUSH DE ; SAVE REQUESTED CONFIG |
|
|
|
LD L,(IY+9) ; LOAD CLK FREQ |
|
|
|
LD H,(IY+10) ; ... INTO DE:HL |
|
|
|
LD E,(IY+11) ; ... " |
|
|
|
LD D,(IY+12) ; ... " |
|
|
|
LD C,75 ; BAUD RATE ENCODING CONSTANT |
|
|
|
CALL ENCODE ; C = TEST BAUD RATE (ENCODED) = BAUDTST |
|
|
|
POP DE ; GET REQ CONFIG BACK, D = BAUDREQ |
|
|
|
; |
|
|
|
; BIT 4 (DIV 3) OF BAUDREQ AND BAUDTST MUST MATCH! |
|
|
|
LD A,C ; A = BAUDTST |
|
|
|
XOR D ; XOR WITH BAUDREQ |
|
|
|
BIT 4,A ; DO BIT 4 VALS MATCH? |
|
|
|
JR NZ,SIO_INITFAIL ; IF NOT, BAIL OUT |
|
|
|
; |
|
|
|
LD A,C ; BAUDTST TO A |
|
|
|
AND $0F ; ISOLATE DIV 2 BAUD BITS |
|
|
|
LD C,A ; C = BAUDTST |
|
|
|
; |
|
|
|
LD A,D ; MSB W/ BAUD RATE TO A |
|
|
|
AND $0F ; ISOLATE DIV 2 BAUD BITS |
|
|
|
LD L,A ; L = BAUDREQ |
|
|
|
; |
|
|
|
; PUSH AF ; *DEBUG* |
|
|
|
; CALL NEWLINE ; *DEBUG* |
|
|
|
; LD A,L ; *DEBUG* |
|
|
|
; CALL PRTHEXBYTE ; *DEBUG* |
|
|
|
; LD A,C ; *DEBUG* |
|
|
|
; CALL PRTHEXBYTE ; *DEBUG* |
|
|
|
; CALL NEWLINE ; *DEBUG* |
|
|
|
; POP AF ; *DEBUG* |
|
|
|
; |
|
|
|
LD A,C ; A = BAUDTST |
|
|
|
LD B,$04 ; SIO R4 VAL FOR DIV 1 |
|
|
|
CP L ; BAUDTST = BAUDREQ? |
|
|
|
JR Z,SIO_INITBROK ; IF MATCH, WE ARE DONE |
|
|
|
; |
|
|
|
SUB 4 ; DIVIDE BY 16 (NOW DIV 16 TOT) |
|
|
|
JR C,SIO_INITFAIL ; FAIL IF UNDERFLOW |
|
|
|
LD B,$44 ; SIO R4 VAL FOR DIV 16 |
|
|
|
CP L ; BAUDTST = BAUDREQ? |
|
|
|
JR Z,SIO_INITBROK ; IF MATCH, WE ARE DONE |
|
|
|
; |
|
|
|
SUB 1 ; DIVIDE BY 2 (NOW DIV 32 TOT) |
|
|
|
JR C,SIO_INITFAIL ; FAIL IF UNDERFLOW |
|
|
|
LD B,$84 ; SIO R4 VAL FOR DIV 32 |
|
|
|
CP L ; BAUDTST = BAUDREQ? |
|
|
|
JR Z,SIO_INITBROK ; IF MATCH, WE ARE DONE |
|
|
|
; |
|
|
|
SUB 1 ; DIVIDE BY 2 (NOW DIV 64 TOT) |
|
|
|
JR C,SIO_INITFAIL ; FAIL IF UNDERFLOW |
|
|
|
LD B,$C4 ; SIO R4 VAL FOR DIV 64 |
|
|
|
CP L ; BAUDTST = BAUDREQ? |
|
|
|
JR Z,SIO_INITBROK ; IF MATCH, WE ARE DONE |
|
|
|
SIO_NOCTC: |
|
|
|
; IF THERE IS NO CTC, THEN THE REMAINING DIVISOR |
|
|
|
; NEEDS TO BE EXACTLY 1 OR WE HAVE A PROBLEM. |
|
|
|
LD A,L ; GET REMAINING DIVISOR |
|
|
|
DEC A ; 1 -> 0 |
|
|
|
JR Z,SIO_INITBROK ; FAIL IF NOT 1 |
|
|
|
; |
|
|
|
SIO_INITFAIL: |
|
|
|
; |
|
|
|
@ -665,6 +750,28 @@ SIO_INITBROK: |
|
|
|
; FAILS. |
|
|
|
; |
|
|
|
SIO_INITSAFE: |
|
|
|
; |
|
|
|
#IF (CTCENABLE) |
|
|
|
; |
|
|
|
; CHECK IF A CTC CHANNEL IS CONFIGURED |
|
|
|
LD A,(IY+13) ; GET CTC CHANNEL |
|
|
|
INC A ; $FF -> 0 |
|
|
|
JR Z,SIO_INITSAFE2 ; NO CTC CHANNEL, BYPASS |
|
|
|
; |
|
|
|
; IF A CTC CHANNEL IS CONFIGURED, PROGRAM IT FOR |
|
|
|
; SIMPLE 1:1 SCALING. |
|
|
|
LD A,(IY+13) ; GET CTC CHANNEL |
|
|
|
ADD A,CTCA ; ADD TO CTC BASE PORT ADR |
|
|
|
LD C,A ; AND PUT IN C FOR I/O |
|
|
|
LD A,%01010111 ; CTCC CONTROL WORD VALUE |
|
|
|
OUT (C),A ; PREP CTC CHANNEL |
|
|
|
LD A,1 ; TIMER CONSTANT IS 1 |
|
|
|
OUT (C),A ; SET CTC TIMER CONSTANT |
|
|
|
; |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
SIO_INITSAFE2: |
|
|
|
; SETUP DEFAULT VALUES FOR SIO REGISTERS |
|
|
|
LD HL,SIO_INITDEFS |
|
|
|
LD DE,SIO_INITVALS |
|
|
|
LD BC,SIO_INITLEN |
|
|
|
@ -764,7 +871,8 @@ SIO_INITLEN .EQU $ - SIO_INITVALS |
|
|
|
; |
|
|
|
SIO_INITDEFS: |
|
|
|
.DB $00, $18 ; WR0: CHANNEL RESET CMD |
|
|
|
.DB $04, $C4 ; WR4: CLK BAUD PARITY STOP BIT |
|
|
|
;.DB $04, $C4 ; WR4: CLK BAUD PARITY STOP BIT |
|
|
|
.DB $04, $44 ; WR4: CLK BAUD PARITY STOP BIT |
|
|
|
.DB $01, SIO_WR1VAL ; WR1: INTERRUPT STYLE |
|
|
|
.DB $02, $00 ; WR2: IM2 VEC OFFSET |
|
|
|
.DB $03, $E1 ; WR3: 8 BIT RCV, CTS/DCD AUTO, RX ENABLE |
|
|
|
@ -984,8 +1092,9 @@ SIO0A_CFG: |
|
|
|
.DB SIO0A_DAT ; DATA PORT |
|
|
|
.DW SIO0ACFG ; LINE CONFIGURATION |
|
|
|
.DW SIO0A_RCVBUF ; POINTER TO RCV BUFFER STRUCT |
|
|
|
.DW (SIO0ACLK / SIO0ADIV) & $FFFF ; CLOCK FREQ AS |
|
|
|
.DW (SIO0ACLK / SIO0ADIV) >> 16 ; ... DWORD VALUE |
|
|
|
.DW SIO0ACLK & $FFFF ; CLOCK FREQ AS |
|
|
|
.DW SIO0ACLK >> 16 ; ... DWORD VALUE |
|
|
|
.DB SIO0ACTCC ; CTC CHANNEL |
|
|
|
; |
|
|
|
SIO_CFGSIZ .EQU $ - SIO_CFG ; SIZE OF ONE CFG TABLE ENTRY |
|
|
|
; |
|
|
|
@ -998,8 +1107,9 @@ SIO0B_CFG: |
|
|
|
.DB SIO0B_DAT ; DATA PORT |
|
|
|
.DW SIO0BCFG ; LINE CONFIGURATION |
|
|
|
.DW SIO0B_RCVBUF ; POINTER TO RCV BUFFER STRUCT |
|
|
|
.DW (SIO0BCLK / SIO0BDIV) & $FFFF ; CLOCK FREQ AS |
|
|
|
.DW (SIO0BCLK / SIO0BDIV) >> 16 ; ... DWORD VALUE |
|
|
|
.DW SIO0BCLK & $FFFF ; CLOCK FREQ AS |
|
|
|
.DW SIO0BCLK >> 16 ; ... DWORD VALUE |
|
|
|
.DB SIO0BCTCC ; CTC CHANNEL |
|
|
|
; |
|
|
|
#IF (SIOCNT >= 2) |
|
|
|
; |
|
|
|
@ -1012,8 +1122,9 @@ SIO1A_CFG: |
|
|
|
.DB SIO1A_DAT ; DATA PORT |
|
|
|
.DW SIO1ACFG ; LINE CONFIGURATION |
|
|
|
.DW SIO1A_RCVBUF ; POINTER TO RCV BUFFER STRUCT |
|
|
|
.DW (SIO1ACLK / SIO1ADIV) & $FFFF ; CLOCK FREQ AS |
|
|
|
.DW (SIO1ACLK / SIO1ADIV) >> 16 ; ... DWORD VALUE |
|
|
|
.DW SIO1ACLK & $FFFF ; CLOCK FREQ AS |
|
|
|
.DW SIO1ACLK >> 16 ; ... DWORD VALUE |
|
|
|
.DB SIO1ACTCC ; CTC CHANNEL |
|
|
|
; |
|
|
|
; SIO1 CHANNEL B |
|
|
|
SIO1B_CFG: |
|
|
|
@ -1024,8 +1135,9 @@ SIO1B_CFG: |
|
|
|
.DB SIO1B_DAT ; DATA PORT |
|
|
|
.DW SIO1BCFG ; LINE CONFIGURATION |
|
|
|
.DW SIO1B_RCVBUF ; POINTER TO RCV BUFFER STRUCT |
|
|
|
.DW (SIO1BCLK / SIO1BDIV) & $FFFF ; CLOCK FREQ AS |
|
|
|
.DW (SIO1BCLK / SIO1BDIV) >> 16 ; ... DWORD VALUE |
|
|
|
.DW SIO1BCLK & $FFFF ; CLOCK FREQ AS |
|
|
|
.DW SIO1BCLK >> 16 ; ... DWORD VALUE |
|
|
|
.DB SIO1BCTCC ; CTC CHANNEL |
|
|
|
; |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
|