@nataliapc/mcp-openmsx 1.2.10 → 1.2.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/README.md +20 -2
  2. package/dist/chunker.js +187 -0
  3. package/dist/embedder.js +250 -0
  4. package/dist/server.js +6 -1
  5. package/dist/server_tools.js +6 -5
  6. package/dist/vectordb.js +94 -35
  7. package/package.json +4 -8
  8. package/resources/audio/chipsfmpacpr1_en.md +209 -0
  9. package/resources/audio/chipsfmpacpr2_en.md +170 -0
  10. package/resources/audio/toc.json +12 -0
  11. package/resources/book--msx-top-secret-3/MTS3-Appendix-English-Upd2.pdf +0 -0
  12. package/resources/book--msx-top-secret-3/MTS3-Complete-English.pdf +0 -0
  13. package/resources/book--msx2-technical-handbook/toc.json +1 -1
  14. package/resources/book--the-msx-red-book/Chapter1_Programmable_Peripheral_Interface.md +112 -0
  15. package/resources/book--the-msx-red-book/Chapter2_Video_Display_Processor.md +308 -0
  16. package/resources/book--the-msx-red-book/Chapter3_Programmable_Sound_Generator.md +168 -0
  17. package/resources/book--the-msx-red-book/Chapter4_ROM_BIOS.md +2528 -0
  18. package/resources/book--the-msx-red-book/Chapter5_ROM_BASIC_Interpreter.md +3975 -0
  19. package/resources/book--the-msx-red-book/Chapter6_Memory_Map.md +1963 -0
  20. package/resources/book--the-msx-red-book/Chapter7_Machine_Code_Programs.md +1238 -0
  21. package/resources/book--the-msx-red-book/Introduction.md +104 -0
  22. package/resources/book--the-msx-red-book/toc.json +38 -3
  23. package/resources/processors/toc.json +3 -3
  24. package/resources/processors/z80-undocumented.md +141 -0
  25. package/resources/sdcc/1_Introduction.md +199 -0
  26. package/resources/sdcc/2_Installing_SDCC.md +533 -0
  27. package/resources/sdcc/3_Using_SDCC.md +1758 -0
  28. package/resources/sdcc/4_Notes_on_supported_Processors.md +1638 -0
  29. package/resources/sdcc/5_Debugging.md +210 -0
  30. package/resources/sdcc/6_Tips_and_Support.md +258 -0
  31. package/resources/sdcc/7_SDCC_Technical_Data.md +489 -0
  32. package/resources/sdcc/8_Compiler_internals.md +477 -0
  33. package/resources/sdcc/toc.json +44 -2
  34. package/vector-db/msxdocs.lance/_indices/4d3bd360-e3c6-408d-b0ff-a4d6bd9580cb/metadata.lance +0 -0
  35. package/vector-db/msxdocs.lance/_indices/4d3bd360-e3c6-408d-b0ff-a4d6bd9580cb/part_0_docs.lance +0 -0
  36. package/vector-db/msxdocs.lance/_indices/4d3bd360-e3c6-408d-b0ff-a4d6bd9580cb/part_0_invert.lance +0 -0
  37. package/vector-db/msxdocs.lance/_indices/4d3bd360-e3c6-408d-b0ff-a4d6bd9580cb/part_0_tokens.lance +0 -0
  38. package/vector-db/msxdocs.lance/_transactions/0-6f47c9fc-3657-40f0-9dd4-c7226b2a4805.txn +0 -0
  39. package/vector-db/msxdocs.lance/_transactions/1-2bb7426e-a4b0-40ea-9a58-00c4985fc6a9.txn +0 -0
  40. package/vector-db/msxdocs.lance/_versions/18446744073709551613.manifest +0 -0
  41. package/vector-db/msxdocs.lance/_versions/18446744073709551614.manifest +0 -0
  42. package/vector-db/msxdocs.lance/_versions/latest_version_hint.json +1 -0
  43. package/vector-db/msxdocs.lance/data/110001110001011010001000876c134b8296fbc47762d1e1ab.lance +0 -0
  44. package/resources/book--the-msx-red-book/the_msx_red_book.md +0 -10349
  45. package/resources/processors/z80-undocumented.tex +0 -5617
  46. package/resources/sdcc/lyx2md.py +0 -745
  47. package/resources/sdcc/sdccman.lyx +0 -81574
  48. package/resources/sdcc/sdccman.md +0 -5557
  49. package/vector-db/index.json +0 -1
