Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ROM:0000A23E DecompressArt: ; CODE XREF: ROM:00007118p
- ROM:0000A23E movea.l a0,a2
- ROM:0000A240 adda.l (a0)+,a2 ; a2 = Dictionary
- ROM:0000A242 bra.s @ReloadBitField
- ROM:0000A244 ; ---------------------------------------------------------------------------
- ROM:0000A244
- ROM:0000A244 @UncompressedByte: ; CODE XREF: DecompressArt+14j
- ROM:0000A244 move.b (a2)+,(a1)+
- ROM:0000A246
- ROM:0000A246 @NextBit: ; CODE XREF: DecompressArt+CCj
- ROM:0000A246 ; DecompressArt+FAj ...
- ROM:0000A246 dbf d7,@LoadBit
- ROM:0000A24A
- ROM:0000A24A @ReloadBitField: ; CODE XREF: DecompressArt+4j
- ROM:0000A24A move.w (a0)+,d1 ; reload desc field
- ROM:0000A24C swap d1
- ROM:0000A24E moveq #$F,d7 ; reload bits counter
- ROM:0000A250
- ROM:0000A250 @LoadBit: ; CODE XREF: DecompressArt:@NextBitj
- ROM:0000A250 add.l d1,d1 ; load bit from the desc field
- ROM:0000A252 bcc.s @UncompressedByte ; if bit is 0 (uncompressed byte), branch
- ROM:0000A254 moveq #1,d2 ; d2 = Base copy count
- ROM:0000A256 dbf d7,@DecodeFlag ; if bits in desc. field remain, branch
- ROM:0000A25A move.w (a0)+,d1 ; reload desc field
- ROM:0000A25C swap d1
- ROM:0000A25E moveq #$F,d7
- ROM:0000A260
- ROM:0000A260 @DecodeFlag: ; CODE XREF: DecompressArt+18j
- ROM:0000A260 add.l d1,d1 ; load bit from the desc field
- ROM:0000A262 bcc.s @Code10 ; if bit is 0 (code 10), branch
- ROM:0000A264 moveq #2,d6 ; d6 = Argument length (in bits)
- ROM:0000A266 clr.w d1 ; d1 = %aa-- ---- ---- ---- 0000 0000 0000 0000
- ROM:0000A268 sub.w d6,d7 ; mark that we've fetched 2 bits
- ROM:0000A26A bgt.s loc_A27C ; if bits counter remains, branch
- ROM:0000A26C add.w d6,d7 ; otherwise, fetch missing bits from the next desc field
- ROM:0000A26E sub.w d7,d6
- ROM:0000A270 rol.l d7,d1
- ROM:0000A272 swap d1
- ROM:0000A274 move.w (a0)+,d1
- ROM:0000A276 swap d1
- ROM:0000A278 moveq #$10,d7
- ROM:0000A27A sub.w d6,d7
- ROM:0000A27C
- ROM:0000A27C loc_A27C: ; CODE XREF: DecompressArt+2Cj
- ROM:0000A27C rol.l d6,d1 ; d1 = %---- ---- ---- --00 0000 0000 0000 00aa
- ROM:0000A27E tst.w d1 ; test argument
- ROM:0000A280 bne.s @Code11_ArgNonZero ; if argument is not zero, branch
- ROM:0000A282 moveq #4,d2 ; d2 = Base copy count
- ROM:0000A284 moveq #4,d6 ; d6 = Argument length (in bits)
- ROM:0000A286 clr.w d1 ; d1 = %aaaa ---- ---- ---- 0000 0000 0000 0000
- ROM:0000A288 sub.w d6,d7 ; mark that we've fetched 4 bits
- ROM:0000A28A bgt.s loc_A29C ; if bits counter remains, branch
- ROM:0000A28C add.w d6,d7 ; otherwise, fetch missing bits from the next desc field
- ROM:0000A28E sub.w d7,d6
- ROM:0000A290 rol.l d7,d1
- ROM:0000A292 swap d1
- ROM:0000A294 move.w (a0)+,d1
- ROM:0000A296 swap d1
- ROM:0000A298 moveq #$10,d7
- ROM:0000A29A sub.w d6,d7
- ROM:0000A29C
- ROM:0000A29C loc_A29C: ; CODE XREF: DecompressArt+4Cj
- ROM:0000A29C rol.l d6,d1 ; d1 = %---- ---- ---- 0000 0000 0000 0000 aaaa
- ROM:0000A29E tst.w d1 ; test argument
- ROM:0000A2A0 bne.s @Code11_ArgNonZero ; if it's not zero, branch
- ROM:0000A2A2 moveq #$13,d2 ; d2 = Base copy count
- ROM:0000A2A4 moveq #8,d6 ; d6 = Argument length (in bits)
- ROM:0000A2A6 clr.w d1 ; d1 = %aaaa aaaa ---- ---- 0000 0000 0000 0000
- ROM:0000A2A8 sub.w d6,d7 ; mark that we've fetched 8 bits
- ROM:0000A2AA bgt.s loc_A2BC ; if bits counter remains, branch
- ROM:0000A2AC add.w d6,d7 ; otherwise, fetch missing bits from the next desc field
- ROM:0000A2AE sub.w d7,d6
- ROM:0000A2B0 rol.l d7,d1
- ROM:0000A2B2 swap d1
- ROM:0000A2B4 move.w (a0)+,d1
- ROM:0000A2B6 swap d1
- ROM:0000A2B8 moveq #$10,d7
- ROM:0000A2BA sub.w d6,d7
- ROM:0000A2BC
- ROM:0000A2BC loc_A2BC: ; CODE XREF: DecompressArt+6Cj
- ROM:0000A2BC rol.l d6,d1 ; d1 = %---- ---- 0000 0000 0000 0000 aaaa aaaa
- ROM:0000A2BE tst.w d1 ; test argument
- ROM:0000A2C0 beq.w @Quit ; if it's zero, branch
- ROM:0000A2C4
- ROM:0000A2C4 @Code11_ArgNonZero: ; CODE XREF: DecompressArt+42j
- ROM:0000A2C4 ; DecompressArt+62j
- ROM:0000A2C4 add.w d1,d2
- ROM:0000A2C6
- ROM:0000A2C6 @Code10: ; CODE XREF: DecompressArt+24j
- ROM:0000A2C6 moveq #2,d6 ; d6 = Argument length
- ROM:0000A2C8 clr.w d1 ; d1 = %aa-- ---- ---- ---- 0000 0000 0000 0000
- ROM:0000A2CA sub.w d6,d7 ; mark that we've fetched 2 bits
- ROM:0000A2CC bgt.s loc_A2DE ; if bits counter remains, branch
- ROM:0000A2CE add.w d6,d7 ; otherwise, fetch missing bits from the next desc field
- ROM:0000A2D0 sub.w d7,d6
- ROM:0000A2D2 rol.l d7,d1
- ROM:0000A2D4 swap d1
- ROM:0000A2D6 move.w (a0)+,d1
- ROM:0000A2D8 swap d1
- ROM:0000A2DA moveq #$10,d7
- ROM:0000A2DC sub.w d6,d7
- ROM:0000A2DE
- ROM:0000A2DE loc_A2DE: ; CODE XREF: DecompressArt+8Ej
- ROM:0000A2DE rol.l d6,d1 ; d1 = %---- ---- ---- --00 0000 0000 0000 00aa
- ROM:0000A2E0 subq.w #1,d1 ; subtract 1 from argument
- ROM:0000A2E2 bcc.s loc_A30E ; if it wasn't zero, branch
- ROM:0000A2E4 moveq #5,d6 ; d6 = Argument length
- ROM:0000A2E6 clr.w d1
- ROM:0000A2E8 sub.w d6,d7
- ROM:0000A2EA bgt.s loc_A2FC
- ROM:0000A2EC add.w d6,d7
- ROM:0000A2EE sub.w d7,d6
- ROM:0000A2F0 rol.l d7,d1
- ROM:0000A2F2 swap d1
- ROM:0000A2F4 move.w (a0)+,d1
- ROM:0000A2F6 swap d1
- ROM:0000A2F8 moveq #$10,d7
- ROM:0000A2FA sub.w d6,d7
- ROM:0000A2FC
- ROM:0000A2FC loc_A2FC: ; CODE XREF: DecompressArt+ACj
- ROM:0000A2FC rol.l d6,d1
- ROM:0000A2FE addq.w #1,d1
- ROM:0000A300 movea.l a1,a3
- ROM:0000A302 suba.w d1,a3
- ROM:0000A304
- ROM:0000A304 loc_A304: ; CODE XREF: DecompressArt+C8j
- ROM:0000A304 move.b (a3)+,(a1)+
- ROM:0000A306 dbf d2,loc_A304
- ROM:0000A30A bra.w @NextBit
- ROM:0000A30E ; ---------------------------------------------------------------------------
- ROM:0000A30E
- ROM:0000A30E loc_A30E: ; CODE XREF: DecompressArt+A4j
- ROM:0000A30E bne.s loc_A33C ; if argument wasn't 1, branch
- ROM:0000A310 moveq #7,d6
- ROM:0000A312 clr.w d1
- ROM:0000A314 sub.w d6,d7
- ROM:0000A316 bgt.s loc_A328
- ROM:0000A318 add.w d6,d7
- ROM:0000A31A sub.w d7,d6
- ROM:0000A31C rol.l d7,d1
- ROM:0000A31E swap d1
- ROM:0000A320 move.w (a0)+,d1
- ROM:0000A322 swap d1
- ROM:0000A324 moveq #$10,d7
- ROM:0000A326 sub.w d6,d7
- ROM:0000A328
- ROM:0000A328 loc_A328: ; CODE XREF: DecompressArt+D8j
- ROM:0000A328 rol.l d6,d1
- ROM:0000A32A addi.w #$21,d1
- ROM:0000A32E movea.l a1,a3
- ROM:0000A330 suba.w d1,a3
- ROM:0000A332
- ROM:0000A332 loc_A332: ; CODE XREF: DecompressArt+F6j
- ROM:0000A332 move.b (a3)+,(a1)+
- ROM:0000A334 dbf d2,loc_A332
- ROM:0000A338 bra.w @NextBit
- ROM:0000A33C ; ---------------------------------------------------------------------------
- ROM:0000A33C
- ROM:0000A33C loc_A33C: ; CODE XREF: DecompressArt:loc_A30Ej
- ROM:0000A33C subq.w #1,d1 ; if argument wasn't 2, branch
- ROM:0000A33E bne.s loc_A36C
- ROM:0000A340 moveq #9,d6
- ROM:0000A342 clr.w d1
- ROM:0000A344 sub.w d6,d7
- ROM:0000A346 bgt.s loc_A358
- ROM:0000A348 add.w d6,d7
- ROM:0000A34A sub.w d7,d6
- ROM:0000A34C rol.l d7,d1
- ROM:0000A34E swap d1
- ROM:0000A350 move.w (a0)+,d1
- ROM:0000A352 swap d1
- ROM:0000A354 moveq #$10,d7
- ROM:0000A356 sub.w d6,d7
- ROM:0000A358
- ROM:0000A358 loc_A358: ; CODE XREF: DecompressArt+108j
- ROM:0000A358 rol.l d6,d1
- ROM:0000A35A addi.w #$A1,d1
- ROM:0000A35E movea.l a1,a3
- ROM:0000A360 suba.w d1,a3
- ROM:0000A362
- ROM:0000A362 loc_A362: ; CODE XREF: DecompressArt+126j
- ROM:0000A362 move.b (a3)+,(a1)+
- ROM:0000A364 dbf d2,loc_A362
- ROM:0000A368 bra.w @NextBit
- ROM:0000A36C ; ---------------------------------------------------------------------------
- ROM:0000A36C
- ROM:0000A36C loc_A36C: ; CODE XREF: DecompressArt+100j
- ROM:0000A36C moveq #$A,d6
- ROM:0000A36E clr.w d1
- ROM:0000A370 sub.w d6,d7
- ROM:0000A372 bgt.s loc_A384
- ROM:0000A374 add.w d6,d7
- ROM:0000A376 sub.w d7,d6
- ROM:0000A378 rol.l d7,d1
- ROM:0000A37A swap d1
- ROM:0000A37C move.w (a0)+,d1
- ROM:0000A37E swap d1
- ROM:0000A380 moveq #$10,d7
- ROM:0000A382 sub.w d6,d7
- ROM:0000A384
- ROM:0000A384 loc_A384: ; CODE XREF: DecompressArt+134j
- ROM:0000A384 rol.l d6,d1
- ROM:0000A386 addi.w #$2A1,d1
- ROM:0000A38A movea.l a1,a3
- ROM:0000A38C suba.w d1,a3
- ROM:0000A38E
- ROM:0000A38E loc_A38E: ; CODE XREF: DecompressArt+152j
- ROM:0000A38E move.b (a3)+,(a1)+
- ROM:0000A390 dbf d2,loc_A38E
- ROM:0000A394 bra.w @NextBit
- ROM:0000A398 ; ---------------------------------------------------------------------------
- ROM:0000A398
- ROM:0000A398 @Quit: ; CODE XREF: DecompressArt+82j
- ROM:0000A398 move.l a1,(unk_FFFFE08E).w
- ROM:0000A39C ori #$700,sr
- ROM:0000A3A0 clr.b (unk_FFFFF4BC).w
- ROM:0000A3A4 clr.b (unk_FFFFF4BD).w
- ROM:0000A3A8 andi #$F8FF,sr
- ROM:0000A3AC rts
- ROM:0000A3AC ; End of function DecompressArt
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement