0% found this document useful (0 votes)
726 views285 pages

MSX Bios - Listing Part1 - Búsqueda

MSX Bios - Listing Part1 - Búsqueda

Uploaded by

Andy
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
726 views285 pages

MSX Bios - Listing Part1 - Búsqueda

MSX Bios - Listing Part1 - Búsqueda

Uploaded by

Andy
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 285

Scanned and converted to PDF by HansO, 2005

Pages 1-280, see part2 for the rest.


Edited: January 1985
by Steven M. Ting
Graphic design: Mervin Fong.

The information in this document is subject to change without notice. ASCII Corp. makes no warranty with regard to this
manual, including but not limited to, implied warranties of merchantability and fitness for a particular purpose.
The parties above assume no responsibility for any errors which may appear in this document.
This document is not intended as "Consumer goods" under applicable federal or state law(s).
No part of this document may be copied or reproduced in any form or by any means without the prior written consent of ASCII
Corporation and Oest Publishing Inc.

MSX is a registered trademark of Microsoft Corporation, Bellevue, WA.


Z80 is a registered trademark of Zilog, Inc.

Printed in United States


MSX®BIQS

Copyrighted © 1985 by ASCII Corporation of Japan

All rights Reserved

Published by
OEST PUBLISHING INC.
39 W. 32nd Street Suite 800
New York, N. Y. 10001

(212) 564-0749
Telex: 650-190-8083 MCI
TABLE OF CONTENTS

BIOS LISTING . . . • . • • . . . . . . • . . • . • • • . • • • . • . . . . . 1 - 256

MSX BIOS CROSS REFERENCE ..•.......••..•...•.. 257 - 280

SYMBOL TABLE .•..•••..•.•..•.•....••••.••••..• 281 - 285

APPENDIX A
MSX USA & UK OVERLAY PATCHES . . . . . . . . . . . . 287 - 316
BI 0 S CALLS . . . . . . . • • . . . . . . • • . • . . . . . . . . . . . 3 17 - 324

hPPENDIX B
CHARACTER SET & KEYBOARD LAYOUT . . . . . . . . . 325 - 338
HOOKS & RAM ROUTINES ..••••.............. 339 - 356
( MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 1 1
-BIOS header- BIOS calls (Basic Interpreter, Slot I/O)

1 .1 ist
2
3
4 (C) Copyright by ASCII Corp., 1983
5 Proprietary information. All rights reserved.
6
7 File: BIOHDR.MAC
8 USE: Restart calls and ROM entries table
9 Written by Jey Suzuki, Rick Yamashita
10 ASCII Corporation, Japan
11
12 Edit: January, 1985
13 Reason: Zilog Z80 Mnemonic version and cleanup
14 Edited by: Steven M. Ting
15
16
17 Labels referenced in this listing, are the absolute locations
18 with in the MSX ROM. However, "ONLY" this BIOS entry point table,
19 and RAM variables are guaranteed to be permanent.
20
21 All other locations in the ROM, will be changed without notice.
22
23 SUBTTL -BIOS header- BIOS calls (Basic Interpreter, Slot I/O)
( MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 2 2
-BIOS header- BIOS calls (Basic Interpreter, Slot I/O)

24
25
26 The following RST's (RST O thru RST 5) are reserved for BASIC
27 interpreter, RST 6 for inter-slot calls, and RST 7 for
28 hardware interrupt
29
30 0000 F3 BEGIN: DI ;Fail safe
31 0001 C3 02D7 JP CH KRAM ;Finds all connected RAM
32 ; and cartridges
33
34
35 ** Special information for the VDP. **
36 Any pro9!am that accesses the VDP hardware directly
37 should read the I/O port address found here, to be certain
38 the software is compatible with future versions of the VDP.
39
40 0004 lBBF DW CGTABL ;Address of character generator table,
41 ;to allow use of other character ROM.
42 ;
43 0006 98 DB 98H ;Current port address for VDP Data read
44 0007 98 DB 98H ; II II II II II II
write
45 ;
46 0008 C3 2683 JP SYNCHR ;Check byte following the RST 8, see
47 ;if equal to the byte pointed by HL
48 OOOB 00 DB 0
49 oooc C3 01B6 JP RDSLT ;Read a byte from another slot
50 OOOF 00 DB 0
51 0010 C3 2686 JP CHRGTR ;Fetch next char from BASIC text
52 0013 00 DB 0
53 0014 C3 OlDl JP WRSLT ;Write a byte to another slot
54 0017 00 DB 0
( MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 2-1 3
-BIOS header- BIOS calls (Basic Interpreter, Slot I/0)

55 0018 C3 1B45 JP OUTDO ;output a char to the Console or printer


56 OOlB 00 DB 0
57 OOlC C3 0217 JP CALSLT ;Perform Inter-slot call
58 OOlF 00 DB 0
59 0020 C3 146A JP DCOMPR ;Compares [ HL] to [DE]
60 0023 00 DB 0
61 0024 C3 025E JP ENASLT ;Permanently enables a slot
62 0027 00 DB 0
63 0028 C3 2689 JP GETYPR ;Returns the [FAC] type
64 002B 00 DB 0 ; ID Byte (1)
65 ;Format:
66 ; B7 B6 B5 B4 B3 B2 Bl BO
67 ; + + + + + + + +
68 ; + + + - - - - - - Type of character
+
69 ; + + + + generator.
70 ; + + + + 0 :Japanese
71 ; + + + + 1: International
72 ; + + + + 2 :Korea
73 ; + + - - - - - - - - - Date format
74 ; + + 0: Y-M-D 1: M-D-Y
75 ; + + 2: D-M-Y
76 ; - - - - - - - - - - - - Interrupt frequency
77 ; 0: 60 Hz 1: 50 Hz
78 002C 00 DB 0 ;ID Byte ( 2)
79 ; Format:
80 ; B7 B6 B5 B4 B3 B2 Bl BO
81 ; + + + + + + + +
82 ; + + + + - - - - - - Type of Keyboard
83 ; + + + + O:Japanese 2:French
84 ; + + + + l:Int 3:UK
85 : + + + + 4:DIN
( MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 2-2 4
-BIOS header- BIOS calls (Basic Interpreter, Slot I/O)

86 - - - - - - - - - - - - Version of BASIC
87 0: Japanese
88 1: International
89 002D 00 00 00 DB 0,0,0
90 0030 C3 0205 JP CALLF ;Performs Far-call (i.e., Inter-slot)
91 0033 00 00 00 00 DB O,O,O,O,O
92 0037 00
93
94
95 Following are used for I/O initialization
96 ;
97 0038 C3 OC3C JP KEY INT ;Handlers for hardware interrupt
98 003B C3 049D JP INITIO ;Do device initialization
99 003E C3 139D JP INIFNK ;Reset all function key's text
100
101 SUBTTL -BIOS header- BIOS calls (Video display processor)
( MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 3 5
-BIOS header- BIOS calls (Video display processor)

102
103
104 The following entry points provides control of the
105 VDP's registers, screen mode settings, and memory block
106 move between DRAM and VRAM.
107
108 0041 C3 0577 JP DISSCR ;Disables screen display
109 0044 C3 0570 JP ENASCR ;Enables screen display
110 0047 C3 057F JP WRTVDP ;Write a byte to any VDP register
111 004A C3 07D7 JP RDVRM ;Read VRAM addressed using (HL]
112 004D C3 07CD JP WRTVRM ;Write VRAM addressed using [HL]
113 0050 C3 07EC JP SETRD ;Sets up VDP for read
114 0053 C3 07DF JP SETWRT ;Sets up VDP for write
115 0056 C3 0815 JP FILVRM ;Fills VRAM with specified data
116 0059 C3 070F JP LDIRMV ;Moves block of data from VRAM to memory
117 005C C3 0744 JP LDIRVM 11 11 11 11 11
memory to VRAM
118 005F C3 084F JP CHGMOD ;Change screen mode of VDP to [ SCRMOD]
119 0062 C3 07F7 JP CHGCLR ; change Foreground, background,
120 ;border, color
121 0065 00 DB 0
122
123
124 0066 C3 1398 JP NMI ;Handler for non-maskable interrupt
125
126 0069 C3 06A8 JP CLRSPR ;Init sprite data
127 006C C3 050E JP INITXT ;Init VDP for 40 X 24 text mode (SCREEN 0)
11
128 006F C3 0538 JP INIT32 11 11
32 X 24 text mode (SCREEN 1)
129 0072 C3 05D2 JP INIGRP ,• II II II
High resolution mode (SCREEN 2)
130 0075 C3 061F JP INIMLT ,• II II II
Multi color mode (SCREEN 3)
131 0078 C3 0594 JP SETTXT ; Sets VDP to display 40 X 24 text mode
132 007B C3 05B4 JP SETT32 II II II 11
32 X 24 text mode
( MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 3-1 6
-BIOS header- BIOS calls (Video display processor)

133 007E C3 0602 JP SETGRP ; II II II


High-res mode
II

134 0081 C3 0659 JP SETMLT ; II II II


Multi color mode
II

135 0084 C3 06E4 JP CAL PAT ;Get address of sprite pattern table
136 0087 C3 06F9 JP CALATR ; II II II II
attribute table
137 008A C3 0704 JP GSPSIZ ;Returns current sprite size
138 008D C3 1510 JP GRPPRT ;Print a character on the graphic screen
139
140 SUBTTL -BIOS header- BIOS calls (Programmable Sound Generator control)
( MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 4 7
-BIOS header- BIOS calls (Programmable Sound Generator cont

141
142
143 Following entry points are used for PSG initialization,
144 read and write PSG registers, and PLAY statement execution.
145
146 0090 C3 04BD JP GI CINI ;Init PSG, and static data for PLAY
147 0093 C3 1102 JP WRTPSG ; Wr i te data to P SG
148 0096 C3 llOE JP RDPSG ;Read data from PSG
149 0099 C3 11C4 JP STRTMS ;Checks and start background task for PLAY
150
151 SUBTTL -BIOS header- BIOS calls (Keyboard, CRT, and Printer)
( MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 5 8
-BIOS header- BIOS calls (Keyboard, CRT, and Printer)

152
153
154 General INPUT and PRINT utilities.
155
156 009C C3 OD6A JP CHS NS ;Checks status of keyboard status
157 009F C3 lOCB JP CH GET ;Return char typed, with wait
158 00A2 C3 08BC JP CH PUT ;Output character to console
159 00A5 C3 0850 JP LPTOUT " to printer, if possible
160 00A8 C3 0884 JP LPTSTT ;Checks status of line printer
161 OOAB C3 0890 JP CNVCHR ;Checks for graphic header byte
162 ;and convert code
163 OOAE C3 23BF JP PI NL IN ;Read line from keyboard to buffer
164 OOBl C3 2305 JP I NL IN ;Sarne as above, except in case of
165 ;AUTFLG is set
166 00B4 C3 23CC JP QINLIN ;Print a "?", then jump to INLIN
167 OOB7 C3 046F JP BREAKX ;[Control-STOP] pressed??
168 OOBA C3 03FB JP ISCNTC ;[Shift-STOP] pressed??
169 OOBD C3 10F9 JP CKCNTC ;Sarne as ISCNTC, but used by BASIC
170 ooco C3 1113 JP BEEP ;Buzz
171 OOC3 C3 0848 JP CLS ;Clear screen
172 00C6 C3 088E JP POSIT ;Place cursor at Column [H], Row [L]
173 OOC9 C3 OB26 JP FNKSB ;Display Function key, if neccessary
174 oocc C3 OB15 JP ERAFNK ;Stop displaying the Function keys
175 OOCF C3 OB2B JP DSPFNK ;Enable Function key display
176 0002 C3 083B JP TOTEXT ;Force screen to text mode
177
178 SUBTTL -BIOS header- BIOS calls (Game and Cassette I/O, Queue handler)
( MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 6 9
-BIOS header- BIOS calls (Game and Cassette I/O, Queue hand

179
180
181 Following are used to read the value from Joysticks,
182 Graphic pad (tablet), and Paddles.
183
184 0005 C3 llEE JP GTSTCK ;Return status of joystick
185 0008 C3 1253 JP GTTRIG ;Read joystick trigger button
186 OOOB C3 12AC JP GTPAO ;Returns status of graphic pad
187 OOOE C3 1273 JP GTPOL ;Read paddle
188
189
190 Following are used to access the cassette tape,
191 data read/write, and motor on/off
192
193 OOEl C3 1A63 JP TAP ION ;Turn on motor and read tape header
194 OOE4 C3 !ABC JP TAP IN ;Read tape data
195 OOE7 C3 19E9 JP TAP I OF ;Stops reading from tape
196 OOEA C3 19Fl JP TAPOON ;Turn on motor and write tape header
197 OOEO C3 1Al9 JP TAPOUT ;Write data to tape
198 OOFO C3 1900 JP TAPOFF ;Stops writing to tape
199 OOF3 C3 1384 JP STMOTR ;Start, stop cassette motor, or
200 ;flip motor(on to off, off to on)
201
202
203 BASIC queues
204
205 OOF6 C3 14EB JP LFTQ ;Bytes left in queue
206 OOF9 C3 1492 JP PUTQ ;Send a byte to queue
207
208 SUBTTL -BIOS header- BIOS calls (Generalized graphics)
( MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 7 10
-BIOS header- BIOS calls (Generalized graphics)

209
210
211 ; For BASIC interpreter's GENGRP and ADVGRP modules use
212 OOFC C3 16C5 JP RIG HTC ;Moves one pixel right
213 OOFF C3 16EE JP LE FTC ; II II II
left
214 0102 C3 1750 JP UPC ; II II II
up
II II II
215 0105 C3 173C JP TUPC ;
II II
216 0108 C3 172A JP OOWNC ; II
down
II II II
217 OlOB C3 170A JP TDOWNC ; "
218 OlOE C3 1599 JP SCALXY ;Scales X Y cordinates
219 0111 C3 15DF JP MAPXYC ;Maps cordinates to physical address
220 0114 C3 1639 JP FETCHC ;Get current physical address and
221 ;mask pattern
222 0117 C3 1640 JP STOREC ;Put current physical address and
223 ;mask pattern
224 OllA C3 1676 JP SETATR ;Sets the color attribute byte
225 OllD C3 1647 JP READC ;Reads attribute of current pixel
226 0120 C3 167E JP SETC ;Sets current pixel to specified attribute
227 0123 C3 1809 JP NSETCX ;Sets pixel horizontally
228 0126 C3 18C7 JP GT AS PC ;Returns aspect ratio
229 0129 C3 18CF JP PNTINI ;Do paint initialization
230 012C C3 18E4 JP SCANR ;Scan pixels to the right
231 012F C3 197A JP SCANL • II II II
" left
'
232
233 SUBTTL -BIOS header- BIOS calls (Misc. Entries)
( MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 8 11
-BIOS header- BIOS calls (Misc. Entries)

234
235
236
237 0132 C3 OF3D JP CHG CAP ;Turn [CAPSLOCK] light, on/off
238 0135 C3 OF7A JP CHGSND ;Change status of 1 bit sound port
239 0138 C3 144C JP RSLREG ;Return output of primary slot register
240 013B C3 144F JP WSLREG ;Write to primary slot register
241 013E C3 1449 JP RDVDP ;Read VDP status register
242 0141 C3 1452 JP SNSMAT ;Read a specified raw in the
243 ;keyboard matrix
244 0144 C3 148A JP PHYDIO ;Performs operation for mass storage
245 ;devices (such as disks)
246 0147 C3 148E JP FORMAT ;Initialize mass storage device
247 014A C3 145F JP ISFLIO ;Are we doing device I/O
248 0140 C3 1B63 JP OUTDLP ;Output to line printer
249 0150 C3 1470 JP GETVCP ;Used by Music background tasking
250 0153 C3 1474 JP GETVC2 .
I " " " " "
251 0156 C3 0468 JP KILBUF ;Clear the keyboard buffer
252 0159 C3 OlFF JP CAL BAS ;Performs far-call into BASIC
253 015C DS 005AH ;RESERVED FOR EXPANSION
254
255 SUBTTL - SLOT - Slot handler stuff
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 9 12
- SLOT - Slot handler stuff

256
257 OOA8 PPI.AR EQU OA8h ;A8H read from PPI Port A
258 OOA8 PPI.AW EQU 0A8h ;A8H Write to PPI Port A
259
260 Every cartridge located at 0000-3FFFH must contain codes in
261 this module which are entered via following addresses.
262
263 OOOCH RDSLT
264 0014H WRSLT
265 OOlCH CALSLT
266 0024H ENASLT
267
268
269 ------------------------------ RDSLT ------------------------------
270
271 Selects the appropriate slot according to the value given
272 through registers, and read the content of memory from the
273 slot.
274
275 Input parameters:
276 A - FxxxSSPP
277 I 1111
278 I I I++-- primary slot# (0-3)
279 I ++----secondary slot# (0-3)
280 +--------- 1 if secondary slot # specified
281
282 HL - address of target memory
283 Returned value
284 A - content of memory
285
286 Note: Interrupts are disabled automatically but never enabled
MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 9-1 13
- SLor - Slot handler stuff

287 by th is routine.
288
289 01B6 RDSLT:
290 01B6 CD 027E CALL SELPRM ;Calculate bit pattern and mask code
291 01B9 FA 01C6 JP M,RDESLT ;Expanded slot specified
292 OlBC DB A8 IN A, (PPI.AR)
293 OlBE 57 LD D,A ; Save current setting
294 OlBF Al AND c ;Cancel current setting for target address
295 OlCO BO OR B. ;Add new setting
296 OlCl CD F380 CALL RAMLOW ;Call read primitive rout.ine (in system area)
297 01C4 7B LD A,E ;Return value via [Ace]
298 01C5 C9 RET
299 01C6 RDESLT:
300 01C6 E5 PUSH HL ;Save target address
301 01C7 CD 02A3 CALL SELEXP ;Select secondary slot
302 OlCA E3 EX (SP) ,HL ;Restore target address and save [HL]
303 OlCB C5 PUSH BC
304 OlCC CD 01B6 CALL RDSLT
305 OlCF 18 lB JR WRESED ;Restore old slot select register
306 SUBTTL -SLOT- Slot handler (Write slot)
( MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 10 14
-SLOT- Slot handler (Write slot)

307
308
309 ------------------------------ WRSLT ------------------------------
310
311 Selects the appropriate slot according to the value given
312 through registers, and write to the memory in the specified
313 slot.
314
315 Input parameters:
316 A - FxxxSSPP
317 I 1111
318 I 11 ++--
primary slot # ( 0-3)
319 I ++----secondary slot# (0-3)
320 +--------- 1 if secondary slot # specified
321
322 HL - address of target memory
323
324 E - value to be written
325
326 Note: Interrupts are disabled autorratically but never enabled
327 by th is routine.
328
329 OlDl WRSLT:
330 OlDl D5 PUSH DE ;Save data to be written
331 01D2 CD 027E CALL SELPRM ;Calculate bit pattern and mask code
332 0105 FA OlEl JP M,WRESLT ;Expanded slot specified
333 0108 Dl POP DE ;Restore data to be written
334 0109 DB A8 IN A, (PPI.AR)
335 OlDB 57 LD D,A ;Save current setting
336 OlDC Al AND c ;Cancel current setting for target address
337 OlDD BO OR B ;Add new setting
( MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 10-1 15
--SLOT- Slot handler (Write slot)

338 OlDE C3 F385 JP WRPRIM ;Cal,l write primitive routine (in system area)
339 OlEl WRESLT:
340 OlEl E3 EX (SP) ,HL ;Save target address, get data to be written
341 01E2 ES PUSH HL ;Save data to be written
342 01E3 CD 02A3 CALL SELEXP ;Select secondary slot
343 01E6 Dl POP DE ;Restore data to be written
344 01E7 E3 EX (SP) ,HL ;Restore target address and save [HL]
34S 01E8 cs PUSH BC
346 01E9 CD OlDl CALL WRSLT
347 OlEC WRESED:
348 OlEC Cl POP BC
349 OlED E3 EX (SP) ,HL ;Save target address and get old [HL]
3SO OlEE FS PUSH AF ;Save value returned by RDSLT
3Sl OlEF 78 LD A,B ;Get current setting
3S2 OlFO E6 3F AND OOllllllB ;Cancel current setting for OCOOOH •• OFFFFH
3S3 01F2 Bl OR c
3S4 01F3 D3 A8 OUT (PPI.AW) ,A ;Enable OCOOOH •. OFFFFH of target bank
3SS OlFS 7D LD A,L ;Restore old setting of slot register
3S6 01F6 32 FFFF LD (OFFFFH) ,A
3S7 01F9 78 LD A,B ;Finally restore old primary slot register
3S8 OlFA D3 A8 OUT (PPI .AW) ,A
3S9 OlFC Fl POP AF ;Restore value returned by RDSLT
360 OlFD El POP HL ;Restore target address
361 OlFE C9 RET
( MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 11 16
-SLOT- Slot handler (Write slot)

362
363 OlFF CAL BAS:
364 OlFF FD 2A FCCO LD IY, (EXPTBL-1)
365 0203 18 12 JR CALSLT
366 0205 CALLF:
367 0205 E3 EX (SP) ,HL ;Get return address, save [HL]
368 0206 F5 PUSH AF ;Save working registers
369 0207 D5 PUSH DE
370 0208 7E LD A, (HL) ;Get destination slot
371 0209 F5 PUSH AF
372 020A FD El POP IY ;Move it to IYH
373 020C 23 INC HL
374 020D 5E LD E, (HL) ;Get destination address
375 020E 23 INC HL
376 020F 56 LD D, (HL)
377 0210 23 INC HL ;Prepare true return address
378 0211 D5 PUSH DE
379 0212 DD El POP IX ; Move it to IX
380 0214 Dl POP DE ;Restore working registers
381 0215 Fl POP AF
382 0216 E3 EX (SP) ,HL ;Resture [HL], save true return address
383 SUBTTL -SLOT-
( MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 12 17
-SLOT-

384
38S
386 ------------------------------ CALSLT ------------------------------
387
388 Performs inter-slot call to specified address.
389
390 Input parameters:
391 IY - FxxxSSPP
392 I 1111
393 I II++--
primary slot# (0-3)
394 I ++----secondary slot# (0-3)
39S .+--------- 1 if secondary slot # specified
396
397 IX - address to call
398
399 Note: Interrupts are disabled automatically but never enabled
400 by this routine.
401 You can never pass arguments via alternate registers
402 of Z80.
403
404 0217 CALSLT:
40S 0217 D9 EXX ;Save environments
406 0218 08 EX AF,AF'
407 0219 FD ES PUSH IY
408 021B Fl POP AF ;Get target slot information
409 021C DD ES PUSH IX
410 021E El POP HL ;Get target address
411 021F CD 027E CALL SELPRM
412 0222 FA 022E JP M,CALESL ;Call expanded slot
413 C22S DB A8 IN A, (PPI .AR)
414 0227 FS PUSH AF ;Save current value of primary slot register
( MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 12-1 18
-SLOT-

415 0228 Al AND c ;Cancel current setting for target address


416 0229 BO OR B ;Add new setting
417 022A D9 EXX ;Restore environments except PSW
418 022B C3 F38C JP CL PRIM ;Jump to primitive routine (in system area)
419 022E CALESL:
420 022E CD 02A3 CALL SELEXP ;Select secondary slot register
421 0231 F5 PUSH AF ;Move primary slot # in [IYH]
422 0232 FD El POP IY
423 0234 E5 PUSH HL ;Save [B,C,L] which contain information
424 0235 C5 PUSH BC ;for restoring slot environments
425 0236 4F LD C,A ;Move primary slot# to [BC]
426 0237 06 00 LD B,0
427 0239 7D LD A,L ;Re-calculate what is currently output
428 023A A4 AND H ;to expansion slot register
429 023B B2 OR D
430 023C 21 FCC5 LD HL,SLTTBL ;Calculate address into SLTTBL
431 023F 09 ADD HL,BC
432 0240 77 LD (HL) ,A ;Set current value output to expansion
433 ;slot register
434 0241 E5 PUSH HL ;Remember this address
435 0242 08 EX AF,AF' ;Restore possible arguments passed
436 0243 D9 EXX ;via registers
437 0244 CD 0217 CALL CALSLT ;Call by primary slot #
438 0247 D9 EXX :Save possible values returned via
439 0248 08 EX AF,AF' ;registers
440 0249 El POP HL ;Restore address into SLTTBL
441 024A Cl POP BC ;Restore information about old slots
442 024B Dl POP DE
443 024C 78 LD A,B ;Get current setting
444 024D E6 3F AND OOllllllB ;Cancel current setting for OCOOOH •• OFFFFH
445 024F Bl OR c
( MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 12-2 19
-SLOT-

446 0250 F3 DI
447 0251 D3 A8 OUT (PPI .AW) ,A ;Enable OCOOOH .. OFFFFH of target bank
448 0253 7B LD A,E ;Restore old setting of slot register
449 0254 32 FFFF LD ( OFFFFH) ,A
450 0257 78 LD A,B ;Finally restore old primary slot register
451 0258 D3 A8 OUT (PPI.AW) ,A
452 025A 73 LD (HL) ,E ;And change SLTTBL also
453 025B 08 EX AF,AF' ;Restore possible returned values
454 025C D9 EXX
455 0250 C9 RET
( MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 13 20
-SLOT-

456
457
458 ------------------------------ ENASLT ------------------------------
459
460 Selects the appropriate slot according to the value given
461 through registers, and permanently enables the slot.
462
463 Input parameters:
464
465 A - FxxxSSPP
466 I 1111
467 I I I++-- primary slot# (0-3)
468 I ++----secondary slot# (0-3)
469 +--------- 1 if secondary slot # specified
4 70
471 HL - address of target memory
472
473 Note: Interrupts are disabled automatically but never enabled
474 by this routine.
475
476 025E ENASLT:
477 025E CD 027E CALL SELPRM ;Calculate bit pattern and mask code
478 0261 FA 026B JP M,ENESLT ;Expanded slot specified
479 0264 DB A8 IN A, (PPI.AR)
480 0266 Al AND c ;Cancel current setting for target address
481 0267 BO OR B ;Add new setting
482 0268 D3 A8 OUT (PPI.AW) ,A
483 026A C9 RET
484 026B ENESLT:
485 026B ES PUSH HL ;Save target address
486 026C CD 02A3 CALL SELEXP ;Select secondary slot
( MSX ROM BASIC BIOS ) Macro-BO 3.44 01-Jan-85 PAGE 13-1 21
-SLOT-

487 026F 4F LD C,A ;Move primary slot# to [BC]


488 0270 06 00 LD B,0
489 0272 7D LD A,L ;Re-calculate what is currently output
490 0273 A4 AND H ;to expansion slot register
491 0274 B2 OR D
492 0275 21 FCC5 LD HL,SLTTBL ;Calculate address into SLTTBL
493 0278 09 ADD HL,BC
494 0279 77 LD (HL),A ; Set current value output to expansion
495 ;slot register
496 027A El POP HL ;Restore target address
497 027B 79 LD A,C ;Restore primary slot # to [Ace]
498 027C 18 EO JR ENASLT ;Enable by primary slot register
( MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-8S PAGE 14 22
-SLOT-

499
soo 027E SELPRM:
SOl 027E F3 DI
S02 027F FS PUSH AF ;Save slot address
S03 0280 7C LD A,H ;Extract upper 2 bits
S04 0281 07 RLCA
sos 0282 07 RLCA
S06 0283 E6 03 AND OOOOOOllB
S07 028S SF LD E,A
S08 0286 3E CO LD A,OCOH ;Format mask pat. correspond to address
S09 0288 SLPRMl:
SlO 0288 07 RLCA
Sll 0289 07 RLCA
Sl2 028A lD DEC E
Sl3 028B F2 0288 JP P,SLPRMl
Sl4 028E SF LD E,A ;Save mask pattern
SlS ; 00000011 0000-3FFF
Sl6 ; 00001100 4000-7FFF
Sl7 ; 00110000 8000-BFFF
Sl8 ; 11000000 COOO-FFFF
Sl9 028F 2F CPL
S20 0290 4F LD C,A ;Save mask pattern
S21 ; 11111100 0000-3FFF
S22 ; 11110011 4000-7FFF
S23 ; 11001111 8000-BFFF
S24 ; 00111111 COOO-FFFF
S2S 0291 Fl POP AF ;Restore slot address
S26 0292 FS PUSH AF
S27 0293 E6 03 AND OOOOOOllB ;Extract primary slot #
S28 029S 3C INC A
S29 0296 47 LD B,A
( MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 14-1 23
-SLOT-

530 0297 3E AB LD A,10101011B ;Convert slot # to proper bit pattern


531 0299 SLPRM2:
532 0299 C6 55 ADD A,01010101B
533 029B 10 FC DJNZ SLPRM2
534 029D 57 LD D,A ;Save bit pattern for primary slot #
535 ; 00000000 slot #0
536 ; 01010101 slot #1
537 ; 10101010 slot #2
538 ; 11111111 slot #3
539 029E A3 AND E ;Extract significant bits
540 029F 47 LD B,A ; Set it to [ B]
541 02AO Fl POP AF ;Expanded slot specified?
542 02Al A7 AND A ;Set sign flag if so
543 C2A2 C9 RET
544 02A3 SELEXP:
545 02A3 F5 PUSH AF ;Save target slot
546 02A4 7A LD A,D ;Get bit pattern for primary slot
547 02A5 E6 CO AND 11000000B ;Extract slot# for OCOOOH •. OFFFFH
548 02A7 4F LD C,A ; Save it
549 02A8 Fl POP AF ;Restore target slot
550 02A9 F5 PUSH AF ;Save target slot
551 02AA 57 LD D,A ;Load [D] with specified slot address
552 02AB DB A8 IN A, ( PPI .AR)
553 02AD 47 LD B,A ;Save current setting
554 02AE E6 3F AND 00111111B ;Cancel current setting for OCOOOH •. OFFFFH
555 02BO Bl OR c
556 02Bl D3 A8 OUT (PPI .AW) ,A ;Enable OCOOOH .. OFFFFH or target bank
557 02B3 7A LD A,D ;Load slot information
558 02B4 OF RRCA
559 02B5 OF RRCA
560 02B6 E6 03 AND OOOOOOllB ;Extract secondary slot #
( MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 14-2 24
-SLOT-

561 02B8 57 LD D,A


562 02B9 3E AB LD A,10101'011B ;Convert secondary slot # to proper
563 02BB SLEXPl:
564 02BB C6 55 ADD A,01010101B ;bit pattern
565 02BD 15 DEC D
566 02BE F2 02BB JP P, SLEXPl ; 00000000 slot #0
567 ; 01010101 slot #1
568 ; 10101010 slot #2
569 ; 11111111 slot #3
570 02Cl A3 AND E ;Make bit pattern to be added
571 02C2 57 LD D,A ; Save this
572 02C3 7B LD A,E ;Make bit pattern to strip off old value
573 02C4 2F CPL
574 02C5 67 LD H,A ;Save this
575 02C6 3A FFFF LD A, ( OFFFFH) ;Read expanded slot register
576 02C9 2F CPL
577 02CA 6F LD L,A ;Save current setting
578 02CB A4 AND H ;Strip off old bits
579 02CC B2 OR D ;And set new bits
580 02CD 32 FFFF LD (OFFFFH) ,A ; Set secondary slot register
581 02DO 78 LD A,B
582 02Dl D3 A8 OUT (PPI.AW) ,A ;Restore original primary port
583 02D3 Fl POP AF ;Restore target slot
584 02D4 E6 03 AND OOOOOOllB ;Fake read from primary slot
585 02D6 C9 RET
586 SUBTTL - MSXIO - I/0 Module
MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 15 25
- MSXIO - I/O Module

587
588 .............................
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
589
590 Port definition
591
592 .............................
I I I I I I I I I I I I I I I I I I I I I I I I I I I I I

593
594 VDP address definition
595
596 0098 VDP.DRW EQU 10011000B ;98H Read/write data VDP
597 0099 VDP.CW EQU 10011001B ;99H write command to VDP
598 0099 VDP.SR EQU 10011001B ;99H read status from VDP
599
600 0007 V.COLR EQU 7 ;In text mode, foreground and background color
601 ;Otherwise background color
602
603 PSG address definition
604
605 OOAO PSG.LW EQU lOlOOOOOB ;AOH latch address for PSG
606 OOAl PSG.DW EQU 10100001B ;AlH write data to PSG
607 00A2 PSG.DR EQU 10100010B ;A2H read data from PSG
608
609 OOOE PSG.PA EQU 14 ;Port A of PSG
610 OOOF PSG.PB EQU 15 ;Port B of PSG
611
612 PPI address definition
613
614 OOA8 PPI.AR EQU 10101000B ;ASH read from PPI Port A
615 00A9 PPI.BR EQU 10101001B ;A9H read from PPI Port B
616 OOAA PPI.CR EQU 10101010J3 ;AAH read from PPI Port C
617 OOA8 PPI.AW EQU 10101000B ;ASH Write to PPI Port A
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 15-1 26
- MSXIO - I/O Module

618 OOAA PPI.CW EQU 10101010B ;AAH write to PP! Port C


619 OOAB PPI.CM EQU 10101011B ;ABH write to PP! command register
620
621 Printer port definition
622
623 0091 LPT.DW EQU 10010001B ;Data port
624 0090 LPT.SB EQU 10010000B ; Strobe output
625 0090 LPT.ST EQU 10010000B ; Pr inter status
626
627 Text mode (40*24) SCREEN 0
628
629 TXTNAM,TXTCGP
630
631 Text mode (9raphics 1) SCREEN 1
632
633 T32NAM,T32COL,T32CGP,T32ATR,T32PAT
634
635 Hires mode SCREEN 2
636
637 GRPNAM,GRPCOL,GRPCGP,GRPATR,GRPPAT
638
639 Multi-color mode SCREEN 3
640
641 MLTNAM,MLTCGP,MLTATR,MLTPAT
642
643 Screen size
644
645 LINLEN,CRTCNT,LINL32,LINL40
646
64 7 External constants
648
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 15-2 27
- MSXIO - I/O Module

649 CGTABL Character generator table


650
651 External variables
652
653 FORCLR Foreground color
654 BAKCLR Background color
655 BDRCLR Border color for PAINT
656 SCRMOD Current screen mode
657 0 - 40*24 text
658 1 - 32*24 text
659 2 - hiresolution graphics
660 3 - Multicolor graphics
661 OLDSCR
662 NAMBAS Base of current name table
663 CGPBAS Base of current cgen table
664 PATBAS Base of current sprite pattern table
665 ATRBAS Base of current sprite attribute table
666 JIFFY Jiffy count
667 CLIKSW Click switch
668 CLIKFL Click flag to suppress multiple key clicks
669 RGOSAV VDP register #0 save area
670 RGlSAV VDP register #1 save area
671 STATFL VDP status register
672 PATWRK Work area for pattern converter
673
674 External routines
675
676 GETQ
677 PUTQ
678 INITQ
679 SUBTTL - MSXIO - Find available RAM
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 16 28
- MSXIO - Find available RAM

680
681 02D7 CHKRAM:
682
683 ------------------------------ CHKRAM ------------------------------
684
685 Look into every slot from OFFFFH to COOOH, and set system work
686 area. Note that we cannot use RAM as work area nor perform
687 subroutine calls 'cause we do not yet know where the available
688 RAM exits. Everything has to be done inside ROM and CPU's
689 register until the RAM is found.
690
691 02D7 3E 82 LD A,82H ;Port A - output (mode 0)
692 02D9 D3 AB OUT (PPI .CM) ,A ;Port B - input (mode 0)
693 02DB AF XOR A ;Port C - output (mode 0)
694 02DC D3 A8 OUT (PPI.AW) ,A ; Select slot 0 for all addresses
695 02DE 3E 50 LD A, 'P' ;Disable all cassette related outputs
696 02EO D3 AA OUT (PPI.CW) ,A ;Motor off
697
698 Start searching
699
700 Register usage:
701 B - non 0 if we 're now checking secondary slot
702 SPH - slot # of the biggest RAM block
703 SPL - secondary slot # of the biggest RAM block (if any)
704 DE - lowest address of the biggest RAM block ever found
705 C - 'slot-expanded' flag
706
707 OOOOxxxx
708 1111
709 I I I+- slot #3 expanded
710 I I+-- slot #2 expanded
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 16-1 29
- MSXIO - Find available RAM

711 I+--- slot #1 expanded


712 +---- slot #0 expanded
713
714 02E2 11 FFFF LO OE,OFFFFH ;Initialize lowest address ever found
715 02E5 AF XOR A ;Start from slot #0
716 02E6 4F LO C,A ;Clear bit pattern
717 02E7 CKRM05:
718 02E7 03 AB OUT (PPI.AW) ,A ;Select the slot
719 02E9 CB 21 SLA c ;Shift bit pattern
720 02EB 06 00 LO B,O ;Assume this slot is not expanded
721 02EO 21 FFFF LO HL ,OFFFFH ;Read from possible expansion slot register
722 02FO 36 FO LO (HL) ,OFOH ;Write a binary 11110000
723 02F2 7E LO A, (HL)
724 02F3 06 OF SUB OFH ;Read back as 00001111?
725 02F5 20 OB JR NZ,CKRM15 ;Nop, this is not an expanded slot
726 02F7 77 LO (HL) ,A ;Write 00000000
727 02F8 7E LO A, (HL)
728 02F9 3C INC A ;Read back as 11111111?
729 02FA 20 06 JR NZ,CKRM15 ;Nop, not expanded slot
730 02FC 04 INC B ;We're checking expanded slot
731 02FO CB Cl SET o,c ;Say this slot is expanded
732 02FF CKRMlO:
733
734 :start from expansion slot #0
735
736 02FF 32 FFFF LO (OFFFFH) ,A ;Select the expanded slot
737 0302 CKRM15:
738 0302 21 BFOO LO HL ,OBFOOH ;Start checking from OBFOOH to 8000H
739 0305 CKRM20:
740 0305 7E LO A, (HL)
741 0306 2F CPL
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 16-2 30
- MSXIO - Find available RAM

742 0307 77 LD (HL) ,A


743 0308 BE CP (HL)
744 0309 2F CPL
745 030A 77 LD (HL),A
746 030B 20 07 JR NZ,CKRM25 ;RAM not equipped in this page
747 030D 2C INC L ;Make sure it's not a coincidence
748 030E 20 F5 JR NZ,CKRM20 ;Check more
749 0310 25 DEC H
750 0311 FA 0305 JP M,CKRM20 ;Check next page
751 0314 CKRM25:
752 0314 2E 00 LD L ,0
753 0316 24 INC H
754 0317 7D LD A,L ; Below the one ever found
755 0318 93 SUB E
756 0319 7C LD A,H
757 031A 9A SBC A,D
758 031B 30 OA JR NC,CKRM30 ;No
759 031D EB EX DE,HL ;Register this address as the lowest
760 031E 3A FFFF LD A, ( OFFFFH) ;Set possible secondary slot #
761 0321 2F CPL
762 0322 6F LD L,A
763 0323 DB AB IN A, (PPI .AR) ;Set primary slot #
764 0325 67 LD H,A
765 0326 F9 LD SP,HL ;Register these slot #'s
766 0327 CKRM30:
767 0327 78 LD A,B
768 0328 A7 AND A ;Are we checking secondary slot
769 0329 28 OA JR Z,CKRM35 ;No
770 032B 3A FFFF LD A, (OFFFFH)
771 032E 2F CPL
772 032F C6 10 . ADD A,lOH ;Prepare to select next secondary slot
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 16-3 31
- MSXIO - Find available RAM

773 0331 FE 40 CP OlOOOOOOB


774 0333 38 CA JR C,CKRMlO ;Continue if more secondary slots remain
775 0335 CKRM35:
776 0335 DB A8 IN A, (PPI.AR)
777 0337 C6 50 ADD A,OlOlOOOOB ;Prepare to select next slot
778 0339 30 AC JR NC,CKRM05 ;Continue if more primary slots remain
MSX ROM BASIC BIOS ) Macro-SO 3.44 01-Jan-S5 PAGE 17 32
- MSXIO - Find available RAM

779
7SO
7Sl Check is done, select the biggest one
7S2
7S3 033B 21 0000 LD HL,O
7S4 033E 39 ADD HL,SP
7S5 033F 7C LD A,H
7S6 0340 D3 AS OUT ( PPI.AW) ,A ;Set primary slot register
7S7 0342 7D LD A,L
7SS 0343 32 FFFF LD (OFFFFH) ,A ;Set possible secondary slot register
7S9
790 Next, check OCOOOH .. OFFFFH
791
792 0346 79 LD A,C
793 0347 07 RLCA
794 034S 07 RLCA
795 0349 07 RLCA
796 034A 07 RLCA
797 034B 4F LD C,A
79S 034C 11 FFFF LD DE,OFFFFH ;Initialize lowest address ever found
799 034F DB AS IN A, (PPI .AR) ;Start from slot #0
soo 0351 E6 3F AND OOllllllB
SOl 0353 ·cKRM50:
S02 0353 D3 AS OUT (PPI .AW) ,A ;Select the slot
S03 0355 06 00 LD B,O ;Assume this slot is not expanded
S04 0357 CB 01 RLC c ;Shift bit pattern
S05 0359 30 OA JR NC,CKRM60 ;This slot is not expanded
S06 035B 04 INC B ;We're checking expanded slot
S07 035C 3A FFFF LD A, ( OFFFFH)
sos 035F 2F CPL
S09 0360 E6 3F AND OOllllllB
MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 17-1 33
- MSXIO - Find available RAM

810 0362 CKRM55:


811 0362 32 FFFF LD (OFFFFH) ,A ;Select the expanded slot
812 0365 CKRM60:
813 0365 21 FEOO LD HL ,OFEOOH ;Start checking from OFEOOH to OCOOOH
814 0368 CKRM65:
815 0368 7E LD A, (HL)
816 0369 2F CPL
817 036A 77 LD (HL) ,A
818 036B BE CP {l:JL)
819 036C 2F CPL
820 036D 77 LD (HL) ,A
821 036E 20 09 JR NZ,CKRM70 ;RAM not equipped in this page
822 0370 2C INC L ;Make sure it's not a coincidence
823 0371 20 F5 JR NZ,CKRM65 ;Check more
824 0373 25 DEC H
825 0374 7C LD A,H
826 0375 FE CO CP OCOH
827 0377 30 EF JR NC,CKRM65 ;Check next page
828 0379 CKRM70:
829 0379 2E 00 LD L,O
830 037B 24 INC H
831 037C 7D LD A,L ;Below the one ever found
832 037D 93 SUB E
833 037E 7C LD A,H
834 037F 9A SBC A,D
835 0380 30 OA JR NC,CKRM75 ;No
836 0382 EB EX DE,HL ;Register this address as the lowest
837 0383 3A FFFF LD A, ( OFFFFH~ ;Set possible secondary slot #
838 0386 2F CPL
839 0387 6F LD L,A
840 0388 DB A8 IN A, (PPI .AR) ;Set primary slot #
MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 17-2 34
- MSXIO - Find available RAM

841 038A 67 LD H,A


842 038B F9 LD SP,HL ;Register these slot # 's
843 038C CKRM75:
844 038C 78 LD A,B
845 038D A7 AND A ;Are we checking secondary slot
846 038E 28 08 JR Z,CKRM80 ;No
847 0390 3A FFFF LD A, (OFFFFH)
848 0393 2F CPL
849 0394 C6 40 ADD A,OlOOOOOOB ;Prepare to select next secondary slot
850 0396 30 CA JR NC,CKRM55 ;Continue if more secondary slots remain
851 0398 CKRM80:
852 0398 DB A8 IN A, (PP! .AR)
853 039A C6 40 ADD A,OlOOOOOOB ;Prepare to select next slot
854 039C 30 B5 JR NC,CKRM50 ;Continue if more primary slots remain
855 SUBTTL - MSXIO - Slot attribute setup
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 18 35
- MSXIO - Slot attribute setup

856
857
858 Check is done, select the biggest one
859
860 039E 21 0000 LD HL,O
861 03Al 39 ADD HL,SP
862 03A2 7C LD A,H
863 03A3 D3 A8 OUT (PPI .AW) ,A ;Set primary slot register
864 03A5 7D LD A,L
865 03A6 32 FFFF LD (OFFFFH) ,A ; Set possible secondary slot register
866 03A9 79 LD A,C ;Set 'slot expanded' flag
867
868 Clear work area with zero
869
870 03AA 01 OC49 LD BC,OC49H ; length of work area
871 03AD 11 F381 LD DE,RAMLOW+l
872 03BO 21 F380 LD HL,RAMLOW ;beginning of work
873 03B3 36 00 LD (HL) ,0 ;init first byte
874 03B5 ED BO LDIR ;transfer it to rest of area
875
876 Set EXPTBL
877
878 03B7 4F LD C,A ;Get 'slot-expanded' flag
879 03B8 06 04 LD B,4 ;Loop 4 times
880 03BA 21 FCC4 LD HL,EXPTBL+3
881 03BD SSLTLP:
882 03BD CB 19 RR c ;Set carry if LSB is set
883 03BF 9F SBC A,A ;[Acc]=255 if expanded, 0 if not expanded
884 03CO E6 80 AND 80H ;Affects only MSB
885 03C2 77 LD ( HL) ,A ;Set table for each slot
886 03C3 2B DEC HL
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 18-1 36
- MSXIO - Slot attribute setup

887 03C4 10 F7 DJNZ SSLTLP


888
889 : Set SLTTBL
890
891 03C6 DB A8 IN A, (PPI .AR) ;Remember primary slot register's content
892 03C8 4F LD C,A
893 03C9 AF XOR A ;Read from slot #0
894 03CA 03 A8 OUT (PPI.AW) ,A
895 03CC 3A FFFF LD A, (OFFFFH)
896 03CF 2F CPL
897 0300 6F LD L,A
898 0301 3E 40 LD A,OlOOOOOOB ;Read from slot #1
899 0303 D3 A8 OUT (PPI .AW) ,A
"900 0305 3A FFFF LD A, ( OFFFFH)
901 0308 2F CPL
902 0309 67 LD H,A
903 03DA 3E 80 LD A,80H ;Read from slot #2
904 03DC 03 A8 OUT ( PPI .AW) ,A
905 03DE 3A FFFF LD A, (OFFFFH)
906 03El 2F CPL
907 03E2 5F LD E,A
908 03E3 3E CO LD A,OCOH ;Read from slot #3
909 03E5 03 A8 OUT (PPI.AW) ,A
910 03E7 3A FFFF LD A, (OFFFFH)
911 03EA 2F CPL
912 03EB 57 LD D,A
913 03EC 79 LD A,C ;Restore primary slot register
914 03ED 03 A8 OUT (PPI .AW) ,A
915 03EF 22 FCC5 LD ( SLTTBL) ,HL ;Set SLTTBL
916 03F2 EB EX DE,HL
917 03F3 22 FCC7 LD ( SLTTBL+2) ,HL
( MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 18-2 37
-- MSXIO - Slot attribute setup

918 03F6 ED 56 IM 1 ;IM 1


919 03F8 C3 2680 JP INIT
920 SUBTTL - MSXIO - Control-[ C] processing
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-8S PAGE 19 38
- MSXIO - Control-[ C] processing

921
922 03FB ISCNTC:
923 03FB 3A FBBl LD A, (BASROM) ;Is BASIC text in ROM
924 03FE A7 AND A
92S 03FF co RET NZ ;Yes
926 0400 ES PUSH HL
927 0401 21 FC9B LD HL,INTFLG ;Seen any interesting key
928 0404 F3 DI
929 040S 7E LD A, (HL)
930 0406 36 00 LD (HL) ,0
931 0408 El POP HL
932 0409 FB EI
933 040A A7 AND A
934 040B C8 RET z ;No
93S 040C FE 03 CP 3 ;Is it ctrl-stop?
936 040E 28 lC JR Z,EXCABO ;Yes, execution aborted
937
938 ; Pause until next STOP is pressed
939
940 0410 ES PUSH HL ;STOP pressed (pause)
941 0411 DS PUSH DE
942 0412 cs PUSH BC
943 0413 CD 09DA CALL CKDPCO ;Display cursor if disabled
944 0416 21 FC9B LD HL,INTFLG ;Wait for next interesting key
94S 0419 WAT INT:
946 0419 F3 DI
947 041A 7E LD A, (HL)
948 041B 36 00 LD (HL) ,0
949 0410 FB EI ;Wait for character if SELECT pressed
9SO 041E A7 AND A ;Seen?
9Sl 041F 28 F8 JR Z,WATINT ;Not yet
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 19-1 39
- MSXIO - Control-[C] processing

952 0421 F5 PUSH AF


953 0422 CD 0A27 CALL CKERCO ;Erase cursor if disabled
954 0425 Fl POP AF
955 0426 Cl POP BC
956 0427 Dl POP DE
957 0428 El POP HL
958 0429 FE 03 CP 3 ;Abort?
959 042B co RET NZ ;No
960 042C EXCABO:
961 042C E5 PUSH HL ;Save text pointer
962 042D CD 0468 CALL KILBUF ;Cancel any input
963 0430 CD 0454 CALL CKSTTP ; Is STOP trap ON
964 0433 30 OA JR NC,EXABOl ;No, accept this break
965 0435 21 FC6A LD HL,REQSTP ;Request STOP trap
966 0438 F3 DI ;Since REQTRP does not change interrupt mask,
967 0439 CD OEFl CALL REQTRP ;this must be enclosed by 'DI' and 'EI'
968 043C FB EI
969 043D El POP HL ;Restore text pointer
970 043E C9 RET
971 043F EXABOl:
972
973 043F CD 083B CALL TOT EXT ;Make sure we 're in text mode
974 0442 3A FCCl LD A, (EXPTBL) ;Make sure BASIC is enabled
975 0445 26 40 LD H,OlOOOOOOB
976 0447 CD 025E CALL ENASLT
977 044A El POP HL ;Restore text pointer
978 044B AF XOR A ;Must return with carry cleared, zero set
979 044C ED 7B F6Bl LD SP, ( SAVSTK) ;LSPD
980 0450 C5 PUSH BC
981 0451 C3 63E6 JP STOP
982
MSX ROM BASIC BIOS ) Macro-SO 3.44 01-Jan-SS PAGE 19-2 40
- MSXIO - Control-[C] processing

9S3 0454 CKSTTP:


9S4
9S5 ; Check for STOP trap
9S6
9S7
9SS 0454 3A FC6A LD A, (REQSTP) ; Is STOP trap ON
9S9 0457 OF RRCA
990 045S DO RET NC ; No , accept th is break
991 0459 2A FC6B LD HL, (REQSTP+ 1) ;Is STOP trap specified
992 045C 7C LD A,H
993 0450 BS OR L
994 045E cs RET z ;No, accept this break
995 045F 2A F41C LD HL, (CURLIN) ;Are we in direct mode
996 0462 23 INC HL
997 0463 7C LD A,H
99S 0464 B5 OR L
999 0465 cs RET z ;Yes, treat as break
1000 0466 37 SCF ;Set flag to indicate STOP trap active
1001 0467 C9 RET
1002 046S KILBUF:
1003
1004 046S 2A F3FS LD HL , ( PUTPNT) ;Empties ring buffer
1005 046B 22 F3FA LD ( GETPNT ) , HL
1006 046E C9 RET
MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 20 41
- MSXIO - Control-(C] processing

1007
1008 046F BREAKX:
1009
1010 ; Check if stop key pressed. If pressed, return with carry set.
1011 ;
1012 046F DB AA IN A, (PPI.CR)
1013 0471 E6 FO AND OFOH ;Leave others unaffected
1014 0473 F6 07 OR 7 ; Select 6th row
1015 0475 D3 AA OUT ( PPI .CW) ,A
1016 0477 DB A9 IN A, (PPI.BR)
1017 0479 E6 10 AND lOH ;STOP key is assigned to bit 4
1018 047B co RET NZ ; 0 when pressed
1019 047C DB AA IN A, ( PPI .CR)
1020 047E 3D DEC A
1021 047F D3 AA OUT (PPI.CW) ,A
1022 0481 DB A9 IN A, (PPI. BR)
1023 0483 E6 02 AND 2
1024 0485 co RET NZ
1025 0486 ES PUSH HL
1026 0487 2A F3F8 LD HL , ( PUTPNT) ;Cancel any input
1027 048A 22 F3FA LD ( GETPNT ) , HL
1028 048D El POP HL
1029 048E 3A FBEl LD A, (OLDKEY+7) ;STOP pressed, mark as pressed to prevent
1030 0491 E6 EF AND OEFH ; to be doubly recognized
1031 0493 32 FBEl LD (OLDKEY+7) ,A
1032 0496 3E OD LD A,ODH
1033 0498 32 F3F7 LD (REPCNT) ;A
1034 049B 37 SCF
1035 049C C9 RET
1036 SUBTTL - MSXIO - PSG Initialization
("MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-8S PAGE 21 42
- MSXIO - PSG Initialization

1037
1038 049D I NIT IO:
1039
1040 ; Initialize I O
1041
1042 049D 3E 07 LD A, 7
1043 049F lE 80 LD E,80H
1044 04Al CD 1102 CALL WRTPSG ;Set Port A to input mode
104S 04A4 3E OF LD A,OFH ;Port B to output mode
1046 04A6 lE CF LD E,OCFH
1047 04A8 CD 1102 CALL WRTPSG
1048 04AB 3E OB LD A,OBH ;Dummy write cycle to wake up the PSG
1049 04AD SF LD E,A ;envelope register
lOSO 04AE CD 1102 CALL WRTPSG ;Any value is OK:
lOSl 04Bl CD llOC CALL ING!
10S2 04B4 E6 40 AND OlOOOOOOB
10S3 04B6 32 FCAD LD (KANAMD) ,A
10S4 04B9 3E FF LD A,OFFH
lOSS 04BB D3 90 OUT (LPT.SB) ,A
10S6 04BD GICINI:
10S7
10S8 ; Initialize GI sound chip, queues, and static data.
10S9 i
1060 ; Entry - Interrupts must be disabled
1061 ; Exit - All registers preserved.
1062
1063 04BD ES PUSH HL ;save caller's registers
1064 04BE DS PUSH DE
106S 04BF cs PUSH BC
1066 04CO FS PUSH AF
1067
MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 21-1 43
- MSXIO - PSG Initialization

1068 ; First, clear all static data


1069
1070 04Cl 21 FB3F LD HL,MUSICF
1071 04C4 06 71 LD B, 71H ;=VCBC + VCBSIZ + MUSCIF
1072 04C6 AF XOR A
1073 04C7 MUSCLL:
1074 04C7 77 LD (HL) ,A
1075 04C8 23 INC HL
1076 04C9 10 FC DJNZ MUSCLL
1077
1078 Then clear music dynamic queue
1079
1080 04CB 11 F97S LD DE,VOICAQ ; Address of music queue
1081 04CE 06 7F LD B, 7FH ;Mask pattern, 7F =Music queue len - 1
1082 04DO 21 0080 LD HL,80H ;Queue length
1083 04D3 GICINl:
1084 04D3 ES PUSH HL ;Save length of queue
1085 04D4 DS PUSH DE ;Save address of queue
1086 04DS cs PUSH BC ;Save mask pattern
1087 04D6 FS PUSH AF ;Save queue ID
1088 04D7 CD 14DA CALL INITQ ;Initialize a queue by [Acc],[B] ,[DE]
1089 04DA Fl POP AF
1090 04DB C6 08 ADD A,8 ;write to regs 8,9,10
1091 04DD lE 00 LD E,O
1092 04DF CD 1102 CALL WRTPSG ;O out amplitude (turn voice off)
1093 04E2 D6 08 SUB 8 ; Res tore [Ace]
1094 04E4 FS PUSH AF ;Save queue ID
109S 04ES 2E OF LD L,OFH ;OctaveX
1096 04E7 CD 14 77 CALL GETVCl ;[HL] points to octave for voice [A]
1097 04EA EB EX DE,HL
1098 04EB 21 OS08 LD HL,MUSITB ; [HL] points to default value table
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 21-2 44
- MSXIO - PSG Initialization

1099 04EE 01 0006 LD BC,6 ;EMSITB - MUSITB


llOO 04Fl ED BO LDIR ; default variables for this voice
llOl 04F3 Fl POP AF ;Restore queue ID
ll02 04F4 Cl POP BC ; Res tore mask
ll03 04F5 El POP HL ;Restore queue address
ll04 04F6 Dl POP DE ;Restore queue length
ll05 04F7 19 ADD HL,DE ;Update queue address
ll06 04F8 EB EX DE,HL
ll07 04F9 3C INC A ;Next channel
ll08 04FA FE 03 CP 3
ll09 04FC 38 D5 JR C,GICINl ;Loop till done all three voices
lllO 04FE 3E 07 LD A, 7 ;write to reg 7 mixer control
llll 0500 lE BS LD E,OB8H ;input port A, output port B
1112 0502 CD ll02 CALL WRTPSG ;disable noise, enable all 3 tones
lll3 0505 C3 08DA JP POPALL ;Restore environments
lll4 0508 MUSITB:
lll5
lll6 ; table of default values for music variables
lll 7 ;
lll8 0508 04 DB 04H ;default octave
lll9 0509 04 DB 04H ;default note length
ll20 050A 78 DB 78H ; de fault tempo
ll21 050B 88 DB 88H ;default volume
ll22 050C FF DB OFFH ;default envelope period
1123 050D 00 DB OOH
ll24 050E EMSITB: ; end of music table
1125 SUBTTL - MSXIO - Utility routines for VDP
MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 22 45
- MSXIO - Utility routines for VDP

1126
1127 050E INITXT:
1128
1129 ; Initialize VDP for text mode (40 by 24)
1130 ;
1131 050E CD 0577 CALL DISSCR
1132 0511 AF XOR A
1133 0512 32 FCAF LD (SCRMOD) ,A
1134 0515 32 FCBO LD (OLDSCR) ,A
1135 0518 3A F3AE LD A, (LINL40)
1136 051B 32 F3BO LD (LINLEN) ,A
1137 051E 2A F3B3 LD HL , ( TXTNAM )
1138 0521 22 F922 LD ( NAMBAS ) , HL
1139 0524 2A F3B7 LD HL , ( TXTCGP)
1140 0527 22 F924 LD ( CGPBAS) , HL
1141 052A CD 07F7 CALL CHGCLR ;Set border/foreground/background color
1142 052D CD 077E CALL CLRTXT
1143 0530 CD 071E CALL INIPAT ;Initialize character pattern
1144 0533 CD 0594 CALL SETTXT ;Actually set VDP registers
1145 0536 18 38 JR ENASCR
1146 0538 INIT32:
1147
1148 ; Initialize VDP for text mode (graphics 1)
1149
1150 0538 CD 0577 CALL DISSCR
1151 053B 3E 01 LD A,l
1152 053D 32 FCAF LD (SCRMOD) ,A
1153 0540 32 FCBO LD (OLDSCR) ,A
1154 0543 3A F3AF LD A, (LINL32)
1155 0546 32 F3BO LD (LINLEN} ,A
1156 0549 2A F3BD LD HL, ( T32NAM)
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 22-1 46
- MSXIO - Utility routines for VDP

1157 054C 22 F922 LD ( NAMBAS ) , HL


1158 054F 2A F3Cl LD HL,(T32CGP)
1159 0552 22 F924 LD ( CGPBAS) , HL
1160 0555 2A F3C5 LD HL, (T32PAT)
1161 0558 22 F926 LD (PATBAS) ,HL
1162 055B 2A F3C3 LD HL, (T32ATR)
1163 055E 22 F928 LD ( ATRBAS ) , HL
1164 0561 CD 07F7 CALL CHGCLR ; Set border foreground background color
1165 0564 CD 077E CALL CLRTXT
1166 0567 CD 071E CALL I NI PAT ;Initialize character pattern
1167 056A CD 06BB CALL ERAS PR ;Clear sprites
1168 056D CD 05B4 CALL SETT32 ;Actually set VDP registers
1169 0570 ENASCR:
1170
1171 ; Enable screen display
1172 ;
1173 0570 3A F3EO LD A, (RGlSAV)
1174 0573 F6 40 OR OlOOOOOOB
1175 0575 18 05 JR DISSCl
1176 0577 DISSCR:
1177
1178 ; Disable screen display
1179 ;
1180 0577 3A F3EO LD A, (RGlSAV)
1181 057A E6 BF AND OBFH
1182 057C DISSCl:
1183 057C 47 LD B,A
1184 057D OE 01 LD C,l
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 23 47
- MSXIO - Utility routines for VDP

1185
1186 057F WRTVDP:
1187
1188 : Write data to VDP
1189
1190 ; C = register #
1191 : B = value to be set
1192
1193 ; Register save area for the register is properly set
1194
1195 057F 78 LD A,B ;Get data to set
1196 0580 F3 DI
1197 0581 D3 99 OUT (VDP.CW) ,A
1198 0583 79 LD A,C ;Get register #
1199 0584 F6 80 OR 80H
1200 0586 D3 99 OUT (VDP.CW) ,A
1201 0588 FB EI
1202 0589 ES PUSH HL
1203 058A 78 LD A,B ;Remember this value 'cause this is
1204 058B 06 00 LD B,0 ;a write-only register
1205 058D 21 F3DF LD HL ,RGOSAV
1206 0590 09 ADD HL,BC
1207 0591 77 LD (HL) ,A
1208 0592 El POP HL
1209 0593 C9 RET
1210 0594 SETTXT:
1211
1212 ; Set VDP for text mode (40 by 32)
1213
1214 0594 3A F3DF LD A, (RGOSAV) ; Set register #0
1215 0597 E6 01 AND l
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 23-1 48
- MSXIO - Utility routines for VDP

1216 0599 47 LD B,A


1217 059A OE 00 LD C,O
1218 059C CD 057F CALL WRTVDP
1219 059F 3A F3EO LD A, (RGlSAV) ; Set register #1
1220 05A2 E6 E7 AND OE7H
1221 05A4 F6 10 OR lOH
1222 05A6 47 LD B,A
1223 05A7 oc INC c
1224 05A8 CD 057F CALL WRTVDP
1225 05AB 21 F3B3 LD HL,TXTNAM
1226 05AE 11 0000 LD DE~O ;Set mask pattern
1227 05Bl C3 0677 JP SETSCM ; Set screen mode
1228 05B4 SETT32:
1229
1230 ; Set VDP for text mode (graphics 1)
1231
1232 05B4 3A F3DF LD A, (RGOSAV) ; Set register #0
1233 05B7 E6 01 AND 1
1234 05B9 47 LD B,A
1235 05BA OE 00 LD c,o
1236 05BC CD 057F CALL WRTVDP
1237 05BF 3A F3EO LD A, (RGlSAV) ; Set register #1
1238 05C2 E6 E7 AND OE7H
1239 05C4 47 LD B,A
1240 05C5 oc INC c
1241 05C6 CD 057F CALL WRTVDP
1242 05C9 21 F3BD LD HL,T32NAM
1243 05CC 11 0000 LD DE,0 ;Set mask pattern
1244 05CF C3 0677 JP SETSCM ;Set screen mode
1245 05D2 INIGRP:
1246
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 23-2 49
- MSXIO - Utility routines for VDP

1247 ; Initialize VOP for graphics mode


1248
1249 0502 CD 0577 CALL OISSCR
1250 0505 3E 02 LO A,2
1251 0507 32 FCAF LO (SCRMOO) ,A
1252 050A 2A F3CF LO HL, (GRPPAT)
1253 0500 22 F926 LO ( PATBAS) , HL
1254 05EO 2A F3CO LO HL, ( GRPATR)
1255 05E3 22 F928 LO ( ATRBAS ) , HL
1256 05E6 2A F3C7 LO HL , ( GRPNAM) ;Initialize name table
1257 05E9 CD 070F CALL SETWRT
1258 05EC AF XOR A
1259 05EO 06 03 LO B,3
1260 05EF INIGRl:
1261 05EF 03 98 OUT (VDP .ORW) ,A
1262 05Fl 3C INC A
1263 05F2 20 FB JR NZ,INIGRl
1264 05F4 10 F9 OJNZ INIGRl
1265 05F6 CD 07Al CALL CLSHRS ;Clear pattern and color table
1266 05F9 CD 06BB CALL ERAS PR
1267 05FC CD 0602 CALL SETGRP ;Actually set VOP mode
1268 05FF C3 0570 JP ENASCR
1269 0602 SETGRP:
1270
1271 ; Set VOP for graphics mode (graphics 2)
1272
1273 0602 3A F30F LO A, (RGOSAV) ; Set register #0
1274 0605 F6 02 OR 2
1275 0607 47 LO B,A
1276 0608 OE 00 LO c,o
1277 060A CD 057F CALL WRTVDP
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 23-3 50
- MSXIO - Utility routines for VDP

1278 0600 3A F3EO LD A, (RGlSAV) ; Set register #1


1279 0610 E6 E7 AND OE7H
1280 0612 47 LD B,A
1281 0613 oc INC c
1282 0614 CD 057F CALL WRTVDP
1283 0617 21 F3C7 LD HL,GRPNAM
1284 061A 11 7F03 LD DE, 7F03H
1285 0610 18 58 JR SETSCM
1286 061F INIMLT:
1287
1288 : Initialize VDP for multi-color mode
1289
1290 061F CD 0577 CALL DISSCR
1291 0622 3E 03 LD A,3
1292 0624 32 FCAF LO (SCRMOD) ,A
1293 0627 2A F3D9 LO HL, (MLTPAT)
1294 062A 22 F926 LD (PATBAS) ,HL
1295 0620 2A F3D7 LD HL, (MLTATR)
1296 0630 22 F928 LD ( ATRBAS ) , HL
1297 0633 2A F3Dl LD HL, (MLTNAM) ;Initialize name table
1298 0636 CD 07DF CALL SETWRT
1299 0639 11 0006 LD DE,6
1300 063C INIMLl:
1301 063C OE 04 LD C,4
1302 063E INIML2:
1303 063E 7A LD A,D
1304 063F 06 20 LD B, I I

1305 0641 INIML3:


1306 0641 03 98 OUT (VDP. DRW) ,A
1307 0643 3C INC A
1308 0644 10 FB DJNZ INIML3
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 23-4 51
- MSXIO - Utility routines for VDP

1309 0646 OD DEC c


1310 0647 20 F5 JR NZ,INIML2
1311 0649 57 LD D,A
1312 064A lD DEC E
1313 064B 20 EF JR NZ,INIMLl
1314 064D CD 07B9 CALL CLSMLT ;Clear pattern table
1315 0650 CD 06BB CALL ERAS PR
1316 0653 CD 0659 CALL SETMLT ;Actually set VDP mode
1317 0656 C3 0570 JP ENASCR
1318 0659 SETMLT:
1319
1320 : Set VDP for multicolor mode
1321
1322 0659 3A F3DF LD A, (RGOSAV) ; Set register #0
1323 065C E6 01 AND 1
1324 065E 47 LD B,A
1325 065F OE 00 LD C,O
1326 0661 CD 057F CALL WRTVDP
1327 0664 3A F3EO LD A, (RGlSAV) ; Set register # 1
1328 0667 E6 E7 AND OE7H
1329 0669 F6 08 OR 8
1330 066B 47 LD B,A
1331 066C OE 01 LD C,l
1332 066E CD 057F CALL WRTVDP
1333 0671 21 F3Dl LD HL,MLTNAM
1334 0674 11 0000 LD DE,O ;Set mask pattern
1335 0677 SETSCM:
1336 0677 01 0602 LD BC,SETGRP
1337 067A CD 0690 CALL SETREG ; Set name table
1338 0670 06 OA LD B,OAH
1339 067F 7A LD A,D
MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-8S PAGE 23-S S2
- MSXIO - Utility routines for VDP

1340 0680 CD 0691 CALL SETRGl ; Set color table


1341 0683 06 OS LD B,S
1342 068S 7B LD A,E
1343 0686 CD 0691 CALL SETRGl ;Set pattern table
1344 0689 06 09 LD B,9
134S 068B CD 0690 CALL SETREG ;Set sprite attribute table
1346 068E 06 OS LD B,S ;Set sprite pattern table
1347 0690 SETREG:
1348 0690 AF XOR A
1349 0691 SETRGl:
13SO 0691 ES PUSH HL
13Sl 0692 FS PUSH AF
13S2 0693 7E LD A, (HL)
13S3 0694 23 INC HL
13S4 069S 66 LD H, (HL)
13SS 0696 6F LD L,A
13S6 0697 AF XOR A
13S7 0698 SETRG2:
13S8 0698 29 ADD HL,HL
13S9 0699 BF ADC A,A
1360 069A 10 FC DJNZ SETRG2
1361 069C 6F LD L,A
1362 069D Fl POP AF
1363 069E BS OR L
1364 069F 47 LD B,A
136S 06AO CD OS7F CALL WRTVDP
1366 06A3 El POP HL
1367 06A4 23 INC HL
1368 06AS 23 INC HL
1369 06A6 oc INC c
1370 06A7 C9 RET
MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 24 53
- MSXIO - Utility routines for VDP

1371
1372 06A8 CLRSPR:
1373
1374 Clear all sprites
1375
1376 06A8 3A F3EO LD A, (RGlSAV) ; Set register #1
1377 06AB 47 LD B,~
1378 06AC OE 01 LD C,l
1379 06AE CD 057F CALL WRTVDP
1380 06Bl 2A F926 LD HL, ( PATBAS) ;Clear sprite pattern table
1381 06B4 01 0800 LD BC,0800H ;Length of sprite pattern table
1382 06B7 AF XOR A
1383 06B8 CD 0815 CALL FILVRM
1384 06BB ERASPR:
1385 06BB 3A F3E9 LD A, (FORCLR) ;Load foreground color (default) to [E]
1386 06BE SF LD E,A
1387 06BF 2A F928 LD HL , ( ATRBAS )
1388 06C2 01 2000 LD BC,2000H ; Set number of sprite plane to [ B]
1389 06C5 CLSPR2:
1390 default sprite name to [C]
1391
1392 06C5 3E Dl LD A,ODlH ;Erase code (i.e. vertical position)
1393 06C7 CD 07CD CALL WRTVRM ;Set vertical position
1394 06CA 23 INC HL
1395 06CB 23 INC HL
1396 06CC 79 LD A,C ;Load default sprite name
1397 06CD CD 07CD CALL WRTVRM
1398 06DO 23 INC HL
1399 06Dl oc INC c ;Prepare for next
1400 06D2 3A F3EO LD A, (RGlSAV)
1401 06D5 OF RRCA
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 24-1 54
- MSXIO - Utility routines for VDP

1402 06D6 OF RRCA ;16*16?


1403 06D7 30 03 JR NC,CLSPR3 ;No
1404 06D9 oc INC c ;Yes, C=C+4
1405 06DA oc INC c
1406 06DB oc INC c
1407 06DC CLSPR3:
1408 06DC 7B LD A,E ;Load default color
1409 06DD CD 07CD CALL WRTVRM
1410 06EO 23 INC HL
1411 06El 10 E2 DJNZ CLSPR2
1412 06E3 C9 RET
1413 06E4 CALPAT:
1414
1415 06E4 6F LD L,A
1416 06E5 26 00 LD H,0
1417 06E7 29 ADD HL,HL ;Assume 8 byte long
1418 06E8 29 ADD HL,HL
1419 06E9 29 ADD HL,HL
1420 06EA CD 0704 CALL GSPSIZ ;Check size of sprite
1421 06ED FE 08 CP 8
1422 06EF 28 02 JR Z ,GSPADl ;Good assumption
1423 06Fl 29 ADD HL,HL ; 32 byte long sprite
1424 06F2 29 ADD HL,HL
1425 06F3 GSPADl:
1426 06F3 EB EX DE,HL
1427 06F4 2A F926 LD HL , ( PATBAS ) ;Get base address of sprite pattern table
1428 06F7 19 ADD HL,DE ;Form destination/source address
1429 06F8 C9 RET
1430 06F9 CALATR:
1431
1432 06F9 6F LD L,A ;Get plane number to [L]
MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 24-2 55
- MSXIO - Utility routines for VDP

1433 06FA 26 00 LD H,O


1434 06FC 29 ADD HL,HL ;Sprite attribute consists of 4 bytes
1435 06FD 29 ADD HL,HL
1436 06FE EB EX DE,HL
1437 06FF 2A F928 LD HL, ( ATRBAS) ;Load base address
1438 0702 19 ADD HL,DE ;Calculate target address
1439 0703 C9 RET
1440 0704 GSPSIZ:
1441
1442 ; Get sprite size
1443 ;
1444 0704 3A F3EO LD A, (RGlSAV)
1445 0707 OF RRCA
1446 0708 OF RRCA
144 7 0709 3E 08 LD A,8 ;Assume 8 byte long
1448 070B DO RET NC ;Good assumption
1449 070C 3E 20 LD A,32 ;32 byte long sprite
1450 070E C9 RET
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 25 56
- MSXIO - Utility routines for VDP

1451
1452 070F LDIRMV:
1453
1454 070F CD 07EC CALL SETRD
1455 0712 E3 EX (SP) ,HL
1456 0713 E3 EX (SP) ,HL
1457 0714 LDIMVl:
1458 0714 DB 98 IN A, ( VDP • DRW)
1459 0716 12 LD (DE) ,A
1460 0717 13 INC DE
1461 0718 OB DEC BC
1462 0719 79 LD A,C
1463 071A BO OR B
1464 071B 20 F7 JR NZ,LDIMVl
1465 071D C9 RET
1466 071E INIPAT:
1467
1468 ; Set default character pattern
1469
1470 071E CD FDC7 CALL H.INIP
1471 0721 2A F924 LD HL, ( CGPBAS) ;Get target address of VRAM
1472 0724 CD 07DF CALL SETWRT ;Set VDP for write operation
1473 0727 3A F91F LD A, ( CGPNT) ;Get slot # of character genarator table
1474 072A 2A F920 LD HL , ( CGPNT+l ) ;Get address of character genarator table
1475 072D 01 0800 LD BC,0800H ;Load total length
1476 0730 F5 PUSH AF ;Save source slot
14 77 0731 INIPTl:
1478 0731 Fl POP AF ;Restore source slot
1479 0732 F5 PUSH AF ;Save source slot
1480 0733 cs PUSH BC ; Save counter
1481 0734 F3 DI
MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 25-1 57
- MSXIO - Utility routines for VDP

1482 0735 CD 01B6 CALL RDSLT ;Read from specified slot


1483 0738 FB EI
1484 0739 Cl POP BC ;Restore counter
1485 073A D3 98 OUT (VDP.DRW) ,A
1486 073C 23 INC HL ;Bump character source pointer
1487 073D OB DEC BC
1488 073E 79 LD A,C
1489 073F BO OR B
1490 0740 20 EF JR NZ ,INIPTl
1491 0742 Fl POP AF ; Discard stack
1492 0743 C9 RET
1493 0744 LDIRVM:
1494
1495 0744 EB EX DE,HL
1496 0745 CD 07DF CALL SETWRT
1497 0748 LDIVMl:
1498 0748 lA LD A, (DE)
1499 0749 D3 98 OUT (VDP.DRW) ,A
1500 074B 13 INC DE
1501 074C OB DEC BC
1502 074D 79 LD A,C
1503 074E BO OR B
1504 074F 20 F7 JR NZ ,LDIVMl
1505 0751 C9 RET
1506 0752 GETPAT:
1507
1508 Get pattern corresponding to ASCII code in [A]
1509
1510 Pattern is returned to 8 byte work area (PATWRK). Entered
1511 by GRPPRT (pr int a character to graphic screen) subroutine.
1512
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-8S PAGE 2S-2 S8
- MSXIO - Utility routines for VDP

1Sl3 ; All registers are completely destroyed


1Sl4
lSlS 07S2 26 00 LD H,O ;Prepare for calculation
1Sl6 07S4 6F LD L,A
1Sl7 07SS 29 ADD HL,HL
1Sl8 07S6 29 ADD HL,HL
1Sl9 07S7 29 ADD HL,HL
1S20 07S8 EB EX DE,HL
1S21 07S9 2A F920 LD HL, ( CGPNT+l )
1S22 07SC 19 ADD HL,DE ;[HL]:=source address
1S23 07SD 11 FC40 LD DE,PATWRK ;Load destination address
1S24 0760 06 08 LD B,8 ;Load total length
1S2S 0762 3A F91F LD A, (CGPNT) ;Get slot # of character genarator table
1S26 076S GTPATl:
1S27 076S FS PUSH AF ;Save source slot
1S28 0766 ES PUSH HL ;Save source address
1S29 0767 DS PUSH DE ;Save destination address
1S30 0768 cs PUSH BC ; Save counter
1S31 0769 CD 01B6 CALL RDSLT ;Read from specified slot
1S32 076C FB EI
1S33 076D Cl POP BC ;Restore counter
1S34 076E Dl POP DE ;Restore destination address
1S3S 076F El POP HL ;Restore source address
1S36 0770 12 LD (DE) ,A
1S37 0771 13 INC DE ;Bump destination pointer
1S38 0772 23 INC HL ;Bump character source pointer
1S39 0773 Fl POP AF ;Restore source slot
1S40 0774 10 EF DJNZ GTPATl
1S41 0776 C9 RET
1S42 0777 CLSSUB:
1S43
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 25-3 59
- MSXIO - Utility routines for VDP

1544 0777 CD OB9F CALL CHKSCR ;Check current screen mode


1545 077A 28 25 JR Z,CLSHRS ;Hires
1546 077C 30 3B JR NC,CLSMLT ;Multi-color
1547 077E CLRTXT:
1548
1549 ; Clear screen (text mode)
1550
1551 077E 3A FCAF LD A, (SCRMOD)
1552 0781 A7 AND A
1553 0782 2A F922 LD HL , ( NAMBAS ) ; Set address for write
1554 0785 01 03CO LD BC,03COH ;40 * 24
1555 0788 28 03 JR Z,CLRTXl
1556 078A 01 0300 LD BC,0300H ; 32 * 24
1557 0780 CLRTXl:
1558 0780 3E 20 LD A, I I ;Fill space character code
1559 078F CD 0815 CALL FILVRM
1560 0792 CD OA7F CALL CSHOME ;Set cursor at home position
1561 0795 21 FBB2 LD HL,LINTTB ;Say all lines are terminated
1562 0798 06 18 LD B,18H
1563 079A CLRTX2:
1564 079A 70 LD (HL) ,B ;Load non 0 value
1565 079B 23 INC HL
1566 079C 10 FC DJNZ CLRTX2
1567 079E C3 OB26 JP FNKSB
1568 07Al CLSHRS:
1569
1570 07Al CD 0832 CALL CHGBDR ;Set border color
1571 07A4 01 1800 LD BC,1800H ;Initialize color
1572 07A7 cs PUSH BC ; Save th is for future use
1573 07A8 2A F3C9 LD HL , ( GRPCOL )
1574 07AB 3A F3EA LD A, (BAKCLR) ;Load background color
MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 25-4 60
- MSXIO - Utility routines for VDP

1575 07AE CD 0815 CALL FILVRM


1576 07Bl 2A F3CB LD HL, (GRPCGP)
1577 07B4 Cl POP BC ;Load 6144
1578 07B5 AF XOR A
1579 07B6 JFLVRM:
1580 07B6 C3 0815 JP FILVRM
1581 07B9 CLSMLT:
1582
1583 07B9 CD 0832 CALL CHGBDR ; Set border color
1584 07BC 21 F3EA LD HL,BAKCLR ; Set all pixels to background color
1585 07BF 7E LD A, (HL)
1586 07CO 87 ADD A,A
1587 07Cl 87 ADD A,A
1588 07C2 87 ADD A,A
1589 07C3 87 ADD A,A
1590 07C4 B6 OR (HL)
1591 07C5 2A F3D5 LO HL, ( MLTCGP) ; Set up address for write
1592 07C8 01 0600 LO BC,0600H
1593 07CB 18 E9 JR JFLVRM ;Clear sprites (except sprite pattern)
MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 26 61
- MSXIO - Utility routines for VDP

1594
1595 07CD WRTVRM:
1596
1597 ; Write a byte to VRAM
1598
1599 07CD F5 PUSH AF ;Save data to be written
1600 07CE CD 07DF CALL SETWRT
1601 07Dl E3 EX (SP) ,HL
1602 07D2 E3 EX (SP) ,HL
1603 07D3 Fl POP AF
1604 07D4 D3 98 OUT (VDP. DRW) ,A
1605 07D6 C9 RET
1606 07D7 RDVRM:
1607
1608 ; Read a byte from VRAM
1609
1610 07D7 CD 07EC CALL SETRD
1611 07DA E3 EX (SP) ,HL
1612 07DB E3 EX (SP) ,HL
1613 07DC DB 98 IN A, (VDP.DRW)
1614 07DE C9 RET
1615 07DF SETWRT:
1616
1617 ; Set address for write to VDP
1618
1619 ; Address is passed to HL
1620
1621 07DF 7D LD A,L
1622 07EO F3 DI
1623 07El D3 99 OUT (VDP.CW) ,A
1624 07E3 7C LD A,H
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 26-1 62
- MSXIO - Utility routines for VDP

1625 07E4 E6 3F AND OOllllllB


1626 07E6 F6 40 OR OlOOOOOOB ;For write, set bit 6 high
1627 07E8 D3 99 OUT (VDP.CW) ,A
1628 07EA FB EI
1629 07EB C9 RET
1630 07EC SETRD:
1631
1632 Set address for read from VDP
1633
1634 Address is passed to HL
1635
1636 07EC 7D LD A,L
1637 07ED F3 DI
1638 07EE D3 99 OUT (VDP .CW) ,A
1639 07FO 7C LD A,H
1640 07Fl E6 3F AND OOllllllB
1641 07F3 D3 99 OUT (VDP.CW) ,A
1642 07F5 FB EI
1643 07F6 C9 RET
1644 07F7 CHGCLR:
1645
1646 CHGCLR - changes foreground, background, and border color
1647
1648 07F7 3A FCAF LD A, (SCRMOD) ;Are we in text mode
1649 07FA 3D DEC A
1650 07FB FA 0824 JP M,CHCLTX ;Yes, change color in 40*24 text mode
1651 07FE F5 PUSH AF
1652 07FF CD 0832 CALL CHGBDR ;Change border color for all
1653 0802 Fl POP AF
1654 0803 co RET NZ ;No
1655 0804 3A F3E9 LD A, (FORCLR) ;We're in 32*24 text mode
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 26-2 63
- MSXIO - Utility routines for VDP

1656 0807 87 ADD A,A


1657 0808 87 ADD A,A
1658 0809 87 ADD A,A
1659 080A 87 ADD A,A
1660 080B 21 F3EA LD HL,BAKCLR
0

1661 080E B6 OR (HL)


1662 080F 2A F3BF LD HL, ( T32COL)
1663 0812 01 0020 LD BC ,20H
1664 0815 FILVRM:
1665 0815 F5 PUSH AF
1666 0816 CD 07DF CALL SETWRT
1667 0819 FLVRMl:
1668 0819 Fl POP AF
1669 081A D3 98 OUT (VDP.DRW) ,A
1670 081C F5 PUSH AF
1671 081D OB DEC BC
1672 081E 79 LD A,C
1673 081F BO OR B
1674 0820 20 F7 JR NZ,FLVRMl
1675 0822 Fl POP AF
1676 0823 C9 RET
1677 0824 CHCLTX:
1678
1679 0824 3A F3E9 LD A, (FORCLR)
1680 0827 87 ADD A,A
1681 0828 87 ADD A,A
1682 0829 87 ADD A,A
1683 082A £97 ADD A,A
1684 082B 21 F3EA LD HL,BAKCLR
1685 082E B6 OR (HL)
1686 082F 47 LD B,A
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 26-3 64
- MSXIO - Utility routines for VDP

1687 0830 18 03 JR CHGBDl


1688 0832 CHGBDR:
1689
1690 0832 3A F3EB LD A, (BDRCLR) ;Get border color
1691 0835 CHGBDl:
1692 0835 47 LD B,A
1693 0836 OE 07 LD c, 7
1694 0838 C3 057F JP WRTVDP
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 27 65
- MSXIO - Utility routines for VDP

1695
1696 083B TOTEXT:
1697
1698 : TOTEXT - Force screen to text mode
1699
1700 083B CD OB9F CALL CHKSCR ;Check current screen mode
1701 083E DB RET c ;We're in text mode
1702 083F 3A FCBO LD A, (OLDSCR)
1703 0842 CD FDBD CALL H.TOTE
1704 0845 C3 084F JP CH GM OD ;No, change to text mode then
1705 0848 CLS:
1706
1707 : CLS - clears screen
1708
1709 0848 co RET NZ ;Statement not ending
1710 0849 ES PUSH HL ; Save text pointer
1711 084A CD 0777 CALL CLSSUB
1712 084D El POP HL ;Restore text pointer
1713 084E C9 RET
1714 084F CHGMOD:
1715
1716 ; CHGMOD - changes mode of screen
1717 ;
1718 084F 3D DEC A ;Change to what mode
1719 0850 FA 050E JP M, INITXT ; To text mode
1720 0853 CA 0538 JP Z,INIT32
1721 0856 3D DEC A
1722 0857 CA 05D2 JP Z ,INIGRP ; To hires mode
1723 085A C3 061F JP INIMLT ;To multicolor mode
1724 SUBTTL - MSXIO - Some entry points
MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 28 66
- MSXIO - Some entry points

1725
1726 085D LPTOUT:
1727
1728 ; Output a character to printer
1729
1730 085D CD FFB6 CALL H.LPTO
1731 0860 F5 PUSH AF ;Save character to output
1732 0861 CHPLPl:
1733 0861 CD 046F CALL BREAKX ;Check if aborted
1734 0864 38 12 JR C,LPTABO
1735 0866 CD 0884 CALL LPTSTT
1736 0869 28 F6 JR Z,CHPLPl ;No
1737 086B Fl POP AF ;Restore character
1738 086C CHPLP2:
1739 086C F5 PUSH AF ; Save it again
1740 086D D3 91 OUT {LPT.DW) ,A ;Send to output port
1741 086F AF XOR A ;Generate strobe
1742 0870 D3 90 OUT {LPT.SB) ,A
1743 0872 3D DEC A
1744 0873 D3 90 OUT (LPT.SB) ,A
1745 0875 Fl POP AF ;Restore data output
1746 0876 A7 AND A
1747 0877 C9 RET
1748 0878 LPTABO:
1749
1750 0878 AF XOR A ;Reset carriage pas i tion
1751 0879 32 F415 LD {LPTPOS) ,A
1752 087C 3E OD LD A,ODH ; Send CR even if LPT not a ct i ve
1753 087E CD 086C CALL CHPLP2
1754 0881 Fl POP AF
1755 0882 37 SCF
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 28-1 67
- MSXIO - Some entry points

1756 0883 C9 RET


1757 0884 LPTSTT:
1758
1759 0884 CD FFBB CALL H.LPTS
1760 0887 DB 90 IN A, {90H) ;LSB is O if ready
1761 0889 OF RRCA
1762 088A OF RRCA
1763 088B 3F CCF
1764 088C 9F SBC A,A
1765 088D C9 RET ;No
1766 088E POSIT:
1767
1768 ; Position cursor to specified position
1769
1770 088E 3E lB LD A,lBH
1771 0890 DF RST 18H ;OUTCHR
1772 0891 3E 59 LD A, 'Y'
1773 0893 DF RST 18H
1774 0894 7D LD A,L
1775 0895 C6 lF ADD A,lFH ,·= ' I - 1
1776 0897 DF RST 18H
1777 0898 7C LD A,H
1778 0899 C6 lF ADD A,lFH
1779 089B DF RST 18H
1780 089C C9 RET
1781 089D CNVCHR:
1782
1783 ; Convert character code
1784
1785 089D ES PUSH HL
1786 089E F5 PUSH AF
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 28-2 68
- MSXIO - Some entry points

1787 089F 21 FCA6 LD HL,GRPHED ;Preceeded by a header byte


1788 08A2 AF XOR A
1789 08A3 BE CP (HL)
1790 08A4 77 LD ( HL) ,A ;Clear this since seen
1791 08A5 28 OD JR Z,CNVCH3 ;No
1792 08A7 Fl POP AF
1793 08A8 D6 40 SUB OlOOOOOOB ;Get rid of offset
I I
1794 08AA FE 20 CP ;Valid range
1795 08AC 38 04 JR C,CNVCH2 ;Yes
1796 08AE C6 40 ADD A,OlOOOOOOB ;Compensate value
1797 08BO CNVCHl:
1798 08BO BF CP A ; Set z flag
1799 08Bl 37 SCF ;Make sure carry is cleared
1800 08B2 CNVCH2:
1801 08B2 El POP HL
1802 08B3 C9 RET
1803 08B4 CNVCH3:
1804
1805 08B4 Fl POP AF
1806 08B5 FE 01 CP 1 ;Graphic header
1807 08B7 20 F7 JR NZ,CNVCHl ;No, do not modify
1808 08B9 77 LD ( HL) ,A ; Set GRPHED flag
1809 08BA El POP HL ;Carry is clear indicating one more byte is
1810 08BB C9 RET ;required
1811 SUBTTL - MSXIO - output a character to CRT
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 29 69
- MSXIO - Output a character to CRT

1812
1813 08BC CHPUT:
1814
181S 08BC ES PUSH HL
1816 08BD DS PUSH DE
1817 08BE cs PUSH BC
1818 08BF FS PUSH AF
1819 OSCO CD FDA4 CALL H.CHPU
1820 08C3 CD OB9F CALL CHKSCR ;Are we in text mode
1821 08C6 30 12 JR NC,POPALL ;No, ignore th is
1822 08C8 CD OA2E CALL CKERCS ;Erase old cursor if cursor enabled
1823 08CB Fl POP AF
1824 08CC FS PUSH AF
182S 08CD CD 08DF CALL CHPUTl
1826 08DO CD 09El CALL CKDPCS ;Display new cursor if cursor enabled
1827 08D3 3A F3DD LD A,(CSRX)
1828 08D6 3D DEC A
1829 0807 32 F661 LD (TTYPOS) ,A
1830 08DA POPALL:
1831 08DA Fl POP AF
1832 08DB PBDHRT:
1833 08DB Cl POP BC
1834 08DC Dl POP DE
183S 08DD El POP HL
1836 08DE C9 RET
1837 08DF CHPUTl:
1838
1839 08DF CD 089D CALL CNVCHR ;Convert character code
1840 08E2 DO RET NC ;Was a graphic header, wait for next
1841 08E3 4F LD C,A ;Save character code in [C]
1842 08E4 20 OD JR NZ,CHPUT3 ;Converted code, send as is
MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 29-1 70
- MSXIO - OUtput a character to CRT

1843 08E6 21 FCA7 LD HL,ESCCNT


1844 08E9 7E LD A, (HL) ;Are we executing escape sequence
1845 08EA A7 AND A
1846 08EB C2 098F JP NZ,INESC ;Yes
184 7 08EE 79 LD A,C ;Restore character
1848 08EF FE 20 CP I I
;Control code
1849 08Fl 38 21 JR C,CNTPUT ;Yes
1850 08F3 CHPUT3:
1851 08F3 2A F3DC LD HL, (CSRY)
1852 08F6 FE 7F CP 7FH ;Rubout
1853 08F8 CA OAE3 JP Z,RUBOUT ;Yes
1854 08FB CD OBE6 CALL PUTVRM ;Convert to raw code and write to VRAM
1855 08FE CD OA44 CALL RIGHT ;Advance cursor
1856 0901 co RET NZ ;All done if not wrapped to next line
1857 0902 AF XOR A
1858 0903 CD OC2B CALL SETT RM ; Un terminate th is 1 ine
1859 0906 26 01 LD H,l ;Go to start of the next line
1860 0908 LF:
1861
1862 ; Line feed
1863
1864 0908 CD OA61 CALL DOWN ; Down curs or
1865 090B co RET NZ ;Exit if not at bottom
1866 090C CD OA69 CALL STOCSR
1867 090F 2E 01 LD L,l ;L:=windcw top line
1868 0911 C3 0A88 JP DELL NO ;Scroll up by deleting the first line
1869 0914 CNTPUT:
1870
1871 ; Following control codes are supported
1872
1873 : 7 Bell
MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 29-2 71
- MSXIO - output a character to CRT

1874 8 Back space


1875 9 Tab
1876 10 Line feed
1877 11 Cursor home
1878 12 Clear screen
1879 13 Carriage return
1880
1881 27 Enter escape sequence
1882 28 Cursor right
1883 29 Cursor left
1884 30 Cursor up
1885 31 Cursor down
1886
1887 0914 21 092D LD HL,JMPBC
1888 0917 OE OC LD C,OCH
1889 0919 INDJMP:
1890 0919 23 INC HL
1891 091A 23 INC HL
1892 091B A7 AND A ;Make sure carry is cleared
1893 091C OD DEC c
1894 091D F8 RET M ;Undefined function
1895 091E BE CP (HL) ;Found?
1896 091F 23 INC HL
1897 0920 20 F7 JR NZ, INDJMP ;No
1898 0922 4E LD C,(HL) ;Get routine address in BC
1899 0923 23 INC HL
1900 0924 46 LD B, (HL)
1901 0925 2A F3DC LD HL, (CSRY) ;Jump to each routine with cursor pos
1902 0928 CD 0920 CALL JMPBC
1903 092B AF XOR A ;Tell screen editor not to echo this character
1904 092C C9 RET
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 29-3 72
- MSXIO - output a character to CRT

1905 092D JMPBC:


1906
1907 092D cs PUSH BC
1908 092E C9 RET
1909
1910 ; Function dispatch table
1911
1912 092F CNTTBL:
1913 092F 07 DB 7 ;Beep
1914 0930 1113 DW BEEP
1915 0932 08 DB 8 ;Back space
1916 0933 OA4C DW BS
1917 0935 09 DB 9 ; Tabulation
1918 0936 0A71 DW TAB
1919 0938 OA DB 10 ;Line feed
1920 0939 0908 DW LF
1921 093B OB DB 11 ;Home
1922 093C 0A7F DW CS HOME
1923 093E oc DB 12 ;Clear
1924 093F 077E DW CLRTXT
1925 0941 OD DB 13 ;Carriage return
1926 0942 OA81 DW CR
1927 0944 lB DB 27 ;Enter escape sequence
1928 0945 0989 DW ENTESC
1929 094 7 lC DB 28 ;Cursor right
1930 0948 OASB DW ADVCUR
1931 094A lD DB 29 ;Cursor left
1932 094B OA4C DW BS
1933 094D lE DB 30 ;Cursor up
1934 094E 0A57 DW UP
1935 0950 lF DB 31 ;Cursor down
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 29-4 73
- MSXIO - output a character to CRT

1936 0951 OA61 OW DOWN


1937 SUBTTL - MSXIO - Escape sequence handler
MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 30 74
- MSXIO - Escape sequence handler

1938
1939 0953 ESCTBL:
1940 0953 6A DB j II
II
;Clear screen
1941 0954 077E DW CLRTXT
1942 0956 45 DB "E" ;Clear screen
1943 0957 077E DW CLRTXT ; To maintain compatibility with VT52
1944 0959 4B DB "K" ;Erase to end-of-line
1945 095A OAEE DW EOL
1946 095C 4A DB "J" ;Erase to end-of-page
1947 095D OBOS DW EOP
1948 095F 6C DB "l" ;Erase entire line
1949 0960 OAEC DW ELN
1950 0962 4C DB "L" ; Insert a 1 ine
1951 0963 0AB4 DW ILN
1952 0965 4D DB "M" ;Delete a line
1953 0966 0A85 DW DLN
1954 0968 59 DB "Y" ;Locate cursor
1955 0969 0986 DW LOC
1956 096B 41 DB "A" ;Cursor up
1957 096C 0A57 DW UP
1958 096E 42 DB "B" ; Curs or down
1959 096F OA61 DW DOWN
1960 0971 43 DB "C" ;Cursor right
1961 0972 OA44 DW RIGHT
1962 0974 44 DB "D" ;Cursor left
1963 0975 0A55 DW LEFT
1964 0977 48 DB "H" ;Cursor home
1965 0978 0A7F DW CSHOME
1966 097A 78 DB "x" ; Set modes
1967 097B 0980 DW SETMOD
1968 097D 79 DB "y" ; Reset modes
MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 30-1 75
- MSXIO - Escape sequence handler

1969 097E 0983 DW RSTMOD


1970 0980 SETMOD:
1971
1972 ; Function dispatch table
1973
1974 0980 3E 01 LD A,l
1975 0982 01 DB 1
1976 0983 RSTMOD:
1977 0983 3E 02 LD A,2
1978 0985 01 DB 1
1979 0986 LOC:
1980 0986 3E 04 LD A,4 ;Say raw is expected next
1981 0988 01 DB 1 ; 'LXI B' instruction
1982 0989 ENTESC:
1983 0989 3E FF LD A,OFFH ;Tell him we're in escape sequence
1984 098B 32 FCA7 LD ( ESCCNT) ,A
1985 098E C9 RET
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 31 76
- MSXIO - Escape sequence handler

1986
1987 098F INESC:
1988
1989 098F F2 099D JP P,INESCl ;Arguments expected
1990 0992 36 00 LD (HL) ,0 ;Exit from escape sequence
1991 0994 79 LD A,C ;Restore character
1992 0995 21 0951 LD HL, ESCTBL-2
1993 0998 OE OF LD C,OFH ;Number of ESC handler entries
1994 099A C3 0919 JP INDJMP
1995 099D INESCl:
1996
1997 099D 3D DEC A ; Set modes?
1998 099E 28 lE JR Z,GOSET ;Yes
1999 09AO 3D DEC A ;Reset modes?
2000 09Al 28 25 JR Z,GORSET
2001 09A3 3D DEC A
2002 09A4 77 LD ( HL) ,A ;Update ESCCNT
2003 09A5 3A F3BO LD A, (LINLEN) ;Assume column expected
2004 09A8 11 F3DD LD DE,CSRX
2005 09AB 28 06 JR Z,INESC2 ;Column expected
2006 09AD 36 03 LD (HL),3
2007 09AF CD OC32 CALL GETLEN ;Row expected
2008 09B2 lB DEC DE ;Point CSRY
2009 09B3 INESC2:
2010 09B3 47 LD B,A ;Get max limit in B
2011 09B4 79 LD A,C ;Restore character
2012 09B5 D6 20 SUB I I
;0-xx
2013 09B7 B8 CP B
2014 09B8 3C INC A
2015 09B9 12 LD (DE),A
2016 09BA D8 RET c ;Legal value
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 31-1 77
- MSXIO - Escape sequence handler

2017 09BB 78 LD A,B ;Substitute by possible largest value


2018 09BC 12 LD (DE) ,A
2019 09BD C9 RET
2020 09BE GOSET:
2021
2022 : Set various modes
2023
2024 09BE 77 LD (HL) ,A ;Exit from escape sequence
2025 09BF 79 LD A,C ;Restore character
2026 09CO D6 34 SUB 14 I ; Block cursor?
2027 09C2 28 OB JR Z,STSTYL ;Yes
2028 09C4 3D DEC A ;Cursor off?
2029 09C5 28 OF JR Z,STCSSW ;Yes, reset cursor-enable switch
2030 09C7 C9 RET ; Un implemented feature
2031 09C8 GORSET:
2032
2033 ; Reset various modes
2034
2035 09C8 77 LD (HL) ,A ;Exit from escape sequence
2'036 09C9 79 LD A,C ; Restore character
2037 09CA D6 34 SUB '4' ;Underscore cursor?
2038 09CC 20 05 JR NZ,RSETlO ; No, try next
2039 09CE 3C INC A
2040 09CF STSTYL:
2041 09CF 32 FCAA LD (CSTYLE) ,A
2042 09D2 C9 RET
2043 09D3 RSETlO:
2044
2045 09D3 3D DEC A ;Cursor on?
2046 09D4 co RET NZ ;No, unimplemented feature
2047 09D5 3C INC A
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 31-2 78
- MSXIO - Escape sequence handler

2048 09D6 STCSSW:


2049 09D6 32 FCA9 LD (CSRSW) ,A
2050 09D9 C9 RET
2051 09DA CKDPCO:
2052
2053 ; Display cursor if disabled
2054
2055 09DA 3A FCA9 LD A, (CSRSW)
2056 09DD A7 AND A
2057 09DE co RET NZ
2058 09DF 18 05 JR DSPCSR
2059 09El CKDPCS:
2060
2061 ; Display cursor if enabled
2062 i
2063 09El 3A FCA9 LD A, (CSRSW)
2064 09E4 A7 AND A
2065 09E5 C8 RET z
2066 09E6 DSPCSR:
2067
2068 ; Display a cursor
2069
2070 09E6 CD FDA9 CALL H.DSPC
2071 09E9 CD OB9F CALL CHKSCR
2072 09EC DO RET NC
2073 09ED 2A F3DC LD HL, (CSRY) ;Get current cursor position
2074 09FO ES PUSH HL ; Save it for future use
2075 09Fl CD OBD8 CALL GETVRM ;Get a raw character at cursor
2076 09F4 32 FBCC LD (CODSAV) ,A ;Remember this code
2077 09F7 6F LD L,A ;Then read pattern for this code
2078 09F8 26 00 LD H,O
MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 31-3 79
- MSXIO - Escape sequence handler

2079 09FA 29 ADD HL,HL ; (A] * 8


2080 09FB 29 ADD HL,HL
2081 09FC 29 ADD HL,HL
2082 09FD EB EX DE,HL
2083 09FE 2A F924 LD HL , {CGPBAS )
2084 OAOl ES PUSH HL
208S OA02 19 ADD HL,DE
2086 OA03 CD OBAS CALL GET8B
2087 OA06 21 FClF LD HL,BUFEND+7 ;Make a complement of this pattern
2088 OA09 06 08 LD B,8 ;Assume full reverse cursor
2089 OAOB 3A FCAA LD A, {CSTYLE)
2090 OAOE A7 AND A
2091 OAOF 28 02 JR Z ,DSPCSl ;Good assumption
2092 OAll 06 03 LD B,3 ;No, reverse bottom 3 lines only
2093 0Al3 DSPCSl:
2094 0Al3 7E LD A, {HL)
209S 0Al4 2F CPL
2096 OAlS 77 LD {HL) ,A
2097 0Al6 2B DEC HL
2098 OA17 10 FA DJNZ DSPCSl
2099 0Al9 El POP HL ;Assign th is pattern to 2 SS
2100 OAlA 01 07F8 LD BC,07F8H
2101 OAlD 09 ADD HL,BC
2102 OAlE CD OBBE CALL PUT8B
2103 OA21 El POP HL ;Restore cursor position
2104 0A22 OE FF LD C,OFFH ;Get code for cursor
210S OA24 C3 OBE6 JP PUTVRM ;Set it at cursor position
2106 OA27 CKERCO:
2107
2108 ; Erase cursor if disabled
2109
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 31-4 80
- MSXIO - Escape sequence handler

2110 0A27 3A FCA9 LD A, (CSRSW)


2111 0A2A A7 AND A
2112 0A2B co RET NZ
2113 OA2C 18 05 JR ERA CSR
2114 0A2E CKERCS:
2115
2116 : Erase a cursor if enabled
2117
2118 0A2E 3A FCA9 LD A, (CSRSW)
2119 OA31 A7 AND A
2120 0A32 cs RET z
2121 OA33 ERACSR:
2122
2123 ; Erase cursor
2124
2125 OA33 CD FDAE CALL H.ERAC
2126 0A36 CD OB9F CALL CHKSCR
2127 OA39 DO RET NC
2128 OA3A 2A F3DC LD HL, (CSRY)
2129 OA3D 3A FBCC LD A, (CODSAV) ;Get old code
2130 OA40 4F LD C,A
2131 OA41 C3 OBE6 JP PUTVRM ;Restore old code
2132
2133 SUBTTL - MSXIO - Cursor movements
MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 32 81
- MSXIO - Cursor movements

2134
2135 OA44 RIGHT:
2136
2137 ; Cursor right
213S
2139 OA44 3A F3BO LD A, (LINLEN)
2140 OA47 BC CP H ;Are we at the right-end of line?
2141 OMS cs RET z ;Yes, return with Z flag
2142 OA49 24 INC H ;Go to next column
2143 OMA lS lD JR STOCSR
2144 OA4C BS:
2145
2146 ; Back space
2147
214S OA4C CD OA55 CALL LEFT
2149 OA4F co RET NZ ;Not at left-end
2150 OA50 3A F3BO LD A, (LINLEN)
2151 OA53 67 LD H,A
2152 OA54 11 DB llH ; 'LXI D, I instruction
2153 OA55 LEFT:
2154
2155 : Cursor left
2156
2157 0A55 25 DEC H . ;Are we at the left-end of line?
215S OA56 3E DB 3EH ; 'MVI A, I instruction
2159 OA57 UP:
2160
2161 ; Cursor up
2162
2163 OA57 2D DEC L ;Are we at the top of any window?
2164 0A5S cs RET z ;Yes, return with Z flag
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 32-1 82
- MSXIO - Cursor movements

2165 0A59 18 OE JR STOCSR


2166 OA5B ADVCUR:
2167
2168 : Advance cursor
2169
2170 OA5B CD OA44 CALL RIGHT
2171 0A5E co RET NZ
2172 OA5F 26 01 LD H ,1
~

2173 0A61 DOWN:


2174
2175 : Cursor down
2176
2177 OA61 CD OC32 CALL GETLEN ;Get an actual bottom of screen
2178 0A64 BD CP L ;Are we at the bottom of screen?
2179 0A65 C8 RET z ;Yes, return with Z flag
2180 0A66 38 05 JR C,DOWNl ;We're below screen bottom
2181 OA68 2C INC L ;Go to next 1 ine
2182 0A69 STOCSR:
2183 0A69 22 F3DC LD (CSRY) ,HL
2184 OA6C C9 RET
2185 OA6D DOWNl:
2186
2187 OA6D 2D DEC L
2188 OA6E AF XOR A
2189 OA6F 18 F8 JR STOCSR
2190 0A71 TAB:
2191
2192 ; Tabulation
2193
2194 OA71 3E 20 LD A, I I
2195 0A73 CD 08DF CALL CHPUTl
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 32-2 83
- MSXIO - Cursor movements

2196 0A76 3A F3DD LD A, (CSRX)


2197 OA79 3D DEC A
2198 0A7A E6 07 AND 7
2199 OA7C 20 F3 JR NZ,TAB
2200 0A7E C9 RET
2201 0A7F CSHOME:
2202
2203 : Cursor home
2204
2205 0A7F 2E 01 LD L,l
2206 0A81 CR:
2207
2208 ; Carriage return
2209
2210 OA81 26 01 LD H,l ;~R only, not new-line
2211 OA83 18 E4 JR STOCSR
2212
2213 SUBTTL - MSXIO - Line insert and delete of CRT
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 33 84
- MSXIO - Line insert and delete of CRT

2214
2215 OA85 DLN:
2216
2217 ; Delete a line specified by [L)
2218 ;
2219 ; Cursor should be set at the top of line
2220
2221 OA85 CD OA81 CALL CR
2222 OA88 DELLNO:
2223 0A88 CD OC32 CALL GETLEN ;Get an actual height of screen
2224 OA8B 95 SUB L
2225 0A8C D8 RET c ; Something is wrong
2226 OA8D CA OAEC JP Z,ELN ;Delete the bottom line only
2227 OA90 E5 PUSH HL ; Save rON
2228 OA91 F5 PUSH AF ; Save counter ( # of 1 in es to be moved upward)
2229 0A92 4F LD C,A
2230 OA93 06 00 LD B,O
2231 OA95 CD OClD CALL GETTRM ;Get address of (LINTTB) in (DE)
2232 0A98 6B LD L,E
2233 0A99 62 LD H,D
2234 OA9A 23 INC HL
2235 OA9B ED BO LDIR
2236 0A9D 21 FBCA LD HL,FSTPOS
2237 OAAO 35 DEC (HL)
2238 OAAl Fl POP AF
2239 0AA2 El POP HL
2240 0AA3 DELLNl:
2241 OAA3 F5 PUSH AF ; Save counter
2242 0AA4 2C INC L
2243 0AA5 CD OBAA CALL GETlLN ;Get 1 line specified by L
2244 0AA8 2D DEC L
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 33-1 85
- MSXIO - Line insert and delete of CRT

2245 0AA9 CD OBC3 CALL PUTlLN ;Put 1 line specified by L


2246 OAAC 2C INC L
2247 OAAD Fl POP AF ;Restore counter
2248 OAAE 3D DEC A
2249 OAAF 20 F2 JR NZ,DELLNl
22SO OABl C3 OAEC JP ELN ;Blank bottom line
22Sl OAB4 ILN:
22S2
22S3 : Insert a 1 ine
22S4
22SS ; Cursor should be set at the top of line
22S6
22S7 0AB4 CD OA81 CALL CR
22S8 OAB7 INSLNO:
22S9 0AB7 CD OC32 CALL GETLEN ;Get an actual height of screen
2260 OABA 67 LD H,A
2261 OABB 9S SUB L
2262 OABC D8 RET c ; Something is wrong!!
2263 OABD CA OAEC JP Z,ELN
2264 OACO 6C LD L,H
226S OACl ES PUSH HL ;Save row to be inserted
2266 0AC2 FS PUSH AF ; Save # of 1 in es to be moved downward
2267 OAC3 4F LD C,A
2268 0AC4 06 00 LD B,0
2269 0AC6 CD OClD CALL GETTRM
2270 0AC9 6B LD L,E
2271 OACA 62 LD H,D
2272 OACB ES PUSH HL ;Save pointer to [LINTTB] for the bottom line
2273 OACC 2B DEC HL ; Form source address
2274 OACD ED B8 LDDR
227S OACF El POP HL
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 33-2 86
- MSXIO - Line insert and delete of CRT

2276 OADO 74 LD (HL) ,H ;Make sure the bottom line is terminated


2277 OADl Fl POP AF
2278 0AD2 El POP HL
2279 OAD3 INSLNl:
2280 0AD3 F5 PUSH AF ; Save counter
2281 OAD4 2D DEC L
2282 0AD5 CD OBAA CALL GETlLN
2283 0AD8 2C INC L
2284 0AD9 CD OBC3 CALL PUTlLN
2285 OADC 2D DEC L
2286 OADD Fl POP AF ;Restore counter
2287 OADE 3D DEC A
2288 OADF 20 F2 JR NZ ,INSLNl
2289 OAEl 18 09 JR ELN
2290
2291 SUBTTL - MSXIO - Character(s) erase
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 34 87
- MSXIO - Character(s) erase

2292
2293 0AE3 RUBOUT:
2294
2295 ; Erase previous character
2296 ;
2297 0AE3 CD OA4C CALL BS ;Back space
229S 0AE6 cs RET z ;We 're at the top of screen
2299 0AE7 OE 20 LD c, I I
;Overstrike with a space
2300 OAE9 C3 OBE6 JP PUTVRM
2301 OAEC ELN:
2302
2303 ; Erase entire line
2304
2305 ; Cursor should remain unchanged
2306
2307 OAEC 26 01 LD H,l
230S OAEE EOL:
2309
2310 ; Erase to end-of-line
2311
2312 ; Cursor should remain unchanged
2313
2314 OAEE CD OC29 CALL TERMIN
2315 OA:Fl E5 PUSH HL ;Save current position (column)
2316 OAF2 CD OBF2 CALL VADDR
2317 0AF5 CD 07DF CALL SETWRT
231S OAFS El POP HL ; Res tore current position
2319 0AF9 EREOLl:
2320 0AF9 3E 20 LD A, I I ;Overstrike with a space
2321 OAFB D3 9S OUT (VDP. DRW) ,A
2322 OAFD 24 INC H
MSX ROM BASIC BIOS ) Macro-BO 3.44 01-Jan-BS PAGE 34-1 BB
- MSXIO - Character{s) erase

2323 OAFE 3A F3BO LD A, {LINLEN)


2324 OBOl BC CP H
232S OB02 30 FS JR NC,EREOLl
2326 OB04 C9 RET
2327 OBOS EOP:
232B
2329 ; Erase to end-of-page
2330
2331 ; Cursor should remain unchanged
2332
2333 OBOS ES PUSH HL ;Save current position
2334 OB06 CD OAEE CALL EOL ;Erase to end-of-1 ine
233S OB09 El POP HL ;Restore current position
2336 OBOA CD 0C32 CALL GETLEN ;Get an actual height of CRT
2337 OBOD BD CP L
233B OBOE DB RET c ;Something is wrong
2339 OBOF CB RET z ;All done
2340 OBlO 26 01 LD H,l
2341 OB12 2C INC L
2342 OB13 lB FO JR EOP
2343
2344 SUBTTL - MSXIO - Function keys display/erase.
MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 35 89
- MSXIO - Function keys display/erase.

234S
2346 OBlS ERAFNK:
2347
2348 ; Erase function key
2349 ;
23SO OBlS CD FDB8 CALL H.ERAF
23Sl OB18 AF XOR A ;Say no function key is displayed
23S2 OB19 CD OB9C CALL SETCHK
23S3 OBlC DO RET NC ;We 're not in text mode, just set flag
23S4 OBlD ES PUSH HL ;Save possible text pointer
23SS OBlE 2A F3Bl LD HL , ( CRTCNT) ;Erase last 1 ine
23S6 OB21 CD OAEC CALL ELN
23S7 OB24 El POP HL ;Restore possible text pointer
23S8 OB2S C9 RET
23S9 OB26 FNKSB:
2360
2361 ; Display function key if enabled
2362 ;
2363 OB26 3A F3DE LD A, (CNSDFG) ;Now being displayed?
2364 OB29 A7 AND A
236S 0B2A ca RET z ;No
2366 OB2B DSPFNK:
2367
2368 ; Display function key
2369
2370 OB2B CD FDB3 CALL H.DSPF
2371 OB2E 3E FF LD A,OFFH ;Say function key is displayed
2372 OB30 CD OB9C CALL SETCHK
2373 OB33 DO RET NC ;We're not in text mode, just set flag
2374 OB34 ES PUSH HL ;Save possible text pointer
237S OB3S 3A F3DC LD A, (CSRY)
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 35-1 90
- MSXIO - Function keys display/erase.

2376 0B38 21 F3Bl LD HL,CRTCNT


2377 OB3B BE CP (HL)
2378 OB3C 3E OA LD A,OAH ;Scroll up if we're at the bottom of screen
2379 OB3E 20 01 JR NZ,NTBOTM
2380 OB40 DF RST 18H
2381 OB41 NTBOTM:
2382 OB41 3A FBEB LD A, (SFTKEY) ;Get current shift status
2383 OB44 OF RRCA
2384 OB45 21 F87F LD HL,FNKSTR ;Assume shift not pressed
2385 OB48 3E 01 LD A,l
2386 OB4A 38 04 JR C,DSPFKl ;Good assumption
2387 OB4C 21 F8CF LD HL,FNKSTR+80 ;Shift is being pressed
2388 OB4F AF XOR A
2389 OB50 DSPFKl:
2390 0B50 32 FBCD LD (FNKSWI) ,A ;Mark which part of function key is displayed
2391 OB53 11 FC18 LD DE,BUFEND ;Set temporary destination
2392 OB56 D5 PUSH DE
2393 OB57 06 28 LD B, I ( I ;=40
2394 OB59 3E 20 LD A, I I
2395 OB5B DSFKCL:
2396 OB5B 12 LD (DE) ,A
2397 OB5C 13 INC DE
2398 OB5D 10 FC DJNZ DSFKCL
2399 OBSF Dl POP DE ;Restore temporary destination in [DE]
2400 OB60 OE 05 LD C,5 ;Total number of keys
2401 OB62 3A F3BO LD A, (LINLEN) ;Calculate (LINLEN-4) I 5
2402 0B65 D6 04 SUB 4
2403 OB67 38 2B JR C,DSPFKE ;Not enough room for function keys
2404 OB69 06 FF LD B,OFFH
2405 OB6B DSPFK4:
2406 OB6B 04 INC B
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 35-2 91
- MSXIO - Function keys display/erase.

2407 OB6C D6 05 SUB 5


2408 OB6E 30 FB JR NC,DSPFK4
2409 OB70 78 LD A,B
2410 OB71 A7 AND A
2411 OB72 28 20 JR Z,DSPFKE ;No enough room
2412 OB74 3E DB 3EH ; Skip next byte
2413 OB75 DSPFK2:
2414 OB75 13 INC DE ;Put separator space
2415 OB76 cs PUSH BC ;Save key counter
2416 OB77 OE 00 LD C,0 ;Reset # of characters actually fetched
2417 OB79 DSPFKS:
2418 OB79 7E LD A, (HL) ;Get from function key string
2419 OB7A 23 INC HL ;Prepare for next fetch
2420 OB7B oc INC c
2421 OB7C CD 089D CALL CNVCHR
2422 OB7F 30 F8 JR NC,DSPFKS ;This is a graphic header, fetch more
2423 OB81 20 04 JR NZ,DSPFK8 ;Converted graphics character, store this
I I
2424 OB83 FE 20 CP ;Printable?
2425 0B85 38 01 JR C,DSPFK6 ; No , ignore th is
2426 OB87 DSPFK8:
2427 OB87 12 LD (DE) ,A
2428 OB88 DSPFK6:
2429 OB88 13 INC DE
2430 OB89 10 EE DJNZ DSPFKS
2431 OB8B 3E 10 LD A,lOH
2432 0B8D 91 SUB c
2433 OB8E 4F LD C,A ; Skip rest
2434 OB8F 09 ADD HL,BC
2435 0B90 Cl POP BC ; Res tore counter
2436 OB91 OD DEC c
2437 OB92 20 El JR NZ,DSPFK2
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 35-3 92
- MSXIO - Function keys display/erase.

2438 OB94 DSPFKE:


2439 OB94 2A F3Bl LD HL , ( CRTCNT) ;Display at the lowest line
2440 0B97 CD OBC3 CALL PUTlLN
2441 OB9A El POP HL ;Restore possible text pointer
2442 OB9B C9 RET
2443
2444 SUBTTL - MSXIO - Low level routines
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 36 93
- MSXIO - Low level routines

2445
2446 OB9C SETCHK:
2447
2448 ; Set CNSDFG and check current screen mode
2449
2450 OB9C 32 F3DE LD (CNSDFG) ,A
2451 OB9F CHKSCR:
2452
2453 ; Check current screen mode
2454
2455 OB9F 3A FCAF LD A, ( SCRMOD)
24S6 OBA2 FE 02 CP 2
24S7 OBA4 C9 RET ;Return with the status
24S8 OBAS GETBB:
24S9
2460 ; Get 8 bytes from HL
2461
2462 OBAS ES PUSH HL
2463 0BA6 OE 08 LD C,8
2464 OBAS 18 OA JR GETlLl
246S OBAA GETlLN:
2466
2467 ; Get character and attribute of position specified by H,L
2468 ;
2469 ; Character returned in C
2470
2471 OBAA ES PUSH HL
2472 OBAB 26 01 LD H,l
2473 OBAD CD OBF2 CALL VADDR
2474 OBBO 3A F3BO LD A, (LINLEN)
247S 0BB3 4F LD C,A
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-8S PAGE 36-1 94
- MSXIO - Low level routines

2476 0BB4 GETlLl:


2477 0BB4 06 00 LD B,0
2478 0BB6 11 FC18 LD DE,BUFEND ; Storage for 1 1 ine
2479 0BB9 CD 070F CALL LDIRMV
2480 OBBC El POP HL
2481 OBBD C9 RET
2482 OBBE PUT8B:
2483
2484 OBBE ES PUSH HL
248S OBBF OE 08 LD c ,8
2486 OBCl 18 OA JR PUTlLl
2487 0BC3 PUTlLN:
2488
2489 0BC3 ES PUSH HL
2490 0BC4 26 01 LD H,l
2491 0BC6 CD OBF/. CALL VADDR
2492 0BC9 3A F3B LD A, (LINLEN)
2493 OBCC 4F LD C,A
2494 OBCD PUTlLl:
249S OBCD 06 00 LD B,O
2496 OBCF EB EX DE,HL
2497 OBDO 21 FC18 LD HL,BUFEND
2498 OBD3 CD 0744 CALL LDIRVM
2499 0BD6 El POP HL
2SOO OBD7 C9 RET
2S01 0BD8 GETVRM:
2S02
2S03 OBD8 ES PUSH HL ;Save coordinate
2S04 OBD9 CD OBF2 CALL VADDR ;Calculate VRAM address
2SOS OBDC CD 07EC CALL SETRD ;Set up VDP for read
2S06 OBDF E3 EX (SP) ,HL
MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 36-2 95
- MSXIO - Low level routines

2507 OBEO E3 EX (SP) ,HL


2508 OBEl DB 98 IN A, (VDP.DRW) ;Get character code in C
2509 0BE3 4F LD C,A
2510 OBE4 El POP HL ; Res tore coordinate
2511 OBE5 C9 RET
2512 0BE6 PUTVRM:
2513
2514 OBE6 E5 PUSH HL
2515 OBE7 CD OBF2 CALL VADDR
2516 OBEA CD 07DF CALL SETWRT
2517 OBED 79 LD A,C
2518 OBEE D3 98 OUT (VDP.DRW) ,A
2519 OBFO El POP HL
2520 OBFl C9 RET
2521 OBF2 VADDR:
2522
2523 ; Calculate buffer address out of H,L (column,row)
2524 ;
2525 ; address returned in HL
2526
2527 0BF2 C5 PUSH BC
2528 OBF3 5C LD E,H ;Get column in L
2529 OBF4 26 00 LD H,O
2530 0BF6 54 LD D,H
2531 OBF7 2D DEC L
2532 OBF8 29 ADD HL,HL
2533 OBF9 29 ADD HL,HL
2534 OBFA 29 ADD HL,HL
2535 OBFB 4D LD C,L
2536 OBFC 44 LD B,H
2537 OBFD 29 ADD HL,HL
MSX ROM BASIC BIOS } Macro-80 3.44 01-Jan-85 PAGE 36-3 96
- MSXIO - Low level routines

2538 OBFE 29 ADD HL,HL


2539 OBFF 19 ADD HL,DE
2540 ocoo 3A FCAF LD A, (SCRMOD}
2541 OC03 A7 AND A
2542 OC04 3A F3BO LD A, (LINLEN}
2543 OC07 28 04 JR Z,VADDRl
I 11 I
2544 OC09 D6 22 SUB
2545 OCOB 18 03 JR VADDR2
2546 OCOD VADDRl:
2547
2548 OCOD 09 ADD HL,BC
2549 OCOE D6 2A SUB 41+1
2550 OClO VADDR2:
2551 OClO 2F CPL
2552 OCll A7 AND A
2553 OC12 lF RRA
2554 0Cl3 SF LD E,A
2555 0Cl4 19 ADD HL,DE
2556 OC15 EB EX DE,HL
2557 0Cl6 2A F922 LD HL , ( NAMBAS }
2558 OC19 19 ADD HL,DE
2559 OClA 2B DEC HL
2560 OClB Cl POP BC
2561 OClC C9 RET
2562 OClD GETTRM:
2563
2564 ; Get value of 1 ine-terrninator-table and affect flags
2565 ;
2566 ; En try: L has the 1 ine #
2567 ; Exit: DE has the address of corresponding terminator byte.
2568 : z flag is affected.
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 36-4 97
- MSXIO - Low level routines

2S69
2S70 OClD ES PUSH HL ;Save HL
2S71 OClE 11 FBBl LD DE,BASROM
2S72 0C21 26 00 LD H,O
2S73 OC23 19 ADD HL,DE ;Get address of table
2S74 OC24 7E LD A, (HL)
2S7S OC2S EB EX DE,HL ; Move address to DE
2S76 OC26 El POP HL ;Restore HL
2S77 OC27 A7 AND A ;Affect flags
2S78 OC28 C9 RET
2S79 OC29 TERMIN:
2S80
2S81 OC29 3E DB 3EH ;Load non 0 value in Ace
2S82 OC2A UNTERM:
2S83 OC2A AF XOR A
2S84 OC2B SETTRM:
2S8S OC2B FS PUSH AF
2S86 OC2C CD OClD CALL GETTRM ;Get address of terminator byte in DE
2S87 OC2F Fl POP AF
2S88 OC30 12 LD (DE) ,A ;Change table
2S89 0C31 C9 RET
2S90 OC32 GETLEN:
2S91
2S92 ; Get an actual height of screen
2S93 ;
2S94 OC32 3A F3DE LD A, (CNSDFG) ;O or -1
2S9S OC3S ES PUSH HL
2S96 OC36 21 F3Bl LD HL,CRTCNT
2S97 0C39 86 ADD A,(HL)
2S98 OC3A El POP HL
2S99 OC3B C9 RET
MSX ROM BASIC BIOS Macro-80 3.44 Ol-Jan-85 PAGE 36-5 98
- MSXIO - Low level routines

2600
2601 SUBTTL - MSXIO - Keyboard encoding routines
MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 37 99
- MSXIO - Keyboard encoding routines

2602
2603 OC3C KEY INT:
2604
260S ; Encode keyboard
2606
2607 ; Timer interrupt routine
2608
2609 OC3C ES PUSH HL ;Save all registers
2610 OC3D DS PUSH DE
2611 OC3E cs PUSH BC
2612 OC3F FS PUSH AF
2613 OC40 D9 EXX
2614 OC41 08 EX AF,AF'
261S OC42 ES PUSH HL
2616 OC43 DS PUSH DE
2617 OC44 cs PUSH BC
2618 OC4S FS PUSH AF
2619 OC46 FD ES PUSH IY
2620 OC48 DD ES PUSH IX
2621 0C4A CD FD9A CALL H.KEYI ;To allow other interrupts than 60Hz timer
2622 OC4D DB 99 IN A, (VDP.SR) ;Clear possible interrupt request
2623 OC4F A7 AND A ;Interrupt requested by VDP?
2624 ocso F2 OD02 JP P, INTRET ;No, skip the rest
262S OCS3 CD FD9F CALL H.TIMI ;To allow timer interrupt to be
2626 ;used elsewhere.
2627 OCS6 FB EI ;Now that it became obvious that VDP
2628 ;generated the interrupt, we re-enable
2629 ;interrupt here to allow RS232C's
2630 ;interrupt or something like that.
2631 OCS7 32 F3E7 LD (STATFL) ,A ;Store this new status
2632 OCSA E6 20 AND I I
;Collision detected?
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 37-1 100
- MSXIO - Keyboard encoding routines

2633 OC5C 21 FC6D LD HL,TRPTBL+33 ;Assume so


2634 OC5F C4 OEFl CALL NZ,REQTRP ;Request trap if so
2635
2636 ; Check interval trap
2637 ;
2638 OC62 2A FCA2 LD HL, ( INTCNT) ;Count down interval count
2639 OC65 2B DEC HL
2640 OC66 7C LD A,H
2641 OC67 BS OR L
2642 OC68 20 09 JR NZ,NTINTT ;Not yet reached 0
2643 OC6A 21 FC7F LD HL,TRPTBL+3*17 ; Request trap
2644 OC6D CD OEFl CALL REQTRP
2645 OC70 2A FCAO LD HL, ( INTVAL) ;Load initial value
2646 OC73 NTINTT:
264 7 OC73 22 FCA2 LD ( INTCNT) ,HL ;Update interval count
2648
2649 ; Increment jiffy count
2650
2651 OC76 2A FC9E LD HL, (JIFFY)
2652 OC79 23 INC Hi.
2653 OC7A 22 FC9E LD (JIFFY) ,HL
2654
2655 ; Check music queue
2656
2657 OC7D 3A FB3F LD A, (MUSICF) ;Check music flag
2658 OC80 4F LD C,A
2659 OC81 AF XOR A ;Start with queue 0
2660 OC82 MUSINT:
2661 OC82 CB 19 RR c ;C7=carry, carry=CO, [C)=[C]/2
2662 OC84 F5 PUSH AF ; Save queue ID
2663 OC85 cs PUSH BC ;Save MUSICF
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 37-2 101
- MSXIO - Keyboard encoding routines

2664 OC86 DC 113B CALL C,ACTION


2665 OC89 Cl POP BC
2666 OC8A Fl POP AF
2667 OC8B 3C INC A ;Next queue
2668 OC8C FE 03 CP 3 ;All done?
2669 OC8E 38 F2 JR C,MUSINT ;Not yet
2670 0C90 21 F3F6 LD HL,SCNCNT
2671 OC93 35 DEC (HL) ;Need to scan?
2672 OC94 20 6C JR NZ,INTRET ;No, return soon
2673 OC96 36 03 LD (HL) ,3 ;Time delay of first repeat
2674
2675 ; Check trigger button of joy sticks
2676
2677 OC98 AF XOR A
2678 OC99 CD 120C CALL SLSTCK ;Read joystick A
2679 OC9C E6 30 AND OOllOOOOB
2680 OC9E F5 PUSH AF
2681 OC9F 3E 01 LD A,l
2682 OCAl CD 120C CALL SL ST CK
2683 OCA4 E6 30 AND IO'
2684 OCA6 07 RLCA
2685 OCA7 07 RLCA
2686 OCA8 Cl POP BC
2687 OCA9 BO OR B
2688 OCAA F5 PUSH AF
2689 OCAB CD 1226 CALL GTROW8
2690 OCAE E6 01 AND 1
2691 OCBO Cl POP BC
2692 OCBl BO OR B
2693 OCB2 4F LD C,A ;Save this
2694 OCB3 21 F3E8 LD HL,TRGFLG
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 37-3 102
- MSXIO - Keyboard encoding routines

2695 0CB6 AE XOR (HL) ;Any transition?


2696 OCB7 A6 AND (HL) ;Is this transition negative
2697 OCB8 71 LD (HL) ,C ;Update trigger status
2698 OCB9 4F LD C,A
2699 OCBA OF RRCA ;Check space key trigger
2700 OCBB 21 FC70 LD HL,TRPTBL+3*12
2701 OCBE DC OEFl CALL C,REQTRP
2702 OCCl CB 11 RL c ; Check trigger 4
2703 OCC3 21 FC7C LD HL ,TRPTBL+3*16
2704 OCC6 DC OEFl CALL C,REQTRP
2705 OCC9 CB 11 RL c ; Check trigger 2
2706 OCCB 21 FC76 LD HL,TRPTBL+3*14
2707 OCCE DC OEFl CALL C,REQTRP
2708 OCDl CB 11 RL c ; Check trigger 3
2709 OCD3 21 FC79 LD HL,TRPTBL+3*15
2710 OCD6 DC OEFl CALL C,REQTRP
2711 OCD9 CB 11 RL c ;Check trigger 1
2712 OCDB 21 FC73 LD HL,TRPTBL+3*13
2713 OCDE DC OEFl CALL C,REQTRP
2714
2715 ; Scan keyboard
2716 ;
2717 OCEl AF XOR A ;Enable first key click
2718 OCE2 32 FBD9 LD (CLIKFL) ,A
2719 0CE5 CD OD12 CALL KEYCHK ;Detect valid key transition and check buffer
2720 OCE8 20 18 JR NZ,INTRET ;Some characters still remain, don't repeat
2721 OCEA 21 F3F7 LD HL,REPCNT
2722 OCED 35 DEC (HL) ;Need to enter repeat mode
2723 OCEE 20 12 JR NZ,INTRET ;No
2724 OCFO 36 01 LD (HL),l ;Set short time repeat
2725 OCF2 21 FBDA LD HL,OLDKEY ;Clear OLDKEY status
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 37-4 103
- MSXIO - Keyboard encoding routines

2726 OCF5 11 FBDB LD DE, OLDKEY+l


2727 OCF8 01 OOOA LD BC,OAH
2728 OCFB 36 FF LD {HL) ,OFFH
2729 OCFD ED BO LDIR
2730 OCFF CD OD4E CALL KEYCK4 ;Check if currently pressed key is valid
2731 0D02 INTRET:
2732 0D02 DD El POP IX ;Restore all registers
2733 0D04 FD El POP IY
2734 OD06 Fl POP AF
2735 ODO? Cl POP BC
2736 OD08 Dl POP DE
2737 OD09 El POP HL
2738 ODOA 08 EX AF,AF'
2739 ODOB D9 EXX
2740 ODOC Fl POP AF
2741 ODOD Cl POP BC
2742 ODOE Dl POP DE
2743 ODOF El POP HL
2744 ODlO FB EI
2745 ODll C9 RET
2746 OD12 KEYCHK:
2747
2748 0Dl2 DB AA IN A, {PPI CR) ;Get what is currently output to Port C
2749 OD14 E6 FO AND OFOH ;Leave higher 4 bits unaffected
2750 OD16 4F LD C,A
2751 OD17 06 OB LD B,OBH
2752 0019 21 FBE5 L[' HL ,NEWKEY ;Move current key status to NEWKEY
2753 ODlC KEYCKl:
2754 ODlC 79 LD A,C
2755 ODlD D3 AA OUT {PPI.CW) ,A ;Select row
2756 ODlF DB A9 IN A, {PPI. BR) ;Get column information of selected rCM
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 37-5 104
- MSXIO - Keyboard encoding routines

2757 OD21 77 LD (HL) ,A ;Move it


2758 0D22 oc INC c ;Select next rON
2759 OD23 23 INC HL
2760 0D24 10 F6 DJNZ KEYCKl ;Loop until all rows are sensed
2761 OD26 3A FBBO LD A, (ENSTOP) ;Warm start enabled?
2762 0D29 A7 AND A
2763 0D2A 28 OE JR Z,NOSTOP ;No
2764 0D2C 3A FBEB LD A, ( SFTKEY) ;Get current status of the 6th row
2765 0D2F FE E8 CP OE8H ;Check if KANA, GRAPH, CTRL and SHIFT
2766 OD31 20 07 JR NZ,NOSTOP ;are pressed simultaneously
2767 0D33 DD 21 409B LD IX,READYR
2768 0D37 C3 OlFF JP CAL BAS
2769 OD3A NOSTOP:
2770
2771 0D3A 11 FBE5 LD DE,NEWKEY ;[ OLDKEY] + 11
2772 OD3D 06 OB LD B,OBH
2773 OD3F KEYCK2:
2774 0D3F lB DEC DE
2775 OD40 2B DEC HL
2776 0D41 lA LD A, (DE) ;Get OLDKEY status
2777 OD42 BE CP (HL) ; Compare with NEWKEY status
2778 OD43 20 04 JR NZ,KEYCK3 ;Changed, set long repeat interval
2779 0D45 10 F8 DJNZ KEYCK2
2780 OD47 18 05 JR KEYCK4 ;No change
2781 OD49 KEYCK3:
2782
2783 OD49 3E OD LD A,ODH
2784 OD4B 32 F3F7 LD (REPCNT) ,A
2785 OD4E KEYCK4:
2786 OD4E 06 OB LD B,OBH ; Set number of rONs
2787 0D50 21 FBDA LD HL,OLDKEY
( MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 37-6 105
- MSXIO - Keyboard encoding routines

2788 0D53 11 FBE5 LD DE,NEWKEY


2789 OD56 KEYCK5:
2790 0D56 lA LD A, (DE) ;Get current key status
2791 OD57 4F LD C,A
2792 OD58 AE XOR (HL) ;See if any bit changed
2793 OD59 A6 AND (HL) ;See if this change is negative transition
2794 0D5A 71 LD (HL) ,C ;Update old status
2795 OD5B C4 0D89 CALL NZ,KEYANY ; Active transition, go find it
2796 OD5E 13 INC DE
2797 OD5F 23 INC HL
2798 OD60 10 F4 DJNZ KEYCK5
2799 OD62 CHKBUF:
2800
2801 ; Check if buffer is empty or not
2802
2803 OD62 2A F3FA LD HL , ( GETPNT) ;Load GETPNT
2804 OD65 3A F3F8 LD A, (PUTPNT) ;Load lower 8 bit of PUTPNT
2805 OD68 95 SUB L ;Check if same
2806 0D69 C9 RET
2807 OD6A CH SNS:
2808
2809 OD6A FB EI ;Make sure interrupts are enabled
2810 OD6B E5 PUSH HL ; Save env ir onmen ts
2811 OD6C 05 PUSH DE
2812 OD6D C5 PUSH BC
2813 OD6E CD OB9F CALL cHKSCR ;Are we in text mode?
2814 OD71 30 OF JR NC,CHSNSl ;No, do not flip function keys
2815 OD73 3A FBCD LD A, (FNKSWI) ;Get current shift status
2816 OD76 21 FBEB LD HL,SFTKEY ;Get current function key display
2817 OD79 AE XOR (HL) ;Are they different
2818 OD7A 21 F3DE LD HL,CNSDFG ;Function key displayed at all?
MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-8S PAGE 37-7 106
- MSXIO - Keyboard encoding routines

2819 0D7D A6 AND (HL)


2820 0D7E OF RRCA
2821 0D7F DC OB2B CALL C,DSPFNK ;Update display
2822 0D82 CHSNSl:
2823 0D82 CD 0D62 CALL CHKBUF
2824 0D8S Cl POP BC ;Restore environments
282S 0D86 Dl POP DE
2826 0D87 El POP HL
2827 0D88 C9 RET
2828 0D89 KEYANY:
2829
2830 ; [ [ [ SUBROUTINE 'KEYANY' ]] ]
2831
2832 0D89 ES PUSH HL ; Save env iron men ts
2833 0D8A DS PUSH DE
2834 0D8B cs PUSH BC
283S 0D8C FS PUSH AF ; Save pressed bit
2836 0D8D 3E OB LD A,OBH
2837 OD8F 90 SUB B ;Calculate base code
2838 OD90 87 ADD A,A
2839 0D91 87 ADD A,A
2840 OD92 87 ADD A,A
2841 OD93 4F LD C,A
2842 OD94 06 08 LD B,8 ; Set up counter for 8 bit
2843 OD96 Fl POP AF ;Restore pressed bit
2844 OD97 KYANYl:
284S OD97 lF RRA
2846 OD98 cs PUSH BC
2847 OD99 FS PUSH AF
2848 OD9A DC OE3B CALL C,KEYCOD ;If pressed bit, call key coder.
2849 OD9D Fl POP AF
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 37-8 107
- MSXIO - Keyboard encoding routines

2850 0D9E Cl POP BC


2851 0D9F oc INC c ; Try next code
2852 ODAO 10 F5 DJNZ KYANYl ;Loop until all bits are checked
2853 0DA2 C3 08DB JP PBDHRT ; Res tore env ir onmen ts
2854
2855 ; [[ [ SUBROUTINE 'KEYCOD' ] ]
2856
2857 ; Return key-code in buffer if valid
2858
2859 ODA5 KYJTAB:
2860 ODA5 QA DB 10
2861 ODA6 OE67 DW KYNUM ; 0 •• 9
2862 0DA8 16 DB 22
2863 ODA9 OEAl DW KYCODl
2864 ODAB 30 DB 48
2865 ODAC OE7E DW KYALP ; A .. Z
2866 ODAE 33 DB 51
2867 OD.Af OFlO DW KYEASY
2868 OD Bl 34 DB 52
2869 0DB2 OF36 DW KYLOCK ; Capital lock
2870 ODB4 35 DB 53
2871 0DB5 OFlF DW KYKLOK ;Kana lock
2872 ODB7 3A DB 58
2873 ODB8 OEBB DW KY FU NC ;Function key
2874 ODBA 3C DB 60
2875 ODBB OFlO DW KYEASY
2876 ODBD 3D DB 61
2877 ODBE OF46 DW KY STOP ; Stop key
2878 ODCO 41 DB 65
2879 ODCl OFlO DW KYEASY
2880 ODC3 42 DB 66
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-8S PAGE 37-9 108
- MSXIO - Keyboard encoding routines

2881 0DC4 OF06 DW KYCLS ;CLS/HOME key


2882 0DC6 FF DB 2SS
2883 0DC7 OFlO DW KYEASY
2884
288S 0DC9 NMSFTB:
2886 ODC9 FF DB 2SS
11 I II
2887 ODCA 21 DB
2888 ODCB 22 DB 34 ; Double quote
2889 ODCC 23 24 2S 26 DB "#$%&I ()II
2890 ODDO 27 28 29
2891
2892 0DD3 ALPJMP:
2893 0DD3 OFSS DW PUTCHR ; CTRL+sh i ft
2894 ODDS OFSS DW PUTCHR ;CTRL
289S 0DD7 OE93 DW KEYS FT : SHIFT
2896 0DD9 OE9S DW KEYNOM
2897
2898 ODDB KYClTB:
2899 ODDB ODFD DW KYlSFC-10 ;CTRL+SHIFT
2900 ODDD OD Fl DW KYlCNT-10 ;CTRL
2901 ODDF ODES DW KYlSFT-10 ; SHIFT
2902 OD El 0DD9 DW KYlNOM-10
2903 0DE3 KYlNOM:
2904 ODE3 2D SE SC 40 DB "-""'\@[;:]'. /"
290S ODE7 SB 3B 3A SD
2906 ODEB 2C 2E 2F
2907 ODEE FF DB 2SS
2908 ODEF KYlSFT:
2909 ODEF 3D 7E 7C 60 DB "=-I' { +*)"
2910 0DF3 7B 2B 2A 7D
2911 0DF7 3C DB OOllllOOB ;Less than sign
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 37-10 109
- MSXIO - Keyboard encoding routines

2912 0DF8 3E DB OOlllllOB ;Greater than sign


2913 0DF9 3F 5F DB "? "
2914 ODFB KYlCNT:
2915 ODFB 2D DB "-"
uAn_n@"
2916 ODFC lE DB
2917 ODFD lC DB "\"-"@"
2918 ODFE 00 DB "@"-"@"
2919 ODFF lB DB II [ "-"@"
2920 OEOO 3B 3A DB ,.
I I • e 11

2921 OE02 lD DB II 1"-"@"


2922 OE03 2C 2E 2F DB 11' ./"
2923 OE06 FF DB 255
2924 OE07 KYlSFC:
2925 OE07 3D DB "="
2926 OE08 lE DB "/'.."-"@"
2927 OE09 lC DB "\"-"@"
2928 OEOA 00 DB "@"-"@"
2929 OEOB lB DB " [ "-"@"
2930 OEOC 2B 2A DB "+*"
2931 OEOE lD DB II]"-"@"
2932 OEOF 3C DB OOllllOOB ;Less than sign
2933 OElO 3E DB OOlllllOB ;Greater than sign
2934 OEll 3F DB "?"
2935 OE12 lF DB "_"-"@"
2936
2937 OE13 EASYTB:
2938 OE13 00 DB 0 i Shift (48)
2939 OE14 00 DB 0 ;Control ( 4 9)
2940 OE15 00 DB 0 ;Graph ( 50)
2941 OE16 00 DB 0 ;Cap lock (51)
2942 OE17 00 DB 0 ;Kana lock ( 52)
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 37-11 110
- MSXIO - Keyboard encoding routines

2943 OE18 00 DB 0 ; Fl (53)


2944 OE19 00 DB 0 ;F2 (54)
2945 OElA 00 DB 0 ;F3 (55)
2946 OElB 00 DB 0 ;F4 (56)
294 7 OElC 00 DB 0 ;F5 ( 57)
2948 OElD lB DB 27 ;Escape ( 58)
2949 OElE 09 DB 9 ;Tab ( 59)
2950 OElF 00 DB 0 ;Stop (60)
2951 OE20 08 DB 8 ;Back space (61)
2952 OE21 18 DB "X"-"@" ;Select ( 62)
2953 OE22 OD DB 13 ;Enter ( 63)
2954 OE23 20 DB 32 ; Space (64)
2955 OE24 oc DB 12 ;Clear (65)
2956 OE25 12 DB "R"-"@" ; Insert (66)
2957 OE26 7F DB 127 ;Rubout (67)
2958 OE27 lD DB 29 ;Left (68)
2959 OE28 lE DB 30 ;Up (69)
2960 OE29 lF DB 31 ;Down (70)
2961 OE2A lC DB 28 ; Right (71)
2962
2963 ; For additional key matrix
2964
2965 OE2B 01 DB "A"-"@" ; ( 72)
2966 OE2C 04 DB "D"-"@" ; (73)
2967 OE2D OF DB "O"-"@" ; (74)
2968 OE2E 10 DB "P"-"@" ; ( 7 5)
2969 OE2F 11 DB "Q"-"@" ; ( 76)
2970 OE30 12 DB "R"-"@" ; (77)
2971 OE31 13 DB "S"-"@" ; ( 78)
2972 OE32 14 DB "T"-"@" ; ( 7 9)
2973 OE33 00 DB 0 ; (80)
MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 37-12 111
- MSXIO - Keyboard encoding routines

2974 OE34 00 DB c ; {81)


2975 OE35 00 DB 0 ; (82)
2976 OE36 00 DB 0 ; {83)
2977 OE37 00 DB 0 ; {84)
2978 OE38 00 DB 0 ; (85)
2979 OE39 00 DB 0 ; (86)
2980 OE3A 00 DB 0 ; ( 87)
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 38 112
- MSXIO - Keyboard encoding routines

2981
2982
2983 OE3B KEYCOD:
2984
2985 ((( SUBROUTINE 'KEYCOD' ]]]
2986
2987 Return key-code in buffer if valid
2988
2989 OE3B 79 LD A,C ;Get raw code
2990 OE3C FE FF CP OFFH ;Just for fail safe
2991 OE3E C8 RET z
2992 OE3F 21 ODAS LD HL,KYJTAB
2993 OE42 CD FDCC CALL H.KEYC
2994 OE45 FE 30 CP 48 ;Possibly a KANA or grai:*lic character
2995 OE47 30 13 JR NC,KYCLAS ;No
2996 OE49 3A FBEB LD A, (SFTKEY) ;Get shift key status
2997 OE4C OF RRCA ;Control pressed?
2998 OE4D OF RRCA
2999 OE4E 30 OB JR NC ,KYCLAO ;Yes, th is supersedes everything
3000 OESO OF RRCA ;How about graphic shift
3001 OESl D2 107D JP NC,KYGRAP ;Yes, this has the 2nd priority
3002 OE54 3A FCAC LD A, (KANAST) ;KANA lock active
3003 OE57 A7 AND A
3004 OE58 C2 OF83 JP NZ,KYKANA ;Yes
3005 OESB KYCLAO:
3006 OESB 79 LD A,C
3007 OESC KYCLAS:
3008 OESC BE CP (HL) ;Compare range
3009 OESD 23 INC HL
3010 OESE SE LD E, (HL) ;Get jump address in [DE]
3011 OESF 23 INC HL
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 38-1 113
- MSXIO - Keyboard encoding routines

3012 OE60 56 LD D, (HL)


3013 OE61 23 INC HL
3014 OE62 DS PUSH DE ;Assume matched
3015 OE63 D8 RET c ;Good assumption
3016 OE64 Dl POP DE ;Dis card stack
3017 OE65 18 FS JR KY CLAS ;Check next possibility
3018 OE67 KYNUM:
3019
3020 OE67 C6 30 ADD A, I 0 I ;Assume no shift
3021 OE69 47 LD B,A ; Save code
3022 OE6A 3A FBEB LD A, (SFTKEY) ; Check shift status
3023 OE6D OF RRCA
3024 OE6E 78 LD A,B ;Restore code
3025 OE6F 38 OA JR C,JPUTCH ;Good assumption
3026 OE71 06 00 LD B,0
3027 OE73 21 ODC9 LD HL ,NMSFTB
3028 OE76 09 ADD HL,BC ;This must not be 'DADF'
3029 OE77 7E LD A,(HL) ;Get code for shift-number
3030 OE78 FE FF CP OFFH ; Shift 'O'?
3031 OE7A C8 RET z ; Yes, ignore th is
3032 OE7B JPUTCH:
3033 OE7B C3 OF55 JP PUTCHR ; Put th is in buffer
3034 OE7E KYALP:
3035
3036 OE7E 3A FBEB LD A, ( SFTKEY)
3037 OE81 E6 03 AND 3
3038 OE83 87 ADD A,A
3039 OE84 SF LD E,A
3040 OE85 16 00 LD D,O
3041 OE87 21 ODD3 LD HL,ALPJMP
3042 OE8A 19 ADD HL,DE
MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 38-2 114
- MSXIO - Keyboard encoding routines

3043 OE8B 7E LD A, (HL) ;Get jump address


3044 OE8C 23 INC HL
3045 OE8D 66 LD H,(HL)
3046 OE8E 6F LD L,A
3047 OE8F 79 LD A,C ;Get code
3048 OE90 D6 15 SUB 15H ;Make it a control character (1 - 26)
3049 OE92 E9 JP (HL)
3050 OE93 KEYSFT:
3051
3052 OE93 C6 20 ADD A, I
I

3053 OE95 KEYNOM:


3054 OE95 47 LD B,A ; Save code
3055 OE96 3A FCAB LD A, (CAPST)
3056 OE99 2F CPL
3057 OE9A E6 20 AND OOlOOOOOB ;Bit 5 is on if CAP lock not active
3058 OE9C AB XOR B
3059 OE9D C6 40 ADD A,OlOOOOOOB
3060 OE9F 18 DA JR JPUTCH
3061 OEAl KYCODl:
3062
3063 OEAl 21 ODDB LD HL ,KYClTB
3064 OEM 3A FBEB LD A, ( SFTKEY)
3065 OEA7 E6 03 AND 3 ;Extract shift and control status
3066 0EA9 87 ADD A,A
3067 OEAA 5F LD E,A
3068 OEAB 16 00 LD D,O
3069 OEAD 19 ADD HL,DE
3070 OEAE 7E LD A, (HL)
3071 OEAF 23 INC HL
3072 OEBO 66 LD H,(HL)
3073 OEBl 6F LD L,A
MSX ROM BASIC BIOS } Macro-BO 3.44 Ol-Jan-85 PAGE 38-3 115
- MSXIO - Keyboard encoding routines

3074 OEB2 59 LD E,C


3075 OEB3 19 ADD HL,DE
3076 0EB4 7E LD A, {HL)
3077 OEB5 FE FF CP OFFH ;Should generate some code?
3078 OEB7 C2 OF55 JP NZ,PUTCHR ;Yes
3079 OEBA C9 RET ;No code should be generated
3080 OEBB KYFUNC:
3081
3082 ; Function keys
3083
3084 OEBB 3A FBEB LD A, {SFTKEY) ;Is shift pressed?
3085 OEBE OF RRCA
3086 OEBF 38 04 JR C,KYFNCl ;No
3087 OECl 79 LD A,C
3088 OEC2 C6 05 ADD A,5
3089 OEC4 4F LD C,A
3090 OEC5 KYFNCl:
3091 OEC5 59 LD E,C ; [DE] is (56 •• 65)
3092 OEC6 16 00 LD D,0
3093 OEC8 21 FB99 LD HL, FNKFLG-53 ;Check if this function key is an event device
3094 OECB 19 ADD HL,DE
3095 OECC 7E LD A, {HL)
3096 OECD A7 AND A
3097 OECE 20 13 JR NZ,FNKINT ;Request trap if not in direct mode
3098 OEDO KYFNC2:
3099 OEDO EB EX DE,HL
3100 OEDl 29 ADD HL,HL
3101 OED2 29 ADD HL,HL
3102 OED3 29 ADD HL,HL
3103 OED4 29 ADD HL,HL
3104 OED5 11 F52F LD DE,FNKSTR-53*16
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 38-4 116
- MSXIO - Keyboard encoding routines

3105 0ED8 19 ADD HL,DE ;Get fun ct ion key string address
3106 OED9 EB EX DE,HL ; MCJ\T e address to DE
3107 OEDA KYFNC3:
3108 OEDA lA LD A, (DE) ;Get from function key string
3109 OEDB A7 AND A ;End of string
3110 OEDC C8 RET z ;Yes
3111 OEDD CD OF55 CALL PUTCHR ;Put this character in buffer
3112 OEEO 13 INC DE ;Check next character
3113 OEEl 18 F7 JR KYFNC3
3114 OEE3 FNKINT:
3115
3116 OEE3 2A F41C LD HL , (CURL IN ) ;Are we in direct mode (CURLIN=65535)
3117 OEE6 23 INC HL
3118 0EE7 7C LD A,H
3119 OEE8 BS OR L
3120 0EE9 28 E5 JR Z,KYFNC2 ;Yes, treat as normal function key
3121 OEEB 21 FBAD LD HL,TRPTBL-53*3
3122 OEEE 19 ADD HL,DE
3123 OEEF 19 ADD HL,DE
3124 OEFO 19 ADD HL,DE
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 39 117
- MSXIO - Keyboard encoding routines

3125
3126
3127 OE Fl REQTRP:
3128
312 9 ; Request trap (called to request trap for event devices)
3130
3131
3132 ; Since REQTRP is mostly called from within an interrupt routine,
3133 ; don't touch the interrupt mask through DI or EI.
3134
3135 OE Fl 7E LD A, (HL)
3136 OEF2 E6 01 AND 1 ;Trap on?
3137 OEF4 C8 RET z ;TRAP NOT ON
3138 0EF5 7E LD A, (HL)
3139 OEF6 F6 04 OR 4 ;Trap request
3140 OEF8 BE CP (HL)
3141 OEF9 C8 RET z ;No change
3142 OEFA 77 LD (HL) ,A
3143 OEFB EE 05 XOR 5 ;Trap on + Trap request
3144 OEFD co RET NZ
3145 OEFE 3A FBD8 LD A, (ONGSBF)
3146 OFOl 3C INC A
314 7 OF02 32 FBD8 LD (ONGSBF) ,A
3148 OF05 C9 RET
3149
3150 OF06 KYCLS:
3151 OF06 3A FBEB LD A, (SFTKEY) ;Set carry if shift not pressed
3152 OF09 OF RRCA
3153 OFOA 3E OC LD A,OCH ;Load code for CLS
3154 OFOC DE 00 SBC A,0 ;Change to HOME if shift not pressed
3155 OFOE 18 45 JR PUTCHR
MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 39-1 118
- MSXIO - Keyboard encoding routines

3156 OFlO KYEASY:


3157
3158 ; Easily converted keys
3159
3160 OFlO CD FDDl CALL H.KYEA ;For CCP (Cut, copy, paste) editor rom
3161 OF13 5F LD E,A ;These character are simply taken from table
3162 OF14 16 00 LD D,0
3163 OF16 21 ODE3 LD HL,EASYTB-48
3164 0Fl9 19 ADD HL,DE
3165 OFlA 7E LD A, (HL)
3166 OFlB A7 AND A ;Should this key generate some code
3167 OFlC CB RET z ;No
3168 OFlD 18 36 JR PUTCHR ;Yes
3169 OFlF KYKLOK:
3170
3171 ; Kana lock key
3172
3173 OFlF 21 FCAC LD HL,KANAST
3174 OF22 7E LD A, (HL)
3175 OF23 2F CPL
3176 OF24 77 LD (HL) ,A
3177 OF25 3E OF LD A,OFH
3178 OF27 D3 AO OUT (PSG.LW) ,A
3179 OF29 DB A2 IN A, (PSG.DR)
3180 OF2B E6 7F AND 7FH
3181 OF2D 47 LD B,A
3182 OF2E 7E LD A, (HL)
3183 OF2F 2F CPL
3184 OF30 E6 80 AND 80H
3185 OF32 BO OR B
3186 OF33 D3 Al OUT (PSG. DW) ,A
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 39-2 119
- MSXIO - Keyboard encoding routines

3187 OF35 NOKEY:


3188 OF35 C9 RET
3189 OF36 KYLOCK:
3190
3191 ; Capital lock key
3192
3193 OF36 21 FCAB LD HL,CAPST
3194 OF39 7E LD A, (HL) ; Toggle capital status
3195 OF3A 2F CPL
3196 OF3B 77 LD (HL) ,A ;Update capital status
3197 OF3C 2F CPL
3198 OF3D CHGCAP:
3199 OF3D A7 AND A
3200 OF3E 3E OC LD A,OCH ;Assume 'turn off'
3201 OF40 28 01 JR Z,CGCAPl ;Good assumption
3202 0F42 3C INC A ;Change to 'turn on'
3203 OF43 CGCAPl:
3204 OF43 D3 AB OUT (PPI .CM) ,A
3205 OF45 C9 RET
3206 OF46 KYSTOP:
3207
3208 ; STOP key
3209 ;
3210 OF46 3A FBEB LD A, (SFTKEY)
3211 OF49 OF RRCA ;Moire CTRL status to carry
3212 OF4A OF RRCA
3213 OF4B 3E 03 LD A,3 ;Assume CTRL pressed also
3214 OF4D 30 01 JR NC,KYSTPl ;Good assumption
3215 OF4F 3C INC A ;CTRL not pressed, just treat as pause
3216 OF50 KYSTPl:
3217 OF50 32 FC9B LD (INTFLG) ,A
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 39-3 120
- MSXIO - Keyboard encoding routines

3218 OF53 38 OF JR C,GENCLK ;Only generate click if pause


3219 OF55 PUTCHR:
3220
3221 Put one character in key buffer.
3222
3223 OF55 2A F3F8 LO HL , ( PUTPNT) ;Load PUTPNT in [HL]
3224 OF58 77 LO ( HL) ,A ; Save the character to buffer
3225 0F59 CD 10C2 CALL UPDATE ;Increment PUTPNT
3226 OF5C 3A F3FA LO A, (GETPNT) ;Load lower 8bit of GETPNT
3227 OF5F BO CP L ;Compare it with new PUTPNT
3228 OF60 C8 RET z ;If same skip next step
3229 OF61 22 F3F8 LO ( PUTPNT) , HL ; Save HL in PUTPNT
3230 OF64 GENCLK:
3231 OF64 3A F3DB LO A, (CLIKSW) ;Key click enabled?
3232 OF67 A7 AND A
3233 OF68 C8 RET z ;No
3234 OF69 3A FBD9 LO A, (CLIKFL) ;Already generated?
3235 OF6C A7 AND A
3236 OF6D co RET NZ ;Yes, don't click any more
3237 OF6E 3E OF LO A,OFH
3238 OF70 32 FBD9 LO (CLIKFL) ,A ; Set flag to disable more clicks
3239 OF73 03 AB OUT (PPI.CM) ,A
3240 OF75 3E OA LO A,OAH
3241 OF77 CLICKW:
3242 OF77 30 DEC A
3243 OF78 20 FD JR NZ,CLICKW
3244 OF7A CHGSND:
3245 OF7A A7 AND A
3246 OF7B 3E OE LO A,OEH ;Assume 'turn off'
3247 OF7D 28 01 JR Z,CGSNDl ;Good assumption
3248 OF7F 3C INC A ;Change to 'turn on'
MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 39-4 121
- MSXIO - Keyboard encoding routines

3249 OF80 CGSNDl:


3250 OF80 D3 AB OUT ( PPI.CM) ,A
3251 OF82 C9 RET
3252 OF8;3 KYKANA:
3253
3254 ; KANA key pressed while KANA lock is active
3255
3256 OF83 3A FCAD LD A, (KANAMD) ; JI S or AIUEO?
3257 OF86 A7 AND A ; Affect z flag
3258 OF87 3A FBEB LD A, (SFTKEY) ;Check shift key
3259 OF8A OF RRCA ;Affect Carry flag
3260 OF8B 28 OA JR Z,KAIUEO ; AIUEO order
3261 OF8D 21 101D LD HL,KANJNO
3262 OF90 38 OD JR C,KYKANl
3263 OF92 21 104D LD HL,KANJSF
3264 OF95 18 08 JR KYKANl
3265 OF97 KAIUEO:
3266
3267 OF97 21 OFBD LD HL,KANANO ; Assume shift not pressed
3268 OF9A 38 03 JR C,KYKANl ;Good assumption
3269 OF9C 21 OFED LD HL,KANASF
3270 OF9F KYKANl:
3271 OF9F 06 00 LD B,O
3272 OF Al 09 ADD HL,BC
3273 OFA2 01 OF55 LD BC,PUTCHR ;Push jump address
3274 OFAS cs PUSH BC
3275 0FA6 3A FCAB LD A, (CAPST) ;Capital lock (katakana) active?
3276 OFA9 A7 AND A
3277 OFAA 7E LD A, (HL)
3278 OFAB co RET NZ ;active
3279 OFAC FE A6 CP 165+1 ;Special characters?
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-8S PAGE 39-S 122
- MSXIO - Keyboard encoding routines

3280 OFAE D8 RET c ;Yes, no conversion necessary


3281 OFAF FE BO CP OBOH
3282 OFBl C8 RET z
3283 OFB2 FE DE CP ODEH
3284 OFB4 DO RET NC
328S OFBS D6 20 SUB I I
;Assume first half
3286 OFB7 FE AO CP 191-32+1 ;Really first half
3287 OFB9 D8 RET c ;Good assumption
3288 OFBA C6 40 ADD A,32+32 ;Compensate
3289 OFBC C9 RET
3290 OFBD KANANO:
3291 ; Kana table (AIUEO order, un-shifted
3292
3293 OFBD C9 Bl B2 B3 DB OC9H,OB1H,OB2H,OB3H,OB4H,OBSH,0CSH
3294 OFCl B4 BS CS
329S OFC4 C6 C7 C8 D7 DB OC6H,OC7H,OC8H,OD7H,OD8H,OD9H,ODAH
3296 OFC8 D8 D9 DA
3297 OFCB DB D3 DE DF DB ODBH,OD3H,ODEH,ODFH,OD6H,ODCH,OA6H
3298 OFCF D6 DC A6
3299 0FD2 DD BB C4 C2 DB ODDH,OBBH,OC4H,OC2H,OBDH,OB8H,0BEH
3300 OFD6 BD B8 BE
3301 OFD9 BF CF CC DO DB OBFH,OCFH,OCCH,ODOH,ODlH,OD2H,ODSH
3302 OFDD Dl D2 DS
3303 OFEO D4 CD CE B6 DB OD4H,0CDH,OCEH,OB6H,OB9H,OBCH,0BAH
3304 OFE4 B9 BC BA
330S 0FE7 CB C3 B7 Cl DB OCBH,OC3H,OB7H,OC1H,OCAH,0COH
3306 OFEB CA CO
3307 OFED KANASF:
3308 ; Shifted
3309
3310 OFED C9 A7 A8 A9 DB OC9H,OA7H,OA8H,OA9H,OAAH,OABH,OCSH
MSX ROM BASIC BIOS ) Macro-SO 3.44 Ol-Jan-S5 PAGE 39-6 123
- MSXIO - Keyboard encoding routines

3311 OFFl AA AB C5
3312 OFF4 C6 C7 CS D7 DB OC6H,OC7H,OCSH,OD7H,ODSH,OD9H,ODAH
3313 OFFS DS D9 DA
3314 OFFB A2 D3 BO A3 DB 0A2H,OD3H,OBOH,0A3H,0AEH,OA4H,OA1H
3315 OFFF AE A4 Al
3316 1002 A5 BB C4 AF DB OA5H,OBBH,OC4H,0AFH,OBDH,OBSH,OBEH
3317 1006 BD B8 BE
331S 1009 BF CF CC DO DB OBFH,OCFH,OCCH,ODOH,ODlH,OD2H,OADH
3319 lOOD Dl D2 AD
3320 1010 AC CD CE B6 DB OACH,OCDH,OCEH,OB6H,OB9H,OBCH,OBAH
3321 1014 B9 BC BA
3322 1017 CB C3 B7 Cl DB OCBH,OC3H,OB7H,OC1H,OCAH,OCOH
3323 lOlB CA CO
3324 1010 KANJNO:
3325 ; Kana table JIS order, un-shifted
3326
3327 1010 DC C7 CC Bl DB ODCH,OC7H,OCCH,OB1H,OB3H,OB4H,OB5H
332S 1021 B3 B4 B5
3329 1024 D4 D5 D6 CE DB OD4H,OD5H,OD6H,OCEH,OCDH,OBOH,ODEH
3330 102S CD BO DE
3331 102B DF DA B9 Dl DB ODFH,ODAH,OB9H,OD1H,0CSH,OD9H,0D2H
3332 102F CS D9 D2
3333 1032 DB Cl BA BF DB ODBH,OClH,OBAH,OBFH,OBCH,OB2H,OCAH
3334 1036 BC B2 CA
3335 1039 B7 BS C6 CF DB OB7H,OBSH,OC6H,0CFH,OC9H,ODSH,OD3H
3336 103D C9 DS D3
3337 1040 DO D7 BE CO DB ODOH,OD7H,OBEH,OCOH,0BDH,OC4H,OB6H
333S 1044 BD C4 B6
3339 1047 C5 CB C3 BB DB OC5H,OCBH,OC3H,OBBH,ODDH,OC2H
3340 104B DD C2
3341 104D KANJSF:
MSX ROM BASIC BIOS ) Macro-BO 3.44 01-Jan-BS PAGE 39-7 124
- MSXIO - Keyboard encoding routines

3342 ; Shifted
3343
3344 104D A6 C7 CC A7 DB OA6H,OC7H,0CCH,OA7H,OA9H,0AAH,0ABH
334S lOSl A9 AA AB
3346 10S4 AC AD AE CE DB OACH,OADH,OAEH,OCEH,OCDH,OBOH,ODEH
3347 lOSB CD BO DE
334B lOSB A2 DA B9 A3 DB OA2H,ODAH,OB9H,OA3H,OA4H,OA1H,0ASH
3349 lOSF A4 Al AS
33SO 1062 DB Cl BA BF DB ODBH,OClH,OBAH,OBFH,OBCH,OABH,OCAH
33Sl 1066 BC AB CA
33S2 1069 B7 BB C6 CF DB OB7H,OBBH,OC6H,OCFH,OC9H,ODBH,0D3H
33S3 106D C9 DB D3
33S4 1070 DO D7 BE CO DB ODOH,OD7H,OBEH,OCOH,OBDH,OC4H,OB6H
33SS 1074 BD C4 B6
33S6 1077 CS CB C3 BB DB OCSH,OCBH,OC3H,OBBH,ODDH,OAFH
33S7 107B DD AF
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-8S PAGE 40 12S
- MSXIO - Keyboard encoding routines

33S8
33S9
3360 107D KYGRAP:
3361
3362 ; Gra[:hic characters
3363
3364 107D 06 00 LD B,O
336S 107F 21 1092 LD HL,GRPTAB
3366 1082 09 ADD HL,BC
3367 1083 7E LD A,(HL) ;Get from graphic key table
3368 1084 A7 AND A ;Should generate some code
3369 108S C8 RET z ;No
3370 1086 FE 80 CP 80H ; 1 byte code?
3371 1088 FS PUSH AF
3372 1089 3E 01 LD A,l ;Assume not
3373 108B DC OFSS CALL C,PUTCHR ;Was 2 byte code, put header byte
3374 108E Fl POP AF
337S 108F C3 OFSS JP PUTCHR
3376
3377 1092 GRPTAB:
3378 1092 4F 47 41 42 DB 4FH,47H,41H,42H,43H,44H,4SH
3379 1096 43 44 4S
3380 1099 46 4D 4E S7 DB 46H,4DH,4EH,S7H,OOH,49H,OOH
3381 109D 00 49 00
3382 lOAO 84 82 81 8S DB 84H,82H,81H,8SH,SFH,SDH,80H
3383 10A4 SF SD 80
3384 10A7 83 00 SB SA DB 83H,OOH,SBH,SAH,S4H,S8H,SSH
338S lOAB S4 S8 SS
3386 lOAE S3 4A S6 00 DB S3H,4AH,S6H,00H,00H,SEH,4BH
3387 10B2 00 SE 4B
3388 lOBS 00 00 so 00 DB 00H,OOH,SOH,00H,S2H,4CH,S9H
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 40-1 126
- MSXIO - Keyboard encoding routines

3389 10B9 52 4C 59
33 90 lOBC 00 51 00 5C DB OOH,51H,OOH,5CH,48H,OOH
3391 lOCO 48 00
33 92
3393 10C2 UPDATE:
3394
3395 ; Update pointer
3396
3397 10C2 23 INC HL
33 98 10C3 7D LD A,L
3399 10C4 FE 18 CP 18H ;Check buffer boundary
3400 10C6 co RET NZ
3401 10C7 21 FBFO LD HL,KEYBUF
3402 lOCA C9 RET
3403 lOCB CHGET:
3404
3405 ; Get one character from keyboard
3406
3407 lOCB E5 PUSH HL
3408 lOCC D5 PUSH DE
3409 lOCD C5 PUSH BC
3410 lOCE CD FDC2 '.:ALL H.CHGE
3411 lODl CD 0D6A CALL CH SNS ;Character already there?
3412 10D4 20 OB JR NZ,CHGET2 ;Yes, do not touch cursor
3413 10D6 CD 09DA CALL CKDPCO ;Display cursor if disabled
3414 10D9 CHGETl:
3415 10D9 CD OD6A CALL CHS NS ;Any character in buffer?
3416 lODC 28 FB JR Z,CHGETl ;No, wait
3417 lODE CD OA27 CALL CK ER CO ;Erase cursor if disabled
3418 lOEl CHGET2:
3419 lOEl 21 FC9B LD HL, INTFLG
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 40-2 127
- MSXIO - Keyboard encoding routines

3420 10E4 7E LD A, (HL)


3421 10E5 FE 04 CP 4 ;Code for pause?
3422 10E7 20 02 JR NZ,CHGET3 ;No
3423 10E9 36 00 LD (HL),0 ;Clear th is
3424 lOEB CHGET3:
3425 lOEB 2A F3FA LD HL, ( GETPNT)
3426 lOEE 4E LD C, (HL) ;Save pressed key
3427 lOEF CD 10C2 CALL UPDATE ; Update [ GETPNT)
3428 10F2 22 F3FA LD ( GETPNT) , HL ;Set new [GETPNT)
3429 10F5 79 LD A,C ;Pass result to Ace
3430 10F6 C3 08DB JP PBDHRT
3431 10F9 CKCNTC:
3432
3433 : Check ctl-C
3434
3435 10F9 ES PUSH HL
3436 lOFA 21 0000 LD HL,O ;To disable CONTinuing
3437 lOFD CD 03FB CALL ISCNTC
3438 llOO El POP HL
3439 llOl C9 RET
3440
3441 SUBTTL - MSXIO - Music routines
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 41 128
- MSXIO - Music rout in es

3442
3443 1102 WRTPSG:
3444
3445 Write data to specified register of GI sound chip
3446 Entry - {E)=data,{A)=register number
3447 Exit - All regs preserved
3448
3449 GI Reg# - usage
3450
3451 0 voice A fine tune
3452 1 voice A coarse tune
3453 2 voice B fine tune
3454 3 voice B coarse tune
3455 4 voice C fine tune
3456 5 voice C coarse tune
3457 7 B7,B6 =Reg 14,15 Input Output flags
3458 B5,B4,B3 =voice C,B,A noise enable {O=enabled)
3459 B2,Bl,BO =voice C,B,A tone enable (O=enabled)
3460 8 voice A volume { 0 •• 15 = volume, 16=use envelope)
3461 9 voice B volume (0 .• 15 =volume, 16=use envelope)
3462 10 voice C volume { 0 •• 15 = volume, 16=use envelope)
3463 11-12 envelope period
3464 13 envelope shape { 0 •• 15 )
3465 14 joystick 1 port
3466 15 joystick 2 port
3467
3468 1102 F3 DI
3469 1103 D3 AO OUT {PSG.LW) ,A ;LATCH ADDRESS
3470 1105 F5 PUSH AF
3471 1106 7B LD A,E
3472 1107 D3 Al OUT {PSG.DW) ,A ;OUTPUT DATA
MSX ROM BASIC BIOS ) Ma cro-80 3.44 01-Jan-85 PAGE 41-1 12 9
- MSXIO - Music routines

3473 1109 FB EI
3474 llOA Fl POP AF
3475 llOB C9 RET
3476 llOC INGI:
3477
3478 Input data from PAD
3479
3480 llOC 3E OE LO _A,PSG.PA
3481 llOE RDPSG:
3482 llOE 03 AO OUT (PSG.LW) ,A
3483 1110 DB A2 IN A, (PSG.DR)
3484 1112 C9 RET
3485 1113 BEEP:
3486
3487 BEEP causes a 'bell' sound
3488
3489 Exit - all registers are destroyed
3490
3491 1113 AF XOR A ; [A]=fine tune register for voice A
3492 1114 lE 55 LO E ,01010101B ;data to be written on RO
3493 1116 CD 1102 CALL WRTPSG
3494 1119 5F LO E,A ; 0 to coarse tune register
3495 lllA 3C INC A
3496 lllB CD 1102 CALL WRTPSG ;Rl coarse
3497 lllE lE BE LO E,10111110B ;enable voice [A] tone
3498 1120 3E 07 LO A, 7 ; [A]=voice enable register
3499 1122 CD 1102 CALL WRTPSG ;R7
3500 1125 5F LO E,A ;set volume to 7
3501 1126 3C INC A ; [A]=voice A volume register
3502 1127 CD 1102 CALL WRTPSG ;R8
3503 112A 01 0700 LO BC,07DOH
MSX ROM BASIC BIOS ) Ma cro-80 3.44 Ol-Jan-85 PAGE 41-2 130
- MSXIO - Music routines

3504 112D CD 1133 CALL CSDLYl


3505 1130 C3 04BD JP GI CINI ;reset GI sound chip
3 506 1133 CSDLYl:
3507 ;
3508 Delay by [BC]
3 509
3510 1133 OB DEC BC
3511 1134 E3 EX (SP) ,HL
3512 1135 E3 EX (SP) ,HL
3513 1136 78 LD A,B
3514 1137 Bl OR c
3515 1138 20 F9 JR NZ,CSDLYl
3516 113A C9 RET
3517
3518 113B ACTION:
3519
3520 Get action information from specified music queue. Perform
3521 action with synchronization. Called by interrupt routine
3522 in time.
3523
3524 - Action information -
3525
3526 ITEM 1 - 2 BYTES
3527
3528 +Number of bytes that follow this item
3529
3530 NNNTTTTTTTTTTTTT
3531 I
3532 +Period of time
3533
3534 ITEM 2, 3, 4 - FROM 1 TO 5 BYTES
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 41-3 131
- MSXIO - Music routines

353 5
3536 IF HO 2 BITS = 0 then this is the HO byte of the tone period.
3537 IF HO 2 BITS= 2 then this is just a volume control byte.
3538 IF BIT 4 IS ON, envelope control is in effect, and bits
3539 0-3 give shape number of envelope.
3540 IF BIT 4 IS OFF, BITS 0-3 give amplitude number.
3541 IF HO 2 BITS = 3 THEN this byte will be followed by a 2 byte
3542 envelope period, HO first.
3543
3544 ENTRY - (A)=Channel count number (0 •• 2)
3545
3546 ll3B 47 LD B,A ;Save channel number
3547 113C CD 1470 CALL GETVCP ;Get pointer into vcb of channel
3548 113F 2B DEC HL
3549 1140 56 LD D, (HL)
3550 1141 2B DEC HL
3551 1142 5E LD E,(HL) ;[DE]=countdown timer for voice
3552 1143 lB DEC DE ;Decrement timer
3553 1144 73 LD (HL),E ;Put it back lo first
3554 1145 23 INC HL
3555 1146 72 LD (HL),D
3556 1147 7A LD A,D
3557 1148 B3 OR E
3558 1149 co RET NZ ;No action if not zero
3559 114A 78 LD A,B ;Voice 0 uses queue 0
3560 114B 32 FB3E LD (QUEUEN) ,A ;Set queue ID for further 'CALL XGETQ'
3561 114E CD 11E2 CALL XGETQ
3562 1151 FE FF CP OFFH
3563 1153 28 5B JR Z,VOICOF ;branch if EOF marker
3564 1155 57 LD D,A ;SAVE IN [D]
3565 1156 E6 EO AND OEOH ;Get number of following items
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-8S PAGE 41-4 132
- MSXIO - Music routines

3S66 11S8 07 RLCA


3S67 11S9 07 RLCA
3S68 llSA 07 RLCA
3S69 llSB 4F LD C,A ; Save in [C]
3S70 llSC 7A LD A,D
3S71 llSD E6 lF AND lFH ;GET LO S BITS OF (D]
3S72 llSF 77 LD (HL) ,A ;Set MSB of new countdown
3S73 1160 CD 11E2 CALL XGETQ ;Get LSB of new countdown
3S74 1163 2B DEC HL
3S7S 1164 77 LD (HL) ,A ; Set it
3S76 116S oc INC c
3S77 1166 MORACT:
3S78 1166 OD DEC c ; Done all i terns?
3S79 1167 C8 RET z ;Yes
3S80 1168 CD 11E2 CALL XGETQ ;Get next i tern from queue
3S81 116B S7 LD D,A ; Save th is to [ D]
3S82 116C E6 CO AND OCOH ;Get HO 2 bi ts
3S83 116E 20 11 JR NZ,XVOL ; Execute volume action
3S84
3S8S Set tone
3S86
3S87 1170 CD 11E2 CALL XGETQ ;Get low byte for tone
3S88 1173 SF LD E,A
3S89 1174 78 LD A,B ;Get back voice number
3S90 117S 07 RLCA ;X 2
3S91 1176 CD 1102 CALL WRTPSG ;Output fine tune register
3S92 1179 3C INC A ;Point to coarse tune register
3S93 117A SA LD E,D ;Restore saved value
3S94 117B CD 1102 CALL WRTPSG ; Output coarse tune reg
3S9S 117E OD DEC c ;Decrement since we took 2 bytes from queue
3S96 117F 18 ES JR MORA CT
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-8S PAGE 41-S 133
- MSXIO - Music routines

3S97 1181 XVOL:


3S98
3S99 1181 67 LD H,A ;save it in [H]
3600 1182 E6 80 AND 80H ;BIT 7 SET?
3601 1184 28 OF JR Z,XEPER
3602
3603 : Set volume
3604
360S 1186 SA LD E,D ;[A] has junk in ho which shouldn't matter
3606 1187 78 LD A,B ;Get back voice number
3607 1188 C6 08 ADD A,8 ;Regs 8 ,9 ,10
3608 118A CD 1102 CALL WRTPSG ;output amplitude reg
3609 118D 7B LD A,E
3610 118E E6 10 AND lOH ;Check envelope generate bit
3611 1190 3E OD LD A,ODH ;Reg 13 for shape
3612 1192 C4 1102 CALL NZ,WRTPSG ; Set envelope shape if enabled
3613 119S XEPER:
3614
361S ; Set envelope period
3616
3617 119S 7C LD A,H
3618 1196 E6 40 AND OlOOOOOOB ;See if set envelope period
3619 1198 28 cc JR Z,MORACT ;No
3620 119A CD 11E2 CALL XGETQ ;Get ho byte of envelope period
3621 119D S7 LD D,A
3622 119E CD 11E2 CALL XGETQ ;Get low byte of envelope period
3623 llAl SF LD E,A
3624 11A2 3E OB LD A,OBH ;Register 11 for fine tune
362S 11A4 CD 1102 CALL WRTPSG
3626 11A7 3C INC A ;Point to coarse tune
3627 11A8 SA LD E,D
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 41-6 134
- MSXIO - Music routines

3628 11A9 CD 1102 CALL WRTPSG


3629 llAC OD DEC c
3630 llAD OD DEC c
3631 llAE 18 B6 JR MORA CT
3632 llBO VOICOF:
3633
3634 ; Comes here when an EOF mark has been found for a specified
3635 : channel
3636
3637 llBO 78 LD A,B
3638 llBl C6 08 ADD A,8 ;Set appropriate reg #
363 9 11B3 lE 00 LD E,O
3640 11B5 CD 1102 CALL WRTPSG ;Turn off volume
3641 11B8 04 INC B
3642 11B9 21 FB3F LD HL,MUSICF
3643 llBC AF XOR A
3644 llBD 37 SCF
3645 llBE RSTFLl:
3646 llBE 17 RLA
3647 llBF 10 FD DJNZ RSTFLl
3648 llCl A6 AND (HL) ;Get that bit
3649 11C2 AE XOR (HL) ;Turn it off
3650 11C3 77 LD (HL) ,A
3651 11C4 STRTMS:
3652
3653 ; STRTMS starts the background music task if:
3654 ·; 1) - it is currently idle (MUSICF=O) and
3655 ; 2) - there is work queued for it (PLYCNT .GTR. 0)
3656 ;
3657 11C4 3A FB3F LD A, (MUSICF)
3658 11C7 B7 OR A
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-8S PAGE 41-7 13S
- MSXIO - Music routines

36S9 11C8 co RET NZ ;return if background task is active


3660 11C9 21 FB40 LD HL,PLYCNT
3661 llCC 7E LD A, (HL)
3662 llCD B7 OR A
3663 llCE CB RET z ;return if nothing for it to do
3664 llCF 3S DEC (HL) ;l less thing for it to do
366S llDO 21 0001 LD HL ,1
3666 11D3 22 FB41 LD (VCBA) ,HL ;start it playing now
3667 11D6 22 FB66 LD (VCBB) ,HL
3668 11D9 22 FB8B LD (VCBC) ,HL
3669 llDC 3E 07 LD A,OlllB ;Trigger~
3670 llDE 32 FB3F LD (MUSICF) ,A
3671 llEl C9 RET
3672 11E2 XGETQ:
3673
3674 11E2 3A FB3E LD A, (QUEUEN) ;Get queue ID
367S llES ES PUSH HL
3676 11E6 DS PUSH DE
3677 11E7 cs PUSH BC
3678 11E8 CD 14AD CALL GETQ ;Get a byte from a specified queue
3679 llEB C3 08DB JP PBDHRT ;pop H, D, B and return
3680
3681 SUBTTL - MSXIO - Joystick and Paddle inter face
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 42 136
- MSXIO - Joystick and Paddle interface

3682
3683 llEE GTSTCK:
3684
3685 llEE 3D DEC A
3686 llEF FA 1200 JP M,KYSTCK ;STICK(O) - read cursor keys
3687 llF2 CD 120C CALL SLSTCK ;Read joystick
3688 llFS 21 12 33 LD HL,STKTBL
3689 llF8 STICKl:
3690 llF8 E6 OF AND OFH
3691 llFA SF LD E,A
3692 llFB 16 00 LD D,0
3693 llFD 19 ADD HL,DE
3694 llFE 7E LD A, (HL)
3695 llFF C9 RET
3696 1200 KYSTCK:
3697
3698 1200 CD 1226 CALL GTROW8 ; Read keyboard
3699 1203 OF RRCA ;Molle cursor status to lower four bits
3700 1204 OF RRCA
3701 1205 OF RRCA
3702 1206 OF RRCA
3703 1207 21 1243 LD HL,KSTKTB
3704 120A 18 EC JR STICKl
3705 120C SLSTCK:
3706
3707 ; Select proper joystick and read from it
3708
3709 120C 47 LD B,A
3710 120D 3E OF LD A,PSG.PB
37ll 120F F3 DI
3712 1210 CD llOE CALL RDPSG ;Read what is currently output to port B
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 42-1 137
- MSXIO - Joystick and Paddle interface

3713 1213 10 06 DJNZ SLSTCl ; STICK (1)


3714 1215 E6 DF AND ODFH ;Make sure P8 is low state
3715 1217 F6 4C OR 4CH ;Select joystick 2, enable P6,P7
3716 1219 18 04 JR SLSTC2
3717 121B SLSTCl:
3718
3719 121B E6 AF AND OAFH ;Select joystiC:k 1, make sure P8 is low state
3720 121D F6 03 OR 3 ;Enable P6,P7
3721 121F SLSTC2:
3722 121F D3 Al OUT (PSG.DW) ,A
3723 1221 CD llOC CALL INGI ;Read status of joystick port
3724 1224 FB EI
3725 1225 C9 RET
3726 1226 GTROW8:
3727
3728 ; Get keyboard's 8th row, bit assignments are as follows.
3729
3730 ; RDULxxxS
3731 ; 1111 I
3732 ; 1111 +- space
3733 ; I 11 +----- le ft
3734 ; I I+------ up
3735 ; I+------- down
3736 ; +-------- right
3737
3738 1226 F3 DI
3 739 1227 DB AA IN A, (PPI.CR)
3740 1229 E6 FO AND OFOH
3741 122B C6 08 ADD A,8
3742 122D D3 AA OUT (PPI.CW) ,A
3743 122F DB A9 IN A, (PPI.BR)
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 42-2 138
- MSXIO - Joystick and Paddle interface

3744 1231 FB EI
3745 1232 C9 RET
3746
3747 1233 STKTBL:
3748 1233 00 DB 0 ;RLBF
3749 1234 05 DB 5 ;RLB
3750 1235 01 DB 1 ;RL F
3751 1236 00 DB 0 ;RL
3752 1237 03 DB 3 ;R BF
3753 1238 04 DB 4 ;R B
3754 1239 02 DB 2 ;R F
3755 123A 03 DB 3 ;R
3756 123B 07 DB 7 ; LBF
3757 123C 06 DB 6 ; LB
3758 123D 08 DB 8 ; L F
3759 123E 07 DB 7 ; L
3760 123F 00 DB 0 ; BF
3761 1240 05 DB 5 ; B
3762 1241 01 DB 1 ; F
3763 1242 00 DB 0
3764
3765 1243 KSTKTB:
3766 1243 00 DB 0 ;RBFL
3767 1244 03 DB 3 ;RBF
3768 1245 05 DB 5 ;RB L
3769 1246 04 DB 4 ;RB
3770 1247 01 DB 1 ;R FL
3771 1248 02 DB 2 ;R F
3772 1249 00 DB 0 ;R L
3773 124A 03 DB 3 ;R
3774 124B 07 DB 7 ; BFL
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 42-3 139
- MSXIO - Joystick and Paddle interface

3775 124C 00 DB 0 ; BF
3776 124D 06 DB 6 ; B L
3777 124E 05 DB 5 ; B
3778 124F 08 DB 8 ; FL
3779 1250 01 DB 1 ; F
3780 1251 07 DB 7 ; L
3781 1252 00 DB 0
3782
3783 1253 GTTRIG:
3784
3785 1253 3D DEC A
3786 1254 FA 126C JP M,KEYTRG ;STRIG(O), use keyboard
3787 1257 F5 PUSH AF
3788 1258 E6 01 AND 1
3789 125A CD 120C CALL SL ST CK ;Read joystick
3790 125D Cl POP BC
3791 125E 05 DEC B
3792 125F 05 DEC B
3793 1260 06 10 LD B,lOH ;Prepare mask pattern for trigger A
3794 1262 FA 1267 JP M,TRIGl
3795 1265 06 20 LD B, I I ;Prepare mask pattern for trigger B
3796 1267 TRIGl:
3797 1267 AO AND B ; Extra ct tr i gger status
3798 1268 TRIG2:
3799 1268 D6 01 SUB 1 ;Return 255 if [Acc]=O, 0 if non-0
3800 126A 9F SBC A,A
3801 126B C9 RET
3802 126C KEYTRG:
3803
3804 126C CD 1226 CALL GTROW8 ; Read keyboard
3805 126F E6 01 AND 1 ;Extract space status
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 42-4 140
- MSXIO - Joystick and Paddle interface

3806 1271 18 F5 JR TRIG2


3807 1273 GTPDL:
3808
3809 ; Get value of paddle
3810
3811 ; Input parameters (passed via [Ace])
3812
3813 ; 1 - Paddle A connected to joystick port 1
3814 ; 2 - Paddle A connected to joystick port 2
3815 ; 3 - Paddle B connected to joystick port 1
3816 ; 4 - Paddle B connected to joystick port 2
3817 ; 5 - Paddle C connected to joystick port 1
3818 ; 6 - Paddle C connected to joystick port 2
3819 ; 7 - Paddle D connected to joystick port 1
3820 ; 8 - Paddle D connected to joystick port 2
3821 ; 9 - Paddle E connected to joystick port 1
3822 ; 10 - Paddle E connected to joystick port 2
3823 ; 11 - Paddle F connected to joystick port 1
3824 ; 12 - Paddle F connected to joystick port 2
3825
3826 1273 3C INC A ;Force parameter 2 based
3827 1274 A7 AND A
3828 1275 lF RRA
3829 1276 F5 PUSH AF ; Save port # (carry reset if port 1)
3830 1277 47 LD B,A
3831 1278 AF XOR A
3832 1279 37 SCF
3833 127A PDLl:
3834 127A 17 RLA ;Form mask pattern
3835 127B 10 FD DJNZ PDLl
3836 127D 47 LD B,A ; Set mask pattern
MSX ROM BASIC BIOS } Macro-80 3.44 Ol-Jan-85 PAGE 42-5 141
- MSXIO - Joystick and Paddle interface

3837 127E Fl POP .AF


3838 127F OE 10 LD C,lOH ; Assume port 1
3839 1281 11 03AF LD DE,03AFH
3840 1284 30 05 JR NC,PDLPl ;Good assumption
3841 1286 OE 20 LD c, I I

3842 1288 11 4C9F LD DE,4C9FH


3843 128B PDLPl:
3844 128B 3E OF LD A,PSG.PB
3845 128D F3 DI
3846 128E CD llOE CALL RDPSG ;Get current port B content
384 7 1291 A3 AND E
3848 1292 B2 OR D
3849 12 93 Bl OR c
3850 1294 D3 Al OUT (PSG.DW},A ;Set trigger high
3851 1296 A9 XOR c
3852 1297 D3 Al OUT ( PSG. DW} ,A ;Set trigger low again
3853 1299 3E OE LD A,OEH
3854 129B D3 AO OUT (PSG.LW} ,A
3855 129D OE 00 LD C,0 ;Initialize counter
3856 129F PDL2:
3857 129F DB A2 IN A, (PSG.DR}
3858 12Al AO AND B ;End of pulse?
3859 12A2 28 05 JR Z,PDL3 ;Yes
3860 12A4 oc INC c ; Bump counter
3861 12A5 C2 12 9F JP NZ, PDL2 ; No Oil er flow yet
3862 12A8 OD DEC c ;Make it 255
3863 12A9 PDL3:
3864 12A9 FB EI
3865 12AA 79 LD A,C ;Return counted value
3866 12AB C9 RET
3867 12AC GTPAD:
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 42-6 142
- MSXIO - Joystick and Paddle interface

3868
3869 Read touch pad (NEC PC-6051 compatible)
3870
3871 Input parameter (passed via [Ace] )
3872
3873 0 - sense touch pad status
3874 1 - return X coordinate !for touch pad connected
3875 2 - return Y coordinate Ito joystick port 1
3876 3 - return switch status
3877
3878 4 - sense touch pad status
3879 5 - return X coordinate !for touch pad connected
3880 6 - return Y coordinate Ito joystick port 2
3881 7 - return switch status
3882
3883 Result is returned via [Ace] . As for status, 255 is returned
3884 if true, 0 if false.
3885
3886 12AC FE 04 CP 4 ;Read pad connected to port 1
3887 12AE 11 OCEC LD DE,OCECH ;Assume so
3888 12Bl 38 05 JR C,GTPDPl ;Good assumption
3889 12B3 11 03D3 LD DE,03D3H ;Connected to port 2
3890 12B6 D6 04 SUB 4
3891 12B8 GTPDPl:
3892 12B8 3D DEC A ; Argument= 0?
3893 12B9 FA 12C5 JP M,GTPADO ;If so, read pad and return status
3894 12BC 3D DEC A
3895 12BD 3A FC9D LD A, (PADX) ;Assume PAD(l) - X coordinate
3896 12CO F8 RET M ;Good assumption
3897 12Cl 3A FC9C LD A, (PADY) ;Return Y coordinate
3898 12C4 CB RET Z
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 42-7 143
- MSXIO - Joystick and Paddle interface

3899 12C5 GTPADO:


3900 12C5 F5 PUSH AF ; Save status (minus if PAD(O) specified)
3901 12C6 EB EX DE,HL ; [L]=bits that are not to be modified
3902 12C7 22 F866 LD (RUNFLG) ,HL ;[H]=bits that are to be added
3903 12CA 9F SBC A,A
3904 12CB 2F CPL
3905 12CC E6 40 AND OlOOOOOOB
3906 12CE 4F LD C,A ;O if port 1 specified, 100 octal if port 2
3907 12CF 3E OF LD A,PSG.PB
3908 12Dl F3 DI ;disable interrupt till done
3909 12D2 CD llOE CALL RDPSG
3910 12D5 E6 BF AND OBFH
39ll 12D7 Bl OR c
3912 12D8 D3 Al OUT (PSG.DW),A ; Select proper port
3913 12DA Fl POP AF
3914 12DB FA 12E8 JP M,TRYAGN ;PAD(O) specified
3915 12DE CD llOC CALL INGI
3916 12El FB EI
3917 12E2 E6 08 AND 8
3918 12E4 D6 01 SUB 1
3919 12E6 9F SBC A,A
3920 12E7 C9 RET
3921 12E8 TRYAGN:
3922
3923 12E8 OE 00 LD c,o
3924 12EA CD 1332 CALL RED PAD ; inz
3925 12ED CD 1332 CALL RED PAD ;sense Panel input and select X
3926 12FO 38 28 JR C,PADXl ; brandl if no input
3927 12F2 CD 1320 CALL REDCOD ; read first coordinate
3928 12F5 38 23 JR C,PADXl ; branch if input released
3929 12F7 D5 PUSH DE ; save for com par is on
MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 42-8 144
- MSXIO - Joystick and Paddle interface

3930 12F8 CD 1320 CALL REDCOD ;read another input


3931 12FB Cl POP BC ;restore previos coord
3932 12FC 38 lC JR C,PADXl ;branch if input released
3933 12FE 78 LD A,B
3934 12FF 92 SUB D ; [A)=ABS(XO-Xl)
3935 1300 30 02 JR NC,NONEGl
3936 1302 2F CPL
3937 1303 3C INC A
3938 1304 NONEGl:
3939 1304 FE 05 CP 5 ; less than 5?
3940 1306 30 EO JR NC,TRYAGN ;no, try again
3941 1308 79 LD A,C
3942 1309 93 SUB E ; [A)=ABS(YO-Yl)
3943 130A 30 02 JR NC,NONEG2
3944 130C 2F CPL
3945 130D 3C INC A
3946 130E NONEG2:
394 7 130E FE 05 CP 5 ; less than 5
3948 1310 30 D6 JR NC,TRYAGN ;no, try again
3949 1312 7A LD A,D
3950 1313 32 FC9D LD (PADX),A ;update coordinate [X]
3951 1316 78 LD A,E
3952 1317 32 FC9C LD (PADY),A ;update coordinate [Y]
3953 131A PADXl:
3954 131A FB EI ;finally enable interrupt
3955 131B 7C LD A,H ;get SENSE input value
3956 131C D6 01 SUB 1
3957 131E 9F SBC A,A
3958 131F C9 RET ;return value
3959 1320 REDCOD:
3960
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 42-9 145
- MSXIO - Joystick and Paddle interface

3961 ; Read X,Y coordinate into [D,E]


3962 ;
3963 1320 OE OA LD C,OAH ;change to channel to [Y] when done
3964 1322 CD 1332 CALL RED PAD ;read [X]
3965 1325 D8 RET c ;return if input released
3966 1326 55 LD D,L
3967 1327 D5 PUSH DE
3968 1328 OE 00 LD C,O ;dlange to [X) after read
3969 132A CD 1332 CALL RED PAD ;read [Y)
3970 132D Dl POP DE
3971 132E SD LD E,L ;store Y read out
3972 132F AF XOR A ; clear carry
3973 1330 67 LD H,A ; force input is OK
3974 1331 C9 RET
3975 1332 REDPAD:
3976
3977 ; Read touch panel input into [L]
3978 ; Carry set if input released during read
3 979
3980 1332 CD 135B CALL CHKEOC ;make sure AD completed
3981 1335 06 08 LD B,8 ; input 8 bi ts
3982 1337 51 LD D,C ;input channel# after done
3983 1338 REDLOP:
3984 1338 CB 82 RES 0,D ;serial clock(SCK)=l
3985 133A CB 92 RES 2,D
3986 133C CD 136D CALL OUTGI
3987 133F CD llOC CALL INGI ;read PAD
3988 1342 67 LD H,A ;save SENSE status
3989 1343 lF RRA
3990 1344 lF RRA
3991 1345 lF RRA
MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 42-10 146
- MSXIO - Joystick and Paddle interface

3992 1346 CB 15 RL L ;bit 2 to LSB of [L]


3993 1348 CB C2 SET O,D ;SCK=O
3994 134A CB 02 SET 2,D
3995 134C CD 1360 CALL OUTGI
3996 134F 10 E7 DJNZ REDLOP
3997 1351 CB E2 SET 4 ,D
3998 1353 CB EA SET 5 ,D
3999 1355 CD 1360 CALL OUTGI ;initiate another AD
4000 1358 7C LO A,H ;LSB=SENSE status
4001 1359 lF RRA ;SENSE status to carry
4002 135A C9 RET ;OK if no carry
4003 135B CHKEOC:
4004
4005 : Check and wait for EOC
4006
4007 135B 3E 35 LO A,00110101B
4008 1350 Bl OR c
4009 135E 57 LO D,A
4010 135F CD 1360 CALL OUTGI ;reset CS
4011 1362 EOCCHK:
4012 1362 CD llOC CALL INGI
4013 1365 E6 02 AND 2 ; test EOC
4014 1367 28 F9 JR Z,EOCCHK
4015 1369 CB A2 RES 4,D ;set CS and return
4016 136B CB AA RES 5 ,D
4017 1360 OUTGI:
4018
4019 ; output [D] to PAD
4020
4021 1360 ES PUSH HL
4022 136E 05 PUSH DE
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 42-11 14 7
- MSXIO - Joystick and Paddle interface

4023 136F 2A F866 LD HL, ( RUNFLG) ;Also known as [PADWRK]


4024 1372 7D LD A,L
4025 1373 2F CPL
4026 1374 A2 AND D
4027 1375 57 LD D,A
4028 1376 3E OF LD A,PSG.PB
4029 1378 D3 AO OUT (PSG.LW) ,A
4030 137A DB A2 IN A,(PSG.DR)
4031 137C A5 AND L
4032 137D B2 OR D
4033 137E B4 OR H
4034 137F D3 Al OUT (PSG.DW) ,A
4035 1381 Dl POP DE
4036 1382 El POP HL
4037 1383 C9 RET
4038
4039 SUBTTL - MSXIO - Misc. routines for MSXIO
MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 43 148
- MSXIO - Misc. routines for MSXIO

4040
4041 1384 STMOTR:
4042 1384 A7 AND A
4043 1385 FA 1392 JP M,FLPMOT ;Flip motor switch
4044 1388 STMOTl:
4045 1388 20 03 JR NZ,MOTRON
4046 138A 3E 09 LD A,00001001B ; Stop motor
4047 138C C2 DB OC2H ; Skip next 2 bytes ('JNZ' instruction)
4048 138D MOTRON:
4049 138D 3E 08 LD A,8
4050 138F D3 AB OUT ( PPI.CM) ,A
4051 1391 C9 RET
4052 1392 FLPMOT:
4053
4054 1392 DB AA IN A, (PPI.CR)
4055 1394 E6 10 AND lOH
4056 1396 18 FO JR STMOTl
4057 1398 NMI:
4058
4059 ; NMI handler
4060
4061 1398 CD FDD6 CALL H.NMI
4062 139B ED 45 RETN ;RETN
MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 44 149
- MSXIO - Misc. routines for MSXIO

4063
4064
4065 139D INIFNK:
4066
4067 ; Initialize function key strings
4068
4069 139D 01 OOAO LD BC,OAOH
4070 13AO 11 F87F LD DE,FNKSTR
4071 13A3 21 13A9 LD HL,FKTABL
4072 13A6 ED BO LDIR
4073 13A8 C9 RET
4074
4075 13A9 FNKDEF:
4076 13A9 63 6F 6C 6F DB "color "
4077 13AD 72 20
4078 13AF DS 10
4079 13B9 61 75 74 6F DB "auto "
4080 13BD 20
4081 13BE DS 11
4082 13C9 67 6F 74 6F DB "goto II

4083 13CD 20
4084 13CE DS 11
4085 13D9 6C 69 73 74 DB "list II

4086 13DD 20
4087 13DE DS 11
4088 13E9 72 75 6E DB "run"
4089 13EC OD DB 13
4090 13ED DS 12
4091 13F9 63 6F 6C 6F DB "color 15 ,4 , 7"
4092 13FD 72 20 31 35
4093 1401 2C 34 2C 37
MSX ROM BASIC BIOS ) Macro-BO 3.44 01-Jan-B5 PAGE 44-1 150
- MSXIO - Misc. routines for MSXIO

4094 1405 OD DB 13
4095 1406 DS 3
4096 1409 63 6C 6F 61 DB "cload"
4097 140D 64
409B 140E 22 DB 34
4099 140F DS 10
4100 1419 63 6F 6E 74 DB "cont"
4101 141D OD DB 13
4102 141E DS 11
4103 1429 6C 69 73 74 DB 11
1 ist II
o

4104 142D 2E
4105 142E OD lE lE DB 13,30,30
4106 1431 DS B
4107 1439 oc DB 12
410B 143A 72 75 6E DB "run"
4109 143D OD DB 13
4110 143E DS 11
4111
4112 1449 RDVDP:
4113
4114 1449 DB 99 IN A, (VDP.SR)
4115 144B C9 RET
4116 144C RSLREG:
4117
411B 144C DB AB IN A, ( PPI.AR)
4119 144E C9 RET
4120 144F WSLREG:
4121
4122 144F D3 AB OUT (PPI.AW) ,A
4123 1451 C9 RET
4124 1452 SNSMAT:
MSX ROM BASIC BIOS ) Ma cro-80 3.44 01-Jan-85 PAGE 44-2 151
- MSXIO - Misc. routines for MSXIO

4125
4126 1452 4F LD C,A
4127 1453 F3 DI
4128 1454 DB AA IN A, (PPI .CR) ;Get what is currently output to Port C
4129 1456 E6 FO AND OFOH ;Leave higher 4 bi ts unaffected
4130 1458 81 ADD A,C
4131 1459 D3 AA OUT (PPI.CW) ,A ; Select row
4132 145B DB A9 IN A, (PPI.BR) ;Get column information of selected row
4133 145D FB EI
4134 145E C9 RET
4135 145F ISFLIO:
4136
4137 Check if we 're doing device I O
4138
4139 145F CD FEDF CALL H .ISFL
4140 1462 E5 PUSH HL ;Save [H,L)
4141 1463 2A F864 LD HL , ( PTRFIL ) ;Get file pointer
4142 1466 7D LD A,L
4143 1467 B4 OR H ;No zero?
4144 1468 El POP HL ; Res tore [ H ,L]
4145 1469 C9 RET
4146 146A DCOMPR:
414 7
4148 COMPAR compares [H,L] with [D,E] unsigned
4149
4150 [H,L] less than [D,E] set carry
4151 [H,L] = [D,E] set zero
4152
4153 [A) is the only register used
4154
4155 146A 7C LD A,H
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 44-3 152
- MSXIO - Misc. routines for MSXIO

4156 146B 92 SUB D


4157 146C co RET NZ
4158 146D 7D LD A,L
4159 146E 93 SUB E
4160 146F C9 RET
4161 1470 GETVCP:
4162
4163 Entry - [A) =voice id (0 •• 2)
4164 Exit - [HL] = pointer to QLENGX for voice (within static var buf)
4165 [A] =· 0. All other registers preserved.
4166
4167 14 70 2E 02 LD L ,2
4168 14 72 18 03 JR GETVCl
4169 14 74 GETVC2:
4170
4171 Entry - [L] = desired displacement into voice buffer
4172 Exit - [HL) =pointer to desired variable for voice VOICEN
4173 [A] = 0. All other registers preserved.
4174
4175 14 74 3A FB38 LD A, (VOICEN)
4176 14 77 GETVCl:
4177
4178 Entry - [A) =voice id (0 .• 2)
4179 [L] = des ired displacement into voice buffer
4180 Exit - [HL) = pointer to desired variable for voice VOICEN
4181 [A]= O. All other registers preserved.
4182
4183 14 77 DS PUSH DE
4184 1478 ll FB41 LD DE,VCBA
4185 147B 26 00 LD H,O
4186 147D 19 ADD HL,DE
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 44-4 153
- MSXIO - Misc. routines for MSXIO

4187 147E B7 OR A
4188 147F 28 07 JR Z,GETVCX
4189 1481 11 0025 LD DE,25H ;VCB size
4190 1484 GETVCL:
4191 1484 19 ADD HL,DE
4192 1485 3D DEC A
4193 1486 20 FC JR NZ,GETVCL
4194 1488 GETVCX:
4195 1488 Dl POP DE
4196 1489 C9 RET
4197 148A PHYDIO:
4198
4199 148A CD FFA7 CALL H.PHYD
4200 148D C9 RET
4201 148E FORMAT:
4202
4203 148E CD FFAC CALL H.FORM
4204 1491 C9 RET
4205 SUBTTL - QUEUTL - Queue utility routines
MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 45 154
- QUEUTL - Queue utility routines

4206
4207 Copyright (C) 1980 by Microsoft Corporation
4208 written by Marc Wilson
4209
4210 This utility pr01Tides for multiple queues with the following
4211 capabilities:
4212
4213 Queues of varying length - 1,3,7,15,31,63,127,255
4214
4215 Eadl queue can be any of the possible lengths
4216 The queues can be initialized at any time and be
4217 located anywhere a single pointer (QUEUES) pr01Tides
4218 the address of the queue table.
4219
4220 The queue table has all information for each queue,
4221 6 bytes per queue. A single non-zero character can
4222 be pushed back on top of the queue.
4223
4224 The entry for eadl queue is as follows:
4225 +0 PUT OFFSET
4226 +l GET OFFSET
4227 +2 BACK CHARACTER
4228 +3 QUEUE LENGTH
4229 +4,+5 QUEUE ADDRESS
4230
4231 The utility assumes that the queue table is
4232 valid for all queue numbers passed to the routines
4233
4234 ;ROUTINES:
4235 All routines assume that [A] equals the queue number,
4236 ; [QUEUES] contains the address of the queue table.
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 45-1 155
- QUEUTL - Queue utility routines

4237 Other requirements follow.


4238 GETQ - Returns current top of queue in [A],
4239 zero flag set if queue empty
4240 PUTQ - Puts byte in [E] reg on end of queue,
4241 zero set if queue is full
4242
4243 ;NOTE:
4244 The routines are designed to be reentrant, howE!ITer
4245 there are some restrictions for cases involving a
4246 single queue (in any case operating on different
4247 queues is alright). The first restriction is that
4248 the same routine cannot be reentered. The second
4249 is that INITQ and POPQ do not allow PUTQ,
4250 GETQ or BCKQ to be entered.
4251
4252 LFTQ - Returns unused number of bytes in queue in [A] reg
4253 INITQ - Initialize queue to empty state,
4254 B reg=length, (DE)=ADDR
4255 *** All routines destroy the registers ***
4256
4257 SUBTTL - QUEUTL - Queue routines
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 46 156
- QUEUTL - Queue routines

4258
4259 1492 PUTQ:
4260
4261 ; Put data on queue
4262
4263 1492 CD 14FA CALL GETPTR ;Get queue pointers
4264 1495 78 LD A,B
4265 1496 3C INC A ;Bump puT
4266 1497 23 INC HL
4267 1498 A6 AND (HL) ;Wrap around
4268 1499 B9 CP c
4269 149A CB RET z ;QUEUE full
4270 149B E5 PUSH HL
4271 149C 2B DEC HL
4272 149D 2B DEC HL
4273 149E 2B DEC HL
4274 149F E3 EX (SP), HL ;Save place to put new pointer
4275 14AO 23 INC HL
4276 14Al 4F LD C,A ;Pointer in C
4277 14A2 7E LD A, (HL)
4278 14A3 23 INC HL
4279 14A4 66 LD H,(HL)
4280 14A5 6F LD L,A ;(HL) =QUEUE address
4281 14A6 06 00 LD B,0
4282 14A8 09 ADD HL,BC ; (HL) = Address to put char
4283 14A9 73 LD (HL) ,E
4284 14AA El POP HL
4285 14AB 71 LD (HL) ,C ;set new pointer
4286 14AC C9 RET
4287 14AD GETQ:
4288
MSX ROM BASIC BIOS ) Macro-SO 3.44 Ol-Jan-S5 PAGE 46-1 157
- QUEUTL - Queue routines

42S9 ; Get data from QUEUE


4290
4291 14AD CD 14FA CALL GETPTR ;Get queue pointers
4292 14BO 36 00 LD {HL),O ; zero back character
4293 14B2 20 lD JR NZ,GETBAK
4294 14B4 79 LD A,C
4295 14B5 BS CP B
4296 14B6 cs RET z ; QUEUE empty!
4297 14B7 23 INC HL
429S 14BS 3C INC A ; Bump GET offset
4299 14B9 A6 AND {HL) ;wrap around
4300 14BA 2B DEC HL
4301 14BB 2B OEC HL
4302 14BC E5 PUSH HL ; Save place to store pointer
4303 14BD 23 INC HL
4304 14BE 23 INC HL
4305 14BF 23 INC HL
4306 14CO 4F LD C,A ;offset in C
4307 14Cl 7E LD A, {HL)
430S 14C2 23 INC HL
4309 14C3 66 LD H,{HL)
4310 14C4 6F LD L,A ; [ HL] = QUEUE address
4311 14C5 06 00 LD B,O
4312 14C7 09 ADD HL,BC
4313 14CS 7E LD A, {HL) ;get char from QUEUE
4314 14C9 El POP HL
4315 14CA 71 LD {HL) ,C
4316 14CB B7 OR A
4317 14CC co RET NZ
431S 14CD 3C INC A
4319 14CE 3E 00 LD A,0
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 46-2 158
- QUEUTL - Queue routines

4320 14DO C9 RET


4321 14Dl GETBAK:
4322 14Dl 4F LD C,A
4323 14D2 06 00 LD B,0
4324 14D4 21 F970 LD HL,QUEBAK-1
4325 14D7 09 ADD HL,BC
4326 14D8 7E LD A, (HL)
4327 14D9 C9 RET
4328 14DA INITQ:
4329
4330 ; INITQ - Initialize QUEUE
4331
4332 14DA C5 PUSH BC ; Save queue 1 en gth
4333 14DB CD 1504 CALL QSTART ;Get addr of start of QUEUE table entry
4334 14DE 70 LD (HL), B ;Clear PUT offset
4335 14DF 23 INC HL
4336 14EO 70 LD (HL),B ;Clear GET offset
4337 14El 23 INC HL
4338 14E2 70 LD (HL) ,B ;Clear back character
4339 14E3 23 INC HL
4340 14E4 Fl POP AF
4341 14E5 77 LD (HL) ,A ; Set QUEUE 1 en gth
4342 14E6 23 INC HL
4343 14E7 73 LD (HL) ,E
4344 14E8 23 INC HL
4345 14E9 72 LD (HL),D ; Set QUEUE ad(jress
4346 14EA C9 RET
4347 14EB LFTQ:
4348
4349 ; LFTQ - Returns number of bytes remaining in QUEUE
4350
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 46-3 159
- QUEUTL - Queue routines

4351 14EB CD 14FA CALL CETPTR ;Get QUEUE ptrs


4352 14EE 78 LD A,B
4353 14EF 3C INC A
4354 14FO 23 INC HL
4355 14Fl A6 AND (HL)
4356 14F2 47 LD B,A ;B=PUT PTR+l
4357 14F3 79 LD A,C
4358 14F4 90 SUB B ;subtract PUT from GET
4359 14F5 A6 AND (HL) ;make it positive UNSIGNED INTEGER
4360 14F6 6F LD L,A
4361 14F7 26 00 LD H,0
4362 14F9 C9 RET
4363
4364 14FA GETPTR:
4365
4366 ; QUEUE general routines
4367
4368 14FA CD 1504 CALL QSTART ;Get start of QUEUE TABLE entry
4369 14FD 46 LD B, (HL) ;B = PUT OFFSET
4370 14FE 23 INC HL
4371 14FF 4E LD C, (HL) ;C = GET OFFSET
4372 1500 23 INC HL
4373 1501 7E LD A, (HL) ;A = BACK CHARACTER
4374 1502 B7 OR A
4375 1503 C9 RET
4376
4377 1504 QSTART:
4378 1504 07 RLCA ;*2
4379 1505 47 LD B,A
4380 1506 07 RLCA ;*4
4381 1507 80 ADD A,B ;*6
MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 46-4 160
- QUEUTL - Queue routines

4382 1508 4F LD C,A


4383 1509 06 00 LD B,0
4384 150B 2A F3F3 LD HL, (QUEUES)
4385 150E 09 ADD HL,BC
4386 150F C9 RET
4387 SUBTTL - MSXGRP - Graphic driver (Print a character on GRP screen)
MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 47 161
- MSXGRP - Graphic driver (Print a character on GRP screen

4388
4389 1510 GRPPRT:
4390
4391 Print a dlaracter on the graphic screen
4392
43 93 1510 E5 PUSH HL
4394 1511 D5 PUSH DE
43 95 1512 C5 PUSH BC
4396 1513 F5 PUSH AF
43 97 1514 CD 089D CALL CNVCHR ;Convert code
4398 1517 30 62 JR NC,JPPPAL ;Graphic header byte, return soon
4399 1519 20 08 JR NZ,GPRT05 ;Converted graphic code
4400 151B FE OD CP ODH ;CR?
4401 1510 28 5F JR Z,GRPCR ;Do not ignore CR even on graphic screen
I I
4402 151F FE 20 CP ;Control character?
4403 1521 38 58 JR C,JPPPAL ;Yes, ignore th is
4404 1523 GPRT05:
4405 1523 CD 0752 CALL GETPAT ;Get character pattern in PATWRK
4406 1526 3A F3E9 LD A, (FORCLR) ;Set color of character
4407 1529 32 F3F2 LD (ATRBYT) ,A
4408 152C 2A FCB9 LD HL, ( GRPACY)
4409 152F EB EX DE,HL ;Current Y coordinate in [DE]
4410 1530 ED 4B FCB7 LD BC, ( GRPACX) ;Current X coordinate in [BC]
4411 1534 CD 1599 CALL SCALXY ;Do the sealing
4412 1537 30 42 JR NC,JPPPAL ;Do not print if already out of screen
4413 153 9 CD 15DF CALL MAPXYC ;Map to CLOC and CMASK
4414 153C 11 FC40 LD DE,PATWRK
4415 153F OE 08 LD C,8 ; Row counter
4416 1541 GPRTlO:
4417 1541 06 08 LD B,8 ; Column counter
4418 1543 CD 1639 CALL FETCHC ;Get current CLOC and CMASK
MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 47-1 162
- MSXGRP - Gra[flic driver (Print a character on GRP screen

4419 1546 E5 PUSH HL ;Save these


4420 1547 F5 PUSH AF
4421 1548 lA LD A, (DE) ;Get pattern for a r<Y-N
4422 1549 GPRT20:
4423 1549 87 ADD A,A ;Check each bit
4424 154A F5 PUSH AF
4425 154B DC 167E CALL C,SETC ;Set it if 1
4426 154E CD 16AC CALL TRIGHT ;Malle 1 pixel right
4427 1551 El POP HL ;Assume out of screen
4428 1552 38 04 JR C,GPRT30 ;Good assumption, skip the rest
4429 1554 E5 PUSH HL
4430 1555 Fl POP AF
4431 1556 10 Fl DJNZ GPRT20 ;Loop till done all columns
4432 1558 GPRT30:
4433 1558 Fl POP AF ;Restore CLOC and CMASK
4434 1559 El POP HL
443 5 155A CD 1640 CALL STOREC ; Set these
4436 155D CD 170A CALL TDOWNC ;Malle 1 pixel d<:Y-Nn
4437 1560 38 04 JR C,GPRT40 ;Out of screen, skip rest and return
4438 1562 13 INC DE ;Point to next raN
4439 1563 OD DEC c
4440 1564 20 DB JR NZ,GPRTlO ;Loop till done all rows
4441 1566 GPRT40:
4442 1566 CD 15D9 CALL CHKMOD ;Check current screen mode
4443 1569 3A FCB7 LD A, (GRPACX)
4444 156C 28 06 JR Z,GPRT50 ;We're in high-resolution mode
4445 156E C6 20 ADD A, I I

4446 1570 38 oc JR C,GRPCR ;We 're going out of screen


4447 1572 18 04 JR GPRT60
4448 1574 GPRT50:
4449
MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 47-2 163
- MSXGRP - Gra?1ic driver (Print a character on GRP screen

4450 1574 C6 08 ADD A,8


4451 1576 38 06 JR C,GRPCR
4452 1578 GPRT60:
4453 1578 32 FCB7 LD (GRPACX) ,A ;Update cursor position
4454 157B JPPPAL:
4455 157B C3 08DA JP PO PALL
4456 157E GRPCR:
4457
4458 157E AF XOR A ;Reset X position
4459 157F 32 FCB7 LD (GRPACX) ,A
4460 1582 CD 15D9 CALL CH KMOD
4461 1585 3A FCB9 LD A, (GRPACY)
4462 1588 28 03 JR Z,GPRT70
4463 158A C6 20 ADD A,4*8
4464 158C 01 DB 1
4465 158D GPRT70:
4466 158D C6 08 ADD A,8
4467 158F FE CO CP OCOH
4468 1591 38 01 JR C,GPRT80
4469 1593 AF XOR A ;Reset Y position also
4470 1594 GPRT80:
4471 1594 32 FCB9 LD (GRPACY) ,A
4472 1597 18 E2 JR JPPPAL
4473 SUBTTL - MSXGRP - (Routines for general graphics)
MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 48 164
- MSXGRP - (Routines for general graI_ilics)

4474
4475 1599 SCALXY:
4476
4477 ; SCALXY - Clip:; X,Y to max values in physical size and flags out
4478 ; of range values.
4479 ;
4480 ; ENTRY [BC] = X ( 0 • • • max X) , [DE] = Y (0 ••• max Y)
4481 ; EXIT [BC] = X clipped, [DE] = Y clipped
4482 ; CARRY is reset if one of the value was out of bound
4483 ;
4484 1599 E5 PUSH HL ;save [ HL]
4485 159A C5 PUSH BC ; save [ BC ] - X coordinate
4486 159B 06 01 LD B,l ;no-error flag
4487 159D EB EX DE,HL ;Y coordinate to [HL]
4488 159E 7C LD A,H ; Is Y coordinate negative?
4489 159F 87 ADD A,A
4490 15AO 30 05 JR NC,YPOSTV ;No, positive
4491 15A2 21 0000 LD HL,0 ;Substitute by 0 is negative
4492 15A5 18 08 JR YNEGTV ;And set out of bound flag
4493 15A7 YPOSTV:
4494
4495 15A7 11 ooco LD DE,OCOH ;Maximum Y+l
4496 15AA E7 RST 20H ; Test [ HL ] with [ DE]
4497 15AB 38 04 JR C,SCLYOK ; if carry, not out of bound
4498 15AD EB EX DE,HL ; [HL] = 192
4499 15AE 2B DEC HL ;Y = 191 ,maximum Y coordinate
4500 15AF YNEGTV:
4501 15AF 06 00 LD B,O ;set out of bound flag
4502 15Bl SCLYOK:
4503 15Bl E3 EX (SP) ,HL ;save Y and get X to [ HL]
4504 15B2 7C LD A,H ;Is X coordinate negative?
MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 48-1 165
- MSXGRP - (Routines for general graphics)

4505 15B3 87 ADD A,A


4506 15B4 30 05 JR NC,XPOSTV ;No, positive
4507 15B6 21 0000 LD HL,0 ;Substitute by 0 if negative
4508 15B9 18 08 JR XNEGTV ;And set out of bound flag
4509 15BB XPOSTV:
4510
4511 15BB 11 0100 LD DE,OlOOH ;max X +l
4512 15BE E7 RST 20H ; Test [ HL] with [DE]
4513 15BF 38 04 JR C,SCLXOK
4514 15Cl EB EX DE,HL ;[HL]=256
4515 15C2 2B DEC HL ;[HL] = 255 - max X coordinate
4516 15C3 XNEGTV:
4517 15C3 06 00 LD B,O ;error flag
4518 15C5 SCLXOK:
4519 15C5 Dl POP DE ;restore [DE] = Y
4520 15C6 CD 15D9 CALL CHKMOD
4521 l5C9 28 08 JR Z,HRSSCL ;We're in high-resolution mode
4522 15CB CB 3D SRL L ;Divide both X and Y by 4 because we 're
4523 15CD CB 3D SRL L ;in multi-color mode
4524 15CF CB 3B SRL E
4525 15Dl CB 3B SRL E
4526 15D3 HRSSCL:
4527 15D3 78 LD A,B
4528 15D4 OF RRCA ; set carry if no error
4529 15D5 44 LD B,H ;[BC] = X
4530 15D6 4D LD C,L
4531 15D7 El POP HL ;restore [HL]
4532 15D8 C9 RET
4533 15D9 CHKMOD:
4534
4535 ; Check current screen mode
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 48-2 166
- MSXGRP - (Routines for general graphics)

4536
4537 1509 3A FCAF LD A, (SCRMOD)
4538 15DC 06 02 SUB 2 ;In what mode are we now?
4539 15DE C9 RET ;Return with the condition flag
4540 15DF MAPXYC:
4541
4542 MAPXYC - Maµ> X,Y coordinates to "C" (address, mask)
4543
4544 Entry: [BC) x, [DE) = Y
4545
4546 Exit: CLOC = [HL] -- Video Ram address
4547 CMASK = [A) -- Bit Mask
4548
4549 High-resolution mode ]
4550
4551 X coord - XXXXXXXX ( 8 bits, max=255)
4552 76543210
4553
4554 Y coord - YYYYYYYY ( 8 bits, max=l91)
4555 76543210
4556
4557 CLOC = YYYYYXXXXXYYY
4558 7654376543210
4559 xxx
4560 210
4561 ;----------------------------------------
4562 CMASK = 10000000 000
4563 01000000 001
4564 00100000 010
4565 00010000 011
4566 00001000 100
MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 48-3 167
- MSXGRP - (Routines for general grai;tiics)

4567 00000100 101


4568 00000010 110
4569 00000001 111
4570
4571 Multi-color mode ]
4572
4573 X coord - XXXXXX ( 6 bits, max=63 )
4574 543210
4575
4576 Y coord - YYYYYY ( 6 bits, max=47 )
4577 543210
4578
4579 CLOC = YYYXXXXXYYY
4580 54354321210
4581
4582 CMASK 11110000 if XO=O (even)
4583 CMASK 00001111 if XO=l (odd)
4584
4585 Note: The boundary check has already been done by a call
4586 to SCALXY, so no range checking is needed.
4587
4588 15DF cs PUSH BC ;Save X
4589 15EO CD 15D9 CALL CHKMOD ;Check current screen mode
4590 15E3 20 2E JR NZ,MMPXYC ;Multi-color mode
4591 15E5 51 LO D,C ; Save X to D also
4592 15E6 79 LD A,C
4593 15E7 E6 07 AND 7
4594 15E9 4F LD C,A
4595 15EA 21 160B LD HL,TWOPWR ;Table of power of two
4596 15ED 09 ADD HL,BC
4597 15EE 7E LD A, (HL) ;read bit mask CMASK
MSX ROM BASIC BIOS ) Macro-BO 3.44 01-Jan-85 PAGE 48-4 168
- MSXGRP - (Routines for general graphics)

4598 15EF 32 F92C LD (CMASK) ,A


4599 15F2 7B LD A,E ;Get Y coordinate
4600 15F3 OF RRCA
4601 15F4 OF RRCA
4602 15F!ii OF RRCA
4603 15F6 E6 lF AND OOOlllllB
4604 15F8 47 LD B,A
4605 15F9 7A LD A,D ;Get X coordinate
4606 15FA E6 FB AND lllllOOOB
4607 15FC 4F LD C,A
4608 15FD 7B LD A,E ;Get Y coordinate
4609 15FE E6 07 AND OOOOOlllB
4610 1600 Bl OR c
4611 1601 4F LD C,A
4612 1602 2A F3CB LD HL , ( GRPCGP)
4613 1605 09 ADD HL,BC
4614 1606 22 F92A LD (CLOC) ,HL ;Set pattern generator address
4615 1609 Cl POP BC
4616 160A C9 RET
4617 160B TWOPWR:
4618
4619 ; Table of power of two
4620
4621 160B 80 40 20 10 DB 80H,40H,20H,10H
4622 160F 08 04 02 01 DB 08H,04H,02H,01H
4623
4624 1613 MMPXYC:
4625
4626 ; Map XY for multi-color mode
4627
4628 1613 79 LD A,C ;Get X position
MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 48-5 169
- MSXGRP - (Routines for general graphics)

4629 1614 OF RRCA ;Even or odd?


4630 1615 3E FO LD A,llllOOOOB ;Assume e11en
4631 1617 30 02 JR NC,MMPXYl ;Good assumption
4632 1619 3E OF LD A,OOOOllllB ;Odd
4633 161B MMPXYl:
4634 161B 32 F92C LD (CMASK) ,A ; Set up mask pattern
4635 161E 79 LD A,C
4636 161F 87 ADD A,A
4637 1620 87 ADD A,A
4638 1621 E6 F8 AND lllllOOOB
4639 1623 4F LD C,A ;Get lower byte
4640 1624 7B LD A,E
4641 1625 E6 07 AND OlllB
4642 1627 Bl OR c
4643 1628 4F LD C,A
4644 1629 7B LD A,E
4645 162A OF RRCA
4646 162B OF RRCA
4647 162C OF RRCA
4648 162D E6 07 AND OlllB
4649 162F 47 LD B,A ;Get higher byte
4650 1630 2A F3D5 LD HL, (MLTCGP) ;Load start address of pattern table
4651 1633 09 ADD HL,BC
4652 1634 22 F92A LD (CLOC) ,HL
4653 1637 Cl POP BC
4654 1638 C9 RET
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-8S PAGE 49 170
- MSXGRP - (Routines for general graphics)

46SS
46S6 1639 FETCHC:
46S7
46S8 FETCHC - Reads the value of the graphics accumulater
46S9
4660 Exit: (HL] CLOC, ( A] = CMASK
4661
4662 1639 3A F92C LO A, (CMASK)
4663 163C 2A F92A LD HL, (CLOC)
4664 163F C9 RET
466S 1640 STOREC:
4666
4667 STOREC - Sets the graphics accumulater
4668
4669 Entry: [HL] CLOC, [A] CMASK
4670
4671 1640 32 F92C LD (CMASK) ,A
4672 1643 22 F92A LD (CLOC) ,HL
4673 1646 C9 RET
4674 1647 READC:
467S
4676 READC - Get the attribute of the current graphics accumulater
4677 position
4678
4679 1647 cs PUSH BC
4680 1648 ES PUSH HL
4681 1649 CD 1639 CALL FETCHC ;Get CLOC and CMASK
4682 164C 47 LD B,A ;Save CMASK
4683 1640 CD 1SD9 CALL CHKMOD ;Check current screen mode
4684 16SO 20 lA JR NZ,MREAoc ;Multi-color mode
468S 16S2 CD 0707 CALL RDVRM ;Read VDP's VRAM (pattern)
MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 49-1 171
- MSXGRP - (Routines for general grai;:hics)

4686 1655 AO AND B ;Extract specified pixel


4687 1656 F5 PUSH AF ;Save whether the pixel is on or off
4688 1657 01 2000 LD BC,GRPDIF
4689 165A 09 ADD HL,BC
4690 165B CD 07D7 CALL RDVRM ;Read VDP's VRAM (color)
4691 165E 47 LD B,A ; Save th is to B
4692 165F Fl POP AF ;Restore condition
4693 1660 78 LD A,B ; Res tore color
4694 1661 28 04 JR Z,READCl ;Specified dot is off, return
4695 ;background color
4696 1663 READCO:
4697 1663 OF RRCA ;Specified dot is on, return foreground color
4698 1664 OF RRCA
4699 1665 OF RRCA
4700 1666 OF RRCA
4701 1667 READCl:
4702 1667 E6 OF AND OFH ;Make it a legal value
4703 1669 El POP HL
4704 166A Cl POP BC
4705 166B C9 RET
4706 166C MREADC:
4707
4708 166C CD 07D7 CALL RDVRM ;Read VRAM
4709 166F 04 INC B ;Check if specified pixel is €!\Ten or odd
4710 1670 05 DEC B
4711 1671 F2 1667 JP P,READCl ;Odd, return lower nibble
4712 1674 18 ED JR READCO ;Even, return upper nibble
MSX ROM BASIC BIOS ) Ma cro-80 3.44 01-Jan-85 PAGE 50 172
- MSXGRP - (Routines for general graphics)

4713
4714 1676 SETATR:
4715
4716 ; SETATR - Sets the attribute (color, reverse, etc .. ) to be
4717 ; used in future actions.
4 718 ;
4719 ; Entry - [A] = Attribute
4720 ; Exit - carry set if illegal value
4721 ;.
4722 1676 FE 10 CP 16 ;Must be less than 16
4723 1678 3F CCF
4 724 1679 D8 RET c
4725 167A 32 F3F2 LD (ATRBYT) ,A
4 726 167D C9 RET
4727 167E SETC:
4728
4729 ; SETC - Sets the point indicated by the graphics accumulater
4730 ; to ATTRBYT
4731
4732 ; All registers except AF must be preserved.
4733
4734 167E E5 PUSH HL
4735 167F C5 PUSH BC
4736 1680 CD 15D9 CALL CHKMOD ;Check current screen mode
4737 1683 CD 1639 CALL FETCHC
4738 1686 20 08 JR NZ,MSETC ;Multi-color mode
4 739 1688 D5 PUSH DE
4 740 1689 CD 186C CALL PATWRT
4741 168C Dl POP DE
4742 168D Cl POP BC
4743 168E El POP HL
MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 50-1 173
- MSXGRP - (Routines for general gra{ilics)

4744 168F C9 RET


4745 1690 MSETC:
4746
4747 ; Set a pixel in multi-color mode
4748 ;
4 749 1690 47 LD B,A ;Save CMASK in [ B)
4750 1691 CD 07D7 CALL RDVRM ;Read VRAM
4751 1694 4F LD C,A
4752 1695 78 LD A,B
4753 1696 2F CPL ;Leave another unaffected
4754 1697 Al AND c
4755 1698 4F LD C,A
4756 1699 3A F3F2 LD A, (ATRBYT) ;Get specified color
4 757 169C 04 INC B ;Check if even or odd
4758 169D 05 DEC B
4759 169E F2 16A5 JP P,MSETCl ;Odd
4760 16Al 87 ADD A,A
4761 16A2 87 ADD A,A
4762 16A3 87 ADD A,A
4763 16A4 87 ADD A,A
4764 16A5 MSETCl:
4 765 16A5 Bl OR c ; Form new color
4766 16A6 CD 07CD CALL WRTVRM ;Write new pattern
4767 16A9 Cl POP BC
4768 16AA El POP HL
4 769 16AB C9 RET
4770 SUBTTL - MSXGRP - (Grai;:hic cursor m01Tements)
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 51 174
- MSXGRP - (Graphic cursor mCJ1Tements)

4771
4772
4773 UPC, DOWNC, RIGHTC, LEFTC
4774
4775 These are the C relative movement routines. They
4776 adjust the current graphics accumulater in the indicated
4777 direction without checking boundary conditions.
4778
4779 ;-----------------------------------------------------
4780
4781 16AC TRIGHT:
4782 i
4783 TRIGHT - move 1 pixel right
4784 Return carry set if already on border
4785 i
4786 16AC E5 PUSH HL
4787 16AD CD 15D9 CALL CH KMOD
4788 16BO C2 1779 JP NZ,MTRGT
4789 16B3 CD 1639 CALL FETCHC ;Get CLOC,CMASK
4790 16B6 OF RRCA ;MOile 1 pixel right
4791 16B7 30 4B JR NC,HRZMVl ;Within byte, just change CMASK
4792 16B9 7D LD A,L ;Get low byte of CLOC
4793 16BA E6 F8 AND OF8H
4794 16BC FE F8 CP OF8H ;On right edge?
4795 16BE 3E 80 LD A,80H ;Assume not
4796 16CO 20 10 JR NZ,RGHTCl ;Goot assumption
4797 16C2 C3 175A JP ONBRDl ;On border, set carry and return
4798 16C5 RIGHTC:
4799
4800 RIGHTC - mCJITe 1 pixel right
4801
MSX ROM BASIC BIOS Macro-80 3.44 01-Jan-8S PAGE Sl-1 l 7S
- MSXGRP - (Graphic cursor mO\lements)

4802 16CS ES PUSH HL


4803 16C6 CD 1SD9 CALL CHKMOD
4804 16C9 C2 178B JP NZ,MRGTC
480S 16CC CD 1639 CALL FETCHC
4806 16CF OF RRCA ;move right 1 pixel
4807 16DO 30 32 JR NC,HRZMVl ;within byte, just change CMASK
4808 16D2 RGHTCl:
4809 16D2 DS PUSH DE
4810 16D3 11 0008 LD DE,8 ;Load offset to new position
4811 16D6 18 27 JR HRZMOV ;Change CLOC also
4812 16D8 TLEFT:
4813
4814 TLEFT - move 1 pixel left
481S Return carry set if already on border
4816
4817 16D8 ES PUSH HL
4818 16D9 CD 1SD9 CALL CH KMOD
4819 160C C2 179C JP NZ,MTLFT
4820 16DF CD 1639 CALL FETCHC ;Get CLOC and CMASK
4821 16E2 07 RLCA ;MOile 1 pixel left
4822 16E3 30 lF JR NC,HRZMVl ;Within byte boundary, just change CMASK
4823 16ES 7D LD A,L ;Check if we 're on left edge
4824 16E6 E6 F8 AND OF8H
482S 16E8 3E 01 LD A,l ;Assume not
4826 16EA 20 OF JR NZ,LEFTCl ;Good assumption
4827 16EC 18 6C JR ONBRDl ;We're on border, set carry and return
4828 16EE LEFTC:
4829
4830 LEFTC - move 1 pixel left
4831
4832 16EE ES PUSH HL
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 51-2 176
- MSXGRP - (Graphic cursor mCJ1Tements)

4833 16EF CD 15D9 CALL CHKMOD


4834 16F2 C2 17AC JP NZ ,MLFTC
483 5 16F5 CD 1639 CALL FETCHC
4836 16F8 07 RLCA ;mCJ\Te le ft 1 pixel
4837 16F9 30 09 JR NC,HRZMVl ;within byte boundary, just change CMASK
4838 16FB LEFTCl:
4839 16FB D5 PUSH DE
4840 16FC 11 FFF8 LD DE,OFFF8H ;Load offset to new position
4841 16FF HRZMOV:
4842 16FF 19 ADD HL,DE ;Add offset to new position
4843 1700 22 F92A LD (CLOC) ,HL ;Update pattern address
4844 1703 Dl POP DE
4845 1704 HRZMVl:
4846 1704 32 F92C LD (CMASK) ,A ;Update CMASK
4847 1707 A7 AND A ;Clear carry
4848 1708 El POP HL
4849 1709 C9 RET
4850 170A TDOWNC:
4851
4852 ; TDOWNC - move 1 pixel down.
4853 ;
4854 ; Return carry set if already on screen border.
4855
4856 170A E5 PUSH HL
4857 170B D5 PUSH DE
4858 170C 2A F92A LD HL, (CLOC)
4859 170F CD 15D9 CALL CHKMOD
4860 1712 C2 17C6 JP NZ ,MTDNC
4861 1715 E5 PUSH HL
4862 1716 2A F3CB LD HL, ( GRPCGP)
4863 1719 11 1700 LD DE,1700H
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 51-3 177
- MSXGRP - (Graphic cursor movements)

4864 171C 19 ADD HL,DE


4865 171D EB EX DE,HL
4866 171E El POP HL
4867 171F E7 RST 20H ;Test [HL] with [DE]
4868 ;Looks like on border?
4869 1720 38 13 JR C,DWNClO ;No
4870 1722 7D LD A,L ;Possibly on border
4871 1723 3C INC A
4872 1724 E6 07 AND 7 ;Really?
4873 1726 20 OD JR NZ,DWNClO ;No
4874 1728 18 2F JR ONBRDR ;Yes, set carry and return
4875
4876 172A DOWNC:
4877
4878 ; DOWNC - move 1 pixel down
4879
4880 172A ES PUSH HL
4881 172B DS PUSH DE
4882 172C 2A F92A LD HL, (CLOC)
4883 172F CD 15D9 CALL CHKMOD
4884 1732 C2 l 7DC JP NZ ,MDNC
4885 1735 DWNClO:
4886 173 5 23 INC HL ;move down 1 pixel
4887 1736 7D LD A,L ;Prepare for boundary check
4888 1737 11 OOF8 LD DE,OF8H ;Load possible offset to new location
4889 173A 18 31 JR VRTMOV ;Check
4890 173C TUPC:
4891
4892 ; TUPC - move 1 pixel up.
4893 ; Return carry set if already on screen border.
4894
MSX ROM BASIC BIOS ) Mac:ro-80 3.44 01-Jan-85 PAGE 51-4 178
- MSXGRP - (Graphic cursor m01Tements)

4895 173C E5 PUSH HL


4896 173D D5 PUSH DE
4897 173E 2A F92A LD HL, (CLOC)
4898 1741 CD 15D9 CALL CHKMOD
4899 1744 C2 17E3 JP NZ ,MTUPC
4900 174 7 E5 PUSH HL
4901 1748 2A F3CB LD HL, (GRPCGP)
4902 174B 11 0100 LD DE,OlOOH
4903 174E 19 ADD HL,DE
4904 174F EB EX DE,HL
4905 1750 El POP HL
4906 1751 E7 RST 20H ;Test [HL] with [DE]
4907 ;Looks like on border?
4908 1752 30 14 JR NC,UPClO ;No
4909 1754 7D LD A,L ;Possibly on border
4910 1755 E6 07 AND 7 ;Really?
4911 1757 20 OF JR NZ,UPClO ;No
4912 1759 ONBRDR:
4913 1759 Dl POP DE
4914 175A ONBRDl:
4915 175A 37 SCF ;Set carry indicating we're on border
4916 175B El POP HL
4917 175C C9 RET
4918 175D UPC:
4919
4920 ; UPC - m01Te 1 pixel up
4921
4922 175D E5 PUSH HL
4923 175E D5 PUSH DE
4924 175F 2A F92A LD HL, (CLOC) ; get current position
4925 1762 CD 15D9 CALL CHKMOD
MSX ROM BASIC BIOS Macro-80 3.44 01-Jan-85 PAGE 51-5 179
- MSXGRP - (Graphic cursor m01Tements)

4926 1765 C2 17F8 JP NZ ,MUPC


4927 1768 UPClO:
4928 1768 7D LD A,L ;Prepare for boundary check
4929 1769 2B DEC HL ;mOITe up 1 pixel
4930 176A 11 FF08 LD DE,OFF08H ;Load possible offset to new location
4931 176D VRTMOV:
4932 176D E6 07 AND 7 ;Crossed boundary?
4933 176F 20 01 JR NZ,VRTMVl ; No , it 's okay
4934 1771 19 ADD HL ,DE ;Get new location
4935 1772 VRTMVl:
4936 1772 22 F92A LD (CLOC) ,HL ;Update pattern address
4937 1775 A7 AND A ;Clear carry
4938 1776 Dl POP DE
4939 1777 El POP HL
4940 1778 C9 RET
4941 1779 MTRGT:
4942
4943 Grai:O ics cursor movement in multi-color mode
4944 [ Horizontal ID01Tements
4945
4946 1779 CD 1639 CALL FETCHC
4947 177C A7 AND A
4948 177D 3E OF LD A,OFH ;Assume CMASK is even
4949 177F FA l 7CO JP M,MHZMVl ;Within byte, just change CMASK
4950 1782 7D LD A,L
4951 1783 E6 F8 AND OF8H
4952 1785 FE F8 CP OF8H ;On right edge?
4953 1787 20 OB JR NZ,MRGTCl ;No, move to next pixel
4954 1789 18 CF JR ONBRDl· ;We're on right edge, set carry and return
4955 178B MRGTC:
4956
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 51-6 180
- MSXGRP - (Graphic cursor mO\lements)

4957 178B CD 1639 CALL FETCHC


4958 178E A7 AND A
4959 178F 3E OF LD A,OFH ;Assume CMASK is e11en
4960 1791 FA 17CO JP M,MHZMVl ;Good assumption
4961 1794 MRGTCl:
4962 1794 D5 PUSH DE
4963 1795 11 0008 LD DE,8 ;Next pixel is 8 byte far
4964 ;from the current position
4965 1798 3E FO LD A,OFOH
4966 179A 18 lF JR MHCMOV
4967 179C MTLFT:
4968
4969 179C CD 1639 CALL FETCHC
4970 179F A7 AND A
4971 17AO 3E FO LD A,OFOH ;Assume CMASK is odd
4972 17A2 F2 l 7CO JP P ,MHZMVl ;Good assumption, just change CMASK
4973 17A5 7D LD A,L
4974 17A6 E6 F8 AND OF8H ;On left edge?
4975 17A8 20 OB JR NZ,MLFTCl ;No
4976 17AA 18 AE JR ONBRDl ;We're on left edge, set carry and return
4977 17AC MLFTC:
4978
4979 17AC CD 1639 CALL FETCHC
4980 17AF A7 AND A
4981 17BO 3E FO LD A,OFOH ;Assume CMASK is odd
4982 17B2 F2 l 7CO JP P,MHZMVl ;Good assumption, just change CMASK
4983 17B5 MLFTCl:
4984 17B5 D5 PUSH DE
4985 17B6 11 FFF8 LD DE,OFFF8H
4986 17B9 3E OF LD A,OFH
4987 17BB MHCMOV:
MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 51-7 181
- MSXGRP - {Graphic cursor rn01Ternents)

4988 17BB 19 ADD HL ,DE


4989 17BC 22 F92A LD {CLOC) ,HL
4990 17BF Dl POP DE
4991 l 7CO MHZMVl:
4992 17CO 32 F92C LD {CMASK) ,A
4993 l 7C3 A7 AND A ;Clear carry
4994 17C4 El POP HL
4995 17C5 C9 RET
4996 17C6 MTDNC:
4997
4998 : f Vertical rnovernen ts
4999
5000 17C6 E5 PUSH HL
5001 17C7 2A F3D5 LD HL, {MLTCGP)
5002 17CA 11 0500 LD DE,0500H
5003 17CD 19 ADD HL,DE
5004 17CE El POP HL
5005 17CF E7 RST 20H ;Possibly on border?
5006 17DO 38 OA JR C,MDNC ;No
5007 17D2 7D LD A,L ;Check if least 3 bits are all l's
5008 17D3 3C INC A
5009 17D4 E6 07 AND 7
5010 17D6 20 04 JR NZ,MDNC ;No
5011 17D8 37 SCF ;We are at the bottom border,
5012 ;set carry and return
5013 17D9 Dl POP DE
5014 17DA El POP HL
5015 17DB C9 RET
5016 17DC MDNC:
5017
5018 17DC 23 INC HL ;Move down 1 byte
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 51-8 182
- MSXGRP - (Gratflic cursor mO\Tements)

5019 17DD 7D LD A,L


5020 17DE 11 OOF8 LD DE,OF8H ;Load possible offset to next block
5021 17El 18 lA JR MVTMOV ;Check
5022 17E3 MTUPC:
5023
5024 17E3 E5 PUSH HL
5025 17E4 2A F3D5 LD HL, (MLTCGP)
5026 17E7 11 0100 LD DE,OlOOH ;Possibly on border?
5027 17EA 19 ADD HL,DE
5028 17EB El POP HL
5029 17EC E7 RST 20H ;Test [HL) with [DE)
5030 17ED 30 09 JR NC,MUPC ;No
5031 17EF 7D LD A,L ;Check if we're top of a block
5032 17FO E6 07 AND 7
5033 17F2 20 04 JR NZ,MUPC ;No
5034 17F4 37 SCF ;We're on top border, set carry and return
5035 17F5 Dl POP DE
5036 17F6 El POP HL
5037 17F7 C9 RET
5038 17F8 MUPC:
5039
5040 17F8 7D LD A,L
5041 17F9 2B DEC HL ;Move up 1 byte
5042 17FA 11 FF08 LD DE,0FF08H ;Load possible offset to next block
5043 17FD MVTMOV:
5044 17FD E6 07 AND 7 ;Wrapped to next block?
5045 17FF 20 01 JR NZ,MVTMVl ;No
5046 1801 19 ADD HL ,DE ;Yes, add up offset to next block
5047 1802 MVTMVl:
5048 1802 22 F92A LD (CLOC) ,HL
5049 1805 A7 AND A ;Clear carry
MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 51-9 183
- MSXGRP - (GrarXiic cursor lllOITements)

5050 1806 Dl POP DE


5051 1807 El POP HL
5052 1808 C9 RET
5053 SUBTTL -MSXGRP- (Box fill and Misc.)
( MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 52 184
-MSXGRP- (Box fill and Misc.)

5054
5055 1809 NSETCX:
5056
5057 NSETCX - Performs SErc, RIGHTC [HL) times
5058
5059 In fact, SETC and RIGHTC are never called to increase speed,
5060 and for the reason described below.
5061
5062 Since only 2 colors can be displayed in a byte, some special
5063 handling is required when a full-byte is set when writing le ft
5064 or right extras. In this case, we can completely ignore the
5065 background color for that byte, allowing 2 colors displayed
5066 in a byte.
5067
5068 All registers may be destroyed.
5069
5070 1809 CD 15D9 CALL CH KM OD
5071 180C C2 18BB JP NZ,MNSTCX ;Multi-color mode
5072 180F ES PUSH HL ;Save count
5073 1810 CD 1639 CALL FETCHC ;Get CLOC and CMASK
5074 1813 E3 EX (SP) ,HL ;Reget count, save CLOC
5075 1814 87 ADD A,A ;Beginig at leftmost position?
5076 1815 38 18 JR C,NSTC20 ;Yes, no extra dots at the left
5077 1817 F5 PUSH AF ;Save mask pattern*2
5078 1818 01 FFFF LD BC,OFFFFH
5079 181B OF RRCA
5080 181C NSTClO:
5081 181C 09 ADD HL,BC ;Decrement pixel count
5082 181D 30 45 JR NC,NSTCSP ;The whole dots are within a byte
5083 181F OF RRCA
5084 1820 30 FA JR NC,NSTClO
( MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 52-1 185
-MSXGRP- (Box fill and Misc.)

5085 1822 Fl POP AF ;Restore mask pattern*2


5086 1823 3D DEC A ;Form left-extra pattern
5087 1824 E3 EX (SP) ,HL ;Reget CLOC, save count
5088 1825 E5 PUSH HL ; Save CLOC
5089 1826 CD 186C CALL PATWRT ;Write to VRAM (pattern and color)
5090 1829 El POP HL ; Res tore CLOC
5091 182A 11 0008 LD DE,8 ;Load an offset to next byte
5092 182D 19 ADD HL,DE ;Update pattern address
5093 182E E3 EX (SP) ,HL ;Reget count, save CLOC
5094 182F NSTC20:
5095 182F 7D LD A,L ;Get low byte of count'
5096 1830 E6 07 AND 7 ; [A] =count mod 8
5097 1832 4F LD C,A ;save count after byte boundary
5098 1833 7C LD A,H
5099 1834 OF RRCA
5100 1835 7D LD A,L
5101 1836 lF RRA
5102 1837 OF RRCA
5103 1838 OF RRCA ;(HL)=(HL]/8
5104 1839 E6 3F AND OOllllllB
5105 183B El POP HL ;Reget CLOC
5106 183C 47 LD B,A ; [ B] =counter
5107 183D 28 14 JR Z,NSTC40 ; No dots in th is part
5108 183F NSTC30:
5109 183F AF XOR A ;Make specified color a background color
5110 1840 CD 07CD CALL WRTVRM ;Write to VRAM (pattern)
5111 1843 11 2000 LD DE,GRPDIF
5112 1846 19 ADD HL,DE ;Calculate address of color table
5113 184 7 3A F3F2 LD A, (ATRBYT) ;Get specified color
5114 184A CD 07CD CALL WRTVRM ;Write to VRAM (color)
5115 1840 11 2008 LD DE,GRPDIF+8 ;Load an offset to next byte
( MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 52-2 186
-MSXGRP- (Box fill and Misc.)

5116 1850 19 ADD HL ,DE ;Bump CLOC


5117 1851 10 EC DJNZ NSTC30 ;Loop until done
5118 1853 NSTC40:
5119 1853 OD DEC c ;dot count in char boundary
5120 1854 F8 RET M ;No dots in right extra
5121 1855 E5 PUSH HL ;Save CLOC
5122 1856 21 185D LD HL,RGTEXT ;Load address for 'right-extra' pattern table
5123 1859 09 ADD HL ,BC
5124 185A 7E LD A, (HL) ;Get pattern
5125 185B 18 OE JR NSTC50
5126 185D RGTEXT:
5127
5128 185D 80 CO EO FO DB 80H,OCOH,OEOH,OFOH
5129 1861 F8 FC FE DB OF8H,OFCH,OFEH
5130 1864 NSTCSP:
5131
5132 1864 87 ADD A,A ;Get mask pattern for the right (11111100)
5133 1865 3D DEC A
5134 1866 2F CPL
5135 1867 47 LD B,A ;Save it
5136 1868 Fl POP AF ;Get mask pattern for the left (00011111)
5137 1869 3D DEC A
5138 186A AO AND B ;Make a pattern to write ( 00011100)
5139 186B NSTC50:
5140 186B El POP HL ;Restore CLOC ex.
( MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 53 187
-MSXGRP- (Box fill and Misc.)

5141
5142 186C PATWRT:
5143
5144 PATWRT - Write a pattern to high-resolution screen
5145
5146 Entry: A - Pattern to be written
514 7 HL - Address of pattern table
5148 ATRBYT - Color of this pattern
5149
5150 186C 47 LO B,A ;Save pattern to be added
5151 1860 CD 0707 CALL RDVRM ;Read VRAM (pattern)
5152 1870 4F LO C,A ;Save current pattern
5153 1871 11 2000 LO DE,GRPDIF
5154 1874 19 ADD HL,DE ;Form address of color table
5155 1875 CD 0707 CALL RDVRM ;Read from VRAM (color)
5156 1878 F5 PUSH AF
5157 1879 E6 OF AND OFH ; Extract background color
5158 187B SF LO E,A ; Save background color
5159 187C Fl POP AF ;Restore foreground and background color
5160 1870 93 SUB E
5161 187E 57 LO D,A ;Set foreground color in the upper 4 bit
5162 ;[B] has the specified pattern,
5163 ; [ C]has the current pattern,
5164 ; [ D]has the current foreground color
5165 shifted left 4 times,
5166 ; [E] has the current background color,
5167 ; [HL] has the address of color table.
5168 187F 3A F3F2 LO A, (ATRBYT) ;Get specified color
5169 1882 BB CP E ;Same with current background?
5170 1883 28 19 JR Z,SAMEBG ;Yes
5171 1885 87 ADD A,A
( MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 53-1 188
-MSXGRP- (Box fill and Misc.)

5172 1886 87 ADD A,A


5173 1887 87 ADD A,A
5174 1888 87 ADD A,A
5175 1889 BA CP D ;Same with current foreground?
5176 188A 28 16 JR Z,SAMEFG ;Yes
5177 188C F5 PUSH AF ; Save new foreground color
5178 188D 78 LD A,B
5179 188E Bl OR c
5180 188F FE FF CP OFFH ;All pixels are going to be set?
5181 1891 28 17 JR Z,PATWRl ;Yes, Spock will use a new repair technique
5182 ; logically ••.
5183 1893 ES PUSH HL ; Save address of color table
5184 1894 D5 PUSH DE ; Save current background color
5185 1895 CD 18A2 CALL SAMEFG ;Write to VRAM (pattern)
5186 1898 Dl POP DE ;Restore current background in [E]
5187 1899 El POP HL ;Restore color table address
5188 189A Fl POP AF ;Res tore new foreground color in upper
5189 ; 4 bi ts of [ Ace]
5190 189B B3 OR E ;Form new foreground and background color
5191 189C 18 lA JR JMPWRT ;Write to color table
5192 189E SAMEBG:
5193
5194 189E 78 LD A,B
5195 189F 2F CPL
5196 18AO Al AND c
5197 18Al ll DB llH ; Skip next 2 bytes (LXI D)
5198 18A2 SAMEFG:
5199 18A2 78 LD A,B
5200 18A3 Bl OR c
5201 18A4 WTPTAB:
5202 18A4 ll 2000 LD DE,GRPDIF
( MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 53-2 189
-MSXGRP- (Box fill and Misc.)

5203 18A7 19 ADD ::1L, DE


5204 18A8 18 OE JR JMPWRT ; Write to pat tern table
5205 18AA PATWRl:
5206
5207 18AA Fl POP AF ; Dis card new foreground color
5208 18AB 78 LD A,B ;Reget specified pattern
5209 18AC 2F CPL ;Forget current background color, 'cause
5210 18AD ES PUSH HL ; there's no background, we display
5211 18AE DS PUSH DE ;new pattern as background color.
5212 18AF CD 18A4 CALL WTPTAB ;Write to pattern table
5213 18B2 Dl POP DE
5214 18B3 El POP HL
5215 18B4 3A F3F2 LD A, (ATRBYT) ;Get new color (th is will be the
5216 ;background color)
5217 18B7 B2 OR D ;Add current foreground color
5218 18B8 JMPWRT:
5219 18B8 C3 07CD JP WRTVRM ;Write to VRAM (color)
( MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 54 190
-MSXGRP- (Box fill and Misc.)

5220
5221 18BB MNSTCX:
5222
5223 ; NSETCX for multicolor screen
5224
5225 18BB E5 PUSH HL ; Save counter
5226 18BC CD 167E CALL SETC ; Set pixel
5227 18BF CD 16C5 CALL RIG HTC ;Move to right
5228 18C2 El POP HL ; Res tore counter
5229 18C3 2D DEC L
5230 18C4 20 F5 JR NZ,MNSTCX
5231 18C6 C9 RET
5232 18C7 GTASPC:
5233
5234 ; GTASPC - load aspect ratio for CIRCLE
5235 ;
5236 18C7 2A F40B LD HL, (ASCPCTl)
5237 18CA EB EX DE,HL
5238 18CB 2A F40D LD HL , ( ASCPCT2 )
5239 18CE C9 RET
5240 SUBTTL -MSXGRP - (Routines for pa int)
( MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 55 191
-MSXGRP - (Routines for paint)

5241
5242 18CF PNTINI:
5243
5244 PNTINI - Initialize border color
5245
5246 18CF F5 PUSH AF ; Save specified color
5247 18DO CD 15D9 CALL CHKMOD ;In what mode are we now?
5248 18D3 28 06 JR Z,PNTHRS ;High-r.esolution mode
5249 18D5 Fl POP AF
5250 18D6 FE 10 CP lOH ;Legal value?
5251 18D8 3F CCF ;Carry means illegal
5252 18D9 18 05 JR PNTIRT
5253 18DB PNTHRS:
5254
5255 18DB Fl POP AF ;Discard specified color
5256 18DC 3A F3F2 LD A, (ATRBYT) ;Always ignore specified border
5257 18DF A7 AND A ;Always legal
5258 18EO PNTIRT:
5259 18EO 32 FCB2 LD (BRDATR) ,A ; Set border color
5260 18E3 C9 RET ;Return with the condition
5261 18E4 SCANR:
5262
5263 SCANR - scan pixels to right
5264 Maximum number of pixels to test is passed in [DE].
5265
5266 18E4 21 0000 LD HL,O ;Initialize PNTCNT
5267 18E7 4D LD C,L ;Initialize PNTDFL
5268 18E8 CD 15D9 CALL CH KM OD ;Check current screen mode
5269 18EB 20 64 JR NZ,MSCANR ;Multi-color mode
5270
5271 Scan to right in high-resolution mode
( MSX ROM BASIC BIOS Macro-SO 3.44 Ol-Jan-S5 PAGE 55-1 192
-MSXGRP - (Routines for paint)

5272 ; [BJ set to 0 is need to suspend painting, 1 otherwise.


5273
5274 Workl Temporary storage for 'suspend painting'
5275 Work2 Save area for pixel count to draw right
5276 work3 Save area for 'pixel changed' flag
5277
527S lSED 7S LD A,B
5279 lSEE 32 FS66 LD (RUNFLG) ,A ;Remember to suspend or not
52SO lSFl AF XOR A ;Clear 'pixel changed' flag
52Sl 1SF2 32 FS69 LD (WORK3) ,A
52S2 1SF5 3A FCB2 LD A, (BRDATR)
52S3 lSFS 47 LD B,A ;Set border color to [BJ for comparison
52S4 1SF9 SCANRl:
52S5 1SF9 CD 1647 CALL READC ;Read current color
52S6 lSFC BS CP B ;Still on border?
52S7 lSFD 20 OD JR NZ,SCANR2 ; No, start pa in ting
52SS lSFF lB DEC DE ;All pixels tested?
52S9 1900 7A LD A,D
5290 1901 B3 OR E
5291 1902 cs RET z ;Yes
52 92 1903 CD 16AC CALL TRIG HT ;Advance to right, and check if out of screen
52 93 1906 30 Fl JR NC, SCANRl ;Not yet out of screen, continue
5294 190S 11 0000 LD DE,O ;All pixels has border attribute on
5295 190B C9 RET ;this row, let BRDCNT be 0, and return
5296 190C SCANR2:
5297
529S A pixel with non-border attribute is found. Start painting
5299
5300 190C CD 19AE CALL CHKCHG ;Check if pixel changed
5301 190F D5 PUSH DE ; Save BRDCNT
5302 1910 CD 1639 CALL FETCHC ;Get current CLOC, CMASK
( MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 55-2 193
-MSXGRP - (Routines for paint)

5303 1913 22 F942 LD (CSAVEA) ,HL ;Set first non-border pixel encountered
5304 1916 32 F944 LD (CSAVEM) ,A
5305 1919 11 0000 LD DE,0 ;Initialize # of painted pixels (PNTCNT)
5306 191C SCANR3:
5307 191C 13 INC DE ;Update PNTCNT
5308 1910 CD 16AC CALL TRIGHT ;Move 1 pixel right
5309 1920 38 OB JR C,SCANR4 ;Out of screen
5310 1922 CD 1647 CALL REA DC ;Read color of current pixel
5311 1925 B8 CP B ;Reached border?
5312 1926 28 05 JR Z,SCANR4 ;Yes
5313 1928 CD 19AE CALL CHKCHG ;Check if pixel changed
5314 192B 18 EF JR SCANR3 ;Keep on scaning
5315 192D SCANR4:
5316
5317 192D D5 PUSH DE ; Save PNTCNT
5318 192E CD 1639 CALL FETCHC ;Since NSETCX does not update 'C', these value
5319 1931 E5 PUSH HL ; must be saved
5320 1932 F5 PUSH AF
5321 1933 2A F942 LD HL, (CSAVEA) ; Set where to start pa in ting
5322 1936 3A F944 LD A, (CSAVEM)
5323 1939 CD 1640 CALL STOREC ;Set CLOC and CMASK
5324 193C EB EX DE,HL ;Set length of line to [HL] (PN?CNT)
5325 193D 22 F867 LD (WORK2) ,HL
5326 1940 3A F866 LD A, (WORKl) ; Same as [ RUNFLG ]
5327 1943 A7 AND A
5328 1944 C4 1809 CALL NZ,NSETCX ;Draw [HL] pixels to the right if not suspend
5329 194 7 Fl POP AF ;Restore 'last-examined-pixel' in formation
5330 1948 El POP HL
5331 1949 CD 1640 CALL STOREC
5332 194C El POP HL ;Restore PNTCNT
5333 194D Dl POP DE ; Res tore BRDCNT
( MSX ROM BASIC BIOS Macro-80 3.44 01-Jan-85 PAGE 55-3 194
-MSXGRP - (Routines for pa int)

5334 194E C3 19A9 JP SCANL4


( MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 56 195
-MSXGRP - (Rout in es for pa int )

5335
5336 1951 MSCANR:
5337
5338 ; Scan to right in multi-color mode
5339 ;
5340 1951 CD 19C7 CALL MTSBRD ;Is it border color?
5341 1954 30 OD JR NC,MSCNRl ;No, start pa in ting
5342 1956 lB DEC DE ;All pixels tested?
5343 1957 7A LD A,D
5344 1958 B3 OR E
5345 1959 cs RET z ;Yes
5346 195A CD 16AC CALL TRIG HT ;Advance to right, and check if out of screen
5347 195D 30 F2 JR NC,MSCANR ;Not yet out of screen, continue
5348 195F 11 0000 LD DE,O ;out of screen, let BRDCNT be 0, and return
5349 1962 C9 RET
5350 1963 MSCNRl:
5351
5352 1963 CD 1639 CALL FETCHC ;Get CLOC,CMASK
5353 1966 22 F942 LD (CSAVEA) ,HL ; Save VRAM address
5354 1969 32 F944 LD (CSAVEM) ,A ;Save mask pattern
5355 196C 21 0000 LD HL,0 ;Initialize PNTCNT
5356 196F MSCNR2:
5357 196F 23 INC HL ;Increment PNTCNT
5358 1970 CD 16AC CALL TRIGHT ;Advance to right, and check if out of screen
5359 1973 D8 RET c ;Going out of screen
5360 1974 CD 19C7 CALL MTSBRD ;Reached border color?
5361 1977 30 F6 JR NC,MSCNR2 ;Not yet, continue
5362 1979 C9 RET
( MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 57 196
-MSXGRP - (Routines for pa int)

5363
5364 197A SCANL:
5365
5366 ; SCANL - Scan pixels to left
5367
5368 197A 21 0000 LD HL,O ;Initialize PNTCNT
5369 197D 4D LD C,L ;Initialize PNTDFL
5370 197E CD 15D9 CALL CHKMOD ;Check current screen mode
5371 1981 20 37 JR NZ,MSCANL ;Multi-color mode
5372
5373 ; Scan to left in high-resolution mode
5374 i
5375 1983 AF XOR A ;Clear 'pixel changed' flag
5376 1984 32 F869 LD (WORK3) ,A
5377 1987 3A FCB2 LD A, (BRDATR)
5378 198A 47 LD B,A ; Set border color to [ B] for com par is on
5379 198B SCANLl:
5380 198B CD 16D8 CALL TLEFT ;Advance to left, and check if out of screen
5381 198E 38 OF JR C,SCANL3 ; On le ft edge
5382 1990 CD 1647 CALL READC ;Read color of target pixel
5383 1993 B8 CP B ;Reached border?
5384 1994 28 06 JR Z,SCANL2 ;Yes
5385 1996 CD 19AE CALL CHKCHG ;Check if pixel changed
5386 1999 23 INC HL ;Update PNTCNT
5387 199A 18 EF JR SCANLl
5388 199C SCANL2:
5389
5390 199C CD 16C5 CALL RIG HTC ; ' C ' mus t spec i fy ' 1 as t pi xe 1 pa in te d '
5391 199F SCANL3:
5392 199F E5 PUSH HL ; Save PNTCNT
53 93 19AO ED 5B F867 LD DE, (WORK2) ;Load suspended pixels which remain
( MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 57-1 197
-MSXGRP - (Routines for paint)

5394 19A4 19 ADD HL ,DE ; to the r i gh t


53 95 19A5 CD 1809 CALL NSETCX ;Draw [HL] pixel from current 'C'
5396 19A8 El POP HL ;Restore PNTCNT
5397 19A9 SCANL4:
5398 19A9 3A F869 LD A, (WORK3) ;Non 0 if pixels changed attribute
5399 19AC 4F LD C,A
5400 19AD C9 RET
5401 19AE CHKCHG:
5402
5403 19AE E5 PUSH HL
5404 19AF 21 F3F2 LD HL,ATRBYT ;Get specified paint attribute
5405 19B2 BE CP (HL) ; Same?
5406 19B3 El POP HL
5407 19B4 cs RET z ;Yes, no change of attribute
5408 19B5 3C INC A ;Load non 0 to [Ace]
5409 19B6 32 F869 LD (WORK3) ,A ;Remember this temporarily
5410 19B9 C9 RET
5411 19BA MSCANL:
5412
5413 Scan to left in multi-color mode
5414
5415 19BA CD 16D8 CALL TL EFT ;Advance to left, and check if out of screen
5416 19BD DB RET c ; going out of screen
5417 19BE CD 19C7 CALL MTSBRD ;Reached border color?
5418 19Cl DA 16C5 JP C,RIGHTC ;Yes, adjust CLOC, CMASK and return
5419 19C4 23 INC HL ;Increment PNTCNT
5420 19C5 18 F3 JR MSCANL ;Continue
5421 19C7 MTSBRD:
5422
5423 Test border subroutine for multi-color mode
5424
( MSX ROM BASIC BIOS ) Macro-BO 3.44 01-Jan-B5 PAGE 57-2 19B
-MSXGRP - (Routines for paint)

5425 19C7 CD 1647 CALL READC ;Get the color of target pixel
5426 19CA 47 LD B,A
5427 19CB 3A FCB2 LD A, (BRDATR) ;Load specified border color
542B 19CE 90 SUB B ;Reached border?
5429 19CF 37 SCF ;Assume so
5430 19DO CB RET z ;Yes, return with carry flag set
5431 19Dl 3A F3F2 LD A, (ATRBYT) ;Is current pixel same as ATRBYT?
5432 19D4 BB CP B
5433 19D5 CB RET z ;Yes, no changes made.
5434 ;Return with carry reset
5435 19D6 CD 167E CALL SETC ;Set this pixel to ATRBYT
5436 19D9 OE 01 LD c ,1 ; Set 'pixel-changed' flag
5437 19DB A7 AND A ;Tell caller that we plot a dot
543B 19DC C9 RET
5439 SUBTTL -CASET- Cassette drivers stuff
( MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 58 199
-CASET- Cassette drivers stuff

5440
5441 ; Cassette read/write stuff
5442
5443 ; Following driver assumes that T cycle is 279.365 nS
5444 ;
5445 ; Variables referenced
5446 ; PPI.CM To write to cassette
5447 ; PSG.DR To read from casette
5448 ; BREAKX Routine to check for [STOP] key pressed
5449
5450 19DD TAPOFF:
5451
5452 19DD cs PUSH BC
5453 19DE F5 PUSH AF
5454 19DF 01 0000 LD BC,0
5455 19E2 CTWOFl:
5456 19E2 OB DEC BC
5457 19E3 78 LD A,B ;Test BC
5458 19E4 Bl OR c
5459 19E5 20 FB JR NZ,CTWOFl
5460 19E7 Fl POP AF
5461 19E8 Cl POP BC
5462 19E9 TAPIOF:
5463 19E9 F5 PUSH AF
5464 19EA 3E 09 LD A,00001001B ; Stop motor
5465 19EC D3 AB OUT ( PPI .CM) ,A
5466 19EE Fl POP AF
5467 19EF FB EI
5468 19FO C9 RET
5469 19Fl TAPOON:
5470
( MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 58-1 200
-CASET- Cassette drivers stuff

5471 ; Write out header, if [A]=O then write short header


5472 ; otherwise write long header ( 5sec)
5473
5474 19Fl B7 OR A ;set flag for length of header
5475 19F2 F5 PUSH AF ;save flag
5476 19F3 3E 08 LD A,8 ;Motor on
5477 19F5 D3 AB OUT ( PPI.CM) ,A
5478 19F7 21 0000 LD HL,O
5479 19FA MOTRWT:
5480 19FA 2B DEC HL
5481 19FB 7C LD A,H
5482 19FC BS OR L
5483 19FD 20 FB JR NZ,MOTRWT ;wait till motor starts
5484 19FF Fl POP AF ; get back header length flag
5485 lAOO 3A F40A LD A, (HEADER) ; get length of header
5486 1A03 28 02 JR Z,SYNCWl ; short header
5487 1A05 87 ADC A,A
5488 1A06 87 ADL A,A
5489 1A07 SYNCWl:
5490 1A07 47 LD B,A
5491 1A08 OE 00 LD c,o ;set up counter
.)492 lAOA F3 DI ;Don't disturb during writing to cassette
5493 lAOB SYNLPl:
5494 lAOB CD 1A4D CALL BITlOT ;Write enough marks
5495 lAOE CD 1A3F CALL RETRET ;compensate merhead
5496 lAll OB DEC BC
5497 1Al2 78 LD A,B
5498 1Al3 Bl OR c
5499 1Al4 20 F5 JR NZ,SYNLPl ;loop till counter exhausts
5500 1A16 C3 046F JP BREAKX ;check control-stop and return
5501 1Al9 TAPOUT:
( MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 58-2 201
-CASET- Cassette drivers stuff

5502 1Al9 DAT AW:


5503
5504 ; Output a byte
5505 ;
5506 1Al9 2A F406 LD HL, (LOW) ;get time constants for space
5507 lAlC F5 PUSH AF
5508 lAlD 7D LD A,L
5509 lAlE D6 OE SUB OEH ; compensate loss time since last stop bit
5510 1A20 6F LD L,A
5511 1A21 CD 1A50 CALL BI TOUT ;output start bit
5512 1A24 Fl POP AF
5513 1A25 06 08 LD B,8 ;Initialize counter
5514 1A27 DATAWL:
5515 1A27 OF RRCA ;next bit to carry
5516 1A28 DC 1A40 CALL C,BITl ;output mark if the bit is 1
5517 1A2B D4 1A39 CALL NC,BITO ;Output space
5518 1A2E 10 F7 DJNZ DATAWL ;Loop until 8 bi ts sent
5519 1A30 CD 1A40 CALL BI Tl ;Output stop bit
5520 1A33 CD 1A40 CALL BI Tl
5521 1A36 C3 046F JP BREAKX ;Check if break pressed and return
( MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 59 202
-CASET- Cassette drivers stuff

5522
5523 1A39 BITO:
5524
5525 ; Output a bit to cassette
5526 ;
5527 ; Absolute jumps are used to imprOITe accuracy
5528
5529 1A39 2A F406 LD HL, (LOW) ;Output 0 (space) (17 T)
5530 1A3C CD 1A50 CALL BI TOUT ; (18 T)
5531 1A3F RETRET:
5532 1A3F C9 RET ; (11 T)
5533 1A40 BITl:
5534
5535 1A40 CD 1A4D CALL BITlOT ; (18 T)
5536 1A43 E3 EX (SP) ,HL ; (20 T)
5537 1A44 E3 EX (SP) ,HL ;compensate overhead (20 T)
5538 1A45 00 NOP ; ( To ta 1 6 0 s ta te ) ( 5 T)
5539 1A46 00 NOP ; ( 5 T)
5540 1A47 00 NOP ; ( 5 T)
5541 1A48 00 NOP ; ( 5 T)
5542 1A49 CD 1A4D CALL BI Tl OT ; To compensate time (18 T)
5543 1A4C C9 RET ;Don't change this (11 T)
5544 1A4D BI Tl OT:
5545
5546 ; output a single cycle
5547 ;
5548 ; Total number of states =16 x [L] + 16 x [H] + 71
5549 ; =4.47uS x [L] + 4.47uS x [H] + 19.8usec
5550
5551 1A4D 2A F408 LD HL, (HIGH) ; (17 T)
5552 1A50 BI TOUT:
( MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 59-1 203
-CASET- Cassette drivers stuff

5553 1A50 F5 PUSH AF ; (12 T)


5554
5555 1A51 KEEPL:
5556 1A51 2D DEC L ;Keep low level ( 5 T)
5557 1A52 C2 1A51 JP NZ,KEEPL ; (11 T)
5558 1A55 3E OB LD A,OBH ; ( 8 T)
5559 1A57 D3 AB OUT (PPI.CM) ,A ;output high level (11 T)
5560 1A59 KEEPH:
5561 1A59 25 DEC H ;keep high level ( 5 T)
5562 1A5A C2 1A59 JP NZ,KEEPH ; (11 T)
5563 1A5D 3E OA LD A,OAH ; ( 8 T)
5564 1A5F D3 AB OUT (PPI.CM) ,A ;output low level (11 T)
5565 1A61 Fl POP AF ;Restore data Cl2 T)
5566
5567 1A62 C9 RET ; (11 T)
5568 111.63 TAP ION:
5569
5570 : Detect header block
5571
5572 1A63 3E 08 LD A,8 ;lt>tor on
5573 1A65 D3 AB OUT (PPI.CM) ,A
5574 1A67 F3 DI
5575 1A68 3E OE LD A,OEH ;Select PSG port A
5576 1A6A D3 AO OUT (PSG.LW),A
5577 1A6C SYN05:
5578
5579 ; First, wait until a series of good pulses are found.
5580 ;
5581 1A6C 21 0457 LD HL,0457H ;Initialize counter
5582 ;Number of pulse to detect header
5583 1A6F SYNlO:
( MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 59-2 204
-CASET- Cassette drivers stuff

5584 1A6F 51 LD D,C ; Remember last value


5585 1A70 CD 1B34 CALL CNTFUL ;Count full cycle
5586 1A73 D8 RET c ;Aborted
5587 1A74 79 LD A,C ;Get count
5588 1A75 FE DE CP ODEH ; ODE = Max count
5589 1A77 30 F3 JR NC,SYN05 ;Too long, reset number of pulses
5590 1A79 FE 05 CP 5 ; 5 = Min count
5591 1A7B 38 EF JR C,SYN05 ;Too short, reset number of pulses
5592
5593 Now compare with last pulse .width and apprave this as a good pulse
5594 if th is is similar to last one.
5595
5596 1A7D 92 SUB D ; current - last
5597 1A7E 30 02 JR NC,SYNll
5598 1A80 2F CPL ;result was negative, negate it
5599 1A81 3C INC A
5600 1A82 SYNll:
5601 1A82 FE 04 CP 4 ;within a wow allowance?
5602 1A84 30 E6 JR NC,SYN05 ;no, reset number of pulse ever seen
5603 1A86 2B DEC HL
5604 1A87 7C LD A,H
5605 1A88 B5 OR L
5606 1A89 20 E4 JR NZ,SYNlO ;Loop till seen enough good pulses
5607
5608 1A8B SYN20:
5609
5610 Next, calculate the mean width of pulse.
5611
5612 1A8B 21 0000 LD HL ,0 ;Initialize sum
5613 1A8E 45 LD B,L ;Initialize high byte of [BC] pair
5614 1A8F 55 LD D,L ;Loop 2 56 times
( MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 59-3 205
-CASET- Cassette drivers stuff

5615 1A90 SYN30:


5616 1A90 CD 1B34 CALL CNTFUL
5617 1A93 D8 RET c
5618 1A94 09 ADD HL,BC
5619 1A95 15 DEC D
5620 1A96 C2 1A90 JP NZ, SYN30
5621 1A99 01 06AE LD BC,06AEH ;compensate over head
5622 1A9C 09 ADD HL,BC
5623
5624 Set various values for read routine. Those are,
5625
5626 LOWLIM - lower limit of the width of start bit. [H]*l.5
5627 WINWID - width of window to count the transition.
5628
5629 1A9D 7C LD A,H ;[H] has mean pulse width
5630 1A9E lF RRA
5631 1A9F E6 7F AND 7FH
5632 lAAl 57 LD D,A ; [ D]=[mean]/2
5633 1AA2 29 ADD HL,HL
5634 1AA3 7C LD A,H ; [A]=[mean] x2
5635 1AA4 92 SUB D ; [ A ] = [ mean ] xl . 5
5636 1AA5 57 LD D,A ;save
5637 1AA6 D6 06 SUB 6 ;compensate overhead at DATAR
5638 1AA8 32 FCA4 LD (LOWLIM) ,A
5639
5640 Set width of window 'WINWID'
5641 CNTFUL takes 40T for a loop, RDBIT takes 60T for loop
5642 set WINWID as 3 times wider than single short pulse ([mean]/2)
5643 [WINWID]=[mean] x 1.5 x 40/60
5644 =[D] x 2/3
5645
( MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 59-4 206
-CASET- Cassette drivers stuff

5646 lMB 7A LD A,D ;get [mean width]xl.75


5647 lMC 87 ADD A,A ; x2
5648 lMD 06 00 LD B,O ;clear quotient
5649 lMF SULOP:
5650 lMF D6 03 SUB 3
5651 lABl 04 INC B
5652 1AB2 30 FB JR NC, SULOP ;loop till get carry
5653 1AB4 78 LD A,B ;[A)=[mean]xl.75x2/3
5654 1AB5 D6 03 SUB 3 ;compensate overhead in RDBIT routine
5655 1AB7 32 FCA5 LD (WINWID) ,A
5656 lABA B7 OR A
5657 lABB C9 RET
( MSX ROM BASIC BIOS ) Macro-BO 3.44 01-Jan-B5 PAGE 60 207
-CASET- Cassette drivers stuff

565B
5659 lABC TAPIN:
5660
5661 i Read a byte from cassette
5662
5663 lABC 3A FCA4 LD A, (LOWLIM)
5664 lABF 57 LD D,A ;[D] has lower limit for start bit
5665 lACO DAT AR:
5666 lACO CD 046F CALL BREAKX
5667 1AC3 DB RET c ;Aborted
566B 1AC4 DB A2 IN A, (PSG.DR) ;Get cassette
5669 1AC6 07 RLCA ;High state?
5670 1AC7 30 F7 JR NC,DATAR ;No
5671 1AC9 DATARO:
5672 1AC9 CD 046F CALL BREAKX
5673 lACC DB RET c ;Aborted
5674 lACD DB A2 IN A, (PSG.DR) ;Get cassette
5675 lACF 07 RLCA ; falling egde?
5676 lADO 3B F7 JR C,DATARO ;No
5677 1AD2 lE 00 LD E,O ;Initialize edge mask
567B 1AD4 CD lBlF CALL CNTHLF ;Get width in [C]
5679 1AD7 DATARl:
56BO 1AD7 41 LD B,C ;Save old width
56Bl lADB CD lBlF CALL CNTHLF ;Get new width in [C]
56B2 lADB DB RET c ;aborted
56B3 lADC 7B LD A,B ;Add width of 2 pulses
56B4 lADD Bl ADD A,C
56B5 lADE DA 1AD7 JP C,DATARl ; Pulse too long
56B6 lAEl BA CP D ;Longer than lower 1 imi t?
56B7 1AE2 3B F3 JR C,DATARl ;No
56BB
( MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 60-1 208
-CASET- Cassette drivers stuff

5689 Now, a valid start bit has been found.


5690 [E] = 0 if NORMAL polarity,
5691 =255 if REVERSE polarity.
5692
5693 1AE4 2E 08 LD L,8 ;Initialize counter
5694 1AE6 DATARL:
5695 1AE6 CD 1B03 CALL RDBIT
5696 1AE9 FE 04 CP 3+1 ;Legal transitions?
5697 lAEB 3F CCF
5698 lAEC D8 RET c ;Too many transitions
5699 lAED FE 02 CP 2
5700 lAEF 3F CCF ; Set carry if 2 or 3 transitions
5701 lAFO CB lA RR D
5702
5703 We've just assembled a bit. A check must be done to make sure
5704 that we're at the start of next bit field.
5705
5706 1AF2 79 LD A,C ;Reget number of transitions
5707 1AF3 OF RRCA
5708 1AF4 D4 1B23 CALL NC,CNTHLO ;Wait for next transition if O or 2
5709 1AF7 CD lBlF CALL CNTHLF
5710 lAFA 2D DEC L
5711 lAFB C2 1AE6 JP NZ,DATARL ;Loop till done
5712 lAFE CD 046F CALL BREAKX ; return with carry set if breaked
5713 lBOl 7A LD A,D
5714 1B02 C9 RET
5715 1B03 RDBIT:
5716
5717 Count number of transitions within a period specified by 'WINWID'
5718
5719 length of window = 17uSec x [WINWID] + 12 .3 uSec
( MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 60-2 209
-CASET- Cassette drivers stuff

5720
5721 [D] ,[H] and [L] are preserved.
5722 [E] is updated to prepare for next edge
5723
5724 1B03 3A FCA5 LD A, (WINWID) ;Get width of window
5725 1B06 47 LD B,A
5726 1B07 OE 00 LD C,0 ;Clear # of transitions seen
5727 1B09 RDBITL:
5728 1B09 DB A2 IN A, (PSG.DR) ;Get a bit
5729 lBOB AB XOR E ;Any changes?
5730 lBOC F2 lBl 7 JP P,NOTRAN ;No
5731 lBOF 7B LD A,E ;Transition seen
5732 lBlO 2F CPL ;Prepare for next transition
5733 lBll 5F LD E,A
5734 1Bl2 oc INC c ; Increment # of tr ans i tions
5735 1Bl3 10 F4 DJNZ RDBITL
5736 1Bl5 79 LD A,C ;Get transition count
5737 1Bl6 C9 RET
5738 1Bl7 NOTRAN:
573 9
5740 1Bl7 00 NOP ;Compensate time
5741 1Bl8 00 NOP
5742 1Bl9 00 NOP
5743 lBlA 00 NOP
5744 lBlB 10 EC DJNZ RDBITL
5745
5746 lBlD 79 LD A,C ;Get transition count
5747 lBlE C9 RET
( MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 61 210
-CASET- Cassette drivers stuff

5748
5749 lBlF CNTHLF:
5750
5751 ; Count half cycle
5752 ; lT =279 .4nS
5753 ; period=[C] x 11.18 + 35.48uS
5754 ;
5755 lBlF CD 046F CALL BREAKX ;Break? ( 87 T)
5756 1B22 D8 RET c ;Yes, aborted ( 6 T)
5757 1B23 CNTHLO:
5758 1B23 OE 00 LD C,0 ;Initialize counter ( 8 T)
5759 1B25 CNTHLl:
5760 1B25 oc INC c ;# of state for this loop
5761 ;40T=ll .18usec ( 5 T)
5762 1B26 28 OA JR Z,TIMOUT ; Pulse too long ( 8 T)
5763 1B28 DB A2 IN A, ( PSG. DR) ; Read cassette (11 T)
5764 1B2A AB XOR E ;Desired transition? ( 5 T)
5765 1B2B F2 1B25 JP P,CNTHLl ;No (11 T)
5766 1B2E 7B LD A,E ;Complement edge mask ( 5 T)
5767 1B2F 2F CPL ; ( 5 T)
5768 1B30 SF LD E,A ; ( 5 T)
5769 1B31 C9 RET ; (11 T)
5770 1B32 TIMOUT:
5771
5772 1B32 OD DEC c ;Load 255
5773 1B33 C9 RET
5774 1B34 CNTFUL:
5775
5776 ; Count full cycle
5777
5778 1B34 CD 046F CALL BREAKX
( MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 61-1 211
-CASET- Cassette drivers stuff

5779 1B37 DB RET c ;Aborted


5780 . 1B38 DB A2 IN A, (PSG.DR) ;Get cassette
5781 1B3A 07 RLCA ;Low state?
5782 1B3B 38 F7 JR C,CNTFUL ;No
5783 1B3D lE 00 LD E,O ;Initialize edge mask
5784 1B3F CD 1B23 CALL CNTHLO
5785 1B42 C3 1B25 JP CNTHLl
5786 SUBTTL - BIO - OUTDO routine
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 62 212
- BIO - OUTDO routine

5787
5788 1B45 OUTDO:
5789
5790 OUTDO ( RST 18H )
5791 Prints char in [A], to either terminal or disk
5792 or printer depending on the flags:
5793 PRTFLG if non-zero print to printer
5794 PTRFIL if non-zero pr int to disk file pointed
5795 to by PTRFIL
5796
5797 1B45 F5 PUSH AF ;Save character
5798 1B46 CD FEE4 CALL H.OUTD
5799 1B49 CD 145F CALL ISFLIO ;Doing I/O to file?
5800 1B4C 28 08 JR Z,LPTCOD ; Nope, check for output to printer
5801 1B4E Fl POP AF ;Restore char.
5802 1B4F DD 21 6C48 LD IX,FILOUl ;Jump with pointer to FILE OUT routine
5803 1B53 C3 OlFF JP CAL BAS
5804
5805 1B56 LPTCOD:
5806 1B56 3A F416 LD A, (PRTFLG) ;Output to pr inter?
5807 1B59 B7 OR A
5808 1B5A 28 5F JR Z,TTYCHR ;Nope, output to console
5809 1B5C 3A F418 LD A, (RAWPRT) ;Print in "RAW" mode?
5810 1B5F A7 AND A
5811 1B60 20 49 JR NZ,LPTCHl ;Yes, send char to printer
5812 1B62 Fl POP AF ; res tore char
5813
5814 1B63 OUTDLP:
5815 1B63 F5 PUSH AF
5816
5817 1B64 NTBKS2:
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 62-1 213
- BIO - OUTDO routine

5818 1B64 FE 09 CP 9 ;TAB?


5819 1B66 20 OE JR NZ,NOTABL ;No
5820
5821 1B68 MORSPL:
5822 1B68 3E 20 LD A, I I ; Print a space
5823 1B6A CD 1B63 CALL OUTDLP
5824 1B6D 3A F415 LD A, (LPTPOS) ;Get current LPOS
5825 1B70 E6 07 AND 7 ;At TAB stop?
5826 1B72 20 F4 JR NZ,MORSPL ;No, back for more space
5827 1B74 Fl POP AF ;Discard character
5828 1B75 C9 RET
5829
5830 1B76 NOTABL:
5831 1B76 D6 OD SUB ODH ;Check if CR. If so load a zero
5832 1B78 28 OA JR Z, ZERLPl ;It is, clear LPTPOS and send CR
5833 1B7A 38 OB JR C,LPTCHO ;Code is 0 •. OCH, just send.
5834 ;without modify LPTPOS
5835 1B7C FE 13 CP " "-13 ; See if control character
5836 1B7E 38 07 JR C,LPTCHO ;Code is OEH .. lFH, ditto
5837 1B80 3A F415 LD A, (LPTPOS) ;Get LPOS
5838 1B83 3C INC A
5839
5840 1B84 ZERLPl:
5841 1B84 32 F415 LD (LPTPOS) ,A ;Update LPOS
5842
5843 1B87 LPTCHO:
5844 1B87 3A F417 LD A, (NTMSXP) ;Output to MSX standard pr inter
5845 1B8A A7 AND A
5846 1B8B 28 lE JR Z,LPTCHl ;No mapping for KATAKANA to HIRAGANA
5847 1B8D Fl POP AF ;restore char to print
5848 1B8E CD 089D CALL CNVCHR ;See if grafilic header
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 62-2 214
- BIO - OUTDO routine

5849 1B91 DO RET NC ;Yep


5850 1B92 20 23 JR NZ,MAPSPC ;Graphic symbol, map to ~pace
5851 1B94 A7 AND A
5852 1B95 F2 lBAC JP P,LPTCHR
5853 1B98 FE 86 CP 86H ;Graphic symbol?
5854 1B9A 38 lB JR C,MAPSPC ; Yes , map th is to space too !
5855 1B9C FE AO CP OAOH ;A HIRAGANA(part l)?
5856 1B9E 30 04 JR NC,NTHIRA
5857 lBAO C6 20 ADD A, I I ;Map to KATAKANA
5858 1BA2 18 08 JR LPTCHR
5859 1BA4 NTHIRA:
5860 1BA4 FE EO CP OEOH ;HIRAGANA(part 2)?
5861 1BA6 38 04 JR C,LPTCHR ;No
I I
5862 1BA8 D6 20 SUB ;Map to KATAKANA
5863 lBAA 38 DB 38H i 'JRC I instruction (Skip next byte)
5864 lBAB LPTCHl:
5865 lBAB Fl POP AF ; Res tore char
5866
5867 lBAC LPTCHR:
5868 lBAC CD 085D CALL LPTOUT ;Send character out
5869 lBAF DO RET NC ; Sent successful
5870 lBBO DD 21 73B2 LD IX,DIOERR ;Direct I/O error
5871 1BB4 C3 OlFF JP CAL BAS
5872 1BB7 MAPSPC:
5873 1BB7 3E 20 LD A, I I
5874 1BB9 18 Fl JR LPTCHR
5875 lBBB TTYCHR:
5876
5877 ; Output to console
5878
5879 lBBB Fl POP AF ;Get the character
MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 62-3 215
- BIO - OUTDO routine

5880 lBBC C3 08BC JP CH PUT


5881 SUBTTL -MSXCHR- MSX character set
( MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 63 216
-MSXCHR- MSX dlaracter set

5882
5883 lBBF CGTABL:
5884 lBBF 00 00 00 00 DB OOH,OOH,OOH,OOH,OOH,OOH,00H
5885 1BC3 00 00 00
5886 1BC6 00 7E 42 7E DB 00H,7EH,42H,7EH,42H,7EH,42H
5887 lBCA 42 7E 42
5888 lBCD 82 00 10 92 DB 82H,OOH,10H,92H,54H,10H,28H
5889 lBDl 54 10 28
5890 1BD4 44 82 00 12 DB 44H,82H,00H,12H,14H,0F~H,l4H
5891 1BD8 14 F8 14
5892 lBDB 34 52 92 00 DB 34H,52H,92H,00H,10H,10H,0FEH
5893 lBDF 10 10 FE
5894 1BE2 10 38 54 92 DB 10H,38H,54H,92H,00H,10H,28H
5895 1BE6 00 10 28
5896 1BE9 7C 92 38 54 DB 7CH,92H,38H,54H,OFEH,00H,l0H
5897 lBED FE 00 10
5898 lBFO 10 10 7C 10 DB 10H,10H,7CH,10H,10H,OFEH,00H
5899 1BF4 10 FE 00
5900 1BF7 7E 42 42 7E DB 7EH,42H,42H,7EH,42H,42H,7EH
5901 lBFB 42 42 7E
5902 lBFE 00 40 7E 48 DB 00H,40H,7EH,48H,3CH,28H,7EH
5903 1C02 3C 28 7E
5904 1C05 08 00 FE 92 DB 08H.OOH,0FEH,92H,92H,OFEH,82H
5905 1C09 92 FE 82
5906 lCOC 82 86 00 04 DB 82H,86H,00H,04H,0EEH,OA4H,OEFH
5907 lClO EE A4 EF
5908 1Cl3 A2 EA 06 00 DB OA2H,OEAH,06H,00H,28H,44H,82H
5909 lCl 7 28 44 82
5910 lClA 3C 14 24 4C DB 3CH,14H;24H,4CH,00H,28H,OC8H
5911 lClE 00 28 C8
5912 1C21 SC EA 6C C8 DB 5CH,0EAH,6CH,0C8H,50H,00H,7CH
( MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 63-1 217
-MSXCHR- MSX character set

5913 1C25 50 00 7C
5914 1C28 20 7C 44 7C DB 20H,7CH,44H,7CH,44H,7CH,00H
5915 1C2C 44 7C 00
5916 1C2F OC 70 10 FE DB OCH,70H,10H,0FEH,10H,10H,10H
5917 1C33 10 10 10
5918 1C36 00 7E 10 lE DB 00H,7EH,10H,1EH,12H,22H,44H
5919 1C3A 12 22 44
5920 1C3D 08 00 00 7C DB 08H,00H,00H,7CH,28H,28H,28H
5921 1C41 28 28 28
5922 1C44 4E 00 00 10 DB 4EH,00H,00H,10H,10H,10H,0FFH
5923 1C48 10 10 FF
5924 1C4B 00 00 00 00 DB OOH,OOH,OOH,OOH,OOH,OOH,OOH
5925 1C4F 00 00 00
5926 1C52 FF 10 10 10 DB OFFH,10H,10H,10H,10H,10H,10H
5927 1C56 10 10 10
5928 1C59 10 FO 10 10 DB lOH,OFOH,lOH,lOH,lOH,lOH,lOH
5929 1C5D 10 10 10
5930 1C60 10 10 lF 10 DB 10H,10H,1FH,10H,10H,10H,10H
5931 1C64 10 10 10
5932 1C67 10 10 10 FF DB 10H,10H,10H,0FFH,10H,10H,l0H
5933 1C6B 10 10 10
5934 1C6E 10 10 10 10 DB 10H,10H,10H,10H,10H,10H,l0H
5935 1C72 10 10 10
5936 1C75 10 10 00 00 DB 10H,10H,00H,00H,OOH,OFFH,00H
5937 1C79 00 FF 00
5938 1C7C 00 00 00 00 DB OOH,OOH,OOH,OOH,OOH,OOH,lFH
5939 1C80 00 00 lF
5940 1C83 10 10 10 10 DB lOH,lOH,lOH,lOH,OOH,OOH,00H
5941 1C87 00 00 00
5942 1C8A FO 10 10 10 DB OFOH,lOH,lOH,lOH,lOH,lOH,lOH
5943 1C8E 10 10 10
( MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 63-2 218
-MSXCHR- MSX character set

5944 1C91 10 lF 00 00 DB lOH,lFH,OOH,OOH,OOH,OOH,lOH


5945 1C95 00 00 10
5946 1C98 10 10 FO 00 DB lOH,lOH,OFOH,OOH,OOH,OOH,00H
5947 1C9C 00 00 00
5948 1C9F Bl 42 24 18 DB 81H,42H,24H,18H,18H,24H,42H
5949 1CA3 18 24 42
5950 1CA6 81 10 7C 10 DB 81H,10H,7CH,10H,10H,28H,44H
5951 lCAA 10 28 44
5952 lCAD B2 00 10 10 DB 82H,OOH,10H,10H,OFEH,92H,0FEH
5953 lCBl FE 92 FE
5954 1CB4 10 10 00 10 DB 10H,10H,00H,10H,10H,54H,54H
5955 1CB8 10 54 54
5956 lCBB 92 10 30 00 DB 92H,10H,30H,OOH,OOH,00H,00H
5957 lCBF 00 00 00
5958 1CC2 00 00 00 00 DB OOH,OOH,OOH,OOH,00H,20H,20H
5959 1CC6 00 20 20
5960 1CC9 20 20 00 00 DB 20H,20H,OOH,00H,20H,00H,50H
5961 lCCD 20 00 50
5962 lCDO 50 50 00 00 DB 50H,50H,00H,00H,00H,00H,00H
5963 1CD4 00 00 00
5964 1CD7 50 50 FB 50 DB 50H,50H,OF8H,50H,OFBH,50H,50H
5965 lCDB F8 50 50
5966 lCDE 00 20 78 AO DB OOH,20H,78H,OAOH,70H,28H,0FOH
5967 1CE2 70 28 FO
5968 1CE5 20 00 CO CB DB 20H,OOH,OCOH,OCBH,10H,20H,40H
5969 1CE9 10 20 40
5970 lCEC 98 18 00 40 DB 9BH,18H,OOH,40H,OAOH,40H,0A8H
5971 lCFO AO 40 AB
5972 1CF3 90 98 60 00 DB 90H,98H,60H,OOH,10H,20H,40H
5973 1CF7 10 20 40
5974 lCFA 00 00 00 00 DB OOH,OOH,OOH,OOH,OOH,lOH,20H
( MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 63-3 219
-MSXCHR- MSX character set

5975 lCFE 00 10 20
5976 1001 40 40 40 20 DB 40H,40H,40H,20H,10H,OOH,40H
5977 1D05 10 00 4 0
5978 1008 20 10 10 10 DB 20H,10Hil0H,10H,20H,40H,00H
5979 lDOC 20 40 00
5980 lDOF 20 A8 70 20 DB 20H,0A8H,70H,20H,70H,0A8H,20H
5981 1Dl3 70 A8 20
5982 1016 00 00 20 20 DB 00H,00H,20H,20H,OF8H,20H,20H
5983 lDlA F8 20 20
5984 lDlD 00 00 00 00 DB OOH,00H,00H 1 00H,OOH,OOH,00H
5985 1D21 00 00 00
5986 1024 20 20 40 00 DB 20H,20H,40H,OOH,OOH,00H,78H
5987 1D28 00 00 78
5988 1D2B 00 00 00 00 DB OOH,OOH,OOH,OOH,OOH,OOH,OOH
5989 1D2F 00 00 00
5990 1D32 00 00 60 60 DB OOH,00H,60H,60H,OOH,00H,OOH
5991 1D36 00 00 00
5992 1039 08 10 20 40 DB 08H,10H,20H,40H,80H,00H,70H
5993 1D3D 80 00 70
5994 1D40 88 98 A8 C8 DB 88H,98H,OA8H,OC8H,88H,70H,OOH
5995 1D44 88 70 00
5996 1047 20 60 AO 20 DB 20H,60H,0AOH,20H,20H,20H,0F8H
5997 1D4B 20 20 F8
5998 1D4E 00 70 88 08 DB 00H,70H,88H,08H,10H,60H,80H
5999 1D52 10 60 80
6000 1055 F8 00 70 88 DB OF8H,00H,70H,88H,08H,30H,08H
6001 1D59 08 30 08
6002 1D5C 88 70 00 10 DB 88H,70H,00H,10H,30H,50H,90H
6003 1D60 30 50 90
6004 1063 F8 10 10 00 DB OF8H,10H,10H,OOH,OF8H,80H,0EOH
6005 1D67 F8 80 EO
( MSX ROM BASIC BIOS ) Macro-BO 3.44 Ol-Jan-B5 PAGE 63-4 220
-MSXCHR- MSX character set

6006 1D6A 10 OB 10 EO DB 10H,OBH,10H,OEOH,OOH,30H,40H


6007 1D6E 00 30 40
600B 1D71 BO FO BB BB DB BOH,OFOH,BBH,BBH,70H,OOH,0FBH
6009 1D75 70 00 FB
6010 1D7B BB 10 20 20 DB BBH,10H,20H,20H,20H,20H,00H
6011 1D7C 20 20 00
6012 1D7F 70 BB BB 70 DB 70H,BBH,BBH,70H,BBH,BBH,70H
6013 1DB3 BB BB 70
6014 1DB6 00 70 BB BB DB OOH,70H,BBH,BBH,7BH,OBH,10H
6015 lDBA 7B OB 10
6016 lDBD 60 00 00 00 DB 60H,OOH,00H,00H,20H,00H,00H
6017 1D91 20 00 00
601B 1D94 20 00 00 00 DB 20H,00H,00H,00H,00H,20H,00H
6019 1D9B 00 20 00
6020 1D9B 00 20 20 40 DB OOH,20H,20H,40H,1BH,30H,60H
6021 1D9F lB 30 60
6022 1DA2 co 60 30 lB DB OCOH,60H,30H;lBH,00H,00H,00H
6023 1DA6 00 00 00
6024 1DA9 FB 00 FB 00 DB OFBH,OOH,OFBH,OOH,OOH,OOH,0COH
6025 lDAD 00 00 co
6026 lDBO 60 30 lB 30 DB 60H,30H,1BH,30H,60H,OCOH,00H
6027 1DB4 60 co 00
602B 1DB7 70 BB OB 10 DB 70H,BBH,OBH,10H,20H,00H,20H
6029 lDBB 20 00 20
6030 lDBE 00 70 BB OB DB 00H,70H,BBH,0BH,6BH,0ABH,0ABH
6031 1DC2 6B AB AB
6032 1DC5 70 00 20 50 DB 70H,00H,20H,50H,BBH,BBH,0FBH
6033 1DC9 BB BB FB
6034 lDCC BB BB 00 FO DB BBH,BBH,OOH,OFOH,4BH,4BH,70H
6035 lDDO 4B 4B 70
6036 1DD3 4B 4B FO 00 DB 4BH,4BH,OFOH,OOH,30H,4BH,BOH
( MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 63-5 221
-MSXCHR- MSX character set

6037 1DD7 30 48 80
6038 lDDA 80 80 48 30 DB 80H,80H,48H,30H,00H,OEOH,50H
6039 lDDE 00 EO 50
6040 lDEl 48 48 48 50 DB 48H,48H,48H,50H,OEOH,00H,OF8H
6041 1DE5 EO 00 F8
6042 1DE8 80 80 FO 80 DB 80H,80H,OFOH,80H,80H,0F8H,OOH
6043 lDEC 80 F8 00
6044 lDEF F8 80 80 FO DB OF8H,80H,80H,OFOH,80H,80H,80H
6045 1DF3 80 80 80
6046 1DF6 00 70 88 80 DB 00H,70H,88H,80H,OB8H,88H,88H
6047 lDFA B8 88 88
6048 lDFD 70 00 88 88 DB 70H,00H,88H,88H,88H,OF8H,88H
6049 lEOl 88 F8 88
6050 1E04 88 88 00 70 DB 88H,88H,00H,70H,20H,20H,20H
6051 1E08 20 20 20
6052 lEOB 20 20 70 00 DB 20H,20H,70H,OOH,38H,10H,10H
6053 lEOF 38 10 10
6054 1El2 10 90 90 60 DB 10H,90H,90H,60H,00H,88H,90H
6055 1El6 00 88 90
6056 1El9 AO CO AO 90 DB OAOH,OCOH,0AOH,90H,88H,OOH,80H
6057 lElD 88 00 80
6058 1E20 80 80 80 80 DB 80H,80H,80H,80H,80H,OF8H,00H
6059 1E24 80 F8 00
6060 1E27 88 D8 A8 A8 DB 88H,OD8H,OA8H,0A8H,88H,88H,88H
6061 1E2B 88 88 88
6062 1E2E 00 88 C8 C8 DB OOH,88H,OC8H,OC8H,OA8H,98H,98H
6063 1E32 A8 98 98
6064 1E35 88 00 70 88 DB 88H,00H,70H,88H,88H,88H,88H
6065 1E39 88 88 88
6066 1E3C 88 70 00 FO DB 88H,70H,00H,OFOH,88H,88H,0FOH
6067 1E40 88 88 FO
( MSX ROM BASIC BIOS ) Macro-SO 3.44 01-Jan-S5 PAGE 63-6 222
-MSXCHR- MSX character set

606S 1E43 so so so 00 DB SOH,SOH,SOH,00H,70H,SSH,SSH


6069 1E47 70 SS SS
6070 1E4A SS AS 90 6S DB SSH,OASH,90H,6SH,00H,OFOH,SSH
6071 1E4E 00 FO SS
6072 1E51 SS FO AO 90 DB SSH,OFOH,0AOH,90H,SSH,OOH,70H
6073 1E55 SS 00 70
6074 1E5S SS so 70 OS DB SSH,SOH,70H,0SH,SSH,70H,00H
6075 1E5C SS 70 00
6076 1E5F FS 20 20 20 DB OFSH,20H,20H,20H,20H,20H,20H
6077 1E63 20 20 20
607S 1E66 00 SS SS SS DB OOH,SSH,SSH,SSH,SSH,SSH,SSH
6079 1E6A SS SS SS
60SO 1E6D 70 00 SS SS DB 70H,00H,SSH,SSH,SSH,SSH,50H
60Sl 1E71 SS SS 50
60S2 1E74 50 20 00 SS DB 50H,20H,OOH,SSH,SSH,SSH,0ASH
60S3 1E7S SS SS AS
60S4 1E7B AS DS SS 00 DB OASH,ODSH,SSH,OOH,SSH,SSH,50H
60S5 1E7F SS SS 50
60S6 1ES2 20 50 SS SS DB 20H,50H,SSH,SSH,OOH,SSH,SSH
60S7 1ES6 00 SS SS
60SS 1ES9 SS 70 20 20 DB SSH,70H,20H,20H,20H,OOH,0FSH
60S9 lESD 20 00 FS
6090 1E90 OS 10 20 40 DB OSH,10H,20H,40H,SOH,OFSH,00H
6091 1E94 SO FS 00
6092 1E97 70 40 40 40 DB 70H,40H,40H,40H,40H,40H,70H
6093 1E9B 40 40 70
6094 1E9E 00 SS 50 20 DB OOH,SSH,50H,20H,70H,20H,70H
6095 1EA2 70 20 70
6096 1EA5 20 00 70 10 DB 20H,00H,70H,10H,10H,10H,10H
6097 1EA9 10 10 10
609S lEAC 10 70 00 20 DB 10H,70H,OOH,20H,50H,SSH,00H
( MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 63-7 223
-MSXCHR- MSX character set

6099 lEBO 50 88 00
6100 1EB3 00 00 00 00 DB OOH,OOH,OOH,OOH,OOH,OOH,00H
6101 1EB7 00 00 00
6102 lEBA 00 00 00 F8 DB OOH,OOH,00H,OF8H,00H,40H,20H
6103 lEBE 00 40 20
6104 lECl 10 00 00 00 DB lOH,OOH,OOH,OOH,OOH,OOH,00H
6105 1EC5 00 00 00
6106 1EC8 00 70 08 78 DB OOH,70H,08H,78H,88H,78H,00H
6107 lECC 88 78 00
6108 lECF 80 80 BO C8 DB 80H,80H,OBOH,OC8H,88H,OC8H,0BOH
6109 1ED3 88 C8 BO
6110 1ED6 00 00 00 70 DB OOH,00H,00H,70H,88H,80H,88H
6111 lEDA 88 80 88
6112 lEDD 70 00 08 08 DB 70H,OOH,08H,08H,68H,98H,88H
6113 lEEl 68 98 88
6114 1EE4 98 68 00 00 DB 98H,68H,00H,OOH,OOH,70H,88H
6115 1EE8 00 70 88
6116 lEEB F8 80 70 00 DB OF8H,80H,70H,00H,10H,28H,20H
6117 lEEF 10 28 20
6118 1EF2 F8 20 20 20 DB 0F8H,20H,20H,20H,00H,00H,00H
6119 1EF6 00 00 00
6120 1EF9 68 98 98 68 DB 68H,98H,98H,68H,08H,70H,80H
6121 lEFD 08 70 80
6122 lFOO 80 FO 88 88 DB 80H,OFOH,88H,88H,88H,88H,00H
6123 1F04 88 88 00
6124 1F07 20 00 60 20 DB 20H,00H,60H,20H,20H,20H,70H
6125 lFOB 20 20 70
6126 lFOE 00 10 00 30 DB 00H,10H,00H,30H,10H,10H,10H
6127 1Fl2 10 10 10
6128 1Fl5 90 60 40 40 DB 90H,60H,40H,40H,48H,50H,60H
6129 1Fl9 48 50 60
( MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 63-8 224
-MSXCHR- MSX character set

6130 lFlC 50 48 00 60 DB 50H,48H,OOH,60H,20H,20H,20H


6131 1F20 20 20 20
6132 1F23 20 20 70 00 DB 20H,20H,70H,00H,00H,OOH,0DOH
6133 1F27 00 00 DO
6134 1F2A A8 A8 A8 A8 DB OA8H,OA8H,OA8H,OA8H,OOH,00H,OOH
6135 1F2E 00 00 00
6136 1F31 BO C8 88 88 DB OBOH,OC8H,88H,88H,88H,OOH,00H
6137 1F35 88 00 00
6138 1F38 00 70 88 88 DB OOH,70H,88H,88H,88H,70H,00H
6139 1F3C 88 70 00
6140 1F3F 00 00 BO C8 DB OOH,00H,OBOH,OC8H,OC8H,OBOH,80H
6141 1F43 C8 BO 80
6142 1F46 80 00 00 68 DB 80H,00H,00H,68H,98H,98H,68H
6143 1F4A 98 98 68
6144 1F4D 08 08 00 00 DB 08H,08H,OOH,00H,OBOH,OC8H,80H
6145 1F51 BO C8 80
6146 1F54 80 80 00 00 DB 80H,80H,00H,00H,00H,78H,80H
6147 1F58 00 78 80
6148 1F5B FO 08 FO 00 DB OFOH,08H,OFOH,OOH,40H,40H,0FOH
6149 1F5F 40 40 FO
6150 1F62 40 40 48 30 DB 40H,40H,48H,30H,00H,OOH,00H
6151 1F66 00 00 00
6152 1F69 90 90 90 90 DB 90H,90H,90H,90H,68H,00H,00H
6153 1F6D 68 00 00
6154 1F70 00 88 88 88 DB 00H,88H,88H,88H,50H,20H,00H
6155 1F74 50 20 00
6156 1F77 00 00 88 A8 DB OOH,00H,88H,OA8H,OA8H,OA8H,50H
6157 1F7B A8 A8 50
6158 1F7E 00 00 00 88 DB OOH,00H,OOH,88H,50H,20H,50H
6159 1F82 50 20 50
6160 1F85 88 00 00 00 DB 88H,00H,OOH,00H,88H,88H,98H
( MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 63-9 225
-MSXCHR- MSX character set

6161 1F89 88 BB 98
6162 1F8C 68 08 70 00 DB 68H,OBH,70H,OOH,00H,OF8H,10H
6163 1F90 00 FB 10
6164 1F93 20 40 F8 00 DB 20H,40H,OF8H,00H,18H,20H,20H
6165 1F97 18 20 20
6166 1F9A 40 20 20 lB DB 40H,20H,20H,18H,00H,20H,20H
6167 1F9E 00 20 20
6168 lFAl 20 00 20 20 DB 20H,OOH,20H,20H,20H,00H,0COH
6169 1FA5 20 00 co
6170 1FA8 20 20 10 20 DB 20H,20H,10H,20H,20H,OCOH,00H
6171 lFAC 20 co 00
6172 lFAF 40 AS 10 00 DB 40H,OA8H,10H,00H,00H,00H,00H
6173 1FB3 00 00 00
6174 1FB6 00 00 00 00 DB OOH,OOH,OOH,OOH,OOH,OOH,00H
6175 lFBA 00 00 00
6176 lFBD 00 00 10 3B DB OOH,OOH,10H,38H,7CH,OFEH,0FEH
6177 lFCl 7C FE FE
617B 1FC4 3B 7C 00 6C DB 38H,7CH,00H,6CH,OFEH,0FEH,OFEH
6179 1FC8 FE FE FE
61BO lFCB 7C 38 10 00 DB 7CH,38H,10H,00H,38H,38H,0FEH
6181 lFCF 3B 38 FE
61B2 1FD2 FE D6 10 7C DB 0FEH,OD6H,10H,7CH,00H,10H,3BH
61B3 1FD6 00 10 38
6184 1FD9 7C FE 7C 38 DB 7CH,OFEH,7CH,38H,10H,00H,OOH
6185 lFDD 10 00 00
6186 lFEO 78 B4 84 84 DB 78H,84H,84H,84H,84H,78H,00H
61B7 1FE4 84 78 00
6188 1FE7 00 78 FC FC DB OOH,78H,OFCH,OFCH,0FCH,OFCH,78H
6189 lFEB FC FC 78
6190 lFEE 00 40 FE 48 DB OOH,40H,OFEH,48H,70H,48H,B2H
6191 1FF2 70 48 82
( MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-8S PAGE 63-10 226
-MSXCHR- MSX character set

6192 lFFS 7C 00 00 00 DB 7CH,00H,00H,OOH,10H,7EH,3CH


6193 1FF9 10 7E 3C
6194 lFFC SA 34 00 00 DB SAH,34H,OOH,OOH,OOH,40H,42H
619S 2000 00 40 42
6196 2003 42 S2 20 00 DB 42H,S2H,20H,OOH,00H,00H,1CH
6197 2007 00 00 lC
6198 200A le 22 02 oc DB 1CH,22H,02H,OCH,OOH,00H,00H
6199 200E 00 00 00
6200 2011 18 7E 18 30 DB 18H,7EH,18H,30H,6EH,00H,00H
6201 201S 6E 00 00
6202 2018 00 12 7E 3C DB 00H,12H,7EH,3CH,S2H,34H,00H
6203 201C S2 34 00
6204 201F 00 00 28 7C DB 00H,00H,28H,7CH,2AH,22H,24H
620S 2023 2A 22 24
6206 2026 00 00 00 08 DB 00H,00H,00H,08H,SCH,6AH,0CH
6207 202A SC 6A OC
6208 202D 30 00 00 00 DB 30H,00H,OOH,OOH,08H,0EH,38H
6209 2031 08 OE 38
6210 2034 4C 3A 00 00 DB 4CH,3AH,OOH,OOH,OOH,00H,3CH
6211 2038 00 00 3C
6212 203B 02 02 lC 00 DB 02H,02H,1CH,OOH,OOH,00H,00H
6213 203F 00 00 00
6214 2042 00 00 00 00 DB OOH,00H,00H,OOH,OOH,20H,OFEH
621S 2046 00 20 FE
6216 2049 20 7C AA B2 DB 20H,7CH,OAAH,OB2H,64H,00H,00H
6217 204D 64 00 00
6218 20SO 80 82 82 82 DB 80H,82H,82H,82H,90H,60H,00H
6219 20S4 90 60 00
6220 20S7 lC 00 7C 02 DB 1CH,00H,7CH,02H,02H,04H,l8H
6221 20SB 02 04 18
6222 20SE 00 38 00 FE DB OOH,38H,00H,OFEH,08H,30H,SOH
( MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 63-11 227
-MSXCHR- MSX character set

6223 2062 08 30 50
6224 2065 9E 00 20 FA DB 9EH,OOH,20H,OFAH,22H,7CH,0A2H
6225 2069 22 7C A2
6226 206C A2 4C 00 40 DB 0A2H,4CH,00H,40H,44H,0F2H,4AH
6227 2070 44 F2 4A
6228 2073 48 88 30 00 DB 48H,88H,30H,OOH,10H,OFCH,08H
6229 2077 10 FC 08
6230 207A 3E 04 80 7C DB 3EH,04H,80H,7CH,OOH,18H,18H
6231 207E 00 18 18
6232 2081 30 60 60 30 DB 30H,60H,60H,30H,18H,00H,04H
6233 2085 18 00 04
6234 2088 84 BE 84 84 DB 84H,OBEH,84H,84H,84H,48H,00H
6235 208C 84 48 00
6236 208F 00 FC 02 00 DB OOH,OFCH,02H,00H,40H,80H,7EH
6237 2093 40 80 7E
6238 2096 00 10 16 F8 DB 00H,10H,16H,OF8H,08H,7CH,80H
6239 209A 08 7C 80
6240 209D 78 00 80 80 DB 78H,00H,80H,80H,80H,80H,84H
6241 20Al 80 80 84
6242 20A4 88 70 00 08 DB 88H,70H,00H,08H,OFEH,08H,38H
6243 20A8 FE 08 38
6244 20AB 48 38 08 00 DB 48H,38H,08H,00H,04H,44H,0FEH
6245 20AF 04 44 FE
6246 20B2 44 44 40 3E DB 44H,44H,40H,3EH,00H,64H,28H
624 7 20B6 00 64 28
6248 20B9 30 FE 20 40 DB 30H,OFEH,20H,40H,3CH,OOH,00H
6249 20BD 3C 00 00
6250 20CO 00 00 00 00 DB OOH,OOH,OOH,OOH,OOH,OOH,00H
6251 20C4 00 00 00
6252 20C7 00 00 00 00 DB OOH,00H,00H,OOH,60H,90H,60H
6253 20CB 60 90 60
( MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 63-12 228
-MSXCHR- MSX character set

6254 20CE 00 38 20 20 DB OOH,38H,20H,20H,20H,00H,OOH


6255 20D2 20 00 00
6256 20D5 00 00 00 00 DB OOH,OOH,00H,00H,00H,20H,20H
6257 20D9 00 20 20
6258 20DC 20 EO 00 00 DB 20H,OEOH,00H,00H,00H,00H,00H
6259 20EO 00 00 00
6260 20E3 80 40 20 00 DB 80H,40H,20H,00H,00H,00H,00H
6261 20E7 00 00 00
6262 20EA 30 30 00 00 DB 30H,30H,00H,00H,00H,0F8H,08H
6263 20EE 00 F8 08
6264 20Fl F8 08 10 20 DB OF8H,08H,10H,20H,40H,00H,00H
6265 20F5 40 00 00
6266 20F8 00 FO 10 60 DB OOH,OFOH,10H,60H,40H,80H,00H
6267 20FC 40 80 00
6268 2,0FF 00 10 20 60 DB OOH,10H,20H,60H,OAOH,20H,20H
6269 2103 AO 20 20
6270 2106 00 00 20 FO DB OOH,OOH,20H,OFOH,90H,10H,20H
6271 210A 90 10 20
6272 210D 40 00 00 00 DB 40H,OOH,00H,00H,OFOH,20H,20H
6273 2111 FO 20 20
6274 2114 20 FO 00 00 DB 20H,OFOH,00H,00H,20H,OFOH,60H
6275 2118 20 FO 60
6276 211B AO AO 20 00 DB OAOH,0AOH,20H,OOH,00H,40H,0F8H
6277 211F 00 40 F8
6278 2122 48 50 40 40 DB 48H,50H,40H,40H,00H,OOH,OOH
6279 2126 00 00 00
6280 2129 70 10 10 10 DB 70H,10H,10H,10H,OF8H,00H,00H
6281 212D F8 00 00
6282 2130 00 FO 10 FO DB OOH,OFOH,lOH,OFOH,lOH,OFOH,00H
6283 2134 10 FO 00
6284 2137 00 00 A8 A8 DB OOH,OO~,OA8H,OA8H,08H,10H,20H
( MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 63-13 229
-MSXCHR- MSX character set

6285 213B 08 10 20
6286 213E 00 00 00 00 DB OOH,00H,OOH,00H,OF8H,OOH,OOH
6287 2142 F8 00 00
6288 2145 00 00 F8 08 DB OOH,OOH,OF8H,08H,28H,30H,20H
6289 2149 28 30 20
6290 214C 20 40 00 08 DB 20H,40H,00H,08H,10H,20H,60H
6291 2150 10 20 60
6292 2153 AO 20 20 00 DB 0AOH,20H,20H,OOH,20H,0F8H,88H
6293 2157 20 F8 88
6294 215A 88 08 10 20 DB 88H,08H,10H 1 20H,00H,OOH,OF8H
6295 215E 00 00 F8
6296 2161 20 20 20 20 DB 20H,20H,20H,20H,OF8H,OOH,10H
6297 2165 F8 00 10
6298 2168 F8 10 30 50 DB OF8H,10H,30H,50H,90H,10H,00H
6299 216C 90 10 00
6300 216F 20 F8 28 28 DB 20H,0F8H,28H,28H,28H,48H,88H
6301 2173 28 48 88
6302 2176 00 20 F8 20 DB OOH,20H,OF8H,20H,OF8H,20H,20H
6303 217A F8 20 20
6304 217D 20 00 78 48 DB 20H,00H,78H,48H,88H,08H,08H
6305 2181 88 08 08
6306 2184 10 20 00 40 DB 10H,20H,OOH,40H,78H,50H,90H
6307 2188 78 50 90
6308 218B 10 10 20 00 DB 10H,10H,20H,00H,00H,OF8H,08H
6309 218F 00 FB 08
6310 2192 08 08 08 FB DB 08H,08H,08H,OF8H,00H,50H,0F8H
6311 2196 00 50 FB
6312 2199 50 50 10 10 DB 50H,50H,10H,10H,20H,00H,00H
6313 219D 20 00 00
6314 21AO CO 08 CB 08 DB OCOH,08H,OC8H,08H,10H,0EOH,00H
6315 21A4 10 EO 00
( MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 63-14 230
-MSXCHR- MSX character set

6316 21A7 00 F8 08 10 DB OOH,OF8H,08H,10H,20H,50H,88H


6317 21AB 20 50 88
6318 21AE 00 40 F8 48 DB OOH,40H,OF8H,48H,50H,40H,40H
6319 21B2 50 40 40
6320 21B5 38 00 88 88 DB 38H,00H,88H,88H,48H,08H,l0H
6321 21B9 48 08 10
6322 21BC 20 40 00 78 DB 20H,40H,00H,78H,48H,78H,88H
6323 21CO 48 78 88
6324 21C3 08 10 20 00 DB 08H,10H,20H,OOH,10H,OEOH,20H
6325 21C7 10 EO 20
6326 21CA F8 20 20 40 DB OF8H,20H,20H,40H,OOH,OA8H,0A8H
6327 21CE 00 AB AB
6328 21Dl AB 08 08 10 DB OA8H,08H,08H,10H,20H,00H,70H
6329 21D5 20 00 70
6330 21D8 00 F8 20 20 DB OOH,OF8H,20H,20H,20H,40H,00H
6331 21DC 20 40 00
6332 21DF 40 40 60 50 DB 40H,40H,60H,50H,48H,40H,40H
6333 21E3 48 40 40
6334 21E6 00 20 F8 20 DB OOH,20H,OF8H,20H,20H,20H,20H
6335 21EA 20 20 20
6336 21ED 40 00 00 70 DB 40H,00H,00H,70H,OOH,OOH,OOH
6337 21Fl 00 00 00
6338 21F4 00 F8 00 00 DB OOH,OF8H,OOH,00H,0F8H,08H,0DOH
6339 21F8 F8 08 DO
6340 21FB 20 50 88 00 DB 20H,50H,88H,OOH,20H,OF8H,08H
6341 21FF 20 F8 08
6342 2202 30 ES 20 20 DB 30H,OE8H,20H,20H,00H,08H,08H
6343 2206 00 08 08
6344 2209 08 10 20 40 DB 08H,10H,20H,40H,80H,00H,20H
6345 220D 80 00 20
6346 2210 10 48 48 48 DB 10H,48H,48H,48H,48H,88H,00H
( MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 63-15 231
-MSXCHR- MSX dlaracter set

6347 2214 48 88 00
6348 2217 80 80 F8 80 DB 80H,80H,OF8H,80H,80H,80H,78H
6349 221B 80 80 78
6350 221E 00 F8 08 08 DB OOH,OF8H,08H,08H,08H,10H,20H
6351 2222 08 10 20
6352 2225 40 00 00 40 DB 40H,00H,00H,40H,OAOH,10H,08H
6353 2229 AO 10 08
6354 222C 08 00 00 20 DB 08H,00H,OOH,20H,OF8H,20H,20H
6355 2230 F8 20 20
6356 2233 AS A8 20 00 DB OA8H,OA8H,20H,00H,00H;OF8H,08H
6357 2237 00 F8 08
6358 223A 08 50 20 10 DB 08H,50H,20H,10H,OOH,0FOH,00H
6359 223E 00 FO 00
6360 2241 60 00 00 FO DB 60H,00H,OOH,OFOH,08H,00H,10H
6361 2245 08 00 10
6362 2248 20 40 80 90 DB 20H,40H,80H,90H,88H,OF8H,00H
6363 224C 88 F8 00
6364 224F 08 08 08 50 DB 08H,08H,08H,50H,20H,50H,80H
6365 2253 20 50 80
6366 2256 00 78 20 F8 DB OOH,78H,20H,OF8H,20H,20H,20H
6367 225A 20 20 20
6368 225D 18 00 40 F8 DB 18H,00H,40H,OF8H,48H,48H,50H
6369 2261 48 48 50
6370 2264 40 40 00 00 DB 40H,40H,OOH,OOH,70H,10H,10H
6371 2268 70 10 10
6372 226B 10 10 F8 00 DB 10H,10H,OF8H,00H,OOH,OF8H,08H
6373 226F 00 F8 08
6374 2272 F8 08 08 F8 DB 0F8H,08H,08H,OF8H,OOH,70H,00H
6375 2276 00 70 00
6376 2279 F8 08 08 10 DB OF8H,08H,08H,10H,20H,OOH,48H
6377 227D 20 00 48
( MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 63-16 232
-MSXCHR- MSX character set

6378 2280 48 48 48 48 DB 48H,48H,48H,48H,10H,20H,OOH


6379 2284 10 20 00
6380 2287 10 50 50 50 DB 10H,50H,50H,50H,50H,58H,90H
6381 228B 50 58 90
6382 228E 00 40 40 40 DB 00H,40H,40H,40H,48H,48H,50H
6383 2292 48 48 50
6384 2295 60 00 00 F8 DB 60H,00H,00H,OF8H,88H,88H,88H
6385 2299 88 88 88
6386 229C 88 F8 00 F8 DB 88H,OF8H,DOH,OF8H,88H,88H,08H
6387 22AO 88 88 08
6388 22A3 08 10 20 00 DB 08H,10H,20H,00H,00H,OCOH,00H
6389 22A7 00 co 00
6390 22AA 08 08 10 EO DB 08H,08H,10H,OEOH,OOH,90H,48H
6391 22AE 00 90 48
6392 22Bl 00 00 00 00 DB OOH,OOH,OOH,00H,00H,00H,60H
6393 22B5 00 00 60
6394 22B8 90 60 00 00 DB 90H,60H,00H,00H,00H,00H,00H
6395 22BC 00 00 00
6396 22BF 40 FE 40 SE DB 40H,OFEH,40H,5EH,80H,0AOH,9EH
6397 22C3 80 AO 9E
6398 22C6 00 20 FE 40 DB OOH,20H,OFEH,40H,OF8H,04H,04H
6399 22CA F8 04 04
6400 22CD 78 00 00 00 DB 78H,00H,00H,00H,OFCH,02H,02H
6401 22Dl FC 02 02
6402 22D4 04 38 00 00 DB 04H,38H,OOH,OOH,OFEH,OCH,30H
6403 22D8 FE OC 30
6404 22DB 40 40 38 00 DB 40H,40H,38H,00H,10H,12H,1CH
6405 22DF 10 12 lC
6406 22E2 30 40 40 3E DB 30H,40H,40H,3EH,OOH,24H,OF2H
6407 22E6 00 24 F2
6408 22E9 48 48 9C AA DB 48H,48H,9CH,0AAH,10H,00H,80H
( MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 63-17 233
-MSXCHR- MSX character set

6409 22ED 10 00 80
6410 22FO 9E 80 80 AO DB 9EH,80H,80H,OAOH,OBEH,OCOH,00H
6411 22F4 BE CO 00
6412 22F7 44 4C 7A AA DB 44H,4CH,7AH,0AAH,OA6H,OAAH,6CH
6413 22FB A6 AA 6C
6414 22FE 00 40 EC 52 DB OOH,40H,OECH,52H,62H,0CEH,4AH
6415 2302 62 CE 4A
6416 2305 4C 00 00 38 DB 4CH,00H,OOH,38H,54H,92H,0A2H
6417 2309 54 92 A2
6418 230C A2 4C 00 04 DB 0A2H,4CH,00H,04H,0BEH,84H,84H
6419 2310 BE 84 84
6420 2313 9E A4 5C 00 DB 9EH,OA4H,5CH,00H,08H,4CH,0C6H
6421 2317 08 4C C6
6422 231A 46 44 44 38 DB 46H,44H,44H,38H,OOH,20H,18H
6423 231E 00 20 18
6424 2321 20 16 8A CA DB 20H,16H,8AH,OCAH,18H,OOH,OOH
6425 2325 18 00 00
6426 2328 20 70 D8 8C DB 20H,70H,OD8H,8CH,06H,02H,00H
6427 232C 06 02 00
6428 232F 3E 84 BE 84 DB 3EH,84H,OBEH,84H,9CH,0A6H,18H
6429 2333 9C A6 18
6430 2336 00 08 7E 08 DB OOH,08H,7EH,08H,7EH,38H,4CH
6431 233A 7E 38 4C
6432 233D 3A 00 EO 24 DB 3AH,OOH,OEOH,24H,24H,7EH,0A4H
6433 2341 24 7E A4
6434 2344 A4 68 00 20 DB 0A4H,68H,00H,20H,OFCH,24H,62H
6435 2348 FC 24 62
6436 234B AO 62 3C 00 DB OAOH,62H,3CH,OOH,04H,44H,7CH
6437 234F 04 44 7C
6438 2352 C6 AA 92 64 DB 0C6H,0AAH,92H,64H,00H,20H,20H
6439 2356 00 20 20
( MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-8S PAGE 63-18 234
-MSXCHR- MSX character set

6440 23S9 7B 20 7B 22 DB 7BH,20H,7BH,22H,1CH,00H,00H


6441 23SD lC 00 00
6442 2360 4B FC 4A 42 DB 4BH,OFCH,4AH,42H,4CH,40H,OOH
6443 2364 4C 40 00
6444 2367 OB BC CA BA DB OBH,OBCH,OCAH,BAH,OBCH,OBH,30H
644S 236B oc OB 30
6446 236E 00 OB OB OE DB OOH,OBH,OBH,OEH,OBH,7BH,BCH
6447 2372 OB 7B BC
644B 237S 72 00 3B B4 DB 72H,OOH,3BH,B4H,BOH,OFCH,0C2H
6449 2379 BO FC C2
64SO 237C 02 3B 00 00 DB 02H,3BH,OOH,OOH,42H,42H,42H
64Sl 23BO 42 42 42
64S2 23B3 62 04 lB 00 DB 62H,04H,1BH,OOH,7CH,0BH,30H
64S3 2387 7C OB 30
64S4 23BA DC 62 92 7C DB 0DCH,62H,92H,7CH,OOH,20H,2CH
64SS 23BE 00 20 2C
64S6 2391 F4 24 64 E4 DB OF4H,24H,64H,OE4H,26H,00H,7CH
64S7 239S 26 00 7C
64SB 2398 18 20 SC B2 DB 1BH,20H,SCH,B2H,02H,7CH,00H
64S9 239C 02 7C 00
6460 239F 40 60 DC 62 DB 40H,60H,ODCH,62H,42H,OC2H,SCH
6461 23A3 42 C2 SC
6462 23A6 00 10 30 20 DB 00H,10H,30H,20H,70H,4BH,OCEH
6463 23AA 70 4B CE
6464 23AD B4 00 00 00 DB B4H,OOH,00H,00H,OOH,00H,OOH
646S 23Bl 00 00 00
6466 23B4 00 00 00 00 DB OOH,OOH,OOH,OOH,OOH,OOH,00H
6467 23BB 00 00 00
646B 23BB 00 00 00 00 DB OOH,OOH,OOH,OOH
6469 SUBTTL - MSXINL, Screen editor - Line input and function character
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 64 235
- MSXINL, Screen editor - Line input and function dlaracter

6470
6471 23BF PI NL IN:
6472
6473 Main entry point
6474
6475 23BF CD FDDB CALL H.PINL
6476 23C2 3A F6AA LD A, (AUTFLG) ;During AUTO mode?
6477 23C5 A7 AND A
6478 23C6 20 OD JR NZ,INLIN ;Yes, then fake INLI.N to prE!ITent 0 from
6479 ;deleting line number
6480 23C8 2E 00 LD L,O
6481 23CA 18 14 JR INLINl
6482 23CC QINLIN:
6483
6484 Output question mark then get input
6485
6486 23CC CD FDEO CALL H.QINL
6487 23CF 3E 3F LD A I '?'

6488 23Dl DF RST 18H


6489 23D2 3E 20 LD A, I I

6490 23D4 DF RST 18H


6491 23D5 INLIN:
6492 23D5 CD FDE5 CALL H.INLI
6493 23D8 2A F3DC LD HL I (CSRY)
6494 23DB 2D DEC L
6495 23DC C4 0C29 CALL NZ,TERMIN ; Terminate previous 1 ine
6496 23DF 2C INC L
6497 23EO INLINl:
6498 23EO 22 FBCA LD ( FSTPOS), HL ;Mark first position
6499 23E3 AF XOR A
6500 23E4 32 FC9B LD (INTFLG) ,A
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 64-1 236
- MSXINL, Screen editor - Line input and function character

6501 23E7 INLIN2:


6502 23E7 CD lOCB CALL CH GET
6503 23EA 21 2437 LD HL, SCITBL-2
6504 23ED OE OB LD C,OBH ;SCI Max
6505 23EF CD 0919 CALL INDJMP ; Dofunctions
6506 23F2 F5 PUSH AF
6507 23F3 C4 23FF CALL NZ ,INLOUT ;Output a character
6508 23F6 Fl POP AF
6509 23F7 30 EE JR NC,INLIN2 ;Not a terminator
6510
6511 ; return to BASIC (break or CR)
6512
6513 23F9 21 F55D LD HL, BUFMIN
6514 23FC C8 RET z ;Cnt-C, return with carry set
6515 23FD 3F CCF ;No, return carry clear
6516 23FE RETURN:
6517 23FE C9 RET
MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 65 237
- MSXINL, Screen editor - Line input and function character

6518
6519 23FF INLOUT:
6520
6521 23FF F5 PUSH AF ; Save character to output
6522 2400 FE 09 CP 9 ;TAB?
6523 2402 20 OF JR NZ,OUTNTB ;Nope
6524 2404 Fl POP AF ; Discard s ta ck
6525 2405 OUTTAB:
6526 2405 3E 20 LD A, I I ;Map to space
6527 2407 CD 23FF CALL I NL OUT
6528 240A 3A F3DD LD A, (CSRX)
6529 240D 3D DEC A ;Make it zero based.
6530 240E E6 07 AND 7 ; Reached TAB stop?
6531 2410 20 F3 JR NZ,OUTTAB ; Not yet, continue •..
6532 2412 C9 RET
6533 2413 OUTNTB:
6534
6535 2413 Fl POP AF ;Restore character
6536 2414 21 FCA8 LD HL, INSFLG ;points insert mode flag
6537 2417 FE 01 CP 1 ;Graphic header byte?
6538 2419 28 OB JR Z,INLOTO ;Yes, send as is
6539 241B FE 20 CP I I
; control char?
6540 241D 38 09 JR C,INLOTl ; bran ch i f so . - Reset insert mode
6541 241F F5 PUSH AF ;save char to output
6542 2420 7E LD A, (HL) ; get insert mode flag
6543 2421 A7 AND A ;test
6544 2422 C4 24F2 CALL NZ,INSERT ;if insert mode, make room to insert
6545 2425 Fl POP AF ;restore char to output
6546 2426 INLOTO:
6547 2426 DF RST 18H ; output char
6548 2427 C9 RET
MSX ROM BASIC BIOS ) Macro-BO 3.44 01-Jan-85 PAGE 65-1 238
- MSXINL, Screen editor - Line input and function character

6549 2428 INLOTl:


6550
6551 2428 36 00 LD (HL) ,0 ;reset insert mode
6552 242A DF RST 18H ;send this control char
6553 242B 3E DB 3EH
6554 242C SETI NS:
6555 242C 3E DB 3EH ;Set insert mode and exit
6556 242D SETOVW:
6557 242D AF XOR A ; Set av erwr i te mode
6558 242E F5 PUSH AF
6559 242F CD 0A2E CALL CKERCS
6560 2432 Fl POP AF
6561 2433 32 FCAA LD (CSTYLE) ,A
6562 2436 C3 09El JP CKDPCS
MSX ROM BASIC BIOS ) Ma cro-80 3.44 Ol-Jan-85 PAGE 66 239
- MSXINL, Screen editor - Line input and function character

6563
6564 2439 SCITBL:
6565
6566 Table of function characters
6567
6568 2439 08 DB 08H ;Delete previous char
6569 243A 2561 DW DELETE
6570 243C 12 DB 12H ;Toggle insert flag
6571 243D 24E5 DW TGLINS
6572 243F lB DB lBH ;Escape
6573 2440 23FE DW RETURN
6574 2442 02 DB 02H ;Back word
6575 2443 260E DW LBCKWD
6576 2445 06 DB 06H ;Next word
6577 2446 25F8 DW LNXTWD
6578 2448 OE DB OEH
6579 2449 25D7 DW LAPPND
6580 244B 05 DB 05H ;Erase to end of line
6581 244C 25B9 DW TRUNC
6582 244E 03 DB 03H ;Abort
6583 244F 24C5 DW LBREAK
6584 2451 OD DB ODH ;Carriage return
6585 2452 245A DW LCRRET
6586 2454 15 DB 15H ;Delete whole line
6587 2455 25AE DW LERASE
6588 2457 7F DB 7FH ;Delete character at cursor
6589 2458 2550 DW LDELNX
6590 SUBTTL - MSXINL, Screen editor - Process special characters
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 67 240
- MSXINL, Screen editor - Process special characters

6591
6592 245A LCRRET:
6593 .................................
I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I

6594
6595 ; Carriage return ;
6596 ; ;
6597 .................................
I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I

6598 245A CD 266C CALL GTFRST ;L=l ine number of first visual
6599 245D 3A F6AA LD A, (AUTFLG) ;During AUTO mode?
6600 2460 A7 AND A
6601 2461 28 02 JR Z,NOTAUT ;No
6602 2463 26 01 LD H,l ;Always get from top of line during AUTO mode
6603 2465 NOTAUT:
6604 2465 E5 PUSH HL
6605
6606 Put logical starting at L into BUF
6607
6608 2466 CD OA2E CALL CKERCS
6609 2469 El POP HL
6610 246A 11 F55E LD DE,BUF ;Line buffer pointer
6611 246D 06 FE LD B,OFEH ;Max count
6612 246F 2D DEC L
6613 2470 LCRl:
6614 2470 2C INC L
6615 2471 LCR2:
6616 2471 D5 PUSH DE ;Save buffer pointer
6617 24 72 C5 PUSH BC ; Save buffer count
6618 24 73 CD OBD8 CALL GETVRM ;Get current character in Ace
6619 2476 Cl POP BC ;Restore buffer count
6620 2477 Dl POP DE ;Restore buffer pointer
6621 2478 A7 AND A ;Null?
MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 67-1 241
- MSXINL, Screen editor - Process special characters

6622 2479 28 14 JR Z ,LCRNUL ;Yes, ignore th is


6623 247B FE 20 CP ;Special graphic character?
6624 247D 30 OB JR NC,LCRNRM ;No, proceed normally
6625 247F 05 DEC B ;Decrement BUF size counter before storing
6626 2480 28 lD JR Z ,LBLKSP ;At end of BUF, so ignore this
6627 2482 4F LO C,A
6628 2483 3E 01 LO A,l ; Store header byte for graphic symbol
6629 2485 12 LO (DE) ,A
6630 2486 13 INC DE
6631 2487 79 LO A,C
6632 2488 C6 40 ADD A,'@ I

6633 248A LCRNRM:


6634 248A 12 LD (DE) ,A ;Store byte in buffer
6635 248B 13 INC DE ; Bump buffer pointer
6636 248C 05 DEC B ;Decrement BUF size counter
6637 248D 28 10 JR Z,LBLKSP ;At end of BUF
6638 248F LCRNUL:
6639 248F 24 INC H ;Next column
6640 2490 3A F3BO LD A, (LINLEN) ;Max column reached?
6641 2493 BC CP H
6642 2494 30 DB JR NC ,LCR2 ;Not yet
6643 2496 05 PUSH DE ; Save buffer pointer
6644 2497 CD OClD CALL GETTRM ;Is this line terminated?
6645 249A Dl POP DE ;Restore buffer pointer
6646 249B 26 01 LD H,l ;Assume not, start from top of next line
6647 249D 28 Dl JR Z ,LCRl ;No
6648 249F LBLKSP:
664 9
6650 Suppress trailing blanks, [ DE]=last+l
6651
6652 249F lB DEC DE ;Back up buffer pointer
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 67-2 242
- MSXINL, Screen editor - Process special characters

6653 24AO lA LD A, (DE) ;Get stored character


I I
6654 24Al FE 20 CP ;Is it space?
6655 24A3 28 FA JR Z ,LBLKSP ;Yes, ignore this
6656 24A5 E5 PUSH HL
6657 24A6 D5 PUSH DE
6658 24A7 CD 09El CALL CKDPCS
6659 24AA Dl POP DE
6660 24AB El POP HL
6661
6662 Terminate
6663
6664 24AC 13 INC DE ;Point past last valid character
6665 24AD AF XOR A ; Load terminator
6666 24AE 12 LD (DE) ,A ;Put it in BUF
6667 24AF FAKECR:
6668 24AF 3E OD LD A,ODH ;Load character to echo to console
6669 24Bl A7 AND A ;Reset Z-flag, (say not break)
6670 24B2 LNXTLN:
6671 24B2 F5 PUSH AF ; Save th is flag
6672 24B3 CD 0C29 CALL TERMIN
6673 24B6 CD 088E CALL POSIT ;Save current cursor position
6674 24B9 3E OA LD A,OAH
6675 24BB DF RST 18H ;Move cursor to start of next line
6676 24BC AF XOR A ;Clear possible INSFLG
6677 24BD 32 FCA8 LD (INSFLG),A
6678 24CO Fl POP AF ; Res tore flags
6679 24Cl 37 SCF ;Set carry indicating end of input
6680 24C2 El POP HL ;Discard return address (XRA A;RET)
6681 24C3 C9 RET ;If break, Z flag is set
6682 24C4 LBREKO:
6683
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 67-3 243
- MSXINL, Screen editor - Process special characters

6684 ; Control-C input


6685
6686 24C4 2C INC L ;Bump line counter
6687 24C5 LBREAK:
6688 24C5 CD OClD CALL GETTRM ;Line terminated?
6689 24C8 28 FA JR Z,LBREKO ; No, check next 1 ine
6690 24CA CD 242D CALL SETOVW ; Set to overwrite mode
6691 24CD AF XOR A ;Load 0 in Ace, and set Z flag
6692 24CE 32 F55E LD (BUF) ,A ;Say no character in BUF
6693 24Dl 26 01 LD H ,1 ; Set to first column
6694 24D3 ES PUSH HL ; Save cursor position
6695 24D4 CD 04BD CALL GI CINI ;Initialize sound chip and queue
6696 24D7 CD 0454 CALL CKSTTP ;Check if STOP trap is active or not
6697 24DA El POP HL
6698 24DB 38 D2 JR C,FAKECR ;Yes, fake CR
6699 24DD 3A FBBl LD A, (BASROM) ; Executing BASIC program in ROM?
6700 24EO A7 AND A
6701 24El 20 cc JR NZ,FAKECR ;Yes, fake CR
6702 24E3 18 CD JR LNXTLN
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-8S PAGE 68 244
- MSXINL, Screen editor - Process special characters

6703
6704 24ES TGLINS:
670S
6706 Toggle insert mode flag
6707
6708 24ES 21 FCA8 LD HL ,INSFLG ;Get current insert flag
6709 24E8 7E LD A, (HL)
6710 24E9 EE FF XOR OFFH ;Toggle insert status and affect z flag
6711 24EB 77 LD (HL) ,A
6712 24EC CA 242D JP Z,SETOVW ; Set to overwrite mode
6713 24EF C3 242C JP SETI NS ;Set to insert mode
6714 24F2 INSERT:
671S
6716 Insert a blank
6717
6718 24F2 CD 0A2E CALL CKERCS ;Erase cursor before operation
6719 24FS 2A F3DC LD HL, (CSRY)
6720 24F8 OE 20 LD C, I I ;Load raw code for space
6721 24FA INSl:
6722 24FA ES PUSH HL ;Save current cursor position
6723 24FB INS2:
6724 24FB cs PUSH BC ;Save previous character
672S 24FC CD OBD8 CALL GETVRM ;Get current character in C
6726 24FF Dl POP DE ;Restore previous dlaracter in [ E]
6727 2SOO cs PUSH BC ;Save current character
6728 2S01 4B LD C,E ;C=previous dlaracter
6729 2S02 CD 0BE6 CALL PUTVRM ;Put it on screen
6730 2SOS Cl POP BC ;Restore current character in C
6731 2S06 3A F3BO LD A, (LINLEN) ;Check if end of 1 ine
6732 2S09 24 INC H ;Bump column counter
6733 250A BC CP H ;End of 1 ine?
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 68-1 245
- MSXINL, Screen editor - Process special characters

6734 250B 7A LD A,D ;Get current attribute in Ace


6735 2SOC 30 ED JR NC, INS2 ;If not, continue till end of line
6736
6737 Now we just finished a line, code of character wrapped to next
6738 line is held in [Cl.
6739
6740 2SOE El POP HL ;Restore current cursor pas ition
6741 2SOF CD OClD CALL GETTRM ; Is th is 1 ine terminated?
6742 2Sl2 28 37 JR Z, INS6 ;Line not terminated on th is visual
6743
6744 The current line is terminated. A check must be made to
6745 determine if a wrapped character is a space, or we 're inserting
6746 at the end-of-line. If so, we have to open a next line to
6747 insert.
6748
6749 2Sl4 79 LD A,C ;Move last character to A for comparison
I I
6750 2SlS FE 20 CP
6751 2Sl7 F5 PUSH AF ; Save the condition
6752 2Sl8 20 OA JR NZ, INS3 ;No, open next line
6753 2SlA 3A F3BO LD A, (LINLEN) ;Are we trying to insert at the EOL?
6754 2SlD BC CP H
6755 2SlE 28 04 JR Z,INS3 ;Yes, open next line
67S6 2S20 Fl POP AF ;Discard stack
67S7 2S21 C3 09El JP CKDPCS ;Display cursor again
67S8 2S24 INS3:
67S9
6760 2S24 CD OC2A CALL UN TERM ; Un terminate th is 1 ine
6761 2S27 2C INC L ;Go to next rc:YN
6762 2S28 cs PUSH BC ;Save character code
6763 2S29 ES PUSH HL ;Save position of character in operation
6764 2S2A CD OC32 CALL GETLEN ; Bottom of screen?
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 68-2 246
- MSXINL, Screen editor - Process special characters

6765 252D BD CP L
6766 252E 38 05 JR C, INS4 ;Yes
6767
6768 ; Scroll down starting at 1 ine L
6769
6770 2530 CD 0AB7 CALL INSLNO ; Insert a blank 1 ine there
6771 2533 18 OF JR INS5
6772 2535 INS4:
6773
6774 ; Scroll up
6775
6776 2535 21 F3DC LD HL ,CSRY
6777 2538 35 DEC (HL)
6778 2539 20 01 JR NZ,INS45
6779 253B 34 INC (HL)
6780 253C INS45:
6781 253C 2E 01 LD L,l
6782 253E CD OA88 CALL DELL NO
6783 2541 El POP HL
6784 2542 2D DEC L
6785 2543 E5 PUSH HL
6786 2544 INS5:
6787 2544 El POP HL
6788 2545 Cl POP BC
6789 2546 Fl POP AF ; Res tore flags
6790 254 7 CA 09El JP Z ,CKDPCS ; If we were trying to insert at the
6791 ;end-of-line, nothing else to do
6792 254A 2D DEC L ;Cancel next 'INR L'
6793 254B INS6:
6794
6795 ; Not end of logical line, pass character to next line
MSX ROM BASIC BIOS ) Ma cro-80 3.44 Ol-Jan-85 PAGE 68-3 247
- MSXINL, Screen editor - Process special characters

6796
6797 254B 2C INC L ; Bump row counter
6798 254C 26 01 LD H,l ;Start from first column
6799 254E 18 AA JR INSl ;Pass character to next line
MSX ROM BASIC BIOS ) Ma cro-80 3.44 01-Jan-8S PAGE 69 248
- MSXINL, Screen editor - Process special characters

6800
6801 2SSO LDELNX:
6802
6803 Delete current character
6804
680S 2SSO 3A F3BO LD A, {LINLEN)
6806 2SS3 BC CP H ; At r i gh trnost position?
6807 2SS4 20 OS JR NZ ,LDELXl ;Nope
6808 2SS6 CD OClD CALL GETTRM ; Is th is a terrnina ted 1 ine?
6809 2SS9 20 3A JR NZ ,DELETS ;Yes, place a space there.
6810 2SSB LDELXl:
6811 2SSB 3E lC LD A,lCH ;Move cursor right
6812 2SSD DF RST 18H
6813 2SSE 2A F3DC LD HL, (CSRY) ;Fall into 'delete prev. character'
6814 2S61 DELETE:
681S
6816 Delete previous character
6817
6818 2S61 ES PUSH HL
6819 2S62 CD OA2E CALL CKERCS
6820 2S6S El POP HL
6821 2S66 2S DEC H ;Are we at top of line?
6822 2S67 C2 2S7A JP NZ,DELET2 ;No
6823 2S6A 24 INC H ;Yes
6824 2S6B ES PUSH HL ;Save current cursor position
682S 2S6C 2D DEC L ;Look a 1 ine ab01Te
6826 2S6D 28 OA JR Z,DELETl ;At top of screen
6827 2S6F 3A F3BO LD A, {LINLEN)
6828 2S72 67 LD H,A
6829 2S73 CD OClD CALL GETTRM ;Is previous line terminated?
6830 2S76 20 01 JR NZ,DELETl ;Yes
MSX ROM BASIC BIOS } Macro-80 3.44 Ol-Jan-85 PAGE 69-1 249
- MSXINL, Screen editor - Process special characters

6831 2578 E3 EX (SP} ,HL ;No, substitue by current HL


6832 2579 DELETl:
6833 2579 El POP HL ;Get saved cursor position
6834 257A DELET2:
6835 257A 22 F3DC LD (CSRY) ,HL ; Set new cursor position
6836 257D DELET3:
6837 257D 3A F3BO LD A, (LINLEN)
6838 2580 BC CP H
6839 2581 28 12 JR Z ,DELETS ;Just over strike with blank
6840 2583 24 INC H
6841 2584 DELET4:
6842 2584 CD OBD8 CALL GETVRM ;Get current character and attribute
6843 2587 25 DEC H
6844 2588 CD OBE6 CALL PUTVRM ;Output it to left of current position
6845 258B 24 INC H
6846 258C 24 INC H
6847 258D 3A F3BO LC A, (LINLEN)
6848 2590 3C INC A
6849 2591 BC CP H
6850 2592 20 FO JR NZ,DELET4 ;Do next till end of visual
6851 2594 25 DEC H
6852 2595 DELETS:
6853 2595 OE 20 LD c 1
I I
;Load raw code for space
6854 2597 CD 0BE6 CALL PUTVRM
6855 259A CD OClD CALL GETTRM
6856 259D C2 09El JP NZ,CKDPCS ;End of line, all done
6857 25AO ES PUSH HL
6858 25Al 2C INC L
6859 25A2 26 01 LD H,l
6860 25A4 CD OBD8 CALL GETVRM ;Get first character next visual
6861 25A7 E3 EX (SP) ,HL
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 69-2 250
- MSXINL, Screen editor - Process special characters

6862 25A8 CD 0BE6 CALL PUTVRM ;Put at last position last line
6863 25AB El POP HL
6864 25AC 18 CF JR DELET3
MSX ROM BASIC BIOS ) Macro-80 3.44 Ol-Jan-85 PAGE 70 251
- MSXINL, Screen editor - Process special characters

6865
6866 25AE LERASE:
6867
6868 ; Erase logical line
6869
6870 25AE CD 0A2E CALL CKERCS
6871 25Bl CD 266C CALL GTFRST ;Set L=first visual this logical line
6872 25B4 22 F3DC LD (CSRY) ,HL
6873 25B7 18 05 JR TRUNCl
6874 25B9 TRUNC:
6875
6876 ; Truncate logical 1 ine
6877
6878 25B9 E5 PUSH HL
6879 25BA CD 0A2E CALL CK ER CS
6880 25BD El POP HL
6881 25BE TRUNCl:
6882 25BE CD OClD CALL GETTRM ;Is this line terminated?
6883 25Cl F5 PUSH AF ; Save the condition
6884 25C2 CD OAEE CALL EOL ;Erase to end-of-line
6885 25C5 Fl POP AF ; Res tore con di ti on
6886 25C6 20 05 JR NZ,DPCSOW ;Yes
6887 25C8 26 01 LD H ,1 ;Go to next 1 ine
6888 25CA 2C INC L ; Bump row counter
6889 25CB 18 Fl JR TRUNCl ;And continue
6890 25CD DPCSOW:
6891
6892 25CD CD 09El CALL CKDPCS
6893 25DO AF XOR A
6894 25Dl 32 FCA8 LD (INSFLG) ,A
6895 25D4 C3 242D JP SETOVW
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 70-1 252
- MSXINL, Screen editor - Process special characters

6896 25D7 LAPPND:


6897
6898 Append to current line
6899
6900 25D7 CD 0A2E CALL CKERCS ;Erase cursor
6901 25DA 2A F3DC LD HL, (CSRY) ;Get current cursor position
6902 25DD 2D DEC L
6903 25DE LAPl:
6904 25DE 2C INC L
6905 25DF CD OClD CALL GETTRM ; Line terminated?
6906 25E2 28 FA JR Z ,LAPl ;No, look at next line
6907 25E4 3A F3BO LD A, (LINLEN)
6908 25E7 67 LD H,A
6909 25E8 24 INC H
6910 25E9 LAP2:
6911 25E9 25 DEC H ;Reached start of line?
6912 25EA 28 07 JR Z ,LAP3 ;Yes
6913 25EC CD OBD8 CALL GETVRM ;Get a character at the cursor
6914 25EF FE 20 CP I I
; Space?
6915 25Fl 28 F6 JR Z ,LAP2 ;Yes, skip th is
6916 25F3 LAP3:
6917 25F3 CD OA5B CALL ADVCUR ;Advance cursor to point to end of line
6918 25F6 18 D5 JR DPCSOW ;Re-display cursor
6919 25F8 LNXTWD:
6920
6921 Move to next word
6922
6923 25F8 CD 0A2E CALL CKERCS
6924 25FB CD 2634 CALL PRVCHK
6925 25FE LNWl:
6926 25FE CD 2624 CALL NXTCHK ; Still in word?
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 70-2 253
- MSXINL, Screen editor - Process special characters

6927 2601 28 CA JR Z ,DPCSOW ;Reached screen bottom, abort


6928 2603 38 F9 JR C,LNWl ;Yes
6929 2605 LNW2:
6930 2605 CD 2624 CALL NXTCHK ;Readied word?
6931 2608 28 C3 JR Z,DPCSOW ;Reached screen bottom, abort
6932 260A 30 F9 JR NC,LNW2 ;Not yet
6933 260C 18 BF JR DPCSOW
6934 260E LBCKWD:
6935
6936 ; Move to pre11 ious word
6937
6938 260E CD 0A2E CALL CK ER CS
6939 2611 LBWl:
6940 2611 CD 2634 CALL PRVCHK ; Still in separator?
6941 2614 28 B7 JR Z,DPCSOW ;Reached screen top, abort
6942 2616 30 F9 JR NC,LBWl ;Yes
6943 2618 LBW2:
6944 2618 CD 2634 CALL PRVCHK ;Reached separator?
6945 261B 28 BO JR Z,DPCSOW ;Reached screen top, abort
6946 261D 38 F9 JR C,LBW2 ;Not yet
694 7 261F CD 0A5B CALL ADVCUR
6948 2622 18 A9 JR DPCSOW
6949 2624 NXTCHK:
6950
6951 ; Molle right and check
6952 ;
6953 2624 2A F3DC LD HL, (CSRY) ;Get current cursor position
6954 2627 CD 0A5B CALL ADVCUR ; Advance curs or
6955 262A CD OC32 CALL GETLEN ;Get an actual height of screen
6956 262D 5F LD E,A ;[D] ,[E] hold the dead end position
6957 262E 3A F3BO LD A, (LINLEN)
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 70-3 254
- MSXINL, Screen editor - Process special characters

6958 2631 57 LD D,A


6959 2632 18 09 JR PRVCKl
6960 2634 PRVCHK:
6961
6962 Move left and check
6963
6964 2634 2A F3DC LD HL, (CSRY) ;Get current cursor position
6965 2637 CD OA4C CALL BS ; Regress cursor
6966 263A 11 0101 LD DE,0101H ;[D],[E] hold the dead end position
6967 263D PRVCKl:
6968
6969 Check current character
6970 Carry set if the character is regarded as separator
6971
6972 263D 2A F3DC LD HL, (CSRY) ;Get updated cursor position
6973 2640 E7 RST 20H ;Reached dead end?
6974 2641 cs RET z ;Yes, return with Z flag
6975 2642 11 2668 LD DE,RESZRO ;Jump to RESZRO when done
6976 2645 D5 PUSH DE
6977 2646 CD OBD8 CALL GETVRM ;Get ASCII code of character at [H] ,[L]
6978 2649 FE 30 CP 'O I ;Set carry if 11 0 11 • • 11 9 11
6979 264B 3F CCF
6980 264C DO RET NC
6981 264D FE 3A CP I: I

6982 264F DB RET c


6983 2650 FE 41 CP 'A' ;Set carry if 11
A11 ••
11
Z 11
6984 2652 3F CCF
6985 2653 DO RET NC
6986 2654 FE 5B CP 'Z'+l
6987 2656 DB RET c
6988 2657 FE 61 CP 'a I ; Set carry if 11
a 11
••
11
z 11
MSX ROM BASIC BIOS ) .Macro-80 3.44 01-Jan-85 PAGE 70-4 255
- MSXINL, Screen editor - Process special characters

6989 2659 3F CCF


6990 265A DO RET NC
6991 265B FE 7B CP 'z'+l
6992 265D D8 RET c
6993 265E FE 86 CP 86H ;Check for Hiragana (86H)
6994 2660 3F CCF
6995 2661 DO RET NC
6996 2662 FE AO CP OAOH
6997 2664 D8 RET c
6998 2665 FE A6 CP OA6H
6999 2667 3F CCF
7000 2668 RESZRO:
7001 2668 3E 00 LD A,O ;Reset z flag without affecting C flag
7002 266A 3C INC A
7003 266B C9 RET
7004
7005 Set H,L to first visual line in logical line
7006
7007 266C GTFRST:
7008 266C 2D DEC L ;Look a line just abO\Te
7009 266D 28 05 JR Z,GTFSTl ;If we're at top of screen, all done
7010 266F CD OClD CALL GETTRM ;Get terminator
7011 2672 28 F8 JR Z,GTFRST ;More to get abO\Te in this logical
7012 2674 GTFSTl:
7013 2674 2C INC L ;L=l ine number of first visual
7014 2675 3A FBCA LD A, ( FSTPOS) ;Get first line
7015 2678 BD CP L ;Same?
7016 2679 26 01 LD H,l ;Assume not
7017 267B co RET NZ ;Good assumption
7018 267C 2A FBCA LD HL , ( FSTPOS ) ;Get first line and column
7019 267F C9 RET
MSX ROM BASIC BIOS ) Macro-80 3.44 01-Jan-85 PAGE 70-5 256
- MSXINL, Screen editor - Process special characters

7020 END
MSX BIOS CROSS REFERENCE

2 57
(MSX BASIC ROM BIOS ) Macro-80 PAGE XREF - 1 258
- BIOS CROSS REFERENCE LISTING -

ACTION 1# 2664 3518#


ADVCUR 1# 1930 2166# 6917 694 7 6954
ALPJMP 1# 2892# 3041
ASCPCTl 1# 5236
ASCPCT2 1# 5238
ATRBAS 1# 1163 1255 1296 1387 1437
ATRBYT 1# 4407 4725 4756 5113 5168 5215 5256 5404 5431
AUTFLG 1# 6476 6599
BAKCLR 1# 1574 1584 1660 1684
BAS ROM 1# 923 2571 6699
BDRCLR 1# 1690
BEEP 1# 170 1914 3485#
BEGIN 30#
BITO 1# 5517 5523#
BI Tl 1# 5516 5519 5520 5533#
BITlOT 1# 5494 5535 5542 5544#
BI TOUT 1# 5511 5530 5552#
BRDATR 1# 5259 5282 5377 5427
BREAKX 1# 167 1008# 1733 5500 5521 5666 5672 5712 5755 5778
BS 1# 1916 1932 2144# 2297 6965
BUF 1# 6610 6692
BU FEND 1# 2087 2391 2478 2497
BUFMIN 1# 6513
CALATR 1# 136 1430#
CAL BAS 1# 252 363# 2768 5803 5871
CAL ESL 1# 412 419#
CALLF 1# 90 366#
CAL PAT 1# 135 1413#
CALSLT 1# 57 365 404# 437
CAP ST 1# 3055 3193 3275
CGCAPl 1# 3201 3203#
CGPBAS 1# 1140 1159 14 71 2083
(MSX BASIC ROM BIOS ) Macro-80 PAGE XREF - 2 259
- BIOS CROSS REFERENCE LISTING -

CGPNT 1# 14 73 1474 1521 1525


CGSNDl 1# 324 7 3249#
CGTABL 1# 40 5883#
CH CL TX 1# 1650 1677#
CHGBDl 1# 1687 1691#
CH GB DR 1# 1570 1583 1652 1688#
CHGCAP 1# 237 3198#
CHGCLR 1# 119 1141 1164 1644#
CH GET u 157 3403# 6502
CHGE Tl 1# 3414# 3416
CHGET2 u 3412 3418#
CHGET3 u 3422 3424#
CH GM OD u 118 1704 1714#
CHGSND u 238 3244#
CHKBUF u 2799# 2823
CHKCHG u 5300 5313 5385 5401#
CHKEOC 1# 3980 4003#
CHKMOD 1# 4442 4460 4520 4533# 4589 4683 4736 4787 4803 4818 4833
4859 4883 4898 4925 5070 5247 5268 5370
CHKRAM u 31 681#
CHKSCR 1# 1544 1700 1820 2071 2126 2451# 2813
CH PL Pl u 1732# 1736
CHPLP2 u 17 38# 1753
CH PUT u 158 1813# 5880
CH PU Tl u 182 5 1837# 2195
CHPUT3 1# 1842 1850#
CHRGTR 1# 51
CH SNS 1# 156 2807# 3411 3415
CHSNSl 1# 2814 2822#
CKCNTC 1# 169 3431#
CKDPCO 1# 943 2051# 3413
CKDPCS 1# 1826 2059# 6562 6658 6757 6790 6856 6892
(MSX BASIC ROM BIOS ) Macro-80 PAGE XREF - 3 260
- BIOS CROSS REFERENCE LISTING -

CKERCO 1# 953 2106# 3417


CKERCS 1# 1822 2114# 6559 6608 6718 6819 6870 6879 6900 6923 6938
CKRM05 1# 717# 778
CKRMlO 1# 732# 774
CKRM15 1# 725 729 737#
CKRM20 1# 739# 748 750
CKRM25 1# 746 751#
CKRM30 1# 758 766#
CKRM35 1# 769 775#
CKRM50 1# 801# 854
CKRM55 1# 810# 850
CKRM60 1# 805 812#
CKRM65 1# 814# 823 827
CKRM70 1# 821 828#
CKRM75 1# 835 843#
CKRM80 1# 846 851#
CKSTTP 1# 963 983# 6696
CLICKW 1# 3241# 3243
CLIKFL 1# 2718 3234 3238
CLIKSW 1# 3231
CLOC 1# 4614 4652 4663 4672 4843 4858 4882 4897 4924 4936 4989
5048
CL PRIM 1# 418
CLRSPR 1# 126 1372#
CLRTXl 1# 1555 1557#
CLRTX2 1# 1563# 1566
CLRTXT 1# 1142 1165 1547# 1924 1941 1943
CLS 1# 171 1705#
CLSHRS 1# 1265 1545 1568#
CLSMLT 1# 1314 1546 1581#
CLSPR2 1# 1389# 1411
CLSPR3 1# 1403 1407#
(MSX BASIC ROM BIOS ) Macro-80 PAGE XREF - 4 261
- BIOS CROSS REFERENCE LISTING -

CLSSUB 1# 1542# 1711


CMASK 1# 4598 4634 4662 4671 4846 4992
CNSDFG 1# 2363 2450 2594 2818
CNTFUL 1# 5585 5616 5774# 5782
CNTHLO 1# 5708 5757# 5784
CNTHLl 1# 5759# 5765 5785
CNTHLF 1# 5678 5681 5709 5749#
CNTPUT 1# 1849 1869#
CNTTBL 1# 1912#
CNVCHl 1# 1797# 1807
CNVCH2 1# 1795 1800#
CNVCH3 1# 1791 1803#
CNVCHR 1# 161 1781# 1839 2421 4397 5848
CODSAV 1# 2076 2129
CR 1# 1926 2206# 2221 2257
CRTCNT 1# 2355 2376 2439 2596
CSAVEA 1# 5303 5321 5353
CSAVEM 1# 5304 5322 5354
CSDLYl 1# 3504 3506# 3515
CS HOME 1# 1560 1922 1965 2201#
CSRSW 1# 2049 2055 2063 2110 2118
CSRX 1# 1827 2004 2196 6528
CSRY 1# 1851 1901 2073 2128 2183 2375 6493 6719 6776 6813 6835
6872 6901 6953 6964 6972
CSTYLE 1# 2041 2089 6561
C'IWOFl 1# 5455# 5459
CURLIN 1# 995 3116
DAT AR 1# 5665# 5670
DAT ARO 1# 5671# 5676
DATARl 1# 5679# 5685 5687
DATARL 1# 5694 # 5711
DAT AW 5502#
(MSX BASIC ROM BIOS ) Macro-80 PAGE XREF - 5 262
- BIOS CROSS REFERENCE LISTING -

DAT AWL 1# 5514 # 5518


DCOMPR 1# 59 4146#
DELETl 1# 6826 6830 6832#
DELET2 1# 6822 6834#
DELET3 1# 6836# 6864
DELET4 1# 6841# 6850
DELET5 1# 6809 6839 6852#
DELETE 1# 6569 6814#
DELL NO 1# 1868 2222# 6782
DELLNl 1# 2240# 2249
DIOERR 1# 5870
DISSCl 1# 1175 1182#
DISSCR 1# 108 1131 1150 1176# 1249 1290
DLN 1953 2215#
DOWN 1# 1864 1936 1959 2173 #
DOWNl 1# 2180 2185#
DOWNC 1# 216 4876#
DPCSOW 1# 6886 6890# 6918 6927 6931 6933 6941 6945 6948
DSFKCL 1# 23 95# 2398
DSPCSl 1# 2091 2093# 2098
DSPCSR 1# 2058 2066#
DSPFKl 1# 2386 2389#
DSPFK2 1# 2413# 2437
DSPFK4 1# 2405# 2408
DSPFK5 1# 2417# 2422 2430
DSPFK6 1# 2425 2428#
DSPFK8 1# 2423 2426#
DSPFKE 1# 2403 2411 2438#
DSPFNK 1# 175 2366# 2821
DWNClO 1# 4869 4873 4885#
EASY TB 1# 2937# 3163
ELN 1# 1949 2226 2250 2263 2289 2301# 2356
(MSX BASIC ROM BIOS ) Macro-80 PAGE XREF - 6 263
- BIOS CROSS REFERENCE LISTING -

EMSITB 1124#
ENASCR 1# 109 1145 1169# 1268 1317
ENASLT 1# 61 476# 498 976
ENESLT 1# 4 78 484#
EN STOP 1# 2761
ENTESC 1# 1928 1982#
::OCCHK 1# 4011# 4014
EOL 1# 1945 2308# 2334 6884
EOP 1# 194 7 2327# ?.342
ERA CSR 1# 2113 2121#
ERAFNK 1# 174 2346#
ERAS PR 1# 1167 1266 1315 1384#
EREOLl 1# 2319# 2325
ESCCNT 1# 1843 1984
ESCTBL 1# 1939# 1992
EXABOl 1# 964 971#
EXCABO 1# 936 960#
EX PT BL 1# 364 880 974
FAKECR 1# 6667# 6698 6701
FETCHC 1# 220 4418 4656# 4681 4737 4789 4805 4820 4835 4946 4957
4969 4979 5073 5302 5318 5352
FILOUl 1# 5802
FILVRM 1# 115 1383 1559 1575 1580 1664#
FKTABL 1# 4071
FLPMOT 1# 4043 4052#
FLVRMl 1# 1667# 1674
FNKDEF 4075#
FNKFLG 1# 3093
FNKINT 1# 3097 3114#
FNKSB 1# 173 1567 2359#
FNKSTR 1# 2384 2387 3104 4070
FNKSWI 1# 2390 2815
(MSX BASIC ROM BIOS ) Macro-80 PAGE XREF - 7 264
- BIOS CROSS REFERENCE LISTING -

FORCLR 1# 1385 1655 1679 4406


FORMAT 1# 246 4201#
FSTPOS 1# 2236 6498 7014 7018
GENCLK 1# 3218 3230#
GETlLl 1# 2464 2476#
GETlLN 1# 2243 2282 2465#
GET8B 1# 2086 2458#
GETBAK 1# 4293 4321#
GETLEN 1# 2007 2177 2223 2259 2336 2590# 6764 6955
GET PAT 1# 1506# 4405
GETPNT 1# 1005 1027 2803 3226 3425 3428
GETPTR 1# 4263 4291 4351 4364#
GETQ 1# 3678 4287#
GETTRM 1# 2231 2269 2562# 2586 6644 6688 6741 6808 6829 6855 6882
6905 7010
GETVCl 1# 1096 4168 4176#
GETVC2 1# 250 4169#
GETVCL 1# 4190# 4193
GETVCP 1# 249 354 7 4161#
GETVCX 1# 4188 4194#
GETVRM 1# 2075 2501# 6618 6725 6842 6860 6913 6977
GETYPR 1# 63
GICINl 1# 1083# 1109
GI CINI 1# 146 1056# 3505 6695
GORSET 1# 2000 2031#
GO SET 1# 1998 2020#
GPRT05 1# 4399 4404#
GPRTlO 1# 4416# 4440
GPRT20 1# 4422# 4431
GPRT30 1# 4428 4432#
GPRT40 1# 4437 4441#
GPRT50 1# 4444 4448#
(MSX BASIC ROM BIOS ) Macro-80 PAGE XREF - 8 265
- BIOS CROSS REFERENCE LISTING -

GPRT60 1# 4447 4452#


GPRT70 1# 4462 4465#
GPRT80 1# 4468 4470#
GRPACX 1# 4410 4443 4453 4459
GRPACY 1# 4408 4461 4471
GRPATR 1# 1254
GRPCGP 1# 1576 4612 4862 4901
GRPCOL 1# 1573
GRPCR 1# 4401 4446 4451 4456#
GRPDIF 1# 4688 5111 5115 5153 5202
GRPHED 1# 1787
GRPNAM 1# 1256 1283
GRPPAT 1# 1252
GRPPRT 1# 138 4389#
GRPTAB 1# 3365 3377#
GSPADl 1# 1422 1425#
GSPSIZ 1# 137 1420 1440#
GTASPC 1# 228 5232#
GTFRST 1# 6598 6871 7007# 7011
GTFSTl 1# 7009 7012#
GT PAD 1# 186 3867#
GTPADO 1# 3893 3899#
GTPATl 1# 1526# 1540
GTPDL 1# 187 3807#
GTPDPl 1# 3888 3891#
GTROW8 1# 2689 3698 3726# 3804
GTSTCK 1# 184 3683#
GTTRIG 1# 185 3783#
H.CHGE 1# 3410
H.CHPU 1# 1819
H.DSPC 1# 2070
H.DSPF 1# 2370
(MSX BASIC ROM BIOS ) Macro-80 PAGE XREF - 9 266
- BIOS CROSS REFERENCE LISTING -

H.ERAC 1# 2125
H.ERAF 1# 2350
H.FORM 1# 4203
H.INIP 1# 14 70
H.INLI 1# 6492
H. ISFL 1# 4139
H.KEYC 1# 2993
H.KEYI 1# 2621
H.KYEA 1# 3160
H.LPTO 1# 1730
H.LPTS 1# 1759
H.NMI 1# 4061
H.OUTD 1# 5798
H.PHYD 1# 4199
H.PINL 1# 6475
H.QINL 1# 6486
H.TIMI 1# 2625
H.TOTE 1# 1703
HEADER 1# 5485
HIGH 1# 5551
HRSSCL 1# 4521 4526#
HRZMOV 1# 4811 4841#
HRZMVl 1# 4 791 4807 4822 4837 4845#
ILN 1# 1951 2251#
INDJMP 1# 1889# 1897 1994 6505
INESC 1# 1846 1987#
INESCl 1# 1989 1995#
INESC2 1# 2005 2009#
ING! 1# 1051 3476# 3723 3915 3987 4012
INIFNK 1# 99 4065#
INIGRl 1# 1260# 1263 1264
INIGRP 1# 129 1245# 1722
(MSX BASIC ROM BIOS ) Macro-80 PAGE XREF - 10 267
- BIOS CROSS REFERENCE LISTING -

INIMLl 1# 1300# 1313


INIML2 1# 1302# 1310
INIML3 1# 1305# 1308
INIMLT 1# 130 1286# 1723
INIPAT 1# 1143 1166 1466#
INIPTl 1# 1477# 1490
INIT 1# 919
INIT32 1# 128 1146# 1720
I NIT IO 1# 98 1038#
INITQ 1# 1088 4328#
INITXT 1# 127 1127# 1719
INLIN 1# 164 6478 6491#
INLINl 1# 6481 6497#
INLIN2 1# 6501# 6509
INLOTO 1# 6538 6546#
INLOTl 1# 6540 6549#
INLOUT 1# 6507 6519# 652 7
INSl 1# 6721# 6799
INS2 1# 6723# 6735
INS3 1# 6752 6755 6758#
INS4 6766 6772#
INS45 1# 6778 6780#
INS5 1# 6771 6786#
INS6 1# 6742 6793#
INSERT 1# 6544 6714#
INSFLG 1# 6536 6677 6708 6894
IN SL NO 1# 2258# 6770
INSLNl 1# 2279# 2288
INTCNT 1# 2638 2647
INTFLG 1# 927 944 3217 3419 6500
INTRET 1# 2624 2672 2720 2723 2731#
INT VAL 1# 2645
(MSX BASIC ROM BIOS ) Macro-80 PAGE XREF - 11 268
- BIOS CROSS REFERENCE LISTING -

ISCNTC 1# 168 922# 3437


ISFLIO 1# 24 7 4135# 5799
JFLVRM 1# 1579# 1593
JIFFY 1# 2651 2653
JMPBC 1# 1887 1902 1905#
JMPWRT 1# 5191 5204 5218#
JPPPAL 1# 4398 4403 4412 4454# 44 72
JPUTCH 1# 3025 3032# 3060
KAIUEO 1# 3260 3265#
KANAMD 1# 1053 3256
KAN ANO 1# 3267 3290#
KANASF 1# 3269 3307#
KAN AST 1# 3002 3173
KANJNO 1# 3261 3324#
KANJSF 1# 3263 3341#
KEEPH 1# 5560# 5562
KEEPL 1# 5555# 5557
KEYANY 1# 2795 2828#
KEYBUF 1# 3401
KEYCHK 1# 2719 2746#
KEYCKl 1# 2753# 2760
KEYCK2 1# 2773# 2779
KEYCK3 1# 2778 2781#
KEYCK4 1# 2730 2780 2785#
KEYCK5 1# 2789# 2798
KEY COD 1# 2848 2983#
KEY INT 1# 97 2603#
KEYNOM 1# 2896 3053#
KEYS FT 1# 2895 3050#
KEYTRG 1# 3786 3802#
KILBUF 1# 251 962 1002#
KSTKTB 1# 3703 3765#
(MSX BASIC ROM BIOS ) Macro-80 PAGE XREF - 12 269
- BIOS CROSS REFERENCE LISTING -

KYlCNT 2900 2914#


KYlNOM 2902 2903#
KYlSFC 2899 2924#
KYlSFT 2901 2908#
KYALP 1# 2865 3034#
KYANYl 1# 2844# 2852
KYClTB 1# 2898# 3063
KY CL AO 1# 2999 3005#
KY CLAS 1# 2995 3007# 3017
KYCLS 2881 3150#
KYCODl 1# 2863 3061#
KYEASY 1# 2867 2875 2879 2883 3156#
KYFNCl 1# 3086 3090#
KYFNC2 1# 3098# 3120
KYFNC3 1# 3107# 3113
KYFUNC 1# 2873 3080#
KYGRAP 1# 3001 3360#
KYJTAB 1# 2859# 2992
KYKANl 1# 3262 3264 3268 3270#
KYKANA 1# 3004 3252#
KYKLOK 1# 2871 3169#
KYLOCK 1# 2869 3189#
KYNUM 1# 2861 3018#
KY ST CK 1# 3686 3696#
KYSTOP 1# 2877 3206#
KYSTPl 1# 3214 3216#
LAPl 1# 6903# 6906
LAP2 1# 6910# 6915
LAP3 1# 6912 6916#
LAPPND 1# 6579 6896#
LBCKWD 1# 6575 6934#
LBLKSP 1# 6626 6637 6648# 6655
(MSX BASIC ROM BIOS ) Macro-80 PAGE XREF - 13 270
- BIOS CROSS REFERENCE LISTING -

LBREAK 1# 6583 6687#


LBREKO 1# 6682# 6689
LBWl 1# 6939# 6942
LBW2 1# 6943 # 6946
LCRl 1# 6613# 6647
LCR2 1# 6615# 6642
LCRNRM 1# 6624 6633#
LCRNUL 1# 6622 6638#
LCRRET 1# 6585 6592#
LDELNX 1# 6589 6801#
LDELXl 1# 6807 6810#
LDIMVl 1# 1457# 1464
LDIRMV 1# 116 1452# 2479
LDIRVM 1# 117 1493# 2498
LDIVMl 1# 1497# 1504
LEFT 1# 1963 2148 2153#
LE FTC 1# 213 4828#
LEFTCl 1# 4826 4838#
LERASE 1# 6587 6866#
LF 1# 1860# 1920
LFTQ 1# 205 4347#
LINL32 1# 1154
LINL40 1# 1135
LINLEN 1# 1136 1155 2003 2139 2150 2323 2401 2474 2492 2542 6640
6731 6753 6805 6827 6837 684 7 6907 6957
LINTTB 1# 1561
LNWl 1# 6925# 6928
LNW2 1# 6929# 6932
LNXTLN 1# 6670# 6702
LNXTWD 1# 6577 6919#
LOC 1# 1955 1979#
LOW 1# 5506 5529
(MSX BASIC ROM BIOS ) Macro-80 PAGE XREF - 14 271
- BIOS CROSS REFERNCE LISTING -

LOWLIM 1# 5638 5663


LPT.DW 1# 623# 1740
LPT. SB 1# 624# 1055 1742 1744
LPT.ST 1# 625#
LPTABO 1# 17 34 1748#
LPTCHO 1# 5833 5836 5843#
LPTCHl 1# 5811 5846 5864#
LPTCHR 1# 5852 5858 5861 5867# 5874
LPTCOD 1# 5800 5805#
LPTOUT 1# 159 1726# 5868
LPTPOS 1# 1751 5824 5837 5841
LPTSTT 1# 160 1735 1757#
MAPS PC 1# 5850 5854 5872#
MAPXYC 1# 219 4413 4540#
MDNC 1# 4884 5006 5010 5016#
MHCMOV 1# 4966 4987#
MHZMVl 1# 4949 4960 4972 4982 4991#
ML FTC 1# 4834 4977#
MLFTCl 1# 4975 4983#
MLTATR 1# 1295
MLTCGP 1# 1591 4650 5001 5025
MLTNAM 1# 1297 1333
MLTPAT 1# 1293
MMPXYl 1# 4631 4633#
MMPXYC 1# 4590 4624#
MNSTCX 1# 5071 5221# 5230
MORA CT 1# 3577# 3596 3619 3631
MORSPL 1# 5821# 5826
MOTRON 1# 4045 4048#
MO TRWT 1# 54 79# 5483
MREADC 1# 4684 4 706#
MRGTC 1# 4804 4955#
(MSX BASIC ROM BIOS ) Macro-80 PAGE XREF - 15 272
- BIOS CROSS REFERENCE LISTING -

MRGTCl 1# 4 953 4961#


MSCANL 1# 5371 5411# 5420
MSCANR 1# 5269 5336# 5347
MSCNRl 1# 5341 5350#
MSCNR2 1# 5356# 5361
MSETC 1# 4738 4 745#
MSETCl 1# 4759 4 764#
MTDNC 1# 4860 4996#
MTLFT 1# 4819 4967#
MTRGT 1# 4788 4941#
MTSBRD 1# 5340 5360 5417 5421#
MT UPC 1# 4899 5022#
MUPC 1# 4926 5030 5033 5038#
MUSCLL 1# 1073# 1076
MUSI CF 1# 1070 2657 3642 3657 3670
MUSI NT 1# 2660# 2669
MUSI TB 1# 1098 1114#
MVTMOV 1# 5021 5043#
MVTMVl 1# 5045 5047#
NAMBAS 1# 1138 1157 1553 2557
NE.WKEY 1# 2752 2771 2788
NM.I 1# 124 4057#
NMSFTB 1# 2885# 3027
NOKEY 1# 3187#
NONEGl 1# 3935 3938#
NONEG2 1# 3943 3946#
NOS TOP 1# 2763 2766 2769#
NOTABL 1# 5819 5830#
NOT AUT 1# 6601 6603#
NO TRAN 1# 5730 5738#
NSETCX 1# 227 5055# 5328 5395
NSTClO 1# 5080# 5084
(MSX BASIC ROM BIOS ) Macro-80 PAGE XREF - 16 273
- BIOS CROSS REFERENCE LISTING -

NSTC20 1# 5076 5094#


NSTC30 1# 5108# 5117
NSTC40 1# 5107 5118#
NSTC50 1# 5125 5139#
NS TC SP 1# 5082 5130#
NTBKS2 1# 5817#
NTBarM 1# 2379 2381#
NTH IRA 1# 5856 5859#
NTINTT 1# 2642 2646#
NTMSXP 1# 5844
NXTCHK 1# 6926 6930 6949#
OLDKEY 1# 1029 1031 2725 2726 2787
OLDSCR 1# 1134 1153 1702
ONBRDl 1# 4797 4827 4914# 4954 4976
ONBRDR 1# 4874 4912#
ONGSBF 1# 3145 3147
OUTDLP 1# 248 5814# 5823
OUTDO 1# 55 5788#
OUTGI 1# 3986 3995 3999 4010 4017#
OU TN TB 1# 6523 6533#
OUTTAB 1# 6525# 6531
PADX 1# 3895 3950
PADXl 1# 3926 3928 3932 3953#
PADY 1# 3897 3952
PAT BAS 1# 1161 1253 1294 1380 1427
PA'IWRl 1# 5181 5205#
PATWRK 1# 1523 4414
PA'IWRT 1# 4740 5089 5142 #
PBDHRT 1# 1832# 2853 3430 3679
PDLl 1# 3833# 3835
PDL2 1# 3856# 3861
PDL3 1# 3859 3863#
(MSX BASIC ROM BIOS ) Macro-80 PAGE XREF - 17 274
- BIOS CROSS REFERENCE LISTING -

PDLPl 1# 3840 3843#


PHYDIO 1# 244 4197#
PI NL IN 1# 163 64 71#
PLYCNT 1# 3660
PNTHRS 1# 5248 5253#
PNTINI 1# 229 5242#
PNTIRT 1# 5252 5258#
POPALL 1# 1113 1821 1830# 4455
POSIT 1# 172 1766# 6673
PPI.AR 1# 257# 292 334 413 479 552 614# 763 776 799 840
852 891 4118
PPI .AW 1# 258# 3 54 358 447 451 482 556 582 617# 694 718
786 802 863 894 899 904 909 914 4122
PPI.BR 1# 615# 1016 1022 2756 3743 4132
PPI.CM 1# 619# 692 3204 3239 3250 4050 5465 5477 5559 5564 5573
PPI.CR 1# 616# 1012 1019 2748 3739 4054 4128
PPI.CW 1# 618# 696 1015 1021 2755 3742 4131
PRTFLG 1# 5806
PRVCHK 1# 6924 6940 6944 6960#
PRVCKl 1# 6959 6967#
PSG.DR 1# 607# 3179 3483 3857 4030 5668 5674 5728 5763 5780
PSG.DW 1# 606# 3186 3472 3722 3850 3852 3912 4034
PSG.LW 1# 605# 3178 3469 3482 3854 4029 5576
PSG.PA 1# 609# 3480
PSG.PB 1# 610# 3 710 3844 3907 4028
PTRFIL 1# 4141
PUTlLl 1# 2486 2494#
PUTlLN 1# 2245 2284 2440 2487#
PUT8B 1# 2102 2482#
PUTCHR 1# 2893 2894 3033 3078 3111 3155 3168 3219# 3273 3373 3375
PUTPNT 1# 1004 1026 2804 3223 3229
PUTQ 1# 206 4259#
(MSX BASIC ROM BIOS ) Macro-80 PAGE XREF - 18 275
- BIOS CROSS REFERENCE LISTING -

PUTVRM 1# 1854 2105 2131 2300 2512# 6729 6844 6854 6862
QINLIN 1# 166 6482#
QSTART 1# 4333 4368 4377#
QUEBAK 1# 4324
QUEUEN 1# 3560 3674
QUEUES 1# 4384
RAMLOW 1# 296 871 872
RAWPRT 1# 5809
RDBIT 1# 5695 5715#
RDBITL 1# 5727# 5735 5744
RDESLT 1# 291 299#
RDPSG 1# 148 3481# 3712 3846 3909
RDSLT 1# 49 289# 304 1482 1531
RDVDP 1# 241 4112#
RDVRM 1# 111 1606# 4685 4690 4708 4 750 5151 5155
REA DC 1# 225 4674# 5285 5310 5382 5425
READCO 1# 4696# 4712
READCl 1# 4694 4701# 4711
READ YR 1# 2767
REDCOD 1# 3927 3930 3959#
REDLOP 1# 3983# 3996
RED PAD 1# 3924 3925 3964 3969 3975#
REPCNT 1# 1033 2721 2784
REQSTP 1# 965 988 991
REQTRP 1# 967 2634 2644 2701 2704 2707 2710 2713 312 7#
RESZRO 1# 6975 7000#
RETRET 1# 5495 5531#
RETURN 1# 6516# 6573
RGOSAV 1# 1205 1214 1232 1273 1322
RGlSAV 1# 1173 1180 1219 1237 1278 1327 1376 1400 1444
RGHTCl 1# 4796 4808#
RGTEXT 1# 5122 5126#
(MSX BASIC ROM BIOS ) Macro-80 PAGE XREF - 19 276
- BIOS CROSS REFERENCE LISTING -

RIGHT 1# 1855 1961 2135# 2170


RIGHTC 1# 212 4798# 5227 53 90 5418
RSETlO 1# 2038 2 043#
RSLREG 1# 239 4116#
RSTFLl 1# 3645# 3647
RSTMOD 1# 1969 1976#
RUBOUT 1# 1853 2293 #
RUNFLG 1# 3902 4023 5279
SAME BG 1# 5170 5192#
SAMEFG 1# 5176 5185 5198#
SAVSTK 1# 979
SCALXY 1# 218 4411 4475#
SCANL 1# 231 5364#
SCANLl 1# 5379# 5387
SCANL2 1# 5384 5388#
SCANL3 1# 5381 5391#
SCANL4 1# 5334 5397#
SCANR 1# 230 5261#
SCANRl 1# 5284# 5293
SCANR2 1# 5287 5296#
SCANR3 1# 5306# 5314
SCANR4 1# 5309 5312 5315#
SCITBL 1# 6503 6564#
SCLXOK 1# 4513 4518#
SCLYOK 1# 4497 4502#
SCNCNT 1# 2670
SCRMOD 1# 1133 1152 1251 12 92 1551 1648 2455 2540 4537
SELEXP 1# 301 342 420 486 544#
SELPRM 1# 290 331 411 477 500#
SETA TR 1# 224 4 714#
SETC 1# 226 4425 4727# 5226 5435
SETCHK 1# 2352 2372 2446#
(MSX BASIC ROM BIOS ) Macro-80 PAGE XREF - 20 277
- BIOS CROSS REFERENCE LISTING -

SETGRP 1# 133 1267 1269# 1336


SETI NS 1# 6554# 6713
SETMLT 1# 134 1316 1318#
SETMOD 1# 1967 1970#
SETOVW 1# 6556# 6690 "6712 6895
SETRD 1# 113 1454 1610 1630# 2505
SETREG 1# 1337 1345 1347#
SETRGl 1# 1340 1343 1349#
SETRG2 1# 1357# 1360
SETSCM 1# 1227 1244 1285 1335#
SETT32 1# 132 1168 1228#
SETTRM 1# 1858 2584#
SETTXT 1# 131 1144 1210#
SETWRT 1# 114 12 57 1298 14 72 1496 1600 1615# 1666 2317 2516
SFTKEY 1# 2382 2764 2816 2996 3022 3036 3064 3084 3151 3210 3258
SLEXPl 1# 563# 566
SLPRMl 1# 509# 513
SLPRM2 1# 531# 533
SLSTCl 1# 3713 3717#
SLSTC2 1# 3 716 3721#
SL ST CK 1# 2678 2682 3687 3705# 3789
SLTTBL 1# 430 492 915 917
SNSMAT 1# 242 4124#
SSLTLP 1# 881# 887
STATFL 1# 2631
STCSSW 1# 2029 2048#
STICKl 1# 3689# 3704
STKTBL 1# 3688 3 74 7#
STMOTl 1# 4044# 4056
STMOTR 1# 199 4041#
STOCSR 1# 1866 2143 2165 2182# 2189 2211
STOP 1# 981
(MSX BASIC ROM BIOS ) Macro-80 PAGE XREF - 21 278
- BIOS CROSS REFERENCE LISTING -

STOREC 1# 222 4435 4665# 5323 5331


STRTMS 1# 149 3651#
STSTYL 1# 2027 2040#
SULOP 1# 5649# 5652
SYN05 1# 5577# 5589 5591 5602
SYNlO 1# 5583 # 5606
SYNll 1# 5597 5600#
SYN20 1# 5608#
SYN30 1# 5615# 5620
SYNC HR 1# 46
SYNCWl 1# 5486 5489#
SYNLPl 1# 5493# 5499
T32ATR 1# 1162
T32CGP 1# 1158
T32COL 1# 1662
T32NAM 1# 1156 1242
T32PAT 1# 1160
TAB 1# 1918 2190# 2199
TAPIN 1# 194 5659#
TAPIOF 1# 195 5462#
TAPION 1# 193 5568#
TAPOFF 1# 198 5450#
TAPOON 1# 196 5469#
TA POUT 1# 197 5501#
TOOWNC 1# 217 4436 4850#
TERMIN 1# 2314 2579# 6495 6672
TGLINS 1# 6571 6704#
TIMOUT 1# 5762 5770#
TL EFT 1# 4812# 5380 5415
TOTEXT 1# 176 973 1696#
TRGFLG 1# 2694
TRIGl 1# 3794 3796#
(MSX BASIC ROM BIOS ) Macro-80 PAGE XREF - 22 279
- BIOS MSX CROSS REFERENCE LISTING -

TRIG2 1# 3798# 3806


TRIGHT 1# 4426 4781# 5292 5308 5346 5358
TRPTBL 1# 2633 2643 2700 2703 2706 2709 2712 3121
TRUNC 1# 6581 6874#
TRUNCl 1# 6873 6881# 6889
TRYAGN 1# 3914 3921# 3940 3948
TTYCHR 1# 5808 5875#
TTYPOS 1# 1829
TUPC 1# 215 4890#
TWOPWR 1# 4595 4617#
TXTCGP 1# 1139
TXTNAM 1# 1137 1225
UN TERM 1# 2582# 6760
UP 1# 1934 1957 2159#
UPC 1# 214 4918#
UPClO 1# 4908 4911 4927#
UPDATE 1# 3225 33 93# 3427
V.COLR 1# 600#
VADDR 1# 2316 2473 2491 2504 2515 2521#
VADDRl 1# 2543 2546#
VADDR2 1# 2545 2550#
VCBA 1# 3666 4184
VCBB 1# 3667
VCBC 1# 3668
VDP.CW 1# 597# 1197 1200 1623 1627 1638 1641
VDP.DRW 1# 596# 1261 1306 1458 1485 1499 1604 1613 1669 2321 2508
2518
VDP.SR 1# 598.# 2622 4114
VOICAQ 1# 1080
VOICEN 1# 4175
VOICOF 1# 3563 3632#
VRTMOV 1# 4889 4931#
(MSX BASIC ROM BIOS ) Macro-80 PAGE XREF - 23 280
- BIOS MSX CROSS REFERENCE LISTING -

VRTMVl 1# 4 933 493 5#


WAT INT 1# 945# 951
WINWID 1# 5655 5724
WORKl 1# 5326
WORK2 1# 5325 5393
WORK3 1# 5281 5376 5398 5409
WRESED 1# 305 347#
WRESLT 1# 332 339#
WRPRIM 1# 338
WRSLT 1# 53 329# 346
WRTPSG 1# 147 1044 1047 1050 1092 1112 3443# 3493 3496 3499 3502
3591 3594 3608 3612 3625 3628 3640
WRTVDP 1# 110 1186# 1218 1224 1236 1241 1277 1282 1326 1332 1365
1379 1694
WRTVRM 1# 112 1393 1397 1409 1595# 4766 5110 5114 5219
WSLREG 1# 240 4120#
WTPTAB 1# 5201# 5212
XE PER 1# 3601 3613#
XGETQ 1# 3561 3573 3580 3587 3620 3622 3672#
XNEGTV 1# 4508 4516#
XPOSTV 1# 4506 4509#
XVOL 1# 3583 3597#
YNEGTV 1# 4492 4500#
YPOSTV 1# 4490 4493#
ZERLPl 1# 5832 5840#

You might also like