mirror of
https://github.com/deater/dos33fsprogs.git
synced 2024-09-28 02:55:03 +00:00
music: polly: more sound work
This commit is contained in:
parent
ccea46bc50
commit
75d4c04631
@ -1,5 +1,5 @@
|
|||||||
MEMORY {
|
MEMORY {
|
||||||
ZP: start = $70, size = $80, type = rw;
|
ZP: start = $70, size = $90, type = rw;
|
||||||
RAM: start = $70, size = $8E00, file = %O;
|
RAM: start = $70, size = $8E00, file = %O;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -10,12 +10,13 @@ EMPTY_DISK = ../../empty_disk/empty.dsk
|
|||||||
|
|
||||||
all: polly.dsk
|
all: polly.dsk
|
||||||
|
|
||||||
polly.dsk: HELLO POLLY BOOP REPO
|
polly.dsk: HELLO POLLY BOOP REPO REPO2
|
||||||
cp $(EMPTY_DISK) polly.dsk
|
cp $(EMPTY_DISK) polly.dsk
|
||||||
$(DOS33) -y polly.dsk SAVE A HELLO
|
$(DOS33) -y polly.dsk SAVE A HELLO
|
||||||
$(DOS33) -y polly.dsk BSAVE -a 0x1000 POLLY
|
$(DOS33) -y polly.dsk BSAVE -a 0x1000 POLLY
|
||||||
$(DOS33) -y polly.dsk BSAVE -a 0x1000 BOOP
|
$(DOS33) -y polly.dsk BSAVE -a 0x1000 BOOP
|
||||||
$(DOS33) -y polly.dsk BSAVE -a 0x1000 REPO
|
$(DOS33) -y polly.dsk BSAVE -a 0x1000 REPO
|
||||||
|
$(DOS33) -y polly.dsk BSAVE -a 0x1000 REPO2
|
||||||
|
|
||||||
###
|
###
|
||||||
|
|
||||||
@ -52,6 +53,14 @@ repo.o: repo.s sample.inc
|
|||||||
|
|
||||||
###
|
###
|
||||||
|
|
||||||
|
REPO2: repo2.o
|
||||||
|
ld65 -o REPO2 repo2.o -C ../../linker_scripts/apple2_1000.inc
|
||||||
|
|
||||||
|
repo2.o: repo2.s sample.inc
|
||||||
|
ca65 -o repo2.o repo2.s -l repo2.lst
|
||||||
|
|
||||||
|
###
|
||||||
|
|
||||||
|
|
||||||
HELLO: hello.bas
|
HELLO: hello.bas
|
||||||
$(TOKENIZE) < hello.bas > HELLO
|
$(TOKENIZE) < hello.bas > HELLO
|
||||||
@ -59,5 +68,5 @@ HELLO: hello.bas
|
|||||||
####
|
####
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -f *~ *.o *.lst HELLO POLLY BOOP REPO decode_trace
|
rm -f *~ *.o *.lst HELLO POLLY BOOP REPO REPO2 decode_trace
|
||||||
|
|
||||||
|
@ -12,6 +12,7 @@ int main(int argc, char **argv) {
|
|||||||
int speaker_access;
|
int speaker_access;
|
||||||
int count=0,which=0;
|
int count=0,which=0;
|
||||||
int diffs[MAX];
|
int diffs[MAX];
|
||||||
|
int first=1;
|
||||||
|
|
||||||
while(1) {
|
while(1) {
|
||||||
result=fgets(string,BUFSIZ,stdin);
|
result=fgets(string,BUFSIZ,stdin);
|
||||||
@ -23,7 +24,13 @@ int main(int argc, char **argv) {
|
|||||||
|
|
||||||
if (speaker_access) {
|
if (speaker_access) {
|
||||||
diffs[count]=cycles-oldcycles;
|
diffs[count]=cycles-oldcycles;
|
||||||
count++;
|
if (first) {
|
||||||
|
/* skip first */
|
||||||
|
first=0;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
count++;
|
||||||
|
}
|
||||||
oldcycles=cycles;
|
oldcycles=cycles;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -33,6 +40,46 @@ int main(int argc, char **argv) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* now print high */
|
||||||
|
|
||||||
|
printf("extra_high_values:\n");
|
||||||
|
for(which=0;which<count;which++) {
|
||||||
|
if ((which%16)==0) {
|
||||||
|
printf(".byte\t");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
printf(",");
|
||||||
|
}
|
||||||
|
printf("$%02X",(diffs[which]>>16));
|
||||||
|
if ((which%16)!=15) {
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("\n.byte\t$FF\n");
|
||||||
|
|
||||||
|
|
||||||
|
/* now print high */
|
||||||
|
|
||||||
|
printf("high_values:\n");
|
||||||
|
for(which=0;which<count;which++) {
|
||||||
|
if ((which%16)==0) {
|
||||||
|
printf(".byte\t");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
printf(",");
|
||||||
|
}
|
||||||
|
printf("$%02X",(diffs[which]>>8)&0xff);
|
||||||
|
if ((which%16)!=15) {
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("\n.byte\t$FF\n");
|
||||||
|
|
||||||
|
|
||||||
/* now print low */
|
/* now print low */
|
||||||
|
|
||||||
printf("low_values:\n");
|
printf("low_values:\n");
|
||||||
|
@ -5,23 +5,73 @@ SPEAKER = $C030
|
|||||||
|
|
||||||
|
|
||||||
repo:
|
repo:
|
||||||
ldy #0
|
|
||||||
repo_loop:
|
repo_loop:
|
||||||
bit SPEAKER
|
bit SPEAKER
|
||||||
addr_smc:
|
|
||||||
lda low_values,Y
|
|
||||||
cmp #$FF
|
|
||||||
beq done
|
|
||||||
|
|
||||||
|
; delay extra
|
||||||
|
|
||||||
|
extra_smc:
|
||||||
|
ldx extra_high_values
|
||||||
|
beq delay_high
|
||||||
|
|
||||||
|
extra_loop:
|
||||||
|
ldy #255
|
||||||
|
extra_inner_loop:
|
||||||
|
lda #200
|
||||||
|
jsr delay_a
|
||||||
|
dey
|
||||||
|
bne extra_inner_loop
|
||||||
|
|
||||||
|
dex
|
||||||
|
bne extra_loop
|
||||||
|
|
||||||
|
|
||||||
|
; delay high
|
||||||
|
delay_high:
|
||||||
|
|
||||||
|
high_smc:
|
||||||
|
ldx high_values
|
||||||
|
high_loop:
|
||||||
|
lda #200
|
||||||
jsr delay_a
|
jsr delay_a
|
||||||
|
|
||||||
clc
|
dex
|
||||||
lda addr_smc+1
|
bne high_loop
|
||||||
|
|
||||||
|
low_delay:
|
||||||
|
|
||||||
|
low_smc:
|
||||||
|
lda low_values ; 4
|
||||||
|
cmp #$FF ; 2
|
||||||
|
beq done ; 2 normally
|
||||||
|
|
||||||
|
jsr delay_a ; 25+A
|
||||||
|
|
||||||
|
clc ; 2
|
||||||
|
lda low_smc+1
|
||||||
adc #1
|
adc #1
|
||||||
sta addr_smc+1
|
sta low_smc+1
|
||||||
lda #0
|
lda #0
|
||||||
adc addr_smc+2
|
adc low_smc+2
|
||||||
sta addr_smc+2
|
sta low_smc+2
|
||||||
|
|
||||||
|
clc
|
||||||
|
lda high_smc+1
|
||||||
|
adc #1
|
||||||
|
sta high_smc+1
|
||||||
|
lda #0
|
||||||
|
adc high_smc+2
|
||||||
|
sta high_smc+2
|
||||||
|
|
||||||
|
clc
|
||||||
|
lda extra_smc+1
|
||||||
|
adc #1
|
||||||
|
sta extra_smc+1
|
||||||
|
lda #0
|
||||||
|
adc extra_smc+2
|
||||||
|
sta extra_smc+2
|
||||||
|
|
||||||
|
|
||||||
jmp repo_loop
|
jmp repo_loop
|
||||||
|
|
||||||
@ -31,9 +81,19 @@ done:
|
|||||||
bit KEYRESET
|
bit KEYRESET
|
||||||
|
|
||||||
lda #<low_values
|
lda #<low_values
|
||||||
sta addr_smc+1
|
sta low_smc+1
|
||||||
lda #>low_values
|
lda #>low_values
|
||||||
sta addr_smc+2
|
sta low_smc+2
|
||||||
|
|
||||||
|
lda #<high_values
|
||||||
|
sta high_smc+1
|
||||||
|
lda #>high_values
|
||||||
|
sta high_smc+2
|
||||||
|
|
||||||
|
lda #<extra_high_values
|
||||||
|
sta extra_smc+1
|
||||||
|
lda #>extra_high_values
|
||||||
|
sta extra_smc+2
|
||||||
|
|
||||||
jmp repo
|
jmp repo
|
||||||
|
|
||||||
|
405
music/polly/repo2.s
Normal file
405
music/polly/repo2.s
Normal file
@ -0,0 +1,405 @@
|
|||||||
|
; Soft Switches
|
||||||
|
KEYPRESS= $C000
|
||||||
|
KEYRESET= $C010
|
||||||
|
SPEAKER = $C030
|
||||||
|
|
||||||
|
|
||||||
|
WAIT = $FCA8 ; delay 1/2(26+27A+5A^2) us
|
||||||
|
; MAX=35968 = 35ms or so
|
||||||
|
|
||||||
|
; 121755 (121ms)
|
||||||
|
; 243510000 = 26+27A+5A2
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
COUNT = $FF
|
||||||
|
|
||||||
|
repo2:
|
||||||
|
|
||||||
|
lda KEYPRESS
|
||||||
|
bpl done
|
||||||
|
bit KEYRESET
|
||||||
|
|
||||||
|
check1:
|
||||||
|
cmp #'1'+$80
|
||||||
|
bne check2
|
||||||
|
jsr pattern1
|
||||||
|
jmp repo2
|
||||||
|
|
||||||
|
check2:
|
||||||
|
cmp #'2'+$80
|
||||||
|
bne check3
|
||||||
|
jsr pattern2
|
||||||
|
jmp repo2
|
||||||
|
|
||||||
|
check3:
|
||||||
|
cmp #'3'+$80
|
||||||
|
bne check4
|
||||||
|
jsr drum1
|
||||||
|
jmp repo2
|
||||||
|
|
||||||
|
check4:
|
||||||
|
cmp #'4'+$80
|
||||||
|
bne check5
|
||||||
|
jsr drum2
|
||||||
|
jmp repo2
|
||||||
|
|
||||||
|
check5:
|
||||||
|
cmp #'5'+$80
|
||||||
|
bne check6
|
||||||
|
jsr drum3
|
||||||
|
jmp repo2
|
||||||
|
|
||||||
|
check6:
|
||||||
|
|
||||||
|
cmp #'6'+$80
|
||||||
|
bne check7
|
||||||
|
; jsr drum4
|
||||||
|
jmp repo2
|
||||||
|
|
||||||
|
check7:
|
||||||
|
|
||||||
|
|
||||||
|
done:
|
||||||
|
|
||||||
|
|
||||||
|
jmp repo2
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
pattern1:
|
||||||
|
|
||||||
|
lda #35
|
||||||
|
sta COUNT
|
||||||
|
|
||||||
|
pattern1_loop:
|
||||||
|
|
||||||
|
|
||||||
|
; for cycles
|
||||||
|
; 5466 to draw
|
||||||
|
; current delay=200 = 19135
|
||||||
|
|
||||||
|
; total cycles = 2458*35= 86030
|
||||||
|
|
||||||
|
;1203 //35 times (halfway a 1259)
|
||||||
|
;1254
|
||||||
|
|
||||||
|
;1200
|
||||||
|
|
||||||
|
|
||||||
|
bit SPEAKER ;4
|
||||||
|
|
||||||
|
; want 1203-4 = 1199
|
||||||
|
; Try X=8 Y=26 cycles=1197
|
||||||
|
|
||||||
|
nop ; 2
|
||||||
|
|
||||||
|
ldy #26 ; 2
|
||||||
|
loop3:
|
||||||
|
ldx #8 ; 2
|
||||||
|
loop4:
|
||||||
|
dex ; 2
|
||||||
|
bne loop4 ; 2nt/3
|
||||||
|
|
||||||
|
dey ; 2
|
||||||
|
bne loop3 ; 2nt/3
|
||||||
|
|
||||||
|
|
||||||
|
; want 1254-4 = 1250
|
||||||
|
|
||||||
|
bit SPEAKER ; 4
|
||||||
|
|
||||||
|
; Try X=248 Y=1 cycles=1247
|
||||||
|
lda $0 ; 3
|
||||||
|
|
||||||
|
ldy #1 ; 2
|
||||||
|
loop5:
|
||||||
|
ldx #248 ; 2
|
||||||
|
loop6:
|
||||||
|
dex ; 2
|
||||||
|
bne loop6 ; 2nt/3
|
||||||
|
|
||||||
|
dey ; 2
|
||||||
|
bne loop5 ; 2nt/3
|
||||||
|
|
||||||
|
|
||||||
|
dec COUNT
|
||||||
|
bne pattern1_loop
|
||||||
|
|
||||||
|
|
||||||
|
rts
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
pattern2: ; bip
|
||||||
|
|
||||||
|
lda #35
|
||||||
|
sta COUNT
|
||||||
|
|
||||||
|
pattern2_loop:
|
||||||
|
|
||||||
|
|
||||||
|
;812 //35 times
|
||||||
|
;772
|
||||||
|
;873
|
||||||
|
|
||||||
|
|
||||||
|
bit SPEAKER ;4
|
||||||
|
|
||||||
|
; want 812-4 = 808
|
||||||
|
; Try X=1 Y=73 cycles=804
|
||||||
|
|
||||||
|
nop ; 2
|
||||||
|
nop ; 2
|
||||||
|
|
||||||
|
ldy #73 ; 2
|
||||||
|
loop7:
|
||||||
|
ldx #1 ; 2
|
||||||
|
loop8:
|
||||||
|
dex ; 2
|
||||||
|
bne loop8 ; 2nt/3
|
||||||
|
|
||||||
|
dey ; 2
|
||||||
|
bne loop7 ; 2nt/3
|
||||||
|
|
||||||
|
|
||||||
|
; want 772-4 = 768
|
||||||
|
|
||||||
|
bit SPEAKER ; 4
|
||||||
|
|
||||||
|
; Try X=9 Y=15 cycles=766
|
||||||
|
|
||||||
|
nop ; 2
|
||||||
|
|
||||||
|
ldy #15 ; 2
|
||||||
|
loop9:
|
||||||
|
ldx #9 ; 2
|
||||||
|
loop10:
|
||||||
|
dex ; 2
|
||||||
|
bne loop10 ; 2nt/3
|
||||||
|
|
||||||
|
dey ; 2
|
||||||
|
bne loop9 ; 2nt/3
|
||||||
|
|
||||||
|
|
||||||
|
; want 873-4 = 869
|
||||||
|
|
||||||
|
bit SPEAKER ; 4
|
||||||
|
|
||||||
|
; Try X=42 Y=4 cycles=865
|
||||||
|
|
||||||
|
nop ; 2
|
||||||
|
nop ; 2
|
||||||
|
|
||||||
|
ldy #4 ; 2
|
||||||
|
loop11:
|
||||||
|
ldx #42 ; 2
|
||||||
|
loop12:
|
||||||
|
dex ; 2
|
||||||
|
bne loop12 ; 2nt/3
|
||||||
|
|
||||||
|
dey ; 2
|
||||||
|
bne loop11 ; 2nt/3
|
||||||
|
|
||||||
|
|
||||||
|
dec COUNT
|
||||||
|
bne pattern2_loop
|
||||||
|
|
||||||
|
|
||||||
|
rts
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;=============================
|
||||||
|
;
|
||||||
|
|
||||||
|
drum1:
|
||||||
|
bit $C030
|
||||||
|
jsr delay_1600
|
||||||
|
jsr delay_800
|
||||||
|
jsr delay_200
|
||||||
|
|
||||||
|
bit $C030
|
||||||
|
jsr delay_800
|
||||||
|
jsr delay_400
|
||||||
|
|
||||||
|
bit $C030
|
||||||
|
jsr delay_800
|
||||||
|
|
||||||
|
bit $C030
|
||||||
|
jsr delay_800
|
||||||
|
jsr delay_400
|
||||||
|
|
||||||
|
bit $C030
|
||||||
|
jsr delay_1600
|
||||||
|
jsr delay_800
|
||||||
|
jsr delay_400
|
||||||
|
|
||||||
|
bit $C030
|
||||||
|
jsr delay_200
|
||||||
|
|
||||||
|
bit $C030
|
||||||
|
jsr delay_400
|
||||||
|
|
||||||
|
bit $C030
|
||||||
|
jsr delay_1600
|
||||||
|
jsr delay_800
|
||||||
|
|
||||||
|
bit $C030
|
||||||
|
jsr delay_3200
|
||||||
|
jsr delay_800
|
||||||
|
jsr delay_400
|
||||||
|
|
||||||
|
bit $C030
|
||||||
|
jsr delay_800
|
||||||
|
jsr delay_200
|
||||||
|
|
||||||
|
bit $C030
|
||||||
|
jsr delay_200
|
||||||
|
|
||||||
|
bit $C030
|
||||||
|
rts
|
||||||
|
|
||||||
|
|
||||||
|
;=============================
|
||||||
|
;
|
||||||
|
|
||||||
|
drum2:
|
||||||
|
bit $C030
|
||||||
|
jsr delay_800
|
||||||
|
|
||||||
|
bit $C030
|
||||||
|
jsr delay_400
|
||||||
|
|
||||||
|
bit $C030
|
||||||
|
jsr delay_800
|
||||||
|
jsr delay_400
|
||||||
|
|
||||||
|
bit $C030
|
||||||
|
jsr delay_800
|
||||||
|
jsr delay_200
|
||||||
|
|
||||||
|
bit $C030
|
||||||
|
jsr delay_800
|
||||||
|
jsr delay_400
|
||||||
|
|
||||||
|
bit $C030
|
||||||
|
jsr delay_1600
|
||||||
|
jsr delay_200
|
||||||
|
|
||||||
|
bit $C030
|
||||||
|
jsr delay_200
|
||||||
|
|
||||||
|
bit $C030
|
||||||
|
jsr delay_400
|
||||||
|
jsr delay_200
|
||||||
|
|
||||||
|
bit $C030
|
||||||
|
jsr delay_1600
|
||||||
|
jsr delay_800
|
||||||
|
|
||||||
|
bit $C030
|
||||||
|
jsr delay_1600
|
||||||
|
jsr delay_800
|
||||||
|
|
||||||
|
bit $C030
|
||||||
|
rts
|
||||||
|
|
||||||
|
|
||||||
|
;=============================
|
||||||
|
;
|
||||||
|
|
||||||
|
drum3:
|
||||||
|
bit $C030
|
||||||
|
jsr delay_1600
|
||||||
|
jsr delay_800
|
||||||
|
|
||||||
|
bit $C030
|
||||||
|
jsr delay_400
|
||||||
|
|
||||||
|
bit $C030
|
||||||
|
jsr delay_200
|
||||||
|
|
||||||
|
bit $C030
|
||||||
|
jsr delay_200
|
||||||
|
|
||||||
|
bit $C030
|
||||||
|
jsr delay_200
|
||||||
|
jsr delay_400
|
||||||
|
|
||||||
|
bit $C030
|
||||||
|
jsr delay_400
|
||||||
|
jsr delay_800
|
||||||
|
|
||||||
|
bit $C030
|
||||||
|
jsr delay_800
|
||||||
|
|
||||||
|
bit $C030
|
||||||
|
rts
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; subtract 6(jsr)6(rts)11(below)
|
||||||
|
; want 177
|
||||||
|
; Try X=2 Y=11 cycles=177
|
||||||
|
delay_200:
|
||||||
|
ldy #11 ; 2
|
||||||
|
ldx #2 ; 2
|
||||||
|
stx xdelay_smc+1 ; 4
|
||||||
|
jmp do_custom_delay ; 3
|
||||||
|
|
||||||
|
|
||||||
|
; subtract 6(jsr)6(rts)11(below)
|
||||||
|
; want 377
|
||||||
|
; Try X=74 Y=1 cycles=377
|
||||||
|
delay_400:
|
||||||
|
ldy #1 ; 2
|
||||||
|
ldx #74 ; 2
|
||||||
|
stx xdelay_smc+1 ; 4
|
||||||
|
jmp do_custom_delay ; 3
|
||||||
|
|
||||||
|
|
||||||
|
; subtract 6(jsr)6(rts)11(below)
|
||||||
|
; want 777
|
||||||
|
; Try X=154 Y=1 cycles=777
|
||||||
|
delay_800:
|
||||||
|
ldy #1 ; 2
|
||||||
|
ldx #154 ; 2
|
||||||
|
stx xdelay_smc+1 ; 4
|
||||||
|
jmp do_custom_delay ; 3
|
||||||
|
|
||||||
|
|
||||||
|
; subtract 6(jsr)6(rts)11(below)
|
||||||
|
; want 1577
|
||||||
|
; Try X=3 Y=75 cycles=1576
|
||||||
|
delay_1600:
|
||||||
|
ldy #75 ; 2
|
||||||
|
ldx #3 ; 2
|
||||||
|
stx xdelay_smc+1 ; 4
|
||||||
|
jmp do_custom_delay ; 3
|
||||||
|
|
||||||
|
; subtract 6(jsr)6(rts)11(below)
|
||||||
|
; want 3177
|
||||||
|
; Try X=8 Y=69 cycles=3175
|
||||||
|
delay_3200:
|
||||||
|
ldy #69 ; 2
|
||||||
|
ldx #8 ; 2
|
||||||
|
stx xdelay_smc+1 ; 4
|
||||||
|
jmp do_custom_delay ; 3
|
||||||
|
|
||||||
|
do_custom_delay:
|
||||||
|
ldy #15 ; 2
|
||||||
|
dcd_outer:
|
||||||
|
xdelay_smc:
|
||||||
|
ldx #9 ; 2
|
||||||
|
dcd_inner:
|
||||||
|
dex ; 2
|
||||||
|
bne dcd_inner ; 2nt/3
|
||||||
|
|
||||||
|
dey ; 2
|
||||||
|
bne dcd_outer ; 2nt/3
|
||||||
|
|
||||||
|
rts
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user