Browse Source

SN76489: refactor - remove custom div16 function - use common hbios util div16 function

patch
Dean Netherton 6 years ago
parent
commit
98a63cefa9
  1. 67
      Source/HBIOS/sn76489.asm

67
Source/HBIOS/sn76489.asm

@ -5,6 +5,9 @@
;======================================================================
;
; TODO:
; 1. PROVIDE SUPPORT FOR NOISE CHANNEL
; 2. FOR PERIOD SET, MAP 400 TO 0 AND RETURN ERROR FOR 000
; 3. DOES THIS WORK FOR FASTER CPUS? ONLY BEEN TEST ON A Z80 7MHZ UNIT
;
;======================================================================
; CONSTANTS
@ -104,13 +107,10 @@ SN7_NOTE:
AUDTRACE_HL
AUDTRACE_CR
LD B, H
LD C, L
LD DE, 48
CALL _DIV16
CALL DIV16
; BC IS OCTAVE COUNT
; HL is NOTE WITIN ACTAVE
; HL is NOTE WITIN OCTAVE
ADD HL, HL
LD DE, SN7NOTETBL
ADD HL, DE
@ -129,55 +129,21 @@ SN7_NOTE1:
JR SN7_NOTE1
SN7_NOTE2:
LD A, L
LD A, L ; IF WE GENERATE ZERO - RETURN ERROR
OR H
JR NZ, SN7_PERIOD
JR NZ, SN7_PERIOD ; OTHERWISE APPLY THE CALCULATED PERIOD
LD H, $FF
LD L, $FF
JR SN7_PERIOD
; Divide 16-bit values (with 16-bit result)
; In: Divide BC by divider DE
; Out: BC = result, HL = rest
;
_DIV16:
LD HL, 0
LD A, B
LD B, 8
DIV16_LOOP1:
RLA
ADC HL, HL
SBC HL, DE
JR NC, DIV16_NOADD1
ADD HL, DE
DIV16_NOADD1:
DJNZ DIV16_LOOP1
RLA
CPL
LD B, A
LD A, C
LD C, B
LD B, 8
DIV16_LOOP2:
RLA
ADC HL, HL
SBC HL, DE
JR NC, DIV16_NOADD2
ADD HL, DE
DIV16_NOADD2:
DJNZ DIV16_LOOP2
RLA
CPL
LD B, C
LD C, A
RET
SN7_PERIOD:
AUDTRACE(SNT_PERIOD)
AUDTRACE_HL
AUDTRACE_CR
; TODO: MAKE ZERO BE AN INVALID VALUE (USE 400) TO INDICATE LOWEST NOTE
; NEED TO UPDATE TUNE.ASM TO SUPPORT THIS?
; LD A, H ; IF ZERO - ERROR
; OR L
; JR Z, SN7_QUERY_PERIOD1
@ -398,10 +364,11 @@ SNT_PLAY .DB "\r\nSN7_PLAY CH: $"
SNT_REGWR .DB "\r\nOUT SN76489, $"
#ENDIF
; THE FREQUENCY BY QUARTER TONE STARTING AT A0#
; OCATVE 0 - not suported by this driver
; FIRST PLAYABLE NOTE WILL BE $2E - 2 quater tones below a1#
; A1# is $30
; THE FREQUENCY BY QUARTER TONE STARTING AT A0# OCATVE 0
; USED TO MAP EACH OCTAVE (DIV BY 2 TO JUMP AN OCTAVE UP)
; FIRST PLAYABLE NOTE WILL BE $2E
; ASSUMING A CLOCK OF 1843200 THIS MAPS TO
; 2 QUATER TONES BELOW A1#, WITH A1# AT $30
SN7NOTETBL:
.DW SN7RATIO / 2913
@ -454,9 +421,3 @@ SN7NOTETBL:
.DW SN7RATIO / 5743
SIZ_SN7NOTETBL .EQU $ - SN7NOTETBL
.ECHO "SN76489 approx "
.ECHO SIZ_SN7NOTETBL / 2 / 4 /12
.ECHO " Octaves. Last note index supported: "
.ECHO SIZ_SN7NOTETBL / 2
.ECHO "\n"

Loading…
Cancel
Save