Spectrum ROM | Routines |
Prev: 03035 | Up: Map |
This subroutine is used to print messages and tokens. The A register holds the 'entry number' of the message or token in a table. The DE register pair holds the base address of the table.
|
|||||||
PO_MSG | 03082 | PUSH HL | The high byte of the last entry on the machine stack is made zero so as to suppress trailing spaces (see below). | ||||
03083 | LD H,0 | ||||||
03085 | EX (SP),HL | ||||||
03086 | JR PO_TABLE | Jump forward. | |||||
This entry point is used by the routine at PO_ANY.
Enter here when expanding token codes.
|
|||||||
PO_TOKENS | 03088 | LD DE,149 | The base address of the token table. | ||||
03091 | PUSH AF | Save the code on the stack. (Range +00 to +5A, RND to COPY). | |||||
The table is searched and the correct entry printed.
|
|||||||
PO_TABLE | 03092 | CALL PO_SEARCH | Locate the required entry. | ||||
03095 | JR C,PO_EACH | Print the message/token. | |||||
03097 | LD A," " | A 'space' will be printed before the message/token if required. | |||||
03099 | BIT 0,(IY+1) | ||||||
03103 | CALL Z,PO_SAVE | ||||||
The characters of the message/token are printed in turn.
|
|||||||
PO_EACH | 03106 | LD A,(DE) | Collect a code. | ||||
03107 | AND 127 | Cancel any 'inverted bit'. | |||||
03109 | CALL PO_SAVE | Print the character. | |||||
03112 | LD A,(DE) | Collect the code again. | |||||
03113 | INC DE | Advance the pointer. | |||||
03114 | ADD A,A | The 'inverted bit' goes to the carry flag and signals the end of the message/token; otherwise jump back. | |||||
03115 | JR NC,PO_EACH | ||||||
Now consider whether a 'trailing space' is required.
|
|||||||
03117 | POP DE | For messages, D holds +00; for tokens, D holds +00 to +5A. | |||||
03118 | CP 72 | Jump forward if the last character was a '$'. | |||||
03120 | JR Z,PO_TR_SP | ||||||
03122 | CP 130 | Return if the last character was any other before 'A'. | |||||
03124 | RET C | ||||||
PO_TR_SP | 03125 | LD A,D | Examine the value in D and return if it indicates a message, RND, INKEY$ or PI. | ||||
03126 | CP 3 | ||||||
03128 | RET C | ||||||
03129 | LD A," " | All other cases will require a 'trailing space'. | |||||
This routine continues into PO_SAVE.
|
Prev: 03035 | Up: Map |