![]() |
Routines |
| Prev: 7087 | Up: Map | Next: 7120 |
|
||||||||
| 70D2 | LD L,$6E | Bytes 0x6D and 0x6E of the character's buffer hold the address of the next character in the submessage | ||||||
| 70D4 | LD A,(HL) | |||||||
| 70D5 | AND A | Are we in a submessage at the moment? | ||||||
| 70D6 | JR Z,$70E8 | Jump if not | ||||||
| 70D8 | LD D,A | DE=address of the next character in the submessage | ||||||
| 70D9 | DEC L | |||||||
| 70DA | LD E,(HL) | |||||||
| 70DB | LD A,(DE) | Pick up this character in A | ||||||
| 70DC | AND A | Has the submessage finished? | ||||||
| 70DD | JR Z,$70E5 | Jump if so | ||||||
| 70DF | NOP | |||||||
| 70E0 | INC DE | Move to the next character in the submessage, and store its address in bytes 0x6D and 0x6E of the character's buffer | ||||||
| 70E1 | LD (HL),E | |||||||
| 70E2 | INC L | |||||||
| 70E3 | LD (HL),D | |||||||
| 70E4 | RET | |||||||
|
The submessage has finished.
|
||||||||
| 70E5 | LD (HL),A | Zero out bytes 0x6D and 0x6E of the character's buffer to indicate that the submessage is finished | ||||||
| 70E6 | INC L | |||||||
| 70E7 | LD (HL),A | |||||||
|
We are dealing with the main message.
|
||||||||
| 70E8 | LD L,$6C | DE=address of the next character in the main message (collected from bytes 0x6B and 0x6C of the character's buffer) | ||||||
| 70EA | LD D,(HL) | |||||||
| 70EB | DEC L | |||||||
| 70EC | LD E,(HL) | |||||||
| 70ED | LD A,(DE) | Pick up the next character of the message | ||||||
| 70EE | INC DE | Move to the next character in the main message, and store its address in bytes 0x6B and 0x6C of the character's buffer | ||||||
| 70EF | LD (HL),E | |||||||
| 70F0 | INC L | |||||||
| 70F1 | LD (HL),D | |||||||
| 70F2 | INC L | L=0x6D | ||||||
| 70F3 | BIT 7,A | Is the ASCII code of the next character < 0x80? | ||||||
| 70F5 | JR Z,$710A | Jump if so | ||||||
|
The ASCII code of the next character is >= 0x80, which refers to an entry in one of the symbol/element, capital city/country and date/battle question-and-answer pairs.
|
||||||||
| 70F7 | AND $7F | Set DE to DF00+0x0C*(A-0x80) | ||||||
| 70F9 | LD E,A | |||||||
| 70FA | EX DE,HL | |||||||
| 70FB | ADD A,A | |||||||
| 70FC | ADD A,L | |||||||
| 70FD | LD L,A | |||||||
| 70FE | LD H,$38 | |||||||
| 7100 | JR NC,$7103 | |||||||
| 7102 | INC H | |||||||
| 7103 | ADD HL,HL | |||||||
| 7104 | ADD HL,HL | |||||||
| 7105 | DEC H | |||||||
| 7106 | EX DE,HL | |||||||
| 7107 | LD A,(DE) | Pick up the first character of this submessage in A and store the next address in bytes 0x6D and 0x6E of the character's buffer | ||||||
| 7108 | JR $70E0 | |||||||
|
The ASCII code of the next character in the message is < 0x80.
|
||||||||
| 710A | CP $20 | Return if the next character is a normal, printable character (ASCII code >= 0x20) | ||||||
| 710C | RET NC | |||||||
| 710D | CP $10 | Return if the ASCII code of the next character in the message is < 0x10 | ||||||
| 710F | RET C | |||||||
|
The ASCII code of the next character in the message is 0x10-0x18. We have a submessage to deal with, which will be one of the following:
|
||||||||
| 7110 | SUB $10 | Point DE at the appropriate submessage from the table above | ||||||
| 7112 | LD E,A | |||||||
| 7113 | ADD A,A | |||||||
| 7114 | ADD A,A | |||||||
| 7115 | ADD A,A | |||||||
| 7116 | SUB E | |||||||
| 7117 | ADD A,A | |||||||
| 7118 | ADD A,$80 | |||||||
| 711A | LD E,A | |||||||
| 711B | LD D,$D9 | |||||||
| 711D | LD A,(DE) | Pick up the first character of the submessage in A | ||||||
| 711E | JR $70E0 | Store the address of the next character in the submessage | ||||||
| Prev: 7087 | Up: Map | Next: 7120 |