Prev: 8F9F Up: Map Next: 90A3
9052: Update one side of a moving platform
Used by the routine at 8F31.
The routine is called at 9052 for the left side, and 9058 for the right side
9052 LD IY,$C622 Point to the left hand buffer and jump forward.
9056 JR $905C
9058 LD IY,$C626 Point to the right hand buffer.
This entry point is used by the routine at 8F31.
905C LD A,(IY+$00) Are the x and y co-ordinates both zero?
905F OR (IY+$01)
9062 RET Z If so, there are no moving platforms here, so return.
9063 LD H,$00 Put the y co-ordinate in HL.
9065 LD L,(IY+$01)
9068 ADD HL,HL Double it to get a word entry in the screen offset buffer.
9069 LD DE,$EA60 Add the base pointer to the screen offsets (EA60).
906C ADD HL,DE
906D LD A,(HL) Put the screen address in HL.
906E INC HL
906F LD H,(HL)
9070 LD L,A
9071 LD A,(IY+$00) Get the x co-ordinate.
9074 AND $F8 Extract the top 5 bits as a value.
9076 RRCA
9077 RRCA
9078 RRCA
9079 LD E,A Put this in DE.
907A LD D,$00
907C ADD HL,DE Add to get the actual screen address in HL.
907D PUSH HL Remember this.
907E LD A,(IY+$00) Get the bottom 3 bits of the x co-ordinate
9081 AND $07
9083 CALL $909B Shift it and store the result in C.
9086 LD C,A
9087 LD B,$03 3 rows to draw.
9089 POP DE Restore screen address.
908A LD HL,$9260 Add the offset to get a position in the screen buffer at D260.
908D ADD HL,DE
908E CALL $90A3 Update a byte in the screen buffer.
9091 EX DE,HL Swap HL to the actual screen address.
9092 CALL $90A3 Update again; this ensures both the screen and the copy are in sync.
9095 EX DE,HL Put HL and DE the right way round again.
9096 INC H Move to the next row on screen.
9097 INC D
9098 DJNZ $908E Loop round until all the rows are drawn.
909A RET
Prev: 8F9F Up: Map Next: 90A3