Routines |
Prev: B951 | Up: Map | Next: B9AC |
|
||||
DrawRoom | B952 | LD A,$B8 | Write B8 to Data_Platform_9. | |
B954 | LD ($AF88),A | |||
B957 | CALL Clear_PlayArea | Call Clear_PlayArea. | ||
Get the current room ID and double it. This is stored in DE as an offset.
|
||||
B95A | LD A,(IY+$0F) | E=(*IY+0F)*02. | ||
B95D | ADD A,A | |||
B95E | LD E,A | |||
B95F | LD D,$00 | D=00. | ||
B961 | LD HL,$CDB5 | HL=Table_RoomData+DE. | ||
B964 | ADD HL,DE | |||
Fetch the room data location from the lookup table.
|
||||
B965 | LD E,(HL) | E=*HL. | ||
B966 | INC HL | Increment HL by one. | ||
B967 | LD D,(HL) | D=*HL. | ||
B968 | EX DE,HL | Exchange the DE and HL registers. | ||
Fetch a room data pair and store it in DE. Note, this is not a memory address.
|
||||
DrawRoom_Loop | B969 | LD D,(HL) | D=*HL. | |
B96A | INC HL | Increment HL by one. | ||
B96B | LD E,(HL) | E=*HL. | ||
B96C | INC HL | Increment HL by one. | ||
Drop bit 7 of D and test for the control characters.
|
||||
B96D | LD A,D | A=D. | ||
B96E | AND %01111111 | Keep only bits 0-6. | ||
Are we done?
|
||||
B970 | CP $7F | If the result is 7F jump to DrawRoom_Finish. | ||
B972 | JR Z,DrawRoom_Finish | |||
Some parts of rooms are dynamic (depending on if a task is completed or not), check if this should be actioned.
|
||||
B974 | CP $7E | If the result is not 7E jump to DrawRoom_ProcessData. | ||
B976 | JR NZ,DrawRoom_ProcessData | |||
Fetch the task ID.
|
||||
B978 | LD A,E | A=E. | ||
B979 | CALL Handler_TaskCompleted | Call Handler_TaskCompleted. | ||
B97C | JR NZ,DrawRoom_Loop | If the task is not complete, jump to DrawRoom_Loop. | ||
Move onto the next room data pair.
|
||||
B97E | INC HL | Increment HL by two. | ||
B97F | INC HL | |||
B980 | JR DrawRoom_Loop | Jump to DrawRoom_Loop. | ||
Pull out the screen co-ordinates and graphics address.
|
||||
DrawRoom_ProcessData | B982 | PUSH HL | Stash the room data pointer held by HL on the stack. | |
B983 | LD B,A | B=A. | ||
Grab the second byte from the room data pair, this contains both the x and y cursor position commands.
Y is essentially C=bits 3-7 of the second byte of the room data, shifted to bits 0-4. This is assigned to E at B995 below.
|
||||
B984 | LD A,E | A=E. | ||
B985 | AND %11111000 | Keep only bits 3-7. | ||
B987 | RRA | Rotate A right three times. | ||
B988 | RRA | |||
B989 | RRA | |||
B98A | LD C,A | C=A. | ||
Todo.
|
||||
B98B | RL D | Rotate D left once. | ||
B98D | RL E | Rotate E left once. | ||
B98F | LD A,E | A=E. | ||
B990 | AND %00001111 | Keep only bits 0-3. | ||
B992 | ADD A,$05 | D=A+05. | ||
B994 | LD D,A | |||
B995 | LD E,C | E=C. | ||
B996 | LD L,B | L=B. | ||
B997 | LD H,$00 | H=00. | ||
B999 | ADD HL,HL | HL*=02. | ||
B99A | LD BC,$BD86 | HL+=Table_GraphicData. | ||
B99D | ADD HL,BC | |||
Fetch the graphics control data from the lookup table.
|
||||
B99E | LD A,(HL) | A=*HL. | ||
B99F | INC HL | Increment HL by one. | ||
B9A0 | LD H,(HL) | H=*HL. | ||
B9A1 | LD L,A | L=A. | ||
B9A2 | CALL Controller_Tile | Call Controller_Tile. | ||
B9A5 | POP HL | Restore the room data pointer held by HL from the stack. | ||
B9A6 | JR DrawRoom_Loop | Jump to DrawRoom_Loop. | ||
Finish by blitting the shadow buffer to the screen and return to the calling routine.
|
||||
DrawRoom_Finish | B9A8 | CALL $B9AC | Call B9AC. | |
B9AB | RET | Return. |
Prev: B951 | Up: Map | Next: B9AC |