mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-06 22:43:15 -06:00
Fixes to port address and cleanups
This commit is contained in:
@@ -10,415 +10,39 @@
|
||||
; F E D C B A 9 8 7 6 5 4 3 2 1 0
|
||||
; -- MSB (D REGISTER) -- -- LSB (E REGISTER) --
|
||||
;
|
||||
;
|
||||
; FOR THE ECB-ZILOG-PERIPHERALS BOARD, INFORMATION ON JUMPER SETTINGS
|
||||
; AND BAUD RATES CAN BE FOUND HERE:
|
||||
; https://www.retrobrewcomputers.org/doku.php?id=boards:ecb:zilog-peripherals:clock-divider
|
||||
;
|
||||
; SIO PORT A (COM1:) and SIO PORT B (COM2:) ARE MAPPED TO DEVICE UC1: AND UL1: IN CP/M.
|
||||
;
|
||||
SIO_NONE .EQU 0
|
||||
SIO_SIO .EQU 1
|
||||
;
|
||||
#IF (SIOMODE == SIOMODE_RC)
|
||||
SIOA_CMD .EQU SIOBASE + $00 ; PS
|
||||
SIOA_DAT .EQU SIOBASE + $01 ; PS
|
||||
SIOB_CMD .EQU SIOBASE + $02 ; PS
|
||||
SIOB_DAT .EQU SIOBASE + $03 ; PS
|
||||
SIOA_CMD .EQU SIOBASE + $00
|
||||
SIOA_DAT .EQU SIOBASE + $01
|
||||
SIOB_CMD .EQU SIOBASE + $02
|
||||
SIOB_DAT .EQU SIOBASE + $03
|
||||
#ENDIF
|
||||
;
|
||||
#IF (SIOMODE == SIOMODE_SMB)
|
||||
SIOA_CMD .EQU SIOBASE + $02 ; PS
|
||||
SIOA_DAT .EQU SIOBASE + $00 ; PS
|
||||
SIOB_CMD .EQU SIOBASE + $03 ; PS
|
||||
SIOB_WR4 .EQU SIOBASE + $01 ; PS
|
||||
SIOA_CMD .EQU SIOBASE + $02
|
||||
SIOA_DAT .EQU SIOBASE + $00
|
||||
SIOB_CMD .EQU SIOBASE + $03
|
||||
SIOB_DAT .EQU SIOBASE + $01
|
||||
#ENDIF
|
||||
;
|
||||
#IF (SIOMODE == SIOMODE_ZP) ; PS
|
||||
SIOA_CMD .EQU SIOBASE + $06 ; PS
|
||||
SIOA_DAT .EQU SIOBASE + $04 ; PS
|
||||
SIOB_CMD .EQU SIOBASE + $07 ; PS
|
||||
SIOB_DAT .EQU SIOBASE + $05 ; PS
|
||||
#ENDIF ; PS
|
||||
;
|
||||
#IF (DEFSIOCLK/DEFSIODIV/1 == 75)
|
||||
SIOBAUD1 .EQU 0
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/1 == 150)
|
||||
SIOBAUD1 .EQU 1
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/1 == 300)
|
||||
SIOBAUD1 .EQU 2
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/1 == 600)
|
||||
SIOBAUD1 .EQU 3
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/1 == 1200)
|
||||
SIOBAUD1 .EQU 4
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/1 == 2400)
|
||||
SIOBAUD1 .EQU 5
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/1 == 4800)
|
||||
SIOBAUD1 .EQU 6
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/1 == 9600)
|
||||
SIOBAUD1 .EQU 7
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/1 == 19200)
|
||||
SIOBAUD1 .EQU 8
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/1 == 38400)
|
||||
SIOBAUD1 .EQU 9
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/1 == 76800)
|
||||
SIOBAUD1 .EQU 10
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/1 == 153600)
|
||||
SIOBAUD1 .EQU 11
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/1 == 307200)
|
||||
SIOBAUD1 .EQU 12
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/1 == 614400)
|
||||
SIOBAUD1 .EQU 13
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/1 ==1228800)
|
||||
SIOBAUD1 .EQU 14
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/1 ==2457600)
|
||||
SIOBAUD1 .EQU 15
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/1 == 225)
|
||||
SIOBAUD1 .EQU 16
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/1 == 450)
|
||||
SIOBAUD1 .EQU 17
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/1 == 900)
|
||||
SIOBAUD1 .EQU 18
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/1 == 1800)
|
||||
SIOBAUD1 .EQU 19
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/1 == 3600)
|
||||
SIOBAUD1 .EQU 20
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/1 == 7200)
|
||||
SIOBAUD1 .EQU 21
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/1 == 14400)
|
||||
SIOBAUD1 .EQU 22
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/1 == 28800)
|
||||
SIOBAUD1 .EQU 23
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/1 == 57600)
|
||||
SIOBAUD1 .EQU 24
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/1 == 115200)
|
||||
SIOBAUD1 .EQU 25
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/1 == 230400)
|
||||
SIOBAUD1 .EQU 26
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/1 == 921600)
|
||||
SIOBAUD1 .EQU 28
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/1 ==1843200)
|
||||
SIOBAUD1 .EQU 29
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/1 ==3686400)
|
||||
SIOBAUD1 .EQU 30
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/1 ==7372800)
|
||||
SIOBAUD1 .EQU 31
|
||||
#IF (SIOMODE == SIOMODE_ZP)
|
||||
SIOA_CMD .EQU SIOBASE + $06
|
||||
SIOA_DAT .EQU SIOBASE + $04
|
||||
SIOB_CMD .EQU SIOBASE + $07
|
||||
SIOB_DAT .EQU SIOBASE + $05
|
||||
#ENDIF
|
||||
;
|
||||
#IF (DEFSIOCLK/DEFSIODIV/16 == 75)
|
||||
SIOBAUD2 .EQU 0
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/16 == 150)
|
||||
SIOBAUD2 .EQU 1
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/16 == 300)
|
||||
SIOBAUD2 .EQU 2
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/16 == 600)
|
||||
SIOBAUD2 .EQU 3
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/16 == 1200)
|
||||
SIOBAUD2 .EQU 4
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/16 == 2400)
|
||||
SIOBAUD2 .EQU 5
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/16 == 4800)
|
||||
SIOBAUD2 .EQU 6
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/16 == 9600)
|
||||
SIOBAUD2 .EQU 7
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/16 == 19200)
|
||||
SIOBAUD2 .EQU 8
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/16 == 38400)
|
||||
SIOBAUD2 .EQU 9
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/16 == 76800)
|
||||
SIOBAUD2 .EQU 10
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/16 == 153600)
|
||||
SIOBAUD2 .EQU 11
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/16 == 307200)
|
||||
SIOBAUD2 .EQU 12
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/16 == 614400)
|
||||
SIOBAUD2 .EQU 13
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/16 ==1228800)
|
||||
SIOBAUD2 .EQU 14
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/16 ==2457600)
|
||||
SIOBAUD2 .EQU 15
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/16 == 225)
|
||||
SIOBAUD2 .EQU 16
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/16 == 450)
|
||||
SIOBAUD2 .EQU 17
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/16 == 900)
|
||||
SIOBAUD2 .EQU 18
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/16 == 1800)
|
||||
SIOBAUD2 .EQU 19
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/16 == 3600)
|
||||
SIOBAUD2 .EQU 20
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/16 == 7200)
|
||||
SIOBAUD2 .EQU 21
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/16 == 14400)
|
||||
SIOBAUD2 .EQU 22
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/16 == 28800)
|
||||
SIOBAUD2 .EQU 23
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/16 == 57600)
|
||||
SIOBAUD2 .EQU 24
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/16 == 115200)
|
||||
SIOBAUD2 .EQU 25
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/16 == 230400)
|
||||
SIOBAUD2 .EQU 26
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/16 == 460800)
|
||||
SIOBAUD2 .EQU 27
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/16 == 921600)
|
||||
SIOBAUD2 .EQU 28
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/16 ==1843200)
|
||||
SIOBAUD2 .EQU 29
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/16 ==3686400)
|
||||
SIOBAUD2 .EQU 30
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/16 ==7372800)
|
||||
SIOBAUD2 .EQU 31
|
||||
#ENDIF
|
||||
; CONDITIONALS THAT DETERMINE THE ENCODED VALUE OF THE BAUD RATE
|
||||
;
|
||||
#IF (DEFSIOCLK/DEFSIODIV/32 == 75)
|
||||
SIOBAUD3 .EQU 0
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/32 == 150)
|
||||
SIOBAUD3 .EQU 1
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/32 == 300)
|
||||
SIOBAUD3 .EQU 2
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/32 == 600)
|
||||
SIOBAUD3 .EQU 3
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/32 == 1200)
|
||||
SIOBAUD3 .EQU 4
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/32 == 2400)
|
||||
SIOBAUD3 .EQU 5
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/32 == 4800)
|
||||
SIOBAUD3 .EQU 6
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/32 == 9600)
|
||||
SIOBAUD3 .EQU 7
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/32 == 19200)
|
||||
SIOBAUD3 .EQU 8
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/32 == 38400)
|
||||
SIOBAUD3 .EQU 9
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/32 == 76800)
|
||||
SIOBAUD3 .EQU 10
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/32 == 153600)
|
||||
SIOBAUD3 .EQU 11
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/32 == 307200)
|
||||
SIOBAUD3 .EQU 12
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/32 == 614400)
|
||||
SIOBAUD3 .EQU 13
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/32 ==1228800)
|
||||
SIOBAUD3 .EQU 14
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/32 ==2457600)
|
||||
SIOBAUD3 .EQU 15
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/32 == 225)
|
||||
SIOBAUD3 .EQU 16
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/32 == 450)
|
||||
SIOBAUD3 .EQU 17
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/32 == 900)
|
||||
SIOBAUD3 .EQU 18
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/32 == 1800)
|
||||
SIOBAUD3 .EQU 19
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/32 == 3600)
|
||||
SIOBAUD3 .EQU 20
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/32 == 7200)
|
||||
SIOBAUD3 .EQU 21
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/32 == 14400)
|
||||
SIOBAUD3 .EQU 22
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/32 == 28800)
|
||||
SIOBAUD3 .EQU 23
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/32 == 57600)
|
||||
SIOBAUD3 .EQU 24
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/32 == 115200)
|
||||
SIOBAUD3 .EQU 25
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/32 == 230400)
|
||||
SIOBAUD3 .EQU 26
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/32 == 460800)
|
||||
SIOBAUD3 .EQU 27
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/32 == 921600)
|
||||
SIOBAUD3 .EQU 28
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/32 ==1843200)
|
||||
SIOBAUD3 .EQU 29
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/32 ==3686400)
|
||||
SIOBAUD3 .EQU 30
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/32 ==7372800)
|
||||
SIOBAUD3 .EQU 31
|
||||
#ENDIF
|
||||
;
|
||||
#IF (DEFSIOCLK/DEFSIODIV/64 == 75)
|
||||
SIOBAUD4 .EQU 0
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/64 == 150)
|
||||
SIOBAUD4 .EQU 1
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/64 == 300)
|
||||
SIOBAUD4 .EQU 2
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/64 == 600)
|
||||
SIOBAUD4 .EQU 3
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/64 == 1200)
|
||||
SIOBAUD4 .EQU 4
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/64 == 2400)
|
||||
SIOBAUD4 .EQU 5
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/64 == 4800)
|
||||
SIOBAUD4 .EQU 6
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/64 == 9600)
|
||||
SIOBAUD4 .EQU 7
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/64 == 19200)
|
||||
SIOBAUD4 .EQU 8
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/64 == 38400)
|
||||
SIOBAUD4 .EQU 9
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/64 == 76800)
|
||||
SIOBAUD4 .EQU 10
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/64 == 153600)
|
||||
SIOBAUD4 .EQU 11
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/64 == 307200)
|
||||
SIOBAUD4 .EQU 12
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/64 == 614400)
|
||||
SIOBAUD4 .EQU 13
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/64 ==1228800)
|
||||
SIOBAUD4 .EQU 14
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/64 ==2457600)
|
||||
SIOBAUD4 .EQU 15
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/64 == 225)
|
||||
SIOBAUD4 .EQU 16
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/64 == 450)
|
||||
SIOBAUD4 .EQU 17
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/64 == 900)
|
||||
SIOBAUD4 .EQU 18
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/64 == 1800)
|
||||
SIOBAUD4 .EQU 19
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/64 == 3600)
|
||||
SIOBAUD4 .EQU 20
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/64 == 7200)
|
||||
SIOBAUD4 .EQU 21
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/64 == 14400)
|
||||
SIOBAUD4 .EQU 22
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/64 == 28800)
|
||||
SIOBAUD4 .EQU 23
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/64 == 57600)
|
||||
SIOBAUD4 .EQU 24
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/64 == 115200)
|
||||
SIOBAUD4 .EQU 25
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/64 == 230400)
|
||||
SIOBAUD4 .EQU 26
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/64 == 460800)
|
||||
SIOBAUD4 .EQU 27
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/64 == 921600)
|
||||
SIOBAUD4 .EQU 28
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/64 ==1843200)
|
||||
SIOBAUD4 .EQU 29
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/64 ==3686400)
|
||||
SIOBAUD4 .EQU 30
|
||||
#ENDIF
|
||||
#IF (DEFSIOCLK/DEFSIODIV/64 ==7372800)
|
||||
SIOBAUD4 .EQU 31
|
||||
#ENDIF
|
||||
#INCLUDE "siobaud.inc"
|
||||
;
|
||||
SIO_PREINIT:
|
||||
;
|
||||
@@ -786,21 +410,25 @@ SIO_OST:
|
||||
INC A ; ACCUM := 1 TO SIGNAL 1 BUFFER POSITION
|
||||
RET ; DONE
|
||||
;
|
||||
; AT INITIALIZATION THE SETUP PARAMETER WORD IS TRANSLATED TO THE FORMAT
|
||||
; REQUIRED BY THE SIO AND STORED IN A PORT/REGISTER INITIALIZATION TABLE,
|
||||
; WHICH IS THEN LOADED INTO THE SIO.
|
||||
;
|
||||
; RTS, DTR AND XON SETTING IS NOT CURRENTLY SUPPORTED.
|
||||
; MARK & SPACE PARITY AND 1.5 STOP BITS IS NOT SUPPORTED BY THE SIO.
|
||||
; INITIALIZATION WILL NOT BE COMPLETED IF AN INVALID SETTING IS DETECTED.
|
||||
;
|
||||
SIO_INITDEV:
|
||||
;
|
||||
; TEST FOR -1 WHICH MEANS USE CURRENT CONFIG (JUST REINIT) ; PS
|
||||
LD A,D ; TEST DE FOR ; PS
|
||||
AND E ; ... VALUE OF -1 ; PS
|
||||
INC A ; ... SO Z SET IF -1 ; PS
|
||||
JR NZ,SIO_INITDEV1 ; IF DE == -1, REINIT CURRENT CONFIG ; PS
|
||||
; TEST FOR -1 WHICH MEANS USE CURRENT CONFIG (JUST REINIT)
|
||||
LD A,D ; TEST DE FOR
|
||||
AND E ; ... VALUE OF -1
|
||||
INC A ; ... SO Z SET IF -1
|
||||
JR NZ,SIO_INITDEV1 ; IF DE == -1, REINIT CURRENT CONFIG
|
||||
;
|
||||
; LOAD EXISTING CONFIG TO REINIT ; PS
|
||||
LD E,(IY+4) ; LOW BYTE ; PS
|
||||
LD D,(IY+5) ; HIGH BYTE ; PS
|
||||
;
|
||||
; CHANGE INIT TABLE BASED ON DESIRED SERIAL LINE CHARACTERISTICS
|
||||
; LOAD EXISTING CONFIG TO REINIT
|
||||
LD E,(IY+4) ; LOW BYTE
|
||||
LD D,(IY+5) ; HIGH BYTE
|
||||
;
|
||||
SIO_INITDEV1:
|
||||
PUSH DE ; SAVE CONFIG
|
||||
@@ -815,8 +443,13 @@ SIO_INITDEV1:
|
||||
PRTC(']')
|
||||
POP AF
|
||||
#ENDIF
|
||||
|
||||
CP SIOBAUD1 ; We set the divider and the lower bit (d2) of the baud rate here
|
||||
;
|
||||
; ONLY FOUR BAUD RATES ARE POSSIBLE WITH A FIXED CLOCK.
|
||||
; THESE ARE PREDETERMINED BY HARDWARE SETTINGS AND MATCHING
|
||||
; CONFIGURATION SETTINGS. WE PRECALCULATED THE FOUR
|
||||
; POSSIBLE ENCODED VALUES.
|
||||
;
|
||||
CP SIOBAUD1 ; We set the divider and the lower bit (d2) of the stop bits
|
||||
LD D,$04 ; /1 N,8,1
|
||||
JR Z,BROK
|
||||
CP SIOBAUD2
|
||||
@@ -827,8 +460,8 @@ SIO_INITDEV1:
|
||||
JR Z,BROK
|
||||
CP SIOBAUD4
|
||||
LD D,$C4 ; /64 N,8,1
|
||||
JR Z,BROK ; RET NZ
|
||||
|
||||
JR Z,BROK
|
||||
|
||||
#IF (SIODEBUG)
|
||||
PUSH AF
|
||||
PRTS(" BR FAIL[$")
|
||||
@@ -857,43 +490,24 @@ BROK:
|
||||
SRL A ; we know top bits are zero from previous test
|
||||
SRL A ; add stop bits
|
||||
OR D ; carry = 0
|
||||
|
||||
;
|
||||
; SET DIVIDER, STOP AND PARITY WR4
|
||||
;
|
||||
LD BC,SIO_INITVALS+3
|
||||
LD (BC),A
|
||||
|
||||
#IF (SIODEBUG)
|
||||
PUSH AF
|
||||
PRTS(" MODE[$")
|
||||
PRTS(" WR4[$")
|
||||
CALL PRTHEXBYTE
|
||||
PRTC(']')
|
||||
POP AF
|
||||
#ENDIF
|
||||
|
||||
; THE # DATA BITS NEED TO BE CONVERTED FROM THE
|
||||
; ROMWBW REPRESENTATION TO THE SIO ZILOG CODING
|
||||
|
||||
; XOR A
|
||||
; RR E ; d0 of bits into carry
|
||||
; RR A ; d0 into msb
|
||||
; RR E ; d1 of bits into carry
|
||||
; RR A ; d1 into msb
|
||||
;; SCF ; 1 into msb
|
||||
; RR A
|
||||
; OR $8a
|
||||
|
||||
LD A,E
|
||||
|
||||
#IF (SIODEBUG)
|
||||
PUSH AF
|
||||
PRTS(" BITS[$")
|
||||
CALL PRTHEXBYTE
|
||||
PRTC(']')
|
||||
POP AF
|
||||
#ENDIF
|
||||
; 112233445566d1d0 CC
|
||||
LD A,E ; 112233445566d1d0 CC
|
||||
RRA ; CC112233445566d1 d0
|
||||
RRA ; d0CC112233445566 d1
|
||||
RRA ; d1d0CC1122334455 66
|
||||
RRA ; d1d0CC1122334455 66
|
||||
LD D,A
|
||||
RRA ; 66d1d0CC11223344 55
|
||||
AND $60 ; 0011110000000000 00
|
||||
@@ -906,7 +520,7 @@ BROK:
|
||||
|
||||
#IF (SIODEBUG)
|
||||
PUSH AF
|
||||
PRTS(" TXDATA[$")
|
||||
PRTS(" WR5[$")
|
||||
CALL PRTHEXBYTE
|
||||
PRTC(']')
|
||||
POP AF
|
||||
@@ -923,7 +537,7 @@ BROK:
|
||||
|
||||
#IF (SIODEBUG)
|
||||
PUSH AF
|
||||
PRTS(" RXDATA[$")
|
||||
PRTS(" WR3[$")
|
||||
CALL PRTHEXBYTE
|
||||
PRTC(']')
|
||||
POP AF
|
||||
@@ -969,7 +583,7 @@ BROK:
|
||||
;
|
||||
SIO_INITVALS:
|
||||
.DB $00, $18 ; WR0: CHANNEL RESET
|
||||
.DB $04, $00 ; WR4: CLK BAUD PARITY STOP BIT ; PST
|
||||
.DB $04, $00 ; WR4: CLK BAUD PARITY STOP BIT
|
||||
#IF (INTMODE == 0)
|
||||
.DB $01, $00 ; WR1: NO INTERRUPTS
|
||||
#ELSE
|
||||
|
||||
Reference in New Issue
Block a user