Routines |
Prev: 66C0 | Up: Map | Next: 670A |
|
||||||||
66CE | LD L,$10 | Bytes 0x0F and 0x10 hold the address of the next character in the sub-submessage being written/spoken (if any) | ||||||
66D0 | LD A,(HL) | |||||||
66D1 | AND A | Are we working on a sub-submessage? | ||||||
66D2 | JR NZ,$66DC | Jump if so | ||||||
66D4 | LD L,$0E | Bytes 0x0D and 0x0E hold the address of the next character in the submessage being written/spoken (if any) | ||||||
66D6 | LD A,(HL) | |||||||
66D7 | AND A | Are we working on a submessage? | ||||||
66D8 | JR NZ,$66DC | Jump if so | ||||||
66DA | LD L,$0C | We're working on a top-level message | ||||||
66DC | LD D,(HL) | DE=address of the next character in the (sub)(sub)message | ||||||
66DD | DEC L | |||||||
66DE | LD E,(HL) | |||||||
66DF | LD A,(DE) | Pick up the character code in A | ||||||
66E0 | INC DE | Move the pointer to the next character and store the address for future reference | ||||||
66E1 | LD (HL),E | |||||||
66E2 | INC L | |||||||
66E3 | LD (HL),D | |||||||
66E4 | AND A | Has the end of the (sub)(sub)message been reached? | ||||||
66E5 | JR NZ,$66F0 | Jump if not | ||||||
We've reached the end of the (sub)(sub)message.
|
||||||||
66E7 | LD (HL),$00 | Signal: end of (sub)(sub)message | ||||||
66E9 | DEC L | L=0x0B (top-level message), 0x0D (submessage) or 0x0F (sub-submessage) | ||||||
66EA | BIT 2,L | Has the end of the top-level message been reached (L=0x0B)? | ||||||
66EC | RET Z | Return if so | ||||||
66ED | DEC L | Otherwise go up to the submessage or the top-level message and jump back to deal with it | ||||||
66EE | JR $66DC | |||||||
We haven't reached the end of the (sub)(sub)message yet. Determine whether the next code is a regular character code or a pointer to another message.
|
||||||||
66F0 | SUB $20 | |||||||
66F2 | CP $60 | |||||||
66F4 | JR NC,$66F9 | Jump with character codes 0x01-0x1F or 0x80 onwards | ||||||
66F6 | ADD A,$20 | |||||||
66F8 | RET | Return with the standard ASCII code in A | ||||||
66F9 | ADD A,$20 | |||||||
66FB | CP $03 | |||||||
66FD | RET C | Return with character codes 0x01 and 0x02 (end of line) | ||||||
The next character in the message is actually a pointer to another message. Find the address of that message, and store it for future reference.
|
||||||||
66FE | LD E,A | DE points to the LSB of the start address of the (sub)submessage | ||||||
66FF | LD D,$FE | |||||||
6701 | INC L | L=0x0D (submessage) or 0x0F (sub-submessage) | ||||||
6702 | LD A,(DE) | A=LSB of the start address of the (sub)submessage | ||||||
6703 | LD (HL),A | Store it in byte 0x0D or 0x0F of the character's buffer | ||||||
6704 | INC L | L=0x0E (submessage) or 0x10 (sub-submessage) | ||||||
6705 | INC D | A=MSB of the address of the (sub)submessage | ||||||
6706 | LD A,(DE) | |||||||
6707 | LD (HL),A | Store it in byte 0x0E or 0x10 of the character's buffer | ||||||
6708 | JR $66DC | Jump back to collect a character from this (sub)submessage |
Prev: 66C0 | Up: Map | Next: 670A |