demo: sort of have music working

This commit is contained in:
Vince Weaver 2022-11-12 18:40:59 -05:00
parent 19e5b1735e
commit 58a853bcf3
18 changed files with 476 additions and 464 deletions

View File

@ -42,6 +42,7 @@ ESCAPE: escape.o
escape.o: escape.s \
logo_intro.s \
ay3_write_regs.s escape.s interrupt_handler.s \
play_frame.s amp.s \
mA2E_4.s mockingboard_constants.s mockingboard_init.s tracker_init.s
ca65 -o escape.o escape.s -l escape.lst

View File

@ -0,0 +1,89 @@
; pattern 0
; 0 -> F
; 48-> C
; 50-> A
; 52-> 9
; 54-> 8
; 56-> 7
; 58-> 6
; 60-> 5
; 62-> 4
bamps0:
; 0 15 30 45 48 50 52 54 56 58 60 62
.byte $FF,$FF,$FF,$3F,$2C,$2A,$29,$28,$27,$26,$25,$24
; pattern 1
; 0 -> F
; 9 -> C
;10 -> F
;20 -> C
;22 -> F
;29 -> C
;30 -> F
;31 -> C
;32 -> F
;40 -> C
; 48-> A
; 50-> 9
; 52-> 8
; 54-> 7
; 56-> 6
; 58-> 5
; 60-> 4
; 62-> 3
bamps1:
; 0 9 10 20 22 29 30 31 32 40 48 50 52 54 56 58 60 62
.byte $9F,$1C,$AF,$2C,$7F,$1C,$1F,$1C,$8F,$8C,$2A,$29,$28,$27,$26,$25,$24,$23
; pattern 2
; 0 ->F
; 13->C
; 14->F
; 15->C
; 16->F
; 24->C
; 26->9
; 28->8
; 30->7
; 32->F
; 45->C
; 46->F
; 47->C
; 48->F
; 56->C
; 58->9
; 60->7
; 62->6
bamps2:
; 0 13 14 15 16 24 26 28 30 32 45 46 47 48 56 58 60 62
.byte $DF,$1C,$1F,$1C,$8F,$2C,$29,$28,$27,$DF,$1C,$1F,$1C,$8F,$2C,$29,$27,$26
; pattern3
; 0->F
; 24->C
; 26->9
; 28->8
; 30->7
; 32->F
; 45->C
; 46->F
; 47->C
; 48->F
; 56->C
; 58->9
; 60->7
; 62->6
bamps3:
; 0 15 24 26 28 30 32 45 46 47 48 56 58 60 62
.byte $FF,$9F,$2C,$29,$28,$27,$DF,$1C,$1F,$1C,$8F,$2C,$29,$27,$26
; pattern4
; 0->0
; 60->F
; 61->C
; 62->F
; 63->C
bamps4:
; 0 15 30 45 60 61 62 63
.byte $F0,$F0,$F0,$F0,$1F,$1C,$1F,$1C

View File

@ -8,27 +8,25 @@
; write all 14 registers at AY_REGS
ay3_write_regs:
ldx #13
; bytes
ldx #13 ; 2
ay3_write_reg_loop:
lda #MOCK_AY_LATCH_ADDR ; latch_address for PB1 ; 2
ldy #MOCK_AY_INACTIVE ; go inactive ; 2
stx MOCK_6522_ORA1 ; put address on PA1 ; 4
sta MOCK_6522_ORB1 ; latch_address on PB1 ; 4
sty MOCK_6522_ORB1 ; 4
stx MOCK_6522_ORA1 ; put address on PA1 ; 3
sta MOCK_6522_ORB1 ; latch_address on PB1 ; 3
sty MOCK_6522_ORB1 ; 3
; value
lda AY_REGS,X
sta MOCK_6522_ORA1 ; put value on PA1 ; 4
lda AY_REGS,X ; 2
sta MOCK_6522_ORA1 ; put value on PA1 ; 3
lda #MOCK_AY_WRITE ; ; 2
sta MOCK_6522_ORB1 ; write on PB1 ; 4
sty MOCK_6522_ORB1 ; 4
sta MOCK_6522_ORB1 ; write on PB1 ; 3
sty MOCK_6522_ORB1 ; 3
dex
bpl ay3_write_reg_loop
dex ; 1
bpl ay3_write_reg_loop ; 2
; rts

View File

@ -7,19 +7,19 @@
.include "hardware.inc"
d4:
apple2_desire:
;=================
; init vars
lda #0
lda #0 ; TODO: move to ay init
sta FRAME
sta WHICH_TRACK
sta BAMP_COUNTDOWN
;===================
; music Player Setup
tracker_song = peasant_song
; assume mockingboard in slot#4
; inline mockingboard_init

View File

@ -5,4 +5,5 @@
25 PRINT:PRINT "PRESS ANY KEY TO 'BRUN ESCAPE'"
30 GET A$
35 PRINT
40 PRINT CHR$(4)"BRUN ESCAPE"

View File

@ -27,7 +27,7 @@ interrupt_handler:
tya
pha ; save Y
inc $0404 ; debug (flashes char onscreen)
; inc $0404 ; debug (flashes char onscreen)
ay3_irq_handler:
@ -60,9 +60,3 @@ interrupt_smc:
; typical
; ???? cycles

View File

@ -1,4 +1,4 @@
282 14 77 56 77 ; D
254 14 77 56 77 ; D
58 79
58 136
60 138
@ -8,7 +8,7 @@
18 82
14 82
14 77
282 26 90 40 90
254 26 90 40 90
42 92
42 129
36 129

View File

@ -1,4 +1,4 @@
282 234 91 264 91 ; E
254 234 91 264 91 ; E
264 80
258 77
220 77
@ -14,7 +14,7 @@
240 129
238 127
238 91
282 242 98 250 98
254 242 98 250 98
250 111
242 111
242 98

