Browse Source

Merge pull request #128 from vipoo/dean/dev-3

Dean/dev 3
pull/132/head
Wayne Warthen 6 years ago
committed by GitHub
parent
commit
58740a74c3
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 62
      Source/HBIOS/ay38910.asm

62
Source/HBIOS/ay38910.asm

@ -137,10 +137,15 @@ AY_FND: LD IY, AY_IDAT ; SETUP FUNCTION TABLE
LD HL, AY_TIMER ; INSTALL TIMER HOOK HANDLER LD HL, AY_TIMER ; INSTALL TIMER HOOK HANDLER
LD (VEC_TICK + 1), HL LD (VEC_TICK + 1), HL
LD A, $02 ; NOT READY & IN INTERUPT HANDLER
LD (AY_READY), A
#ELSE #ELSE
CALL LDELAY ; HALF SECOND DELAY CALL LDELAY ; HALF SECOND DELAY
LD E,$00 ; SET VOLUME OFF LD E,$00 ; SET VOLUME OFF
CALL AY_SETV ; ON ALL CHANNELS
CALL AY_SETV ; ON ALL CHANNELS
LD A, $01 ; READY & NOT IN INTERUPT HANDLER
LD (AY_READY), A
#ENDIF #ENDIF
; ;
@ -154,11 +159,15 @@ AY_TIMER:
LD (AY_TIMTIK), A LD (AY_TIMTIK), A
JR NZ, AY_TIMER1 JR NZ, AY_TIMER1
LD HL, (AY_TIMHOOK) ; REMOVE US FROM THE TIMER HOOKS LIST
LD (VEC_TICK + 1), HL
LD E,$00 ; SET VOLUME OFF LD E,$00 ; SET VOLUME OFF
CALL AY_SETV ; ON ALL CHANNELS CALL AY_SETV ; ON ALL CHANNELS
LD A, $01 ; READY & NOT IN INTERUPT HANDLER
LD (AY_READY), A
LD DE, AY_TIMER ; MAKE AY_TIMER A NO_OP HANDLER
LD HL, AY_TIMER1
LD BC, 3
LDIR
AY_TIMER1: AY_TIMER1:
JP 0 ; OVERWRITTEN WITH NEXT HANDLER JP 0 ; OVERWRITTEN WITH NEXT HANDLER
@ -174,8 +183,16 @@ AY_TIMTIK .DB 0 ; COUNT DOWN TO FINISH BOOT BEEP
; ;
AY_INIT: AY_INIT:
LD DE,(AY_R7ENAB*256)+$F8 ; SET MIXER CONTROL / IO ENABLE. $F8 - 11 111 000 LD DE,(AY_R7ENAB*256)+$F8 ; SET MIXER CONTROL / IO ENABLE. $F8 - 11 111 000
CALL AY_WRTPSG ; I/O PORTS = OUTPUT, NOISE CHANNEL C, B, A DISABLE, TONE CHANNEL C, B, A ENABLE
RET
JP AY_WRTPSG ; I/O PORTS = OUTPUT, NOISE CHANNEL C, B, A DISABLE, TONE CHANNEL C, B, A ENABLE
AY_CHKREDY:
LD A, (AY_READY)
BIT 0, A
RET NZ
POP HL ; REMOVE LAST RETURN ADDRESS
OR $FF
RET ; RETURN NZ
; ;
;====================================================================== ;======================================================================
; SET VOLUME ALL CHANNELS ; SET VOLUME ALL CHANNELS
@ -200,7 +217,8 @@ AY_SV: CALL AY_WRTPSG ; CYCLING THROUGH ALL CHANNELS
; ;
AY_RESET: AY_RESET:
AUDTRACE(AYT_INIT) AUDTRACE(AYT_INIT)
;
CALL AY_CHKREDY ; RETURNS TO OUR CALLER IF NOT READY
PUSH DE PUSH DE
PUSH HL PUSH HL
CALL AY_INIT ; SET DEFAULT CHIP CONFIGURATION CALL AY_INIT ; SET DEFAULT CHIP CONFIGURATION
@ -227,6 +245,7 @@ AY_VOLUME:
AUDTRACE(AYT_VOL) AUDTRACE(AYT_VOL)
AUDTRACE_L AUDTRACE_L
AUDTRACE_CR AUDTRACE_CR
LD A,L ; SAVE VOLUME LD A,L ; SAVE VOLUME
LD (AY_PENDING_VOLUME), A LD (AY_PENDING_VOLUME), A
; ;
@ -283,6 +302,8 @@ AY_PLAY:
AUDTRACE(AYT_PLAY) AUDTRACE(AYT_PLAY)
AUDTRACE_D AUDTRACE_D
AUDTRACE_CR AUDTRACE_CR
CALL AY_CHKREDY ; RETURNS TO OUR CALLER IF NOT READY
; ;
LD A, (AY_PENDING_PERIOD + 1) ; CHECK THE HIGH BYTE OF THE PERIOD LD A, (AY_PENDING_PERIOD + 1) ; CHECK THE HIGH BYTE OF THE PERIOD
INC A INC A
@ -390,6 +411,21 @@ AY_QUERY_DEV:
LD DE, (AY_RSEL*256)+AY_RDAT ; AND ADDRESS AND DATA PORT LD DE, (AY_RSEL*256)+AY_RDAT ; AND ADDRESS AND DATA PORT
XOR A XOR A
RET RET
AY_DI:
LD A, (AY_READY)
BIT 1, A
RET NZ
HB_DI
RET
AY_EI:
LD A, (AY_READY)
BIT 1, A
RET NZ
HB_EI
RET
; ;
;====================================================================== ;======================================================================
; ;
@ -399,7 +435,7 @@ AY_QUERY_DEV:
;====================================================================== ;======================================================================
; ;
AY_WRTPSG: AY_WRTPSG:
HB_DI
CALL AY_DI
#IF (SBCV2004) #IF (SBCV2004)
LD A,8 ; SBC-V2-004 CHANGE LD A,8 ; SBC-V2-004 CHANGE
OUT (112),A ; TO HALF CLOCK SPEED OUT (112),A ; TO HALF CLOCK SPEED
@ -422,8 +458,7 @@ AY_WRTPSG:
LD A,0 ; SBC-V2-004 CHANGE TO LD A,0 ; SBC-V2-004 CHANGE TO
OUT (112),A ; NORMAL CLOCK SPEED OUT (112),A ; NORMAL CLOCK SPEED
#ENDIF #ENDIF
HB_EI
RET
JP AY_EI
; ;
;====================================================================== ;======================================================================
@ -431,7 +466,7 @@ AY_WRTPSG:
; READ FROM REGISTER D AND RETURN WITH RESULT IN E ; READ FROM REGISTER D AND RETURN WITH RESULT IN E
; ;
AY_RDPSG: AY_RDPSG:
HB_DI
CALL AY_DI
#IF (SBCV2004) #IF (SBCV2004)
LD A,8 ; SBC-V2-004 CHANGE LD A,8 ; SBC-V2-004 CHANGE
OUT (112),A ; TO HALF CLOCK SPEED OUT (112),A ; TO HALF CLOCK SPEED
@ -454,13 +489,14 @@ AY_RDPSG:
LD A,0 ; SBC-V2-004 CHANGE TO LD A,0 ; SBC-V2-004 CHANGE TO
OUT (112),A ; NORMAL CLOCK SPEED OUT (112),A ; NORMAL CLOCK SPEED
#ENDIF #ENDIF
HB_EI
RET
JP AY_EI
; ;
;====================================================================== ;======================================================================
; ;
AY_PENDING_PERIOD .DW 0 ; PENDING PERIOD (12 BITS) ; ORDER AY_PENDING_PERIOD .DW 0 ; PENDING PERIOD (12 BITS) ; ORDER
AY_PENDING_VOLUME .DB 0 ; PENDING VOL (8 BITS) ; SIGNIFICANT AY_PENDING_VOLUME .DB 0 ; PENDING VOL (8 BITS) ; SIGNIFICANT
AY_READY .DB 0 ; BIT 0 -> NZ DRIVER IS READY TO RECEIVE PLAY COMMAND
; BIT 1 -> NZ EXECUTING WITHIN TIMER HANDLER = DO NOT DIS/ENABLE INT
; ;
#IF AUDIOTRACE #IF AUDIOTRACE
AYT_INIT .DB "\r\nAY_INIT\r\n$" AYT_INIT .DB "\r\nAY_INIT\r\n$"

Loading…
Cancel
Save