mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-06 14:11:48 -06:00
SN76489: refactor - remove custom div16 function - use common hbios util div16 function
This commit is contained in:
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user