Browse Source

revert sn76489

pull/134/head
b1ackmai1er 6 years ago
parent
commit
dc0b436e19
  1. 38
      Source/HBIOS/audio.inc
  2. 12
      Source/HBIOS/ay38910.asm
  3. 40
      Source/HBIOS/sn76489.asm

38
Source/HBIOS/audio.inc

@ -34,4 +34,42 @@
#IFNDEF AUDIOUTILS
#DEFINE AUDIOUTILS
AUD_NOTE:
AUDDEBUG("AUDNOTE ")
AUDTRACE_HL
AUDTRACE_CR
AUDTRACE_DE
AUDTRACE_CR
push de
LD DE, 48
CALL DIV16
; BC IS OCTAVE COUNT
; HL is NOTE WITIN OCTAVE
ADD HL, HL
pop de
ADD HL, DE
LD A, (HL) ; RETRIEVE PERIOD COUNT FROM SN7NOTETBL
INC HL
LD H, (HL)
LD L, A
INC C
AUD_NOTE1:
DEC C
JR Z, AUD_NOTE2
SRL H
RR L
JR AUD_NOTE1
AUD_NOTE2:
LD A, L ; IF NOT ZERO
OR H
RET NZ ; RETURN THE CALCULATED PERIOD
LD H, $FF ; OTHERWISE RETURN -1 PERIOD (ERROR)
LD L, $FF
RET
#ENDIF

12
Source/HBIOS/ay38910.asm

@ -7,8 +7,6 @@
; @3.579545 OCTAVE RANGE IS 2 - 7 (Bb2/A#2 .. A7)
; @4.000000 OCTAVE RANGE IS 2 - 7 (B2 .. A7)
;
;#include "cfg_state.inc"
;
AY_RCSND .EQU 0 ; 0 = EB MODULE, 1=MF MODULE
;
#IF (AYMODE == AYMODE_SCG)
@ -70,8 +68,6 @@ AY_IDAT .EQU 0 ; NO INSTANCE DATA ASSOCIATED WITH THIS DEVICE
;
; DEVICE CAPABILITIES AND CONFIGURATION
;
SBCV2004 .EQU 0 ; USE SBC-V2-004 HALF CLOCK DIVIDER
;
AY_TONECNT .EQU 3 ; COUNT NUMBER OF TONE CHANNELS
AY_NOISECNT .EQU 1 ; COUNT NUMBER OF NOISE CHANNELS
;
@ -459,7 +455,7 @@ AY_EI:
;
AY_WRTPSG:
CALL AY_DI
#IF (SBCV2004)
#IFDEF SBCV2004
LD A,8 ; SBC-V2-004 CHANGE
OUT (112),A ; TO HALF CLOCK SPEED
#ENDIF
@ -477,7 +473,7 @@ AY_WRTPSG:
POP AF ; GET SAVED DCNTL VALUE
OUT0 (Z180_DCNTL),A ; AND RESTORE IT
#ENDIF
#IF (SBCV2004)
#IFDEF SBCV2004
LD A,0 ; SBC-V2-004 CHANGE TO
OUT (112),A ; NORMAL CLOCK SPEED
#ENDIF
@ -489,7 +485,7 @@ AY_WRTPSG:
;
AY_RDPSG:
CALL AY_DI
#IF (SBCV2004)
#IFDEF SBCV2004
LD A,8 ; SBC-V2-004 CHANGE
OUT (112),A ; TO HALF CLOCK SPEED
#ENDIF
@ -507,7 +503,7 @@ AY_RDPSG:
POP AF ; GET SAVED DCNTL VALUE
OUT0 (Z180_DCNTL),A ; AND RESTORE IT
#ENDIF
#IF (SBCV2004)
#IFDEF SBCV2004
LD A,0 ; SBC-V2-004 CHANGE TO
OUT (112),A ; NORMAL CLOCK SPEED
#ENDIF

40
Source/HBIOS/sn76489.asm

@ -24,8 +24,7 @@ CHANNEL_1_SILENT .EQU $BF
CHANNEL_2_SILENT .EQU $DF
CHANNEL_3_SILENT .EQU $FF
SN7_SCALE .EQU 4
SN7RATIO .EQU (SN7CLK * 100) / (32 >> SN7_SCALE)
SN7RATIO .EQU SN7CLK * 100 / 32
.ECHO "SN76489 CLOCK: "
.ECHO SN7CLK
@ -105,42 +104,9 @@ SN7_VOLUME:
RET
SN7_NOTE:
; CALL PRTHEXWORDHL
; CALL PC_COLON
AUDDEBUG("AUDNOTE ")
AUDTRACE_HL
AUDTRACE_CR
AUDTRACE_DE
AUDTRACE_CR
LD DE, SN7NOTETBL
PUSH DE ; ON ENTRY HL IS THE NOTE TO PLAY
LD DE, 48 ; AND DE IS THE START OF NOTE TABLE
CALL DIV16 ; LOAD DE WITH NOTE TABLE SIZE
; AND CALCULATE OCTAVE COUNT IN BC
ADD HL, HL ; HL IS THE REMAINDER FROM ABOVE DIVISION (0-47) AND THE NOTE
POP DE ; TO PLAY IN THE OCTAVE. ADD IT TO THE START OF THE NOTE TABLE
ADD HL, DE ; TO POINT TO THE PERIOD FOR THE NOTE WE WANT TO PLAY.
LD A, (HL) ; HL POINT TO CURRENT PERIOD COUNT WE WANT TO PLAY
INC HL ; SO LOAD PERIOD COUNT FROM NOTE TABLE INTO HL
LD H, (HL) ; SO WE CAN UPDATE IT FOR THE REQUIRED OCTAVE
LD L, A
LD A,SN7_SCALE ; THE NOTE TABLE PERIOD DATA HAS BEEN
ADD A,C ; PRESCALED TO MAINTAIN RANGE SO ALLOW
LD B,A ; FOR THIS WHEN CHANGING OCTAVE
SN7_NOTE1:
SRL H ; ADJUST THE PERIOD DATA
RR L ; FOR THE DESIRED OCTAVE
DJNZ SN7_NOTE1 ; FALL THROUGH TO SET PERIOD AND RANGE CHECK
; CALL PRTHEXWORDHL
; CALL NEWLINE
CALL AUD_NOTE ; RETURNS PERIOD IN HL, FALL THRU
; TO SET THIS PERIOD
SN7_PERIOD:
AUDTRACE(SNT_PERIOD)
AUDTRACE_HL

Loading…
Cancel
Save