From 989ab9bf051e48e8b2ff1371fcc0786ae8dec291 Mon Sep 17 00:00:00 2001 From: b1ackmai1er Date: Sun, 10 May 2020 22:43:03 +0800 Subject: [PATCH] Sound devices in Device Summary --- Source/HBIOS/hbios.asm | 74 +++++++++++++++++++++++++++++++++++++++--- Source/HBIOS/hbios.inc | 6 ++++ Source/HBIOS/spk.asm | 4 +-- Source/HBIOS/util.asm | 8 +++++ 4 files changed, 85 insertions(+), 7 deletions(-) diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index fe3303e0..7dba310b 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -3541,10 +3541,15 @@ PRTSUM: LD C,BF_SYSGET_DIOCNT ; DISK DRIVES LD HL,PS_DISK CALL PRT_ALLD - +; LD C,BF_SYSGET_VDACNT ; VIDEO DEVICES LD HL,PS_VIDEO CALL PRT_ALLD + + LD C,BF_SYSGET_SNDCNT ; SOUND DEVICES + LD HL,PS_SOUND + CALL PRT_ALLD +; RET ; PRT_ALLD: @@ -3887,6 +3892,56 @@ PS_PRTVC: CALL PRTDECB RET ; +; PRINT SOUND CONFIG +; +PS_SOUND: + PUSH BC + + ; UNIT COLUMN + PRTS("Sound $") + LD A,C ; MOVE UNIT NUM TO A + CALL PRTDECB ; PRINT IT + CP 10 ; CHECK FOR MULTIPLE DIGITS + CALL C,PC_SPACE ; EXTRA SPACE IF NEEDED + PRTS(" $") ; PAD TO NEXT COLUMN + + ; DEVICE COLUMN + + PUSH BC ; + LD E,C + XOR A + LD DE,PS_SDSND ; POINT TO DEVICE TYPE NAME TABLE + CALL PRTIDXDEA ; PRINT DEVICE NMEMONIC PADDED TO FIELD WIDTH + LD A,C ; MOVE UNIT NUM TO A + CALL PRTDECB ; PRINT IT + CALL PC_COLON + CP 10 ; CHECK FOR MULTIPLE DIGITS + CALL C,PC_SPACE ; EXTRA SPACE IF NEEDED + LD A,(PRTIDXCNT) + SUB 9+1 + CPL + CALL PS_PAD + POP BC + + ; DEVICE TYPE +; + LD B,BF_SNDQUERY ; FUNC=GET DEVICE INFO, UNIT NUM STILL IN C + LD E,BF_SNDQ_DEV + RST 08 + LD A,B + DEC A + LD DE,PS_SDSN76489 + CALL PRTIDXDEA + LD A,(PRTIDXCNT) + SUB 18+1 + CPL + CALL PS_PAD ; PAD N SPACES (SPECIFIED IN A) +; + CALL NEWLINE +; + POP BC + RET +; ; PRINT DEVICE NMEMONIC, DEVTYP/NUM SPECIFIED IN DE ; PS_PRTDEV: @@ -3895,6 +3950,7 @@ PS_PRTDEV: RRCA RRCA RRCA +PS_PRTDEV1: RLCA ; X2 FOR WORD OFFSET IN STRING TABLE CALL ADDHLA LD A,(HL) @@ -3916,10 +3972,9 @@ PS_PRTNUL: LD HL,PS_STRNUL ; FALL THRU TO PS_PRT ; -; +; PRINT STRING AT (HL), $ TERM, RETURN CHARS PRINTED IN C ; PS_PRT: - ; PRINT STRING AT (HL), $ TERM, RETURN CHARS PRINTED IN C LD C,0 ; INIT CHAR COUNT PS_PRT1: LD A,(HL) ; GET CHAR @@ -3930,10 +3985,9 @@ PS_PRT1: INC C ; BUMP COUNTER JR PS_PRT1 ; AND LOOP ; -; +; PAD N SPACES SPECIFIED IN A ; PS_PAD: - ; PAD N SPACES SPECIFIED IN A LD B,A LD A,' ' PS_PAD1: @@ -4042,6 +4096,16 @@ PS_VDVGA .TEXT "VGA$" ; PS_VTCRT .TEXT "CRT$" ; +; SOUND DEVICE STRINGS +; +PS_SDSND .TEXT "SND$" +; +; SOUND TYPE STRINGS +; +PS_SDSN76489 .TEXT "SN76489$" +PS_SDAY38910 .TEXT "AY-3-8910$" +PS_SDBITMODE .TEXT "BITMODE$" +; ; 0 1 2 3 4 5 6 7 ; 01234567890123456789012345678901234567890123456789012345678901234567890123456789 PS_STRHDR .TEXT "Unit Device Type Capacity/Mode\r\n" diff --git a/Source/HBIOS/hbios.inc b/Source/HBIOS/hbios.inc index 068114c3..45875dde 100644 --- a/Source/HBIOS/hbios.inc +++ b/Source/HBIOS/hbios.inc @@ -172,6 +172,12 @@ VDADEV_CVDU .EQU $10 ; ECB COLOR VDU - MOS 8563 VDADEV_NEC .EQU $20 ; ECB UPD7220 - NEC UPD7220 VDADEV_TMS .EQU $30 ; N8 ONBOARD VDA SUBSYSTEM - TMS 9918 VDADEV_VGA .EQU $40 ; ECB VGA3 - HITACHI HD6445 +; +; SOUND DEVICE IDS +; +SNDDEV_SN .EQU $00 ; SN76489 +SNDDEV_AY .EQU $10 ; AY-3-8910 +SNDDEV_BM .EQU $20 ; BITMODE ;; ;; EMULATION TYPES - moved to std.asm ;; diff --git a/Source/HBIOS/spk.asm b/Source/HBIOS/spk.asm index cd17c039..74678e2c 100644 --- a/Source/HBIOS/spk.asm +++ b/Source/HBIOS/spk.asm @@ -206,7 +206,7 @@ SP_PLAY: ; SP_BEEPER: PUSH IX - DI ; Disable the interrupt for the duration of a 'beep'. + HB_DI ; Disable the interrupt for the duration of a 'beep'. LD A,L ; Save L temporarily. SRL L ; Each '1' in the L register is to count 4 T states, but take INT (L/4) and count 16 T states instead. SRL L @@ -259,7 +259,7 @@ BE_AGAIN: INC C ; Add 16 T states as this path is shorter. JP (IX) ; Jump back. BE_END: - EI + HB_EI POP IX RET ; diff --git a/Source/HBIOS/util.asm b/Source/HBIOS/util.asm index 8dc066db..3c7b9a1a 100644 --- a/Source/HBIOS/util.asm +++ b/Source/HBIOS/util.asm @@ -343,6 +343,8 @@ PRTIDXDEA: PUSH BC LD C,A ; INDEX COUNT OR A + LD A,0 + LD (PRTIDXCNT),A ; RESET CHARACTER COUNT PRTIDXDEA1: JR Z,PRTIDXDEA3 PRTIDXDEA2: @@ -357,6 +359,9 @@ PRTIDXDEA3: ; CALL WRITESTR ; FALL THROUGH TO WRITESTR ; RET ; +PRTIDXCNT: + .DB 0 ; CHARACTER COUNT +; ; OUTPUT A '$' TERMINATED STRING AT DE ; WRITESTR: @@ -366,6 +371,9 @@ WRITESTR1: CP '$' ; TEST FOR STRING TERMINATOR JP Z,WRITESTR2 CALL COUT + LD A,(PRTIDXCNT) + INC A + LD (PRTIDXCNT),A INC DE JP WRITESTR1 WRITESTR2: