|
|
|
@ -10,26 +10,418 @@ |
|
|
|
; F E D C B A 9 8 7 6 5 4 3 2 1 0 |
|
|
|
; -- MSB (D REGISTER) -- -- LSB (E REGISTER) -- |
|
|
|
; |
|
|
|
SIO_DEBUG .EQU FALSE |
|
|
|
; |
|
|
|
SIO_NONE .EQU 0 |
|
|
|
SIO_SIO .EQU 1 |
|
|
|
; |
|
|
|
#IF (SIOMODE == SIOMODE_RC) |
|
|
|
SIOA_CMD .EQU $80 |
|
|
|
SIOA_DAT .EQU $81 |
|
|
|
SIOB_CMD .EQU $82 |
|
|
|
SIOB_DAT .EQU $83 |
|
|
|
SIOA_CMD .EQU SIOBASE + $00 ;PS |
|
|
|
SIOA_DAT .EQU SIOBASE + $01 ;PS |
|
|
|
SIOB_CMD .EQU SIOBASE + $02 ;PS |
|
|
|
SIOB_DAT .EQU SIOBASE + $03 ;PS |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
#IF (SIOMODE == SIOMODE_SMB) |
|
|
|
SIOA_CMD .EQU $82 |
|
|
|
SIOA_DAT .EQU $80 |
|
|
|
SIOB_CMD .EQU $83 |
|
|
|
SIOB_DAT .EQU $81 |
|
|
|
SIOA_CMD .EQU SIOBASE + $02 ;PS |
|
|
|
SIOA_DAT .EQU SIOBASE + $00 ;PS |
|
|
|
SIOB_CMD .EQU SIOBASE + $03 ;PS |
|
|
|
SIOB_WR4 .EQU SIOBASE + $01 ;PS |
|
|
|
#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 |
|
|
|
#ENDIF |
|
|
|
|
|
|
|
|
|
|
|
#IF (DEFSIOCLK/DEFSIODIV/16 == 75) |
|
|
|
SIOBAUD1 .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 |
|
|
|
|
|
|
|
#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 |
|
|
|
|
|
|
|
; |
|
|
|
SIO_PREINIT: |
|
|
|
; |
|
|
|
@ -98,7 +490,7 @@ SIO_INITUNIT: |
|
|
|
LD HL,SIO_DEV ; POINT TO CURRENT UART DEVICE NUM |
|
|
|
LD A,(HL) ; PUT IN ACCUM |
|
|
|
INC (HL) ; INCREMENT IT (FOR NEXT LOOP) |
|
|
|
LD (IY),A ; UDPATE UNIT NUM |
|
|
|
LD (IY),A ; UPDATE UNIT NUM |
|
|
|
|
|
|
|
; SET DEFAULT CONFIG |
|
|
|
LD DE,-1 ; LEAVE CONFIG ALONE |
|
|
|
@ -314,6 +706,10 @@ SIO_OUT: |
|
|
|
#IF (SIOMODE == SIOMODE_SMB) |
|
|
|
DEC C ; DECREMENT CMD PORT TWICE TO GET DATA PORT |
|
|
|
DEC C |
|
|
|
#ENDIF |
|
|
|
#IF (SIOMODE == SIOMODE_ZP) |
|
|
|
DEC C ; DECREMENT CMD PORT TWICE TO GET DATA PORT |
|
|
|
DEC C |
|
|
|
#ENDIF |
|
|
|
OUT (C),E ; SEND CHAR FROM E |
|
|
|
XOR A ; SIGNAL SUCCESS |
|
|
|
@ -358,9 +754,155 @@ SIO_OST: |
|
|
|
; |
|
|
|
; |
|
|
|
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 |
|
|
|
; |
|
|
|
; LOAD EXISTING CONFIG TO REINIT ;PS |
|
|
|
LD E,(IY + 4) ; LOW BYTE ;PS |
|
|
|
LD D,(IY + 5) ; HIGH BYTE ;PS |
|
|
|
|
|
|
|
; CHANGE INIT TABLE |
|
|
|
; |
|
|
|
SIO_INITDEV1: |
|
|
|
PUSH DE ; SAVE CONFIG |
|
|
|
|
|
|
|
LD A,D ; GET CONFIG MSB |
|
|
|
AND $1F ; ISOLATE ENCODED BAUD RATE |
|
|
|
|
|
|
|
#IF (SIODEBUG) |
|
|
|
PUSH AF |
|
|
|
PRTS(" ENCODE[$") |
|
|
|
CALL PRTHEXBYTE |
|
|
|
PRTC(']') |
|
|
|
POP AF |
|
|
|
#ENDIF |
|
|
|
|
|
|
|
CP SIOBAUD1 ; We set the divider and the lower bit (d2) of the baud rate here |
|
|
|
LD D,$04 ; /1 N,8,1 |
|
|
|
JR Z,BROK |
|
|
|
CP SIOBAUD2 |
|
|
|
LD D,$44 ; /16 N,8,1 |
|
|
|
JR Z,BROK |
|
|
|
CP SIOBAUD3 |
|
|
|
LD D,$84 ; /32 N,8,1 |
|
|
|
JR Z,BROK |
|
|
|
CP SIOBAUD4 |
|
|
|
LD D,$C4 ; /64 N,8,1 |
|
|
|
JR Z,BROK ; RET NZ |
|
|
|
|
|
|
|
#IF (SIODEBUG) |
|
|
|
PUSH AF |
|
|
|
PRTS(" BR FAIL[$") |
|
|
|
CALL PRTHEXBYTE |
|
|
|
PRTC(']') |
|
|
|
POP AF |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
EXITINIT: |
|
|
|
POP DE |
|
|
|
RET ; NZ status here indicating fail / invalid baud rate. |
|
|
|
|
|
|
|
BROK: |
|
|
|
LD A,E |
|
|
|
AND $E0 |
|
|
|
JR NZ,EXITINIT ; NZ status here indicates dtr, xon, parity mark or space so return |
|
|
|
|
|
|
|
LD A,E ; set stop bit (d3) and add divider |
|
|
|
AND $04 |
|
|
|
RLA |
|
|
|
OR D ; carry gets reset here |
|
|
|
LD D,A |
|
|
|
|
|
|
|
|
|
|
|
LD A,E ; get the parity bits |
|
|
|
SRL A ; move them to bottom two bits |
|
|
|
SRL A ; we know top bits are zero from previous test |
|
|
|
SRL A ; add stop bits |
|
|
|
OR D ; carry = 0 |
|
|
|
|
|
|
|
LD BC,SIO_INITVALS+3 |
|
|
|
LD (BC),A |
|
|
|
|
|
|
|
#IF (SIODEBUG) |
|
|
|
PUSH AF |
|
|
|
PRTS(" MODE[$") |
|
|
|
CALL PRTHEXBYTE |
|
|
|
PRTC(']') |
|
|
|
POP AF |
|
|
|
#ENDIF |
|
|
|
|
|
|
|
; THE # DATA BITS NEED TO BE CONVERTED FROM THE |
|
|
|
; ROMWBW REPRESENTATION TO THE SIO XILOG 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 |
|
|
|
RRA ; CC112233445566d1 d0 |
|
|
|
RRA ; d0CC112233445566 d1 |
|
|
|
RRA ; d1d0CC1122334455 66 |
|
|
|
LD D,A |
|
|
|
RRA ; 66d1d0CC11223344 55 |
|
|
|
AND $60 ; 0011110000000000 00 |
|
|
|
OR $8a |
|
|
|
; |
|
|
|
; SET TRANSMIT DATA BITS WR5 |
|
|
|
; |
|
|
|
LD BC,SIO_INITVALS+11 |
|
|
|
LD (BC),A |
|
|
|
|
|
|
|
#IF (SIODEBUG) |
|
|
|
PUSH AF |
|
|
|
PRTS(" TXDATA[$") |
|
|
|
CALL PRTHEXBYTE |
|
|
|
PRTC(']') |
|
|
|
POP AF |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
; SET RECEIVE DATA BITS WR3 |
|
|
|
; |
|
|
|
LD A,D |
|
|
|
AND $C0 |
|
|
|
OR $01 |
|
|
|
|
|
|
|
LD BC,SIO_INITVALS+9 |
|
|
|
LD (BC),A |
|
|
|
|
|
|
|
#IF (SIODEBUG) |
|
|
|
PUSH AF |
|
|
|
PRTS(" RXDATA[$") |
|
|
|
CALL PRTHEXBYTE |
|
|
|
PRTC(']') |
|
|
|
POP AF |
|
|
|
#ENDIF |
|
|
|
|
|
|
|
POP DE ; RESTORE CONFIG |
|
|
|
|
|
|
|
LD (IY + 4),E ; SAVE LOW WORD |
|
|
|
LD (IY + 5),D ; SAVE HI WORD |
|
|
|
|
|
|
|
HB_DI ; AVOID CONFLICTS |
|
|
|
; |
|
|
|
; PROGRAM THE SIO/2 CHIP CHANNEL |
|
|
|
; PROGRAM THE SIO CHIP CHANNEL |
|
|
|
LD C,(IY + 3) ; COMMAND PORT |
|
|
|
LD HL,SIO_INITVALS ; POINT TO INIT VALUES |
|
|
|
LD B,SIO_INITLEN ; COUNT OF BYTES TO WRITE |
|
|
|
@ -393,11 +935,11 @@ SIO_INITDEV: |
|
|
|
; |
|
|
|
SIO_INITVALS: |
|
|
|
.DB $00, $18 ; WR0: CHANNEL RESET |
|
|
|
.DB $04, $C4 ; WR4: CLK/64=115200 BAUD, NO PARITY, 1 STOP BIT |
|
|
|
.DB $04, $00 ; WR4: CLK BAUD PARITY STOP BIT ; PST |
|
|
|
.DB $01, $18 ; WR1: INTERRUPT ON ALL RECEIVE CHARACTERS |
|
|
|
.DB $02, IVT_SER0 ; WR2: INTERRUPT VECTOR OFFSET |
|
|
|
.DB $03, $C1 ; WR3: 8 BIT RCV, RX ENABLE |
|
|
|
.DB $05, $EA ; WR5: DTR, 8 BITS SEND, TX ENABLE, RTS |
|
|
|
.DB $05, $EA ; WR5: DTR, 8 BITS SEND, TX ENABLE, RTS 1 11 0 1 0 1 0 (1=DTR,11=8bits,0=sendbreak,1=TxEnable,0=sdlc,1=RTS,0=txcrc) |
|
|
|
SIO_INITLEN .EQU $ - SIO_INITVALS |
|
|
|
; |
|
|
|
; |
|
|
|
@ -503,20 +1045,20 @@ SIOB_BUFSZ .EQU $ - SIOB_BUF ; SIZE OF RING BUFFER |
|
|
|
; SIO PORT TABLE |
|
|
|
; |
|
|
|
SIO_CFG: |
|
|
|
; SIO/2 CHANNEL A |
|
|
|
; SIO CHANNEL A |
|
|
|
.DB 0 ; DEVICE NUMBER (SET DURING INIT) |
|
|
|
.DB 0 ; SIO TYPE (SET DURING INIT) |
|
|
|
.DB 0 ; SIO CHANNEL (A) |
|
|
|
.DB SIOA_CMD ; BASE PORT (CMD PORT) |
|
|
|
.DW DEFSERCFG ; LINE CONFIGURATION |
|
|
|
.DW DEFSIOACFG ; LINE CONFIGURATION |
|
|
|
.DW SIOA_RCVBUF ; POINTER TO RCV BUFFER STRUCT |
|
|
|
; |
|
|
|
; SIO/2 CHANNEL B |
|
|
|
; SIO CHANNEL B |
|
|
|
.DB 0 ; DEVICE NUMBER (SET DURING INIT) |
|
|
|
.DB 0 ; SIO TYPE (SET DURING INIT) |
|
|
|
.DB 1 ; SIO CHANNEL (B) |
|
|
|
.DB SIOB_CMD ; BASE PORT (CMD PORT) |
|
|
|
.DW DEFSERCFG ; LINE CONFIGURATION |
|
|
|
.DW DEFSIOBCFG ; LINE CONFIGURATION |
|
|
|
.DW SIOB_RCVBUF ; POINTER TO RCV BUFFER STRUCT |
|
|
|
; |
|
|
|
SIO_CNT .EQU ($ - SIO_CFG) / 8 |
|
|
|
|