|
|
|
@ -757,6 +757,32 @@ 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: |
|
|
|
; DETERMINE DIVISOR |
|
|
|
PUSH DE ; SAVE CONFIG |
|
|
|
CALL SIO_COMPDIV ; COMPUTE DIVISOR TO BC |
|
|
|
POP DE ; RESTORE CONFIG |
|
|
|
RET NZ ; ABORT IF COMPDIV FAILS! |
|
|
|
; |
|
|
|
; GOT A DIVISOR, COMMIT NEW CONFIG |
|
|
|
LD (IY + 4),E ; SAVE LOW WORD |
|
|
|
LD (IY + 5),D ; SAVE HI WORD |
|
|
|
|
|
|
|
; *** PUT CODE IN HERE TO UPDATE SIO PROGRAMMING TABLE BEFORE IT IS PROGRAMMED. |
|
|
|
|
|
|
|
HB_DI ; AVOID CONFLICTS |
|
|
|
; |
|
|
|
; PROGRAM THE SIO/2 CHIP CHANNEL |
|
|
|
@ -834,6 +860,59 @@ SIO_DETECT: |
|
|
|
; |
|
|
|
; |
|
|
|
; |
|
|
|
SIO_COMPDIV: |
|
|
|
; WE WANT TO DETERMINE A DIVISOR FOR THE UART CLOCK ; PS FROM UART.ASM |
|
|
|
; THAT RESULTS IN THE DESIRED BAUD RATE. |
|
|
|
; |
|
|
|
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 |
|
|
|
LD E,$04 ; /1 N,8,1 |
|
|
|
JR Z,BREX |
|
|
|
CP SIOBAUD2 |
|
|
|
LD E,$44 ; /16 N,8,1 |
|
|
|
JR Z,BREX |
|
|
|
CP SIOBAUD3 |
|
|
|
LD E,$84 ; /32 N,8,1 |
|
|
|
JR Z,BREX |
|
|
|
CP SIOBAUD4 |
|
|
|
LD E,$C4 ; /64 N,8,1 |
|
|
|
JR Z,BREX ; RET NZ |
|
|
|
|
|
|
|
#IF (SIODEBUG) |
|
|
|
PUSH AF |
|
|
|
PRTS(" BR FAIL[$" |
|
|
|
CALL PRTHEXBYTE |
|
|
|
PRTC(']' |
|
|
|
POP AF |
|
|
|
#ENDIF |
|
|
|
|
|
|
|
RET ; NZ stus here indicating fail. |
|
|
|
|
|
|
|
BREX: ; Z status here indicating success |
|
|
|
LD A,E |
|
|
|
LD DE,SIO_INITVALS+3 |
|
|
|
LD (DE),A |
|
|
|
|
|
|
|
#IF (SIODEBUG) |
|
|
|
PUSH AF |
|
|
|
PRTS(" MODE[$") |
|
|
|
CALL PRTHEXBYTE |
|
|
|
PRTC(']') |
|
|
|
POP AF |
|
|
|
|
|
|
|
#ENDIF |
|
|
|
|
|
|
|
RET |
|
|
|
SIO_PRTCFG: |
|
|
|
; ANNOUNCE PORT |
|
|
|
CALL NEWLINE ; FORMATTING |
|
|
|
|