Prev: 7CFC Up: Map Next: 7D54
7D17: Inglish: Find The Second Noun
Used by the routine at Inglish_ResolveTheFirstNoun.
Finds the second noun the same way, storing it as the second object. When the second-noun flag at B6FF is 01 it uses the place-by-exit test at ExitsFindTheExitToANamedPlace; otherwise it uses the object test at ConditionSamePlaceAsThePlayer. The record found is kept at 7950, and bit 0 of B71D is copied to B70F.
Inglish_FindTheSecondNoun 7D17 XOR A Clear *B70F.
7D18 LD ($B70F),A
7D1B PUSH IY Use the other saved object pointer as the record being walked.
7D1D LD IX,($7950)
7D21 LD A,($B6FF) Read *B6FF.
7D24 DEC A Jump to Inglish_FindTheSecondNoun_PointAtTheOtherNounTest if the second-noun flag is 01.
7D25 JR Z,Inglish_FindTheSecondNoun_PointAtTheOtherNounTest
7D27 LD IY,$9DD9 Point IY at ConditionSamePlaceAsThePlayer to use as the noun test.
7D2B LD A,($B71E) Read *B71E.
7D2E AND $03 Store the low two bits of the clause being built in *B710.
7D30 LD ($B710),A
7D33 CALL Inglish_RunTheSecondNounTest Call Inglish_RunTheSecondNounTest to run the second noun test.
7D36 CP $FF Compare the result of the noun test with FF.
Inglish_FindTheSecondNoun_SaveTheSecondRecord 7D38 LD ($7950),IX Remember this record in the other saved object pointer.
7D3C POP IY Restore the parser pointer from the stack and read *B71D.
7D3E PUSH AF
7D3F LD A,($B71D)
7D42 AND $01 Keep only bit 0.
7D44 LD ($B70F),A Store the result at B70F.
7D47 POP AF Restore AF from the stack.
7D48 RET Return.
Inglish_FindTheSecondNoun_PointAtTheOtherNounTest 7D49 LD IY,$9EA0 Point IY at ExitsFindTheExitToANamedPlace to use as the noun test.
7D4D CALL Inglish_RunTheSecondNounTest Call Inglish_RunTheSecondNounTest to run the second noun test.
7D50 CP $FF Compare the result of the noun test with FF.
7D52 JR Inglish_FindTheSecondNoun_SaveTheSecondRecord Jump back to Inglish_FindTheSecondNoun_SaveTheSecondRecord to save the second object record.
View the equivalent code in;
Prev: 7CFC Up: Map Next: 7D54