Browse Source

tune.com: Added optional switch shift ocatves

pull/127/head
Dean Netherton 6 years ago
parent
commit
05e2c5c52c
  1. 115
      Source/Apps/Tune/Tune.asm
  2. 54
      Source/Apps/Tune/cli.inc
  3. 20
      Source/Doc/Applications.md

115
Source/Apps/Tune/Tune.asm

@ -95,6 +95,7 @@ Id .EQU 1 ; 5) Insert official identificator
CALL CLI_ABRT_IF_OPT_FIRST CALL CLI_ABRT_IF_OPT_FIRST
CALL CLI_HAVE_HBIOS_SWITCH CALL CLI_HAVE_HBIOS_SWITCH
CALL CLI_OCTAVE_ADJST
JP CONTINUE JP CONTINUE
CONTINUE: CONTINUE:
@ -581,14 +582,14 @@ FILTYP .DB 0 ; Sound file type (TYPPT2, TYPPT3, TYPMYM)
; ;
TMP .DB 0 ; work around use of undocumented Z80 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 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 MSGBAN .DB "Tune Player for RomWBW v3.1, 25-Apr-2020",0
MSGUSE .DB "Copyright (C) 2020, Wayne Warthen, GNU GPL v3",13,10 MSGUSE .DB "Copyright (C) 2020, Wayne Warthen, GNU GPL v3",13,10
.DB "PTxPlayer Copyright (C) 2004-2007 S.V.Bulba",13,10 .DB "PTxPlayer Copyright (C) 2004-2007 S.V.Bulba",13,10
.DB "MYMPlay by Marq/Lieves!Tuore",13,10,13,10 .DB "MYMPlay by Marq/Lieves!Tuore",13,10,13,10
.DB "Usage: TUNE <filename>.[PT2|PT3|MYM] [--hbios]",0
.DB "Usage: TUNE <filename>.[PT2|PT3|MYM] [--hbios] [+tn|-tn]",0
MSGBIO .DB "Incompatible BIOS or version, " MSGBIO .DB "Incompatible BIOS or version, "
.DB "HBIOS v", '0' + RMJ, ".", '0' + RMN, " required",0 .DB "HBIOS v", '0' + RMJ, ".", '0' + RMN, " required",0
MSGPLT .DB "Hardware error, system not supported!",0 MSGPLT .DB "Hardware error, system not supported!",0
@ -2003,74 +2004,74 @@ LOUT2 CALL NORMIO
RET ; AND DONE RET ; AND DONE
PLAYVIAHBIOS: 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 ; VOLUME 0-15
ADD A,A ; AND CONVERT ADD A,A ; AND CONVERT
ADD A,A ; TO HBIOS
ADD A,A ; TO HBIOS
LD L, A ; RANGE 0-255 LD L, A ; RANGE 0-255
LD BC, (BF_SNDVOL*256)+0 ; SET VOLUME
RST 08 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 LD A, H ; GET 12-BIT ONE PERIOD
AND $0F ; MASK OFF HIGH 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 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 RST 08
; ;
POP DE ; RESTORE CHANNEL IN D (FROM B)
LD BC, (BF_SNDPLAY*256)+0 ; PLAY 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 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 RET
#ENDIF #ENDIF
#IF ACBBAC #IF ACBBAC

54
Source/Apps/Tune/cli.inc

@ -1,5 +1,4 @@
CLI_ABRT_IF_OPT_FIRST: CLI_ABRT_IF_OPT_FIRST:
LD A, (FCB+1) LD A, (FCB+1)
CP '-' ; OPTION FIRST OR - MISSING FILENAME? CP '-' ; OPTION FIRST OR - MISSING FILENAME?
@ -11,7 +10,7 @@ CLI_HAVE_HBIOS_SWITCH:
LD DE, HBIOSOPT LD DE, HBIOSOPT
CALL STRINDEX CALL STRINDEX
JR NZ, CLI_HAVE_HBIOS_SWITCH1 JR NZ, CLI_HAVE_HBIOS_SWITCH1
OR $FF ; MATCHED --HBIOS
OR $FF ; MATCHED --HBIOS
LD (HBIOSMD), A LD (HBIOSMD), A
LD BC,(BF_SYSGET*256)+BF_SND LD BC,(BF_SYSGET*256)+BF_SND
RST 08 ; CHECK WE HAVE RST 08 ; CHECK WE HAVE
@ -35,4 +34,53 @@ CLI_ABRT_UNSUPPFILTYP:
CLI_ABRT_UNSUPPFILTYP1: CLI_ABRT_UNSUPPFILTYP1:
POP AF POP AF
RET
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

20
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 available, a delay loop is calculated instead. The delay loop will not
be as accurate as the system timer. 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 All RomWBW operating system boot disks include a selection of sound
files in user area 3. 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 player code is from MYMPLAY 0.4 by Lieves!Tuore and the PT player code
is (c)2004-2007 S.V.Bulba <vorobey@mail.khstu.ru>. is (c)2004-2007 S.V.Bulba <vorobey@mail.khstu.ru>.
The source code is provided in the RomWBW distribution.
The source code is provided in the RomWBW distribution.

Loading…
Cancel
Save