Trkdemo.asm and demosong.asm
This is an example of use of tracker.asm and tracker.mac.
trkdemo.asm
This is the main entry point. This file requires tracker.asm, tracker.mac, demosong.asm (below) and print.asm to compile.
;* ======================================================================== *; ;* This code is placed into the public domain by its author. *; ;* All copyright rights are hereby relinquished on the code and data in *; ;* this file. -- Arnauld Chevallier, 2008 *; ;* ======================================================================== *; ROMW 16 ;; ======================================================================== ;; ;; VARIABLES IN SCRACTH RAM ;; ;; ======================================================================== ;; FRAME EQU $0102 TRKSCRACTH ORG $01DC, $01DC, "-RWBN" G_FAD RMB 1 REF_M RMB 1 NOTE_A RMB 1 NOTE_B RMB 1 NOTE_C RMB 1 REF_A RMB 1 REF_B RMB 1 REF_C RMB 1 VOL_A RMB 1 VOL_B RMB 1 VOL_C RMB 1 INSTR_A RMB 1 INSTR_B RMB 1 INSTR_C RMB 1 COUNT_A RMB 1 COUNT_B RMB 1 COUNT_C RMB 1 COUNT_M RMB 1 COUNT_P RMB 1 PAT RMB 1 ;; ======================================================================== ;; ;; VARIABLES IN SYSTEM RAM ;; ;; ======================================================================== ;; TRKSYSTEM ORG $035B, $035B, "-RWBN" SONG RMB 1 INS_PTR RMB 1 POS_A RMB 1 POS_B RMB 1 POS_C RMB 1 ;; ======================================================================== ;; ;; EXEC-friendly ROM header ;; ;; ======================================================================== ;; ORG $5000 ROMHDR: BIDECLE ZERO ; MOB picture base (points to NULL list) BIDECLE ZERO ; Process table (points to NULL list) BIDECLE MAIN ; Program start address BIDECLE ZERO ; Bkgnd picture base (points to NULL list) BIDECLE ONES ; GRAM pictures (points to NULL list) BIDECLE TITLE ; Cartridge title/date DECLE $03C0 ; Flags: No ECS title, ; run code after title, no clicks ZERO: DECLE $0000 ; Screen border control DECLE $0000 ; 0 = color stack, 1 = f/b mode ONES: DECLE 1, 1, 1, 1, 1 ; Color stack initialization TITLE: DECLE 108, "Tracker Demo", 0 ;; ======================================================================== ;; ;; MAIN ;; ;; ======================================================================== ;; MAIN PROC MVII #ISR, R0 ; set our own ISR MVO R0, $100 SWAP R0 MVO R0, $101 EIS ; enable interrupts CALL PRINT.FLS ; overwrite title DECLE 7 DECLE $200 + 3*20 + 1 DECLE "Arnauld Chevallier", 0 CALL PRINT.FLS ; overwrite copyright notice DECLE 7 DECLE $200 + 10*20 + 1 DECLE " 07 Sep. 2008 ", 0 CALL TRKINIT ; initialize tracker CALL TRKSNGINIT ; initialize song DECLE SONG00 @@spin CALL WAITVBL ; wait for VBlank CALL TRKPLAY ; tick the player B @@spin ; spin forever ENDP ;; ======================================================================== ;; ;; ISR Simple ISR ;; ;; ======================================================================== ;; ISR PROC MVO R0, $0020 ; hit $0020 to enable display MVI FRAME, R0 ; increment frame counter INCR R0 MVO R0, FRAME B $1014 ; back into Exec ENDP ;; ======================================================================== ;; ;; WAITVBL Wait for next VBlank ;; ;; ======================================================================== ;; WAITVBL PROC MVI FRAME, R0 ; R0 = current frame @@wait CMP FRAME, R0 ; wait for the next one BEQ @@wait JR R5 ENDP ;; ======================================================================== ;; ;; REQUIRED FILES ;; ;; ======================================================================== ;; INCLUDE "print.asm" INCLUDE "tracker.mac" INCLUDE "tracker.asm" INCLUDE "demosong.asm" ;; ======================================================================== ;; ;; End of File: trkdemo.asm ;; ;; ======================================================================== ;;
demosong.asm
This is the data file which contains the short demo song used by trkdemo.asm (above). It includes 1 pitch effect, 2 software envelopes, 3 drums and 5 patterns. It's also using 2 vibrato levels.
;* ======================================================================== *; ;* This code is placed into the public domain by its author. *; ;* All copyright rights are hereby relinquished on the code and data in *; ;* this file. -- Arnauld Chevallier, 2008 *; ;* ======================================================================== *; ;; ======================================================================== ;; ;; Global music definitions ;; ;; ======================================================================== ;; MUSIC PROC ;; ------------------------------------------------------------------------ ;; ;; Pitch effects ;; ;; ------------------------------------------------------------------------ ;; @@pitch01 DECLE 0, 0, 0, 0 @@pitch02 DECLE 0, 0, 12, 12 ;; ------------------------------------------------------------------------ ;; ;; Envelopes ;; ;; ------------------------------------------------------------------------ ;; @@env01 DECLE 2 DECLE $FEDC, $BA98, $7654, $3210 DECLE $0000, $0000, $0000, $0000 DECLE $0000, $0000, $0000, $0000 DECLE $0000, $0000, $0000, $0000 @@env02 DECLE 1 DECLE $FFFF, $EEEE, $DDDD, $CCCC DECLE $BBBB, $AAAA, $9999, $8888 DECLE $7777, $6666, $5555, $4444 DECLE $3333, $2222, $1111, $0000 ;; ------------------------------------------------------------------------ ;; ;; Drums ;; ;; ------------------------------------------------------------------------ ;; @@drum1 DRUM($380, $10, 0, 1, $F) DRUM($380, $10, 1, 0, $F) DRUM($380, $10, 1, 0, $F) DRUM($580, $1F, 1, 0, $E) DRUM($580, $1F, 1, 1, $D) DRUM($580, $1F, 1, 1, $C) DRUM($580, $1F, 1, 0, $A) DRUM($580, $1F, 1, 0, $8) @@drum2 DRUM($280, $10, 0, 1, $F) DRUM($280, $10, 1, 0, $F) DRUM($280, $10, 1, 0, $F) DRUM($480, $1F, 1, 0, $E) DRUM($480, $1F, 1, 1, $D) DRUM($480, $1F, 1, 1, $C) DRUM($480, $1F, 1, 0, $A) DRUM($480, $1F, 1, 0, $8) @@hithat DRUM($380, $04, 0, 1, $D) DRUM($380, $04, 0, 1, $6) DRUM(0, 0, 0, 0, 0) DRUM(0, 0, 0, 0, 0) DRUM(0, 0, 0, 0, 0) DRUM(0, 0, 0, 0, 0) DRUM(0, 0, 0, 0, 0) DRUM(0, 0, 0, 0, 0) ENDP ;; ======================================================================== ;; ;; Song #00 ;; ;; ======================================================================== ;; SONG00 PROC ;; ------------------------------------------------------------------------ ;; ;; Speed / Pointers ;; ;; ------------------------------------------------------------------------ ;; DECLE 6, @@patterns, @@instr ;; ------------------------------------------------------------------------ ;; ;; Order of patterns ;; ;; ------------------------------------------------------------------------ ;; DECLE 0, 1, 2, 3, 0, 1, 2, 4, (-8 AND $FFFF) ;; ------------------------------------------------------------------------ ;; ;; Details of patterns ;; ;; ------------------------------------------------------------------------ ;; @@patterns DECLE 32, @@p000, @@p001, @@p002 DECLE 32, @@p000, @@p001, @@p003 DECLE 32, @@p000, @@p001, @@p004 DECLE 32, @@p000, @@p001, @@p005 DECLE 32, @@p000, @@p001, @@p006 ;; ------------------------------------------------------------------------ ;; ;; Standard instruments (pitch effect, vibrato, envelope) ;; ;; ------------------------------------------------------------------------ ;; @@instr DECLE MUSIC.pitch01, 1, MUSIC.env01 DECLE MUSIC.pitch01, 2, MUSIC.env02 DECLE MUSIC.pitch02, 2, MUSIC.env01 DECLE MUSIC.pitch01, 2, MUSIC.env01 ;; ------------------------------------------------------------------------ ;; ;; Drums ;; ;; ------------------------------------------------------------------------ ;; DECLE MUSIC.drum1 DECLE MUSIC.drum2 DECLE MUSIC.hithat ;; ------------------------------------------------------------------------ ;; ;; Patterns ;; ;; ------------------------------------------------------------------------ ;; @@p000 NOTES("DRM 1F0", "A-2 1F0", "DRM 3F0", "A-2 1F0") NOTES("DRM 2F0", "A-2 1F0", "DRM 3F0", "A-2 1F0") NOTES("DRM 1F0", "A-2 1F0", "DRM 1F0", "A-2 1F0") NOTES("DRM 2F0", "A-2 1F0", "DRM 3F0", "A-2 1F0") NOTES("DRM 1F0", "E-2 1F0", "DRM 3F0", "E-2 1F0") NOTES("DRM 2F0", "E-2 1F0", "DRM 3F0", "E-2 1F0") NOTES("DRM 1F0", "E-3 1F0", "DRM 1F0", "E-3 1F0") NOTES("DRM 2F0", "E-3 1F0", "DRM 2F0", "E-3 1F0") @@p001 NOTES("A-3 2E3", "C-4 2E2", "E-4 2E0", "F-4 2E1") NOTES("E-4 2E1", "C-4 2E3", "A-3 2E3", "C-4 2E2") NOTES("E-4 2E0", "F-4 2E1", "A-4 2E1", "G-4 2E3") @@p002 NOTES("A-5 3F7", "G-5 3F7", "E-5 3F7", "D-5 3F1") NOTES("E-5 3F5", "", "", "") @@p003 NOTES("A-5 3F7", "G-5 3F7", "E-5 3F7", "F-5 3F1") NOTES("E-5 3F5", "", "", "") @@p004 NOTES("A-5 4F3", "G-5 4F1", "A-5 4F1", "C-6 4F1") NOTES("B-5 4F2", "A-5 4F0", "G-5 4F1", "E-5 4F3") NOTES("D-5 4F1", "E-5 4F3", "A-5 4F1", "G-5 4F3") @@p005 NOTES("A-5 4F3", "G-5 4F1", "A-5 4F1", "C-6 4F1") NOTES("B-5 4F3", "C-6 4F0", "D-6 4F0", "E-6 4F1") NOTES("C-6 4F1", "B-5 4F1", "G-5 4F1", "C-6 4F1") NOTES("A-5 4F1", "F-5 4F1", "G-5 4F1", "") @@p006 NOTES("A-5 4F3", "G-5 4F1", "A-5 4F1", "C-6 4F1") NOTES("B-5 4F3", "C-6 4F0", "D-6 4F0", "E-6 4F0") NOTES("F-6 4F0", "E-6 4F1", "E-6 4F0", "F-6 4F0") NOTES("E-6 4F0", "D-6 4F0", "E-6 4F0", "D-6 4F0") NOTES("C-6 4F0", "B-5 4F0", "C-6 4F0", "B-5 4F0") NOTES("A-5 4F0", "G-5 4F0", "", "") ENDP ;; ======================================================================== ;; ;; End of File: demosong.asm ;; ;; ======================================================================== ;;
Assembling
Assemble trkdemo.asm with the following command:
as1600 -o trkdemo -l trkdemo.lst trkdemo.asm