asm_routines: update lz4 comments

This commit is contained in:
Vince Weaver 2018-02-21 16:11:29 -05:00
parent ae638b8a37
commit da04382c18

View File

@ -72,7 +72,7 @@ lz4_decode:
unpmain: unpmain:
ldy #0 ; used to index ldy #0 ; used to index, always zero
parsetoken: parsetoken:
jsr getsrc ; get next token jsr getsrc ; get next token
@ -83,12 +83,15 @@ parsetoken:
lsr lsr
lsr lsr
beq copymatches ; if zero, then no literals beq copymatches ; if zero, then no literals
; jump ahead and copy
jsr buildcount jsr buildcount ; add up all the literal sizes
tax ; result is in ram[count+1]-1:A
jsr docopy tax ; now in ram[count+1]-1:X
lda src jsr docopy ; copy the literals
cmp end
lda src ; 16-bit compare
cmp end ; to see if we have reached the end
lda src+1 lda src+1
sbc end+1 sbc end+1
bcs done bcs done
@ -103,45 +106,51 @@ copymatches:
and #$0f ; get bottom 4 bits and #$0f ; get bottom 4 bits
; match count. 0 means 4 ; match count. 0 means 4
; 15 means 19+, must be calculated ; 15 means 19+, must be calculated
jsr buildcount
jsr buildcount ; add up count bits, in ram[count+1]-:A
clc clc
adc #4 ; adjust count by 4 (minmatch) adc #4 ; adjust count by 4 (minmatch)
tax tax ; now in ramp[count+1]-1:X
beq copy_skip ; BUGFIX
bcc copy_skip
inc count+1 beq copy_no_adjust ; BUGFIX, don't increment if
copy_skip: ; exactly a multiple of 0x100
lda src+1 bcc copy_no_adjust
inc count+1 ; increment if we overflowed
copy_no_adjust:
lda src+1 ; save src on stack
pha pha
lda src lda src
pha pha
sec
lda dst sec ; subtract delta
lda dst ; from destination, make new src
sbc delta sbc delta
sta src sta src
lda dst+1 lda dst+1
sbc delta+1 sbc delta+1
sta src+1 sta src+1
jsr docopy
pla jsr docopy ; do the copy
pla ; restore the src
sta src sta src
pla pla
sta src+1 sta src+1
jmp parsetoken
jmp parsetoken ; back to parsing tokens
done: done:
pla pla
rts rts
;========= ;=========
; getsrc ; getsrc
;========= ;=========
; gets byte from src into A, increments pointer
getsrc: getsrc:
lda (src), Y ; get a byte from src lda (src), Y ; get a byte from src
inc src ; increment pointer inc src ; increment pointer
@ -183,10 +192,11 @@ getput:
;============= ;=============
; putdst ; putdst
;============= ;=============
; store A into destination
putdst: putdst:
sta (dst), Y sta (dst), Y ; store A into destination
inc dst inc dst ; increment 16-bit pointer
bne putdst_end bne putdst_end ; if overflow, increment top byte
inc dst+1 inc dst+1
putdst_end: putdst_end:
rts rts