mirror of
https://github.com/deater/dos33fsprogs.git
synced 2024-06-07 08:30:20 +00:00
tiny_music: how small can we make it
This commit is contained in:
parent
3a5b83a304
commit
1ebc926af1
36
demos/tiny_music/Makefile
Normal file
36
demos/tiny_music/Makefile
Normal file
|
@ -0,0 +1,36 @@
|
|||
include ../../Makefile.inc
|
||||
|
||||
DOS33 = ../../utils/dos33fs-utils/dos33
|
||||
EMPTY_DISK = ../../empty_disk
|
||||
HGR2PNG = ../../utils/hgr-utils/png2hgr
|
||||
LINKER_SCRIPTS = ../../linker_scripts
|
||||
TOKENIZE = ../../utils/asoft_basic-utils/tokenize_asoft
|
||||
|
||||
all: tiny_music.dsk
|
||||
|
||||
tiny_music.dsk: HELLO MUSIC
|
||||
cp $(EMPTY_DISK)/empty.dsk ./tiny_music.dsk
|
||||
$(DOS33) -y tiny_music.dsk SAVE A HELLO
|
||||
$(DOS33) -y tiny_music.dsk -t BIN -a 0x2000 BSAVE MUSIC
|
||||
|
||||
####
|
||||
|
||||
HELLO: hello.bas
|
||||
$(TOKENIZE) < hello.bas > HELLO
|
||||
|
||||
####
|
||||
|
||||
|
||||
|
||||
MUSIC: music.o
|
||||
ld65 -o MUSIC music.o -C $(LINKER_SCRIPTS)/apple2_2000.inc
|
||||
|
||||
music.o: music.s \
|
||||
zp.inc hardware.inc nozp.inc \
|
||||
interrupt_handler.s mockingboard_setup.s
|
||||
ca65 -o music.o music.s -l music.lst
|
||||
|
||||
####
|
||||
|
||||
clean:
|
||||
rm -f *~ *.o *.lst MUSIC HELLO
|
39
demos/tiny_music/frequency.c
Normal file
39
demos/tiny_music/frequency.c
Normal file
|
@ -0,0 +1,39 @@
|
|||
#include <stdio.h>
|
||||
|
||||
double frequencies[8][12]={
|
||||
{ 32.703, 34.648, 36.708, 38.891, 41.203, 43.654,
|
||||
46.249, 48.999, 51.913, 55.000, 58.270, 61.735,},
|
||||
{ 65.406, 69.296, 73.416, 77.782, 82.406, 87.308,
|
||||
92.498, 97.998, 103.826, 110.000, 116.540, 123.470,},
|
||||
{130.812, 138.592, 146.832, 155.564, 164.812, 174.616,
|
||||
184.996, 195.996, 207.652, 220.000, 233.080, 246.940,},
|
||||
{261.624, 277.184, 293.664, 311.128, 329.624, 349.232,
|
||||
369.992, 391.992, 415.304, 440.000, 466.160, 493.880,},
|
||||
{523.248, 554.368, 587.328, 622.256, 659.248, 698.464,
|
||||
739.984, 783.984, 830.608, 880.000, 932.320, 987.760,},
|
||||
{1046.496,1108.736,1174.656,1244.512,1318.496,1396.928,
|
||||
1479.968,1567.968,1661.216,1760.000,1864.640,1975.520,},
|
||||
{2092.992,2217.472,2349.312,2489.024,2636.992,2793.856,
|
||||
2959.936,3125.936,3322.432,3520.000,3729.280,3951.040,},
|
||||
{4185.984,4434.944,4698.624,4978.048,5273.984,5587.712,
|
||||
5919.872,6271.872,6644.864,7040.000,7458.560,7902.080}};
|
||||
|
||||
#define FREQUENCY 1023000.0
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
|
||||
int n,o;
|
||||
|
||||
for(o=1;o<9;o++) {
|
||||
for(n=0;n<12;n++) {
|
||||
// printf("%d %d: %lf $%04X\n",n,o,
|
||||
// frequencies[o-1][n],
|
||||
// (int)((FREQUENCY/frequencies[o-1][n])/16.0));
|
||||
printf("$%02X,",
|
||||
(int)((FREQUENCY/frequencies[o-1][n])/16.0));
|
||||
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
return 0;
|
||||
}
|
87
demos/tiny_music/hardware.inc
Normal file
87
demos/tiny_music/hardware.inc
Normal file
|
@ -0,0 +1,87 @@
|
|||
;; HARDWARE LOCATIONS
|
||||
|
||||
KEYPRESS = $C000
|
||||
KEYRESET = $C010
|
||||
|
||||
;; SOFT SWITCHES
|
||||
CLR80COL = $C000 ; PAGE0/PAGE1 normal
|
||||
SET80COL = $C001 ; PAGE0/PAGE1 switches PAGE0 in Aux instead
|
||||
EIGHTYCOLOFF = $C00C
|
||||
EIGHTYCOLON = $C00D
|
||||
SPEAKER = $C030
|
||||
SET_GR = $C050
|
||||
SET_TEXT = $C051
|
||||
FULLGR = $C052
|
||||
TEXTGR = $C053
|
||||
PAGE0 = $C054
|
||||
PAGE1 = $C055
|
||||
LORES = $C056 ; Enable LORES graphics
|
||||
HIRES = $C057 ; Enable HIRES graphics
|
||||
AN3 = $C05E ; Annunciator 3
|
||||
|
||||
PADDLE_BUTTON0 = $C061
|
||||
PADDL0 = $C064
|
||||
PTRIG = $C070
|
||||
|
||||
;; BASIC ROUTINES
|
||||
|
||||
NORMAL = $F273
|
||||
|
||||
;; MONITOR ROUTINES
|
||||
|
||||
HLINE = $F819 ;; HLINE Y,$2C at A
|
||||
VLINE = $F828 ;; VLINE A,$2D at Y
|
||||
CLRSCR = $F832 ;; Clear low-res screen
|
||||
CLRTOP = $F836 ;; clear only top of low-res screen
|
||||
SETGR = $FB40 ;; GR
|
||||
SETCOL = $F864 ;; COLOR=A
|
||||
TEXT = $FB36
|
||||
TABV = $FB5B ;; VTAB to A
|
||||
BELL = $FBDD ;; ring the bell
|
||||
BASCALC = $FBC1 ;;
|
||||
VTAB = $FC22 ;; VTAB to CV
|
||||
HOME = $FC58 ;; Clear the text screen
|
||||
WAIT = $FCA8 ;; delay 1/2(26+27A+5A^2) us
|
||||
CROUT1 = $FD8B
|
||||
SETINV = $FE80 ;; INVERSE
|
||||
SETNORM = $FE84 ;; NORMAL
|
||||
COUT = $FDED ;; output A to screen
|
||||
COUT1 = $FDF0 ;; output A to screen
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
COLOR_BLACK = 0
|
||||
COLOR_RED = 1
|
||||
COLOR_DARKBLUE = 2
|
||||
COLOR_PURPLE = 3
|
||||
COLOR_DARKGREEN = 4
|
||||
COLOR_GREY = 5
|
||||
COLOR_MEDIUMBLUE = 6
|
||||
COLOR_LIGHTBLUE = 7
|
||||
COLOR_BROWN = 8
|
||||
COLOR_ORANGE = 9
|
||||
COLOR_GREY2 = 10
|
||||
COLOR_PINK = 11
|
||||
COLOR_LIGHTGREEN = 12
|
||||
COLOR_YELLOW = 13
|
||||
COLOR_AQUA = 14
|
||||
COLOR_WHITE = 15
|
||||
|
||||
COLOR_BOTH_BLACK = $00
|
||||
COLOR_BOTH_RED = $11
|
||||
COLOR_BOTH_DARKBLUE = $22
|
||||
COLOR_BOTH_DARKGREEN = $44
|
||||
COLOR_BOTH_GREY = $55
|
||||
COLOR_BOTH_MEDIUMBLUE = $66
|
||||
COLOR_BOTH_LIGHTBLUE = $77
|
||||
COLOR_BOTH_BROWN = $88
|
||||
COLOR_BOTH_ORANGE = $99
|
||||
COLOR_BOTH_PINK = $BB
|
||||
COLOR_BOTH_LIGHTGREEN = $CC
|
||||
COLOR_BOTH_YELLOW = $DD
|
||||
COLOR_BOTH_AQUA = $EE
|
||||
COLOR_BOTH_WHITE = $FF
|
||||
|
2
demos/tiny_music/hello.bas
Normal file
2
demos/tiny_music/hello.bas
Normal file
|
@ -0,0 +1,2 @@
|
|||
5 HOME
|
||||
10 PRINT CHR$(4);"CATALOG"
|
136
demos/tiny_music/interrupt_handler.s
Normal file
136
demos/tiny_music/interrupt_handler.s
Normal file
|
@ -0,0 +1,136 @@
|
|||
;================================
|
||||
;================================
|
||||
; mockingboard interrupt handler
|
||||
;================================
|
||||
;================================
|
||||
; On Apple II/6502 the interrupt handler jumps to address in 0xfffe
|
||||
; This is in the ROM, which saves the registers
|
||||
; on older IIe it saved A to $45 (which could mess with DISK II)
|
||||
; newer IIe doesn't do that.
|
||||
; It then calculates if it is a BRK or not (which trashes A)
|
||||
; Then it sets up the stack like an interrupt and calls 0x3fe
|
||||
|
||||
; Note: the IIc is much more complicated
|
||||
; its firmware tries to decode the proper source
|
||||
; based on various things, including screen hole values
|
||||
; we bypass that by switching out ROM and replacing the
|
||||
; $fffe vector with this, but that does mean we have
|
||||
; to be sure status flag and accumulator set properly
|
||||
|
||||
interrupt_handler:
|
||||
php ; save status flags
|
||||
cld ; clear decimal mode
|
||||
pha ; save A ; 3
|
||||
; A is saved in $45 by firmware
|
||||
txa
|
||||
pha ; save X
|
||||
tya
|
||||
pha ; save Y
|
||||
|
||||
|
||||
|
||||
inc $0404 ; debug (flashes char onscreen)
|
||||
|
||||
|
||||
pt3_irq_handler:
|
||||
bit MOCK_6522_T1CL ; clear 6522 interrupt by reading T1C-L ; 4
|
||||
|
||||
; set note A
|
||||
|
||||
ldx #$00
|
||||
lda #$F4
|
||||
jsr pt3_write_reg
|
||||
|
||||
; set coarse note A
|
||||
|
||||
ldx #$01
|
||||
lda #$00
|
||||
jsr pt3_write_reg
|
||||
|
||||
; set mixer ABC enabled
|
||||
|
||||
ldx #$07
|
||||
lda #$38
|
||||
jsr pt3_write_reg
|
||||
|
||||
; A volume 14
|
||||
|
||||
ldx #$08
|
||||
lda #$E
|
||||
jsr pt3_write_reg
|
||||
|
||||
|
||||
|
||||
|
||||
;=================================
|
||||
; Finally done with this interrupt
|
||||
;=================================
|
||||
|
||||
done_pt3_irq_handler:
|
||||
|
||||
|
||||
jmp exit_interrupt
|
||||
|
||||
;=================================
|
||||
; Finally done with this interrupt
|
||||
;=================================
|
||||
|
||||
quiet_exit:
|
||||
stx DONE_PLAYING
|
||||
jsr clear_ay_both
|
||||
|
||||
ldx #$ff ; also mute the channel
|
||||
stx AY_REGISTERS+7 ; just in case
|
||||
|
||||
|
||||
exit_interrupt:
|
||||
|
||||
pla
|
||||
tay ; restore Y
|
||||
pla
|
||||
tax ; restore X
|
||||
pla ; restore a ; 4
|
||||
|
||||
; on II+/IIe (but not IIc) we need to do this?
|
||||
interrupt_smc:
|
||||
lda $45 ; restore A
|
||||
plp
|
||||
|
||||
rti ; return from interrupt ; 6
|
||||
|
||||
;============
|
||||
; typical
|
||||
; ???? cycles
|
||||
|
||||
; starts at C4
|
||||
frequency_lookup:
|
||||
.byte $F4,$E6,$D9,$CD,$C1,$B7,$AC,$A3,$99,$91,$89,$81,$00,$00,$00,$00
|
||||
.byte $7A,$73,$6C,$66,$60,$5B,$56,$51,$4C,$48,$44,$40,$00,$00,$00,$00
|
||||
.byte $3D,$39,$36,$33,$30,$2D,$2B,$28,$26,$24,$22,$20,$00,$00,$00,$00
|
||||
|
||||
; .byte $EE,$E1,$D4,$C8,$BD,$B2,$A8,$9F,$96,$8E,$86,$7E,$00,$00,$00,$00
|
||||
; .byte $77,$70,$6A,$64,$5E,$59,$54,$4F,$4B,$47,$43,$3F,$00,$00,$00,$00
|
||||
; .byte $3B,$38,$35,$32,$2F,$2C,$2A,$27,$25,$23,$21,$1F,$00,$00,$00,$00
|
||||
|
||||
;=====================
|
||||
; address in X
|
||||
; value in A
|
||||
pt3_write_reg:
|
||||
stx MOCK_6522_ORA1 ; put address on PA1 ; 4
|
||||
stx MOCK_6522_ORA2 ; put address on PA2 ; 4
|
||||
ldy #MOCK_AY_LATCH_ADDR ; latch_address for PB1 ; 2
|
||||
sty MOCK_6522_ORB1 ; latch_address on PB1 ; 4
|
||||
sty MOCK_6522_ORB2 ; latch_address on PB2 ; 4
|
||||
ldy #MOCK_AY_INACTIVE ; go inactive ; 2
|
||||
sty MOCK_6522_ORB1 ; 4
|
||||
sty MOCK_6522_ORB2 ; 4
|
||||
|
||||
; value
|
||||
sta MOCK_6522_ORA1 ; put value on PA1 ; 4
|
||||
sta MOCK_6522_ORA2 ; put value on PA2 ; 4
|
||||
lda #MOCK_AY_WRITE ; ; 2
|
||||
sta MOCK_6522_ORB1 ; write on PB1 ; 4
|
||||
sty MOCK_6522_ORB1 ; 4
|
||||
sta MOCK_6522_ORB2 ; write on PB2 ; 4
|
||||
sty MOCK_6522_ORB2 ; 4
|
||||
rts
|
277
demos/tiny_music/mockingboard_setup.s
Normal file
277
demos/tiny_music/mockingboard_setup.s
Normal file
|
@ -0,0 +1,277 @@
|
|||
; Mockingboad programming:
|
||||
; + Has two 6522 I/O chips connected to two AY-3-8910 chips
|
||||
; + Optionally has some speech chips controlled via the outport on the AY
|
||||
; + Often in slot 4
|
||||
; TODO: how to auto-detect?
|
||||
; References used:
|
||||
; http://macgui.com/usenet/?group=2&id=8366
|
||||
; 6522 Data Sheet
|
||||
; AY-3-8910 Data Sheet
|
||||
|
||||
;========================
|
||||
; Mockingboard card
|
||||
; Essentially two 6522s hooked to the Apple II bus
|
||||
; Connected to AY-3-8910 chips
|
||||
; PA0-PA7 on 6522 connected to DA0-DA7 on AY
|
||||
; PB0 on 6522 connected to BC1
|
||||
; PB1 on 6522 connected to BDIR
|
||||
; PB2 on 6522 connected to RESET
|
||||
|
||||
|
||||
; left speaker
|
||||
MOCK_6522_ORB1 = $C400 ; 6522 #1 port b data
|
||||
MOCK_6522_ORA1 = $C401 ; 6522 #1 port a data
|
||||
MOCK_6522_DDRB1 = $C402 ; 6522 #1 data direction port B
|
||||
MOCK_6522_DDRA1 = $C403 ; 6522 #1 data direction port A
|
||||
MOCK_6522_T1CL = $C404 ; 6522 #1 t1 low order latches
|
||||
MOCK_6522_T1CH = $C405 ; 6522 #1 t1 high order counter
|
||||
MOCK_6522_T1LL = $C406 ; 6522 #1 t1 low order latches
|
||||
MOCK_6522_T1LH = $C407 ; 6522 #1 t1 high order latches
|
||||
MOCK_6522_T2CL = $C408 ; 6522 #1 t2 low order latches
|
||||
MOCK_6522_T2CH = $C409 ; 6522 #1 t2 high order counters
|
||||
MOCK_6522_SR = $C40A ; 6522 #1 shift register
|
||||
MOCK_6522_ACR = $C40B ; 6522 #1 auxilliary control register
|
||||
MOCK_6522_PCR = $C40C ; 6522 #1 peripheral control register
|
||||
MOCK_6522_IFR = $C40D ; 6522 #1 interrupt flag register
|
||||
MOCK_6522_IER = $C40E ; 6522 #1 interrupt enable register
|
||||
MOCK_6522_ORANH = $C40F ; 6522 #1 port a data no handshake
|
||||
|
||||
|
||||
; right speaker
|
||||
MOCK_6522_ORB2 = $C480 ; 6522 #2 port b data
|
||||
MOCK_6522_ORA2 = $C481 ; 6522 #2 port a data
|
||||
MOCK_6522_DDRB2 = $C482 ; 6522 #2 data direction port B
|
||||
MOCK_6522_DDRA2 = $C483 ; 6522 #2 data direction port A
|
||||
|
||||
; AY-3-8910 commands on port B
|
||||
; RESET BDIR BC1
|
||||
MOCK_AY_RESET = $0 ; 0 0 0
|
||||
MOCK_AY_INACTIVE = $4 ; 1 0 0
|
||||
MOCK_AY_READ = $5 ; 1 0 1
|
||||
MOCK_AY_WRITE = $6 ; 1 1 0
|
||||
MOCK_AY_LATCH_ADDR = $7 ; 1 1 1
|
||||
|
||||
|
||||
;========================
|
||||
; Mockingboard Init
|
||||
;========================
|
||||
; Initialize the 6522s
|
||||
; set the data direction for all pins of PortA/PortB to be output
|
||||
|
||||
mockingboard_init:
|
||||
lda #$ff ; all output (1)
|
||||
|
||||
mock_init_smc1:
|
||||
sta MOCK_6522_DDRB1
|
||||
sta MOCK_6522_DDRA1
|
||||
mock_init_smc2:
|
||||
sta MOCK_6522_DDRB2
|
||||
sta MOCK_6522_DDRA2
|
||||
rts
|
||||
|
||||
;===================================
|
||||
;===================================
|
||||
; Reset Both AY-3-8910s
|
||||
;===================================
|
||||
;===================================
|
||||
|
||||
;======================
|
||||
; Reset Left AY-3-8910
|
||||
;======================
|
||||
reset_ay_both:
|
||||
lda #MOCK_AY_RESET
|
||||
reset_ay_smc1:
|
||||
sta MOCK_6522_ORB1
|
||||
lda #MOCK_AY_INACTIVE
|
||||
reset_ay_smc2:
|
||||
sta MOCK_6522_ORB1
|
||||
|
||||
;======================
|
||||
; Reset Right AY-3-8910
|
||||
;======================
|
||||
;reset_ay_right:
|
||||
;could be merged with both
|
||||
lda #MOCK_AY_RESET
|
||||
reset_ay_smc3:
|
||||
sta MOCK_6522_ORB2
|
||||
lda #MOCK_AY_INACTIVE
|
||||
reset_ay_smc4:
|
||||
sta MOCK_6522_ORB2
|
||||
rts
|
||||
|
||||
|
||||
; Write sequence
|
||||
; Inactive -> Latch Address -> Inactive -> Write Data -> Inactive
|
||||
|
||||
;=========================================
|
||||
; Write Right/Left to save value AY-3-8910
|
||||
;=========================================
|
||||
; register in X
|
||||
; value in MB_VALUE
|
||||
|
||||
write_ay_both:
|
||||
; address
|
||||
|
||||
write_ay_smc1:
|
||||
stx MOCK_6522_ORA1 ; put address on PA1 ; 4
|
||||
stx MOCK_6522_ORA2 ; put address on PA2 ; 4
|
||||
lda #MOCK_AY_LATCH_ADDR ; latch_address on PB1 ; 2
|
||||
write_ay_smc2:
|
||||
sta MOCK_6522_ORB1 ; latch_address on PB1 ; 4
|
||||
sta MOCK_6522_ORB2 ; latch_address on PB2 ; 4
|
||||
ldy #MOCK_AY_INACTIVE ; go inactive ; 2
|
||||
write_ay_smc3:
|
||||
sty MOCK_6522_ORB1 ; 4
|
||||
sty MOCK_6522_ORB2 ; 4
|
||||
;===========
|
||||
; 28
|
||||
; value
|
||||
lda MB_VALUE ; 3
|
||||
write_ay_smc4:
|
||||
sta MOCK_6522_ORA1 ; put value on PA1 ; 4
|
||||
sta MOCK_6522_ORA2 ; put value on PA2 ; 4
|
||||
lda #MOCK_AY_WRITE ; ; 2
|
||||
write_ay_smc5:
|
||||
sta MOCK_6522_ORB1 ; write on PB1 ; 4
|
||||
sta MOCK_6522_ORB2 ; write on PB2 ; 4
|
||||
write_ay_smc6:
|
||||
sty MOCK_6522_ORB1 ; 4
|
||||
sty MOCK_6522_ORB2 ; 4
|
||||
;===========
|
||||
; 29
|
||||
|
||||
rts ; 6
|
||||
;===========
|
||||
; 63
|
||||
write_ay_both_end:
|
||||
;.assert >write_ay_both = >write_ay_both_end, error, "write_ay_both crosses page"
|
||||
|
||||
;=======================================
|
||||
; clear ay -- clear all 14 AY registers
|
||||
; should silence the card
|
||||
;=======================================
|
||||
; 7+(74*14)+5=1048
|
||||
clear_ay_both:
|
||||
ldx #13 ; 2
|
||||
lda #0 ; 2
|
||||
sta MB_VALUE ; 3
|
||||
clear_ay_left_loop:
|
||||
jsr write_ay_both ; 6+63
|
||||
dex ; 2
|
||||
bpl clear_ay_left_loop ; 3
|
||||
; -1
|
||||
rts ; 6
|
||||
|
||||
clear_ay_end:
|
||||
;.assert >clear_ay_both = >clear_ay_end, error, "clear_ay_both crosses page"
|
||||
|
||||
;=============================
|
||||
; Setup
|
||||
;=============================
|
||||
mockingboard_setup_interrupt:
|
||||
|
||||
.ifdef PT3_ENABLE_APPLE_IIC
|
||||
lda APPLEII_MODEL
|
||||
cmp #'C'
|
||||
bne done_iic_hack
|
||||
|
||||
; bypass the firmware interrupt handler
|
||||
; should we do this on IIe too? probably faster
|
||||
|
||||
; first we have to copy the ROM to the language card
|
||||
|
||||
sei ; disable interrupts
|
||||
|
||||
|
||||
|
||||
copy_rom_loop:
|
||||
lda $c089 ; read ROM, write RAM1
|
||||
lda $c089
|
||||
|
||||
ldy #0
|
||||
read_rom_loop:
|
||||
lda $D000,Y
|
||||
sta $400,Y ; note this uses text page as
|
||||
; temporary data store
|
||||
iny
|
||||
bne read_rom_loop
|
||||
|
||||
lda $c08B ; read/write RAM1
|
||||
lda $c08B ;
|
||||
|
||||
write_rom_loop:
|
||||
lda $400,Y
|
||||
sta $D000,Y
|
||||
iny
|
||||
bne write_rom_loop
|
||||
|
||||
inc read_rom_loop+2
|
||||
inc write_rom_loop+5
|
||||
bne copy_rom_loop
|
||||
|
||||
lda #<interrupt_handler
|
||||
sta $fffe
|
||||
lda #>interrupt_handler
|
||||
sta $ffff
|
||||
|
||||
lda #$EA ; nop out the "lda $45" in the irq handler
|
||||
sta interrupt_smc
|
||||
sta interrupt_smc+1
|
||||
.endif
|
||||
|
||||
done_iic_hack:
|
||||
|
||||
|
||||
;=========================
|
||||
; Setup Interrupt Handler
|
||||
;=========================
|
||||
; Vector address goes to 0x3fe/0x3ff
|
||||
; FIXME: should chain any existing handler
|
||||
|
||||
lda #<interrupt_handler
|
||||
sta $03fe
|
||||
lda #>interrupt_handler
|
||||
sta $03ff
|
||||
|
||||
;============================
|
||||
; Enable 50Hz clock on 6522
|
||||
;============================
|
||||
|
||||
|
||||
; Note, on Apple II the clock isn't 1MHz but is actually closer to
|
||||
; roughly 1.023MHz, and every 65th clock is stretched (it's complicated)
|
||||
|
||||
; 4fe7 / 1.023e6 = .020s, 50Hz
|
||||
; 9c40 / 1.023e6 = .040s, 25Hz
|
||||
; 411a / 1.023e6 = .016s, 60Hz
|
||||
|
||||
; French Touch uses
|
||||
; 4e20 / 1.000e6 = .020s, 50Hz, which assumes 1MHz clock freq
|
||||
|
||||
sei ; disable interrupts just in case
|
||||
|
||||
lda #$40 ; Continuous interrupts, don't touch PB7
|
||||
setup_irq_smc1:
|
||||
sta MOCK_6522_ACR ; ACR register
|
||||
lda #$7F ; clear all interrupt flags
|
||||
setup_irq_smc2:
|
||||
sta MOCK_6522_IER ; IER register (interrupt enable)
|
||||
|
||||
lda #$C0
|
||||
setup_irq_smc3:
|
||||
sta MOCK_6522_IFR ; IFR: 1100, enable interrupt on timer one oflow
|
||||
setup_irq_smc4:
|
||||
sta MOCK_6522_IER ; IER: 1100, enable timer one interrupt
|
||||
|
||||
lda #$E7
|
||||
; lda #$20
|
||||
setup_irq_smc5:
|
||||
sta MOCK_6522_T1CL ; write into low-order latch
|
||||
lda #$4f
|
||||
; lda #$4E
|
||||
setup_irq_smc6:
|
||||
sta MOCK_6522_T1CH ; write into high-order latch,
|
||||
; load both values into counter
|
||||
; clear interrupt and start counting
|
||||
|
||||
rts
|
46
demos/tiny_music/music.s
Normal file
46
demos/tiny_music/music.s
Normal file
|
@ -0,0 +1,46 @@
|
|||
; Tiny Mockingboard Player
|
||||
|
||||
|
||||
; proposed format
|
||||
; CCOONNNN -- c=channel, o=octave, n=note
|
||||
; 11LLLLLL -- L=length
|
||||
|
||||
; by deater (Vince Weaver) <vince@deater.net>
|
||||
|
||||
; Zero Page
|
||||
.include "zp.inc"
|
||||
.include "hardware.inc"
|
||||
|
||||
|
||||
;==========================================
|
||||
|
||||
tiny_music:
|
||||
|
||||
;===================
|
||||
;
|
||||
|
||||
;===================
|
||||
; Player Setup
|
||||
|
||||
lda #0
|
||||
sta DONE_PLAYING
|
||||
lda #1
|
||||
sta LOOP
|
||||
|
||||
; assume mockingboard in slot#4
|
||||
|
||||
jsr mockingboard_init
|
||||
jsr mockingboard_setup_interrupt
|
||||
jsr reset_ay_both
|
||||
jsr clear_ay_both
|
||||
|
||||
start_interrupts:
|
||||
cli
|
||||
|
||||
rts
|
||||
|
||||
.include "mockingboard_setup.s"
|
||||
.include "interrupt_handler.s"
|
||||
|
||||
.include "nozp.inc"
|
||||
|
27
demos/tiny_music/nozp.inc
Normal file
27
demos/tiny_music/nozp.inc
Normal file
|
@ -0,0 +1,27 @@
|
|||
;; Things that normally would go in the zero page
|
||||
|
||||
|
||||
AY_REGISTERS:
|
||||
A_FINE_TONE: .byte $00
|
||||
A_COARSE_TONE: .byte $00
|
||||
B_FINE_TONE: .byte $00
|
||||
B_COARSE_TONE: .byte $00
|
||||
C_FINE_TONE: .byte $00
|
||||
C_COARSE_TONE: .byte $00
|
||||
NOISE: .byte $00
|
||||
ENABLE:
|
||||
PT3_MIXER_VAL: .byte $00
|
||||
A_VOLUME: .byte $00
|
||||
B_VOLUME: .byte $00
|
||||
C_VOLUME: .byte $00
|
||||
ENVELOPE_FINE: .byte $00
|
||||
ENVELOPE_COARSE:.byte $00
|
||||
ENVELOPE_SHAPE: .byte $00
|
||||
|
||||
LOOP: .byte $00
|
||||
MB_VALUE: .byte $00
|
||||
DONE_PLAYING: .byte $00
|
||||
DONE_SONG: .byte $00
|
||||
PT3_TEMP: .byte $00
|
||||
|
||||
|
654
demos/tiny_music/peasant.txt
Normal file
654
demos/tiny_music/peasant.txt
Normal file
|
@ -0,0 +1,654 @@
|
|||
'
|
||||
' TITLE: Peasant's Quest Theme
|
||||
' AUTHOR: (tracked by) Vince Weaver <vince@deater.net>
|
||||
' COMMENTS: based on MIDI found online
|
||||
'
|
||||
' LOOP: 640
|
||||
'
|
||||
' BPM: 250
|
||||
' TEMPO: 6
|
||||
' FREQ: 1000000
|
||||
' IRQ: 50
|
||||
'
|
||||
' LYRICS: 0
|
||||
'
|
||||
' ENDHEADER
|
||||
-------
|
||||
' 0
|
||||
0 C 2 3 ----- -----
|
||||
1 ----- ----- -----
|
||||
2 ----- ----- -----
|
||||
3 ----- ----- -----
|
||||
4 ----- ----- -----
|
||||
5 ----- ----- -----
|
||||
6 ----- ----- -----
|
||||
7 ----- ----- -----
|
||||
8 ----- ----- -----
|
||||
9 ----- ----- -----
|
||||
A ----- ----- -----
|
||||
B ----- ----- -----
|
||||
C C 2 3 ----- -----
|
||||
D ----- ----- -----
|
||||
E ----- ----- -----
|
||||
F ----- ----- -----
|
||||
10 C 2 3 ----- -----
|
||||
11 ----- ----- -----
|
||||
12 ----- ----- -----
|
||||
13 ----- ----- -----
|
||||
14 C 2 3 ----- -----
|
||||
15 ----- ----- -----
|
||||
16 ----- ----- -----
|
||||
17 ----- ----- -----
|
||||
18 C 2 3 ----- -----
|
||||
19 ----- ----- -----
|
||||
1A ----- ----- -----
|
||||
1B ----- ----- -----
|
||||
1C ----- ----- -----
|
||||
1D ----- ----- -----
|
||||
1E ----- ----- -----
|
||||
1F ----- ----- -----
|
||||
20 ----- ----- -----
|
||||
21 ----- ----- -----
|
||||
22 ----- ----- -----
|
||||
23 ----- ----- -----
|
||||
24 C 2 3 ----- -----
|
||||
25 ----- ----- -----
|
||||
26 ----- ----- -----
|
||||
27 ----- ----- -----
|
||||
28 C 2 3 ----- -----
|
||||
29 ----- ----- -----
|
||||
2A ----- ----- -----
|
||||
2B ----- ----- -----
|
||||
2C C 2 3 ----- -----
|
||||
2D ----- ----- -----
|
||||
2E ----- ----- -----
|
||||
2F ----- ----- -----
|
||||
' 0 again
|
||||
0 C 2 3 ----- -----
|
||||
1 ----- ----- -----
|
||||
2 ----- ----- -----
|
||||
3 ----- ----- -----
|
||||
4 ----- ----- -----
|
||||
5 ----- ----- -----
|
||||
6 ----- ----- -----
|
||||
7 ----- ----- -----
|
||||
8 ----- ----- -----
|
||||
9 ----- ----- -----
|
||||
A ----- ----- -----
|
||||
B ----- ----- -----
|
||||
C C 2 3 ----- -----
|
||||
D ----- ----- -----
|
||||
E ----- ----- -----
|
||||
F ----- ----- -----
|
||||
10 C 2 3 ----- -----
|
||||
11 ----- ----- -----
|
||||
12 ----- ----- -----
|
||||
13 ----- ----- -----
|
||||
14 C 2 3 ----- -----
|
||||
15 ----- ----- -----
|
||||
16 ----- ----- -----
|
||||
17 ----- ----- -----
|
||||
18 C 2 3 ----- -----
|
||||
19 ----- ----- -----
|
||||
1A ----- ----- -----
|
||||
1B ----- ----- -----
|
||||
1C ----- ----- -----
|
||||
1D ----- ----- -----
|
||||
1E ----- ----- -----
|
||||
1F ----- ----- -----
|
||||
20 ----- ----- -----
|
||||
21 ----- ----- -----
|
||||
22 ----- ----- -----
|
||||
23 ----- ----- -----
|
||||
24 C 2 3 ----- -----
|
||||
25 ----- ----- -----
|
||||
26 ----- ----- -----
|
||||
27 ----- ----- -----
|
||||
28 C 2 3 ----- -----
|
||||
29 ----- ----- -----
|
||||
2A ----- ----- -----
|
||||
2B ----- ----- -----
|
||||
2C C 2 3 ----- -----
|
||||
2D ----- ----- -----
|
||||
2E ----- ----- -----
|
||||
2F ----- ----- -----
|
||||
' 1
|
||||
0 F 2 3 ----- -----
|
||||
1 ----- ----- -----
|
||||
2 ----- ----- -----
|
||||
3 ----- ----- -----
|
||||
4 ----- ----- -----
|
||||
5 ----- ----- -----
|
||||
6 ----- ----- -----
|
||||
7 ----- ----- -----
|
||||
8 ----- ----- -----
|
||||
9 ----- ----- -----
|
||||
A ----- ----- -----
|
||||
B ----- ----- -----
|
||||
C F 2 3 ----- -----
|
||||
D ----- ----- -----
|
||||
E ----- ----- -----
|
||||
F ----- ----- -----
|
||||
10 F 2 3 ----- -----
|
||||
11 ----- ----- -----
|
||||
12 ----- ----- -----
|
||||
13 ----- ----- -----
|
||||
14 F 2 3 ----- -----
|
||||
15 ----- ----- -----
|
||||
16 ----- ----- -----
|
||||
17 ----- ----- -----
|
||||
18 F 2 3 ----- -----
|
||||
19 ----- ----- -----
|
||||
1A ----- ----- -----
|
||||
1B ----- ----- -----
|
||||
1C ----- ----- -----
|
||||
1D ----- ----- -----
|
||||
1E ----- ----- -----
|
||||
1F ----- ----- -----
|
||||
20 ----- ----- -----
|
||||
21 ----- ----- -----
|
||||
22 ----- ----- -----
|
||||
23 ----- ----- -----
|
||||
24 F 2 3 ----- -----
|
||||
25 ----- ----- -----
|
||||
26 ----- ----- -----
|
||||
27 ----- ----- -----
|
||||
28 F 2 3 ----- -----
|
||||
29 ----- ----- -----
|
||||
2A ----- ----- -----
|
||||
2B ----- ----- -----
|
||||
2C F 2 3 ----- -----
|
||||
2D ----- ----- -----
|
||||
2E ----- ----- -----
|
||||
2F ----- ----- -----
|
||||
' 2
|
||||
0 G 2 3 ----- -----
|
||||
1 ----- ----- -----
|
||||
2 ----- ----- -----
|
||||
3 ----- ----- -----
|
||||
4 ----- ----- -----
|
||||
5 ----- ----- -----
|
||||
6 ----- ----- -----
|
||||
7 ----- ----- -----
|
||||
8 ----- ----- -----
|
||||
9 ----- ----- -----
|
||||
A ----- ----- -----
|
||||
B ----- ----- -----
|
||||
C G 2 3 ----- -----
|
||||
D ----- ----- -----
|
||||
E ----- ----- -----
|
||||
F ----- ----- -----
|
||||
10 G 2 3 ----- -----
|
||||
11 ----- ----- -----
|
||||
12 ----- ----- -----
|
||||
13 ----- ----- -----
|
||||
14 G 2 3 ----- -----
|
||||
15 ----- ----- -----
|
||||
16 ----- ----- -----
|
||||
17 ----- ----- -----
|
||||
18 G 2 3 ----- -----
|
||||
19 ----- ----- -----
|
||||
1A ----- ----- -----
|
||||
1B ----- ----- -----
|
||||
1C ----- ----- -----
|
||||
1D ----- ----- -----
|
||||
1E ----- ----- -----
|
||||
1F ----- ----- -----
|
||||
20 ----- ----- -----
|
||||
21 ----- ----- -----
|
||||
22 ----- ----- -----
|
||||
23 ----- ----- -----
|
||||
24 G 2 3 ----- -----
|
||||
25 ----- ----- -----
|
||||
26 ----- ----- -----
|
||||
27 ----- ----- -----
|
||||
28 G 2 3 ----- -----
|
||||
29 ----- ----- -----
|
||||
2A ----- ----- -----
|
||||
2B ----- ----- -----
|
||||
2C G 2 3 ----- -----
|
||||
2D ----- ----- -----
|
||||
2E ----- ----- -----
|
||||
2F ----- ----- -----
|
||||
' 3
|
||||
0 C 2 3 C 4 4 -----
|
||||
1 ----- ----- -----
|
||||
2 ----- ----- -----
|
||||
3 ----- ----- -----
|
||||
4 ----- C 4 4 -----
|
||||
5 ----- ----- -----
|
||||
6 ----- ----- -----
|
||||
7 ----- ----- -----
|
||||
8 ----- C 4 4 -----
|
||||
9 ----- ----- -----
|
||||
A ----- ----- -----
|
||||
B ----- ----- -----
|
||||
C C 2 3 C 4 4 -----
|
||||
D ----- ----- -----
|
||||
E ----- ----- -----
|
||||
F ----- ----- -----
|
||||
10 C 2 3 C 4 4 -----
|
||||
11 ----- ----- -----
|
||||
12 ----- ----- -----
|
||||
13 ----- ----- -----
|
||||
14 C 2 3 C 4 4 -----
|
||||
15 ----- ----- -----
|
||||
16 ----- ----- -----
|
||||
17 ----- ----- -----
|
||||
18 C 2 3 ----- -----
|
||||
19 ----- ----- -----
|
||||
1A ----- ----- -----
|
||||
1B ----- ----- -----
|
||||
1C ----- ----- -----
|
||||
1D ----- ----- -----
|
||||
1E ----- ----- -----
|
||||
1F ----- ----- -----
|
||||
20 ----- ----- -----
|
||||
21 ----- ----- -----
|
||||
22 ----- ----- -----
|
||||
23 ----- ----- -----
|
||||
24 C 2 3 ----- -----
|
||||
25 ----- ----- -----
|
||||
26 ----- ----- -----
|
||||
27 ----- ----- -----
|
||||
28 C 2 3 ----- -----
|
||||
29 ----- ----- -----
|
||||
2A ----- ----- -----
|
||||
2B ----- ----- -----
|
||||
2C C 2 3 ----- -----
|
||||
2D ----- ----- -----
|
||||
2E ----- ----- -----
|
||||
2F ----- ----- -----
|
||||
' 4
|
||||
0 C 2 3 ----- -----
|
||||
1 ----- ----- -----
|
||||
2 ----- ----- -----
|
||||
3 ----- ----- -----
|
||||
4 ----- ----- -----
|
||||
5 ----- ----- -----
|
||||
6 ----- ----- -----
|
||||
7 ----- ----- -----
|
||||
8 ----- G 4 3 -----
|
||||
9 ----- ----- -----
|
||||
A ----- ----- -----
|
||||
B ----- ----- -----
|
||||
C C 2 3 G 4 4 -----
|
||||
D ----- ----- -----
|
||||
E ----- ----- -----
|
||||
F ----- ----- -----
|
||||
10 C 2 3 G 4 3 -----
|
||||
11 ----- ----- -----
|
||||
12 ----- ----- -----
|
||||
13 ----- ----- -----
|
||||
14 C 2 3 F 4 3 -----
|
||||
15 ----- ----- -----
|
||||
16 ----- ----- -----
|
||||
17 ----- ----- -----
|
||||
18 C 2 3 F 4 4 -----
|
||||
19 ----- ----- -----
|
||||
1A ----- ----- -----
|
||||
1B ----- ----- -----
|
||||
1C ----- F 4 3 -----
|
||||
1D ----- ----- -----
|
||||
1E ----- ----- -----
|
||||
1F ----- ----- -----
|
||||
20 ----- E 4 3 -----
|
||||
21 ----- ----- -----
|
||||
22 ----- ----- -----
|
||||
23 ----- ----- -----
|
||||
24 C 2 3 E 4 4 -----
|
||||
25 ----- ----- -----
|
||||
26 ----- ----- -----
|
||||
27 ----- ----- -----
|
||||
28 C 2 3 E 4 3 -----
|
||||
29 ----- ----- -----
|
||||
2A ----- ----- -----
|
||||
2B ----- ----- -----
|
||||
2C C 2 3 F 4 3 -----
|
||||
2D ----- ----- -----
|
||||
2E ----- ----- -----
|
||||
2F ----- ----- -----
|
||||
' 5
|
||||
0 F 2 3 C 4 4 -----
|
||||
1 ----- ----- -----
|
||||
2 ----- ----- -----
|
||||
3 ----- ----- -----
|
||||
4 ----- C 4 4 -----
|
||||
5 ----- ----- -----
|
||||
6 ----- ----- -----
|
||||
7 ----- ----- -----
|
||||
8 ----- C 4 4 -----
|
||||
9 ----- ----- -----
|
||||
A ----- ----- -----
|
||||
B ----- ----- -----
|
||||
C F 2 3 C 4 4 -----
|
||||
D ----- ----- -----
|
||||
E ----- ----- -----
|
||||
F ----- ----- -----
|
||||
10 F 2 3 C 4 4 -----
|
||||
11 ----- ----- -----
|
||||
12 ----- ----- -----
|
||||
13 ----- ----- -----
|
||||
14 F 2 3 C 4 4 -----
|
||||
15 ----- ----- -----
|
||||
16 ----- ----- -----
|
||||
17 ----- ----- -----
|
||||
18 F 2 3 ----- -----
|
||||
19 ----- ----- -----
|
||||
1A ----- ----- -----
|
||||
1B ----- ----- -----
|
||||
1C ----- ----- -----
|
||||
1D ----- ----- -----
|
||||
1E ----- ----- -----
|
||||
1F ----- ----- -----
|
||||
20 ----- ----- -----
|
||||
21 ----- ----- -----
|
||||
22 ----- ----- -----
|
||||
23 ----- ----- -----
|
||||
24 F 2 3 ----- -----
|
||||
25 ----- ----- -----
|
||||
26 ----- ----- -----
|
||||
27 ----- ----- -----
|
||||
28 F 2 3 ----- -----
|
||||
29 ----- ----- -----
|
||||
2A ----- ----- -----
|
||||
2B ----- ----- -----
|
||||
2C F 2 3 ----- -----
|
||||
2D ----- ----- -----
|
||||
2E ----- ----- -----
|
||||
2F ----- ----- -----
|
||||
' 6
|
||||
0 G 2 3 ----- -----
|
||||
1 ----- ----- -----
|
||||
2 ----- ----- -----
|
||||
3 ----- ----- -----
|
||||
4 ----- ----- -----
|
||||
5 ----- ----- -----
|
||||
6 ----- ----- -----
|
||||
7 ----- ----- -----
|
||||
8 ----- G 4 3 -----
|
||||
9 ----- ----- -----
|
||||
A ----- ----- -----
|
||||
B ----- ----- -----
|
||||
C G 2 3 G 4 4 -----
|
||||
D ----- ----- -----
|
||||
E ----- ----- -----
|
||||
F ----- ----- -----
|
||||
10 G 2 3 G 4 3 -----
|
||||
11 ----- ----- -----
|
||||
12 ----- ----- -----
|
||||
13 ----- ----- -----
|
||||
14 G 2 3 F 4 3 -----
|
||||
15 ----- ----- -----
|
||||
16 ----- ----- -----
|
||||
17 ----- ----- -----
|
||||
18 G 2 3 F 4 4 -----
|
||||
19 ----- ----- -----
|
||||
1A ----- ----- -----
|
||||
1B ----- ----- -----
|
||||
1C ----- F 4 3 -----
|
||||
1D ----- ----- -----
|
||||
1E ----- ----- -----
|
||||
1F ----- ----- -----
|
||||
20 ----- E 4 3 -----
|
||||
21 ----- ----- -----
|
||||
22 ----- ----- -----
|
||||
23 ----- ----- -----
|
||||
24 G 2 3 E 4 4 -----
|
||||
25 ----- ----- -----
|
||||
26 ----- ----- -----
|
||||
27 ----- ----- -----
|
||||
28 G 2 3 E 4 3 -----
|
||||
29 ----- ----- -----
|
||||
2A ----- ----- -----
|
||||
2B ----- ----- -----
|
||||
2C G 2 3 F 4 3 -----
|
||||
2D ----- ----- -----
|
||||
2E ----- ----- -----
|
||||
2F ----- ----- -----
|
||||
' 7
|
||||
0 C 2 3 D 4 3 -----
|
||||
1 ----- ----- -----
|
||||
2 ----- ----- -----
|
||||
3 ----- D 4 6 -----
|
||||
4 ----- D 4 8 -----
|
||||
5 ----- ----- -----
|
||||
6 ----- D 4 3 -----
|
||||
7 ----- ----- -----
|
||||
8 ----- ----- -----
|
||||
9 ----- D 4 3 -----
|
||||
A ----- ----- -----
|
||||
B ----- ----- -----
|
||||
C C 2 3 A#4 4 -----
|
||||
D ----- ----- -----
|
||||
E ----- ----- -----
|
||||
F ----- ----- -----
|
||||
10 C 2 3 A#4 4 -----
|
||||
11 ----- ----- -----
|
||||
12 ----- ----- -----
|
||||
13 ----- ----- -----
|
||||
14 C 2 3 A#4 3 -----
|
||||
15 ----- ----- -----
|
||||
16 ----- ----- -----
|
||||
17 ----- ----- -----
|
||||
18 C 2 3 D 4 3 -----
|
||||
19 ----- ----- -----
|
||||
1A ----- ----- -----
|
||||
1B ----- D 4 6 -----
|
||||
1C ----- D 4 8 -----
|
||||
1D ----- ----- -----
|
||||
1E ----- D 4 4 -----
|
||||
1F ----- ----- -----
|
||||
20 ----- ----- -----
|
||||
21 ----- ----- -----
|
||||
22 ----- D 4 8 -----
|
||||
23 ----- ----- -----
|
||||
24 C 2 3 G 4 4 -----
|
||||
25 ----- ----- -----
|
||||
26 ----- ----- -----
|
||||
27 ----- ----- -----
|
||||
28 C 2 3 G 4 4 -----
|
||||
29 ----- ----- -----
|
||||
2A ----- ----- -----
|
||||
2B ----- ----- -----
|
||||
2C C 2 3 G 4 3 -----
|
||||
2D ----- ----- -----
|
||||
2E ----- ----- -----
|
||||
2F ----- ----- -----
|
||||
' 8
|
||||
0 C 2 3 D 4 3 -----
|
||||
1 ----- ----- -----
|
||||
2 ----- ----- -----
|
||||
3 ----- D 4 6 -----
|
||||
4 ----- D 4 8 -----
|
||||
5 ----- ----- -----
|
||||
6 ----- D 4 8 -----
|
||||
7 ----- ----- -----
|
||||
8 ----- D 4 4 -----
|
||||
9 ----- ----- -----
|
||||
A ----- ----- -----
|
||||
B ----- ----- -----
|
||||
C C 2 3 A#4 4 -----
|
||||
D ----- ----- -----
|
||||
E ----- ----- -----
|
||||
F ----- ----- -----
|
||||
10 C 2 3 A#4 8 -----
|
||||
11 ----- ----- -----
|
||||
12 ----- D 4 4 -----
|
||||
13 ----- ----- -----
|
||||
14 C 2 3 ----- -----
|
||||
15 ----- ----- -----
|
||||
16 ----- D 4 8 -----
|
||||
17 ----- ----- -----
|
||||
18 C 2 3 G 4 4 -----
|
||||
19 ----- ----- -----
|
||||
1A ----- ----- -----
|
||||
1B ----- ----- -----
|
||||
1C ----- G 4 8 -----
|
||||
1D ----- ----- -----
|
||||
1E ----- D 4 4 -----
|
||||
1F ----- ----- -----
|
||||
20 ----- ----- -----
|
||||
21 ----- ----- -----
|
||||
22 ----- D 4 8 -----
|
||||
23 ----- ----- -----
|
||||
24 C 2 3 F 4 4 -----
|
||||
25 ----- ----- -----
|
||||
26 ----- ----- -----
|
||||
27 ----- ----- -----
|
||||
28 C 2 3 F 4 8 -----
|
||||
29 ----- ----- -----
|
||||
2A ----- G 4 4 -----
|
||||
2B ----- ----- -----
|
||||
2C C 2 3 ----- -----
|
||||
2D ----- ----- -----
|
||||
2E ----- G 4 8 -----
|
||||
2F ----- ----- -----
|
||||
' 5
|
||||
0 F 2 3 C 4 4 -----
|
||||
1 ----- ----- -----
|
||||
2 ----- ----- -----
|
||||
3 ----- ----- -----
|
||||
4 ----- C 4 4 -----
|
||||
5 ----- ----- -----
|
||||
6 ----- ----- -----
|
||||
7 ----- ----- -----
|
||||
8 ----- C 4 4 -----
|
||||
9 ----- ----- -----
|
||||
A ----- ----- -----
|
||||
B ----- ----- -----
|
||||
C F 2 3 C 4 4 -----
|
||||
D ----- ----- -----
|
||||
E ----- ----- -----
|
||||
F ----- ----- -----
|
||||
10 F 2 3 C 4 4 -----
|
||||
11 ----- ----- -----
|
||||
12 ----- ----- -----
|
||||
13 ----- ----- -----
|
||||
14 F 2 3 C 4 4 -----
|
||||
15 ----- ----- -----
|
||||
16 ----- ----- -----
|
||||
17 ----- ----- -----
|
||||
18 F 2 3 ----- -----
|
||||
19 ----- ----- -----
|
||||
1A ----- ----- -----
|
||||
1B ----- ----- -----
|
||||
1C ----- ----- -----
|
||||
1D ----- ----- -----
|
||||
1E ----- ----- -----
|
||||
1F ----- ----- -----
|
||||
20 ----- ----- -----
|
||||
21 ----- ----- -----
|
||||
22 ----- ----- -----
|
||||
23 ----- ----- -----
|
||||
24 F 2 3 ----- -----
|
||||
25 ----- ----- -----
|
||||
26 ----- ----- -----
|
||||
27 ----- ----- -----
|
||||
28 F 2 3 ----- -----
|
||||
29 ----- ----- -----
|
||||
2A ----- ----- -----
|
||||
2B ----- ----- -----
|
||||
2C F 2 3 ----- -----
|
||||
2D ----- ----- -----
|
||||
2E ----- ----- -----
|
||||
2F ----- ----- -----
|
||||
' 6
|
||||
0 G 2 3 ----- -----
|
||||
1 ----- ----- -----
|
||||
2 ----- ----- -----
|
||||
3 ----- ----- -----
|
||||
4 ----- ----- -----
|
||||
5 ----- ----- -----
|
||||
6 ----- ----- -----
|
||||
7 ----- ----- -----
|
||||
8 ----- G 4 3 -----
|
||||
9 ----- ----- -----
|
||||
A ----- ----- -----
|
||||
B ----- ----- -----
|
||||
C G 2 3 G 4 4 -----
|
||||
D ----- ----- -----
|
||||
E ----- ----- -----
|
||||
F ----- ----- -----
|
||||
10 G 2 3 G 4 3 -----
|
||||
11 ----- ----- -----
|
||||
12 ----- ----- -----
|
||||
13 ----- ----- -----
|
||||
14 G 2 3 F 4 3 -----
|
||||
15 ----- ----- -----
|
||||
16 ----- ----- -----
|
||||
17 ----- ----- -----
|
||||
18 G 2 3 F 4 4 -----
|
||||
19 ----- ----- -----
|
||||
1A ----- ----- -----
|
||||
1B ----- ----- -----
|
||||
1C ----- F 4 3 -----
|
||||
1D ----- ----- -----
|
||||
1E ----- ----- -----
|
||||
1F ----- ----- -----
|
||||
20 ----- E 4 3 -----
|
||||
21 ----- ----- -----
|
||||
22 ----- ----- -----
|
||||
23 ----- ----- -----
|
||||
24 G 2 3 E 4 4 -----
|
||||
25 ----- ----- -----
|
||||
26 ----- ----- -----
|
||||
27 ----- ----- -----
|
||||
28 G 2 3 E 4 3 -----
|
||||
29 ----- ----- -----
|
||||
2A ----- ----- -----
|
||||
2B ----- ----- -----
|
||||
2C G 2 3 F 4 3 -----
|
||||
2D ----- ----- -----
|
||||
2E ----- ----- -----
|
||||
2F ----- ----- -----
|
||||
' 9
|
||||
0 C 2 3 G 4 4 -----
|
||||
1 ----- ----- -----
|
||||
2 ----- ----- -----
|
||||
3 ----- ----- -----
|
||||
4 ----- G 4 4 -----
|
||||
5 ----- ----- -----
|
||||
6 ----- ----- -----
|
||||
7 ----- ----- -----
|
||||
8 ----- G 4 3 -----
|
||||
9 ----- ----- -----
|
||||
A ----- ----- -----
|
||||
B ----- ----- -----
|
||||
C C 2 3 ----- -----
|
||||
D ----- ----- -----
|
||||
E ----- ----- -----
|
||||
F ----- ----- -----
|
||||
10 C 2 3 ----- -----
|
||||
11 ----- ----- -----
|
||||
12 ----- ----- -----
|
||||
13 ----- ----- -----
|
||||
14 C 2 3 ----- -----
|
||||
15 ----- ----- -----
|
||||
16 ----- ----- -----
|
||||
17 ----- ----- -----
|
||||
18 C 2 3 ----- -----
|
||||
19 ----- ----- -----
|
||||
1A ----- ----- -----
|
||||
1B ----- ----- -----
|
||||
1C ----- ----- -----
|
||||
1D ----- ----- -----
|
||||
1E ----- ----- -----
|
||||
1F ----- ----- -----
|
||||
20 ----- ----- -----
|
||||
21 ----- ----- -----
|
||||
22 ----- ----- -----
|
||||
23 ----- ----- -----
|
||||
24 C 2 3 ----- -----
|
||||
25 ----- ----- -----
|
||||
26 ----- ----- -----
|
||||
27 ----- ----- -----
|
||||
28 C 2 3 ----- -----
|
||||
29 ----- ----- -----
|
||||
2A ----- ----- -----
|
||||
2B ----- ----- -----
|
||||
2C C 2 3 ----- -----
|
||||
2D ----- ----- -----
|
||||
2E ----- ----- -----
|
||||
2F ----- ----- -----
|
||||
' LOOP TO FRAME 8
|
29
demos/tiny_music/zp.inc
Normal file
29
demos/tiny_music/zp.inc
Normal file
|
@ -0,0 +1,29 @@
|
|||
; these need to be in zero page
|
||||
; can we find a location that works?
|
||||
|
||||
PATTERN_L = $06
|
||||
PATTERN_H = $07
|
||||
ORNAMENT_L = $08
|
||||
ORNAMENT_H = $09
|
||||
SAMPLE_L = $0A
|
||||
SAMPLE_H = $0B
|
||||
MB_ADDR_L = $0C
|
||||
MB_ADDR_H = $0D
|
||||
|
||||
|
||||
; only used for title screen...
|
||||
TEMP = $FA
|
||||
TEMPY = $FB
|
||||
;INL = $FC
|
||||
;INH = $FD
|
||||
;OUTL = $FE
|
||||
;OUTH = $FF
|
||||
|
||||
; pre-defined applesoft vars
|
||||
|
||||
CH = $24
|
||||
CV = $25
|
||||
GBASL = $26
|
||||
GBASH = $27
|
||||
BASL = $28
|
||||
BASH = $29
|
Loading…
Reference in New Issue
Block a user