Browse Source

spelling + fixes

pull/133/head
Chris Odorjan 6 years ago
parent
commit
3bd2eb431a
  1. 111
      Source/HBIOS/duart.asm

111
Source/HBIOS/duart.asm

@ -173,14 +173,15 @@ DUART_PREINIT:
LD IY,DUART_CFG ; POINT TO START OF CFG TABLE
DUART_PREINIT0:
PUSH BC ; SAVE LOOP CONTROL
CALL DUART_INITUNIT ; HAND OFF TO GENERIC INIT CODE
CALL DUART_DETECT ; DETERMINE DUART TYPE
POP BC ; RESTORE LOOP CONTROL
;
LD A,(IY + 1) ; GET THE DUART TYPE DETECTED
LD (IY + 1),A ; SAVE TYPE IN CONFIG TABLE
OR A ; SET FLAGS
JR Z,DUART_PREINIT1 ; SKIP IT IF NOTHING FOUND
;
PUSH BC ; SAVE LOOP CONTROL
PUSH IY
POP DE ; DE := UNIT INSTANCE TABLE ADDRESS
LD BC,DUART_FNTBL ; BC := FUNCTION TABLE ADDRESS
CALL NZ,CIO_ADDENT ; ADD ENTRY IF DUART FOUND, BC:DE
POP BC ; RESTORE LOOP CONTROL
@ -189,15 +190,25 @@ DUART_PREINIT1:
LD DE,DUART_CFGSIZ ; SIZE OF CFG ENTRY
ADD IY,DE ; BUMP IY TO NEXT ENTRY
DJNZ DUART_PREINIT0 ; LOOP UNTIL DONE
;
LD B,DUART_CFGCNT ; LOOP CONTROL
LD IY,DUART_CFG ; POINT TO START OF CFG TABLE
DUART_PREINIT2:
PUSH BC ; SAVE LOOP CONTROL
CALL DUART_INITUNIT ; INITIALIZE UNIT
POP BC ; RESTORE LOOP CONTROL
LD DE,DUART_CFGSIZ ; SIZE OF CFG ENTRY
ADD IY,DE ; BUMP IY TO NEXT ENTRY
DJNZ DUART_PREINIT2 ; LOOP UNTIL DONE
;
XOR A ; SIGNAL SUCCESS
RET ; AND RETURN
;
; DUART INITIALIZATION ROUTINE
;
DUART_INITUNIT:
; DETECT THE PRESENCE OF A DUART
CALL DUART_DETECT ; DETERMINE DUART TYPE
LD (IY + 1),A ; ALSO SAVE IN CONFIG TABLE
; CHECK IF PORT IS PRESENT
LD A,(IY + 1) ; GET TYPE FROM CONFIG TABLE
OR A ; SET FLAGS
RET Z ; ABORT IF NOTHING THERE
@ -298,14 +309,36 @@ DUART_INITDEV:
LD D,(IY + 8) ; HIGH BYTE
;
DUART_INITDEV1:
#IF (DUART_DEBUG)
PRTS(" [TYPE=$")
; DEBUG: DUMP DUART TYPE
LD A,(IY + 1)
CALL PRTHEXBYTE
; DEBUG: DUMP PREVIOUS BAUD TABLE ENTRY
PRTS(" OLDBAUDTBL=$")
LD A,(IY + 5)
CALL PRTHEXBYTE
#ENDIF
;
; GET CLOCK SELECT FROM TABLE
LD HL,DUART_BAUDTBL ; GET START OF TABLE IN HL
LD A,D ; GET CONFIG MSB
AND $1F ; ISOLATE ENCODED BAUD RATE
CALL ADDHLA ; HL -> ENTRY
LD A,(HL) ; A = ENTRY
;
#IF (DUART_DEBUG)
; DEBUG: DUMP BAUD TABLE ENTRY
PUSH AF
PRTS(" BAUDTBL=$")
CALL PRTHEXBYTE
POP AF
#ENDIF
;
INC A ; A = $FF?
JR Z,DUART_INITDEVZ ; INVALID RATE, ERROR OUT
JP Z,DUART_INITDEVZ ; INVALID RATE, ERROR OUT
DEC A ; GET ORIGINAL VALUE BACK
;
; GOT A VALID RATE, COMMIT NEW CONFIG
@ -330,6 +363,12 @@ DUART_INITDEV1:
DUART_OUTP(DUART_CR) ; SET FOR RECEIVER
LD A,DUART_CR_SET_TX_X
DUART_OUTP(DUART_CR) ; SET FOR TRANSMITTER
;
#IF (DUART_DEBUG)
; DEBUG: DUMP BRG SELECT EXTEND BIT
PRTS(" X=1$")
#ENDIF
;
JR DUART_INITDEV3
;
DUART_INITDEV2:
@ -339,16 +378,30 @@ DUART_INITDEV2:
LD A,DUART_CR_CLR_TX_X
DUART_OUTP(DUART_CR) ; CLEAR FOR TRANSMITTER
;
#IF (DUART_DEBUG)
; DEBUG: DUMP BRG SELECT EXTEND BIT
PRTS(" X=0$")
#ENDIF
;
DUART_INITDEV3:
; SET BRG CLOCK SELECT
LD A,L ; GET BAUD TABLE ENTRY IN A
AND $0F ; GET CLOCK SELECT BITS
LD L,A ; SAVE IT IN A
LD L,A ; SAVE IT IN L
RLA
RLA
RLA
RLA ; MOVE IT INTO THE HIGH NIBBLE
OR L ; AND MERGE BACK IN LOW NIBBLE
;
#IF (DUART_DEBUG)
; DEBUG: DUMP CLOCK SELECT REGISTER
PUSH AF
PRTS(" CSR=$")
CALL PRTHEXBYTE
POP AF
#ENDIF
;
DUART_OUTP(DUART_CSR) ; SET CLOCK SELECT
;
; SET PARITY AND WORD SIZE
@ -366,6 +419,15 @@ DUART_INITDEV3:
AND %00000011 ; WORD LENGTH BITS ARE THE SAME
OR B ; MERGE PARITY BITS
OR DUART_MR1_RXRTS ; ALWAYS ENABLE RECEIVER CONTROL OF RTS
;
#IF (DUART_DEBUG)
; DEBUG: DUMP MODE REGISTER 1
PUSH AF
PRTS(" MR1=$")
CALL PRTHEXBYTE
POP AF
#ENDIF
;
DUART_OUTP(DUART_MR) ; WRITE MR1 (AND SET MR POINTER TO MR2)
;
; SET STOP BITS
@ -377,7 +439,16 @@ DUART_INITDEV3:
;
DUART_INITDEV4:
LD A,B ; GET MR2 IN A
OR DUART_MR2_TXCTS ; ALWAYS ENABLE CTS CONTROL OF TRANSMITTER
;OR DUART_MR2_TXCTS ; ALWAYS ENABLE CTS CONTROL OF TRANSMITTER
;
#IF (DUART_DEBUG)
; DEBUG: DUMP MODE REGISTER 2
PUSH AF
PRTS(" MR2=$")
CALL PRTHEXBYTE
POP AF
#ENDIF
;
DUART_OUTP(DUART_MR) ; WRITE MR2
;
; RE-ENABLE RECEIVER AND TRANSMITTER
@ -396,11 +467,22 @@ DUART_INITDEV5:
ADD A,DUART_SOPR ; SET OUTPUT BITS
LD C,A ; GET PORT IN C
OUT (C),L ; OUTPUT PORT IS INVERTED BUT SO IS RTS
;
#IF (DUART_DEBUG)
PRTS(" SOPR=$")
LD A,L
CALL PRTHEXBYTE
PRTC(']')
#ENDIF
;
XOR A ; SIGNAL SUCCESS
RET
;
DUART_INITDEVZ:
;
#IF (DUART_DEBUG)
PRTC(']')
#ENDIF
; INVALID BAUD RATE
DEC A ; A WAS $00, GET BACK $FF
RET ; RETURN ERROR STATUS
@ -491,7 +573,7 @@ DUART_DETECT:
DUART_OUTP(DUART_CR) ; SEND COMMAND
DUART_INP(DUART_MR) ; GET VALUE OF MR1 IN A
CP 1 ; CHECK FOR TEST VALUE
JR NZ,DUART_DETECT_NONE ; NOPE, UNKNOWN DEVICE OR NOT PRESETN
JR NZ,DUART_DETECT_NONE ; NOPE, UNKNOWN DEVICE OR NOT PRESENT
;
; TEST FOR FUNCTIONAL GENERAL PURPOSE REG, IF NOT, WE HAVE A 2681
LD A,$5A ; LOAD TEST VALUE
@ -567,6 +649,13 @@ DUART_PRTCFG:
LD E,(IY + 7) ; LOAD CONFIG
LD D,(IY + 8) ; ... WORD TO DE
CALL PS_PRTSC0 ; PRINT CONFIG
;
#IF (DUART_DEBUG)
; DEBUG: DUMP BAUD TABLE ENTRY
PRTS(" BAUDTBL=$")
LD A,(IY + 5)
CALL PRTHEXBYTE
#ENDIF
;
XOR A
RET
@ -672,7 +761,7 @@ DUART1B_CFG:
.DB 0 ; DUART TYPE (SET DURING INIT)
.DB %00000011 ; MODULE 1, CHANNEL B
.DB DUART1BASE ; BASE PORT (CHIP)
.DB DUART1BASE + $80 ; BASE PORT (CHANNEL)
.DB DUART1BASE + $08 ; BASE PORT (CHANNEL)
.DB 0 ; BAUD TABLE ENTRY (SET DURING INITDEV)
.DB 0 ; SHADOW ACR (SET DURING INITDEV)
.DW DUART1BCFG ; LINE CONFIGURATION

Loading…
Cancel
Save