Prev: 40007 Up: Map Next: 40149
40040: BlitJonesShifted
Handles the alien tail XOR blit when JonesPos&7 >= 4 (sprite straddles the next character row). Uses SLA/RL chains for a left-shift instead of SRL/RR, mirroring the logic of BlitJonesFrame's right-shift section. The shift amount (pixels left past the half-character boundary) is patched into the self-modifying JR at the JR at BlitJonesShiftCode2, then 21 rows of 4 bytes are XOR-blitted.
40040 SUB 4 A = (JonesPos&7) - 4, left-shift amount in [0,3]
40042 LD L,A
40043 RLCA
40044 RLCA
40045 RLCA A = shift_count * 8
40046 SUB L A = shift_count * 7 (JR offset into SLA/RL chain)
40047 LD (40067),A patch BlitJonesShiftCode2 JR offset
40050 LD B,21 21 pixel rows
40052 PUSH BC
40053 EX DE,HL
40054 LD B,(HL)
40055 INC HL
40056 LD C,(HL)
40057 INC HL
40058 LD E,(HL)
40059 INC HL
40060 PUSH HL
40061 LD HL,(39751)
40064 PUSH HL
40065 XOR A
40066 JR 40066
40068 SLA E
40070 RL C
40072 RL B
40074 RLA
40075 SLA E
40077 RL C
40079 RL B
40081 RLA
40082 SLA E
40084 RL C
40086 RL B
40088 RLA
40089 SLA E
40091 RL C
40093 RL B
40095 RLA
40096 XOR (HL)
40097 LD (HL),A
40098 INC HL
40099 LD A,B
40100 XOR (HL)
40101 LD (HL),A
40102 INC HL
40103 LD A,C
40104 XOR (HL)
40105 LD (HL),A
40106 INC HL
40107 LD A,E
40108 XOR (HL)
40109 LD (HL),A
40110 POP HL
40111 LD A,H
40112 AND 7
40114 CP 7
40116 JR Z,40121
40118 INC H
40119 JR 40136
40121 LD A,L
40122 CP 224
40124 JR NC,40132
40126 LD BC,63776
40129 ADD HL,BC
40130 JR 40136
40132 LD BC,32
40135 ADD HL,BC
40136 LD (39751),HL
40139 POP DE
40140 POP BC
40141 DJNZ 40052
40143 POP BC
40144 DEC B
40145 JP NZ,40007
40148 RET
Prev: 40007 Up: Map Next: 40149