View File

@ -1,8 +1,8 @@
282 154 77 176 77 ; I
254 154 77 176 77 ; I
172 86
158 86
154 77
282 156 89 156 134
254 156 89 156 134
154 140
176 140
172 134

View File

@ -1,7 +1,7 @@
#include <stdio.h>
#include <stdlib.h>
#define LINE_VALUE 282
#define LINE_VALUE 254
#define STOP_VALUE 0
#define MODE_VALUE 3
@ -20,6 +20,7 @@ int main(int argc, char **argv) {
int xdiv=2;
int ydiv=1;
int i;
int first_line=1;
if (argc>1) {
xadjust=atoi(argv[1]);
@ -43,12 +44,18 @@ int main(int argc, char **argv) {
&a1,&a2,&a3,&a4,&a5);
if (debug) fprintf(stderr,"%d %d %d %d %d\n",a1,a2,a3,a4,a5);
if (a1==LINE_VALUE) {
output[out_ptr]=((a1)/xdiv)+add;
output[out_ptr+1]=((a2-xadjust)/xdiv)+add;
output[out_ptr+2]=((a3-yadjust)/ydiv)+add;
output[out_ptr+3]=((a4-xadjust)/xdiv)+add;
output[out_ptr+4]=((a5-yadjust)/ydiv)+add;
out_ptr+=5;
if (first_line) {
first_line=0;
}
else {
output[out_ptr]=((a1)/xdiv)+add;
out_ptr+=1;
}
output[out_ptr+0]=((a2-xadjust)/xdiv)+add;
output[out_ptr+1]=((a3-yadjust)/ydiv)+add;
output[out_ptr+2]=((a4-xadjust)/xdiv)+add;
output[out_ptr+3]=((a5-yadjust)/ydiv)+add;
out_ptr+=4;
}
else if (a1==MODE_VALUE) {
output[out_ptr]=((a1-xadjust)/xdiv)+add;

View File

@ -1,4 +1,4 @@
282 176 77 216 77 ; R
254 176 77 216 77 ; R
218 79
218 102
216 104
@ -13,7 +13,7 @@
178 136
178 82
176 77
282 190 88 202 88
254 190 88 202 88
204 90
204 105
196 105

View File

@ -1,4 +1,4 @@
282 108 77 148 77 ; S
254 108 77 148 77 ; S
150 79
150 101
136 101

View File

@ -4,6 +4,9 @@
; 908 bytes -- first display
; 916 bytes -- scroll down
; 914 bytes -- assume < 256 co-ords
; 908 bytes -- assume first co-oord is an HPLOT
; 906 bytes -- save value on stack rather than ZP
show_logo:
@ -74,6 +77,7 @@ logo_done:
jmp skip_it
;========================
; draw letter
;========================
@ -82,16 +86,14 @@ logo_done:
draw_letter:
ldy #0 ; iterator
ldy #$FF ; iterator
letter_loop:
lda (INL),Y
cmp #$FF
beq letter_done
cmp #$8D
bne hplot_to
hplot:
; setup X value
iny
lda (INL),Y ; get X value
@ -100,10 +102,11 @@ hplot:
adc LETTER_X
tax ; put in X
; setup Y value
iny ; point to Y value
tya ; save Y value on stack for later
pha
sty SAVE_Y ; save Y value on stack for later
lda (INL),Y ; get Y value
clc
@ -113,43 +116,53 @@ hplot:
jsr HPLOT0 ; plot at (Y,X), (A)
pla ; restore pointer
tay
ldy SAVE_Y ; restore pointer
iny
hplot_to:
lda (INL),Y
asl
clc
adc LETTER_X
sta TEMP
; get X value
lda #0
lda (INL),Y ; get next value
asl ; mul by 2
clc
adc LETTER_X ; add in offset
pha ; save for later
lda #0 ; wrap if > 256
adc #0
tax
; get Y value
iny
tya
pha
sty SAVE_Y ; save Y value
lda (INL),Y
clc
lda (INL),Y ; get next value
clc ; add Y offset
adc LETTER_Y
tay
tay ; put into Y
lda TEMP
pla ; restore X value
jsr HGLIN ; line to (X,A),(Y)
jsr HGLIN ; line to (X,A),(Y)
pla
tay
ldy SAVE_Y
iny
jmp letter_loop
; see if at end of line or of whole thing
lda (INL),Y ; get next value
bmi letter_done ; if negative, we are done
cmp #$7F
beq hplot
bne hplot_to
letter_done:
rts

View File

@ -5,573 +5,423 @@ track0:
; A: 12
; B: 55
; none: a=-1 b=-1 len=0
; A: 12
; none: a=0 b=1 len=2
.byte $00 ; A=0 L=0
.byte $0D ; B=1 L=2
.byte $00 ; frame=2 A=0 L=0
.byte $0D ; frame=2 B=1 L=2
; A: 24
; B: 64
; none: a=0 b=-1 len=2
.byte $04 ; A=0 L=2
.byte $04 ; frame=4 A=0 L=2
; A: 12
; none: a=2 b=3 len=2
.byte $10 ; A=2 L=0
.byte $1D ; B=3 L=2
.byte $10 ; frame=6 A=2 L=0
.byte $1D ; frame=6 B=3 L=2
; A: 10
; B: 62
; none: a=0 b=-1 len=2
.byte $04 ; A=0 L=2
.byte $04 ; frame=8 A=0 L=2
; A: 12
; B: 60
; none: a=4 b=5 len=2
.byte $20 ; A=4 L=0
.byte $2D ; B=5 L=2
.byte $20 ; frame=10 A=4 L=0
.byte $2D ; frame=10 B=5 L=2
; A: 15
; none: a=0 b=6 len=2
.byte $00 ; A=0 L=0
.byte $35 ; B=6 L=2
.byte $00 ; frame=12 A=0 L=0
.byte $35 ; frame=12 B=6 L=2
; A: 17
; B: 58
; none: a=7 b=-1 len=2
.byte $3C ; A=7 L=2
.byte $3C ; frame=14 A=7 L=2
; A: 10
; none: a=8 b=9 len=2
.byte $40 ; A=8 L=0
.byte $4D ; B=9 L=2
.byte $40 ; frame=16 A=8 L=0
.byte $4D ; frame=16 B=9 L=2
; A: 10
; none: a=4 b=-1 len=2
.byte $24 ; A=4 L=2
.byte $24 ; frame=18 A=4 L=2
; A: 22
; none: a=4 b=-1 len=2
.byte $24 ; A=4 L=2
.byte $24 ; frame=20 A=4 L=2
; A: 10
; B: 57
; none: a=10 b=-1 len=2
.byte $54 ; A=10 L=2
.byte $54 ; frame=22 A=10 L=2
; A: 8
; B: 58
; none: a=4 b=11 len=2
.byte $20 ; A=4 L=0
.byte $5D ; B=11 L=2
.byte $20 ; frame=24 A=4 L=0
.byte $5D ; frame=24 B=11 L=2
; A: 7
; B: 57
; none: a=12 b=9 len=2
.byte $60 ; A=12 L=0
.byte $4D ; B=9 L=2
.byte $60 ; frame=26 A=12 L=0
.byte $4D ; frame=26 B=9 L=2
; A: 5
; B: 55
; none: a=13 b=11 len=2
.byte $68 ; A=13 L=0
.byte $5D ; B=11 L=2
.byte $68 ; frame=28 A=13 L=0
.byte $5D ; frame=28 B=11 L=2
; A: 3
; B: 53
; none: a=14 b=1 len=2
.byte $70 ; A=14 L=0
.byte $0D ; B=1 L=2
.byte $70 ; frame=30 A=14 L=0
.byte $0D ; frame=30 B=1 L=2
; A: 12
; B: 52
; none: a=15 b=16 len=2
.byte $78 ; A=15 L=0
.byte $85 ; B=16 L=2
.byte $78 ; frame=32 A=15 L=0
.byte $85 ; frame=32 B=16 L=2
; A: 12
; none: a=0 b=17 len=2
.byte $00 ; A=0 L=0
.byte $8D ; B=17 L=2
.byte $00 ; frame=34 A=0 L=0
.byte $8D ; frame=34 B=17 L=2
; A: 24
; none: a=0 b=-1 len=2
.byte $04 ; A=0 L=2
.byte $04 ; frame=36 A=0 L=2
; A: 12
; B: 55
; none: a=2 b=-1 len=2
.byte $14 ; A=2 L=2
.byte $14 ; frame=38 A=2 L=2
; A: 10
; none: a=0 b=1 len=2
.byte $00 ; A=0 L=0
.byte $0D ; B=1 L=2
.byte $00 ; frame=40 A=0 L=0
.byte $0D ; frame=40 B=1 L=2
; A: 12
; none: a=4 b=-1 len=2
.byte $24 ; A=4 L=2
.byte $24 ; frame=42 A=4 L=2
; A: 15
; none: a=0 b=-1 len=2
.byte $04 ; A=0 L=2
.byte $04 ; frame=44 A=0 L=2
; A: 17
; none: a=7 b=-1 len=2
.byte $3C ; A=7 L=2
.byte $3C ; frame=46 A=7 L=2
; A: 17
; none: a=8 b=-1 len=2
.byte $44 ; A=8 L=2
.byte $44 ; frame=48 A=8 L=2
; A: 17
; none: a=8 b=-1 len=2
.byte $44 ; A=8 L=2
.byte $44 ; frame=50 A=8 L=2
; A: 29
; none: a=8 b=-1 len=2
.byte $44 ; A=8 L=2
.byte $44 ; frame=52 A=8 L=2
; A: 29
; none: a=18 b=-1 len=2
.byte $94 ; A=18 L=2
.byte $94 ; frame=54 A=18 L=2
; A: 27
; none: a=18 b=-1 len=2
.byte $94 ; A=18 L=2
.byte $94 ; frame=56 A=18 L=2
; A: 26
; none: a=19 b=-1 len=2
.byte $9C ; A=19 L=2
.byte $9C ; frame=58 A=19 L=2
; A: 24
; none: a=20 b=-1 len=2
.byte $A4 ; A=20 L=2
.byte $A4 ; frame=60 A=20 L=2
; A: 22
; none: a=2 b=-1 len=2
.byte $14 ; A=2 L=2
.byte $14 ; frame=62 A=2 L=2
; last: a=10 b=-1 len=2
.byte $54 ; frame=64 A=10 L=2
.byte $ff
track1:
; A: 12
; B: 55
; none: a=10 b=-1 len=2
.byte $54 ; A=10 L=2
; A: 12
; none: a=0 b=1 len=2
.byte $00 ; A=0 L=0
.byte $0D ; B=1 L=2
.byte $00 ; frame=2 A=0 L=0
.byte $0D ; frame=2 B=1 L=2
; A: 24
; B: 64
; none: a=0 b=-1 len=2
.byte $04 ; A=0 L=2
.byte $04 ; frame=4 A=0 L=2
; A: 12
; none: a=2 b=3 len=2
.byte $10 ; A=2 L=0
.byte $1D ; B=3 L=2
.byte $10 ; frame=6 A=2 L=0
.byte $1D ; frame=6 B=3 L=2
; A: 10
; B: 62
; none: a=0 b=-1 len=2
.byte $04 ; A=0 L=2
.byte $04 ; frame=8 A=0 L=2
; A: 12
; B: 64
; none: a=4 b=5 len=2
.byte $20 ; A=4 L=0
.byte $2D ; B=5 L=2
.byte $20 ; frame=10 A=4 L=0
.byte $2D ; frame=10 B=5 L=2
; A: 15
; none: a=0 b=3 len=2
.byte $00 ; A=0 L=0
.byte $1D ; B=3 L=2
.byte $00 ; frame=12 A=0 L=0
.byte $1D ; frame=12 B=3 L=2
; A: 17
; B: 65
; none: a=7 b=-1 len=2
.byte $3C ; A=7 L=2
.byte $3C ; frame=14 A=7 L=2
; A: 10
; none: a=8 b=21 len=2
.byte $40 ; A=8 L=0
.byte $AD ; B=21 L=2
.byte $40 ; frame=16 A=8 L=0
.byte $AD ; frame=16 B=21 L=2
; A: 10
; none: a=4 b=-1 len=2
.byte $24 ; A=4 L=2
.byte $24 ; frame=18 A=4 L=2
; A: 22
; none: a=4 b=-1 len=2
.byte $24 ; A=4 L=2
.byte $24 ; frame=20 A=4 L=2
; A: 10
; B: 64
; none: a=10 b=-1 len=2
.byte $54 ; A=10 L=2
.byte $54 ; frame=22 A=10 L=2
; A: 8
; B: 65
; none: a=4 b=3 len=2
.byte $20 ; A=4 L=0
.byte $1D ; B=3 L=2
.byte $20 ; frame=24 A=4 L=0
.byte $1D ; frame=24 B=3 L=2
; A: 7
; B: 64
; none: a=12 b=21 len=2
.byte $60 ; A=12 L=0
.byte $AD ; B=21 L=2
.byte $60 ; frame=26 A=12 L=0
.byte $AD ; frame=26 B=21 L=2
; A: 5
; B: 62
; none: a=13 b=3 len=2
.byte $68 ; A=13 L=0
.byte $1D ; B=3 L=2
.byte $68 ; frame=28 A=13 L=0
.byte $1D ; frame=28 B=3 L=2
; A: 3
; B: 60
; none: a=14 b=5 len=2
.byte $70 ; A=14 L=0
.byte $2D ; B=5 L=2
.byte $70 ; frame=30 A=14 L=0
.byte $2D ; frame=30 B=5 L=2
; A: 12
; B: 52
; none: a=15 b=6 len=2
.byte $78 ; A=15 L=0
.byte $35 ; B=6 L=2
.byte $78 ; frame=32 A=15 L=0
.byte $35 ; frame=32 B=6 L=2
; A: 12
; none: a=0 b=17 len=2
.byte $00 ; A=0 L=0
.byte $8D ; B=17 L=2
.byte $00 ; frame=34 A=0 L=0
.byte $8D ; frame=34 B=17 L=2
; A: 24
; none: a=0 b=-1 len=2
.byte $04 ; A=0 L=2
.byte $04 ; frame=36 A=0 L=2
; A: 12
; none: a=2 b=-1 len=2
.byte $14 ; A=2 L=2
.byte $14 ; frame=38 A=2 L=2
; A: 10
; none: a=0 b=-1 len=2
.byte $04 ; A=0 L=2
.byte $04 ; frame=40 A=0 L=2
; A: 12
; none: a=4 b=-1 len=2
.byte $24 ; A=4 L=2
.byte $24 ; frame=42 A=4 L=2
; A: 15
; none: a=0 b=-1 len=2
.byte $04 ; A=0 L=2
.byte $04 ; frame=44 A=0 L=2
; A: 17
; none: a=7 b=-1 len=2
.byte $3C ; A=7 L=2
.byte $3C ; frame=46 A=7 L=2
; A: 17
; none: a=8 b=-1 len=2
.byte $44 ; A=8 L=2
.byte $44 ; frame=48 A=8 L=2
; A: 17
; none: a=8 b=-1 len=2
.byte $44 ; A=8 L=2
.byte $44 ; frame=50 A=8 L=2
; A: 29
; none: a=8 b=-1 len=2
.byte $44 ; A=8 L=2
.byte $44 ; frame=52 A=8 L=2
; A: 29
; none: a=18 b=-1 len=2
.byte $94 ; A=18 L=2
.byte $94 ; frame=54 A=18 L=2
; A: 27
; none: a=18 b=-1 len=2
.byte $94 ; A=18 L=2
.byte $94 ; frame=56 A=18 L=2
; A: 26
; none: a=19 b=-1 len=2
.byte $9C ; A=19 L=2
.byte $9C ; frame=58 A=19 L=2
; A: 24
; none: a=20 b=-1 len=2
.byte $A4 ; A=20 L=2
.byte $A4 ; frame=60 A=20 L=2
; A: 22
; none: a=2 b=-1 len=2
.byte $14 ; A=2 L=2
.byte $14 ; frame=62 A=2 L=2
; last: a=10 b=-1 len=2
.byte $54 ; frame=64 A=10 L=2
.byte $ff
track2:
; A: 15
; B: 63
; none: a=10 b=-1 len=2
.byte $54 ; A=10 L=2
; A: 15
; none: a=7 b=22 len=2
.byte $38 ; A=7 L=0
.byte $B5 ; B=22 L=2
.byte $38 ; frame=2 A=7 L=0
.byte $B5 ; frame=2 B=22 L=2
; A: 27
; none: a=7 b=-1 len=2
.byte $3C ; A=7 L=2
.byte $3C ; frame=4 A=7 L=2
; A: 15
; none: a=19 b=-1 len=2
.byte $9C ; A=19 L=2
.byte $9C ; frame=6 A=19 L=2
; A: 17
; B: 62
; none: a=7 b=-1 len=2
.byte $3C ; A=7 L=2
.byte $3C ; frame=8 A=7 L=2
; A: 17
; B: 60
; none: a=8 b=5 len=2
.byte $40 ; A=8 L=0
.byte $2D ; B=5 L=2
.byte $40 ; frame=10 A=8 L=0
.byte $2D ; frame=10 B=5 L=2
; A: 29
; B: 58
; none: a=8 b=6 len=2
.byte $40 ; A=8 L=0
.byte $35 ; B=6 L=2
.byte $40 ; frame=12 A=8 L=0
.byte $35 ; frame=12 B=6 L=2
; A: 17
; B: 53
; none: a=18 b=9 len=2
.byte $90 ; A=18 L=0
.byte $4D ; B=9 L=2
.byte $90 ; frame=14 A=18 L=0
.byte $4D ; frame=14 B=9 L=2
; A: 12
; B: 55
; none: a=8 b=16 len=2
.byte $40 ; A=8 L=0
.byte $85 ; B=16 L=2
.byte $40 ; frame=16 A=8 L=0
.byte $85 ; frame=16 B=16 L=2
; A: 12
; none: a=0 b=1 len=2
.byte $00 ; A=0 L=0
.byte $0D ; B=1 L=2
.byte $00 ; frame=18 A=0 L=0
.byte $0D ; frame=18 B=1 L=2
; A: 24
; none: a=0 b=-1 len=2
.byte $04 ; A=0 L=2
.byte $04 ; frame=20 A=0 L=2
; A: 12
; none: a=2 b=-1 len=2
.byte $14 ; A=2 L=2
.byte $14 ; frame=22 A=2 L=2
; A: 12
; none: a=0 b=-1 len=2
.byte $04 ; A=0 L=2
.byte $04 ; frame=24 A=0 L=2
; A: 12
; none: a=0 b=-1 len=2
.byte $04 ; A=0 L=2
.byte $04 ; frame=26 A=0 L=2
; A: 24
; none: a=0 b=-1 len=2
.byte $04 ; A=0 L=2
.byte $04 ; frame=28 A=0 L=2
; A: 12
; none: a=2 b=-1 len=2
.byte $14 ; A=2 L=2
.byte $14 ; frame=30 A=2 L=2
; A: 15
; B: 51
; none: a=0 b=-1 len=2
.byte $04 ; A=0 L=2
.byte $04 ; frame=32 A=0 L=2
; A: 15
; none: a=7 b=23 len=2
.byte $38 ; A=7 L=0
.byte $BD ; B=23 L=2
.byte $38 ; frame=34 A=7 L=0
.byte $BD ; frame=34 B=23 L=2
; A: 27
; none: a=7 b=-1 len=2
.byte $3C ; A=7 L=2
.byte $3C ; frame=36 A=7 L=2
; A: 15
; none: a=19 b=-1 len=2
.byte $9C ; A=19 L=2
.byte $9C ; frame=38 A=19 L=2
; A: 17
; B: 55
; none: a=7 b=-1 len=2
.byte $3C ; A=7 L=2
.byte $3C ; frame=40 A=7 L=2
; A: 17
; B: 53
; none: a=8 b=1 len=2
.byte $40 ; A=8 L=0
.byte $0D ; B=1 L=2
.byte $40 ; frame=42 A=8 L=0
.byte $0D ; frame=42 B=1 L=2
; A: 29
; B: 51
; none: a=8 b=16 len=2
.byte $40 ; A=8 L=0
.byte $85 ; B=16 L=2
.byte $40 ; frame=44 A=8 L=0
.byte $85 ; frame=44 B=16 L=2
; B: 50
; none: a=18 b=23 len=1
.byte $90 ; A=18 L=0
.byte $BB ; B=23 L=1
.byte $90 ; frame=45 A=18 L=0
.byte $BB ; frame=45 B=23 L=1
; A: 17
; B: 48
; none: a=-1 b=24 len=1
.byte $C3 ; B=24 L=1
.byte $C3 ; frame=46 B=24 L=1
; B: 46
; none: a=8 b=25 len=1
.byte $40 ; A=8 L=0
.byte $CB ; B=25 L=1
.byte $40 ; frame=47 A=8 L=0
.byte $CB ; frame=47 B=25 L=1
; A: 12
; B: 48
; none: a=-1 b=26 len=1
.byte $D3 ; B=26 L=1
.byte $D3 ; frame=48 B=26 L=1
; A: 10
; none: a=0 b=25 len=4
.byte $00 ; A=0 L=0
.byte $CF ; B=25 L=3
.byte $00 ; frame=52 A=0 L=0
.byte $CF ; frame=52 B=25 L=3
; A: 12
; none: a=4 b=-1 len=4
.byte $26 ; A=4 L=3
.byte $26 ; frame=56 A=4 L=3
; last: a=0 b=-1 len=8
.byte $10 ; frame=64 A=0 L=8
.byte $ff
track3:
; A: 15
; B: 39
; none: a=0 b=-1 len=8
.byte $10 ; A=0 L=8
; A: 15
; none: a=7 b=27 len=2
.byte $38 ; A=7 L=0
.byte $DD ; B=27 L=2
.byte $38 ; frame=2 A=7 L=0
.byte $DD ; frame=2 B=27 L=2
; A: 27
; none: a=7 b=-1 len=2
.byte $3C ; A=7 L=2
.byte $3C ; frame=4 A=7 L=2
; A: 15
; none: a=19 b=-1 len=2
.byte $9C ; A=19 L=2
.byte $9C ; frame=6 A=19 L=2
; A: 17
; B: 41
; none: a=7 b=-1 len=2
.byte $3C ; A=7 L=2
.byte $3C ; frame=8 A=7 L=2
; A: 17
; B: 43
; none: a=8 b=28 len=2
.byte $40 ; A=8 L=0
.byte $E5 ; B=28 L=2
.byte $40 ; frame=10 A=8 L=0
.byte $E5 ; frame=10 B=28 L=2
; A: 29
; B: 46
; none: a=8 b=29 len=2
.byte $40 ; A=8 L=0
.byte $ED ; B=29 L=2
.byte $40 ; frame=12 A=8 L=0
.byte $ED ; frame=12 B=29 L=2
; A: 17
; B: 48
; none: a=18 b=26 len=2
.byte $90 ; A=18 L=0
.byte $D5 ; B=26 L=2
.byte $90 ; frame=14 A=18 L=0
.byte $D5 ; frame=14 B=26 L=2
; A: 12
; B: 43
; none: a=8 b=25 len=2
.byte $40 ; A=8 L=0
.byte $CD ; B=25 L=2
.byte $40 ; frame=16 A=8 L=0
.byte $CD ; frame=16 B=25 L=2
; A: 12
; none: a=0 b=29 len=2
.byte $00 ; A=0 L=0
.byte $ED ; B=29 L=2
.byte $00 ; frame=18 A=0 L=0
.byte $ED ; frame=18 B=29 L=2
; A: 24
; none: a=0 b=-1 len=2
.byte $04 ; A=0 L=2
.byte $04 ; frame=20 A=0 L=2
; A: 12
; none: a=2 b=-1 len=2
.byte $14 ; A=2 L=2
.byte $14 ; frame=22 A=2 L=2
; A: 12
; none: a=0 b=-1 len=2
.byte $04 ; A=0 L=2
.byte $04 ; frame=24 A=0 L=2
; A: 12
; none: a=0 b=-1 len=2
.byte $04 ; A=0 L=2
.byte $04 ; frame=26 A=0 L=2
; A: 24
; none: a=0 b=-1 len=2
.byte $04 ; A=0 L=2
.byte $04 ; frame=28 A=0 L=2
; A: 12
; none: a=2 b=-1 len=2
.byte $14 ; A=2 L=2
.byte $14 ; frame=30 A=2 L=2
; A: 15
; B: 51
; none: a=0 b=-1 len=2
.byte $04 ; A=0 L=2
.byte $04 ; frame=32 A=0 L=2
; A: 15
; none: a=7 b=23 len=2
.byte $38 ; A=7 L=0
.byte $BD ; B=23 L=2
.byte $38 ; frame=34 A=7 L=0
.byte $BD ; frame=34 B=23 L=2
; A: 27
; none: a=7 b=-1 len=2
.byte $3C ; A=7 L=2
.byte $3C ; frame=36 A=7 L=2
; A: 15
; none: a=19 b=-1 len=2
.byte $9C ; A=19 L=2
.byte $9C ; frame=38 A=19 L=2
; A: 17
; B: 48
; none: a=7 b=-1 len=2
.byte $3C ; A=7 L=2
.byte $3C ; frame=40 A=7 L=2
; A: 17
; B: 51
; none: a=8 b=25 len=2
.byte $40 ; A=8 L=0
.byte $CD ; B=25 L=2
.byte $40 ; frame=42 A=8 L=0
.byte $CD ; frame=42 B=25 L=2
; A: 29
; B: 53
; none: a=8 b=23 len=2
.byte $40 ; A=8 L=0
.byte $BD ; B=23 L=2
.byte $40 ; frame=44 A=8 L=0
.byte $BD ; frame=44 B=23 L=2
; A: 17
; B: 58
; none: a=18 b=16 len=2
.byte $90 ; A=18 L=0
.byte $85 ; B=16 L=2
.byte $90 ; frame=46 A=18 L=0
.byte $85 ; frame=46 B=16 L=2
; A: 12
; B: 55
; none: a=8 b=9 len=2
.byte $40 ; A=8 L=0
.byte $4D ; B=9 L=2
.byte $40 ; frame=48 A=8 L=0
.byte $4D ; frame=48 B=9 L=2
; A: 12
; none: a=0 b=1 len=2
.byte $00 ; A=0 L=0
.byte $0D ; B=1 L=2
.byte $00 ; frame=50 A=0 L=0
.byte $0D ; frame=50 B=1 L=2
; A: 24
; none: a=0 b=-1 len=2
.byte $04 ; A=0 L=2
.byte $04 ; frame=52 A=0 L=2
; A: 12
; none: a=2 b=-1 len=2
.byte $14 ; A=2 L=2
.byte $14 ; frame=54 A=2 L=2
; A: 12
; none: a=0 b=-1 len=2
.byte $04 ; A=0 L=2
.byte $04 ; frame=56 A=0 L=2
; A: 12
; none: a=0 b=-1 len=2
.byte $04 ; A=0 L=2
.byte $04 ; frame=58 A=0 L=2
; A: 24
; none: a=0 b=-1 len=2
.byte $04 ; A=0 L=2
.byte $04 ; frame=60 A=0 L=2
; A: 12
; none: a=2 b=-1 len=2
.byte $14 ; A=2 L=2
.byte $14 ; frame=62 A=2 L=2
; last: a=0 b=-1 len=2
.byte $04 ; frame=64 A=0 L=2
.byte $ff
track4:
; A: 12
; none: a=0 b=-1 len=2
.byte $04 ; A=0 L=2
; A: 12
; none: a=0 b=-1 len=2
.byte $04 ; A=0 L=2
.byte $04 ; frame=2 A=0 L=2
; A: 24
; none: a=0 b=-1 len=2
.byte $04 ; A=0 L=2
.byte $04 ; frame=4 A=0 L=2
; A: 12
; none: a=2 b=-1 len=2
.byte $14 ; A=2 L=2
.byte $14 ; frame=6 A=2 L=2
; A: 10
; none: a=0 b=-1 len=2
.byte $04 ; A=0 L=2
.byte $04 ; frame=8 A=0 L=2
; A: 12
; none: a=4 b=-1 len=2
.byte $24 ; A=4 L=2
.byte $24 ; frame=10 A=4 L=2
; A: 15
; none: a=0 b=-1 len=2
.byte $04 ; A=0 L=2
.byte $04 ; frame=12 A=0 L=2
; A: 17
; none: a=7 b=-1 len=2
.byte $3C ; A=7 L=2
.byte $3C ; frame=14 A=7 L=2
; A: 10
; none: a=8 b=-1 len=2
.byte $44 ; A=8 L=2
.byte $44 ; frame=16 A=8 L=2
; A: 10
; none: a=4 b=-1 len=2
.byte $24 ; A=4 L=2
.byte $24 ; frame=18 A=4 L=2
; A: 22
; none: a=4 b=-1 len=2
.byte $24 ; A=4 L=2
.byte $24 ; frame=20 A=4 L=2
; A: 10
; none: a=10 b=-1 len=2
.byte $54 ; A=10 L=2
.byte $54 ; frame=22 A=10 L=2
; A: 8
; none: a=4 b=-1 len=2
.byte $24 ; A=4 L=2
.byte $24 ; frame=24 A=4 L=2
; A: 7
; none: a=12 b=-1 len=2
.byte $64 ; A=12 L=2
.byte $64 ; frame=26 A=12 L=2
; A: 5
; none: a=13 b=-1 len=2
.byte $6C ; A=13 L=2
.byte $6C ; frame=28 A=13 L=2
; A: 3
; none: a=14 b=-1 len=2
.byte $74 ; A=14 L=2
.byte $74 ; frame=30 A=14 L=2
; A: 12
; none: a=15 b=-1 len=2
.byte $7C ; A=15 L=2
.byte $7C ; frame=32 A=15 L=2
; A: 12
; none: a=0 b=-1 len=2
.byte $04 ; A=0 L=2
.byte $04 ; frame=34 A=0 L=2
; A: 24
; none: a=0 b=-1 len=2
.byte $04 ; A=0 L=2
.byte $04 ; frame=36 A=0 L=2
; A: 12
; none: a=2 b=-1 len=2
.byte $14 ; A=2 L=2
.byte $14 ; frame=38 A=2 L=2
; A: 10
; none: a=0 b=-1 len=2
.byte $04 ; A=0 L=2
.byte $04 ; frame=40 A=0 L=2
; A: 12
; none: a=4 b=-1 len=2
.byte $24 ; A=4 L=2
.byte $24 ; frame=42 A=4 L=2
; A: 15
; none: a=0 b=-1 len=2
.byte $04 ; A=0 L=2
.byte $04 ; frame=44 A=0 L=2
; A: 17
; none: a=7 b=-1 len=2
.byte $3C ; A=7 L=2
.byte $3C ; frame=46 A=7 L=2
; A: 17
; none: a=8 b=-1 len=2
.byte $44 ; A=8 L=2
.byte $44 ; frame=48 A=8 L=2
; A: 15
; none: a=8 b=-1 len=4
.byte $46 ; A=8 L=3
.byte $46 ; frame=52 A=8 L=3
; A: 12
; none: a=7 b=-1 len=4
.byte $3E ; A=7 L=3
.byte $3E ; frame=56 A=7 L=3
; B: 51
; none: a=0 b=-1 len=4
.byte $06 ; A=0 L=3
.byte $06 ; frame=60 A=0 L=3
; B: 53
; none: a=-1 b=23 len=2
.byte $BD ; B=23 L=2
; last: a=-1 c=-1 len=2
.byte $85 ; B=16 L=2
.byte $BD ; frame=62 B=23 L=2
; last: a=-1 b=16 len=2
.byte $85 ; frame=64 B=16 L=2
.byte $FF ; end
; Octave 0 : 0 0 0 3 0 3 0 3 3 0 16 0
; Octave 1 : 45 0 0 19 0 23 0 0 0 0 5 0

View File

@ -6,19 +6,17 @@ play_frame:
;===============================
;===============================
;=================================
; inc frame counter
inc FRAME
;=================================
; rotate through channel A volume
lda FRAME
lda FRAME ; repeating 8-long pattern
and #$7
tay
lda channel_a_volume,Y
sta AY_REGS+8
sta AY_REGS+8 ; A volume
;============================
; see if still counting down
@ -28,6 +26,7 @@ play_frame:
set_notes_loop:
;==================
; load next byte
@ -56,6 +55,11 @@ no_wrap:
lda tracks_h,Y
sta track_smc+2
lda bamps_l,Y
sta bamp_smc+1
lda bamps_h,Y
sta bamp_smc+2
lda #0
sta SONG_OFFSET
@ -69,9 +73,9 @@ not_end:
pha ; save note
and #1
tax
ldy #$0E
sty AY_REGS+8,X ; $08 set volume A,B
; tax
; ldy #$0E
; sty AY_REGS+8,X ; $08 set volume A,B
asl
tax ; put channel offset in X
@ -101,9 +105,9 @@ not_end:
sta AY_REGS,X ; set proper register value
; visualization
blah_urgh:
sta $400,Y
inc blah_urgh+1
;blah_urgh:
; sta $400,Y
; inc blah_urgh+1
;============================
@ -112,7 +116,13 @@ blah_urgh:
; assume less than 256 bytes
inc SONG_OFFSET
done_update_song:
;=================================
; coundown song
dec SONG_COUNTDOWN
bmi set_notes_loop
bpl skip_data
@ -128,5 +138,48 @@ channel_a_volume:
tracks_h:
.byte >track4,>track0,>track1,>track2,>track3
bamps_l:
.byte <bamps4,<bamps0,<bamps1,<bamps2,<bamps3
bamps_h:
.byte >bamps4,>bamps0,>bamps1,>bamps2,>bamps3
.include "amp.s"
skip_data:
;=================================
; handle channel B volume
chanb:
lda FRAME
and #$7
bne bamps_skip
lda BAMP_COUNTDOWN
bne bamps_good
bamp_smc:
lda bamps4
pha
and #$f
sta AY_REGS+9 ; B volume
pla
lsr
lsr
lsr
lsr
; clc
; adc #1
sta BAMP_COUNTDOWN
inc bamp_smc+1
bamps_good:
dec BAMP_COUNTDOWN
bamps_skip:
;=================================
; inc frame counter
inc FRAME

View File

@ -3,21 +3,12 @@ tracker_init:
; setup initial ay-3-8910 values (this depends on song)
init_registers_to_zero:
ldx #$13 ; init past end to zero others too
ldx #$13 ; init registers to zero
lda #0
; sta SONG_OFFSET ; also init song stuff
; sta SONG_COUNTDOWN
init_loop:
sta AY_REGS,X
dex
bpl init_loop
; jsr ay3_write_regs
lda #$38
sta AY_REGS+7 ; $07 mixer (ABC on)
; lda #$0E
; sta AY_REGS+8 ; $08 volume A
; lda #$0C
; sta AY_REGS+9 ; $09 volume B
; sta AY_REGS+10 ; $0A volume C
lda #$38 ; ABC channels on
sta AY_REGS+7 ; $07 mixer

View File

@ -27,6 +27,8 @@ HGR_COLOR = $E4
HGR_PAGE = $E6
HGR_SCALE = $E7
BAMP_COUNTDOWN = $F6
SAVE_Y = $F7
LETTER_X = $F8
LETTER_Y = $F9
COUNT = $FA

View File

@ -71,7 +71,7 @@ static int debug=0;
static int line=0;
static int header_version=0;
static int current_frame=0;
struct note_type {
unsigned char which;
@ -207,7 +207,7 @@ static void print_help(int just_version, char *exec_name) {
}
static int write_note(int *a_last,int *b_last,int *c_last,int *total_len) {
static int write_note(int *a_last,int *b_last,int *c_last,int total_len) {
// NNNNNEEC
@ -219,29 +219,30 @@ static int write_note(int *a_last,int *b_last,int *c_last,int *total_len) {
temp_value=(*a_last<<3)|0;
/* if no note b, use the passed in length */
if ((*b_last<0) && (*c_last<0)) {
if (*total_len==4) {
if (total_len==4) {
length=3<<1;
}
else {
length=(*total_len<<1);
length=(total_len<<1);
}
temp_value|=length;
}
printf("\t.byte $%02X ; A=%d L=%d\n",
printf("\t.byte $%02X ; frame=%d A=%d L=%d\n",
temp_value,
current_frame,
*a_last,length>>1);//(*b_last<0)||(*c_last<0));
// (*total_len)++;
// (total_len)++;
*a_last=-1;
}
if (*b_last>=0) {
/* note is shifted left by 3, channel 1 */
temp_value=(*b_last<<3)|1;
if (*total_len==4) {
if (total_len==4) {
length=3<<1;
}
else {
length=(*total_len<<1);
length=(total_len<<1);
}
temp_value|=length;
if (*c_last>=0) {
@ -249,10 +250,11 @@ static int write_note(int *a_last,int *b_last,int *c_last,int *total_len) {
fprintf(stderr,"Error, shouldn't have C\n");
}
printf("\t.byte $%02X ; B=%d L=%d\n",
printf("\t.byte $%02X ; frame=%d B=%d L=%d\n",
temp_value,
current_frame,
*b_last,length>>1);
// (*total_len)++;
// (total_len)++;
*b_last=-1;
}
@ -261,7 +263,7 @@ static int write_note(int *a_last,int *b_last,int *c_last,int *total_len) {
// printf("\t.byte $%02X ; C=%d L=%d\n",
// (unsigned char)(*c_last<<3)|4|2,
// *c_last,1);
// (*total_len)++;
// (total_len)++;
// *c_last=-1;
}
@ -281,6 +283,7 @@ int main(int argc, char **argv) {
int sp,external_frequency,irq;
struct note_type a,b,c;
int copt;
int total_length=0;
char song_name[BUFSIZ];
char author_name[BUFSIZ];
@ -408,9 +411,16 @@ printf("\n");
if (string[0]=='\'') continue;
if (string[0]=='-') continue;
if (string[0]=='*') continue;
if (string[0]=='t') {
if (!first) printf(".byte $ff\n");
if (string[0]=='t') { /* track */
if (!first) {
printf("; last: a=%d b=%d len=%d\n",a_last,b_last,current_length);
write_note(&a_last,&b_last,&c_last,current_length);
printf(".byte $ff\n");
}
printf("%s\n",string);
total_length=0;
current_frame=0;
current_length=0;
continue;
}
@ -440,13 +450,16 @@ printf("\n");
}
if ((a.ed_freq>=0)||(b.ed_freq>=0)||(c.ed_freq>=0)) {
printf("; none: a=%d b=%d len=%d\n",a_last,b_last,current_length);
// now NNNNNNEC
if (!first) {
write_note(&a_last,&b_last,&c_last,&current_length);
write_note(&a_last,&b_last,&c_last,current_length);
}
// printf("; frame %d: a=%d b=%d len=%d\n",
// total_length,a_last,b_last,current_length);
total_length+=current_length;
current_length=0;
//if (!first) {
@ -473,13 +486,13 @@ printf("\n");
}
current_length++;
current_frame++;
}
printf("; last: a=%d c=%d len=%d\n",a_last,c_last,current_length);
write_note(&a_last,&b_last,&c_last,&current_length);
printf("; last: a=%d b=%d len=%d\n",a_last,b_last,current_length);
write_note(&a_last,&b_last,&c_last,current_length);
// printf("\t.byte $FF ; end\n");