-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathdehrust_ix.asm
158 lines (152 loc) · 2.75 KB
/
dehrust_ix.asm
1
; Z80 HRUST depacker.;; in: HL - from; DE - to; kills: AF, BC,DE,HL, BC',DE',HL', IX; does not move anything before depacking, unlike dehrust_*_hdr.asm;; Uses IX to get packed stream, so somewhat slower than *_stk_* versions, but; it could be freely interrupted.;; you must USE -hst switch and must NOT USE -zxh switch to mhmt in order to get; correct packed stream for this depacker!; length is 234 bytes, non-relocatableDEHRUST PUSH HL POP IX LD B,0 EXX LD D,#BF LD C,#10 CALL LL4115LL4036 LD A,(IX+#00) INC IX EXX LL403C LD (DE),A INC DELL403E EXX LL403F ADD HL,HL DJNZ LL4045 CALL LL4115LL4045 JR C,LL4036 LD E,#01LL4049 LD A,#80LL404B ADD HL,HL DJNZ LL4051 CALL LL4115LL4051 RLA JR C,LL404B CP #03 JR C,LL405D ADD A,E LD E,A XOR C JR NZ,LL4049LL405D ADD A,E CP #04 JR Z,LL40C4 ADC A,#FF CP #02 EXX LL4067 LD C,ALL4068 EXX LD A,#BF JR C,LL4082LL406D ADD HL,HL DJNZ LL4073 CALL LL4115LL4073 RLA JR C,LL406D JR Z,LL407D INC A ADD A,D JR NC,LL4084 SUB DLL407D INC A JR NZ,LL408D LD A,#EFLL4082 RRCA CP ALL4084 ADD HL,HL DJNZ LL408A CALL LL4115LL408A RLA JR C,LL4084LL408D EXX LD H,#FF JR Z,LL409B LD H,A INC A LD A,(IX+#00) INC IX JR Z,LL40A6LL409B LD L,A ADD HL,DE LDIR LL409F JR LL403ELL40A1 EXX RRC D JR LL403FLL40A6 CP #E0 JR C,LL409B RLCA XOR C INC A JR Z,LL40A1 SUB #10LL40B1 LD L,A LD C,A LD H,#FF ADD HL,DE LDI LD A,(IX+#00) INC IX LD (DE),A INC HL INC DE LD A,(HL) JP LL403CLL40C4 LD A,#80LL40C6 ADD HL,HL DJNZ LL40CC CALL LL4115LL40CC ADC A,A JR NZ,LL40F3 JR C,LL40C6 LD A,#FC JR LL40F6LL40D5 LD B,A LD C,(IX+#00) INC IX CCF JR LL4068LL40DE CP #0F JR C,LL40D5 JR NZ,LL4067 RET LL40F3 SBC A,A LD A,#EFLL40F6 ADD HL,HL DJNZ LL40FC CALL LL4115LL40FC RLA JR C,LL40F6 EXX JR NZ,LL40B1 BIT 7,A JR Z,LL40DE SUB #EA ADD A,A LD B,ALL410A LD A,(IX+#00) INC IX LD (DE),A INC DE DJNZ LL410A JR LL409FLL4115 LD B,C LD L,(IX+#00) INC IX LD H,(IX+#00) INC IX RET