mirror of
https://github.com/deater/dos33fsprogs.git
synced 2024-12-26 11:30:12 +00:00
chiptune: found bug in lz4 code
This commit is contained in:
parent
0cb0911151
commit
0850eb63c1
@ -131,21 +131,21 @@ done_getsrc:
|
||||
; buildcount
|
||||
;============
|
||||
buildcount:
|
||||
ldx #1
|
||||
stx count+1
|
||||
cmp #$0f
|
||||
ldx #1 ; high count starts at 1
|
||||
stx count+1 ; (loops at zero?)
|
||||
cmp #$0f ; if LITERAL_COUNT < 15, we are done
|
||||
bne done_buildcount
|
||||
minus_buildcount:
|
||||
sta count
|
||||
jsr getsrc
|
||||
tax
|
||||
buildcount_loop:
|
||||
sta count ; save LITERAL_COUNT (15)
|
||||
jsr getsrc ; get the next byte
|
||||
tax ; put in X
|
||||
clc
|
||||
adc count
|
||||
bcc skip_buildcount
|
||||
adc count ; add new byte to old value
|
||||
bcc bc_8bit_oflow ; if overflow, increment high byte
|
||||
inc count+1
|
||||
skip_buildcount:
|
||||
inx
|
||||
beq minus_buildcount
|
||||
bc_8bit_oflow:
|
||||
inx ; check if read value was 255
|
||||
beq buildcount_loop ; if it was, keep looping and adding
|
||||
done_buildcount:
|
||||
rts
|
||||
|
||||
@ -168,14 +168,27 @@ putdst:
|
||||
putdst_end:
|
||||
rts
|
||||
|
||||
;================
|
||||
;=============================
|
||||
; docopy
|
||||
;================
|
||||
;=============================
|
||||
; copies ram[count+1]-1:X bytes
|
||||
; from src to dst
|
||||
docopy:
|
||||
; working around bug in original code that would loop 256 too
|
||||
; many times if incoming X was equal to 0
|
||||
cpx #$0
|
||||
bne docopy_loop
|
||||
jsr getput
|
||||
dex
|
||||
bne docopy
|
||||
dec count+1
|
||||
bne docopy
|
||||
bne docopy_hack
|
||||
|
||||
docopy_loop:
|
||||
jsr getput ; get/put byte
|
||||
dex ; decrement count
|
||||
bne docopy_loop ; if not zero, loop
|
||||
docopy_hack:
|
||||
dec count+1 ; if zero, decrement high byte
|
||||
bne docopy_loop ; if not zero, loop
|
||||
|
||||
rts
|
||||
|
||||
|
@ -39,22 +39,24 @@ void buildcount(void) {
|
||||
ram[count+1]=x; // ?? // stx count+1
|
||||
cmp(0xf); // if 15, more complicated // cmp #$0f
|
||||
if (z==0) goto done_buildcount; // otherwise A is count // bne ++
|
||||
minus_buildcount:
|
||||
buildcount_loop:
|
||||
ram[count]=a; //- sta count
|
||||
// printf("MBC ");
|
||||
printf("\tADDITIONAL BUILDCOUNT ");
|
||||
getsrc(); //jsr getsrc
|
||||
printf("\tADDITIONAL BUILDCOUNT 0x%x, adding 0x%x\n",a,ram[count]);
|
||||
x=a; //tax
|
||||
c=0; //clc
|
||||
adc(ram[count]); //adc count
|
||||
printf("\tGOT 0x%x c=%d\n",a,c);
|
||||
if (c==0) goto skip_buildcount; // bcc +
|
||||
ram[count+1]++; //inc count+1
|
||||
skip_buildcount:
|
||||
x++; //+ inx
|
||||
if (x==0) goto minus_buildcount; //beq -
|
||||
printf("\tUPDATED COUNT %02X%02X\n",ram[count+1],a);
|
||||
x++; // check if x is 255 //+ inx
|
||||
if (x==0) goto buildcount_loop; // if so, add in next byte //beq -
|
||||
done_buildcount: ; //++ rts
|
||||
printf("\tBUILDCOUNT= r[c+1]=%02X r[c]=%02X a=%02X x=%02X\n",
|
||||
ram[count+1],ram[count],a,x);
|
||||
printf("\tBUILDCOUNT= %02X%02X r[c+1]=%02X r[c]=%02X a=%02X x=%02X\n",
|
||||
ram[count+1],a,ram[count+1],ram[count],a,x);
|
||||
}
|
||||
|
||||
|
||||
@ -79,14 +81,26 @@ static void getput(void) {
|
||||
putdst(); // ; fallthrough
|
||||
}
|
||||
|
||||
// 202 -> 201 -> 100 -> 1FF
|
||||
// 201 -> 100 -> 1FF
|
||||
// 200 -> 2ff -> 2fe
|
||||
// 1ff -> 1fe
|
||||
|
||||
static void docopy(void) {
|
||||
printf("\tDOCOPY ENTRY: %02X%02X\n",ram[count+1],x);
|
||||
// docopy:
|
||||
if (x==0) {
|
||||
getput();
|
||||
x--;
|
||||
goto dc_hack;
|
||||
}
|
||||
|
||||
docopy_label:
|
||||
printf("\tDOCOPY %02X%02X: ",ram[count+1]-1,x);
|
||||
printf("\tDOCOPY %02X%02X: ",ram[count+1],x);
|
||||
getput(); // jsr getput
|
||||
x--; // dex
|
||||
if (x!=0) goto docopy_label; // bne docopy
|
||||
dc_hack:
|
||||
ram[count+1]--; // dec count+1
|
||||
if (ram[count+1]!=0) goto docopy_label; //bne docopy
|
||||
//rts
|
||||
|
Loading…
Reference in New Issue
Block a user