From 05e2c5c52c705800ad053488ae0d951e18f27c70 Mon Sep 17 00:00:00 2001 From: Dean Netherton Date: Mon, 11 May 2020 14:17:13 +1000 Subject: [PATCH] tune.com: Added optional switch shift ocatves --- Source/Apps/Tune/Tune.asm | 115 +++++++++++++++++++------------------ Source/Apps/Tune/cli.inc | 54 ++++++++++++++++- Source/Doc/Applications.md | 20 ++++++- 3 files changed, 128 insertions(+), 61 deletions(-) diff --git a/Source/Apps/Tune/Tune.asm b/Source/Apps/Tune/Tune.asm index 79bb1aac..a6e4bfb4 100644 --- a/Source/Apps/Tune/Tune.asm +++ b/Source/Apps/Tune/Tune.asm @@ -95,6 +95,7 @@ Id .EQU 1 ; 5) Insert official identificator CALL CLI_ABRT_IF_OPT_FIRST CALL CLI_HAVE_HBIOS_SWITCH + CALL CLI_OCTAVE_ADJST JP CONTINUE CONTINUE: @@ -581,14 +582,14 @@ FILTYP .DB 0 ; Sound file type (TYPPT2, TYPPT3, TYPMYM) ; TMP .DB 0 ; work around use of undocumented Z80 -HBIOSOPT: .DB "--HBIOS", 0 HBIOSMD .DB 0 ; NON-ZERO IF USING HBIOS SOUND DRIVER, ZERO OTHERWISE +OCTAVEADJ .DB 0 ; AMOUNT TO ADJUST OCTAVE UP OR DOWN MSGBAN .DB "Tune Player for RomWBW v3.1, 25-Apr-2020",0 MSGUSE .DB "Copyright (C) 2020, Wayne Warthen, GNU GPL v3",13,10 .DB "PTxPlayer Copyright (C) 2004-2007 S.V.Bulba",13,10 .DB "MYMPlay by Marq/Lieves!Tuore",13,10,13,10 - .DB "Usage: TUNE .[PT2|PT3|MYM] [--hbios]",0 + .DB "Usage: TUNE .[PT2|PT3|MYM] [--hbios] [+tn|-tn]",0 MSGBIO .DB "Incompatible BIOS or version, " .DB "HBIOS v", '0' + RMJ, ".", '0' + RMN, " required",0 MSGPLT .DB "Hardware error, system not supported!",0 @@ -2003,74 +2004,74 @@ LOUT2 CALL NORMIO RET ; AND DONE PLAYVIAHBIOS: -; -; CHANNEL 0 (LEFT) -; - LD BC, (BF_SNDVOL*256)+0 ; SET VOLUME - LD A, (AYREGS + AmplA) ; DEVICE 0 - ADD A,A ; GET 4-BIT +; CHANNEL 0 + LD HL, AYREGS + AmplA + LD DE, AYREGS + TonA + LD B, 0 + CALL PLAYNOTE +; +; CHANNEL 1 + LD HL, AYREGS + AmplB + LD DE, AYREGS + TonB + LD B, 1 + CALL PLAYNOTE + +; CHANNEL 2 + LD HL, AYREGS + AmplC + LD DE, AYREGS + TonC + LD B, 2 + JP PLAYNOTE + +PLAYNOTE: + PUSH BC ; CHANNEL IN B + PUSH DE ; PERIOD ADDR IN DE + + LD A, (HL) + ADD A,A ; GET 4-BIT ADD A,A ; VOLUME 0-15 ADD A,A ; AND CONVERT - ADD A,A ; TO HBIOS + ADD A,A ; TO HBIOS LD L, A ; RANGE 0-255 + LD BC, (BF_SNDVOL*256)+0 ; SET VOLUME RST 08 ; - LD BC, (BF_SNDPRD*256)+0 ; SET PERIOD - LD HL, (AYREGS+TonA) ; DEVICE 0 + POP HL ; RESTORE PERIOD ADDR + LD A, (HL) ; DEVICE 0 + INC HL + LD H, (HL) + LD L, A LD A, H ; GET 12-BIT ONE PERIOD AND $0F ; MASK OFF HIGH - LD H, A ; NIBBLE - RST 08 -; - LD BC, (BF_SNDPLAY*256)+0 ; PLAY - LD D, 0 ; DEVICE 0 - RST 08 ; CHANNEL 0 -; -; CHANNEL 1 (MIDDLE) -; - LD BC, (BF_SNDVOL*256)+0 ; SET VOLUME - LD A, (AYREGS + AmplB) ; DEVICE 0 - ADD A,A ; GET 4-BIT - ADD A,A ; VOLUME 0-15 - ADD A,A ; AND CONVERT - ADD A,A ; TO HBIOS - LD L, A ; RANGE 0-255 - RST 08 -; + LD H, A ; NIBBLE + + LD A, (OCTAVEADJ) + OR A + JR Z, PLAYNOTE3 ; NO OCTAVE ADJUSTMENT + BIT 7, A + JR Z, PLAYNOTE2 ; OCTAVE DOWN ADJUSTMENT + +PLAYNOTE1: + ADD HL, HL ; MULTIPLE BY 2 FOR EACH OCTAVE + INC A + JR NZ, PLAYNOTE1 + JR PLAYNOTE3 + +PLAYNOTE2: + SRL H ; DIVIDE BY 2 FOR EACH OCTAVE + RR L + DEC A + JR NZ, PLAYNOTE2 + +PLAYNOTE3 LD BC, (BF_SNDPRD*256)+0 ; SET PERIOD - LD HL, (AYREGS+TonB) ; DEVICE 0 - ld A, H ; GET 12-BIT ONE PERIOD - AND $0F ; MASK OFF HIGH - LD H, A ; NIBBLE RST 08 ; + POP DE ; RESTORE CHANNEL IN D (FROM B) LD BC, (BF_SNDPLAY*256)+0 ; PLAY - LD D, 1 ; DEVICE 0 - RST 08 ; CHANNEL 0 -; -; CHANNEL 2 (RIGHT) -; - LD BC, (BF_SNDVOL*256)+0 ; SET VOLUME - LD A, (AYREGS + AmplC) ; DEVICE 0 - ADD A,A ; GET 4-BIT - ADD A,A ; VOLUME 0-15 - ADD A,A ; AND CONVERT - ADD A,A ; TO HBIOS - LD L, A ; RANGE 0-255 RST 08 -; - LD BC, (BF_SNDPRD*256)+0 ; SET PERIOD - LD HL, (AYREGS+TonC) ; DEVICE 0 - LD A, H ; GET 12-BIT ONE PERIOD - AND $0F ; MASK OFF HIGH - LD H, A ; NIBBLE - RST 08 -; - LD BC, (BF_SNDPLAY*256)+0 ; PLAY - LD D, 2 ; DEVICE 0 - RST 08 ; CHANNEL 0 - + RET + #ENDIF #IF ACBBAC diff --git a/Source/Apps/Tune/cli.inc b/Source/Apps/Tune/cli.inc index 9f8b2551..fc901068 100644 --- a/Source/Apps/Tune/cli.inc +++ b/Source/Apps/Tune/cli.inc @@ -1,5 +1,4 @@ - CLI_ABRT_IF_OPT_FIRST: LD A, (FCB+1) CP '-' ; OPTION FIRST OR - MISSING FILENAME? @@ -11,7 +10,7 @@ CLI_HAVE_HBIOS_SWITCH: LD DE, HBIOSOPT CALL STRINDEX JR NZ, CLI_HAVE_HBIOS_SWITCH1 - OR $FF ; MATCHED --HBIOS + OR $FF ; MATCHED --HBIOS LD (HBIOSMD), A LD BC,(BF_SYSGET*256)+BF_SND RST 08 ; CHECK WE HAVE @@ -35,4 +34,53 @@ CLI_ABRT_UNSUPPFILTYP: CLI_ABRT_UNSUPPFILTYP1: POP AF - RET \ No newline at end of file + RET + +CLI_OCTAVE_ADJST: ; SEARCH FOR OCTAVE ADJUSTMENT SWITCH (-n or +n) + LD HL, CLIARGS ; TEST FOR --HBIOS ON COMMAND LINE + LD DE, DOWN1 + CALL STRINDEX + JR NZ, CLI_OCTAVE_ADJST1 + + LD A, -1 + JR CLI_OCTAVE_ADJST5 + +CLI_OCTAVE_ADJST1: + LD HL, CLIARGS ; TEST FOR --HBIOS ON COMMAND LINE + LD DE, DOWN2 + CALL STRINDEX + JR NZ, CLI_OCTAVE_ADJST2 + + LD A, -2 + JR CLI_OCTAVE_ADJST5 + +CLI_OCTAVE_ADJST2: + LD HL, CLIARGS ; TEST FOR --HBIOS ON COMMAND LINE + LD DE, UP1 + CALL STRINDEX + JR NZ, CLI_OCTAVE_ADJST3 + + LD A, 1 + JR CLI_OCTAVE_ADJST5 + +CLI_OCTAVE_ADJST3: + LD HL, CLIARGS ; TEST FOR --HBIOS ON COMMAND LINE + LD DE, UP2 + CALL STRINDEX + JR NZ, CLI_OCTAVE_ADJST4 + + LD A, 2 + JR CLI_OCTAVE_ADJST5 + +CLI_OCTAVE_ADJST4: + LD A, 0 + +CLI_OCTAVE_ADJST5: + LD (OCTAVEADJ), A + RET + +HBIOSOPT: .DB "--HBIOS", 0 +DOWN1 .DB "-t1", 0 ; DOWN AN OCTAVE +DOWN2 .DB "-t2", 0 ; DOWN TWO OCTAVE +UP1 .DB "+t1", 0 ; UP AN OCTAVE +UP2 .DB "+t2", 0 ; UP TWO OCTAVE diff --git a/Source/Doc/Applications.md b/Source/Doc/Applications.md index 4a145533..236b02e2 100644 --- a/Source/Doc/Applications.md +++ b/Source/Doc/Applications.md @@ -949,6 +949,24 @@ accurately pace the sound file output. If no system timer is available, a delay loop is calculated instead. The delay loop will not be as accurate as the system timer. +There are two modes of operations. A direct hardware interface for the +AY-3-8910 or YM2149 chips, or a compatibility layer thru HBIOS supporting +the SN76489 chip. + +By default the application will attempt to interface directly to the sound +chip. The optional argument `--hbios` supplied after the filename, will +enable the application to use the HBIOS sound driver. + +The HBIOS mode also support other switch as desribed below. + +| Switch | Description | +| ----------- | ------------------------------------------------------ | +| `--hbios` | Utilise HBIOS' sound driver | +| `+t1` | Play tune an octave higher | +| `+t2` | Play tune two octaves higher | +| `-t1` | Play tune an octave lower | +| `-t2` | Play tune two octaves lower | + All RomWBW operating system boot disks include a selection of sound files in user area 3. @@ -960,4 +978,4 @@ software was adapted and embedded from pre-existing sources. The YM player code is from MYMPLAY 0.4 by Lieves!Tuore and the PT player code is (c)2004-2007 S.V.Bulba . -The source code is provided in the RomWBW distribution. \ No newline at end of file +The source code is provided in the RomWBW distribution.