| quill | Routines |
| Prev: 26652 | Up: Map | Next: 26798 |
|
Used by the routines at START_TURN and NOUN_CHECK.
Lookup word in vocabulary
|
||||||||||||
| LOOKUP_WORD | 26726 | LD A,223 | A=space (stored XOR 255) | |||||||||
| 26728 | LD DE,27351 | Word entry buffer | ||||||||||
| 26731 | LD B,4 | Word buffer has 4 characters | ||||||||||
| LOOKUP_WORD_0 | 26733 | DEC DE | ||||||||||
| 26734 | LD (DE),A | Fill buffer with spaces | ||||||||||
| 26735 | DJNZ LOOKUP_WORD_0 | Loop until buffer is full | ||||||||||
| 26737 | LD B,4 | B=each word has 4 characters | ||||||||||
| LOOKUP_WORD_1 | 26739 | LD A,(HL) | Read next character | |||||||||
| 26740 | CP 32 | Is it a space? | ||||||||||
| 26742 | JR Z,LOOKUP_WORD_2 | If so, skip forward to process word | ||||||||||
| 26744 | CP 13 | Is it a newline? | ||||||||||
| 26746 | JR Z,LOOKUP_WORD_2 | If so, skip forward to process word | ||||||||||
| 26748 | CPL | Encode character by XORing with 255 | ||||||||||
| 26749 | LD (DE),A | Store character in buffer | ||||||||||
| 26750 | INC DE | Move buffer pointer up by one | ||||||||||
| 26751 | INC HL | Move entered characters pointer up by one | ||||||||||
| 26752 | DJNZ LOOKUP_WORD_1 | Loop to read next character until we have 4 | ||||||||||
| LOOKUP_WORD_2 | 26754 | LD BC,(27557) | BC=address of vocabulary table | |||||||||
| 26758 | PUSH HL | |||||||||||
|
This entry point is used by the routine at LOOKUP_WORD_7.
|
||||||||||||
| LOOKUP_WORD_3 | 26759 | LD HL,27347 | HL=start of word entered buffer | |||||||||
| 26762 | RES 5,(IY+8) | Reset 'non-matching character' flag | ||||||||||
| 26766 | LD D,4 | 4 characters in each word to look at | ||||||||||
|
This entry point is used by the routine at LOOKUP_WORD_5.
|
||||||||||||
| LOOKUP_WORD_4 | 26768 | LD A,(BC) | Read character from vocab table | |||||||||
| 26769 | OR A | Have we reached the end of the vocab table? | ||||||||||
|
This entry point is used by the routine at ACTION_ROUTINES.
|
||||||||||||
| 26770 | JR NZ,LOOKUP_WORD_5 | If not, process vocab entry | ||||||||||
| 26772 | POP HL | |||||||||||
| 26773 | RET | If we have, then return with A=0 | ||||||||||
| LOOKUP_WORD_5 | 26774 | CP (HL) | Does character in word match character entered? | |||||||||
| 26775 | JR Z,LOOKUP_WORD_6 | If so, skip setting flag | ||||||||||
| 26777 | SET 5,(IY+8) | Set flag to indicate that character does not match | ||||||||||
| LOOKUP_WORD_6 | 26781 | INC BC | Onto next character in vocab table | |||||||||
| 26782 | INC HL | Onto next character in word entered buffer | ||||||||||
| 26783 | DEC D | Decrement character counter | ||||||||||
| 26784 | JR NZ,LOOKUP_WORD_4 | If not yet zero, check next character | ||||||||||
| 26786 | BIT 5,(IY+8) | Do all characters match? | ||||||||||
| 26790 | JR NZ,LOOKUP_WORD_7 | If not, try next word | ||||||||||
| 26792 | LD A,(BC) | If so, set A to the ID of the word found | ||||||||||
| 26793 | POP HL | |||||||||||
| 26794 | RET | Return with A containing ID of matching word | ||||||||||
| LOOKUP_WORD_7 | 26795 | INC BC | Move on to next vocab word | |||||||||
| 26796 | JR LOOKUP_WORD_3 | Try matching this word against entered | ||||||||||
| Prev: 26652 | Up: Map | Next: 26798 |