From c800d4095dfac0a6fd605e0eb46afda147b3cd43 Mon Sep 17 00:00:00 2001 From: dwsJason Date: Sat, 24 Nov 2018 13:47:13 -0500 Subject: [PATCH] ntpplayer: I can't get ORCA linker to link with this merlin obj file, so change the NTP player to be compressed data --- asm/merlin/make.bat | 5 +- asm/merlin/ninjatrackerplus.s | 2 +- asm/merlin/ntpplayer.a | Bin 23771 -> 0 bytes asm/ntp.s | 134 ++++++++++++++++++++++++++++++++++ data.bat | 5 +- 5 files changed, 142 insertions(+), 4 deletions(-) delete mode 100644 asm/merlin/ntpplayer.a create mode 100644 asm/ntp.s diff --git a/asm/merlin/make.bat b/asm/merlin/make.bat index b5e64ca..c0bf293 100644 --- a/asm/merlin/make.bat +++ b/asm/merlin/make.bat @@ -1,3 +1,4 @@ -merlin32 -V . link.s -iix chtyp -t obj ntpplayer.a +rem merlin32 -V . link.s +rem iix chtyp -t obj ntpplayer.a +merlin32 -V . ninjatrackerplus.s diff --git a/asm/merlin/ninjatrackerplus.s b/asm/merlin/ninjatrackerplus.s index 6e6d2ae..67eed04 100644 --- a/asm/merlin/ninjatrackerplus.s +++ b/asm/merlin/ninjatrackerplus.s @@ -9,7 +9,7 @@ * ***************************** - dsk ntpplayer.a + dsk ntpplayer.bin org $0f0000 mx %00 diff --git a/asm/merlin/ntpplayer.a b/asm/merlin/ntpplayer.a deleted file mode 100644 index 2fe40d101f9cabb866deac1f3d0a6bc803eb398c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23771 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 diff --git a/asm/ntp.s b/asm/ntp.s new file mode 100644 index 0000000..22fccb2 --- /dev/null +++ b/asm/ntp.s @@ -0,0 +1,134 @@ +* +* ORCA/M Fomat!! +* NinjaTrackerPlus C interfaces for ORCA +* + case on + longa on + longi on + +* Wow this is dummy section is silly +DummyNTP start ASM_CODE + end + +; prepare +; Prepares music, copies all instruments into sound ram and inits the sound interrupt. +; input: call with X=address low, Y=address high of pointer to the ntp file in memory +; output: X=address low, Y=address high of pointer to instruments (main program can reuse memory from here) +; when carry bit is set, an error occurred. Either the player did not find a NTP module at the given location +; or the version of the NTP module is not supported. + +* +* bool NTPprepare(void* pNTPData) +* +NTPprepare start ASM_CODE + +aNTPprepare EQU ntpplayer + + lda 4,s + tax + lda 6,s + tay + + lda 1,s + sta 5,s + lda 2,s + sta 6,s + + pla + lda #0 + sta 1,s + + jsl aNTPprepare + + bcc okgo + + lda #1 + sta 1,s + +okgo pla + rtl +*------------------------------------------------------------------------------- + end + +; play +; Starts previously prepared music. +; input: call with A=0 loop song, else play song only once +; output: - +* +* void NTPplay(bool bPlayOnce) +* +NTPplay start ASM_CODE + +aNTPplay EQU ntpplayer+3 + + lda 4,s + tax + lda 2,s + sta 4,s + lda 1,s + sta 3,s + pla + txa + jmp >aNTPplay +*------------------------------------------------------------------------------- + end + +; stop +; Stops a currently playing music, turns off all oscillators used by the player and restores the sound interrupt. +; input: - +; outout: - +* +* void NTPstop(void) +* +NTPstop start ASM_CODE + +aNTPstop EQU ntpplayer+6 + + jmp >aNTPstop +*------------------------------------------------------------------------------- + end + + +; getvuptr +; Returns a pointer to vu data (1 word number of tracks, then one word for every track with its volume). +; input: - +; output: X=address low, Y=address high of pointer +;aNTPgetvuptr GEQU ntpplayer+9 +* +* u8* NTPgetvuptr(void) +* +NTPgetvuptr start ASM_CODE + rtl +*------------------------------------------------------------------------------- + end + + +; gete8ptr +; Returns a pointer to where the player stores information about the last 8xx command found. Can be used for timing purposes. +; input: - +; output: X=address low, Y=address high of pointer +;aNTPgete8ptr GEQU ntpplayer+12 +* +* u8* NTPgete8ptr(void) +* +NTPgete8ptr start ASM_CODE + rtl +*------------------------------------------------------------------------------- + end + +; forcesongpos +; Forces the player to jump to a certain pattern (like command B). +; input: A=songpos +; output: carry bit is set when the song position does not exist (error) +;aNTPforcesongpos GEQU ntpplayer+15 +* +* bool NTPforcesongpos(int songpos) +* +NTPforcesongpos start ASM_CODE + lda #0 + rtl +*------------------------------------------------------------------------------- + end + + + diff --git a/data.bat b/data.bat index bb15eb3..52f6b6f 100644 --- a/data.bat +++ b/data.bat @@ -73,5 +73,8 @@ rem cd asm\merlin call make.bat cd ..\.. -iix makelib -P data.lib +asm\merlin\ntpplayer.a +lz4 -c2 asm\merlin\ntpplayer.bin data\ntpplayer.lz4 +iix mkobj ntpplayer_lz4 data:ntpplayer.lz4 data:ntpplayer.a ntpdata +iix makelib -P data.lib +data\ntpplayer.a +