Prev: 45438 Up: Map Next: 45791
45457: 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 45457 LD A,255 Write 255 to the room graphics parameter and write 255 to the room display parameter.
45459 LD (41013),A
45462 LD (41012),A
45465 LD HL,45421 Call ClearBuffer to clear buffer.
45468 LD B,17
45470 CALL ClearBuffer
45473 CALL ProcessDisplayPointer Go to InitialiseDisplayBuffer_Next if a room record matches.
45476 JR NZ,InitialiseDisplayBuffer_Next
45478 LD HL,47180 Leave the object-table handler at 47180.
45481 XOR A Clear A.
45482 RET Return.
InitialiseDisplayBuffer_Next 45483 LD A,1 Use the object runtime table (33369).
45485 PUSH IX
45487 POP HL
45488 LD DE,33369
45491 SBC HL,DE Jump ahead to InitialiseDisplayBuffer_RecordSavedCharacter if the two pointers meet.
45493 JR Z,InitialiseDisplayBuffer_RecordSavedCharacter
45495 LD DE,8 Take a length of 8 entries.
InitialiseDisplayBuffer_Loop 45498 INC A Count one more record and go back to InitialiseDisplayBuffer_Loop until the pointer reaches the base.
45499 SBC HL,DE
45501 JR NZ,InitialiseDisplayBuffer_Loop
InitialiseDisplayBuffer_RecordSavedCharacter 45503 LD (41011),A Store this record count as the saved character and keep the object pointer at 45452+2.
45506 LD (45454),IX
45510 CP 46 Go to InitialiseDisplayBuffer_CheckDisplayFlag if it is not 46.
45512 JR NZ,InitialiseDisplayBuffer_CheckDisplayFlag
45514 LD HL,45421 Test bit 0 of the display flag at DisplayFlag and take 40942+20.
45517 BIT 0,(HL)
45519 LD HL,40962
45522 LD DE,45426 Point DE at the display data pointer at DisplayDataPointer and take 6 bytes. Skip the swap when bit 0 of the display flag is clear.
45525 LD BC,6
45528 JR Z,InitialiseDisplayBuffer_CopyTheseBytes
45530 EX DE,HL Swap the two pointers.
InitialiseDisplayBuffer_CopyTheseBytes 45531 LDIR Copy these bytes across.
InitialiseDisplayBuffer_CheckDisplayFlag 45533 CALL CheckDisplayBitsThreeAndSeven Call CheckDisplayBitsThreeAndSeven to test bits 3 and 7 of the object attribute, then call CheckDisplayBitsTwoAndSix to test bits 2 and 6.
45536 CALL CheckDisplayBitsTwoAndSix
45539 LD A,(40988) Jump to InitialiseDisplayBuffer_RecordObjectTable if the display flag at 40988 is set.
45542 AND A
45543 JR NZ,InitialiseDisplayBuffer_RecordObjectTable
45545 LD A,(45980) Copy the display flag at 45980 into 40988 and call ReportEmptyDisplayStep to report that this display step found nothing.
45548 LD (40988),A
45551 CALL ReportEmptyDisplayStep
InitialiseDisplayBuffer_RecordObjectTable 45554 LD A,(40990) Keep bit 4 of the display flag at 40990 in the saved flag at ObjectTablePointer+18.
45557 AND 16
45559 LD (45456),A
45562 JR Z,InitialiseDisplayBuffer_ClearParser Go to InitialiseDisplayBuffer_ClearParser if bit 4 of the saved flag is clear.
45564 XOR A Clear the display flag at 40988.
45565 LD (40988),A
InitialiseDisplayBuffer_ClearParser 45568 XOR A Clear the parser flag at 40971.
45569 LD (40971),A
A bit from 12 is set in the object attribute value?
45572 LD A,(40989) Go to InitialiseDisplayBuffer_ReadsObjectAttribute if bit 2 or bit 3 of the object attribute is set.
45575 AND 12
45577 JR NZ,InitialiseDisplayBuffer_ReadsObjectAttribute
InitialiseDisplayBuffer_BytesDiffer 45579 CALL ProcessObjectDisplayLogic Return if drawing the object did not match.
45582 RET NZ
45583 LD HL,47203 Leave the object-display handler at 47203.
45586 RET Return.
Reads the object attribute, and refreshes the room when the display flag is clear.
InitialiseDisplayBuffer_ReadsObjectAttribute 45587 CALL ReadObjectAttribute Call ReadObjectAttribute to read the object attribute, and go to InitialiseDisplayBuffer_ReadsDisplayFlag if it returns non-zero.
45590 JR NZ,InitialiseDisplayBuffer_ReadsDisplayFlag
45592 LD A,(40988) Jump to InitialiseDisplayBuffer_TestFlagDisplay if the display flag at 40988 is set.
45595 AND A
45596 JR NZ,InitialiseDisplayBuffer_TestFlagDisplay
45598 CALL ReadDisplaySetupFlag Jump ahead to InitialiseDisplayBuffer_SavedCharacterCheck if the pass count at 45424 is zero.
45601 AND A
45602 JR Z,InitialiseDisplayBuffer_SavedCharacterCheck
InitialiseDisplayBuffer_TestFlagDisplay 45604 CALL FindFirstNoun Go to InitialiseDisplayBuffer_RecordRoomDisplay if FindFirstNoun returns zero.
45607 JR Z,InitialiseDisplayBuffer_RecordRoomDisplay
45609 CALL ProcessObjectDisplayLogic Jump back to InitialiseDisplayBuffer_TestFlagDisplay while the object has nothing to display.
45612 JR Z,InitialiseDisplayBuffer_TestFlagDisplay
45614 LD A,(41012) Save the room display parameter at 45444.
45617 LD (45444),A
45620 LD HL,45424 Point HL at the pass count at 45424.
45623 INC (HL) Count one more pass at 45424, and jump to InitialiseDisplayBuffer_RecordRoomDisplay if the saved flag is set.
45624 LD A,(45456)
45627 AND A
45628 JR NZ,InitialiseDisplayBuffer_RecordRoomDisplay
45630 LD A,(40988) Jump to InitialiseDisplayBuffer_TestFlagDisplay if the display flag at 40988 is zero.
45633 AND A
45634 JR Z,InitialiseDisplayBuffer_TestFlagDisplay
InitialiseDisplayBuffer_RecordRoomDisplay 45636 LD A,(45444) Record the room display parameter.
45639 LD (41012),A
45642 LD A,(45424) Jump to InitialiseDisplayBuffer_SavedCharacterCheck if the pass count at 45424 is zero.
45645 AND A
45646 JR Z,InitialiseDisplayBuffer_SavedCharacterCheck
45648 CP 1 Go to InitialiseDisplayBuffer_BytesDiffer if it is 1.
45650 JR Z,InitialiseDisplayBuffer_BytesDiffer
45652 LD HL,46562 Leave the display handler at 46562.
45655 XOR A Clear A.
45656 RET Return.
Carry on only when the saved character is a full stop and the display flags are clear.
InitialiseDisplayBuffer_SavedCharacterCheck 45657 LD A,(41011) Jump to InitialiseDisplayBuffer_LeaveDisplayHandler if the saved character is not 46.
45660 CP 46
45662 JR NZ,InitialiseDisplayBuffer_LeaveDisplayHandler
45664 LD A,(40988) Jump to InitialiseDisplayBuffer_LeaveDisplayHandler if the display is set.
45667 AND A
45668 JR NZ,InitialiseDisplayBuffer_LeaveDisplayHandler
45670 LD HL,45421 Go to InitialiseDisplayBuffer_LeaveDisplayHandler if bit 0 of this byte is set.
45673 BIT 0,(HL)
45675 JR NZ,InitialiseDisplayBuffer_LeaveDisplayHandler
45677 LD HL,0 Clear the display data pointer at DisplayDataPointer.
45680 LD (45426),HL
45683 LD (45428),HL Clear the saved display pointer at DisplayModeFlag+1.
45686 LD (45430),HL Clear the saved display pointer at 45430 and jump back to InitialiseDisplayBuffer_ReadsObjectAttribute for the next object attribute.
45689 JR InitialiseDisplayBuffer_ReadsObjectAttribute
Leave the display handler at 46687 and return zero.
InitialiseDisplayBuffer_LeaveDisplayHandler 45691 LD HL,46687 Leave the display handler at 46687.
45694 XOR A Clear A.
45695 RET Return.
Reads the display flag, and follows the secondary flag when the first one is clear.
InitialiseDisplayBuffer_ReadsDisplayFlag 45696 LD A,(40988) Jump to InitialiseDisplayBuffer_TestFlagDisplayAgain if the display is set.
45699 AND A
45700 JR NZ,InitialiseDisplayBuffer_TestFlagDisplayAgain
45702 CALL ReadDisplaySetupFlag Jump back to InitialiseDisplayBuffer_SavedCharacterCheck if the display is zero.
45705 AND A
45706 JR Z,InitialiseDisplayBuffer_SavedCharacterCheck
45708 CALL ReadSecondaryDisplayFlag Go to ReadRoomGraphicsParameter_LeaveRoomGraphics if ReadSecondaryDisplayFlag returns zero.
45711 AND A
45712 JR Z,ReadRoomGraphicsParameter_LeaveRoomGraphics
InitialiseDisplayBuffer_TestFlagDisplayAgain 45714 CALL FindFirstNoun Go to InitialiseDisplayBuffer_RecordRoomDisplayAgain if FindFirstNoun returns zero.
45717 JR Z,InitialiseDisplayBuffer_RecordRoomDisplayAgain
45719 CALL ReadRoomGraphicsParameter Call ReadRoomGraphicsParameter to read the room graphics parameter.
45722 LD A,(45425) Jump to InitialiseDisplayBuffer_TestFlagDisplayAgain if the pass count at 45425 is not 1.
45725 CP 1
45727 JR NZ,InitialiseDisplayBuffer_TestFlagDisplayAgain
45729 LD A,(41012) Save the room display parameter at 45444.
45732 LD (45444),A
45735 LD HL,45424 Point HL at the pass count at 45424.
45738 INC (HL) Count one more pass at 45424, and jump to InitialiseDisplayBuffer_RecordRoomDisplayAgain if the saved flag is set.
45739 LD A,(45456)
45742 AND A
45743 JR NZ,InitialiseDisplayBuffer_RecordRoomDisplayAgain
45745 LD A,(40988) Jump to InitialiseDisplayBuffer_TestFlagDisplayAgain if the display is zero.
45748 AND A
45749 JR Z,InitialiseDisplayBuffer_TestFlagDisplayAgain
InitialiseDisplayBuffer_RecordRoomDisplayAgain 45751 LD A,(45444) Record the room display parameter.
45754 LD (41012),A
45757 LD A,(45424) Jump to InitialiseDisplayBuffer_SavedCharacterCheck if the pass count at 45424 is zero.
45760 AND A
45761 JR Z,InitialiseDisplayBuffer_SavedCharacterCheck
45763 CP 1 Go to InitialiseDisplayBuffer_LeaveDisplayHandlerAgain if it is not 1.
45765 JR NZ,InitialiseDisplayBuffer_LeaveDisplayHandlerAgain
45767 CALL ReadRoomGraphicsParameter Call ReadRoomGraphicsParameter to read the room graphics parameter.
45770 LD A,(45425) Jump to ReadRoomGraphicsParameter_LeaveRoomGraphics if the pass count at 45425 is zero.
45773 AND A
45774 JR Z,ReadRoomGraphicsParameter_LeaveRoomGraphics
45776 CP 1 Go to InitialiseDisplayBuffer_BytesDiffer if it is 1.
45778 JP Z,InitialiseDisplayBuffer_BytesDiffer
45781 LD HL,46547 Leave the display handler at 46547.
45784 XOR A Clear A.
45785 RET Return.
Leave the display handler at 46562 and return zero.
InitialiseDisplayBuffer_LeaveDisplayHandlerAgain 45786 LD HL,46562 Leave the display handler at 46562.
45789 XOR A Clear A.
45790 RET Return.
Prev: 45438 Up: Map Next: 45791