Difference between revisions of "Trkdemo.asm and demosong.asm"
(No difference)
|
Revision as of 11:57, 13 September 2008
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
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
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