Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ROM:00006512 KonDec: ; CODE XREF: sub_17F78+Cp
- ROM:00006512 move.w (a5)+,d0
- ROM:00006514 bra.s @InitDecomp
- ROM:00006516 ; ---------------------------------------------------------------------------
- ROM:00006516 ; UNUSED CODE
- ROM:00006516 addq.l #2,a5 ; skip 2 bytes in compressed stream
- ROM:00006518 ; ---------------------------------------------------------------------------
- ROM:00006518
- ROM:00006518 @InitDecomp: ; CODE XREF: KonDec+2j
- ROM:00006518 lea (@MainLoop).l,a0
- ROM:0000651E moveq #0,d7 ; ignore the following DBF
- ROM:00006520
- ROM:00006520 @MainLoop: ; DATA XREF: KonDec:@InitDecompo
- ROM:00006520 dbf d7,@RunDecoding ; if bits in decription field remain, branch
- ROM:00006524 moveq #7,d7 ; set repeat count to 8
- ROM:00006526 move.b (a5)+,d1 ; fetch new decription field
- ROM:00006528
- ROM:00006528 @RunDecoding: ; CODE XREF: KonDec:@MainLoopj
- ROM:00006528 lsr.w #1,d1 ; get a bit from the description bitfield
- ROM:0000652A bcs.w @DecodeFlag ; if bit=1, treat current byte as decompression flag
- ROM:0000652E move.b (a5)+,(a6)+ ; if bit=0, treat current byte as raw data
- ROM:00006530 jmp (a0) ; back to @MainLoop
- ROM:00006532 ; ---------------------------------------------------------------------------
- ROM:00006532
- ROM:00006532 @DecodeFlag: ; CODE XREF: KonDec+18j
- ROM:00006532 moveq #0,d0
- ROM:00006534 move.b (a5)+,d0 ; read flag from a compressed stream
- ROM:00006536 bmi.w @Mode10or11 ; if bit 7 is set, branch
- ROM:0000653A cmpi.b #$1F,d0
- ROM:0000653E beq.w @QuitDecomp ; if flag is $1F, branch
- ROM:00006542 move.l d0,d2 ; d2 = %00000000 0ddnnnnn
- ROM:00006544 lsl.w #3,d0 ; d0 = %000000dd nnnnn000
- ROM:00006546 move.b (a5)+,d0 ; d0 = %000000dd dddddddd
- ROM:00006548 andi.w #$1F,d2 ; d2 = %00000000 000nnnnn
- ROM:0000654C addq.w #2,d2
- ROM:0000654E jmp (@UncCopyMode).l
- ROM:00006554 ; ---------------------------------------------------------------------------
- ROM:00006554
- ROM:00006554 @Mode10or11: ; CODE XREF: KonDec+24j
- ROM:00006554 btst #6,d0
- ROM:00006558 bne.w @CompCopyMode ; if bits 7 and 6 are set, branch
- ROM:0000655C move.l d0,d2 ; d2 = %00000000 10xxxxxx
- ROM:0000655E lsr.w #4,d2 ; d2 = %00000000 000010xx
- ROM:00006560 subq.w #7,d2 ; value = 1..4
- ROM:00006562 andi.w #$F,d0
- ROM:00006566
- ROM:00006566 @UncCopyMode: ; CODE XREF: KonDec+3Cj
- ROM:00006566 neg.w d0
- ROM:00006568
- ROM:00006568 @UncCopyLoop: ; CODE XREF: KonDec+5Aj
- ROM:00006568 move.b (a6,d0.w),(a6)+ ; self-copy block of uncompressed stream
- ROM:0000656C dbf d2,@UncCopyLoop ; repeat
- ROM:00006570 jmp (a0) ; back to @MainLoop
- ROM:00006572 ; ---------------------------------------------------------------------------
- ROM:00006572
- ROM:00006572 @CompCopyMode: ; CODE XREF: KonDec+46j
- ROM:00006572 subi.b #$B9,d0 ; value = 7..70
- ROM:00006576
- ROM:00006576 @CompCopyLoop: ; CODE XREF: KonDec+66j
- ROM:00006576 move.b (a5)+,(a6)+ ; copy uncompressed sequence
- ROM:00006578 dbf d0,@CompCopyLoop ; repeat
- ROM:0000657C jmp (a0) ; back to @MainLoop
- ROM:0000657E ; ---------------------------------------------------------------------------
- ROM:0000657E
- ROM:0000657E @QuitDecomp: ; CODE XREF: KonDec+2Cj
- ROM:0000657E rts
- ROM:0000657E ; End of function KonDec
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement