
        MACRO INCADDR
        INC L
        CALL Z,INC_H
        ENDM 

INITANI JR initani
PLAYANI JR playani
HIMEM   JR himem

initani LD (ScrAddr+1),DE
        LD DE,14
        ADD HL,DE
        LD C,(HL)
        INC HL
        LD B,(HL)
        INC HL
        LD (AniSize+1),BC
        LD A,B
        NEG 
        AND 7
        ADD A,B
        RRA 
        RRA 
        RRA 
        AND 31
        JR NZ,inan_1
        LD A,32
inan_1  LD (BoxSize+1),A
        XOR A
        LD (PlayPge+1),A
        LD (PlayAdr+1),HL
        LD (tobegin+1),HL
        INC A
        LD (playani+1),A
        RET 

himem   LD (HMemAdr+1),HL
        RET 

playani LD A,1
        DEC A
        LD (playani+1),A
        RET NZ
PlayPge LD A,0
        CALL ANIBANK
PlayAdr LD HL,0
        LD A,(HL)       ; delay
        INCADDR
        INC A
        JR Z,tobegin
        DEC A
        LD (playani+1),A
        LD C,(HL)       ; packtype
        INCADDR
        LD A,C
        RLA 
        SBC A,A
        AND #90
        XOR #37
        LD (color0),A
        LD (color1),A
        LD A,C
        RLA 
        RLA 
        SBC A,A
        AND #90
        XOR #37
        LD (pakcol),A
        LD A,C
        DEC A
        RRA 
        RRA 
        RRA 
        SBC A,A
        AND #90
        XOR #37
        LD (pakdat),A
        LD A,C
ScrAddr LD DE,#4000
AniSize LD BC,#680D
        AND 63
        JP Z,NOPACK
        EXX 
        LD C,0          ; C' -  
        EXX 
BoxSize LD B,#0D
        CP 9
        JR NC,tobegin
        DEC A
        AND 3
        JP Z,MTP_1
        DEC A
        JP Z,MTP_2
        DEC A
        JP Z,MTP_3
        DEC A
        JP Z,MTP_4
tobegin LD HL,0
        XOR A
        LD (PlayAdr+1),HL
        LD (PlayPge+1),A
        INC A
        LD (playani+1),A
        RET 

NOPACK  PUSH BC
        PUSH DE
nopa_1  LD A,(HL)
        LD (DE),A
        INC E
        INCADDR
        DEC C
        JR NZ,nopa_1
        POP DE
        POP BC
        INC D
        LD A,D
        AND 7
        JR NZ,nopa_4
color0  SCF 
        JR C,nopa_3
        PUSH BC
        PUSH DE
        LD A,D
        RRA 
        RRA 
        RRA 
        AND 3
        OR #58
        LD D,A
nopa_2  LD A,(HL)
        LD (DE),A
        INC DE
        INCADDR
        DEC C
        JR NZ,nopa_2
        POP DE
        POP BC
nopa_3  LD A,E
        ADD A,32
        LD E,A
        JR C,nopa_4
        LD A,D
        SUB 8
        LD D,A
nopa_4  DJNZ NOPACK
        LD (PlayAdr+1),HL
        RET 

MTP_1   PUSH BC
        PUSH DE
mtp1_0  PUSH DE
        CALL UP_CNT
        JR NC,mtp1_Z
        LD A,(HL)
        INCADDR
        AND A
        JR Z,mtp1_Z
        LD B,A
        XOR A
        LD (xorer1+1),A
        EXA 
        LD A,8
mtp1_1  EXA 
        RR B
        JR NC,xorer1
        PUSH AF
        LD A,(HL)
        LD (xorer1+1),A
        INCADDR
        POP AF
xorer1  XOR 0
        LD (DE),A
        INC D
        EXA 
        DEC A
        JR NZ,mtp1_1
        JR mtp1_E
mtp1_Z  XOR A
        LD B,8
mtp1z_1 LD (DE),A
        INC D
        DJNZ mtp1z_1
mtp1_E  CALL IF_COL
        POP DE
        INC E
        DEC C
        JR NZ,mtp1_0
        POP DE
        POP BC
        LD A,E
        ADD A,32
        LD E,A
        SBC A,A
        AND 8
        ADD A,D
        LD D,A
        DJNZ MTP_1
        LD (PlayAdr+1),HL
        RET 

MTP_2   PUSH BC
        PUSH DE
mtp2_0  PUSH DE
        CALL UP_CNT
        JR NC,mtp2_Z
        LD A,(HL)
        INCADDR
        AND A
        JR Z,mtp2_Z
        CP 1
        JR Z,mtp2_S
        LD B,A
        XOR A
        EXA 
        LD A,8
