Trkdemo.asm and demosong.asm

From IntelliWiki


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