Prev: B17E Up: Map Next: B2DF
B191: Initialise Display Buffer
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