@@ -0,0 +1,1963 @@
1
+ # 6. Memory Map
2
+
3
+ A maximum of 32 KB of RAM is available to the BASIC Interpreter to hold the program text, the BASIC Variables, the Z80 stack, the I/O buffers and the internal workspace. A memory map of these areas in the power-up state is shown below:
4
+
5
+ ```
6
+ ┌─────────────────────────┐
7
+ │ Workspace Area │
8
+ HIMEM=F380H ─────> ├─────────────────────────┤
9
+ │ I/O Buffer 1 │
10
+ ├─────────────────────────┤
11
+ │ FCB 1 │
12
+ ├─────────────────────────┤
13
+ │ I/O Buffer 0 │
14
+ NULBUF=F177H ────> ├─────────────────────────┤
15
+ │ FCB 0 │
16
+ ├─────────────────────────┤
17
+ │ F277H (FCB 1) │
18
+ │ F16EH (FCB 0) │
19
+ FILTAB=F16AH ────> ├─────────────────────────┤
20
+ │ 00H │
21
+ ├─────────────────────────┤
22
+ MEMSIZ=F168H ──┬─> │ │
23
+ FRETOP=F168H ──┘ │ String Storage Area │
24
+ │ │
25
+ STKTOP=F0A0H ────> ├─────────────────────────┤
26
+ │ Z80 Stack │
27
+ └─────────────────────────┘
28
+ STREND=8003H ────>
29
+ ┌─────────────────────────┐
30
+ │ Array Storage Area │
31
+ ARYTAB=8003H ────> ├─────────────────────────┤
32
+ │ Variable Storage Area │
33
+ VARTAB=8003H ────> ├─────────────────────────┤
34
+ │ Program Text Area │
35
+ TXTTAB=8001H ────> ├─────────────────────────┤
36
+ │ 00H │
37
+ └─────────────────────────┘
38
+ ```
39
+ **Figure 50:** Memory Map 8000H to FFFFH
40
+
41
+ The Program Text Area is composed of tokenized program lines stored in line number order and terminated by a zero end link, when in the "`NEW`" state only the end link is present. The zero byte at 8000H is a dummy end of line character needed to synchronize the Runloop at the start of a program.
42
+
43
+ The Variable and Array Storage Areas are composed of string or numeric Variables and Arrays stored in the order in which they are found in the program text. Execution speed improves marginally if Variables are declared before Arrays in a program as this reduces the amount of memory to be moved upwards.
44
+
45
+ The Z80 stack is positioned immediately below the String Storage Area, the structure of the stack top is shown below:
46
+
47
+ ```
48
+ STKTOP ────────> ├───────┤
49
+ │ 00H │
50
+ │ 00H │
51
+ Mainloop SP ───> ├───────┤
52
+ │ 46H │
53
+ │ 01H │
54
+ Statement SP ──> └───────┘
55
+ ```
56
+ **Figure 51:** Z80 Stack Top
57
+
58
+ Whenever the position of the stack is altered, as a result of a "`CLEAR`" or "`MAXFILES`" statement, two zero bytes are first pushed to function as a terminator during "`FOR`" or "`GOSUB`" parameter block searches. Assuming no parameter blocks are present the Z80 SP will therefore be at [STKTOP](#stktop)-2 within the Interpreter Mainloop and at [STKTOP](#stktop)-4 when control transfers from the Runloop to a statement handler.
59
+
60
+ The String Storage Area is composed of the string bodies assigned to Variables or Arrays. During expression evaluation a number of intermediate string results may also be temporarily present under the permanent string heap. The zero byte following the String Storage Area is a temporary delimiter for the "`VAL`" function.
61
+
62
+ The region between the String Storage Area and [HIMEM](#himem) is used for I/O buffer storage. I/O buffer 0, the "`SAVE`" and "`LOAD`" buffer, is always present but the number of user buffers is determined by the "`MAXFILES`" statement. Each I/O buffer consists of a 9 byte FCB, whose address is contained in the table under FCB 0, followed by a 256 byte data buffer. The FCB contains the status of the I/O buffer as below:
63
+
64
+ |0|1|2|3|4|5|6|7|8|
65
+ |:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
66
+ |Mod|00H|00H|00H|DEV|00H|POS|00H|PPS|
67
+
68
+ **Figure 52:** File Control Block
69
+
70
+ The MOD byte holds the buffer mode, the DEV byte the device code, the POS byte the current position in the buffer (0 to 255) and the PPS byte the "`PRINT`" position. The remainder of the FCB is unused on a standard MSX machine.
71
+
72
+ <a name="workspace_area"></a>
73
+ ## Workspace Area
74
+
75
+ The section of the Workspace Area from F380H to FD99H holds the BIOS/Interpreter variables. These are listed on the following pages in standard assembly language form:
76
+
77
+ <a name="f380h"></a><a name="rdprim"></a>
78
+ <a name="f382h"></a>
79
+ <a name="f383h"></a>
80
+
81
+ ```
82
+ F380H RDPRIM: OUT (0A8H),A ; Set new Primary Slot
83
+ F382H LD E,(HL) ; Read memory
84
+ F383H JR WRPRM1 ; Restore old Primary Slot
85
+ ```
86
+
87
+ This routine is used by the [RDSLT](#rdslt) standard routine to switch Primary Slots and read a byte from memory. The new Primary Slot Register setting is supplied in register A, the old setting in register D and the byte read returned in register E.
88
+
89
+ <a name="f385h"></a><a name="wrprim"></a>
90
+ <a name="f387h"></a>
91
+ <a name="f388h"></a><a name="wrprm1"></a>
92
+ <a name="f389h"></a>
93
+ <a name="f38bh"></a>
94
+
95
+ ```
96
+ F385H WRPRIM: OUT (0A8H),A ; Set new Primary Slot
97
+ F387H LD (HL),E ; Write to memory
98
+ F388H WRPRM1: LD A,D ; Get old setting
99
+ F389H OUT (0A8H),A ; Restore old Primary Slot
100
+ F38BH RET
101
+ ```
102
+
103
+ This routine is used by the [WRSLT](#wrslt) standard routine to switch Primary Slots and write a byte to memory. The new Primary Slot Register setting is supplied in register A, the old setting in register D and the byte to write in register E.
104
+
105
+ <a name="f38ch"></a><a name="clprim"></a>
106
+ <a name="f38eh"></a>
107
+ <a name="f38fh"></a>
108
+ <a name="f392h"></a>
109
+ <a name="f393h"></a>
110
+ <a name="f394h"></a>
111
+ <a name="f396h"></a>
112
+ <a name="f397h"></a>
113
+ <a name="f398h"></a><a name="clprm1"></a>
114
+
115
+ ```
116
+ F38CH CLPRIM: OUT (0A8H),A ; Set new Primary Slot
117
+ F38EH EX AF,AF' ; Swap to AF for call
118
+ F38FH CALL CLPRM1 ; Do it
119
+ F392H EX AF,AF' ; Swap to AF
120
+ F393H POP AF ; Get old setting
121
+ F394H OUT (0A8H),A ; Restore old Primary Slot
122
+ F396H EX AF,AF' ; Swap to AF
123
+ F397H RET
124
+ F398H CLPRM1: JP (IX)
125
+ ```
126
+
127
+ This routine is used by the [CALSLT](#calslt) standard routine to switch Primary Slots and call an address. The new Primary Slot Register setting is supplied in register A, the old setting on the Z80 stack and the address to call in register pair IX.
128
+
129
+ <a name="f39ah"></a><a name="usrtab"></a>
130
+ <a name="f39ch"></a>
131
+ <a name="f39eh"></a>
132
+ <a name="f3a0h"></a>
133
+ <a name="f3a2h"></a>
134
+ <a name="f3a4h"></a>
135
+ <a name="f3a6h"></a>
136
+ <a name="f3a8h"></a>
137
+ <a name="f3aah"></a>
138
+ <a name="f3ach"></a>
139
+
140
+ ```
141
+ F39AH USRTAB: DEFW 475AH ; USR 0
142
+ F39CH DEFW 475AH ; USR 1
143
+ F39EH DEFW 475AH ; USR 2
144
+ F3A0H DEFW 475AH ; USR 3
145
+ F3A2H DEFW 475AH ; USR 4
146
+ F3A4H DEFW 475AH ; USR 5
147
+ F3A6H DEFW 475AH ; USR 6
148
+ F3A8H DEFW 475AH ; USR 7
149
+ F3AAH DEFW 475AH ; USR 8
150
+ F3ACH DEFW 475AH ; USR 9
151
+ ```
152
+
153
+ These ten variables contain the "`USR`" function addresses. Their values are set to the Interpreter "`Illegal function call`" error generator at power-up and thereafter only altered by the "`DEFUSR`" statement.
154
+
155
+ <a name="f3aeh"></a><a name="linl40"></a>
156
+
157
+ F3AEH LINL40: DEFB 37
158
+
159
+ This variable contains the [40x24 Text Mode](#40x24_text_mode) screen width. Its value is set at power-up and thereafter only altered by the "`WIDTH`" statement.
160
+
161
+ <a name="f3afh"></a><a name="linl32"></a>
162
+
163
+ F3AFH LINL32: DEFB 29
164
+
165
+ This variable contains the [32x24 Text Mode](#32x24_text_mode) screen width. Its value is set at power-up and thereafter only altered by the "`WIDTH`" statement.
166
+
167
+ <a name="f3b0h"></a><a name="linlen"></a>
168
+
169
+ F3B0H LINLEN: DEFB 37
170
+
171
+ This variable contains the current text mode screen width. Its value is set from [LINL40](#linl40) or [LINL32](#linl32) whenever the VDP is initialized to a text mode via the [INITXT](#initxt) or [INIT32](#init32) standard routines.
172
+
173
+ <a name="f3b1h"></a><a name="crtcnt"></a>
174
+
175
+ F3B1H CRTCNT: DEFB 24
176
+
177
+ This variable contains the number of rows on the screen. Its value is set at power-up and thereafter unaltered.
178
+
179
+ <a name="f3b2h"></a><a name="clmlst"></a>
180
+
181
+ F3B2H CLMLST: DEFB 14
182
+
183
+ This variable contains the minimum number of columns that must still be available on a line for a data item to be "`PRINT`"ed, if less space is available a CR,LF is issued first. Its value is set at power-up and thereafter only altered by the "`WIDTH`" and "`SCREEN`" statements.
184
+
185
+ <a name="f3b3h"></a><a name="txtnam"></a>
186
+ <a name="f3b5h"></a><a name="txtcol"></a>
187
+ <a name="f3b7h"></a><a name="txtcgp"></a>
188
+ <a name="f3b9h"></a><a name="txtatr"></a>
189
+ <a name="f3bbh"></a><a name="txtpat"></a>
190
+
191
+ ```
192
+ F3B3H TXTNAM: DEFW 0000H ; Name Table Base
193
+ F3B5H TXTCOL: DEFW 0000H ; Colour Table Base
194
+ F3B7H TXTCGP: DEFW 0800H ; Character Pattern Base
195
+ F3B9H TXTATR: DEFW 0000H ; Sprite Attribute Base
196
+ F3BBH TXTPAT: DEFW 0000H ; Sprite Pattern Base
197
+ ```
198
+
199
+ These five variables contain the [40x24 Text Mode](#40x24_text_mode) VDP base addresses. Their values are set at power-up and thereafter only altered by the "`BASE`" statement.
200
+
201
+ <a name="f3bdh"></a><a name="t32nam"></a>
202
+ <a name="f3bfh"></a><a name="t32col"></a>
203
+ <a name="f3c1h"></a><a name="t32cgp"></a>
204
+ <a name="f3c3h"></a><a name="t32atr"></a>
205
+ <a name="f3c5h"></a><a name="t32pat"></a>
206
+
207
+ ```
208
+ F3BDH T32NAM: DEFW 1800H ; Name Table Base
209
+ F3BFH T32COL: DEFW 2000H ; Colour Table Base
210
+ F3C1H T32CGP: DEFW 0000H ; Character Pattern Base
211
+ F3C3H T32ATR: DEFW 1B00H ; Sprite Attribute Base
212
+ F3C5H T32PAT: DEFW 3800H ; Sprite Pattern Base
213
+ ```
214
+
215
+ These five variables contain the [32x24 Text Mode](#32x24_text_mode) VDP base addresses. Their values are set at power-up and thereafter only altered by the "`BASE`" statement.
216
+
217
+ <a name="f3c7h"></a><a name="grpnam"></a>
218
+ <a name="f3c9h"></a><a name="grpcol"></a>
219
+ <a name="f3cbh"></a><a name="grpcgp"></a>
220
+ <a name="f3cdh"></a><a name="grpatr"></a>
221
+ <a name="f3cfh"></a><a name="grppat"></a>
222
+
223
+ ```
224
+ F3C7H GRPNAM: DEFW 1800H ; Name Table Base
225
+ F3C9H GRPCOL: DEFW 2000H ; Colour Table Base
226
+ F3CBH GRPCGP: DEFW 0000H ; Character Pattern Base
227
+ F3CDH GRPATR: DEFW 1B00H ; Sprite Attribute Base
228
+ F3CFH GRPPAT: DEFW 3800H ; Sprite Pattern Base
229
+ ```
230
+
231
+ These five variables contain the [Graphics Mode](#graphics_mode) VDP base addresses. Their values are set at power-up and thereafter only altered by the "`BASE`" statement.
232
+
233
+ <a name="f3d1h"></a><a name="mltnam"></a>
234
+ <a name="f3d3h"></a><a name="mltcol"></a>
235
+ <a name="f3d5h"></a><a name="mltcgp"></a>
236
+ <a name="f3d7h"></a><a name="mltatr"></a>
237
+ <a name="f3d9h"></a><a name="mltpat"></a>
238
+
239
+ ```
240
+ F3D1H MLTNAM: DEFW 0800H ; Name Table Base
241
+ F3D3H MLTCOL: DEFW 0000H ; Colour Table Base
242
+ F3D5H MLTCGP: DEFW 0000H ; Character Pattern Base
243
+ F3D7H MLTATR: DEFW 1B00H ; Sprite Attribute Base
244
+ F3D9H MLTPAT: DEFW 3800H ; Sprite Pattern Base
245
+ ```
246
+
247
+ These five variables contain the [Multicolour Mode](#multicolour_mode) VDP base addresses. Their values are set at power-up and thereafter only altered by the "`BASE`" statement.
248
+
249
+ <a name="f3dbh"></a><a name="cliksw"></a>
250
+
251
+ F3DBH CLIKSW: DEFB 01H
252
+
253
+ This variable controls the interrupt handler key click: 00H=Off, NZ=On. Its value is set at power-up and thereafter only altered by the "`SCREEN`" statement.
254
+
255
+ <a name="f3dch"></a><a name="csry"></a>
256
+
257
+ F3DCH CSRY: DEFB 01H
258
+
259
+ This variable contains the row coordinate (from 1 to [CTRCNT](#ctrcnt)) of the text mode cursor.
260
+
261
+ <a name="f3ddh"></a><a name="csrx"></a>
262
+
263
+ F3DDH CSRX: DEFB 01H
264
+
265
+ This variable contains the column coordinate (from 1 to [LINLEN](#linlen)) of the text mode cursor. Note that the BIOS cursor coordinates for the home position are 1,1 whatever the screen width.
266
+
267
+ <a name="f3deh"></a><a name="cnsdfg"></a>
268
+
269
+ F3DEH CNSDFG: DEFB FFH
270
+
271
+ This variable contains the current state of the function key display: 00H=Off, NZ=On.
272
+
273
+ <a name="f3dfh"></a><a name="rg0sav"></a>
274
+ <a name="f3e0h"></a><a name="rg1sav"></a>
275
+ <a name="f3e1h"></a><a name="rg2sav"></a>
276
+ <a name="f3e2h"></a><a name="rg3sav"></a>
277
+ <a name="f3e3h"></a><a name="rg4sav"></a>
278
+ <a name="f3e4h"></a><a name="rg5sav"></a>
279
+ <a name="f3e5h"></a><a name="rg6sav"></a>
280
+ <a name="f3e6h"></a><a name="rg7sav"></a>
281
+
282
+ ```
283
+ F3DFH RG0SAV: DEFB 00H
284
+ F3E0H RG1SAV: DEFB F0H
285
+ F3E1H RG2SAV: DEFB 00H
286
+ F3E2H RG3SAV: DEFB 00H
287
+ F3E3H RG4SAV: DEFB 01H
288
+ F3E4H RG5SAV: DEFB 00H
289
+ F3E5H RG6SAV: DEFB 00H
290
+ F3E6H RG7SAV: DEFB F4H
291
+ ```
292
+
293
+ These eight variables mimic the state of the eight write-only [VDP Mode Registers](#vdp_mode_registers). The values shown are for [40x24 Text Mode](#40x24_text_mode).
294
+
295
+ <a name="f3e7h"></a><a name="statfl"></a>
296
+
297
+ F3E7H STATFL: DEFB CAH
298
+
299
+ This variable is continuously updated by the interrupt handler with the contents of the [VDP Status Register](#vdp_status_register).
300
+
301
+ <a name="f3e8h"></a><a name="trgflg"></a>
302
+
303
+ F3E8H TRGFLG: DEFB F1H
304
+
305
+ This variable is continuously updated by the interrupt handler with the state of the four joystick trigger inputs and the space key.
306
+
307
+ <a name="f3e9h"></a><a name="forclr"></a>
308
+
309
+ F3E9H FORCLR: DEFB 0FH ; White
310
+
311
+ This variable contains the current foreground colour. Its value is set at power-up and thereafter only altered by the "`COLOR`" statement. The foreground colour is used by the [CLRSPR](#clrspr) standard routine to set the sprite colour and by the [CHGCLR](#chgclr) standard routine to set the 1 pixel colour in the text modes. It also functions as the graphics ink colour as it is copied to [ATRBYT](#atrbyt) by the [GRPPRT](#grpprt) standard routine and used throughout the Interpreter as the default value for any optional colour operand.
312
+
313
+ <a name="f3eah"></a><a name="bakclr"></a>
314
+
315
+ F3EAH BAKCLR: DEFB 04H ; Dark blue
316
+
317
+ This variable contains the current background colour. Its value is set at power-up and thereafter only altered by the "`COLOR`" statement. The background colour is used by the [CLS](#cls) standard routine to clear the screen in the graphics modes and by the [CHGCLR](#chgclr) standard routine to set the 0 pixel colour in the text modes.
318
+
319
+ <a name="f3ebh"></a><a name="bdrclr"></a>
320
+
321
+ F3EBH BDRCLR: DEFB 04H ; Dark blue
322
+
323
+ This variable contains the current border colour. Its value is set at power-up and thereafter only altered by the "`COLOR`" statement. The border colour is used by the [CHGCLR](#chgclr) standard routine in [32x24 Text Mode](#32x24_text_mode), [Graphics Mode](#graphics_mode) and [Multicolour Mode](#multicolour_mode) to set the border colour.
324
+
325
+ <a name="f3ech"></a><a name="maxupd"></a>
326
+ <a name="f3edh"></a>
327
+
328
+ ```
329
+ F3ECH MAXUPD: DEFB C3H
330
+ F3EDH DEFW 0000H
331
+ ```
332
+
333
+ These two bytes are filled in by the "`LINE`" statement handler to form a Z80 JP to the [RIGHTC](#rightc), [LEFTC](#leftc), [UPC](#upc) or [DOWNC](#downc) standard routines.
334
+
335
+ <a name="f3efh"></a><a name="minupd"></a>
336
+ <a name="f3f0h"></a>
337
+
338
+ ```
339
+ F3EFH MINUPD: DEFB C3H
340
+ F3F0H DEFW 0000H
341
+ ```
342
+
343
+ These two bytes are filled in by the "`LINE`" statement handler to form a Z80 JP to the [RIGHTC](#rightc), [LEFTC](#leftc), [UPC](#upc) or [DOWNC](#downc) standard routines.
344
+
345
+ <a name="f3f2h"></a><a name="atrbyt"></a>
346
+
347
+ F3F2H ATRBYT: DEFB 0FH
348
+
349
+ This variable contains the graphics ink colour used by the [SETC](#setc) and [NSETCX](#nsetcx) standard routines.
350
+
351
+ <a name="f3f3h"></a><a name="queues"></a>
352
+
353
+ F3F3H QUEUES: DEFW F959H
354
+
355
+ This variable contains the address of the control blocks for the three music queues. Its value is set at power-up and thereafter unaltered.
356
+
357
+ <a name="f3f5h"></a><a name="frcnew"></a>
358
+
359
+ F3F5H FRCNEW: DEFB FFH
360
+
361
+ This variable contains a flag to distinguish the two statements in the "`CLOAD/CLOAD?`" statement handler: 00H=CLOAD, FFH=CLOAD?.
362
+
363
+ <a name="f3f6h"></a><a name="scncnt"></a>
364
+
365
+ F3F6H SCNCNT: DEFB 01H
366
+
367
+ This variable is used as a counter by the interrupt handler to control the rate at which keyboard scans are performed.
368
+
369
+ <a name="f3f7h"></a><a name="repcnt"></a>
370
+
371
+ F3F7H REPCNT: DEFB 01H
372
+
373
+ This variable is used as a counter by the interrupt handler to control the key repeat rate.
374
+
375
+ <a name="f3f8h"></a><a name="putpnt"></a>
376
+
377
+ F3F8H PUTPNT: DEFW FBF0H
378
+
379
+ This variable contains the address of the put position in [KEYBUF](#keybuf).
380
+
381
+ <a name="f3fah"></a><a name="getpnt"></a>
382
+
383
+ F3FAH GETPNT: DEFW FBF0H
384
+
385
+ This variable contains the address of the get position in [KEYBUF](#keybuf).
386
+
387
+ <a name="f3fch"></a><a name="cs1200"></a>
388
+ <a name="f3fdh"></a>
389
+ <a name="f3feh"></a>
390
+ <a name="f3ffh"></a>
391
+ <a name="f400h"></a>
392
+
393
+ ```
394
+ F3FCH CS1200: DEFB 53H ; LO cycle 1st half
395
+ F3FDH DEFB 5CH ; LO cycle 2nd half
396
+ F3FEH DEFB 26H ; HI cycle 1st half
397
+ F3FFH DEFB 2DH ; HI cycle 2nd half
398
+ F400H DEFB 0FH ; Header cycle count
399
+ ```
400
+
401
+ These five variables contain the 1200 baud cassette parameters. Their values are set at power-up and thereafter unaltered.
402
+
403
+ <a name="f401h"></a><a name="cs2400"></a>
404
+ <a name="f402h"></a>
405
+ <a name="f403h"></a>
406
+ <a name="f404h"></a>
407
+ <a name="f405h"></a>
408
+
409
+ ```
410
+ F401H CS2400: DEFB 25H ; LO cycle 1st half
411
+ F402H DEFB 2DH ; LO cycle 2nd half
412
+ F403H DEFB 0EH ; HI cycle 1st half
413
+ F404H DEFB 16H ; HI cycle 2nd half
414
+ F405H DEFB 1FH ; Header cycle count
415
+ ```
416
+
417
+ These five variables contain the 2400 baud cassette parameters. Their values are set at power-up and thereafter unaltered.
418
+
419
+ <a name="f406h"></a><a name="low"></a>
420
+ <a name="f407h"></a>
421
+ <a name="f408h"></a><a name="high"></a>
422
+ <a name="f409h"></a>
423
+ <a name="f40ah"></a><a name="header"></a>
424
+
425
+ ```
426
+ F406H LOW: DEFB 53H ; LO cycle 1st half
427
+ F407H DEFB 5CH ; LO cycle 2nd half
428
+ F408H HIGH: DEFB 26H ; HI cycle 1st half
429
+ F409H DEFB 2DH ; HI cycle 2nd half
430
+ F40AH HEADER: DEFB 0FH ; Header cycle count
431
+ ```
432
+
433
+ These five variables contain the current cassette parameters. Their values are set to 1200 baud at power-up and thereafter only altered by the "`CSAVE`" and "`SCREEN`" statements.
434
+
435
+ <a name="f40bh"></a><a name="aspct1"></a>
436
+
437
+ F40BH ASPCT1: DEFW 0100H
438
+
439
+ This variable contains the reciprocal of the default "`CIRCLE`" aspect ratio multiplied by 256. Its value is set at power-up and thereafter unaltered.
440
+
441
+ <a name="f40dh"></a><a name="aspct2"></a>
442
+
443
+ F40DH ASPCT2: DEFW 01C0H
444
+
445
+ This variable contains the default "`CIRCLE`" aspect ratio multiplied by 256. Its value is set at power-up and thereafter unaltered. The aspect ratio is present in two forms so that the "`CIRCLE`" statement handler can select the appropriate one immediately rather than needing to examine and possibly reciprocate it as is the case with an operand in the program text.
446
+
447
+ <a name="f40fh"></a><a name="endprg"></a>
448
+ <a name="f410h"></a>
449
+ <a name="f411h"></a>
450
+ <a name="f412h"></a>
451
+ <a name="f413h"></a>
452
+
453
+ ```
454
+ F40FH ENDPRG: DEFB ":"
455
+ F410H DEFB 00H
456
+ F411H DEFB 00H
457
+ FE12H DEFB 00H
458
+ F413H DEFB 00H
459
+ ```
460
+
461
+ These five bytes form a dummy program line. Their values are set at power-up and thereafter unaltered. The line exists in case an error occurs in the Interpreter Mainloop before any tokenized text is available in [KBUF](#kbuf). If an "`ON ERROR GOTO`" is active at this time then it provides some text for the "`RESUME`" statement to terminate on.
462
+
463
+ <a name="f414h"></a><a name="errflg"></a>
464
+
465
+ F414H ERRFLG: DEFB 00H
466
+
467
+ This variable is used by the Interpreter error handler to save the error number.
468
+
469
+ <a name="f415h"></a><a name="lptpos"></a>
470
+
471
+ F415H LPTPOS: DEFB 00H
472
+
473
+ This variable is used by the "`LPRINT`" statement handler to hold the current position of the printer head.
474
+
475
+ <a name="f416h"></a><a name="prtflg"></a>
476
+
477
+ F416H PRTFLG: DEFB 00H
478
+
479
+ This variable determines whether the [OUTDO](#outdo) standard routine directs its output to the screen or to the printer: 00H=Screen, 01H=Printer.
480
+
481
+ <a name="f417h"></a><a name="ntmsxp"></a>
482
+
483
+ F417H NTMSXP: DEFB 00H
484
+
485
+ This variable determines whether the [OUTDO](#outdo) standard routine will replace headered graphics characters directed to the printer with spaces: 00H=Graphics, NZ=Spaces. Its value is set at power-up and thereafter only altered by the "`SCREEN`" statement.
486
+
487
+ <a name="f418h"></a><a name="rawprt"></a>
488
+
489
+ F418H RAWPRT: DEFB 00H
490
+
491
+ This variable determines whether the [OUTDO](#outdo) standard routine will modify control and headered graphics characters directed to the printer: 00H=Modify, NZ=Raw. Its value is set at power-up and thereafter unaltered.
492
+
493
+ <a name="f419h"></a><a name="vlzadr"></a>
494
+ <a name="f41bh"></a><a name="vlzdat"></a>
495
+
496
+ ```
497
+ F419H VLZADR: DEFW 0000H
498
+ F41BH VLZDAT: DEFB 00H
499
+ ```
500
+
501
+ These variables contain the address and value of any character temporarily removed by the "`VAL`" function.
502
+
503
+ <a name="f41ch"></a><a name="curlin"></a>
504
+
505
+ F41CH CURLIN: DEFW FFFFH
506
+
507
+ This variable contains the current Interpreter line number. A value of FFFFH denotes direct mode.
508
+
509
+ <a name="f41eh"></a><a name="kbfmin"></a>
510
+
511
+ F41EH KBFMIN: DEFB ":"
512
+
513
+ This byte provides a dummy prefix to the tokenized text contained in [KBUF](#kbuf). Its function is similar to that of [ENDPRG](#endprg) but is used for the situation where an error occurs within a direct statement.
514
+
515
+ <a name="f41fh"></a><a name="kbuf"></a>
516
+
517
+ F41FH KBUF: DEFS 318
518
+
519
+ This buffer contains the tokenized form of the input line collected by the Interpreter Mainloop. When a direct statement is executed the contents of this buffer form the program text.
520
+
521
+ <a name="f55dh"></a><a name="bufmin"></a>
522
+
523
+ F55DH BUFMIN: DEFB ","
524
+
525
+ This byte provides a dummy prefix to the text contained in [BUF](#buf). It is used to synchronize the "`INPUT`" statement handler as it starts to analyze the input text.
526
+
527
+ <a name="f55eh"></a><a name="buf"></a>
528
+
529
+ F55EH BUF: DEFS 259
530
+
531
+ This buffer contains the text collected from the console by the [INLIN](#inlin) standard routine.
532
+
533
+ <a name="f661h"></a><a name="ttypos"></a>
534
+
535
+ F661H TTYPOS: DEFB 00H
536
+
537
+ This variable is used by the "`PRINT`" statement handler to hold the current screen position (Teletype!).
538
+
539
+ <a name="f662h"></a><a name="dimflg"></a>
540
+
541
+ F662H DIMFLG: DEFB 00H
542
+
543
+ This variable is normally zero but is set by the "`DIM`" statement handler to control the operation of the variable search routine.
544
+
545
+ <a name="f663h"></a><a name="valtyp"></a>
546
+
547
+ F663H VALTYP: DEFB 02H
548
+
549
+ This variable contains the type code of the operand currently contained in [DAC](#dac): integer, 3=String, 4=Single Precision, 8=Double Precision.
550
+
551
+ <a name="f664h"></a><a name="dores"></a>
552
+
553
+ F664H DORES: DEFB 00H
554
+
555
+ This variable is normally zero but is set to prevent the tokenization of unquoted keywords following a "`DATA`" token.
556
+
557
+ <a name="f665h"></a><a name="donum"></a>
558
+
559
+ F665H DONUM: DEFB 00H
560
+
561
+ This variable is normally zero but is set when a numeric constant follows one of the keywords `GOTO`, `GOSUB`, `THEN`, etc., and must be tokenized to the special line number operand form.
562
+
563
+ <a name="f666h"></a><a name="contxt"></a>
564
+
565
+ F666H CONTXT: DEFW 0000H
566
+
567
+ This variable is used by the [CHRGTR](#chrgtr) standard routine to save the address of the character following a numeric constant in the program text.
568
+
569
+ <a name="f668h"></a><a name="consav"></a>
570
+
571
+ F668H CONSAV: DEFB 00H
572
+
573
+ This variable is used by the [CHRGTR](#chrgtr) standard routine to save the token of a numeric constant found in the program text.
574
+
575
+ <a name="f669h"></a><a name="contyp"></a>
576
+
577
+ F669H CONTYP: DEFB 00H
578
+
579
+ This variable is used by the [CHRGTR](#chrgtr) standard routine to save the type of a numeric constant found in the program text.
580
+
581
+ <a name="f66ah"></a><a name="conlo"></a>
582
+
583
+ F66AH CONLO: DEFS 8
584
+
585
+ This buffer is used by the [CHRGTR](#chrgtr) standard routine to save the value of a numeric constant found in the program text.
586
+
587
+ <a name="f672h"></a><a name="memsiz"></a>
588
+
589
+ F672H MEMSIZ: DEFW F168H
590
+
591
+ This variable contains the address of the top of the String Storage Area. Its value is set at power-up and thereafter only altered by the "`CLEAR`" and "`MAXFILES`" statements.
592
+
593
+ <a name="f674h"></a><a name="stktop"></a>
594
+
595
+ F674H STKTOP: DEFW F0A0H
596
+
597
+ This variable contains the address of the top of the Z80 stack. Its value is set at power-up to [MEMSIZ](#memsiz)-200 and thereafter only altered by the "`CLEAR`" and "`MAXFILES`" statements.
598
+
599
+ <a name="f676h"></a><a name="txttab"></a>
600
+
601
+ F676H TXTTAB: DEFW 8001H
602
+
603
+ This variable contains the address of the first byte of the Program Text Area. Its value is set at power-up and thereafter unaltered.
604
+
605
+ <a name="f678h"></a><a name="temppt"></a>
606
+
607
+ F678H TEMPPT: DEFW F67AH
608
+
609
+ This variable contains the address of the next free location in [TEMPST](#tempst).
610
+
611
+ <a name="f67ah"></a><a name="tempst"></a>
612
+
613
+ F67AH TEMPST: DEFS 30
614
+
615
+ This buffer is used to store string descriptors. It functions as a stack with string producers pushing their results and string consumers popping them.
616
+
617
+ <a name="f698h"></a><a name="dsctmp"></a>
618
+
619
+ F698H DSCTMP: DEFS 3
620
+
621
+ This buffer is used by the string functions to hold a result descriptor while it is being constructed.
622
+
623
+ <a name="f69bh"></a><a name="fretop"></a>
624
+
625
+ F69BH FRETOP: DEFW F168H
626
+
627
+ This variable contains the address of the next free location in the String Storage Area. When the area is empty [FRETOP](#fretop) is equal to [MEMSIZ](#memsiz).
628
+
629
+ <a name="f69dh"></a><a name="temp3"></a>
630
+
631
+ F69DH TEMP3: DEFW 0000H
632
+
633
+ This variable is used for temporary storage by various parts of the Interpreter.
634
+
635
+ <a name="f69fh"></a><a name="temp8"></a>
636
+
637
+ F69FH TEMP8: DEFW 0000H
638
+
639
+ This variable is used for temporary storage by various parts of the Interpreter.
640
+
641
+ <a name="f6a1h"></a><a name="endfor"></a>
642
+
643
+ F6A1H ENDFOR: DEFW 0000H
644
+
645
+ This variable is used by the "`FOR`" statement handler to hold the end of statement address during construction of a parameter block.
646
+
647
+ <a name="f6a3h"></a><a name="datlin"></a>
648
+
649
+ F6A3H DATLIN: DEFW 0000H
650
+
651
+ This variable contains the line number of the current "`DATA`" item in the program text.
652
+
653
+ <a name="f6a5h"></a><a name="subflg"></a>
654
+
655
+ F6A5H SUBFLG: DEFB 00H
656
+
657
+ This variable is normally zero but is set by the "`ERASE`", "`FOR`", "`FN`" and "`DEF FN`" handlers to control the processing of subscripts by the variable search routine.
658
+
659
+ <a name="f6a6h"></a><a name="flginp"></a>
660
+
661
+ F6A6H FLGINP: DEFB 00H
662
+
663
+ This variable contains a flag to distinguish the two statements in the "`READ/INPUT`" statement handler: 00H=INPUT, NZ=READ.
664
+
665
+ <a name="f6a7h"></a><a name="temp"></a>
666
+
667
+ F6A7H TEMP: DEFW 0000H
668
+
669
+ This variable is used for temporary storage by various parts of the Interpreter.
670
+
671
+ <a name="f6a9h"></a><a name="ptrflg"></a>
672
+
673
+ F6A9H PTRFLG: DEFB 00H
674
+
675
+ This variable is normally zero but is set if any line number operands in the Program Text Area have been converted to pointers.
676
+
677
+ <a name="f6aah"></a><a name="autflg"></a>
678
+
679
+ F6AAH AUTFLG: DEFB 00H
680
+
681
+ This variable is normally zero but is set when "`AUTO`" mode is turned on.
682
+
683
+ <a name="f6abh"></a><a name="autlin"></a>
684
+
685
+ F6ABH AUTLIN: DEFW 0000H
686
+
687
+ This variable contains the current "`AUTO`" line number.
688
+
689
+ <a name="f6adh"></a><a name="autinc"></a>
690
+
691
+ F6ADH AUTINC: DEFW 0000H
692
+
693
+ This variable contains the current "`AUTO`" line number increment.
694
+
695
+ <a name="f6afh"></a><a name="savtxt"></a>
696
+
697
+ F6AFH SAVTXT: DEFW 0000H
698
+
699
+ This variable is updated by the Runloop at the start of every statement with the current location in the program text. It is used during error recovery to set [ERRTXT](#errtxt) for the "`RESUME`" statement handler and [OLDTXT](#oldtxt) for the "`CONT`" statement handler.
700
+
701
+ <a name="f6b1h"></a><a name="savstk"></a>
702
+
703
+ F6B1H SAVSTK: DEFW F09EH
704
+
705
+ This variable is updated by the Runloop at the start of every statement with the current Z80 SP for error recovery purposes.
706
+
707
+ <a name="f6b3h"></a><a name="errlin"></a>
708
+
709
+ F6B3H ERRLIN: DEFW 0000H
710
+
711
+ This variable is used by the error handler to hold the line number of the program line generating an error.
712
+
713
+ <a name="f6b5h"></a><a name="dot"></a>
714
+
715
+ F6B5H DOT: DEFW 0000H
716
+
717
+ This variable is updated by the Mainloop and the error handler with the current line number for use with the "." parameter.
718
+
719
+ <a name="f6b7h"></a><a name="errtxt"></a>
720
+
721
+ F6B7H ERRTXT: DEFW 0000H
722
+
723
+ This variable is updated from [SAVTXT](#savtxt) by the error handler for use by the "`RESUME`" statement handler.
724
+
725
+ <a name="f6b9h"></a><a name="onelin"></a>
726
+
727
+ F6B9H ONELIN: DEFW 0000H
728
+
729
+ This variable is set by the "`ON ERROR GOTO`" statement handler with the address of the program line to execute when an error occurs.
730
+
731
+ <a name="f6bbh"></a><a name="oneflg"></a>
732
+
733
+ F6BBH ONEFLG: DEFB 00H
734
+
735
+ This variable is normally zero but is set by the error handler when control transfers to an "`ON ERROR GOTO`" statement. This is to prevent a loop developing if an error occurs inside the error recovery statements.
736
+
737
+ <a name="f6bch"></a><a name="temp2"></a>
738
+
739
+ F6BCH TEMP2: DEFW 0000H
740
+
741
+ This variable is used for temporary storage by various parts of the Interpreter.
742
+
743
+ <a name="f6beh"></a><a name="oldlin"></a>
744
+
745
+ F6BEH OLDLIN: DEFW 0000H
746
+
747
+ This variable contains the line number of the terminating program line. It is set by the "`END`" and "`STOP`" statement handlers for use with the "`CONT`" statement.
748
+
749
+ <a name="f6c0h"></a><a name="oldtxt"></a>
750
+
751
+ F6C0H OLDTXT: DEFW 0000H
752
+
753
+ This variable contains the address of the terminating program statement.
754
+
755
+ <a name="f6c2h"></a><a name="vartab"></a>
756
+
757
+ F6C2H VARTAB: DEFW 8003H
758
+
759
+ This variable contains the address of the first byte of the Variable Storage Area.
760
+
761
+ <a name="f6c4h"></a><a name="arytab"></a>
762
+
763
+ F6C4H ARYTAB: DEFW 8003H
764
+
765
+ This variable contains the address of the first byte of the Array Storage Area.
766
+
767
+ <a name="f6c6h"></a><a name="strend"></a>
768
+
769
+ F6C6H STREND: DEFW 8003H
770
+
771
+ This variable contains the address of the byte following the Array Storage Area.
772
+
773
+ <a name="f6c8h"></a><a name="datptr"></a>
774
+
775
+ F6C8H DATPTR: DEFW 8000H
776
+
777
+ This variable contains the address of the current "`DATA`" item in the program text.
778
+
779
+ <a name="f6cah"></a><a name="deftbl"></a>
780
+ <a name="f6cbh"></a>
781
+ <a name="f6cch"></a>
782
+ <a name="f6cdh"></a>
783
+ <a name="f6ceh"></a>
784
+ <a name="f6cfh"></a>
785
+ <a name="f6d0h"></a>
786
+ <a name="f6d1h"></a>
787
+ <a name="f6d2h"></a>
788
+ <a name="f6d3h"></a>
789
+ <a name="f6d4h"></a>
790
+ <a name="f6d5h"></a>
791
+ <a name="f6d6h"></a>
792
+ <a name="f6d7h"></a>
793
+ <a name="f6d8h"></a>
794
+ <a name="f6d9h"></a>
795
+ <a name="f6dah"></a>
796
+ <a name="f6dbh"></a>
797
+ <a name="f6dch"></a>
798
+ <a name="f6ddh"></a>
799
+ <a name="f6deh"></a>
800
+ <a name="f6dfh"></a>
801
+ <a name="f6e0h"></a>
802
+ <a name="f6e1h"></a>
803
+ <a name="f6e2h"></a>
804
+ <a name="f6e3h"></a>
805
+
806
+ ```
807
+ F6CAH DEFTBL: DEFB 08H ; A
808
+ F6CBH DEFB 08H ; B
809
+ F6CCH DEFB 08H ; C
810
+ F6CDH DEFB 08H ; D
811
+ F6CEH DEFB 08H ; E
812
+ F6CFH DEFB 08H ; F
813
+ F6D0H DEFB 08H ; G
814
+ F6D1H DEFB 08H ; H
815
+ F6D2H DEFB 08H ; I
816
+ F6D3H DEFB 08H ; J
817
+ F6D4H DEFB 08H ; K
818
+ F6D5H DEFB 08H ; L
819
+ F6D6H DEFB 08H ; M
820
+ F6D7H DEFB 08H ; N
821
+ F6D8H DEFB 08H ; O
822
+ F6D9H DEFB 08H ; P
823
+ F6DAH DEFB 08H ; Q
824
+ F6DBH DEFB 08H ; R
825
+ F6DCH DEFB 08H ; S
826
+ F6DDH DEFB 08H ; T
827
+ F6DEH DEFB 08H ; U
828
+ F6DFH DEFB 08H ; V
829
+ F6E0H DEFB 08H ; W
830
+ F6E1H DEFB 08H ; X
831
+ F6E2H DEFB 08H ; Y
832
+ F6E3H DEFB 08H ; Z
833
+ ```
834
+
835
+ These twenty-six variables contain the default type for each group of BASIC Variables. Their values are set to double precision at power-up, "`NEW`" and "`CLEAR`" and thereafter altered only by the "`DEF`" group of statements.
836
+
837
+ <a name="f6e4h"></a><a name="prmstk"></a>
838
+
839
+ F6E4H PRMSTK: DEFW 0000H
840
+
841
+ This variable contains the base address of the previous "`FN`" parameter block on the Z80 stack. It is used during string garbage collection to travel from block to block on the stack.
842
+
843
+ <a name="f6e6h"></a><a name="prmlen"></a>
844
+
845
+ F6E6H PRMLEN: DEFW 0000H
846
+
847
+ This variable contains the length of the current "`FN`" parameter block in [PARM1](#parm1).
848
+
849
+ <a name="f6e8h"></a><a name="parm1"></a>
850
+
851
+ F6E8H PARM1 : DEFS 100
852
+
853
+ This buffer contains the local Variables belonging to the "`FN`" function currently being evaluated.
854
+
855
+ <a name="f74ch"></a><a name="prmprv"></a>
856
+
857
+ F74CH PRMPRV: DEFW F6E4H
858
+
859
+ This variable contains the address of the previous "`FN`" parameter block. It is actually a constant used to ensure that string garbage collection commences with the current parameter block before proceeding to those on the stack.
860
+
861
+ <a name="f74eh"></a><a name="prmln2"></a>
862
+
863
+ F74EH PRMLN2: DEFW 0000H
864
+
865
+ This variable contains the length of the "`FN`" parameter block being constructed in [PARM2](#parm2)
866
+
867
+ <a name="f750h"></a><a name="parm2"></a>
868
+
869
+ F750H PARM2: DEFS 100
870
+
871
+ This buffer is used to construct the local Variables owned by the current "`FN`" function.
872
+
873
+ <a name="f7b4h"></a><a name="prmflg"></a>
874
+
875
+ F7B4H PRMFLG: DEFB 00H
876
+
877
+ This variable is used during a Variable search to indicate whether local or global Variables are being examined.
878
+
879
+ <a name="f7b5h"></a><a name="aryta2"></a>
880
+
881
+ F7B5H ARYTA2: DEFW 0000H
882
+
883
+ This variable is used during a Variable search to hold the termination address of the storage area being examined.
884
+
885
+ <a name="f7b7h"></a><a name="nofuns"></a>
886
+
887
+ F7B7H NOFUNS: DEFB 00H
888
+
889
+ This variable is normally zero but is set by the "`FN`" function handler to indicate to the variable search routine that local Variables are present.
890
+
891
+ <a name="f7b8h"></a><a name="temp9"></a>
892
+
893
+ F7B8H TEMP9: DEFW 0000H
894
+
895
+ This variable is used for temporary storage by various parts of the Interpreter.
896
+
897
+ <a name="f7bah"></a><a name="funact"></a>
898
+
899
+ F7BAH FUNACT: DEFW 0000H
900
+
901
+ This variable contains the number of currently active "`FN`" functions.
902
+
903
+ <a name="f7bch"></a><a name="swptmp"></a>
904
+
905
+ F7BCH SWPTMP: DEFS 8
906
+
907
+ This buffer is used to hold the first operand in a "`SWAP`" statement.
908
+
909
+ <a name="f7c4h"></a><a name="trcflg"></a>
910
+
911
+ F7C4H TRCFLG: DEFB 00H
912
+
913
+ This variable is normally zero but is set by the "`TRON`" statement handler to turn on the trace facility.
914
+
915
+ <a name="f7c5h"></a><a name="fbuffr"></a>
916
+
917
+ F7C5H FBUFFR: DEFS 43
918
+
919
+ This buffer is used to hold the text produced during numeric output conversion.
920
+
921
+ <a name="f7f0h"></a><a name="dectmp"></a>
922
+
923
+ F7F0H DECTMP: DEFW 0000H
924
+
925
+ This variable is used for temporary storage by the double precision division routine.
926
+
927
+ <a name="f7f2h"></a><a name="dectm2"></a>
928
+
929
+ F7F2H DECTM2: DEFW 0000H
930
+
931
+ This variable is used for temporary storage by the double precision division routine.
932
+
933
+ <a name="f7f4h"></a><a name="deccnt"></a>
934
+
935
+ F7F4H DECCNT: DEFB 00H
936
+
937
+ This variable is used by the double precision division routine to hold the number of non-zero bytes in the mantissa of the second operand.
938
+
939
+ <a name="f7f6h"></a><a name="dac"></a>
940
+
941
+ F7F6H DAC: DEFS 16
942
+
943
+ This buffer functions as the Interpreter's primary accumulator during expression evaluation.
944
+
945
+ <a name="f806h"></a><a name="hold8"></a>
946
+
947
+ F806H HOLD8: DEFS 65
948
+
949
+ This buffer is used by the double precision multiplication routine to hold the multiples of the first operand.
950
+
951
+ <a name="f847h"></a><a name="arg"></a>
952
+
953
+ F847H ARG: DEFS 16
954
+
955
+ This buffer functions as the Interpreter's secondary accumulator during expression evaluation.
956
+
957
+ <a name="f857h"></a><a name="rndx"></a>
958
+
959
+ F857H RNDX: DEFS 8
960
+
961
+ This buffer contains the current double precision random number.
962
+
963
+ <a name="f85fh"></a><a name="maxfil"></a>
964
+
965
+ F85FH MAXFIL: DEFB 01H
966
+
967
+ This variable contains the number of currently allocated user I/O buffers. Its value is set to 1 at power-up and thereafter only altered by the "`MAXFILES`" statement.
968
+
969
+ <a name="f860h"></a><a name="filtab"></a>
970
+
971
+ F860H FILTAB: DEFW F16AH
972
+
973
+ This variable contains the address of the pointer table for the I/O buffer FCBs.
974
+
975
+ <a name="f862h"></a><a name="nulbuf"></a>
976
+
977
+ F862H NULBUF: DEFW F177H
978
+
979
+ This variable contains the address of the first byte of the data buffer belonging to I/O buffer 0.
980
+
981
+ <a name="f864h"></a><a name="ptrfil"></a>
982
+
983
+ F864H PTRFIL: DEFW 0000H
984
+
985
+ This variable contains the address of the currently active I/O buffer FCB.
986
+
987
+ <a name="f866h"></a><a name="filnam"></a>
988
+
989
+ F866H FILNAM: DEFS 11
990
+
991
+ This buffer holds a user-specified filename. It is eleven characters long to allow for disc file specs such as "`FILENAME.BAS`".
992
+
993
+ <a name="f871h"></a><a name="filnm2"></a>
994
+
995
+ F871H FILNM2: DEFS 11
996
+
997
+ This buffer holds a filename read from an I/O device for comparison with the contents of [FILNAM](#filnam).
998
+
999
+ <a name="f87ch"></a><a name="nlonly"></a>
1000
+
1001
+ F87CH NLONLY: DEFB 00H
1002
+
1003
+ This variable is normally zero but is set during a program "`LOAD`". Bit 0 is used to prevent I/O buffer 0 being closed during loading and bit 7 to prevent the user I/O buffers being closed if auto-run is required.
1004
+
1005
+ <a name="f87dh"></a><a name="savend"></a>
1006
+
1007
+ F87DH SAVEND: DEFW 0000H
1008
+
1009
+ This variable is used by the "`BSAVE`" statement handler to hold the end address of the memory block to be saved.
1010
+
1011
+ <a name="f87fh"></a><a name="fnkstr"></a>
1012
+
1013
+ F87FH FNKSTR: DEFS 160
1014
+
1015
+ This buffer contains the ten sixteen-character function key strings. Their values are set at power-up and thereafter only altered by the "`KEY`" statement.
1016
+
1017
+ <a name="f91fh"></a><a name="cgpnt"></a>
1018
+ <a name="f920h"></a>
1019
+
1020
+ ```
1021
+ F91FH CGPNT: DEFB 00H ; Slot ID
1022
+ F920H DEFW 1BBFH ; Address
1023
+ ```
1024
+
1025
+ These variables contain the location of the character set copied to the VDP by the [INITXT](#initxt) and [INIT32](#init32) standard routines. Their values are set to the MSX ROM character set at power-up and thereafter unaltered.
1026
+
1027
+ <a name="f922h"></a><a name="nambas"></a>
1028
+
1029
+ F922H NAMBAS: DEFW 0000H
1030
+
1031
+ This variable contains the current text mode VDP Name Table base address. Its value is set from [TXTNAM](#txtnam) or [T32NAM](#t32nam) whenever the VDP is initialized to a text mode via the [INITXT](#initxt) or [INIT32](#init32) standard routines.
1032
+
1033
+ <a name="f924h"></a><a name="cgpbas"></a>
1034
+
1035
+ F924H CGPBAS: DEFW 0800H
1036
+
1037
+ This variable contains the current text mode VDP Character Pattern Table base address. Its value is set from [TXTCGP](#txtcgp) or [T32CGP](#t32cgp) whenever the VDP is initialized to a text mode via the [INITXT](#initxt) or [INIT32](#init32) standard routines.
1038
+
1039
+ <a name="f926h"></a><a name="patbas"></a>
1040
+
1041
+ F926H PATBAS: DEFW 3800H
1042
+
1043
+ This variable contains the current VDP Sprite Pattern Table base address. Its value is set from [T32PAT](#t32pat), [GRPPAT](#grppat) or [MLTPAT](#mltpat) whenever the VDP is initialized via the [INIT32](#init32), [INIGRP](#inigrp) or [INIMLT](#inimlt) standard routines.
1044
+
1045
+ <a name="f928h"></a><a name="atrbas"></a>
1046
+
1047
+ F928H ATRBAS: DEFW 1B00H
1048
+
1049
+ This variable contains the current VDP Sprite Attribute Table base address. Its value is set from [T32ATR](#t32atr), [GRPATR](#grpatr) or [MLTATR](#mltatr) whenever the VDP is initialized via the [INIT32](#init32), [INIGRP](#inigrp) or [INIMLT](#inimlt) standard routines.
1050
+
1051
+ <a name="f92ah"></a><a name="cloc"></a>
1052
+ <a name="f92ch"></a><a name="cmask"></a>
1053
+
1054
+ ```
1055
+ F92AH CLOC: DEFW 0000H ; Pixel location
1056
+ F92CH CMASK: DEFB 80H ; Pixel Mask
1057
+ ```
1058
+
1059
+ These variables contain the current pixel physical address used by the [RIGHTC](#rightc), [LEFTC](#leftc), [UPC](#upc), [TUPC](#tupc), [DOWNC](#downc), [TDOWNC](#tdownc), [FETCHC](#fetchc), [STOREC](#storec), [READC](#readc), [SETC](#setc), [NSETCX](#nsetcx), [SCANR](#scanr) and [SCANL](#scanl) standard routines. [CLOC](#cloc) holds the address of the byte containing the current pixel and [CMASK](#cmask) defines the pixel within that byte.
1060
+
1061
+ <a name="f92dh"></a><a name="mindel"></a>
1062
+
1063
+ F92DH MINDEL: DEFW 0000H
1064
+
1065
+ This variable is used by the "`LINE`" statement handler to hold the minimum difference between the end points of the line.
1066
+
1067
+ <a name="f92fh"></a><a name="maxdel"></a>
1068
+
1069
+ F92FH MAXDEL: DEFW 0000H
1070
+
1071
+ This variable is used by the "`LINE`" statement handler to hold the maximum difference between the end points of the line.
1072
+
1073
+ <a name="f931h"></a><a name="aspect"></a>
1074
+
1075
+ F931H ASPECT: DEFW 0000H
1076
+
1077
+ This variable is used by the "`CIRCLE`" statement handler to hold the current aspect ratio. This is stored as a single byte binary fraction so an aspect ratio of 0.75 would become 00C0H. The MSB is only required if the aspect ratio is exactly 1.00, that is 0100H.
1078
+
1079
+ <a name="f933h"></a><a name="cencnt"></a>
1080
+
1081
+ F933H CENCNT: DEFW 0000H
1082
+
1083
+ This variable is used by the "`CIRCLE`" statement handler to hold the point count of the end angle.
1084
+
1085
+ <a name="f935h"></a><a name="clinef"></a>
1086
+
1087
+ F935H CLINEF: DEFB 00H
1088
+
1089
+ This variable is used by the "`CIRCLE`" statement handler to hold the two line flags. Bit 0 is set if a line is required from the start angle to the centre and bit 7 set if one is required from the end angle.
1090
+
1091
+ <a name="f936h"></a><a name="cnpnts"></a>
1092
+
1093
+ F936H CNPNTS: DEFW 0000H
1094
+
1095
+ This variable is used by the "`CIRCLE`" statement handler to hold the number of points within a forty-five degree segment.
1096
+
1097
+ <a name="f938h"></a><a name="cplotf"></a>
1098
+
1099
+ F938H CPLOTF: DEFB 00H
1100
+
1101
+ This variable is normally zero but is set by the "`CIRCLE`" statement handler if the end angle is smaller than the start angle. It is used to determine whether the pixels should be set "inside" the angles or "outside" them.
1102
+
1103
+ <a name="f939h"></a><a name="cpcnt"></a>
1104
+
1105
+ F939H CPCNT: DEFW 0000H
1106
+
1107
+ This variable is used by the "`CIRCLE`" statement handler to hold the point count within the current forty-five degree segment, this is in fact the Y coordinate.
1108
+
1109
+ <a name="f93bh"></a><a name="cpcnt8"></a>
1110
+
1111
+ F93BH CPCNT8: DEFW 0000H
1112
+
1113
+ This variable is used by the "`CIRCLE`" statement handler to hold the total point count of the present position.
1114
+
1115
+ <a name="f93dh"></a><a name="crcsum"></a>
1116
+
1117
+ F93DH CRCSUM: DEFW 0000H
1118
+
1119
+ This variable is used by the "`CIRCLE`" statement handler as the point computation counter.
1120
+
1121
+ <a name="f93fh"></a><a name="cstcnt"></a>
1122
+
1123
+ F93FH CSTCNT: DEFW 0000H
1124
+
1125
+ This variable is used by the "`CIRCLE`" statement handler to hold the point count of the start angle.
1126
+
1127
+ <a name="f941h"></a><a name="csclxy"></a>
1128
+
1129
+ F941H CSCLXY: DEFB 00H
1130
+
1131
+ This variable is used by the "`CIRCLE`" statement handler as a flag to determine in which direction the elliptic squash is to be applied: 00H=Y, 01H=X.
1132
+
1133
+ <a name="f942h"></a><a name="csavea"></a>
1134
+
1135
+ F942H CSAVEA: DEFW 0000H
1136
+
1137
+ This variable is used for temporary storage by the [SCANR](#scanr) standard routine.
1138
+
1139
+ <a name="f944h"></a><a name="csavem"></a>
1140
+
1141
+ F944H CSAVEM: DEFB 00h
1142
+
1143
+ This variable is used for temporary storage by the [SCANR](#scanr) standard routine.
1144
+
1145
+ <a name="f945h"></a><a name="cxoff"></a>
1146
+
1147
+ F945H CXOFF: DEFW 0000H
1148
+
1149
+ This variable is used for temporary storage by the "`CIRCLE`" statement handler.
1150
+
1151
+ <a name="f947h"></a><a name="cyoff"></a>
1152
+
1153
+ F947H CYOFF: DEFW 0000H
1154
+
1155
+ This variable is used for temporary storage by the "`CIRCLE`" statement handler.
1156
+
1157
+ <a name="f949h"></a><a name="lohmsk"></a>
1158
+
1159
+ F949H LOHMSK: DEFB 00H
1160
+
1161
+ This variable is used by the "`PAINT`" statement handler to hold the leftmost position of a LH excursion.
1162
+
1163
+ <a name="f94ah"></a><a name="lohdir"></a>
1164
+
1165
+ F94AH LOHDIR: DEFB 00H
1166
+
1167
+ This variable is used by the "`PAINT`" statement handler to hold the new paint direction required by a LH excursion.
1168
+
1169
+ <a name="f94bh"></a><a name="lohadr"></a>
1170
+
1171
+ F94BH LOHADR: DEFW 0000H
1172
+
1173
+ This variable is used by the "`PAINT`" statement handler to hold the leftmost position of a LH excursion.
1174
+
1175
+ <a name="f94dh"></a><a name="lohcnt"></a>
1176
+
1177
+ F94DH LOHCNT: DEFW 0000H
1178
+
1179
+ This variable is used by the "`PAINT`" statement handler to hold the size of a LH excursion.
1180
+
1181
+ <a name="f94fh"></a><a name="skpcnt"></a>
1182
+
1183
+ F94FH SKPCNT: DEFW 0000H
1184
+
1185
+ This variable is used by the "`PAINT`" statement handler to hold the skip count returned by the [SCANR](#scanr) standard routine.
1186
+
1187
+ <a name="f951h"></a><a name="movcnt"></a>
1188
+
1189
+ F951H MOVCNT: DEFW 0000H
1190
+
1191
+ This variable is used by the "`PAINT`" statement handler to hold the movement count returned by the [SCANR](#scanr) standard routine.
1192
+
1193
+ <a name="f953h"></a><a name="pdirec"></a>
1194
+
1195
+ F953H PDIREC: DEFB 00H
1196
+
1197
+ This variable is used by the "`PAINT`" statement handler to hold the current paint direction: 40H=Down, C0H=Up, 00H=Terminate.
1198
+
1199
+ <a name="f954h"></a><a name="lfprog"></a>
1200
+
1201
+ F954H LFPROG: DEFB 00H
1202
+
1203
+ This variable is normally zero but is set by the "`PAINT`" statement handler if there has been any leftwards progress.
1204
+
1205
+ <a name="f955h"></a><a name="rtprog"></a>
1206
+
1207
+ F955H RTPROG: DEFB 00H
1208
+
1209
+ This variable is normally zero but is set by the "`PAINT`" statement handler if there has been any rightwards progress.
1210
+
1211
+ <a name="f956h"></a><a name="mcltab"></a>
1212
+
1213
+ F956H MCLTAB: DEFW 0000H
1214
+
1215
+ This variable contains the address of the command table to be used by the macro language parser. The "`DRAW`" table is at 5D83H and the "`PLAY`" table at 752EH.
1216
+
1217
+ <a name="f958h"></a><a name="mclflg"></a>
1218
+
1219
+ F958H MCLFLG: DEFB 00H
1220
+
1221
+ This variable is zero if the macro language parser is being used by the "`DRAW`", statement handler and non-zero if it is being used by "`PLAY`".
1222
+
1223
+ <a name="f959h"></a><a name="quetab"></a>
1224
+ <a name="f95ah"></a>
1225
+ <a name="f95bh"></a>
1226
+ <a name="f95ch"></a>
1227
+ <a name="f95dh"></a>
1228
+ <a name="f95fh"></a>
1229
+ <a name="f960h"></a>
1230
+ <a name="f961h"></a>
1231
+ <a name="f962h"></a>
1232
+ <a name="f963h"></a>
1233
+ <a name="f965h"></a>
1234
+ <a name="f966h"></a>
1235
+ <a name="f967h"></a>
1236
+ <a name="f968h"></a>
1237
+ <a name="f969h"></a>
1238
+ <a name="f96bh"></a>
1239
+ <a name="f96ch"></a>
1240
+ <a name="f96dh"></a>
1241
+ <a name="f96eh"></a>
1242
+ <a name="f96fh"></a>
1243
+
1244
+ ```
1245
+ F959H QUETAB: DEFB 00H ; AQ Put position
1246
+ F95AH DEFB 00H ; AQ Get position
1247
+ F95BH DEFB 00H ; AQ Putback flag
1248
+ F95CH DEFB 7FH ; AQ Size
1249
+ F95DH DEFW F975H ; AQ Address
1250
+
1251
+ F95FH DEFB 00H ; BQ Put position
1252
+ F960H DEFB 00H ; BQ Get position
1253
+ F961H DEFB 00H ; BQ Putback flag
1254
+ F962H DEFB 7FH ; BQ Size
1255
+ F963H DEFW F9F5H ; BQ Address
1256
+
1257
+ F965H DEFB 00H ; CQ Put position
1258
+ F966H DEFB 00H ; CQ Get position
1259
+ F967H DEFB 00H ; CQ Putback flag
1260
+ F968H DEFB 7FH ; CQ Size
1261
+ F969H DEFW FA75H ; CQ Address
1262
+
1263
+ F96BH DEFB 00H ; RQ Put position
1264
+ F96CH DEFB 00H ; RQ Get position
1265
+ F96DH DEFB 00H ; RQ Putback flag
1266
+ F96EH DEFB 00H ; RQ Size
1267
+ F96FH DEFW 0000H ; RQ Address
1268
+ ```
1269
+
1270
+ These twenty-four variables form the control blocks for the three music queues ([VOICAQ](#voicaq), [VOICBQ](#voicbq) and [VOICCQ](#voiccq)) and the RS232 queue. The three music control blocks are initialized by the [GICINI](#gicini) standard routine and thereafter maintained by the interrupt handler and the [PUTQ](#putq) standard routine. The RS232 control block is unused in the current MSX ROM.
1271
+
1272
+ <a name="f971h"></a><a name="quebak"></a>
1273
+ <a name="f972h"></a>
1274
+ <a name="f973h"></a>
1275
+ <a name="f974h"></a>
1276
+
1277
+ ```
1278
+ F971H QUEBAK: DEFB 00H ; AQ Putback character
1279
+ F972H DEFB 00H ; BQ Putback character
1280
+ F973H DEFB 00H ; CQ Putback character
1281
+ F974H DEFB 00H ; RQ Putback character
1282
+ ```
1283
+
1284
+ These four variables are used to hold any unwanted character returned to the associated queue. Although the putback facility is implemented in the MSX ROM it is currently unused.
1285
+
1286
+ <a name="f975h"></a><a name="voicaq"></a>
1287
+ <a name="f9f5h"></a><a name="voicbq"></a>
1288
+ <a name="fa75h"></a><a name="voiccq"></a>
1289
+ <a name="faf5h"></a><a name="rs2iq"></a>
1290
+
1291
+ ```
1292
+ F975H VOICAQ: DEFS 128 ; Voice A queue
1293
+ F9F5H VOICBQ: DEFS 128 ; Voice B queue
1294
+ FA75H VOICCQ: DEFS 128 ; Voice C queue
1295
+ FAF5H RS2IQ: DEFS 64 ; RS232 queue
1296
+ ```
1297
+
1298
+ These four buffers contain the three music queues and the RS232 queue, the latter is unused.
1299
+
1300
+ <a name="fb35h"></a><a name="prscnt"></a>
1301
+
1302
+ FB35H PRSCNT: DEFB 00H
1303
+
1304
+ This variable is used by the "`PLAY`" statement handler to count the number of completed operand strings. Bit 7 is also set after each of the three operands has been parsed to prevent repeated activation of the [STRTMS](#strtms) standard routine.
1305
+
1306
+ <a name="fb36h"></a><a name="savsp"></a>
1307
+
1308
+ FB36H SAVSP: DEFW 0000H
1309
+
1310
+ This variable is used by the "`PLAY`" statement handler to save the Z80 SP before control transfers to the macro language parser. Its value is compared with the SP on return to determine whether any data has been left on the stack because of a queue-full termination by the parser.
1311
+
1312
+ <a name="fb38h"></a><a name="voicen"></a>
1313
+
1314
+ FB38H VOICEN: DEFB 00H
1315
+
1316
+ This variable contains the current voice number being processed by the "`PLAY`" statement handler. The values 0, 1 and 2 correspond to PSG channels A, B and C.
1317
+
1318
+ <a name="fb39h"></a><a name="savvol"></a>
1319
+
1320
+ FB39H SAVVOL: DEFW 0000H
1321
+
1322
+ This variable is used by the "`PLAY`" statement "`R`" command handler to save the current volume setting while a zero-amplitude rest is generated.
1323
+
1324
+ <a name="fb3bh"></a><a name="mcllen"></a>
1325
+
1326
+ FB3BH MCLLEN: DEFB 00H
1327
+
1328
+ This variable is used by the macro language parser to hold the length of the string operand being parsed.
1329
+
1330
+ <a name="fb3ch"></a><a name="mclptr"></a>
1331
+
1332
+ FB3CH MCLPTR: DEFW 0000H
1333
+
1334
+ This variable is used by the macro language parser to hold the address of the string operand being parsed.
1335
+
1336
+ <a name="fb3eh"></a><a name="queuen"></a>
1337
+
1338
+ FB3EH QUEUEN: DEFB 00H
1339
+
1340
+ This variable is used by the interrupt handler to hold the number of the music queue currently being processed. The values 0, 1 and 2 correspond to PSG channels A, B and C.
1341
+
1342
+ <a name="fb3fh"></a><a name="musicf"></a>
1343
+
1344
+ FB3FH MUSICF: DEFB 00H
1345
+
1346
+ This variable contains three bit flags set by the [STRTMS](#strtms) standard routine to initiate processing of a music queue by the interrupt handler. Bits 0, 1 and 2 correspond to [VOICAQ](#voicaq), [VOICBQ](#voicbq) and [VOICCQ](#voiccq).
1347
+
1348
+ <a name="fb40h"></a><a name="plycnt"></a>
1349
+
1350
+ FB40H PLYCNT: DEFB 00H
1351
+
1352
+ This variable is used by the [STRTMS](#strtms) standard routine to hold the number of "`PLAY`" statement sequences currently held in the music queues. It is examined when all three end of queue marks have been found for one sequence to determine whether dequeueing should be restarted.
1353
+
1354
+ <a name="fb41h"></a><a name="vcba"></a>
1355
+ <a name="fb43h"></a>
1356
+ <a name="fb44h"></a>
1357
+ <a name="fb46h"></a>
1358
+ <a name="fb48h"></a>
1359
+ <a name="fb49h"></a>
1360
+ <a name="fb50h"></a>
1361
+ <a name="fb51h"></a>
1362
+ <a name="fb52h"></a>
1363
+ <a name="fb53h"></a>
1364
+ <a name="fb54h"></a>
1365
+ <a name="fb56h"></a>
1366
+
1367
+ ```
1368
+ FB41H VCBA: DEFW 0000H ; Duration counter
1369
+ FB43H DEFB 00H ; String length
1370
+ FB44H DEFW 0000H ; String address
1371
+ FB46H DEFW 0000H ; Stack data address
1372
+ FB48H DEFB 00H ; Music packet length
1373
+ FB49H DEFS 7 ; Music packet
1374
+ FB50H DEFB 04H ; Octave
1375
+ FB51H DEFB 04H ; Length
1376
+ FB52H DEFB 78H ; Tempo
1377
+ FB53H DEFB 88H ; Volume
1378
+ FB54H DEFW 00FFH ; Envelope period
1379
+ FB56H DEFS 16 ; Space for stack data
1380
+ ```
1381
+
1382
+ This thirty-seven byte buffer is used by the "`PLAY`" statement handler to hold the current parameters for voice A.
1383
+
1384
+ <a name="fb66h"></a><a name="vcbb"></a>
1385
+
1386
+ FB66H VCBB: DEFS 37
1387
+
1388
+ This buffer is used by the "`PLAY`" statement handler to hold the current parameters for voice B, its structure is the same as [VCBA](#vcba).
1389
+
1390
+ <a name="fb8bh"></a><a name="vcbc"></a>
1391
+
1392
+ FB8BH VCBC: DEFS 37
1393
+
1394
+ This buffer is used by the "`PLAY`" statement handler to hold the current parameters for voice C, its structure is the same as [VCBA](#vcba).
1395
+
1396
+ <a name="fbb0h"></a><a name="enstop"></a>
1397
+
1398
+ FBB0H ENSTOP: DEFB 00H
1399
+
1400
+ This variable determines whether the interrupt handler will execute a warm start to the Interpreter upon detecting the keys CODE, GRAPH, CTRL and SHIFT depressed together: 00H=Disable, NZ=Enable.
1401
+
1402
+ <a name="fbb1h"></a><a name="basrom"></a>
1403
+
1404
+ FBB1H BASROM: DEFB 00H
1405
+
1406
+ This variable determines whether the [ISCNTC](#iscntc) and [INLIN](#inlin) standard routines will respond to the CTRL-STOP key: 00H=Enable, NZ=Disable. It is used to prevent termination of a BASIC ROM located during the power-up ROM search.
1407
+
1408
+ <a name="fbb2h"></a><a name="linttb"></a>
1409
+
1410
+ FBB2H LINTTB: DEFS 24
1411
+
1412
+ Each of these twenty-four variables is normally non-zero but is zeroed if the contents of the corresponding screen row have overflowed onto the next row. They are maintained by the BIOS but only actually used by the [INLIN](#inlin) standard routine (the screen editor) to discriminate between logical and physical lines.
1413
+
1414
+ <a name="fbcah"></a><a name="fstpos"></a>
1415
+
1416
+ FBCAH FSTPOS: DEFW 0000H
1417
+
1418
+ This variable is used to hold the cursor coordinates upon entry to the [INLIN](#inlin) standard routine. Its function is to restrict the extent of backtracking performed when the text is collected from the screen at termination.
1419
+
1420
+ <a name="fbcch"></a><a name="cursav"></a>
1421
+
1422
+ FBCCH CURSAV: DEFB 00H
1423
+
1424
+ This variable is used to hold the screen character replaced by the text cursor.
1425
+
1426
+ <a name="fbcdh"></a><a name="fnkswi"></a>
1427
+
1428
+ FBCDH FNKSWI: DEFB 00H
1429
+
1430
+ This variable is used by the [CHSNS](#chsns) standard routine to determine whether the shifted or unshifted function keys are currently displayed: 00H=Shifted, 01H=Unshifted.
1431
+
1432
+ <a name="fbceh"></a><a name="fnkflg"></a>
1433
+
1434
+ FBCEH FNKFLG: DEFS 10
1435
+
1436
+ Each of these ten variables is normally zero but is set to 01H if the associated function key has been turned on by a "`KEY(n) ON`" statement. They are used by the interrupt handler to determine whether, in program mode only, it should return a character string or update the associated entry in [TRPTBL](#trptbl).
1437
+
1438
+ <a name="fbd8h"></a><a name="ongsbf"></a>
1439
+
1440
+ FBD8H ONGSBF: DEFB 00H
1441
+
1442
+ This variable is normally zero but is incremented by the interrupt handler whenever a device has achieved the conditions necessary to generate a program interrupt. It is used by the Runloop to determine whether any program interrupts are pending without having to search [TRPTBL](#trptbl).
1443
+
1444
+ <a name="fbd9h"></a><a name="clikfl"></a>
1445
+
1446
+ FBD9H CLIKFL: DEFB 00H
1447
+
1448
+ This variable is used internally by the interrupt handler to prevent spurious key clicks when returning multiple characters from a single key depression such as a function key.
1449
+
1450
+ <a name="fbdah"></a><a name="oldkey"></a>
1451
+
1452
+ FBDAH OLDKEY: DEFS 11
1453
+
1454
+ This buffer is used by the interrupt handler to hold the previous state of the keyboard matrix, each byte contains one row of keys starting with row 0.
1455
+
1456
+ <a name="fbe5h"></a><a name="newkey"></a>
1457
+
1458
+ FBE5H NEWKEY: DEFS 11
1459
+
1460
+ This buffer is used by the interrupt handler to hold the current state of the keyboard matrix. Key transitions are detected by comparison with the contents of [OLDKEY](#oldkey) after which [OLDKEY](#oldkey) is updated with the current state.
1461
+
1462
+ <a name="fbf0h"></a><a name="keybuf"></a>
1463
+
1464
+ FBF0H KEYBUF: DEFS 40
1465
+
1466
+ This buffer contains the decoded keyboard characters produced by the interrupt handler. Note that the buffer is organized as a circular queue driven by [GETPNT](#getpnt) and [PUTPNT](#putpnt) and consequently has no fixed starting point.
1467
+
1468
+ <a name="fc18h"></a><a name="linwrk"></a>
1469
+
1470
+ FC18H LINWRK: DEFS 40
1471
+
1472
+ This buffer is used by the BIOS to hold a complete line of screen characters.
1473
+
1474
+ <a name="fc40h"></a><a name="patwrk"></a>
1475
+
1476
+ FC40H PATWRK: DEFS 8
1477
+
1478
+ This buffer is used by the BIOS to hold an 8x8 pixel pattern.
1479
+
1480
+ <a name="fc48h"></a><a name="bottom"></a>
1481
+
1482
+ FC48H BOTTOM: DEFW 8000H
1483
+
1484
+ This variable contains the address of the lowest RAM location used by the Interpreter. Its value is set at power-up and thereafter unaltered.
1485
+
1486
+ <a name="fc4ah"></a><a name="himem"></a>
1487
+
1488
+ FC4AH HIMEM: DEFW F380H
1489
+
1490
+ This variable contains the address of the byte following the highest RAM location used by the Interpreter. Its value is set at power-up and thereafter only altered by the "`CLEAR`" statement.
1491
+
1492
+ <a name="fc4ch"></a><a name="trptbl"></a>
1493
+ <a name="fc4fh"></a>
1494
+ <a name="fc52h"></a>
1495
+ <a name="fc55h"></a>
1496
+ <a name="fc58h"></a>
1497
+ <a name="fc5bh"></a>
1498
+ <a name="fc5eh"></a>
1499
+ <a name="fc61h"></a>
1500
+ <a name="fc64h"></a>
1501
+ <a name="fc67h"></a>
1502
+ <a name="fc6ah"></a>
1503
+ <a name="fc6dh"></a>
1504
+ <a name="fc70h"></a>
1505
+ <a name="fc73h"></a>
1506
+ <a name="fc76h"></a>
1507
+ <a name="fc79h"></a>
1508
+ <a name="fc7ch"></a>
1509
+ <a name="fc7fh"></a>
1510
+ <a name="fc82h"></a>
1511
+ <a name="fc85h"></a>
1512
+ <a name="fc88h"></a>
1513
+ <a name="fc8bh"></a>
1514
+ <a name="fc8eh"></a>
1515
+ <a name="fc91h"></a>
1516
+ <a name="fc94h"></a>
1517
+ <a name="fc97h"></a>
1518
+
1519
+ ```
1520
+ FC4CH TRPTBL: DEFS 3 ; KEY 1
1521
+ FC4FH DEFS 3 ; KEY 2
1522
+ FC52H DEFS 3 ; KEY 3
1523
+ FC55H DEFS 3 ; KEY 4
1524
+ FC58H DEFS 3 ; KEY 5
1525
+ FC5BH DEFS 3 ; KEY 6
1526
+ FC5EH DEFS 3 ; KEY 7
1527
+ FC61H DEFS 3 ; KEY 8
1528
+ FC64H DEFS 3 ; KEY 9
1529
+ FC67H DEFS 3 ; KEY 10
1530
+ FC6AH DEFS 3 ; STOP
1531
+ FC6DH DEFS 3 ; SPRITE
1532
+ FC70H DEFS 3 ; STRIG 0
1533
+ FC73H DEFS 3 ; STRIG 1
1534
+ FC76H DEFS 3 ; STRIG 2
1535
+ FC79H DEFS 3 ; STRIG 3
1536
+ FC7CH DEFS 3 ; STRIG 4
1537
+ FC7FH DEFS 3 ; INTERVAL
1538
+ FC82H DEFS 3 ; Unused
1539
+ FC85H DEFS 3 ; Unused
1540
+ FC88H DEFS 3 ; Unused
1541
+ FC8BH DEFS 3 ; Unused
1542
+ FC8EH DEFS 3 ; Unused
1543
+ FC91H DEFS 3 ; Unused
1544
+ FC94H DEFS 3 ; Unused
1545
+ FC97H DEFS 3 ; Unused
1546
+ ```
1547
+
1548
+ These twenty-six three byte variables hold the current state of the interrupt generating devices. The first byte of each entry contains the device status (bit 0=On, bit 1=Stop, bit 2=Event active) and is updated by the interrupt handler, the Runloop interrupt processor and the "`DEVICE 0=ON/OFF/STOP`" and "`RETURN`" statement handlers. The remaining two bytes of each entry are set by the "`ON DEVICE GOSUB`" statement handler and contain the address of the program line to execute upon a program interrupt.
1549
+
1550
+ <a name="fc9ah"></a><a name="rtycnt"></a>
1551
+
1552
+ FC9AH RTYCNT: DEFB 00H
1553
+
1554
+ This variable is unused by the current MSX ROM.
1555
+
1556
+ <a name="fc9bh"></a><a name="intflg"></a>
1557
+
1558
+ FC9BH INTFLG: DEFB 00H
1559
+
1560
+ This variable is normally zero but is set to 03H or 04H if the CTRL-STOP or STOP keys are detected by the interrupt handler.
1561
+
1562
+ <a name="fc9ch"></a><a name="pady"></a>
1563
+
1564
+ FC9CH PADY: DEFB 00H
1565
+
1566
+ This variable contains the Y coordinate of the last point detected by a touchpad.
1567
+
1568
+ <a name="fc9dh"></a><a name="padx"></a>
1569
+
1570
+ FC9DH PADX: DEFB 00H
1571
+
1572
+ This variable contains the X coordinate of the last point detected by a touchpad.
1573
+
1574
+ <a name="fc9eh"></a><a name="jiffy"></a>
1575
+
1576
+ FC9EH JIFFY: DEFW 0000H
1577
+
1578
+ This variable is continually incremented by the interrupt handler. Its value may be set or read by the "`TIME`" statement or function.
1579
+
1580
+ <a name="fca0h"></a><a name="intval"></a>
1581
+
1582
+ FCA0H INTVAL: DEFW 0000H
1583
+
1584
+ This variable holds the interval duration set by the "`ON INTERVAL`" statement handler.
1585
+
1586
+ <a name="fca2h"></a><a name="intcnt"></a>
1587
+
1588
+ FCA2H INTCNT: DEFW 0000H
1589
+
1590
+ This variable is continually decremented by the interrupt handler. When zero is reached its value is reset from [INTVAL](#intval) and, if applicable, a program interrupt generated. Note that this variable always counts irrespective of whether an "`INTERVAL ON`" statement is active.
1591
+
1592
+ <a name="fca4h"></a><a name="lowlim"></a>
1593
+
1594
+ FCA4H LOWLIM: DEFB 31H
1595
+
1596
+ This variable is used to hold the minimum allowable start bit duration as determined by the [TAPION](#tapion) standard routine.
1597
+
1598
+ <a name="fca5h"></a><a name="winwid"></a>
1599
+
1600
+ FCA5H WINWID: DEFB 22H
1601
+
1602
+ This variable is used to hold the LO/HI cycle discrimination duration as determined by the [TAPION](#tapion) standard routine.
1603
+
1604
+ <a name="fca6h"></a><a name="grphed"></a>
1605
+
1606
+ FCA6H GRPHED: DEFB 00H
1607
+
1608
+ This variable is normally zero but is set to 01H by the [CNVCHR](#cnvchr) standard routine upon detection of a graphic header code.
1609
+
1610
+ <a name="fca7h"></a><a name="esccnt"></a>
1611
+
1612
+ FCA7H ESCCNT: DEFB 00H
1613
+
1614
+ This variable is used by the [CHPUT](#chput) standard routine ESC sequence processor to count escape parameters.
1615
+
1616
+ <a name="fca8h"></a><a name="insflg"></a>
1617
+
1618
+ FCA8H INSFLG: DEFB 00H
1619
+
1620
+ This variable is normally zero but is set to FFH by the [INLIN](#inlin) standard routine when insert mode is on.
1621
+
1622
+ <a name="fca9h"></a><a name="csrsw"></a>
1623
+
1624
+ FCA9H CSRSW: DEFB 00H
1625
+
1626
+ If this variable is zero the cursor is only displayed while the [CHGET](#chget) standard routine is waiting for a keyboard character. If it is non-zero the cursor is permanently displayed via the [CHPUT](#chput) standard routine.
1627
+
1628
+ <a name="fcaah"></a><a name="cstyle"></a>
1629
+
1630
+ FCAAH CSTYLE: DEFB 00H
1631
+
1632
+ This variable determines the cursor style: 00H=Block, NZ=Underline.
1633
+
1634
+ <a name="fcabh"></a><a name="capst"></a>
1635
+
1636
+ FCABH CAPST: DEFB 00H
1637
+
1638
+ This variable is used by the interrupt handler to hold the current caps lock status: 00H=Off, NZ=On.
1639
+
1640
+ <a name="fcach"></a><a name="kanast"></a>
1641
+
1642
+ FCACH KANAST: DEFB 00H
1643
+
1644
+ This variable is used to hold the keyboard Kana lock status on Japanese machines and the DEAD key status on European machines.
1645
+
1646
+ <a name="fcadh"></a><a name="kanamd"></a>
1647
+
1648
+ FCADH KANAMD: DEFB 00H
1649
+
1650
+ This variable holds a keyboard mode on Japanese machines only.
1651
+
1652
+ <a name="fcaeh"></a><a name="flbmem"></a>
1653
+
1654
+ FCAEH FLBMEM: DEFB 00H
1655
+
1656
+ This variable is set by the file I/O error generators but is otherwise unused.
1657
+
1658
+ <a name="fcafh"></a><a name="scrmod"></a>
1659
+
1660
+ FCAFH SCRMOD: DEFB 00H
1661
+
1662
+ This variable contains the current screen mode: 0=[40x24 Text Mode](#40x24_text_mode), 1=[32x24 Text Mode](#32x24_text_mode), 2=[Graphics Mode](#graphics_mode), 3=[Multicolour Mode](#multicolour_mode).
1663
+
1664
+ <a name="fcb0h"></a><a name="oldscr"></a>
1665
+
1666
+ FCB0H OLDSCR: DEFB 00H
1667
+
1668
+ This variable holds the screen mode of the last text mode set.
1669
+
1670
+ <a name="fcb1h"></a><a name="casprv"></a>
1671
+
1672
+ FCB1H CASPRV: DEFB 00H
1673
+
1674
+ This variable is used to hold any character returned to an I/O buffer by the cassette putback function.
1675
+
1676
+ <a name="fcb2h"></a><a name="bdratr"></a>
1677
+
1678
+ FCB2H BDRATR: DEFB 00H
1679
+
1680
+ This variable contains the boundary colour for the "`PAINT`" statement handler. Its value is set by the [PNTINI](#pntini) standard routine and used by the [SCANR](#scanr) and [SCANL](#scanl) standard routines.
1681
+
1682
+ <a name="fcb3h"></a><a name="gxpos"></a>
1683
+
1684
+ FCB3H GXPOS: DEFW 0000H
1685
+
1686
+ This variable is used for temporary storage of a graphics X coordinate.
1687
+
1688
+ <a name="fcb5h"></a><a name="gypos"></a>
1689
+
1690
+ FCB5H GYPOS: DEFW 0000H
1691
+
1692
+ This variable is used for temporary storage of a graphics Y coordinate.
1693
+
1694
+ <a name="fcb7h"></a><a name="grpacx"></a>
1695
+
1696
+ FCB7H GRPACX: DEFW 0000H
1697
+
1698
+ This variable contains the current graphics X coordinate for the [GRPPRT](#grpprt) standard routine.
1699
+
1700
+ <a name="fcb9h"></a><a name="grpacy"></a>
1701
+
1702
+ FCB9H GRPACY: DEFW 0000H
1703
+
1704
+ This variable contains the current graphics Y coordinate for the [GRPPRT](#grpprt) standard routine.
1705
+
1706
+ <a name="fcbbh"></a><a name="drwflg"></a>
1707
+
1708
+ FCBBH DRWFLG: DEFB 00H
1709
+
1710
+ Bits 6 and 7 of this variable are set by the "`DRAW`" statement "`N`" and "`B`" command handlers to turn the associated mode on.
1711
+
1712
+ <a name="fcbch"></a><a name="drwscl"></a>
1713
+
1714
+ FCBCH DRWSCL: DEFB 00H
1715
+
1716
+ This variable is used by the "`DRAW`" statement "`S`" command handler to hold the current scale factor.
1717
+
1718
+ <a name="fcbdh"></a><a name="drwang"></a>
1719
+
1720
+ FCBDH DRWANG: DEFB 00H
1721
+
1722
+ This variable is used by the "`DRAW`" statement "`A`" command handler to hold the current angle.
1723
+
1724
+ <a name="fcbeh"></a><a name="runbnf"></a>
1725
+
1726
+ FCBEH RUNBNF: DEFB 00H
1727
+
1728
+ This variable is normally zero but is set by the "`BLOAD`" statement handler when an auto-run "`R`" parameter is specified.
1729
+
1730
+ <a name="fcbfh"></a><a name="savent"></a>
1731
+
1732
+ FCBFH SAVENT: DEFW 0000H
1733
+
1734
+ This variable contains the "`BSAVE`" and "`BLOAD`" entry address.
1735
+
1736
+ <a name="fcc1h"></a><a name="exptbl"></a>
1737
+ <a name="fcc2h"></a>
1738
+ <a name="fcc3h"></a>
1739
+ <a name="fcc4h"></a>
1740
+
1741
+ ```
1742
+ FCC1H EXPTBL: DEFB 00H ; Primary Slot 0
1743
+ FCC2H DEFB 00H ; Primary Slot 1
1744
+ FCC3H DEFB 00H ; Primary Slot 2
1745
+ FCC4H DEFB 00H ; Primary Slot 3
1746
+ ```
1747
+
1748
+ Each of these four variables is normally zero but is set to 80H during the power-up RAM search if the associated Primary Slot is found to be expanded.
1749
+
1750
+ <a name="fcc5h"></a><a name="slttbl"></a>
1751
+ <a name="fcc6h"></a>
1752
+ <a name="fcc7h"></a>
1753
+ <a name="fcc8h"></a>
1754
+
1755
+ ```
1756
+ FCC5H SLTTBL: DEFB 00H ; Primary Slot 0
1757
+ FCC6H DEFB 00H ; Primary Slot 1
1758
+ FCC7H DEFB 00H ; Primary Slot 2
1759
+ FCC8H DEFB 00H ; Primary Slot 3
1760
+ ```
1761
+
1762
+ These four variables duplicate the contents of the four possible Secondary Slot Registers. The contents of each variable should only be regarded as valid if [EXPTBL](#exptbl) shows the associated Primary Slot to be expanded.
1763
+
1764
+ <a name="fcc9h"></a><a name="sltatr"></a>
1765
+ <a name="fccdh"></a>
1766
+ <a name="fcd1h"></a>
1767
+ <a name="fcd5h"></a>
1768
+ <a name="fcd9h"></a>
1769
+ <a name="fcddh"></a>
1770
+ <a name="fce1h"></a>
1771
+ <a name="fce5h"></a>
1772
+ <a name="fce9h"></a>
1773
+ <a name="fcedh"></a>
1774
+ <a name="fcf1h"></a>
1775
+ <a name="fcf5h"></a>
1776
+ <a name="fcf9h"></a>
1777
+ <a name="fcfdh"></a>
1778
+ <a name="fd01h"></a>
1779
+ <a name="fd05h"></a>
1780
+
1781
+ ```
1782
+ FCC9H SLTATR: DEFS 4 ; PS0, SS0
1783
+ FCCDH DEFS 4 ; PS0, SS1
1784
+ FCD1H DEFS 4 ; PS0, SS2
1785
+ FCD5H DEFS 4 ; PS0, SS3
1786
+
1787
+ FCD9H DEFS 4 ; PS1, SS0
1788
+ FCDDH DEFS 4 ; PS1, SS1
1789
+ FCE1H DEFS 4 ; PS1, SS2
1790
+ FCE5H DEFS 4 ; PS1, SS3
1791
+
1792
+ FCE9H DEFS 4 ; PS2, SS0
1793
+ FCEDH DEFS 4 ; PS2, SS1
1794
+ FCF1H DEFS 4 ; PS2, SS2
1795
+ FCF5H DEFS 4 ; PS2, SS3
1796
+
1797
+ FCF9H DEFS 4 ; PS3, SS0
1798
+ FCFDH DEFS 4 ; PS3, SS1
1799
+ FD01H DEFS 4 ; PS3, SS2
1800
+ FD05H DEFS 4 ; PS3, SS3
1801
+ ```
1802
+
1803
+ These sixty-four variables contain the attributes of any extension ROMs found during the power-up ROM search. The characteristics of each 16 KB ROM are encoded into a single byte so four bytes are required for each possible slot. The encoding is:
1804
+
1805
+ ```
1806
+ Bit 7 set=BASIC program
1807
+ Bit 6 set=Device handler
1808
+ Bit 5 set=Statement handler
1809
+ ```
1810
+
1811
+ Note that the entries for page 0 (0000H to 3FFFH) and page 3 (C000H to FFFFH) will always be zero as only page 1 (4000H to 7FFFH) and page 2 (8000H to BFFFH) are actually examined. The MSX convention is that machine code extension ROMs are placed in page 1 and BASIC program ROMs in page 2.
1812
+
1813
+ <a name="fd09h"></a><a name="sltwrk"></a>
1814
+
1815
+ FD09H SLTWRK: DEFS 128
1816
+
1817
+ This buffer provides two bytes of local workspace for each of the sixty-four possible extension ROMs.
1818
+
1819
+ <a name="fd89h"></a><a name="procnm"></a>
1820
+
1821
+ FD89H PROCNM: DEFS 16
1822
+
1823
+ This buffer is used to hold a device or statement name for examination by an extension ROM.
1824
+
1825
+ <a name="fd99h"></a><a name="device"></a>
1826
+
1827
+ FD99H DEVICE: DEFB 00H
1828
+
1829
+ This variable is used to pass a device code, from 0 to 3, to an extension ROM.
1830
+
1831
+ <a name="the_hooks"></a>
1832
+ ## The Hooks
1833
+
1834
+ The section of the Workspace Area from FD9AH to FFC9H contains one hundred and twelve hooks, each of which is filled with five Z80 RET opcodes at power-up. These are called from strategic locations within the BIOS/Interpreter so that the ROM can be extended, particularly so that it can be upgraded to Disk BASIC. Each hook has sufficient room to hold a far call to any slot:
1835
+
1836
+ ```
1837
+ RST 30H
1838
+ DEFB Slot ID
1839
+ DEFW Address
1840
+ RET
1841
+ ```
1842
+
1843
+ The hooks are listed on the following pages together with the address they are called from and a brief note as to their function.
1844
+
1845
+ |ADDRESS |NAME |SIZE |FROM |FUNCTION|
1846
+ |---------------------------|-------|-------|---------------|---------------------------------|
1847
+ |<a name="fd9ah"></a>FD9AH |HKEYI: |DEFS 5 |0C4AH |Interrupt handler|
1848
+ |<a name="fd9fh"></a>FD9FH |HTIMI: |DEFS 5 |0C53H |Interrupt handler|
1849
+ |<a name="fda4h"></a>FDA4H |HCHPU: |DEFS 5 |08C0H |[CHPUT](#chput) standard routine|
1850
+ |<a name="fda9h"></a>FDA9H |HDSPC: |DEFS 5 |09E6H |Display cursor|
1851
+ |<a name="fdaeh"></a>FDAEH |HERAC: |DEFS 5 |0A33H |Erase cursor|
1852
+ |<a name="fdb3h"></a>FDB3H |HDSPF: |DEFS 5 |0B2BH |[DSPFNK](#dspfnk) standard routine|
1853
+ |<a name="fdb8h"></a>FDB8H |HERAF: |DEFS 5 |0B15H |[ERAFNK](#erafnk) standard routine|
1854
+ |<a name="fdbdh"></a>FDBDH |HTOTE: |DEFS 5 |0842H |[TOTEXT](#totext) standard routine|
1855
+ |<a name="fdc2h"></a>FDC2H |HCHGE: |DEFS 5 |10CEH |[CHGET](#chget) standard routine|
1856
+ |<a name="fdc7h"></a>FDC7H |HINIP: |DEFS 5 |071EH |Copy character set to VDP|
1857
+ |<a name="fdcch"></a>FDCCH |HKEYC: |DEFS 5 |1025H |Keyboard decoder|
1858
+ |<a name="fdd1h"></a>FDD1H |HKYEA: |DEFS 5 |0F10H |Keyboard decoder|
1859
+ |<a name="fdd6h"></a>FDD6H |HNMI: |DEFS 5 |1398H |[NMI](#nmi) standard routine|
1860
+ |<a name="fddbh"></a>FDDBH |HPINL: |DEFS 5 |23BFH |[PINLIN](#pinlin) standard routine|
1861
+ |<a name="fde0h"></a>FDE0H |HQINL: |DEFS 5 |23CCH |[QINLIN](#qinlin) standard routine|
1862
+ |<a name="fde5h"></a>FDE5H |HINLI: |DEFS 5 |23D5H |[INLIN](#inlin) standard routine|
1863
+ |<a name="fdeah"></a>FDEAH |HONGO: |DEFS 5 |7810H |"`ON DEVICE GOSUB`"|
1864
+ |<a name="fdefh"></a>FDEFH |HDSKO: |DEFS 5 |7C16H |"`DSKO$`"|
1865
+ |<a name="fdf4h"></a>FDF4H |HSETS: |DEFS 5 |7C1BH |"`SET`"|
1866
+ |<a name="fdf9h"></a>FDF9H |HNAME: |DEFS 5 |7C20H |"`NAME`"|
1867
+ |<a name="fdfeh"></a>FDFEH |HKILL: |DEFS 5 |7C25H |"`KILL`"|
1868
+ |<a name="fe03h"></a>FE03H |HIPL: |DEFS 5 |7C2AH |"`IPL`"|
1869
+ |<a name="fe08h"></a>FE08H |HCOPY: |DEFS 5 |7C2FH |"`COPY`"|
1870
+ |<a name="fe0dh"></a>FE0DH |HCMD: |DEFS 5 |7C34H |"`CMD`"|
1871
+ |<a name="fe12h"></a>FE12H |HDSKF: |DEFS 5 |7C39H |"`DSKF`"|
1872
+ |<a name="fe17h"></a>FE17H |HDSKI: |DEFS 5 |7C3EH |"`DSKI$`"|
1873
+ |<a name="fe1ch"></a>FE1CH |HATTR: |DEFS 5 |7C43H |"`ATTR$`"|
1874
+ |<a name="fe21h"></a>FE21H |HLSET: |DEFS 5 |7C48H |"`LSET`"|
1875
+ |<a name="fe26h"></a>FE26H |HRSET: |DEFS 5 |7C4DH |"`RSET`"|
1876
+ |<a name="fe2bh"></a>FE2BH |HFIEL: |DEFS 5 |7C52H |"`FIELD`"|
1877
+ |<a name="fe30h"></a>FE30H |HMKI$: |DEFS 5 |7C57H |"`MKI$`"|
1878
+ |<a name="fe35h"></a>FE35H |HMKS$: |DEFS 5 |7C5CH |"`MKS$`"|
1879
+ |<a name="fe3ah"></a>FE3AH |HMKD$: |DEFS 5 |7C61H |"`MKD$`"|
1880
+ |<a name="fe3fh"></a>FE3FH |HCVI: |DEFS 5 |7C66H |"`CVI`"|
1881
+ |<a name="fe44h"></a>FE44H |HCVS: |DEFS 5 |7C6BH |"`CVS`"|
1882
+ |<a name="fe49h"></a>FE49H |HCVD: |DEFS 5 |7C70H |"`CVD`"|
1883
+ |<a name="fe4eh"></a>FE4EH |HGETP: |DEFS 5 |6A93H |Locate FCB|
1884
+ |<a name="fe53h"></a>FE53H |HSETF: |DEFS 5 |6AB3H |Locate FCB|
1885
+ |<a name="fe58h"></a>FE58H |HNOFO: |DEFS 5 |6AF6H |"`OPEN`"|
1886
+ |<a name="fe5dh"></a>FE5DH |HNULO: |DEFS 5 |6B0FH |"`OPEN`"|
1887
+ |<a name="fe62h"></a>FE62H |HNTFL: |DEFS 5 |6B3BH |Close I/O buffer 0|
1888
+ |<a name="fe67h"></a>FE67H |HMERG: |DEFS 5 |6B63H |"`MERGE/LOAD`"|
1889
+ |<a name="fe6ch"></a>FE6CH |HSAVE: |DEFS 5 |6BA6H |"`SAVE`"|
1890
+ |<a name="fe71h"></a>FE71H |HBINS: |DEFS 5 |6BCEH |"`SAVE`"|
1891
+ |<a name="fe76h"></a>FE76H |HBINL: |DEFS 5 |6BD4H |"`MERGE/LOAD`"|
1892
+ |<a name="fe7bh"></a>FE7BH |HFILE: |DEFS 5 |6C2FH |"`FILES`"|
1893
+ |<a name="fe80h"></a>FE80H |HDGET: |DEFS 5 |6C3BH |"`GET/PUT`"|
1894
+ |<a name="fe85h"></a>FE85H |HFILO: |DEFS 5 |6C51H |Sequential output|
1895
+ |<a name="fe8ah"></a>FE8AH |HINDS: |DEFS 5 |6C79H |Sequential input|
1896
+ |<a name="fe8fh"></a>FE8FH |HRSLF: |DEFS 5 |6CD8H |"`INPUT$`"|
1897
+ |<a name="fe94h"></a>FE94H |HSAVD: |DEFS 5 |6D03H, 6D14H |"`LOC`", "`LOF`",|
1898
+ | | | |6D25H, 6D39H |"`EOF`", "`FPOS`"|
1899
+ |<a name="fe99h"></a>FE99H |HLOC: |DEFS 5 |6D0FH |"`LOC`"|
1900
+ |<a name="fe9eh"></a>FE9EH |HLOF: |DEFS 5 |6D20H |"`LOF`"|
1901
+ |<a name="fea3h"></a>FEA3H |HEOF: |DEFS 5 |6D33H |"`EOF`"|
1902
+ |<a name="fea8h"></a>FEA8H |HFPOS: |DEFS 5 |6D43H |"`FPOS`"|
1903
+ |<a name="feadh"></a>FEADH |HBAKU: |DEFS 5 |6E36H |"`LINE INPUT#`"|
1904
+ |<a name="feb2h"></a>FEB2H |HPARD: |DEFS 5 |6F15H |Parse device name|
1905
+ |<a name="feb7h"></a>FEB7H |HNODE: |DEFS 5 |6F33H |Parse device name|
1906
+ |<a name="febch"></a>FEBCH |HPOSD: |DEFS 5 |6F37H |Parse device name|
1907
+ |<a name="fec1h"></a>FEC1H |HDEVN: |DEFS 5 | |This hook is not used.|
1908
+ |<a name="fec6h"></a>FEC6H |HGEND: |DEFS 5 |6F8FH |I/O function dispatcher|
1909
+ |<a name="fecbh"></a>FECBH |HRUNC: |DEFS 5 |629AH |Run-clear|
1910
+ |<a name="fed0h"></a>FED0H |HCLEA: |DEFS 5 |62A1H |Run-clear|
1911
+ |<a name="fed5h"></a>FED5H |HLOPD: |DEFS 5 |62AFH |Run-clear|
1912
+ |<a name="fedah"></a>FEDAH |HSTKE: |DEFS 5 |62F0H |Reset stack|
1913
+ |<a name="fedfh"></a>FEDFH |HISFL: |DEFS 5 |145FH |[ISFLIO](#isflio) standard routine |
1914
+ |<a name="fee4h"></a>FEE4H |HOUTD: |DEFS 5 |1B46H |[OUTDO](#outdo) standard routine|
1915
+ |<a name="fee9h"></a>FEE9H |HCRDO: |DEFS 5 |7328H |CR,LF to [OUTDO](#outdo)|
1916
+ |<a name="feeeh"></a>FEEEH |HDSKC: |DEFS 5 |7374H |Mainloop line input|
1917
+ |<a name="fef3h"></a>FEF3H |HDOGR: |DEFS 5 |593CH |Line draw|
1918
+ |<a name="fef8h"></a>FEF8H |HPRGE: |DEFS 5 |4039H |Program end|
1919
+ |<a name="fefdh"></a>FEFDH |HERRP: |DEFS 5 |40DCH |Error handler|
1920
+ |<a name="ff02h"></a>FF02H |HERRF: |DEFS 5 |40FDH |Error handler|
1921
+ |<a name="ff07h"></a>FF07H |HREAD: |DEFS 5 |4128H |Mainloop "`OK`"|
1922
+ |<a name="ff0ch"></a>FF0CH |HMAIN: |DEFS 5 |4134H |Mainloop|
1923
+ |<a name="ff11h"></a>FF11H |HDIRD: |DEFS 5 |41A8H |Mainloop direct statement|
1924
+ |<a name="ff16h"></a>FF16H |HFINI: |DEFS 5 |4237H |Mainloop finished|
1925
+ |<a name="ff1bh"></a>FF1BH |HFINE: |DEFS 5 |4247H |Mainloop finished|
1926
+ |<a name="ff20h"></a>FF20H |HCRUN: |DEFS 5 |42B9H |Tokenize|
1927
+ |<a name="ff25h"></a>FF25H |HCRUS: |DEFS 5 |4353H |Tokenize|
1928
+ |<a name="ff2ah"></a>FF2AH |HISRE: |DEFS 5 |437CH |Tokenize|
1929
+ |<a name="ff2fh"></a>FF2FH |HNTFN: |DEFS 5 |43A4H |Tokenize|
1930
+ |<a name="ff34h"></a>FF34H |HNOTR: |DEFS 5 |44EBH |Tokenize|
1931
+ |<a name="ff39h"></a>FF39H |HSNGF: |DEFS 5 |45D1H |"`FOR`"|
1932
+ |<a name="ff3eh"></a>FF3EH |HNEWS: |DEFS 5 |4601H |Runloop new statement|
1933
+ |<a name="ff43h"></a>FF43H |HGONE: |DEFS 5 |4646H |Runloop execute|
1934
+ |<a name="ff48h"></a>FF48H |HCHRG: |DEFS 5 |4666H |[CHRGTR](#chrgtr) standard routine|
1935
+ |<a name="ff4dh"></a>FF4DH |HRETU: |DEFS 5 |4821H |"`RETURN`"|
1936
+ |<a name="ff52h"></a>FF52H |HPRTF: |DEFS 5 |4A5EH |"`PRINT`"|
1937
+ |<a name="ff57h"></a>FF57H |HCOMP: |DEFS 5 |4A54H |"`PRINT`"|
1938
+ |<a name="ff5ch"></a>FF5CH |HFINP: |DEFS 5 |4AFFH |"`PRINT`"|
1939
+ |<a name="ff61h"></a>FF61H |HTRMN: |DEFS 5 |4B4DH |"`READ/INPUT`" error|
1940
+ |<a name="ff66h"></a>FF66H |HFRME: |DEFS 5 |4C6DH |Expression Evaluator|
1941
+ |<a name="ff6bh"></a>FF6BH |HNTPL: |DEFS 5 |4CA6H |Expression Evaluator|
1942
+ |<a name="ff70h"></a>FF70H |HEVAL: |DEFS 5 |4DD9H |Factor Evaluator|
1943
+ |<a name="ff75h"></a>FF75H |HOKNO: |DEFS 5 |4F2CH |Factor Evaluator|
1944
+ |<a name="ff7ah"></a>FF7AH |HFING: |DEFS 5 |4F3EH |Factor Evaluator|
1945
+ |<a name="ff7fh"></a>FF7FH |HISMI: |DEFS 5 |51C3H |Runloop execute|
1946
+ |<a name="ff84h"></a>FF84H |HWIDT: |DEFS 5 |51CCH |"`WIDTH`"|
1947
+ |<a name="ff89h"></a>FF89H |HLIST: |DEFS 5 |522EH |"`LIST`"|
1948
+ |<a name="ff8eh"></a>FF8EH |HBUFL: |DEFS 5 |532DH |Detokenize|
1949
+ |<a name="ff93h"></a>FF93H |HFRQI: |DEFS 5 |543FH |Convert to integer|
1950
+ |<a name="ff98h"></a>FF98H |HSCNE: |DEFS 5 |5514H |Line number to pointer|
1951
+ |<a name="ff9dh"></a>FF9DH |HFRET: |DEFS 5 |67EEH |Free descriptor|
1952
+ |<a name="ffa2h"></a>FFA2H |HPTRG: |DEFS 5 |5EA9H |Variable search|
1953
+ |<a name="ffa7h"></a>FFA7H |HPHYD: |DEFS 5 |148AH |[PHYDIO](#phydio) standard routine|
1954
+ |<a name="ffach"></a>FFACH |HFORM: |DEFS 5 |148EH |[FORMAT](#format) standard routine|
1955
+ |<a name="ffb1h"></a>FFB1H |HERRO: |DEFS 5 |406FH |Error handler|
1956
+ |<a name="ffb6h"></a>FFB6H |HLPTO: |DEFS 5 |085DH |[LPTOUT](#lptout) standard routine|
1957
+ |<a name="ffbbh"></a>FFBBH |HLPTS: |DEFS 5 |0884H |[LPTSTT](#lptstt) standard routine|
1958
+ |<a name="ffc0h"></a>FFC0H |HSCRE: |DEFS 5 |79CCH |"`SCREEN`"|
1959
+ |<a name="ffc5h"></a>FFC5H |HPLAY: |DEFS 5 |73E5H |"`PLAY`" statement|
1960
+
1961
+ </a>
1962
+
1963
+ The Workspace Area from FFCAH to FFFFH is unused. (on MSX 1)