From eecc39834949e6affbf3268cb5405a296cd12216 Mon Sep 17 00:00:00 2001 From: Javier Degirolmo Date: Mon, 22 Apr 2013 05:30:00 -0300 Subject: Now you can change the sample rate of PCM instruments --- src-68k/echo.68k | 53 +++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 49 insertions(+), 4 deletions(-) (limited to 'src-68k/echo.68k') diff --git a/src-68k/echo.68k b/src-68k/echo.68k index 9b1341f..94e42ca 100644 --- a/src-68k/echo.68k +++ b/src-68k/echo.68k @@ -61,13 +61,14 @@ Echo_SendCommand: rts ; End of subroutine ;**************************************************************************** -; Echo_SendCommandEx +; Echo_SendCommandAddr ; Sends an Echo command (with address parameter) ; ; input d0.b ... Echo command ; input a0.l ... Address parameter ;**************************************************************************** +Echo_SendCommandAddr: Echo_SendCommandEx: movem.l d0-d1, -(sp) ; Save register @@ -105,6 +106,35 @@ Echo_SendCommandEx: movem.l (sp)+, d0-d1 ; Restore register rts ; End of subroutine +;**************************************************************************** +; Echo_SendCommandByte +; Sends an Echo command (with a byte parameter) +; +; input d0.b ... Echo command +; input d1.b ... Byte parameter +;**************************************************************************** + +Echo_SendCommandByte: + Echo_Z80Request ; We need the Z80 bus + + move.w d1, -(sp) ; Save register +@Try: + tst.b ($A01FFF) ; Check if Echo is ready + beq.s @Ready ; Too busy? + Echo_Z80Release ; Let Echo continue + move.w #$FF, d1 ; Give it some time + dbf d1, * ; ... + Echo_Z80Request ; Get Z80 bus back + bra.s @Try ; Try again + +@Ready: + move.w (sp)+, d1 ; Restore register + move.b d0, ($A01FFF) ; Write command ID + move.b d1, ($A01FFC) ; Write parameter + Echo_Z80Release ; We're done with the Z80 bus + + rts ; End of subroutine + ;**************************************************************************** ; Echo_PlaySFX ; Plays a SFX @@ -115,7 +145,7 @@ Echo_SendCommandEx: Echo_PlaySFX: move.w d0, -(sp) ; Save register move.b #$02, d0 ; Command $02 = play SFX - bsr Echo_SendCommandEx ; Send command to Echo + bsr Echo_SendCommandAddr ; Send command to Echo move.w (sp)+, d0 ; Restore register rts ; End of subroutine @@ -141,7 +171,7 @@ Echo_StopSFX: Echo_PlayBGM: move.w d0, -(sp) ; Save register move.b #$04, d0 ; Command $04 = play BGM - bsr Echo_SendCommandEx ; Send command to Echo + bsr Echo_SendCommandAddr ; Send command to Echo move.w (sp)+, d0 ; Restore register rts ; End of subroutine @@ -169,6 +199,21 @@ Echo_ResumeBGM: move.w (sp)+, d0 ; Restore register rts ; End of subroutine +;**************************************************************************** +; Echo_SetPCMRate +; Sets the playback rate of PCM +; +; input d0.b ... New rate (timer A value) +;**************************************************************************** + +Echo_SetPCMRate: + movem.l d0-d1, -(sp) ; Save registers + move.b d0, d1 ; Put parameter in place + move.b #$07, d0 ; Command $07 = set PCM rate + bsr Echo_SendCommandByte ; Send command to Echo + movem.l (sp)+, d0-d1 ; Restore registers + rts ; End of subroutine + ;**************************************************************************** ; Echo_GetStatus ; Gets the current status of Echo @@ -258,6 +303,6 @@ Echo_Init: ; It should be located wherever Echo_ProgFile was defined ;**************************************************************************** -@Z80Program: incbin "..." +@Z80Program: incbin "../bin/prog-z80.bin" @Z80ProgSize equ *-@Z80Program even -- cgit v1.2.3