MSX Bios - Listing Part1 - Búsqueda
MSX Bios - Listing Part1 - Búsqueda
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.
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
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)
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)
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-
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-
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-
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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.
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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)
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)
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)
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)
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)
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.)
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.)
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)
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)
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)
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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 '?'
•
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
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
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
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
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
7020 END
MSX BIOS CROSS REFERENCE
2 57
(MSX BASIC ROM BIOS ) Macro-80 PAGE XREF - 1 258
- 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 -
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 -
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 -