mtp2_1  EXA 
        RR B
        JR NC,mtp2_2
        XOR (HL)
        INCADDR
mtp2_2  LD (DE),A
        INC D
        EXA 
        DEC A
        JR NZ,mtp2_1
        JR mtp2_E
mtp2_S  LD A,(HL)
        INCADDR
        JR mtp2_ZS
mtp2_Z  XOR A
mtp2_ZS LD B,8
mtp2z_1 LD (DE),A
        INC D
        DJNZ mtp2z_1
mtp2_E  CALL IF_COL
        POP DE
        INC E
        DEC C
        JR NZ,mtp2_0
        POP DE
        POP BC
        LD A,E
        ADD A,32
        LD E,A
        SBC A,A
        AND 8
        ADD A,D
        LD D,A
        DJNZ MTP_2
        LD (PlayAdr+1),HL
        RET 

MTP_3   PUSH BC
        PUSH DE
mtp3_0  PUSH DE
        CALL UP_CNT
        JR NC,mtp3_Z
        LD A,(HL)
        INCADDR
        AND A
        JR Z,mtp3_Z
        LD B,A
        XOR A
        LD (xorer3+1),A
        EXA 
        LD A,8
mtp3_1  EXA 
        RR B
        JR NC,xorer3
        PUSH AF
        LD A,(HL)
        LD (xorer3+1),A
        INCADDR
        POP AF
xorer3  XOR 0
        PUSH AF
        EX DE,HL
        XOR (HL)
        LD (HL),A
        EX DE,HL
        POP AF
        INC D
        EXA 
        DEC A
        JR NZ,mtp3_1
        DEC D
mtp3_Z  INC D
        CALL IF_COL
        POP DE
        INC E
        DEC C
        JR NZ,mtp3_0
        POP DE
        POP BC
        LD A,E
        ADD A,32
        LD E,A
        SBC A,A
        AND 8
        ADD A,D
        LD D,A
        DJNZ MTP_3
        LD (PlayAdr+1),HL
        RET 

MTP_4   PUSH BC
        PUSH DE
mtp4_0  PUSH DE
        CALL UP_CNT
        JR NC,mtp4_Z
        LD A,(HL)
        INCADDR
        AND A
        JR Z,mtp4_Z
        LD B,A
        XOR A
        EXA 
        LD A,8
mtp4_1  EXA 
        RR B
        JR NC,mtp4_2
        XOR (HL)
        INCADDR
mtp4_2  PUSH AF
        EX DE,HL
        XOR (HL)
        LD (HL),A
        EX DE,HL
        POP AF
        INC D
        EXA 
        DEC A
        JR NZ,mtp4_1
        DEC D
mtp4_Z  INC D
mtp4_E  CALL IF_COL
        POP DE
        INC E
        DEC C
        JR NZ,mtp4_0
        POP DE
        POP BC
        LD A,E
        ADD A,32
        LD E,A
        SBC A,A
        AND 8
        ADD A,D
        LD D,A
        DJNZ MTP_4
        LD (PlayAdr+1),HL
        RET 

IF_COL  LD A,0
        RRA 
        LD (IF_COL+1),A
        RET NC
        LD A,D
        DEC A
        RRA 
        RRA 
        RRA 
        AND 3
        OR #58
        LD D,A
        LD A,(HL)
        LD (DE),A
        INC L
        RET NZ
INC_H   INC H
        RET NZ
        PUSH AF
        CALL NXTBANK
        POP AF
        LD HL,#C000
        RET 

UP_CNT  EXX 
        LD A,C
        INC C
        EXX 
        AND 7
        JR NZ,flag_F
color1  SCF 
        JR C,upc1_1
        DEC A
pakcol  SCF 
        JR C,upc1_1
        LD A,(HL)
        INCADDR
upc1_1  LD (IF_COL+1),A
        LD A,#FF
pakdat  SCF 
        JR C,upc1_2
        LD A,(HL)
        INCADDR
upc1_2  LD (flag_F+1),A
flag_F  LD A,0
        RRA 
        LD (flag_F+1),A
        RET 

NXTBANK LD A,(PlayPge+1)
        INC A
        AND 3
ANIBANK LD (PlayPge+1),A
HMemAdr JP anibank

anibank PUSH BC
        CP 2
        CCF 
        ADC A,0
        OR #10
        LD BC,#7FFD
        OUT (C),A
        POP BC
        RET 

