Prev: 9DC0 Up: Map Next: 9ECA
9E2C: Animate: Laser Beam
LaserBeam_Animate 9E2C CALL $A796 Call A796.
9E2F LD D,(IX+$01) Laser Y position.
9E32 LD A,(IX+$02) Laser X position: pulse #1.
9E35 BIT 2,A Jump to LaserBeam_Animate_1 if bit 2 is reset.
9E37 JR Z,LaserBeam_Animate_1
9E39 LD L,A L=X position: pulse #1.
9E3A LD A,$08
9E3C BIT 0,L
9E3E JR Z,LaserBeam_Animate_0
9E40 NEG
LaserBeam_Animate_0 9E42 ADD A,L
9E43 LD E,A
9E44 LD H,D
9E45 PUSH HL
9E46 CALL ScreenAddress Call ScreenAddress.
9E49 LD (IX+$02),E
9E4C LD A,$FF
9E4E XOR (HL)
9E4F LD (HL),A
9E50 POP HL
9E51 CALL AttributeAddress Call AttributeAddress.
9E54 LD A,(IX+$07)
9E57 LD (HL),A
9E58 LD A,(IX+$06)
9E5B SUB $08
9E5D LD (IX+$06),A
9E60 AND %11111000 Keep only bits 3-7.
9E62 JR NZ,LaserBeam_Animate_1
9E64 RES 2,(IX+$02)
LaserBeam_Animate_1 9E68 EXX
9E69 LD BC,$031C BC=031C.
9E6C LD E,$E0 E=E0.
9E6E EXX
Loop counter (to process pulses #2, #3, #4).
9E6F LD E,$03 E=03.
9E71 PUSH IX
9E73 POP BC
9E74 INC BC
9E75 INC BC
9E76 INC BC
LaserBeam_Animate_2 9E77 LD A,(BC)
9E78 XOR (IX+$02)
9E7B AND %11111000 Keep only bits 3-7.
9E7D JR NZ,LaserBeam_Animate_3
9E7F EXX
9E80 LD A,B
9E81 LD B,C
9E82 LD C,E
9E83 EXX
9E84 INC BC
9E85 DEC E
9E86 JR NZ,LaserBeam_Animate_2
9E88 LD (IX+$00),$00
9E8C RET Return.
LaserBeam_Animate_3 9E8D LD A,(BC)
9E8E BIT 2,A
9E90 JR NZ,LaserBeam_Animate_4
9E92 DEC (IX+$06)
9E95 LD A,(IX+$06)
9E98 AND %00000111 Keep only bits 0-2.
9E9A RET NZ
9E9B LD A,($5E40) A=5E40.
9E9E AND %00000011 Keep only bits 0-1.
9EA0 OR %00000100 Set bit 2.
9EA2 OR (IX+$06)
9EA5 LD (IX+$06),A
9EA8 LD A,(BC)
9EA9 OR %00000100 Set bit 2.
9EAB LD (BC),A
9EAC RET Return.
LaserBeam_Animate_4 9EAD LD A,(BC)
9EAE LD L,A
9EAF LD A,$08
9EB1 BIT 0,L
9EB3 JR Z,LaserBeam_Animate_5
9EB5 NEG
LaserBeam_Animate_5 9EB7 ADD A,L
9EB8 LD (BC),A
9EB9 LD H,D
9EBA CALL ScreenAddress
9EBD EXX
9EBE LD A,B
9EBF LD B,C
9EC0 LD C,E
9EC1 EXX
9EC2 XOR (HL)
9EC3 LD (HL),A
9EC4 INC BC
9EC5 DEC E
9EC6 JP NZ,LaserBeam_Animate_2
9EC9 RET Return.
Prev: 9DC0 Up: Map Next: 9ECA