diff --git a/Source/HBIOS/asci.asm b/Source/HBIOS/asci.asm index dbd4093a..b776363a 100644 --- a/Source/HBIOS/asci.asm +++ b/Source/HBIOS/asci.asm @@ -103,7 +103,7 @@ ASCI_INIT: LD A,Z180_RDR0 ; LOAD RDR PORT ADDRESS CALL PRTHEXBYTE ; PRINT IT - CALL PC_SPACE ; FORMATTING + PRTS(" MODE=$") ; FORMATTING LD DE,(ASCI0_CONFIG) ; LOAD CONFIG CALL PS_PRTSC0 ; PRINT IT ; @@ -117,7 +117,7 @@ ASCI_INIT: LD A,Z180_RDR1 ; LOAD RDR PORT ADDRESS CALL PRTHEXBYTE ; PRINT IT - CALL PC_SPACE ; FORMATTING + PRTS(" MODE=$") ; FORMATTING LD DE,(ASCI1_CONFIG) ; LOAD CONFIG CALL PS_PRTSC0 ; PRINT IT ; @@ -214,20 +214,47 @@ ASCI0_INITDEV1: LD L,A ; MOVE TO L LD H,0 ; CLEAR MSB PUSH DE ; SAVE CONFIG - CALL ASCI_CNTLB ; DERIVE CNTLB VALUE + CALL ASCI_CNTLB ; DERIVE CNTLB VALUE IN C POP DE ; RESTORE CONFIG ;CALL TSTPT RET NZ ; ABORT ON ERROR - LD (ASCI0_CONFIG),DE ; RECORD UPDATED CONFIG ; + LD B,$64 ; B := DEFAULT CNTLB VALUE + + ; DATA BITS + LD A,E ; LOAD CONFIG BYTE + AND $03 ; ISOLATE DATA BITS + CP $03 ; 8 DATA BITS? + JR Z,ASCI0_INITDEV2 ; IF SO, NO CHG, CONTINUE + RES 2,B ; RESET CNTLA BIT 2 FOR 7 DATA BITS + +ASCI0_INITDEV2: + ; STOP BITS + BIT 2,E ; TEST STOP BITS CONFIG BIT + JR Z,ASCI0_INITDEV3 ; IF CLEAR, NO CHG, CONTINUE + SET 0,B ; SET CNTLA BIT 0 FOR 2 STOP BITS + +ASCI0_INITDEV3: + ; PARITY ENABLE + BIT 3,E ; TEST PARITY ENABLE CONFIG BIT + JR Z,ASCI0_INITDEV4 ; NO PARITY, SKIP ALL PARITY CHGS + SET 1,B ; SET CNTLA BIT 1 FOR PARITY ENABLE + + ; PARITY EVEN/ODD + BIT 4,E ; TEST EVEN PARITY CONFIG BIT + JR NZ,ASCI0_INITDEV4 ; EVEN PARITY, NO CHG, CONTINUE + SET 4,C ; SET CNTLB BIT 4 FOR ODD PARITY + +ASCI0_INITDEV4: ; IMPLEMENT CONFIGURATION - LD A,66H ; LOAD DEFAULT ASEXT VALUE + LD A,$66 ; LOAD DEFAULT ASEXT VALUE OUT0 (Z180_ASEXT0),A ; SET IT - LD A,64H ; LOAD DEFAULT CNTLA VALUE - OUT0 (Z180_CNTLA0),A ; SET IT - LD A,C ; LOAD CNTLB VALUE DETERMINED ABOVE - OUT0 (Z180_CNTLB0),A ; SET IT + LD A,B ; FINAL CNTLA VALUE TO ACCUM + OUT0 (Z180_CNTLA0),A ; WRITE TO CNTLA REGISTER + LD A,C ; FINAL CNTLB VALUE TO ACCUM + OUT0 (Z180_CNTLB0),A ; WRITE TO CNTLA REGISTER ; + LD (ASCI0_CONFIG),DE ; RECORD UPDATED CONFIG XOR A ; SIGNAL SUCCESS RET ; DONE ; @@ -325,16 +352,43 @@ ASCI1_INITDEV1: POP DE ; RESTORE CONFIG ;CALL TSTPT RET NZ ; ABORT ON ERROR - LD (ASCI1_CONFIG),DE ; RECORD UPDATED CONFIG ; + LD B,$64 ; B := DEFAULT CNTLB VALUE + + ; DATA BITS + LD A,E ; LOAD CONFIG BYTE + AND $03 ; ISOLATE DATA BITS + CP $03 ; 8 DATA BITS? + JR Z,ASCI1_INITDEV2 ; IF SO, NO CHG, CONTINUE + RES 2,B ; RESET CNTLA BIT 2 FOR 7 DATA BITS + +ASCI1_INITDEV2: + ; STOP BITS + BIT 2,E ; TEST STOP BITS CONFIG BIT + JR Z,ASCI1_INITDEV3 ; IF CLEAR, NO CHG, CONTINUE + SET 0,B ; SET CNTLA BIT 0 FOR 2 STOP BITS + +ASCI1_INITDEV3: + ; PARITY ENABLE + BIT 3,E ; TEST PARITY ENABLE CONFIG BIT + JR Z,ASCI1_INITDEV4 ; NO PARITY, SKIP ALL PARITY CHGS + SET 1,B ; SET CNTLA BIT 1 FOR PARITY ENABLE + + ; PARITY EVEN/ODD + BIT 4,E ; TEST EVEN PARITY CONFIG BIT + JR NZ,ASCI1_INITDEV4 ; EVEN PARITY, NO CHG, CONTINUE + SET 4,C ; SET CNTLB BIT 4 FOR ODD PARITY + +ASCI1_INITDEV4: ; IMPLEMENT CONFIGURATION - LD A,66H ; LOAD DEFAULT ASEXT VALUE + LD A,$66 ; LOAD DEFAULT ASEXT VALUE OUT0 (Z180_ASEXT1),A ; SET IT - LD A,64H ; LOAD DEFAULT CNTLA VALUE - OUT0 (Z180_CNTLA1),A ; SET IT - LD A,C ; LOAD CNTLB VALUE DETERMINED ABOVE - OUT0 (Z180_CNTLB1),A ; SET IT + LD A,B ; FINAL CNTLA VALUE TO ACCUM + OUT0 (Z180_CNTLA1),A ; WRITE TO CNTLA REGISTER + LD A,C ; FINAL CNTLB VALUE TO ACCUM + OUT0 (Z180_CNTLB1),A ; WRITE TO CNTLA REGISTER ; + LD (ASCI1_CONFIG),DE ; RECORD UPDATED CONFIG XOR A ; SIGNAL SUCCESS RET ; DONE ; diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index 94ccb2f5..4560e809 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -2548,7 +2548,6 @@ PS_PRTVT: PS_PRTVC: PRTS("Text$") CALL PC_COMMA - CALL PC_SPACE LD B,BF_VDAQRY ; FUNC: QUERY FOR VDA CONFIG RST 08 ; D:=ROWS, E:=COLS LD A,E @@ -2652,10 +2651,10 @@ PS_DTOTHER .TEXT "???$" ; ; FLOPPY ATTRIBUTE STRINGS ; -PS_FLP8 .TEXT "8\", $" -PS_FLP5 .TEXT "5.25\", $" -PS_FLP3 .TEXT "3.5\", $" -PS_FLPN .TEXT "???\", $" +PS_FLP8 .TEXT "8\",$" +PS_FLP5 .TEXT "5.25\",$" +PS_FLP3 .TEXT "3.5\",$" +PS_FLPN .TEXT "???\",$" ; PS_FLPSS .TEXT "SS/$" PS_FLPDS .TEXT "DS/$" diff --git a/Source/HBIOS/uart.asm b/Source/HBIOS/uart.asm index 21d3d9ac..4bdea7f6 100644 --- a/Source/HBIOS/uart.asm +++ b/Source/HBIOS/uart.asm @@ -501,7 +501,7 @@ UART_PRTCFG: OR A ; SET FLAGS RET Z ; IF ZERO, NOT PRESENT ; - CALL PC_SPACE ; FORMATTING + PRTS(" MODE=$") ; FORMATTING LD E,(IY + 4) ; LOAD CONFIG LD D,(IY + 5) ; ... WORD TO DE CALL PS_PRTSC0 ; PRINT CONFIG