Prev: A805 Up: Map Next: A865
A808: Display ship background patterns
Used by the routines at stage_completed, initial_game_loop, explode and control_ship.
display_ship_background_patterns A808 PUSH HL
A809 PUSH DE
A80A PUSH BC
A80B PUSH IX
A80D PUSH IY
A80F LD IY,ship_background_data Buffer for generated structure
A813 LD (IY+$06),$18
A817 LD (IY+$04),$00 Patterns address LSB
A81B LD (IY+$05),$00 Patterns address MSB
A81F LD A,($7003) Ship's polar y
A822 CP $15
A824 JR NC,display_ship_background_patterns_0 Jump if >= 21
A826 LD A,($7004) Ship's polar x
A829 ADD A,$02 Polar x + 2
A82B RRCA Rotate right 3 times
A82C RRCA 00XXXXXX -> XXX00XXX
A82D RRCA
A82E AND $06 XXX00XXX -> 00000XX0 (quadrant)
A830 LD HL,adjust_ship_x_y_table Adjustment table
A833 RST $08 Add A to HL
A834 LD A,($700B) Ship's screen x
A837 ADD A,(HL) Add table value
A838 LD (IY+$00),A Store x
A83B INC HL Next table address
A83C LD A,($700A) Ship's screen y
A83F ADD A,(HL) Add table value
A840 LD (IY+$01),A Store y
A843 LD A,($7004) Ship's polar x
A846 ADD A,$02 Polar x + 2
A848 AND $3C Keep 4 most significant bits, i.e. 16 offsets 4 bytes apart
A84A LD L,A HL = A
A84B LD H,$00 ...
A84D ADD HL,HL x2
A84E ADD HL,HL x4
A84F ADD HL,HL x8, now 32 bytes apart
A850 LD DE,ship_patterns Table of ship background patterns (32 bytes per frame)
A853 ADD HL,DE Add to offset
A854 LD (IY+$04),L Save LSB
A857 LD (IY+$05),H Save MSB
display_ship_background_patterns_0 A85A CALL display_background_patterns Display background patterns
A85D POP IY
A85F POP IX
A861 POP BC
A862 POP DE
A863 POP HL
A864 RET
Prev: A805 Up: Map Next: A865