![]() |
Routines |
| Prev: B17E | Up: Map | Next: B2DF |
|
Used by the routines at ProcessScriptDisplay and ParseInput.
Clears the room parameters and the display buffer, then looks for a room record.
|
||||
| InitialiseDisplayBuffer | B191 | LD A,$FF | Write FF to the room graphics parameter and write FF to the room display parameter. | |
| B193 | LD ($A035),A | |||
| B196 | LD ($A034),A | |||
| B199 | LD HL,$B16D | Call ClearBuffer to clear buffer. | ||
| B19C | LD B,$11 | |||
| B19E | CALL ClearBuffer | |||
| B1A1 | CALL ProcessDisplayPointer | Go to InitialiseDisplayBuffer_Next if a room record matches. | ||
| B1A4 | JR NZ,InitialiseDisplayBuffer_Next | |||
| B1A6 | LD HL,$B84C | Leave the object-table handler at B84C. | ||
| B1A9 | XOR A | Clear A. | ||
| B1AA | RET | Return. | ||
| InitialiseDisplayBuffer_Next | B1AB | LD A,$01 | Use the object runtime table (8259). | |
| B1AD | PUSH IX | |||
| B1AF | POP HL | |||
| B1B0 | LD DE,$8259 | |||
| B1B3 | SBC HL,DE | Jump ahead to InitialiseDisplayBuffer_RecordSavedCharacter if the two pointers meet. | ||
| B1B5 | JR Z,InitialiseDisplayBuffer_RecordSavedCharacter | |||
| B1B7 | LD DE,$0008 | Take a length of 08 entries. | ||
| InitialiseDisplayBuffer_Loop | B1BA | INC A | Count one more record and go back to InitialiseDisplayBuffer_Loop until the pointer reaches the base. | |
| B1BB | SBC HL,DE | |||
| B1BD | JR NZ,InitialiseDisplayBuffer_Loop | |||
| InitialiseDisplayBuffer_RecordSavedCharacter | B1BF | LD ($A033),A | Store this record count as the saved character and keep the object pointer at B18C+02. | |
| B1C2 | LD ($B18E),IX | |||
| B1C6 | CP $2E | Go to InitialiseDisplayBuffer_CheckDisplayFlag if it is not 2E. | ||
| B1C8 | JR NZ,InitialiseDisplayBuffer_CheckDisplayFlag | |||
| B1CA | LD HL,$B16D | Test bit 0 of the display flag at DisplayFlag and take 9FEE+14. | ||
| B1CD | BIT 0,(HL) | |||
| B1CF | LD HL,$A002 | |||
| B1D2 | LD DE,$B172 | Point DE at the display data pointer at DisplayDataPointer and take 06 bytes. Skip the swap when bit 0 of the display flag is clear. | ||
| B1D5 | LD BC,$0006 | |||
| B1D8 | JR Z,InitialiseDisplayBuffer_CopyTheseBytes | |||
| B1DA | EX DE,HL | Swap the two pointers. | ||
| InitialiseDisplayBuffer_CopyTheseBytes | B1DB | LDIR | Copy these bytes across. | |
| InitialiseDisplayBuffer_CheckDisplayFlag | B1DD | CALL CheckDisplayBitsThreeAndSeven | Call CheckDisplayBitsThreeAndSeven to test bits 3 and 7 of the object attribute, then call CheckDisplayBitsTwoAndSix to test bits 2 and 6. | |
| B1E0 | CALL CheckDisplayBitsTwoAndSix | |||
| B1E3 | LD A,($A01C) | Jump to InitialiseDisplayBuffer_RecordObjectTable if the display flag at A01C is set. | ||
| B1E6 | AND A | |||
| B1E7 | JR NZ,InitialiseDisplayBuffer_RecordObjectTable | |||
| B1E9 | LD A,($B39C) | Copy the display flag at B39C into A01C and call ReportEmptyDisplayStep to report that this display step found nothing. | ||
| B1EC | LD ($A01C),A | |||
| B1EF | CALL ReportEmptyDisplayStep | |||
| InitialiseDisplayBuffer_RecordObjectTable | B1F2 | LD A,($A01E) | Keep bit 4 of the display flag at A01E in the saved flag at ObjectTablePointer+12. | |
| B1F5 | AND $10 | |||
| B1F7 | LD ($B190),A | |||
| B1FA | JR Z,InitialiseDisplayBuffer_ClearParser | Go to InitialiseDisplayBuffer_ClearParser if bit 4 of the saved flag is clear. | ||
| B1FC | XOR A | Clear the display flag at A01C. | ||
| B1FD | LD ($A01C),A | |||
| InitialiseDisplayBuffer_ClearParser | B200 | XOR A | Clear the parser flag at A00B. | |
| B201 | LD ($A00B),A | |||
|
A bit from 0C is set in the object attribute value?
|
||||
| B204 | LD A,($A01D) | Go to InitialiseDisplayBuffer_ReadsObjectAttribute if bit 2 or bit 3 of the object attribute is set. | ||
| B207 | AND $0C | |||
| B209 | JR NZ,InitialiseDisplayBuffer_ReadsObjectAttribute | |||
| InitialiseDisplayBuffer_BytesDiffer | B20B | CALL ProcessObjectDisplayLogic | Return if drawing the object did not match. | |
| B20E | RET NZ | |||
| B20F | LD HL,$B863 | Leave the object-display handler at B863. | ||
| B212 | RET | Return. | ||
|
Reads the object attribute, and refreshes the room when the display flag is clear.
|
||||
| InitialiseDisplayBuffer_ReadsObjectAttribute | B213 | CALL ReadObjectAttribute | Call ReadObjectAttribute to read the object attribute, and go to InitialiseDisplayBuffer_ReadsDisplayFlag if it returns non-zero. | |
| B216 | JR NZ,InitialiseDisplayBuffer_ReadsDisplayFlag | |||
| B218 | LD A,($A01C) | Jump to InitialiseDisplayBuffer_TestFlagDisplay if the display flag at A01C is set. | ||
| B21B | AND A | |||
| B21C | JR NZ,InitialiseDisplayBuffer_TestFlagDisplay | |||
| B21E | CALL ReadDisplaySetupFlag | Jump ahead to InitialiseDisplayBuffer_SavedCharacterCheck if the pass count at B170 is zero. | ||
| B221 | AND A | |||
| B222 | JR Z,InitialiseDisplayBuffer_SavedCharacterCheck | |||
| InitialiseDisplayBuffer_TestFlagDisplay | B224 | CALL FindFirstNoun | Go to InitialiseDisplayBuffer_RecordRoomDisplay if FindFirstNoun returns zero. | |
| B227 | JR Z,InitialiseDisplayBuffer_RecordRoomDisplay | |||
| B229 | CALL ProcessObjectDisplayLogic | Jump back to InitialiseDisplayBuffer_TestFlagDisplay while the object has nothing to display. | ||
| B22C | JR Z,InitialiseDisplayBuffer_TestFlagDisplay | |||
| B22E | LD A,($A034) | Save the room display parameter at B184. | ||
| B231 | LD ($B184),A | |||
| B234 | LD HL,$B170 | Point HL at the pass count at B170. | ||
| B237 | INC (HL) | Count one more pass at B170, and jump to InitialiseDisplayBuffer_RecordRoomDisplay if the saved flag is set. | ||
| B238 | LD A,($B190) | |||
| B23B | AND A | |||
| B23C | JR NZ,InitialiseDisplayBuffer_RecordRoomDisplay | |||
| B23E | LD A,($A01C) | Jump to InitialiseDisplayBuffer_TestFlagDisplay if the display flag at A01C is zero. | ||
| B241 | AND A | |||
| B242 | JR Z,InitialiseDisplayBuffer_TestFlagDisplay | |||
| InitialiseDisplayBuffer_RecordRoomDisplay | B244 | LD A,($B184) | Record the room display parameter. | |
| B247 | LD ($A034),A | |||
| B24A | LD A,($B170) | Jump to InitialiseDisplayBuffer_SavedCharacterCheck if the pass count at B170 is zero. | ||
| B24D | AND A | |||
| B24E | JR Z,InitialiseDisplayBuffer_SavedCharacterCheck | |||
| B250 | CP $01 | Go to InitialiseDisplayBuffer_BytesDiffer if it is 01. | ||
| B252 | JR Z,InitialiseDisplayBuffer_BytesDiffer | |||
| B254 | LD HL,$B5E2 | Leave the display handler at B5E2. | ||
| B257 | XOR A | Clear A. | ||
| B258 | RET | Return. | ||
|
Carry on only when the saved character is a full stop and the display flags are clear.
|
||||
| InitialiseDisplayBuffer_SavedCharacterCheck | B259 | LD A,($A033) | Jump to InitialiseDisplayBuffer_LeaveDisplayHandler if the saved character is not 2E. | |
| B25C | CP $2E | |||
| B25E | JR NZ,InitialiseDisplayBuffer_LeaveDisplayHandler | |||
| B260 | LD A,($A01C) | Jump to InitialiseDisplayBuffer_LeaveDisplayHandler if the display is set. | ||
| B263 | AND A | |||
| B264 | JR NZ,InitialiseDisplayBuffer_LeaveDisplayHandler | |||
| B266 | LD HL,$B16D | Go to InitialiseDisplayBuffer_LeaveDisplayHandler if bit 0 of this byte is set. | ||
| B269 | BIT 0,(HL) | |||
| B26B | JR NZ,InitialiseDisplayBuffer_LeaveDisplayHandler | |||
| B26D | LD HL,$0000 | Clear the display data pointer at DisplayDataPointer. | ||
| B270 | LD ($B172),HL | |||
| B273 | LD ($B174),HL | Clear the saved display pointer at DisplayModeFlag+01. | ||
| B276 | LD ($B176),HL | Clear the saved display pointer at B176 and jump back to InitialiseDisplayBuffer_ReadsObjectAttribute for the next object attribute. | ||
| B279 | JR InitialiseDisplayBuffer_ReadsObjectAttribute | |||
|
Leave the display handler at B65F and return zero.
|
||||
| InitialiseDisplayBuffer_LeaveDisplayHandler | B27B | LD HL,$B65F | Leave the display handler at B65F. | |
| B27E | XOR A | Clear A. | ||
| B27F | RET | Return. | ||
|
Reads the display flag, and follows the secondary flag when the first one is clear.
|
||||
| InitialiseDisplayBuffer_ReadsDisplayFlag | B280 | LD A,($A01C) | Jump to InitialiseDisplayBuffer_TestFlagDisplayAgain if the display is set. | |
| B283 | AND A | |||
| B284 | JR NZ,InitialiseDisplayBuffer_TestFlagDisplayAgain | |||
| B286 | CALL ReadDisplaySetupFlag | Jump back to InitialiseDisplayBuffer_SavedCharacterCheck if the display is zero. | ||
| B289 | AND A | |||
| B28A | JR Z,InitialiseDisplayBuffer_SavedCharacterCheck | |||
| B28C | CALL ReadSecondaryDisplayFlag | Go to ReadRoomGraphicsParameter_LeaveRoomGraphics if ReadSecondaryDisplayFlag returns zero. | ||
| B28F | AND A | |||
| B290 | JR Z,ReadRoomGraphicsParameter_LeaveRoomGraphics | |||
| InitialiseDisplayBuffer_TestFlagDisplayAgain | B292 | CALL FindFirstNoun | Go to InitialiseDisplayBuffer_RecordRoomDisplayAgain if FindFirstNoun returns zero. | |
| B295 | JR Z,InitialiseDisplayBuffer_RecordRoomDisplayAgain | |||
| B297 | CALL ReadRoomGraphicsParameter | Call ReadRoomGraphicsParameter to read the room graphics parameter. | ||
| B29A | LD A,($B171) | Jump to InitialiseDisplayBuffer_TestFlagDisplayAgain if the pass count at B171 is not 01. | ||
| B29D | CP $01 | |||
| B29F | JR NZ,InitialiseDisplayBuffer_TestFlagDisplayAgain | |||
| B2A1 | LD A,($A034) | Save the room display parameter at B184. | ||
| B2A4 | LD ($B184),A | |||
| B2A7 | LD HL,$B170 | Point HL at the pass count at B170. | ||
| B2AA | INC (HL) | Count one more pass at B170, and jump to InitialiseDisplayBuffer_RecordRoomDisplayAgain if the saved flag is set. | ||
| B2AB | LD A,($B190) | |||
| B2AE | AND A | |||
| B2AF | JR NZ,InitialiseDisplayBuffer_RecordRoomDisplayAgain | |||
| B2B1 | LD A,($A01C) | Jump to InitialiseDisplayBuffer_TestFlagDisplayAgain if the display is zero. | ||
| B2B4 | AND A | |||
| B2B5 | JR Z,InitialiseDisplayBuffer_TestFlagDisplayAgain | |||
| InitialiseDisplayBuffer_RecordRoomDisplayAgain | B2B7 | LD A,($B184) | Record the room display parameter. | |
| B2BA | LD ($A034),A | |||
| B2BD | LD A,($B170) | Jump to InitialiseDisplayBuffer_SavedCharacterCheck if the pass count at B170 is zero. | ||
| B2C0 | AND A | |||
| B2C1 | JR Z,InitialiseDisplayBuffer_SavedCharacterCheck | |||
| B2C3 | CP $01 | Go to InitialiseDisplayBuffer_LeaveDisplayHandlerAgain if it is not 01. | ||
| B2C5 | JR NZ,InitialiseDisplayBuffer_LeaveDisplayHandlerAgain | |||
| B2C7 | CALL ReadRoomGraphicsParameter | Call ReadRoomGraphicsParameter to read the room graphics parameter. | ||
| B2CA | LD A,($B171) | Jump to ReadRoomGraphicsParameter_LeaveRoomGraphics if the pass count at B171 is zero. | ||
| B2CD | AND A | |||
| B2CE | JR Z,ReadRoomGraphicsParameter_LeaveRoomGraphics | |||
| B2D0 | CP $01 | Go to InitialiseDisplayBuffer_BytesDiffer if it is 01. | ||
| B2D2 | JP Z,InitialiseDisplayBuffer_BytesDiffer | |||
| B2D5 | LD HL,$B5D3 | Leave the display handler at B5D3. | ||
| B2D8 | XOR A | Clear A. | ||
| B2D9 | RET | Return. | ||
|
Leave the display handler at B5E2 and return zero.
|
||||
| InitialiseDisplayBuffer_LeaveDisplayHandlerAgain | B2DA | LD HL,$B5E2 | Leave the display handler at B5E2. | |
| B2DD | XOR A | Clear A. | ||
| B2DE | RET | Return. | ||
| Prev: B17E | Up: Map | Next: B2DF |