Browse Source

Update Scales.asm

pull/312/head
b1ackmai1er 3 years ago
parent
commit
e409391f14
  1. 160
      Source/Apps/TEST/sound/Scales.asm

160
Source/Apps/TEST/sound/Scales.asm

@ -1,49 +1,60 @@
; ;
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
; Play Scales using HBIOS
; PLAY SCALES USING HBIOS
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
; ;
FCB .EQU $5C ; Location of default FCB FCB .EQU $5C ; Location of default FCB
BDOS .EQU $0005 BDOS .EQU $0005
STEP .EQU 4 ; NOTE STEP I.E. 1 SEMITONE
;
.ORG $0100 .ORG $0100
; ;
LD (OLDSTACK),SP ; save old stack pointer LD (OLDSTACK),SP ; save old stack pointer
LD SP,STACK ; set new stack pointer LD SP,STACK ; set new stack pointer
;
;------------------------------------------------------------------------------
; GET DEVICE # FROM COMMAND LINE
;------------------------------------------------------------------------------
; ;
LD A,(FCB+1) ; GET FIRST CHAR LD A,(FCB+1) ; GET FIRST CHAR
CP '/' ; IS IT INDICATING AN ARGUMENT
LD A,0 ; ASSUME DEVICE 0
JR NZ,NO_ARG ;
LD A,(FCB+2) ; GET NEXT CHARACTER
SUB '0' ; CALCULATE DEVICE #
LD (DEVICE),A ;
NO_ARG: LD C,A ; GET & DISPLAY # CHANNELS
SUB ' '
JR Z,NO_ARG
SUB '0'-' '
JP C,EXIT
;
;------------------------------------------------------------------------------
; DISPLAY DEVICE AND NUMBER OF CHANNELS
;------------------------------------------------------------------------------
;
NO_ARG: LD (DEVICE),A ;
LD DE,TXT_DEV ; DEVICE:
CALL PRTSTR
CALL PRTDECB
LD C,A ; GET DEVICE ID
LD A,':'
CALL PRTCHR
LD B,$55 LD B,$55
PUSH BC
LD E,4
RST 08
LD DE,TXT_NAME
LD A,B
RRCA \ RRCA \ RRCA \ RRCA
CALL PRTIDXDEA ; SHOW NAME
LD DE,TXT_CH
CALL PRTSTR
;
POP BC ; GET & DISPLAY # CHANNELS
LD E,1 LD E,1
RST 08 RST 08
LD A,B LD A,B
CALL PRTHEX
call CRLF
LD B,1
;
CALL TST_TONE
; CALL TST_VOL
CALL PRTDECB
CALL CRLF ; NUMBER OF CHANNELS IS IN B
; ;
EXIT: LD SP, (OLDSTACK) ; Exit to CP/M
RST 00H
DI
HALT
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
; FOR EACH CHANNEL PLAY SCALES FROM HIGHEST TO LOWEST. B = # CHANNELS
; LOOP THROUGH EACH CHANNEL
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
TST_TONE: LD A,(DEVICE) ; C CONTAINS DEVICE
CH__TONE: LD A,(DEVICE) ; C CONTAINS DEVICE
LD C,A ; THROUGH THIS LOOP LD C,A ; THROUGH THIS LOOP
; ;
PUSH BC PUSH BC
@ -52,15 +63,17 @@ TST_TONE: LD A,(DEVICE) ; C CONTAINS DEVICE
POP BC POP BC
; ;
PUSH BC PUSH BC
LD B,51H ; VOLUME HALF
LD L,80H
LD B,51H ; VOLUME FULL
LD L,0FFH
RST 08 RST 08
POP BC POP BC
; ;
LD A,B LD A,B
TST_TONE_LP: DEC A TST_TONE_LP: DEC A
LD (CHANNEL),A ; SAVE CURRENT CHANNEL LD (CHANNEL),A ; SAVE CURRENT CHANNEL
CALL SCALES ; PLAY SCALE
CALL TST_SCALES ; SCALES TEST
; CALL TST_VOLUME ; VOLUME TEST
CALL CRLF
DJNZ TST_TONE_LP DJNZ TST_TONE_LP
; ;
PUSH BC PUSH BC
@ -68,23 +81,45 @@ TST_TONE_LP: DEC A
RST 08 RST 08
POP BC POP BC
; ;
RET
;------------------------------------------------------------------------------
; RESTORE STACK & EXIT
;------------------------------------------------------------------------------
; ;
EXIT: LD SP, (OLDSTACK) ; Exit to CP/M
RST 00H
DI
HALT
;
;------------------------------------------------------------------------------
; PLAY SCALES FROM HIGHEST HBIOS NOTE TO LOWEST
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
; ;
SCALES: PUSH BC
TST_SCALES: PUSH BC
PUSH AF PUSH AF
;
LD HL,380 ; START NOTE LD HL,380 ; START NOTE
LD (NOTE),HL ; Top of Octave 7 is 343 LD (NOTE),HL ; Top of Octave 7 is 343
LD B,51H ; VOLUME HIGH
LD L,0FFH
PUSH BC
RST 08
POP BC
; ;
NEXT0: PUSH BC NEXT0: PUSH BC
LD BC,(NOTE)
CALL PRTHEXWORD
CALL PRTDOT
;
LD DE,TXT_TSTCH ; DISPLAY CHANNEL
CALL PRTSTR
LD A,(CHANNEL)
CALL PRTDECB
;
LD DE,TXT_NOTE ; DISPLAY NOTE
CALL PRTSTR
LD HL,(NOTE)
CALL PRTDECW
POP BC POP BC
; ;
LD B,53H ; NOTE
LD B,53H ; SET NOTE
LD HL,(NOTE) LD HL,(NOTE)
PUSH BC PUSH BC
RST 08 RST 08
@ -93,7 +128,7 @@ NEXT0: PUSH BC
OR A ; DID DRIVER FAIL OR A ; DID DRIVER FAIL
JR Z,NEXT4 ; THIS NOTE ? JR Z,NEXT4 ; THIS NOTE ?
LD A,'n'
LD DE,TXT_BAD_N
CALL FAILMSG CALL FAILMSG
JR SKIP JR SKIP
; ;
@ -111,9 +146,9 @@ NEXT4: LD B,57H ; DURATION
POP BC POP BC
; ;
OR A ; DID DRIVER FAIL OR A ; DID DRIVER FAIL
JR Z,NEXT2 ; THIS NOTE ?
JR Z,NEXT2 ; TO PLAY ?
LD A,'p'
LD DE,TXT_BAD_N
CALL FAILMSG CALL FAILMSG
JR SKIP JR SKIP
; ;
@ -131,7 +166,7 @@ SKIP: LD HL,(NOTE)
JR NZ,NEXT0 JR NZ,NEXT0
; ;
LD B,51H ; VOLUME LD B,51H ; VOLUME
LD L,00H
LD L,00H ; OFF
PUSH BC PUSH BC
RST 08 RST 08
POP BC POP BC
@ -145,7 +180,7 @@ SKIP: LD HL,(NOTE)
PUSH BC PUSH BC
LD C, 6 ; check for keypress LD C, 6 ; check for keypress
LD E, 0FFH
LD E,0FFH
CALL BDOS CALL BDOS
POP BC POP BC
OR A OR A
@ -157,17 +192,18 @@ SKIP: LD HL,(NOTE)
RET RET
; ;
FAILMSG: PUSH AF FAILMSG: PUSH AF
PUSH BC ; YES SO DISPLAY
CALL PRTCHR
PUSH BC
CALL PRTSTR
CALL CRLF CALL CRLF
POP BC POP BC
POP AF POP AF
RET RET
; ;
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
; CONSTANT TONE ON ALL CHANNELS, SCALE VOLUME
; CONSTANT TONE ON ALL CHANNELS, SCALE VOLUME
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
TST_VOL:
;
TST_VOLUME:
LD HL,332+48 ; TONE LD HL,332+48 ; TONE
LD (NOTE),HL LD (NOTE),HL
; ;
@ -241,8 +277,9 @@ NEXT1: LD B,51H ; VOLUME
RET RET
;; ;;
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
; LONG DELAY
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
;
DELAY: LD HL,-1 DELAY: LD HL,-1
DELAY1: DEC HL DELAY1: DEC HL
LD A,H LD A,H
@ -250,9 +287,37 @@ DELAY1: DEC HL
JR NZ,DELAY1 JR NZ,DELAY1
RET RET
; ;
;------------------------------------------------------------------------------
; PRINT THE nTH STRING IN A LIST OF STRINGS WHERE EACH IS TERMINATED BY 0
; A REGISTER DEFINES THE nTH STRING IN THE LIST TO PRINT AND DE POINTS
; TO THE START OF THE STRING LIST.
;------------------------------------------------------------------------------
;
PRTIDXDEA: LD C,A
OR A
PRTIDXDEA1: JR Z,PRTIDXDEA3 ; FOUND TARGET SO EXIT
PRTIDXDEA2: LD A,(DE) ; LOOP UNIT
INC DE ; WE REACH
OR A ; END OF STRING
JR NZ,PRTIDXDEA2
DEC C ; AT STRING END. SO GO
JR PRTIDXDEA1 ; CHECK FOR INDEX MATCH
PRTIDXDEA3: CALL PRTSTR ; DISPLAY THE STRING
RET
;
#INCLUDE "printing.inc" #INCLUDE "printing.inc"
; ;
BADFLAG .DB '*','$'
TXT_CH .DB "CHANNELS: ",0
TXT_TSTCH .DB "CHANNEL: ",0
TXT_BAD_N .DB " BAD NOTE",0
TXT_BAD_P .DB " PLAY ERROR",0
TXT_NOTE .DB " NOTE: ",0
TXT_DEV .DB "DEVICE: ",0
TXT_NAME .DB "SN76489 ",0
.DB "AY-3-8910 ",0
.DB "I/O PORT ",0
.DB "YM2612 ",0
MODE .DB 0 ; scales mode or volume mode
DEVICE .DB 0 DEVICE .DB 0
NOTE .DW 128 NOTE .DW 128
VOLUME .DB 0 VOLUME .DB 0
@ -262,4 +327,3 @@ OLDSTACK .DW 0 ; original stack pointer
STACK ; top of stack STACK ; top of stack
; ;
.END .END

Loading…
Cancel
Save