mirror of
https://github.com/irmen/prog8.git
synced 2024-12-20 20:31:51 +00:00
67 lines
1.4 KiB
Plaintext
67 lines
1.4 KiB
Plaintext
|
%import textio
|
||
|
%import diskio
|
||
|
%import palette
|
||
|
%import zsmkit
|
||
|
%zeropage basicsafe
|
||
|
|
||
|
;; Proof Of Concept ZSM player using zsmkit v2 by MooingLemur
|
||
|
;; zsmkit bank is hardcoded in the module import above
|
||
|
main {
|
||
|
ubyte[255] zsmkit_lowram
|
||
|
|
||
|
sub start() {
|
||
|
; load zsmkit in bank 1 and the music starting from bank 2 onwards.
|
||
|
cx16.rambank(zsmkit.ZSMKitBank)
|
||
|
void diskio.load_raw("zsmkit-a000.bin",$A000)
|
||
|
cx16.rambank(2)
|
||
|
void diskio.load_raw("music.zsm",$A000)
|
||
|
;;void diskio.load_raw("song2.zsm",$A000)
|
||
|
|
||
|
zsmkit.zsm_init_engine(&zsmkit_lowram)
|
||
|
|
||
|
setup_isr()
|
||
|
play_music()
|
||
|
}
|
||
|
|
||
|
sub setup_isr() {
|
||
|
;; You could use zsmkit.zsmkit_setisr() and be done with it
|
||
|
;; but here's an example of a custom ISR.
|
||
|
;; Note that jsrfar is unsafe to call in a handler, so the ISR
|
||
|
;; uses zsmkit.zsm_tick_isr() with a manual bank change
|
||
|
sys.set_irq(&irq.handler)
|
||
|
}
|
||
|
|
||
|
sub play_music() {
|
||
|
uword zsmptr
|
||
|
ubyte zsmbank
|
||
|
|
||
|
txt.cls()
|
||
|
|
||
|
zsmkit.zsm_setbank(0, 2)
|
||
|
zsmkit.zsm_setmem(0, $A000)
|
||
|
|
||
|
zsmkit.zsm_play(0)
|
||
|
repeat {
|
||
|
sys.waitvsync()
|
||
|
void, zsmptr, zsmbank = zsmkit.zsm_getptr(0)
|
||
|
txt.home()
|
||
|
txt.print_ubhex(zsmbank, true)
|
||
|
txt.print(":")
|
||
|
txt.print_uwhex(zsmptr, false)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
irq {
|
||
|
sub handler() -> bool {
|
||
|
ubyte savebank
|
||
|
|
||
|
savebank = cx16.getrambank()
|
||
|
cx16.rambank(zsmkit.ZSMKitBank)
|
||
|
zsmkit.zsm_tick_isr(0) ; NOTE that zsm_tick() is not allowed in a handler
|
||
|
cx16.rambank(savebank)
|
||
|
|
||
|
return true
|
||
|
}
|
||
|
}
|