Browse Source

Add configurable baud rate through mode.com

pull/8/head
b1ackmai1er 8 years ago
committed by GitHub
parent
commit
206b3ffcd2
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 79
      Source/HBIOS/sio.asm

79
Source/HBIOS/sio.asm

@ -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

Loading…
Cancel
Save