Prev: BFEC Up: Map Next: C13E
C023: Routine at C023
Used by the routines at BD0D, BD48 and BFEC.
C023 LD A,(IX+$07) A=*IX+07.
C026 BIT 7,A Jump to C03B if bit 7 of A is not set.
C028 JR Z,$C03B
C02A SUB (IX+$08) A-=*IX+08.
C02D BIT 3,A Jump to C042 if bit 3 of A is not set.
C02F JR Z,$C042
C031 ADD A,$08 A+=08.
C033 LD (IX+$07),A Write A to *IX+07.
C036 DEC (IX+$00) Decrease *IX+00 by one.
C039 JR $C057 Jump to C057.
C03B ADD A,(IX+$08) A+=*IX+08.
C03E BIT 3,A Jump to C04F if bit 3 of A is set.
C040 JR NZ,$C04F
C042 LD (IX+$07),A Write A to *IX+07.
C045 LD A,(IX+$00) A=*IX+00.
C048 CP (IX+$0B) Return if A is higher than *IX+0B.
C04B RET NC
C04C JP $C112 Jump to C112.
C04F RES 3,A Reset bit 3 of A.
C051 LD (IX+$07),A Write A to *IX+07.
C054 INC (IX+$00) Increment *IX+00 by one.
This entry point is used by the routines at B3BE and B591.
C057 LD A,(IX+$00) A=*IX+00.
C05A CP (IX+$0B) Return if A is higher than *IX+0B.
C05D RET NC
C05E CP $14 Jump to C0A9 if A is higher than 14.
C060 JR NC,$C0A9
C062 CP (IX+$0C) Jump to C06F if A is lower than *IX+0C.
C065 JR C,$C06F
C067 LD A,(IX+$0C) A=*IX+0C.
C06A LD (IX+$03),A Write A to *IX+03.
C06D JR $C073 Jump to C073.
C06F INC A Increment A by one.
C070 LD (IX+$03),A Write A to *IX+03.
C073 LD A,(IX+$05) A=*IX+05.
C076 AND %00011111 Keep only bits 0-4.
C078 LD C,A C=A.
C079 LD A,(IX+$00) A=*IX+00.
C07C NEG NEG.
C07E ADD A,$15 A+=15.
C080 LD E,A E=A.
C081 RRCA RRCA.
C082 RRCA RRCA.
C083 RRCA RRCA.
C084 LD B,A B=A.
C085 AND %11100000 Keep only bits 5-7.
C087 OR C Set the bits from C.
C088 LD (IX+$05),A Write A to *IX+05.
C08B LD (IX+$01),A Write A to *IX+01.
C08E LD A,$03 A=03.
C090 AND B Merge the bits from B.
C091 OR %01011000 Set bits 3-4, 6.
C093 LD D,A D=A.
C094 SET 5,D Set bit 5 of D.
C096 LD (IX+$06),A Write A to *IX+06.
C099 LD A,$18 A=18.
C09B AND E Merge the bits from E.
C09C OR %01000000 Set bits 6.
C09E LD (IX+$02),A Write A to *IX+02.
C0A1 LD E,(IX+$05) E=*IX+05.
C0A4 LD BC,$0000 BC=0000.
C0A7 JR $C0D8 Jump to C0D8.
C0A9 NEG NEG.
C0AB ADD A,(IX+$0B) A+=*IX+0B.
C0AE LD (IX+$03),A Write A to *IX+03.
C0B1 SUB (IX+$0C) A-=*IX+0C.
C0B4 NEG NEG.
C0B6 BIT 0,(IX+$04) Jump to C0BD if bit 0 of *IX+04 is set.
C0BA JR NZ,$C0BD
C0BC RLCA RLCA.
C0BD LD C,A C=A.
C0BE LD B,$00 B=00.
C0C0 LD A,(IX+$05) A=*IX+05.
C0C3 AND %00011111 Keep only bits 0-4.
C0C5 OR %01000000 Set bits 6.
C0C7 LD E,A E=A.
C0C8 LD (IX+$05),A Write A to *IX+05.
C0CB LD (IX+$01),A Write A to *IX+01.
C0CE LD D,$78 D=78.
C0D0 LD (IX+$06),$58 Write 06 to *IX+06.
C0D4 LD (IX+$02),$40 Write 02 to *IX+02.
C0D8 LD L,(IX+$09) L=*IX+09.
C0DB LD H,(IX+$0A) H=*IX+0A.
C0DE LD A,C A=C.
C0DF PUSH AF Stash AF and HL on the stack.
C0E0 PUSH HL
C0E1 ADD HL,BC HL+=BC.
C0E2 LD C,(IX+$0C) C=*IX+0C.
C0E5 BIT 0,(IX+$04) Jump to C0ED if bit 0 of *IX+04 is set.
C0E9 JR NZ,$C0ED
C0EB SLA C Shift C left (with carry).
C0ED SLA C Shift C left (with carry).
C0EF ADD HL,BC HL+=BC.
C0F0 LD B,(IX+$03) B=*IX+03.
C0F3 LD C,(IX+$04) C=*IX+04.
C0F6 PUSH BC Stash BC and DE on the stack.
C0F7 PUSH DE
C0F8 CALL $B1B2 Call B1B2.
C0FB POP HL Restore HL from the stack.
C0FC ADD HL,HL HL+=HL.
C0FD LD A,$07 A=07.
C0FF AND H Merge the bits from H.
C100 OR %01110000 Set bits 4-6.
C102 LD D,A D=A.
C103 LD E,L E=L.
C104 POP BC Restore BC, HL and AF from the stack.
C105 POP HL
C106 POP AF
C107 RLCA RLCA.
C108 ADD A,L A+=L.
C109 LD L,A L=A.
C10A JR NC,$C10D Jump to C10D if {} is higher.
C10C INC H Increment H by one.
C10D SLA C Shift C left (with carry).
C10F CALL PlayareaCopier Call PlayareaCopier.
C112 CALL $C13E Call C13E.
C115 LD B,(IX+$03) B=*IX+03.
C118 LD A,(IX+$07) A=*IX+07.
C11B AND %00000111 Keep only bits 0-2.
C11D LD C,A C=A.
C11E LD DE,$003D DE=003D.
C121 LD A,(HL) A=*HL.
C122 AND %11111000 Keep only bits 3-7.
C124 OR C Set the bits from C.
C125 LD (HL),A Write A to *HL.
C126 INC L Increment L by one.
C127 SET 7,(HL) Set bit 7 of *HL.
C129 INC L Increment L by two.
C12A INC L
C12B BIT 0,(IX+$04) Jump to C13A if bit 0 of *IX+04 is set.
C12F JR NZ,$C13A
C131 DEC L Decrease L by one.
C132 LD A,(HL) A=*HL.
C133 AND %11111000 Keep only bits 3-7.
C135 OR C Set the bits from C.
C136 LD (HL),A Write A to *HL.
C137 INC L Increment L by one.
C138 SET 7,(HL) Set bit 7 of *HL.
C13A ADD HL,DE HL+=DE.
C13B DJNZ $C121 Decrease counter by one and loop back to C121 until counter is zero.
C13D RET Return.
Prev: BFEC Up: Map Next: C13E