diff --git a/Source/Apps/VGM/VGMPLAY.ASM b/Source/Apps/VGM/VGMPLAY.ASM index c0c1ddd7..b308ca88 100644 --- a/Source/Apps/VGM/VGMPLAY.ASM +++ b/Source/Apps/VGM/VGMPLAY.ASM @@ -317,7 +317,7 @@ PLAY #IFDEF SBCV2004 CALL SLOWIO #ENDIF - LD IX,DEV_FLAG + LD IX,VGM_DEV LD HL, (VGMPOS) ; Start processing VGM commands NEXT LD A, (HL) INC HL @@ -335,6 +335,8 @@ NEXT LD A, (HL) NEXT1 CP VGM_GG_W ; Game Gear SN76489 stereo. Ignored JR NZ, PSG + LD IX,VGM_DEV + SET 6,(IX+0) INC HL JR NEXT @@ -343,7 +345,7 @@ PSG CP VGM_PSG_W ; Write byte to SN76489. LD A, (HL) INC HL OUT (PSGREG), A - LD IX,DEV_FLAG + LD IX,VGM_DEV SET 0,(IX+0) JR NEXT @@ -352,7 +354,7 @@ PSG2 CP 30H ; Write byte to second SN76489. LD A, (HL) INC HL OUT (PSG2REG), A - LD IX,DEV_FLAG + LD IX,VGM_DEV SET 1,(IX+0) JR NEXT @@ -369,14 +371,14 @@ AY CP 0A0H LD A, (HL) INC HL OUT (RDAT2), A - LD IX,DEV_FLAG + LD IX,VGM_DEV SET 2,(IX+0) JR NEXT AY1 OUT (RSEL), A LD A, (HL) INC HL OUT (RDAT), A - LD IX,DEV_FLAG + LD IX,VGM_DEV SET 3,(IX+0) JR NEXT @@ -391,12 +393,12 @@ YM: CP 052H LD A,(HL) OUT (YMDAT),A INC HL - LD IX,DEV_FLAG + LD IX,VGM_DEV SET 4,(IX+0) JP NEXT - +; YM2: CP 053H - JR NZ, PCM + JR NZ,WAITNN LD A,(HL) OUT (YM2SEL),A @@ -404,12 +406,11 @@ YM2: CP 053H LD A,(HL) OUT (YM2DAT),A INC HL - LD IX,DEV_FLAG + LD IX,VGM_DEV SET 4,(IX+0) JP NEXT - -PCM: -WAITNN CP 61H ; Wait nn samples +; +WAITNN: CP 61H ; Wait nn samples JR NZ, WAIT60 LD A, (HL) INC HL @@ -420,21 +421,21 @@ WAITNN CP 61H ; Wait nn samples LD H, D LD (VGMDLY), HL RET - +; WAIT60 CP VGM_W735 ; Wait 735 samples (60Hz) JR NZ, WAIT50 LD (VGMPOS), HL LD HL, D50 LD (VGMDLY), HL RET - +; WAIT50 CP VGM_W882 ; Wait 882 samples (50Hz) JR NZ, WAIT1 LD (VGMPOS), HL LD HL, D60 LD (VGMDLY), HL RET - +; WAIT1 CP 70H ; WAIT 0-15 SAMPLES JR C, UNK ; CODES 70-7FH CP 80H @@ -444,22 +445,23 @@ WAIT1 CP 70H ; WAIT 0-15 SAMPLES LD H, 0 LD (VGMDLY), HL RET - -UNK: CALL PRTDOT - CALL PRTHEX +; +UNK: LD IX,VGM_DEV ; Set flag for + SET 6,(IX+0) ; unknown device + INC HL ; Try and skip JP NEXT ; ;------------------------------------------------------------------------------ ; Display VGM Devices detected during playback. ;------------------------------------------------------------------------------ ; -VGMDEVICES: LD DE,MSG_PO +VGMDEVICES: LD DE,MSG_PO ; Played on ... CALL PRTSTR ; LD A,(IX+0) PUSH AF - - LD DE,MSG_SN +; + LD DE,MSG_SN ; SN76489 Devices CALL CHKDEV ; POP AF @@ -467,22 +469,31 @@ VGMDEVICES: LD DE,MSG_PO SRL A PUSH AF ; - LD DE,MSG_AY + LD DE,MSG_AY ; AY-3-8910 Devices CALL CHKDEV ; POP AF SRL A SRL A -; PUSH AF - - LD DE,MSG_YM + PUSH AF +; + LD DE,MSG_YM ; YM-2612 Devices + CALL CHKDEV ; -CHKDEV: AND %00000011 + POP AF + SRL A SRL A - ADC A,'0' +; PUSH AF +; + LD DE,MSG_UNK ; Unknown Device Code detected +; CALL CHKDEV +; +CHKDEV: AND %00000011 ; Display + SRL A ; number of + ADC A,'0' ; devices CP '0' - RET Z - CALL PRTCHR + RET Z ; Skip if not + CALL PRTCHR ; used. CALL PRTSTR RET ; @@ -558,9 +569,17 @@ FASTIO: OUT (RTCIO),A ; NORMAL CLOCK SPEED #ENDIF RET - +; +;------------------------------------------------------------------------------ +; External routines. +;------------------------------------------------------------------------------ +; #INCLUDE "printing.inc" - +; +;------------------------------------------------------------------------------ +; Strings and constants. +;------------------------------------------------------------------------------ +; MSG_WELC: .DB "VGM Player for RomWBW v0.2, 27-Nov-2021",CR,LF ; .DB "J.B. Langston/Marco Maccaferri/Phil Summers",CR,LF .DB 0 @@ -569,6 +588,7 @@ MSG_PO .DB "Played on : ",0 MSG_YM: .DB "xYM-2612 ",0 MSG_SN: .DB "xSN76489 ",0 MSG_AY: .DB "xAY-3-8910 ",0 +MSG_UNK .DB "xUnsupported device encountered", CR, LF, 0 MSG_EXIT: .DB "FINISHED.",CR,LF,0 MSG_NOFILE: .DB "File not found", CR, LF, 0 MSG_MEM: .DB "File to big", CR, LF, 0 @@ -579,8 +599,9 @@ MSG_MEM: .DB "File to big", CR, LF, 0 ; VGMPOS .DW 0 VGMDLY .DW 0 +VGMUNK_F .DB 0 ; Flag for unknown device +VGM_DEV .DB %00000000 ; 000YAASS -DEV_FLAG .DB %00000000 ; 000YAASS OLDSTACK .DW 0 ; original stack pointer .DS 40H ; space for stack STACK ; top of stack