MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt...

102
MSX 2 - Handboek Voor de gevorderde MSX 2 Converted to PDf by HansO, 2001 Auteur :Erik Schaut Versie : 2.21 Datum :1-3-1994

Transcript of MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt...

Page 1: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX 2 - Handboek Voor de gevorderde

MSX 2

Converted to PDf by HansO, 2001 Auteur :Erik Schaut Versie : 2.21 Datum :1-3-1994

Page 2: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Inhoudsopgave

1. Systeem variabelen MSX2 ............................................................................................................................................................ - 1 - 2. BASE-gegevens .............................................................................................................................................................................. - 2 - 3. Kleurnummers ............................................................................................................................................................................... - 3 - 4. Operators ........................................................................................................................................................................................ - 3 - 5. Variabelen en waardetoekenning................................................................................................................................................. - 4 - 6. MSX-BASIC Tokens ..................................................................................................................................................................... - 5 - 6.1. Regels ......................................................................................................................................................................... - 5 - 7. Getal opslag .................................................................................................................................................................................... - 7 - 7.1. Numerieke constanten ................................................................................................................................................ - 7 - 7.1.1. Integers .................................................................................................................................................. - 7 - 7.1.2. Enkele en dubbele precisie getallen ...................................................................................................... - 8 - 7.1.3. Kleine constanten .................................................................................................................................. - 8 - 7.2. Numerieke variabelen................................................................................................................................................. - 8 - 7.2.1. VARPTR-functie................................................................................................................................... - 9 - 7.2.2. Alfanumerieke variabelen ..................................................................................................................... - 9 - 7.2.3. Array variabelen .................................................................................................................................. - 10 - 8. Twee Complement HEX-waarde ............................................................................................................................................... - 10 - 9. Scannen van toetsen..................................................................................................................................................................... - 11 - 10. VT52 Escape sequences in MSX .............................................................................................................................................. - 11 - 11. Z80 interrupt modes .................................................................................................................................................................. - 12 - 12. Z80 registers ............................................................................................................................................................................... - 12 - 13. BIOS Calls .................................................................................................................................................................................. - 14 - 13.1. Inleiding.................................................................................................................................................................. - 14 - 13.2. Slot operaties .......................................................................................................................................................... - 15 - 13.3. I/O initialisatie ........................................................................................................................................................ - 16 - 13.4. Video Display Processor ........................................................................................................................................ - 17 - 13.5. PSG-besturing......................................................................................................................................................... - 19 - 13.6. Toetsenbord/beeldscherm aansturing..................................................................................................................... - 19 - 13.7. Joystick poorten...................................................................................................................................................... - 21 - 13.8. Tape functies .......................................................................................................................................................... - 21 - 13.9. Wachtrijen .............................................................................................................................................................. - 22 - 13.10. GENGRP, ADVGRP modules ............................................................................................................................. - 22 - 13.11. Primaire slot calls ................................................................................................................................................. - 24 - 13.12. I/O commando's.................................................................................................................................................... - 25 - 13.13. Achtergrondmuziek .............................................................................................................................................. - 25 - 13.14. Toetsenbordbuffer ................................................................................................................................................ - 25 - 13.15. SUB-ROM Opties [MSX-2]................................................................................................................................. - 26 - 13.16. VRAM Opties [MSX-2]....................................................................................................................................... - 27 - 14. SUB-ROM-BIOS Calls.............................................................................................................................................................. - 29 - 14.1. Grafische routines................................................................................................................................................... - 29 - 14.2. Pixel routines .......................................................................................................................................................... - 30 - 14.3. Rechthoeken ........................................................................................................................................................... - 31 - 14.4. Toegang VDP ......................................................................................................................................................... - 32 - 14.5. Sprites ..................................................................................................................................................................... - 33 - 14.6. Diversen, VRAM-routines ..................................................................................................................................... - 33 -

Page 3: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Inhoudsopgave

14.7. Palette-functies ....................................................................................................................................................... - 35 - 14.8. Basic Extended Statements .................................................................................................................................... - 35 - 14.9. Diversen : Beep, Prompt ........................................................................................................................................ - 36 - 14.10. Herstel scherm...................................................................................................................................................... - 36 - 14.11. VRAM Data Transfer Functies ............................................................................................................................ - 37 - 14.12. Muis en Trackball................................................................................................................................................. - 38 - 14.13. Diversen................................................................................................................................................................ - 38 - 14.14. Kanji Print ............................................................................................................................................................ - 38 - 14.15. Toegang tot klok-chip .......................................................................................................................................... - 38 - 15. MT - HELP................................................................................................................................................................................. - 39 - 15.1. MT .......................................................................................................................................................................... - 39 - 15.2. BASIC .................................................................................................................................................................... - 39 - 15.3. MSX-DOS .............................................................................................................................................................. - 39 -

Page 4: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Inhoudsopgave

16. Systeemboodschappen............................................................................................................................................................... - 40 - 17. Hooks........................................................................................................................................................................................... - 41 - 18. File Control Block...................................................................................................................................................................... - 43 - 19. BDOS Calls................................................................................................................................................................................. - 44 - 19.1. FILE CONTROL BLOCK ..................................................................................................................................... - 44 - 19.2. Drive Parameter Block ........................................................................................................................................... - 44 - 19.3. BDOS-Calls-functies.............................................................................................................................................. - 45 - 20. I/O-Poort adressen..................................................................................................................................................................... - 52 - 21. Video Display Processor............................................................................................................................................................ - 54 - 21.1. Indeling van het Video RAM................................................................................................................................. - 54 - 21.2. SCREEN 5 - 8 ........................................................................................................................................................ - 56 - 21.3. VDP-besturing........................................................................................................................................................ - 57 - 21.3.1. VDP Mode-registers.......................................................................................................................... - 57 - 21.3.2. VDP adres-registers........................................................................................................................... - 58 - 21.3.3. VDP tekstcontrole-registers .............................................................................................................. - 58 - 21.3.4. VDP controle-registers...................................................................................................................... - 58 - 21.3.5. VDP status-registers.......................................................................................................................... - 59 - Bijlage I. De CMD bijlage................................................................................................................................................................ - 62 - Bijlage II, Rompack utilities ............................................................................................................................................................ - 66 - Bijlage III, List utilitie ...................................................................................................................................................................... - 67 -

Page 5: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

1. Systeem variabelen MSX2

(2)FAF5

(2)FAF6

(2)FAF7

(2)FAF8

(2)FAF9

(2)FAFA

(2)FAFB

(2)FAFC

(2)FAFD

(2)FAFE

(2)FB00

(2)FB02

RS232:

FB03

FB04

FB06

FB07

FB08

FB09

FB0A

FB0B

FB0C-FBBE

DPPAGE

ACPAGE

AvCSav

ExBrSa

chrcnt

roma

?

mode

gereserveerd

xsave

ysave

LOGOPR

tocnt

rsfcb

rsqgnll

rst 30H (F7H)

ret

ananana

1

1

1

1

1

1

1

1

1

2

2

1

1

2

1

1

1

1

1

1

?

Display page (op beeldscherm)

Active page

AV control port save

Extended Basic Rom (sub-Rom) slot adres

Karakterteller voor Kana-Rom

Karaktersave voor kana

Kana conversie (mode switch/grootte van het Video RAM)

gereserveerd

Muis/trackball/lichtpen x-koördinaat

Muis/trackball/lichtpen y-koördinaat

Logische operatie-nummer (zie begeleidende tekst)

Data gebied voor de RS232 driver

Adres van de RS232

Byte data

RST 30H

(data)

(laag)

(hoog)

(&HC9)

Rest van RS232 gegevens

Adres Naam Bytes Doeleinde

&HF562

&HF564

&HF566

&HF568

&HF56A

&HF56C

&HF56E

&HF56F

&HF570

SX

SY

DX

DY

NX

NY

CDUMMY

ARG

L_OP

2

2

2

2

2

2

1

1

1

Start X-Coördinaat

Start Y-Coördinaat

Eind-X-Coördinaat

Eind-Y-Coördinaat

Aantal pixels horizontaal

Aantal pixels verticaal

-- Voor intern gebruik --

Richting

Logische operatie

0 : PSET 8 : TPSET

1 : AND 9 : TAND

2 : OR 10 : TOR

3 : XOR 11 : TXOR

4 : PRESET 12 : TPRESET

- 1 -

Page 6: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

2. BASE-gegevens

Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de scherm

types 0 t/m 3 zijn er steeds 5 adressen, waarvan de namen eindigen op NAM, COL, VGP, ATR en PAT. Deze komen overeen met

de adressen die vanuit Basic met de BASE-functie kunnen worden opgevraagd.

De vier schermtypes worden aangegeven met TXT (Text, scherm 0), T32 (Text 32, scherm 1), GRP (Graphic, scherm 2) en MLT

(Multi-color, scherm 3). Zie ook het overzicht. Txt bevat de nummers 0 t/m 5, T32 de nummers 6 t/m 9, GRP de nummers 10

t/m 14 en MLT de nummers 15 t/m 19.

De volgende lijst gebruikt omschrijvingen en is voor de MSX1 en MSX2.

0 Scherm-info tabel (Screen 0)

1

2 Matrix-tabel

3

4

5 Scherm-info tabel (Screen 1)

6 Kleurtabel

7 Matrix-tabel

8 Sprite-info tabel

9 Sprite$-tabel

10 Scherm info tabel (Screen 2)

11 Kleurtabel

12 Matrix tabel

13 Sprite-info tabel

14 SPRITE$-tabel

15 Scherm-info tabel (Screen 3)

16

17 Matrix-tabel

18 Sprite-info tabel

19 SPRITE$-tabel

20 Scherm-info tabel (Screen 4)

21 Kleur-tabel

22 Matrix-tabel

23 Sprite-info tabel (Screen 4)

24 SPRITE$-tabel

25 Scherm-info tabel (Screen 5)

26 Kleurtabel

27 Matrix-tabel

28 Sprite-info tabel

29 SPRITE$-tabel

30 Scherm-info tabel (Screen 6)

31 Kleurtabel

32 Matrix-tabel

33 Sprite-info tabel

34 SPRITE$-tabel

35 Scherm-info tabel (Screen 7)

36 Kleurtabel

37 Matrix-tabel

38 Sprite-info tabel

39 SPRITE$-tabel

40 Scherm-info tabel (Screen 8)

41 Kleurtabel

42 Matrix-tabel

43 Sprite-info tabel

44 SPRITE$-tabel

- 2 -

Page 7: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

3. Kleurnummers

Kleurcode Kleur kleurcode kleur

0

1

2

3

4

5

6

7

transparant

zwart

groen

licht groen

donker blauw

licht blauw

donker rood

blauw

8

9

10

11

12

13

14

15

rood

licht rood

donker geel

licht geel

donker groen

steen rood

grijs

wit

4. Operators

Operator Prioriteit Operator Betekenis

Functionele 1 functies Wanneer in expressies functies worden gebruikt, dan

zullen deze met de hoogste prioriteit worden

verwerkt.

Rekenkundige 2

3

4

^

*

/

\

MOD

+

-

Machtsverheffen

Vermenigvuldigen

delen

delen van gehele getallen

rest bepaling

optellen

aftrekken

Vergelijkende 5 =

<

>

<> of ><

<= of =<

>= of =>

Is gelijk aan

Is kleiner dan

Is groter dan

Is ongelijk aan

Is kleiner dan of gelijk aan

Is groter dan of gelijk aan

Logische 6 AND

OR

NOT

XOR

EQV

IMP

EN

OF

NIET

Exclusiefe OF

Gelijkwaardig met

impliceert dat

- 3 -

Page 8: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

5. Variabelen en waardetoekenning

variabele A waardetoekening

Alfanumeriek

Integer

Word

Real (default)

$

%

!

#

LET A$="ABC"

LET A%=5

De waarde mag -32768 tot +32767 zijn.

LET A!=123456

De waarde mag 0 to 65535 zijn.

LET A#=12343567890123

De waarde mag uit 14 cijfers bestaan.

constante omschrijving

integer

Fixed point, single precision.

Fixed point, double precision

Floating point, single precision.

Floating point, double precision

Hexadecimaal

Octaal

Binair

Waarde tussen -32768 en +32767

Waarde 12.3!

Waarde 12.3#

Waarde 12.3E4 (E=exponent teken)

Waarde 12.3D9 (D=exponent teken)

Waarde &HFF (=Decimaal 255)

Waarde &O377 (=Decimaal 255)

Waarde &B11111111 (=Decimaal 255)

- 4 -

Page 9: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

6. MSX-BASIC Tokens BASIC-commando's worden vertaald naar een getal. Dit getal is voor PRINT bijvoorbeeld 157. PRINT is een BASIC-Token. In een BASIC-programma zal elk PRINT commando intern als 157 worden weergegeven. Het BASIC-programma begint natuurlijk ergens in het geheugen, dit begin is opgeslagen in de adressen 63094(low) en 63095 (high). Deze waarde is niet alleen te lezen maar ook te veranderen. Bij een standaard MSX-computer is dit adres op $8000. De Token opslag begint op adres &H3A72 in het ROM. 6.1. Regels Als u ooit een Basic programma geschrevenb of overgetypt heeft zult u weten dat zo'n programma uit regels bestaat. Elke regel heeft in het gehugen dezelfde opbouw : 2 bytes met het adres van de volgende regel; 2 bytes voor het regelnummer ruimte voor Basic commando(s) als tokens en 1 byte die altijd 0 bevat om de regel af te sluiten Als de twee bytes voor de volgende regel 0 bevatten dan is er geen volgende regel. Dit is echter niet heel erg interessant. De volgende lijst van Tokens is dat echter wel. Deze lijst kunt u bijvoorbeeld gebruiken om gemakkelijker met machinetaal samen te werken of nieuwe commando's te creëren. In de bijlagen kunt u bij de CMD-bijlage kijken hoe u deze TOKENS kunt gebruiken.

statement/

functie

code

dec

hex

statement/

functie

code

dec hex

*

+

-

/

<

=

>

ABS

AND

ASC

ATN

AUTO

BASE

BEEP

BIN$

BLOAD

BSAVE

CALL

CDBL

CHR$

CINT

CIRCLE

CLEAR

CLOAD

ERASE

ERL

ERR

243

241

242

244

240

239

238

255 134

246

255 149

255 142

169

201

192

255 157

207

208

202

255 160

233 150

255 158

188

146

155

165

225

226

F3

F1

F2

F4

F0

EF

EE

FF 86

F6

FF 95

FF 8E

A9

C9

C0

FF 9D

CF

D0

CA

FF A0

FF 96

FF 9E

BC

92

9B

A5

E1

E2

CLOSE

CLS

COLOR

CONT

COPY

COS

CSAVE

CSNG

CSRLIN

CVD

CVI

CVS

DATA

DEF

DEFDBL

DEFINT

DEFSNG

DEFSTR

DELETE

DIM

DRAW

DSKF

END

EOF

180

159

189

153

214

255 140

154

255 159

232

255 170

255 168

255 169

132

151

174

172

173

171

168

134

190

255 166

129

255 171

B4

9F

BD

99

D6

FF 8C

9A

FF 9F

E8

FF AA

FF A8

FF A9

84

97

AE

AC

AD

AB

A8

86

BE

FF A6

81

FF AB

- 5 -

Page 10: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

ERROR

EXP

FIELD

FILES

166

255 139

177

183

A6

FF 8B

B1

B7

- 6 -

Page 11: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

Vervolg BASIC-tokens

statement/

functie

code

dec hex

statement/

functie

code

dec hex

FIX

FN

FOR

FRE

GET

GOSUB

GOTO

HEX$

IF

INKEY$

INP

INPUT

INSTR

INT

KEY

KILL

LEFT$

LEN

LET

LFILES

LINE

LIST

LLIST

LOAD

LOC

LOCATE

LOF

LOG

LPOS

LPRINT

LSET

MAX

MERGE

MID$

MKD$

MKI$

MKS$

MOTOR

NAME

NEW

NEXT

NOT

OCT$

OFF

ON

OPEN

OR

OUT

PAD

255 161

222

130

255 143

178178

141

137

255 155

139

236

255 144

133

229

255 133

204

212

255 129

255 146

136

187

175

147

158

181

255 172

216

255 173

255 138

255 156

157

184

205

182

255 131

255 176

255 174

255 175

206

211

148

131

224

255 154

235

149

176

247

156

255 165

FF A1

DE

82

FF 8F

B2

8D

89

FF 9B

8B

EC

FF 90

85

E5

FF 85

CC

D4

FF 81

FF 92

88

BB

AF

93

9E

B5

FF AC

D8

FF AD

FF 8A

FF 9C

9D

B8

CD

B6

FF 83

FF B0

FF AE

FF AF

CE

D3

94

83

E0

FF 9A

EB

95

B0

F7

9C

FF A5

PAINT

PDL

PEEK

PLAY

PONIT

POKE

POS

PRESET

PRINT

PSET

PUT

READ

REM

RENUM

RESTORE

RESUME

RETURN

RIGHT$

RND

RSET

RUN

SAVE

SCREEN

SET

SGN

SIN

SOUND

SPACE$

SPC(

SPRITE

SQR

STEP

STICK

STOP

STR$

STRIG

STRING$

SWAP

TAB(

TAN

TIME

TO

TROFF

TRON

USING

USR

VAL

VALPTR

VDP

VPEEK

VPOKE

191

255 164

255 151

193

237

152

255 145

195

145

194

179

135

143

170

140

167

142

255 130

255 136

185

138

186

197

210

255 132

255 137

196

255 153

223

199

255 135

220

255 162

144

255 147

255 163

227

164

219

255 141

203

217

163

162

228

221

255 148

231

200

255 152

198

BF

FF A4

FF 97

C1

ED

98

FF 91

C3

91

C2

B3

87

8F

AA

8C

A7

8E

FF 82

FF 88

B9

8A

BA

C5

D2

FF 84

FF 89

C4

FF 99

DF

C7

FF 87

DC

FF A2

90

FF 93

FF A3

E3

A4

DB

FF 8D

CB

D9

A3

A2

E4

DD

FF 94

E7

C8

FF 98

C6

- 7 -

Page 12: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

WAIT

WIDTH

XOR

\

^

150

160

248

254

245

96

A0

F8

FC

F5

- 8 -

Page 13: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

7. Getal opslag 7.1. Numerieke constanten Alvorens we op de coderingen ingaan lijkt het mij nuttig om vooraf nog even de definities van de diverse soorten constanten door te nemen: 1) Integers, gehele getallen waarvan de waarde ligt tussen -32768 en +32767. Een integer neemt slechts twee bytes is beslag. 2) Hexadecimale constanten, gehele getallen doch nu uitgedrukt in een 16-tallig stelsel. Zo'n getal wordt dan vooraf gegaan door &H. De waarde ligt tussen &H0000 en &HFFFF en neemt eveneens twee geheugen plaatsen beslag. 3) Octale constanten, ook gehele getallen, maar nu in een 8-tallig stelsel. Ze worden vooraf gegaan door &O en liggen tussen &O 0000 en &O 177777. (let op O is niet 0!) 4) Binaire constanten, Ook weer gehele getallen maar nu volgens het tweetallig stelsel. Ze worden vooraf gegaan door &B. De waarde ligt tussen de &B 0 en &B1111111111111111. 7.1.1. Integers In de RAM worden de getallen uit de eerste drie groepen op gelijke wijze in HEX-code opgeslagen. Alleen de voorvoegsels worden anders, bijv.:

Groep BASIC Code RAM Code

1 2 3

12345 &H3039

&O30071

1C 39 30 0C 39 30 0B 39 30

Het token in het eerste adres geeft aan in welk stelsel dit getal in het programma staat aangegeven, hetgeen voornamelijk van belang is voor de detokenizing. Voor de verwerking is dit toeken in zoverre van belang, dat het systseem weet dat na 1C, 0C of 0B twee bytes volgen met een getalswaarde in HEX-code. Wanneer de integer negatief is, dan wordt het geheel nog eens voorafgegaan door een token voor het - teken

Groep Getal RAM Code

1 2 2 3

-12345 -&H3039 -&HFFFF

&O177777

F2 1C 39 30 F2 0C 39 30 F2 0B FF FF F2 0B FF FF

Nu staat in een programma een getal nooit opzichzelf; er moeten in ieder geval tokens aan voorafgaan en eventueel erop volgen zodat het systeem weet wat het er mee aan moet b.v. : In basic A=12345 of A=12345*B geeft In RAM 41 EF 1C 39 30 of 41 EF 1C 39 30 F3 42 Het kan ook zijn dat een getal is bedoeld als REGELnummer waar naartoe wordt verwezen, zoals b.v. GOTO 2000 of GOSUB 2000. In zo'n geval wordt de 2 bytes HEX-code van het regelnummer voorafgegaan door het token 0E.: GOTO 2000 wordt dan 89 20 0E D0 07, waarin dan 89 staat voor GOTO en 20 voor een spatie. Een Binair getal wordt letterlijk opgeslagen in de RAM. Nemen we ook hier 12345 als voorbeeld dan krijgen we in BASIC A=&B11000000111001 en in tokens 40 EF 26 42 31 31 30 30 30 30 30 30 31 31 31 30 30 31. Zo'n binair getal neemt dus wel heel wat geheugen ruimte in beslag. Als we A=-1 in code zouden schrijven, dan kost on dat zeer kleine getal 14 bytes meer dan een

- 9 -

Page 14: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

integer getal.

- 10 -

Page 15: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

7.1.2. Enkele en dubbele precisie getallen Dit zijn decimale getallen met 6 cijfers nauwkeurig achter de comma en nemen 4 bytes in beslag. Een ! teken aan het eind van het getal betekend dat het om enkele precisie gaat, b.v.: 123456! Dubbele precisie getallen zijn decimale getallen met 14 cijfers nauwkeurigheid en nemen 8 bytes aan geheugenruimte in beslag. Een #-teken aan het einde van het getal geeft aan dat het om een dubbele precisie getal gaat b.v.: 1234567890123#. In de RAM worden deze getallen als volgt in tokens omgezet:

BASIC Code tokens

123456! 12345678901234#

1D 05 12 34 56 1F 0D 12 34 56 78 90 12 34

1D geeft aan dat het om een SNG getal gaat en 1F betreft een DBL getal. Het tweede teken geeft de macht (van 10) aan, er daarbij van uitgaande dat de decimale punt volgt na het eerste cijfer. 123456 wordt dus vertaald naar 1.23456 E5. Alleen als het een negatief getal is wordt het geheel nog een svoorafgegaan door F2, zijnde het token voor het min-teken. Het getal zelf wordt nu niet in HEX-code gegeven doch in groepen van twee cijfers per byte. 7.1.3. Kleine constanten Getallen van [0..9], voor zulke kleine getallen zou het zonde zijn om darvoor 3 bytes te gebruiken (integer), daarom heeft men hiervoor een bepaalde token bedacht : TOKEN = getal + &H11. 2 wordt dan 2 + &H11 = &H13. Deze kleine getallen vergen dus maar 1 byte van de geheugenruimte. Getallen van [10..255], deze getallen worden voporafgegeaan door het teken 0F, daarna volgt de waarde: 200 wordt dan 0F C8, waarin C8 de HEX-code is voor 200. Deze getallen vragen dus 2 bytes aan geheugenruimte. Voor beide gevallen geldt dat een negatief getal wordt vooraf gegaaan door het token F2. 7.2. Numerieke variabelen Numerieke variabelen zijn getallen welke tijdens het runne nvan een programma van waarde (kunnen) veranderen. De naam van een variabele moet altijd met een letter beginnen (A-Z) en mag zo lang zijn als u wilt. De computer beschouwt echter alleen de eerste twee tekens als relevant. Het tweede teken mag ook een cijfer zijn. Goede namen zijn dus : A, B, X, Y, AA, AB, X1, X2, enz. Voorts kan direct achter de naam met een symbool worden aangegevn welke soort variabele wordt bedoeld bijv.: A% Integer variabele AB! Enkele precisie variabele B2# Dubbele precisie variabele Dit symbool heeft voornamelijk betrekking op het aantal bytes dat in het variabelengeheugen moet worden gereserveerd. Zo kunt u b.v. ongestraft intikken a%=123.4567. Na het runen zult u dan zien dat de BASIC interpreter er A%=123.4567# van heeft gemaakt en dat dit ook als zodanig iun het programma staat vermeld. In de Ram staat dan : 41 25 EF 1E 02 12 34 56 70 00 00 00

ofwel: A, %, =,DBL,^2*1.234 56 70 00 00 00

- 11 -

Page 16: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

Tijdens het runnen wordt deze waarde echter wel als INTEGER opgeslagen en gaat a% voorlopig verder door het leven als 123. Indien u echter na A% 12345678 in zou tikken dan krijgt u bij het runnen de foutmelding: 'Overflow in...' te zien, immers dit getal past nu niet meer in het gereserveerde vakje van het variabelengeheugen. Voor de opslag in het variabelengeheugen wordt weer een speciaal systeem gebruikt:

Variabele Waarde tokens

A% B1%

C! D#

1234 -5678

123456 123456

02 41 00 D2 04 04 42 31 D2 E9 04 43 00 46 12 34 56 08 43 00 46 12 34 56 00 00 00 00

De eerste byte geeft aan om welk soort getal het gaat (zie ook VALTYP), de twee volgende bytes geven de naam aan. Bij de integers volgen dan nog twee bytes met de waarde in HEX-code. Hier wordt voor de opslag het 2-complementen systeem toegepast. Bij de enkele en dubbele precisie getallen geeft de 4e byte aan of het om een positief dan wel negatief getal gaat en op welke plaats de decimale punt staat. Het is ook mogelijk om vooraan in het programma de variabelen te definieren met de instructie DEFINT. Bijv. DEFINT A-F, waarmee alle variabelen, die met de letter A beginnen als integers worden opgeslagen. In dit geval vervalt dan het %-teken achter de naam; in het variabelen geheugen blijft de codering ongewijzigd. 7.2.1. VARPTR-functie Met PRINT VARPTR(naam) kan het adres worden opgevraagd, alwaar de eerste byte van de momentele waarde van deze variabele is opgeslagen. In bovenstaande voorbeelden zou dan naar de 4e byte worden gewezen. De VARPTR-functie kan alleen gebruikt worden als de variabelen een waarde hebben (ook 0 is een waarde). 7.2.2. Alfanumerieke variabelen De naam en de string (die altijd tussen aanhalingstekens moet staan) wordt letterlijk in het programma opgeslagen. Zo komt A$="MSX" er als volgt uit te zien : 41 24 EF 22 4D 53 58 22 A $ = " M S X "

Alle karakters komen dus in de normale ASCII-code in het RAM, alleen voor de = is een TOKEN gebruikt. In het variabelengeheugen komt na het runnen de initialisatiecode : 03 41 00 08 ll hh te staan. 03 Betekend dat het om een string gaat, 41 resp 00 geven de naam aan, 08 de lengte en tenslotte komt op llhh het adres te staan waar deze string is te vinden. Indien de string in het programma alreeds is vernoemd met A$="...." dan zal llhh naar die plaats verwijzen. Wordt A$ tijdens het runnen ingevoerd met bijv.: INPUT"Welk woord";A$ dan zal llhh naar een adres wijzen in het bovenste gedeelte van de RAM (string geheugen), alwaar alle binnenkomende strings worden opgeslagen. De Varptr functie verwijst naar het adres waar de lengte is opgeslagen. De volgende twee bytes geven het adres aan waar de string is opgeslagen.

- 12 -

Page 17: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

7.2.3. Array variabelen Als we in een programma over ene groot aantal variabelen moeten kunnen beschikken dan kunnen we gebruik maken van ARRAY-variabelen. Bij deze variabelen komt de index achter de naam tussen ( ) te staan, bijv.: A(6). Als het aantal variabelen hoger is dan 10 dan moet de variabele vooraf gedemensioneerd worden met de instructie DIM A%(20) of DIM A%(20,50), etc. Direct achter het RAM-gebied waar de variabelen worden opgeslagen, wordt dan ruimte gereserveerd voor de array. Na een DIM A%(10,25) - instructie zien we aan het begin van de gereserveerde ruimte volgende initialiseringscodes: 02 41 00 FF 00 02 1A 00 0A 00 xx xx INT. A - 1) 2) 3) 4) 5)

Deze codes hebben de volgende betekenis: Byte 1 integer variabele Byte 2 + 3 Naam 1) Byte 4 + 5 Aantal gereserveerde bytes voor de array, te beginnen by byte 6. In dit voorbeeld dus :

10*25+5=255=&H00FF 2) Byte 6 Aantal dimensies (hier 2) 3) Byte 7+8 Aantal elementen in laatste dimensie 4) Byte 9+10 Aantal elementen in eerste dimensie 5) Byte 9+11 Waarde van eerste integer, in dit geval dus die van A%(0,0), uitgedrukt in twee complementen HEX-code. Array's maken scheelt variabelen ruimte en programma ruimte, u hoeft bijvoorbeeld niet steeds de %-teken te gebruiken. De VARPTR-functie verwijst direct naar de eerste variabele (A%(0,0)). 8. Twee Complement HEX-waarde Voor -32768 tot +32767 Ik volsta nu met een voorbeeld : -3000 wordt opgeslagen als &HF448, deze code onstaat als volgt : -3000 wordt 3000, 3000 wordt &H0BB8, &HFFFF-&H0BB8 = &HF447, -3000 = &HF447 + 1 =&HF448

- 13 -

Page 18: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

9. Scannen van toetsen De toetsen van het toetsenbord zijn in een matrix opgenomen. Wanneer de software het toetsenbord wil lezen, dan wordt een rij uit de matrix geselecteerd, waarna de status van de op die rij voorkomende toetsen wordt gelezen. Is er geen enkele toets ingedrukt, dan zijn alle bits (X) in de gelezen rij "hoog" ofwel 1. De ingedrukte toets zal een "laag" ofwel 0 tot gevolg hebben.

X7 X6 X5 X4 X3 X2 X1 X0

Y0 7 6 5 4 3 2 1 0

Y1 ; [ @ \ ^ - 9 8

Y2 B A _ / . ' ] :

Y3 J I H G F E D C

Y4 R Q P O N M L K

Y5 Z Y X W V U T S

Y6 f3 f2 f1 code cap grph ctrl shift

Y7 ret sel bs stop tab esc f5 f4

Y8 -> v ^ <- del ins home space

Y9 4 <E> 3 <E> 2 <E> 1 <E> 0 <E> vrij vrij vrij

Y10 . <E> , <E> - <E> 9 <E> 8 <E> 7 <E> 6 <E> 5 <E> 10. VT52 Escape sequences in MSX De beeldschermbesturing van de MSX is tot op zekere hoogte compatibel met de standaard VT52 Terminal. De door MSX ondersteunde VT52 escape sequences zijn: ESC A #27'A' Cursor omhoog ESC B #27'B' Cursor omlaag ESC C #27'C' Cursor rechts ESC D #27'D' Cursor links ESC E #27'E' Clear screen ESC H #27'H' Home ESC J #27'J' Wis vanaf cursor tot einde scherm ESC K #27'K' Wis vanaf cursor tot einde regel ESC L #27'L' Voegt een regel tussen ESC M #27'M' Wis een regel ESC j #27'j' Clear screen ESC l #27'l' Wis de hele regel ESC Y #27'Y'xx Cursor naar positie v,h Voorbeeld: ESC Y<v+32><h+32> = locate v,h ESC x4 #27'x4' Cursor is blok ESC y4 #27'y4' Cursor is lijn ESC x5 #27'x5' Cursor onzichtbaar ESC x6 #27'y5' Cursor zichtbaar

- 14 -

Page 19: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

11. Z80 interrupt modes De Z80 CPU kan in één van de volgende drie interrupt modes werken: Mode 0 Indien de CPU in deze moide is, kan het "device", dat de interrupt genereert, iedere gewenste instructie op de databus zetten en deze instructie door

de CPU latenm uitvoeren. Mode 1 In deze mode zal de CPU op een interrupt reageren door automatisch een RST-instructie uit te voeren. Deze RST instructie zal een "restart op adres

$0038 ten gevolge hebben. De oude inhoud van de programma teller PC wordt op de stack geschreven. Mode 2 In deze mode kan een inirecte sprong naar ieder gewenst geheugenadres worden gemaakt. de CPU vormt een adres uit de inhoud van het I-register

(msb) en een byte dat door het "device", dat de interrupt genereert, wordt verstrekt (lsb). Dit gevormde adres wijst naar de eerste byte van een twee bytes veld. Dat veld wijst naar een service routine. De CPU zal deze service routine automatisch starten.

12. Z80 registers

Hoofdregisterset Hulpregisterset

accumulator A

vlaggen F

accumulator A'

vlaggen F'

B C B' C'

D E D' E'

H L H' L'

interrupt vector I

Memory refresh R

Index IX Index IY

PC

Accumulator en vlagregisters. De Z80 CPU bevat twee onafhankelijke 8-bits A-registers met bijbehorende vlagregisters. De accumulator bevat het resultaat van 8-bits rekenkundige of logische bewerkingen, terwijl het vlagregister specifieke conditiets voor 8 en 16 bits bewerkingen bevat, zoals het aangeven of het resultaat van een bewerking al of niet 0 is. De programmeur kan zelf kiezen welk paar (accumulator + vlagregister) hij wil gebruiken, door gebruik te maken van een ecchange-instructie. Algemene registers. Er zijn twee sets van ieder zes 8-bits registers. Deze registers kunnen als afzonderlijke 8-bits registers of als drie paren van 16-bits registers worden gebruikt. De programmeur kan een van beide sets selecteren met behulp van exchange instructies. Het I-Register. Het I-register wordt in interrupt mode 2 gebruikt om er de 8 meest significante adresbits, van het 16-bits indirecte adres, uit te lezen. De 8 minst significante adresbits worden door het "device" dat de interrupt veroorzaakt gegeven. Het R-Register. Het R-register werkt als een teller, die automatisch wordt verhoogd. De inhoud van de teller wordt op de minst significante adresbits gezet, samen met een refresch-control signaal. Normaliter wordt dit register niet door de programmeur gebruikt.

- 15 -

Page 20: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

Index registers IX en IY. Deze registers worden in de "Indexed adressing mode" gebruikt. Ze bevatten een 16-bits adres. De adressen in deze registers worden als basis-adres van een geheugengebied gebruikt. Deze registers zijn vooral handig bij het behandelen van tabellen.

- 16 -

Page 21: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

Stack-Pointer. Het 16-bits getal in dit register (SP) wijst naar de top van de stack. Deze stack heeft een LIFO-organisatie. Met behulp van de PUSH en POP-instructies kunnen gegevens op de stack worden gezet, of er van af worden gehaald. Program Counter. Het PC-register bevat een 16-bits adres van de instructie die uit het geheugen moet worden gelezen. Dit adres wordt na het inlezen van een instructie automatisch verhoogd naar het adres van de volgende instructier. Met behulp van spronginstructies kan het adres ook worden veranderd.

- 17 -

Page 22: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

13. BIOS Calls 13.1. Inleiding Voor de niet ML-programmeurs is deze tabel ook interessant. Weliswaar kunnen de meeste BIOS - de naam betekend Basic Input Output System - alleen maar vanuit een eigen ML-programma gebruikt worden, maar sommige zijn ook vanuit een Basic-programma toe te passen Parameters Of dat mogelijk is hangt voornamelijk af van het feit of de desbetreffende BIOS-entry parameters kent. Die parameters moeten dan via de proces-registers worden doorgegeven, en vanuit Basic lukt dat niet zo een-twee-drie. Vaak ook zal één BIOS-call een waarde opleveren in een van de Z80-registers, die dan in ML weer verder gebruikt kan worden. Alweer in Basic is dant niet zo simpel, maar wel mogelijk. Voorbeeld Een voorbeeld van een handige BIOS-call - zoals ze genoemd worden, is bijvoorbeeld INIFNK. Deze routine begin top adres &H003E, en dat is ook het adres wat aangeroepen moet worden om er gebruik van te maken. Wat INIFNK doet is simpel; de routine initialiseert de funtietoets teksten. Oftewel, na INIFNK aangeroepen te hebben zullen alle 10 de functietoetsen weer de normale teksten bevatten. Voor Basic programmeurs een handige zaak, met een enkele aanroep kan men zo de normale toestand herstellen, na afloop van een programma dat de Functie toetsen herdefinieerd. Om die INIFNK-routine te gebruikten is maar één enkele regel nodig: DEF USR=&H003E:PRINT USR(0) :' INIFNK-BIOS routine En ziedaar, de oude toestand is weer hersteld. Heel wat korter dan het herdefinieren van de functietoetsen met Basic-commando's niet waar? Technisch Nu zal ik niet voor iedere BIOS-routine gaan vertellen hoe deze nu gebruikt kan worden, zlef experimenteren is de beste manier. Wat ik nog wel even kwijt wil is wat technische informatie over de BIOS. In feite is iedere BIOS-routine alleen maar een sub-routine in machinetaal, die in het MSX-ROM is ingebakken door de fabrikant. Door nu naar zo'n ML-subroutine te springen kan de programmeur gebruik maken van de al in het geheugen aanwezige programma's. Daar komen echter wel een paar probelemen bij om de hoek kijken. Zo kan het gebeuren dat de ROM's wat veranderen, zoals bij de overgang van MSX1 naar MSX2 gebeurd is. Dat houdt in dat de zonet genoemde INIFNK-routine opeens van adres kan veranderen. En zonder het juiste adres te weten gaat het niet.

Net zoals in Basic een subroutine met een regelnummer moet worden aangesproken, zo moet in ML het absolute adres bekend zijn. Als dat adres op de ene computer anders is dan op de andere, dan zal een programma dat gebruik maakt van die routine op de afwijkende machine niet werken. Meestal blijft de computer dan 'hangen'. Vandaar dat er binnen de MSX-definitie de belangrijkste van de ROM-routines binnen de BIOS zijn samengebracht. Het BIOS. Nu kunnen de werkelijke adressen waar die in de BIOS opgenomen routines beginnen best eens veranderen. Een nieuwer ROM-versie, en al die programma's die van de BIOS gebruik maken worden aangepast. Tabel Dat zagen de ontwerpers van de MSX-standaard ook al aankomen, vandaar dat er een truuk is toegepast om dergelijke problemen te omzeilen. De BIOS-routines mogen namelijk nimmer rechtstreeks aangeroepen worden - lees : met hun werkelijke adres in het geheugen - maar dienen altijd via een sprong-tabel te worden gebruikt. Die tabel bevat voor iedere BIOS-routine dan het werkelijke adres, enn aangezien die tabel in hetzelfde ROM is opgenomen als de routines zelf, kan een fabrikant deze tabel makkelijk aanpassen aan de situatie. Met andere woorden, wie de INIFNK-routine gebruikt springt weliswaar in de eerste instantie naar adres &H003E, maar daar staat alleen maar de volgende sprong. Een sprong die naar het werkelijke adres van de INIFNK-code verwijst. Maar als programmeur heeft u daar gelukkig niets mee te maken. Als u zich netjes aan de verwij tabel houdt, en geen sprongen naar andere ROM-adressen maakt, dan zal uw programma altijd op iedere MSX-computer lopen. Wat men ook aan de ROM-routines sleutelt bij de fabrikanten, die BIOS tabel is gegarandeerd goed. Opbouw Na deze inleiding de tabel zelf. De opbouw is simpel, van iedere routine vermelden we de naam, het adres, de funktie, de parameters, de resultaten, welke registers gewijzigd worden en eventuele opmerkingen. Die naam overigens heeft geen echte betekenis, maar is meer als dokumentatie bedoeld. Als iedere programmeur nu altijd de naam van de gebruikte routines duidelijk vermeldt weet iedereen altijd waar hij of zij aan toe is. Zo's naam is makkelijker te onthouden dan een adres. Ook Assembleres willen wel eens met de gegeven namen werken. Intern Het feit dat er bij sommige functies geen parameters vermeld zijn wil nog niet zeggen dat ze niet benodigd zijn, er bestaan ook interne routine's. Deze zijn eigenlijk alleen voor andere BIOS-routine's bedoeld. Alleen als er achter parameters geen staat zijn er ook geen parameters.

- 18 -

Page 23: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

13.2. Slot operaties &H0000 CHKRAM Functie: Start de initialisatie van de computer (softreset) en controleert het RAM Parameters: Geen Resultaat: Geen Wijzijgt: Alle Opmerking: Wanneer dit gebeurd is, moet een sprong naar INIT gemaakt worden voor verdere initialisatie &H0004 CGTABL Functie: Verwijst naar de karakter generator tabel &H0006 VDP.DR Functie: Verwijst naar de VDP data-leespoort (I/O adres) &H0007 VDP.DW Functie: Verwijst naar de VDP data-schrijfpoort(I/O adres) Opmerking: Status leespoort data lees-poortadres +1 commando schrijfpoort data schrijfpoortadres +1 palette schrijfpoort data schrijfpoort +2 indirecte toeganspoort data schrijfpoortadres +3 &H0008 SYNCHR Functie: Kijkt of het karakter waar HL naar verwijst degene is welke we willen. Als dat niet het geval is, dan wordt er een

'syntax error' gegenereerd. Is het wel het geval, dan wordt er naar chrgtr (0010H) gesprongen. Parameters: HL, het karakter dat moet worden vergeleken, moet slaan op de volgende lokatie na deze RST. Resultaat: HL verwijst naar het volgende karakter, A bevat het waarde van het karakter. Carry vlag gezet als getal, Z vlag gezet als einde statement Wijzigt: AF, DE &H000C SLSLT Functie: Selecteert het in register A aangegeven slot permanent. Parameters: A: Slotnummer Resultaat: A, E: de naar HL verwijzende slot waarde Wijzijgt: Alle &H0010 CHRGTR Functie: Haalt het volgende teken -of token- van BASIC tekst Parameters: HL: adres van laatste teken Resultaat: HL wijst naar het volgende teken, A bevat het teken. Zet carryflag indien het een nummer is en een Z-vlag indien einde

van een statement is bereikt Wijzigt: AF, HL &H0014 WRSLT Functie: Selecteert het in register A aangegeven slot en schrijft naar het geheugen in dit slot. Na uitvoering van deze routine zijn

interrupts gedisabled. Parameters: A : zie RDSLT HL: geheugenadres E : Code van het te schrijven teken Resultaat: Geen Wijzigt: AF, BC, D &H0018 OUTDO [BASIC] Functie: Uitvoer naar het huidige uitvoerkanaal (printer, diskfile). Parameters: A, PTRFIL, PTRFLG Resultaat: Geen

- 19 -

Page 24: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

Wijzigt: Geen Opmerking: Deze functie wordt gebruikt door BASIC, maar is in ML ook mogelijk alleen zeer lastig. &H001C CALSLT Functie: Voert een inter-slot CALL uit naar het in IX aangegeven adres in het IY aangegeven slot. Na uitvoering van deze

routine zijn interrupts gedisabled. Parameters: IY(high): (zie RDSLT register A:) IX: het CALL-adres Result: Afhankelijk van de CALL Wijzigt: Idem Opmerking: Na aanroepen van deze routine wordt het commando 'EI' aanbevolen. [FAF8] bevat het slotnummer van het SUB-ROM (MSX-2). Argumenten kunnen nooit worden doorgegeven met de alternatieve registerset van de Z80, of IX en IY.

- 20 -

Page 25: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

&H0020 DCOMPR Fucntie: DE en HL worden met elkaar vergeleken. DE en HL worden niet veranderd. Parameters: HL, DE Resultaat: Vlaggen Wijzigt: AF &H0024 ENASLT Functie: Selecteert het in register A aangegeven slot en activeert dat slot permanent. Na uitvoering van deze routine zijn

interrupts gedisabled. Parameters: A : zie RDSLT HL: geheuhenadres Wijzigt: Alle registers Opmerking: Na aanroepen van deze routine wordt het commando 'EI' aanbevolen. &H0028 GETYPR Functie: Geeft het type van FAC. Parameters: FAC Resultaat: Vlaggen Wijzigt: AF De volgende 5 bytes zijn gereserveerd om MSX gegevens op te slaan. &H002B bit 3 Soort karakter generator, Japans (0), Internationaal (1) bit 4/5 Datum formaat: 00 : JJ/MM/DD 01 : MM/DD/JJ 02 : DD/MM/JJ bit 6 Frequentie van de interrupt 01 : 50 Hertz 02 : 60 Hertz &H002C bit 4-7 Versie van de Basic bit 0-3 Soort toetsenbord 00 : Japans 01 : Internationaal 02 : Frans 03 : UK 04 : Duits (DIN) &H002D Voor MSX2 is de waarde 1. &H0030 CALLF Functie: Voert far-call uit Parameters: Geen Resultaat: Flags Opmerking: De manier van aanroepen is als volgt: RST6 DB bestemming slot DW bestemming adres Voor een exacte beschrijviong van de parameters, zie CALSLT &H0038 KEYINT Functie: Voert hardware interrupt procedures uit, onder andere afhandelen van het toetsenbord. Parameters: Geen Resultaat: Geen Wijzigt: Geen 13.3. I/O initialisatie

- 21 -

Page 26: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

&H003B INITIO Functie: Voert initialisatie van randapparatuur uit. VDP(7)=&H80 en OUT &H90, &HFF Parameters: Geen Resultaat: Geen Wijzigt: Alle &H003E INIFNK Functie: Initialissert de functietoetsen (kent de default waarden toe aan de toetsen). Parameters: Geen Resultaat: Geen Wijzigt: Alle registers

- 22 -

Page 27: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

13.4. Video Display Processor &H0041 DISSCR Functie: Verhindert de schermweergave. Parameters: Geen Resultaat: Geen Wijzigt: AF, BC &H0044 ENASCR Functie: Laat schermweergave toe. Parameters: Geen Resultaat: Geen Wijzigt AF,BC &H0047 WRTVDP Functie: Schrijft naar een VDP register. Parameters: B : te schrijven data C : te beschrijven VDP-register Resultaat: Geen Wijzigt: AF,BC &H004A RDVRM Functie: Leest het in registerpaar HL aangegeven adres uit het Video RAM. Parameters: HL: adres in VRAM Resultaat: A: inhoud van VRAM-adres Wijzigt: AF &H004D WRTVRM Functie: Schrijft naar VRAM. Parameters: HL: te beschrijven VRAM-adres A : te beschrijven data Resultaat: Geen Wijzigt: AF &H0050 SETRD Functie: Maakt de VDP gereed om te lezen Parameters: HL: startadres Resultaat: Geen Wijzigt: AF &H0053 SETWRT Functie: Maakt de VDP gereed om te schrijven. Parameters: HL: beginadres Resultaat: Geen Wijzigt: AF &H0056 FillVram Functie: Vult het video-RAM met de in de register A aangegeven data. Parameters: HL: VRAM-adres BC: lengte A : code van het teken Resultaat: Geen Wijzigt: AF, BC Opmerking: Van HL worden maar 14 bits gebruikt. (16k max) &H0059 VRAM-->>RAM Functie: Verplaatst een blok vanuit het VRAM naar het geheugen.

- 23 -

Page 28: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

Parameters: HL: startadres van het blok in het VRam. DE: startadres van het blok in het RAM BC: lengte van het blok Resultaat Geen Wijzigt: Alle Opmerking: Van HL worden maar 14 bits gebruikt. (16k max.) &H005C RAM-->>VRAM Functie: Verplaatst een blok vanuit het RAM naar het VRAM Parameters: HL: startadres van het blok in het RAM DE: startadres van het blok in het VRAM BC: lengte van het blok Resultaat: Geen Wijzigt Alle Opmerking: Van DE worden maar 14 bits gebruikt. (16k max.)

- 24 -

Page 29: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

&H005F CHGMOD Functie: Zet scherm-mode Parameters: A : Screenmode (&HFCAF) Resultaat: ??? Wijzigt: Alle registers &H0062 CHGCLR Functie: Zet kleuren Parameters: Voorgrondkleur (&HF3E9) Achtergrondkleur (&HF3EA) Borderkleur (&HF3EB) Resultaat: Geen Wijzigt: Alle &H0066 NMI Functie: Voert een niet maskeerbare interrupt uit. &H0069 CLRSPR Functie: Initialiseert alle sprites. Sprite patronen worden geleeegd, sprite namen worden gelijk gemaakt met sprite-vlak nummers,

sprite kleuren worden gelijk gemaakt aan voorgrond kleuren, verticale posities worden gesteld op 209 Parameters: SCRMOD Resultaat: Geen Wijzigt: Alle &H006C INITXT Functie: Initialiseert het scherm voor (40*24) tekstmodes en stelt de VDP in. Parameters: TXTNAM, TXTCGP Resultaat: Geen Wijzigt: Alle &H006F INITR32 Functie: Initialiseert het scherm voor tekstmodes (32*24) en stelt de VDP in. Parameters: T32NAM, T32CGP, T32COL, T32ATR, T32PAT Resultaat: Geen Wijzigt: Alle &H0072 INIGRP Functie: Initialiseert het scherm voor hoge resolutie modes en stelt de VDP in. Parameters: GRPNAM, GRPCGP, GRPCOL, GRPATR, GRPPAT Resultaat: Geen Wijzigt: Alle &H0075 INIMLT Functie: Initialiseert het scherm voor multicolor modes en stelt de VDP in. Parameters: MLTNAM, MLTCGP, MLTCOL, MLTATR, MLTPAT Resultaat: Geen Wijzigt: Alle &H0078 SETTXT &H007B SETT32 &H007E SETGRP &H0081 SETMLT Bij voorgaande 4 functies worden de BASE-registers geacht gevuld te zijn zoals in INITXT, INITR32, INIGRP, INIMLT. Functie: Stelt de VDP in voor xxx Resultaat: Geen Wijzigt: Alles

- 25 -

Page 30: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

&H0084 CALPAT Functie: Levert het startadres van de sprite patronen tabel op in registerpaar HL. Parameters: in A het Sprite nummer Resultaat: In HL het startadres van sprite-patroontabel Wijzigt: AF, DE, HL &H0087 CALATR Functie: Levert het startadres van de sprite attributentabel op in registerpaar HL. Parameters: [A] Sprite nummer Resultaat: [HL] Startadres van de sprite attributentabel Wijzigt: [AF], [DE], [HL]

- 26 -

Page 31: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

&H008A GSPSIZ Functie: Zet sprite grootte Parameters: [A] Spritegrootte Resultaat: Carry Flag set : 16*16 Sprite Wijzigt: AF &H008D GRPPRT Functie: Drukt een teken af op het grafische scherm. Parameters: [A] Code van af te drukken teken Resultaat: Geen Opmerking: Scherm-mode 2,3 13.5. PSG-besturing &H0090 GICINI Functie: Initialissert de geluidsprocessor (PSG) en vaste gegevens voor het PLAY-commando. Parameters: Geen Resultaat: Geen Wijzigt: Alle &H0093 WRTPSG Functie: Schrijft gegevens in de registers van de geluidsprocessor (PSG). Parameters: [A] nummer van het PSG-register [E] de te schrijven waarde Resultaat: Geen Basic Sound A,E &H0096 RDPSG Functie: Leest de registers van de geluidsprocessor. Parameters: [A] nummer van het PSG-register Resultaat: [E] de gelezen waarde &H0099 STRTMS Functie: Start de achtergrondmuziek Parameters: Geen Resultaat: Geen Wijzigt: Alle 13.6. Toetsenbord/beeldscherm aansturing &H009C CHSNS Functie: Kontroleert de status van de toetsenbord buffer Parameters: Geen Resultaat: Z-Flag reset indien er een karakter in de buffer aanwezig is Wijzigt: AF &H009F CHGET Functie: Wacht op invoer van het toetsenbord. Parameters: Geen Resultaat: In [A] het ingevoerde teken Wijzigt: AF &H00A2 CHPUT Functie: Stuurt teken naar console (scherm) Parameters: [A] Code van het af te drukken teken Resultaat: Geen

- 27 -

Page 32: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

Wijzigt: Geen &H00A5 LPTOUT Functie: Drukt een teken af op de printer Parameters: [A] Code van het af te drukken teken Resultaat: Carry-flag : 0 is normaal verzonden Carry-flag : 1 is niet verzonden Wijzigt F &H00A8 LPTSTT Functie: Controleert de status van de printer Parameters: Geen Resultaat: Als [A]=255 dan is printer klaar anders niet Als Zero-flag set dan is printer klaar anders niet Wijzigt: [AF]

- 28 -

Page 33: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

&H00AB CNVCHR Functie: Kontroleert op grafisch voorloop byte en konverteert codes. Parameters: Karaktercode in [A] Resultaat: Carry gflag reset : Grafische voorloop byte Carry en Zero vlag gezet; gekonverteerde grafische code. Indien Carry flag gezet, Zero vlag gereset, niet gekonverteerde code. Wijzigt: AF &H00AE PINLIN Functie: Leest invoer vanaf het toetsenbord in een buffer, totdat een <CR> of <STOP> toets is ingedrukt. Parameters: Geen Resultaat: [HL] startadres van het buffer -1 Carry-flag 0 is <Return> 1 is <Stop> Wijzigt: Alle &H00B1 INLIN Functie: Zelfde als PINLIN, behalve wanneer AUTFLG word gezet Parameters: Geen Resultaat: [HL] startadres van het buffer -1 Carry-flag 0 is <Return> 1 is <Stop> Wijzigt: Alle &H00B4 QINLIN Functie: Schrijft een vraagteken en een spatie naar het beeldscherm en doet daarna exact het zelfde als PINLIN. Parameters: Geen Resultaat: [HL] startadres van het buffer -1 Carry-flag 0 is <Return> 1 is <Stop> Wijzigt: Alle &H00B7 BREAKX Functie: Ctrl-Stop controle Parameters: Geen Resultaat: C-Flag 1 : Ctrl/Stop ingedrukt C-Flag 0 : Niet ingedrukt Wijzigt: Geen Opmerking: Deze routine wordt gebruikt om de Control-STOP te kontroleren indien de interrupts niet werken. &H00BA ISCNTC Functie: Controleert de status van de SHIFT-STOP toets Parameters: Geen Resultaat: Geen Wijzigt: Geen &H00BD CKCNTC [BASIC] Functie: Zelfde als ISCNTC &H00C0 Beep Functie: Geeft een Beep Parameters: Geen Resultaat: Geen Wijzigt: Alles

- 29 -

Page 34: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

Opmerking: Na de Beep stopt de achtergrondmuziek (in basic). &H00C3 Cls Functie: Wist het beeldscherm Parameters: Geen Resultaat: Geen Wijzigt: [AF], [BC], [DE]

- 30 -

Page 35: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

&H00C6 POSIT Functie: Positioneert de cursor op de aangegeven plaats. Parameters [H] kolomnummer (y) [L] rijnummer (x) Resultaat: Geen Wijzigt: [AF] &H00C9 CHKFNK Functie: Zet functietoetsen aan als ze aan moeten. Parameters: Geen Resultaat: Geen Wijzigt: alle &H00CC ERAFNK Functie: Wist functie toetsen display Parameters: Geen Resultaat: Geen Wijzigt: alle &H00CF DSPFNK Functie: Laat functie toetsen display zien Parameters: Geen Resultaat: Geen Wijzigt: alle &H00D2 TOTEXT Functie: Zet het beeldscherm in tekstmode. Parameters: Geen Resultaat: Geen Wijzigt: alle 13.7. Joystick poorten &H00D5 GTSTCK Functie: Geeft de status van de aangegeven joy-stick. Parameters: [A]=Joy-stick nummer Resultaat: [A]=Richtingnummer Wijzigt Alle &H00D8 GTTRIG Functie: Geeft de status van de aangegeven actieknop Parameters: [A]=Actieknopnummer Resultaat: [A] 0 is niet ingedrukt 255 is wel ingedrukt Wijzigt: AF &H00DB GTPAD Functie: controleert de huidige toutchpad status PArameters: ID in [A] Resultaat: Waarde in [A] Wijzigt: Alle &H00DE GTPDL Functie: Geeft de waarde van de paddle Parameters: Paddle ID in [A] Resultaat: Waarde in [A]

- 31 -

Page 36: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

Wijzigt: Alle 13.8. Tape functies De volgende functies werken niet op een MSX2+, hier zijn andere functies geplaats die hier niet nader behandeld worden (deze hebben vooral betrekking op de MSX2+ schermen 9 t/m 12). &H00E1 TAPION Functie: Zet de casseterecordermotor aan en leest een header van de cassette. Parameters: Geen Resultaat: Carry-flag 0 is normaal gelezen 1 is lezen afgebroken Wijzigt: alle

- 32 -

Page 37: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

&H00E4 TAPIN Functie: Leest gegevens van cassette. Parameters: Geen Resultaat: A : het gelezen byte Carry-flag 0 is normaal gelezen 1 is lezen onderbroken Wijzigt: alle &H00E7 TAPIOF Functie: Stopt het lezen van de cassette. Parameters: Geen Resultaat: Geen Wijzigt: Geen &H00EA TAPOON Functie: Start de cassetterecordermotor en schrijft de header naar cassette. Parameters: [A] 0 is korte header 1 is lange header Resultaat Carry-Flag 0 is normaal geschreven 1 is schrijven onderbroken Wijzigt: Alle &H00ED TAPOUT Functie: Schrijft naar cassette. Parameters: [A] is de te schrijven byte Resultaat: Carry-flag 0 is normaal geschreven 1 is schrijven onderbroken Wijzigt: alle &H00F0 TAPOOF Functie: Stopt het schrijven naar cassette. Parameters: Geen Resultaat: Geen Wijzigt: Geen &H00F3 STMOTR Functie: Cassetterecordermotor besturing Parameters: [A] 0 is stop de motor 1 is start de motor 255 schakelt motor om Resultaat: Geen Wijzigt: AF 13.9. Wachtrijen &H00F6 LFTQ Functie: Levert het aantal bytes op dat nog in de wachtrij zit Parameters: Resultaat: Aantal bytes in [A] Wijzigt: Opmerking: Deze routine is intern &H00F9 PUTQ

- 33 -

Page 38: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

Functie: Plaatst een byte in de wachtrij Parameters: Resultaat: Wijzigt: Opmerking: Deze routine is intern 13.10. GENGRP, ADVGRP modules &H00FC RIGHTC Functie: Verplaatst de cursor op het grafisch scherm een pixel naar rechts. Parameters: Geen Resultaat: nieuwe coördinaten in GXPOS en GYPOS Wijzigt: Geen

- 34 -

Page 39: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

&H00FF LEFTC Functie: Verplaatst de cursor op het grafisch scherm een pixel naar links. Parameters: Geen Resultaat: nieuwe coördinaten in GXPOS en GYPOS Wijzigt: Geen &H0102 UPC Functie: Verplaatst de cursor op het grafisch scherm een pixel naar boven. Parameters: Geen Resultaat: nieuwe coördinaten in GXPOS en GYPOS Wijzigt: Geen &H0105 TUPC Functie: Test of UPC mogelijk is, indien dit zo is wordt UPC uitgevoerd Parameters: Resultaat: Carry flag wordt gezet indien de operatie buiten het scherm zaou eindigen Wijzigt: AF &H0108 DOWNC Functie: Verplaatst de cursor op het grafisch scherm een pixel naar beneden. Parameters: Geen Resultaat: nieuwe coördinaten in GXPOS en GYPOS Wijzigt: Geen &H010B TDOWNC Functie: Test op DOWNC mogelijk is en voert DOWNC uit indien mogelijk Parameters: Resultaat: Carry flag wordt gezet indien de operatie buiten het scherm zaou eindigen Wijzigt: AF &H010E SCALXY Functie: Schaalt de X en Y coördinaten Parameters: Resultaat: Wijzigt: &H0111 MAPXY Functie: Plaatst de cursor op het huidige cursor-adres Parameters: Resultaat: Wijzigt: &H0114 FETCHC Functie: Haalt de huidige cursor-adres en masker-patroon Parameters: Geen Resultaat: Cursor adres in [HL], masker-patroon in [A] Wijzigt: Geen &H0117 STOREC Functie: Slaat huidige cursor en masker-patroon op Parameters: Cursor-adres in [HL], masker-patroon in [A] Resultaat: Geen Wijzigt: Geen &H011A SETATR Functie: Zet attribute-byte

- 35 -

Page 40: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

Parameters: Resultaat: Wijzigt: &H011D READC Functie: Leest attribute byte vasn huidige beeldpunt Parameters: Resultaat: Wijzigt: &H01201 SETC Functie: Geeft huidie beeldpunt het gespecificeerde attribute byte Parameters: Resultaat: Wijzigt:

- 36 -

Page 41: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

&H0123 NSETCX Functie: Zet horizontale beeldpunten Parameters: Resultaat: Wijzigt: &H0126 GTASPC Functie: Haalt de beeld-verhoduingen op Parameters: Geen Resultaat: DE, HL Wijzigt: DE, HL &H0129 PNTINI Functie: initialiseert PAINT-functie Parameters: Resultaat: Wijzigt: &H012C SCANR Functie: Scant beeldpunten naar rechts Parameters: Resultaat: Wijzigt: &H012F SCANL Functie: Scant beeldpunten naar links Parameters: Resultaat: Wijzigt: 13.11. Primaire slot calls &H0132 CHGCAP Functie: wijzigt de status van de hoofdletter indicatielamp. Parameters: [A] =0 is lamp uit [A]<>0 is lamp aan Resultaat: Geen Wijzigt: AF &H0135 CHGSND Functie: Verandert de status van de 1 bit geluidspoort. Parameters: [A] =0 uit te zetten [A]<>0 niet aan Resultaat: Geen Wijzigt: AF &H0138 RSLREG Functie: Leest het primaire slot register. Parameters: geen. Resultaat: Resultaat in A. Wijzigt: A &H013B WSLREG Functie: Schrijft naar het primaire slot register Parameters: Waarde in A Resultaat: geen.

- 37 -

Page 42: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

Wijzigt: geen. &H013E RDVDP Functie: Leest het status-register van de videoprocessor. Parameters: geen. Resultaat: A : de inhoud van het statusregister Wijzigt: A &H0141 SNSMAT Functie: Leest de stand van de schakelaartjes van een gegeven rij van het toetsenbord. Parameters [A] Rijnummer Resultaat: [A] Binaire waarde van de 8 schakelaartjes. Als bit 0 dan toets ingedrukt. Wijzigt [AF] Opmerking: Zie toetsenbord-bijlage 13.12. I/O commando's &H0144 PHYDIO Functie: Voert I/O uit voor massa-opslag media zoals diskettes Parameters: ??? Resultaat.: ??? Wijzig.: ??? Opmerking: In de minimum configuratie is alleen een hook beschikbaar &H0147 FORMAT Functie: Initialiseert massa opslag media Parameters: ??? Resultaat: ??? Wijzigt: ??? Opmerking: In de mimimum configuratie is alleen een hook beschikbaar &H014A ISFLIO Functie: Controleert of I/O naar een randapparaat plaatsvindt Parameters: Geen Resultaat: Niet 0 indien bezig, anders 0 Wijzigt: AF &H014D OUTDLP Functie: Voert uit naar de printer Parameters: Code in [Acc] Resultaat: Geen Wijzigt: F Opmerking: Deze entry verschilt met LPTOUT in het volgende: 1) TABS worden geëxpandeerd tot spaties 2) Hirangana en graphics worden geconverteerd als een niet-MSX printer wordt gebruikt 3) Bij afbreken met Control-Stop wordt er een sprong naaar 'Devicxe I/O error' gemaakt. 13.13. Achtergrondmuziek &H0150 GETVCP Functie: Geef pointer naar muziek-wachtrij Parameters: Kanaalnummer in A Resultaat: Pointer (adres van wachtrij) in HL Wijzigt: AF Opmerking: Wordt alleen gebruikt om muziek te spelen op de achtergrond

- 38 -

Page 43: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

&H0153 GETVC2 Functie: Geef pointer naar variabele in wachtrij nummer VOICEN (byte op adres &HFB38). Parameters: Pointer in muziekbuffer in L Resultaat: Pointer in HL Wijzigt: AF Opmerking: Wordt alleen gebruikt om muziek te spelen op de achtergrond 13.14. Toetsenbordbuffer &H0156 KILBUF Functie: Wist het toetsenbordbuffer. Parameters: Geen Resultaat: Geen Wijzigt: HL

- 39 -

Page 44: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

13.15. SUB-ROM Opties [MSX-2] Naast de gewone BIOS-ROM, de zogenaamde MAIN ROM, heeft de MSX2 een tweede ROM met uitgebreide grafische en andere routine's. Deze tweede ROM wordt SUB-ROM genoemd en bevindt zich ook op de adres 0 en verder, evenals de MAIN-ROM. Daarom moet deze ROM op een ander slot zitten. Het Slotnummer - één byte - staat op adres &HFAF8, in wat tot nu toe gedocumenteerd is als de RS232 -wachtrij van 64 bytes. In feite zijn er dan ook twee series MSX2 BIOS-calls. De eerste reeks, van tien calls, vinden we in de MAIN-ROM, achter de al eerder beschreven MSX1 BIOS-Call's. Daar vonden we voorheen een gebied dat 'Hole' genoemd werd, ter lengte van 90 bytes, met als verklaring voor toekomstige uitbreiding. In een MSX2 is dat 'hole' gevuld met een aantal nieuwe entry's. Dit zijn met name een aantal routine's die met veranderingen van MSX1 naar MSX2, problemen konden geven, zoals de entry's die naar en van VRAM schrijven. Deze hebben opeens een groter adres-bereik, de hoogste twee bits van het VRAM adres-register zijn nu immers ook geldig.

Maar de bulk van de nieuwe routines treffen we toch aan in het SUB ROM. Om deze aan te roepen is er natuurlijk een speciale truc nodig, normaal gesproken treffen we op die adressen immers het MAIN ROM aan. Verreweg het makkelijkst en comfortabelst gaan die aanroepen via een speciale BIOS-entry, die daar speciaal voor bedoeld is. Op adres $015F terffen we een MSX2 BIOS-entry met de naam EXTROM aan, één van de nieuwe routines die in het MAIN ROM zijn ondergebracht. Door het juiste adres in register IX te laden kunnen we met een CALL $015F iedere gewenste SUB ROM routine uitvoeren. De overige registers dienen natuurlijk mer de parameters van de SUB-ROM functie gevuld te worden. Zie voor meer informatie het hoofdstuk MT-Help

&H0159 CALBAS [MSX-2] Functie: Voert far_call (de inter-slot call) uit naar de BASIC-interpreter Parameters: Adres in IX Resultaat: Afhandelen van aangeroepen functie Wijzigt: Idem &H015C SUBROM [MSX-2] Functie: Roept SUB-ROM Parameters: Adres van SUBROM-routine in IX. zie opmerking Resultaat: Hangt van aangeroepen functie af Wijzigt: Alternatieve registers, IY Opmerking: Gebruik van EXTROM of CALSLT is veel comfortabeler. PUSH IX eerst op de stapel. &H015F EXTROM [MSX-2] Functie: Roept SUB-ROM aan. Meest gebruikelijke manier Parameters: Adres van SUB-ROM-routine in IX Resultaat: Hangt van aangeroepen functie af Wijzigt: Alternatieve registers, IY Opmerking: SUB-ROM routine bijlage &H0162 CHKSLZ [MSX-2] Functie: Zoekt slots door naar SUB-ROM Parameters: Geen Resultaat: Geen Wijzigt: Alle

- 40 -

Page 45: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

13.16. VRAM Opties [MSX-2] &H0165 CHKNEW [MSX-2] Functie: Controleer scherm mode Parameters: Geen Resultaat: Carry-flag set als scherm 5-8 Wijzigt: AF &H0168 EOL [MSX-2] Functie: Maak rest van regel leeg. Cursor blijft staan Parameters: Kolom in H, regel in L Resultaat: Geen Wijzigt: Alle &H016B BIGFIL [MSX-2] Functie: Als FILVRM, maar kan heel VRAM bereiken, ook in schermmode 0 tot 3. FILVRM kan maar tot &H4000 Parameters: Adres VRAM in [HL] Adres RAM in [BC] Tekencode in [A] Resultaat: Geen Wijzigt: [AF], [BC] Opmerking: De parameters zijn bij FILVRM hetzelfde. &H016E NSETRD [MSX-2] Functie: Als SETRD, maar nu volledig VRAM bereik Parameters: Adres in HL Resultaat: Geen Wijzigt: AF &H0171 NSETWRT [MSX-2] Functie: ALS SETWRT, maar nu volledig VRAM bereik Parameters: Adres in [HL] Resultaat: Geen Wijzigt: [AF] &H0174 NRDVRM [MSX-2] Functie: Leest VRAM-adres als RDVRM. Volle 16 bits Parameters: Adres in HL Resultaat: Data in A Wijzigt: F &H0177 NWRVRM [MSX-2] Functie: Schrijft naar VRAM als WRVRM, volle 16 bits Parameters: Adres in HL, data in A Resultaat: Geen Wijzigt: AF

- 41 -

Page 46: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

- 42 -

Alfabetische BIOS lijst N AAM ADRES NAAM ADRES NAAM ADRES * BIGFIL &H016B CALATR &H0087 CALBAS &H0159 CALLF &H0030 CALPAT &H0084 CALSLT &H001C CHGCAP &H0132 CHGCLR &H0062 CHGET &H009F CHGMOD &H005F * CHKNEW &H0165 CHGSND &H0135 CHKRAM &H0000 * CHKSLZ &H0162 CHPUT &H00A2 CHRGTR &H0010 CHSNS &H009C CKCNTC &H00BD CLS &H00C3 CNVCHR &H00AB CTRLSTOP &H00B7 DCOMPR &H0020 DISSCR &H0041 DOWNC &H0108 DSPFNK &H00CF ENASCR &H0044 * EOL &H0168 ERASLT &H0024 ERAFNK &H00CC * EXTROM &H015F FETCHC &H0114 FILVRM &H0056 FORMAT &H0147 GETVCP &H0150 GETVC2 &H0153 GETYPR &H0028 GICINI &H0090 GRPPRT &H008D GTASPC &H0126

GTPAD &H00DB GTPDL &H00DE GTSTCK &H00D5 GTTRIG &H00D8 INIFNK &H003E INITIO &H003B INLIN &H00B1 ISCNTC &H00BA ISFLIO &H014A KILBUF &H0156 LDIRMV &H0059 LDIRVM &H005C LEFTC &H00FF LFTQ &H00F6 LPTOUT &H00A5 LPTSTT &H00A8 MAPXY &H0111 NMI &H0066 * NRDVRM &H0174 * NWRVRM &H0177 NSETCX &H0123 * NSETRD &H016E * NSETWRT &H0171 OUTDLP &H014D OUTDO &H0018 PHYDIO &H0144 PINLIN &H00AE PNTINI &H0129 POSIT &H00C6 PUTQ &H00F9 QINLIN &H00B4 RDPSG &H0096 RDSLT &H0008 RDVDP &H013E RDVRM &H004A READC &H011D RIGHTC &H00FC RSLREG &H0138 SCALXY &H010E

SCANL &H012F SCANR &H012C SETATR &H011A SETC &H0120 SNSMAT &H0141 STMOTR &H00F3 STVREC &H0117 * SUBROM &H015C TAPIN &H00E4 TAPIOF &H00E7 TAPION &H00E1 TAPOOF &H00F0 TAPOON &H00EA TAPOUT &H00ED TDOWNC &H010B TOTEXT &H00D2 TUPC &H0105 UPC &H0102 WRSLT &H0010 WRTPSG &H0093 WRTVDP &H0047 WRTVRM &H004D WSLREG &H013B

* MSX-2 bios calls.

Page 47: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

14. SUB-ROM-BIOS Calls SUB-ROM routines zitten alleen in een MSX-2 e.v. MSX-2 bevat 48k rom en een volledige MSX2+ tot 96k ROM. Omdat het ROM alleen in de eerste 2 pagina's kan en de tweede voor BASIC bestemd is moet er dus geschakelt worden tussen de pagina's. Zie hiervoor de bijlage over het aanroepen van het SUB-ROM (Ook voor MSX-DOS) * Staat er [BASIC!] achter de routine dan is deze voor basic gebruik. * Deze zijn dus niet te gebruiken vanuit gewoon MT! 14.1. Grafische routines. &H0069 PAINT [BASIC] Functie: Kleurt het grafisch scherm Parameters: [HL] bevat tekstpointer naar BASIC-token Resultaat: [HL] bevat nieuwe tekstpointer Wijzigt: Alle Opmerking: Voor scherm-mode 5, 6, 7 en 8 &H006D PSET [BASIC] Functie: Zet een punt Parameters: [HL] bevat tekstpointer naar BASIC-token Resultaat: [HL] bevat nieuwe tekstpointer Wijzigt: Alle Opmerking: Voor scherm-mode 5, 6, 7 en 8 &H0071 ATRSCN [BASIC] Functie: Scan kleur attribuut Parameters: [HL] bevat tekstpointer naar BASIC-token Resultaat: [HL] bevat nieuwe tekstpointer Wijzigt: Alle Opmerking: Voor scherm-mode 5, 6, 7 en 8 &H0075 GLINE [BASIC] Functie: Tekent een lijn Parameters: [HL] bevat tekstpointer naar BASIC-token Resultaat: [HL] bevat nieuwe tekstpointer Wijzigt: Alle Opmerking: Voor scherm-mode 5, 6, 7 en 8 &H0079 DOBOXF [BASIC] Functie: Tekent een gevulde driehoek Parameters: [HL] bevat tekstpointer naar BASIC-token Resultaat: [HL] bevat nieuwe tekstpointer Wijzigt: Alle Opmerking: Voor scherm-mode 5, 6, 7 en 8 &H007D DOLINE [BASIC] Functie: Tekent een lijn Parameters: [HL] bevat tekstpointer naar BASIC-token Resultaat: [HL] bevat nieuwe tekstpointer Wijzigt: Alle Opmerking: Voor scherm-mode 5, 6, 7 en 8 &H0081 BOXLIN [BASIC] Functie: Tekent een rechthoek Parameters: [HL] bevat tekstpointer naar BASIC-token

- 43 -

Page 48: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

Resultaat: [HL] bevat nieuwe tekstpointer Wijzigt: Alle Opmerking: Voor scherm-mode 5, 6, 7 en 8 &H0085 DOGRPH Functie: Tekent een lijn Parameters: Start in ([BC],[DE]) Eind in ([GXPOS], [GYPOS]) Attribuut in [ATRBYT] Logische operatie in [LOGOPR] Resultaat: Geen Wijzigt: AF Opmerking: Voor scherm-mode 5,6,7 en 8

- 44 -

Page 49: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

&H0089 GRPPRT Functie: Drukt een karakter af op het grafische scherm Paramaters: Karakter in A Attribuut in [ATRBYT] Logische operatie in [LOGOPR] Resultaat: Geen Wijzigt: Geen Opmerkingen: Voor scherm-mode 5, 6, 7 en 8 &H008D SCALXY Functie: Limiteert coördinaten tot de rand van het scherm ('Clipping') Paramaters: Horizontale positie in BC Verticale positie in DE Resultaat: Begrensde horizontale positie in BC Begrensde verticale positie in DE Wijzigt: AF &H0091 MAPXYC Functie: Converteert een X,Y-paar naar een adres en masker in CLOC en CMASK Parameters: De coördinaten in ([BC],[DE]) Resultaat: Scherm-mode 3: VRAM-adres in HL en CLOC, masker in A en CMASK Scherm-mode 5-8: Horizontale positie in HL en CLOC. Verticale positie in A en CMASK Wijzigt: F Opmerking: Voor scherm-mode 3, 5, 6, 7 of 8 14.2. Pixel routines &H0095 READC Functie: Leest attribuut van huidige pixel Parameters: Coordinaat in CLOC en CMASK Resultaat: Het attribuut in A Wijzigt: AF &H0099 SETATR Functie: Zet attribuut in ATRBYT Parameters: Het attribuut in A Resultaat: Carry-flag wordt geset bij een verkeerd attribuut Wijzigt: F &H009D SETC Functie: Zet attribuut van huidige pixel Parameters: Coördinaat in CLOC en CMASK Atribuut in ATRBYT Resultaat: Geen Wijzigt: AF Opmerking: Voor scherm-mode 3, 5, 6, 7 en 8 &H00A1 TRIGHT Functie: Verplaats een pixel naar rechts Parameters: Coördinaat in CLOC en CMASK Resultaat: Nieuwe coördinaat in CLOC en CMASK Carry-flag wordt geset wanneer het coördinaat zich aan de rand van het scherm bevindt. Deze wordt dan niet gewijzigd. Wijzigt: AF Opmerking: Alleen voor scherm-mode 3 &H00A5 RIGHTC

- 45 -

Page 50: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

Functie: Verplaats een pixel naar rechts Parameters: Coördinaat in CLOC en CMASK Resultaat: Nieuwe coördinaat in CLOC en CMASK Carry-flag wordt geset wanneer het coördinaat zich aan de rand van het scherm bevindt. Deze wordt dan niet gewijzigd. Wijzigt: AF Opmerking: Alleen voor scherm-mode 3

- 46 -

Page 51: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

&H00A9 TLEFTC Functie: Verplaats een pixel naar links Parameters: Coördinaat in CLOC en CMASK Resultaat: Nieuwe coördinaat in CLOC en CMASK Carry-flag wordt geset wanneer het coördinaat zich aan de rand van het scherm bevindt. Deze wordt dan niet gewijzigd. Wijzigt: [AF] Opmerking: Voor scherm-mode 3, 5, 6, 7 en 8 &H00AD LEFTC Functie: Verplaatst een pixel naar links Parameters: Coördinaat in CLOC en CMASK Resultaat: Nieuwe coördinaat in CLOC en CMASK Wijzigt: [AF] Opmerking: Alleen voor scherm-mode 3 &H00B1 TDOWNC Functie: Verplaatst een pixel naar beneden Parameters: Coördinaat in CLOC en CMASK Resultaat: Nieuwe coördinaat in CLOC en CMASK Wijzigt: [AF] Opmerking: Voor scherm-mode 3, 5, 6, 7 en 8 &H00B5 DOWNC Functie: Verplaatst een pixel omlaag Parameters: Coördinaat in CLOC en CMASK Resultaat: Nieuwe coördinaat in CLOC en CMASK Wijzigt: [AF] Opmerking: Alleen voor scherm-mode 3 &H00B9 TUPC Functie: Verplaats een pixel omhoog Parameters: Coördinaat in CLOC en CMASK Resultaat: Nieuwe coördinaat in CLOC en CMASK Wijzigt: [AF] Opmerking: Voor scherm-mode 3, 5, 6, 7 of 8 &H00BD UPC Functie: Verplaats een pixel omhoog Parameters: Coördinaat in CLOC en CMASK Resultaat: Nieuwe coördinaat in CLOC en CMASK Wijzigt: [AF] Opmerking: Alleen voor scherm-mode 3 &H00C1 SCANR Functie: Scant pixels naar rechts Parameters: 'Suspend'-vlag in [B], randtelling in [C] Resultaat: Randtelling in [DE], 'pixel veranderd' vlag in [C] Wijzigt: Alle Opmerking: Voor scherm-mode 3, 5, 6, 7 of 8 &H00C5 SCANL Functie: Scant pixels naar links Parameters: Randtelling in [DE] Resultaat: Randtelling in [DE], 'pixel veranderd' vlag in [C] Wijzigt: Alle Opmerking: Voor scherm-mode 5, 6, 7, 8 en in multi-color mode

- 47 -

Page 52: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

14.3. Rechthoeken &H00C9 NVBXLN Functie: Tekent een rechthoek Parameters: Start coördinaat in ([BC], [DE]) Eind coördinaat in (GXPOS, GYPOS) Attribuut code in ATRBYT Logische operatie in (LOGOPR) Resultaat: Geen Wijzigt: Alle Opmerking: Werkt in scherm-mode 5, 6, 7 of 8

- 48 -

Page 53: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

&H00CD NVBXFL Functie: Tekent een gevulde rechthoek Parameters: Start coördinaat in ([BC], [DE]) Eind coördinaat in (GXPOS, GYPOS) Attribuut code in ATRBYT Logische operatie in (LOGOPR) Resultaat: Geen Wijzigt: Alle Opmerking: Werkt in scherm-mode 5, 6, 7 of 8 14.4. Toegang VDP &H00D1 CHGMOD Functie: Schakelt VDP in mode SCRMOD Parameters: Scherm-mode in [A] (0-8) Resultaat: Geen Wijzigt: Alle &H00D5 INITXT Functie: Initialiseert scherm in voor tekst-mode 40*24, stelt VDP in Parameters: TXTNAM, TXTCGP Resultaat: Geen Wijzigt: Alle &H00D9 INIT32 Functie: Initialiseert scherm voor tekst mode 32*24, stelt VDP in Parameters: T32NAM, T32CGP, T32COl, T32ATR, T32PAT Resultaat: Geen Wijzigt: Alle &H00DD INIGRP Functie: Initialiseert scherm voor hoge resolutie mode, stelt VDP in Parameters: GRPNAM, GRPCGP, GRPCOL, GRPATR, GRPPAT Resultaat: Geen Wijzigt: Alle &H00E1 INIMLT Functie: Initialiseert scherm voor multi-color-mode (screen 3), stelt VDP in Parameters: MLTNAM, MLTCGP, MLTCOL, MLTATR, MLTPAT Resultaat: Geen Wijzigt: Alle &H00E5 SETTXT Functie: Stelt de VDP in voor tekst-mode 40*24 Parameters: TXTNAM, TXTVGP Resultaat: Geen Wijzigt: Alle &H00E9 SETT32 Functie: Stelt de VDP in voor tekst-mode 32*24 Parameters: T32NAM, T32CGP, T32COl, T32ATR, T32PAT Resultaat: Geen Wijzigt: Alle &H00ED SETGRP Functie: Stelt de VDP in voor hoge resolutie scherm

- 49 -

Page 54: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

Parameters: GRPNAM, GRPCGP, GRPCOL, GRPATR, GRPPAT Resultaat: Geen Wijzigt: Alle &H00F1 SETMLT Functie: Stelt de VDP in voor multi-color-mode (screen 3) Parameters: MLTNAM, MLTCGP, MLTCOL, MLTATR, MLTPAT Resultaat: Geen Wijzigt: Alle

- 50 -

Page 55: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

14.5. Sprites &H00F5 CLRSPR Functie: Initialiseert alle sprites Patronen worden op 0 gezet, sprite-nummers worden gezet op sprite-vlakken. Sprite kleur wordt gezet op

voorgrondkleur, verticale posities worden gezet op 217 Parameters: (SCRMOD) Resultaat: Geen Wijzijgt: Alle &H00F9 CALPAT Functie: Geeft adres van sprite patroon-tabel terug Parameters: Sprite ID in [A] Resultaat: Adres in [HL] Wijzigt: [AF], [DE], [HL] Opmerking: Deze routine is equivalent aan MSX1 BIOS &H00FD CALATR Functie: Geeft adres van sprite attribuut-tabel Parameters: Sprite ID in [HL] Resultaat: Adres in [HL] Wijzigt: [AF], [DE], [HL] Opmerking: Deze routine is equivalent aan MSX1 BIOS &H0101 GSPSIZ Functie: Geeft huidige sprite-grootte Parameters: Geen Resultaat: Sprite-grootte (bytes) in [A] Carry gezet bij 16*16 sprite Wijzigt: [AF] Opmerking: Deze routine is equivalent aan MSX1 BIOS 14.6. Diversen, VRAM-routines &H0105 GETPAT Functie: Geeft een karakterpatroon Parameters: ASCII-code in [A] Resultaat: Patroon in PATWRK, adres FC40 Wijzigt: Alle Opmerking: Deze routine is equivalent aan MSX1 BIOS, maar bestaat daar niet als BIOS-aanroep! &H0109 WRTVRM Functie: Schrijft naar VRAM Parameters: Adres VRAM in [HL], data in [A] Resultaat: Geen Wijzigt: [AF] Opmerking: Ondersteunt 16-bits, adres 0 - FFFF &H010D RDVRM Functie: Leest VRAM Parameters: Adres in [HL] Resultaat: Data in [A] Wijzigt: [AF] Opmerking: Ondersteunt 16-bits, adres 0 - FFFF &H0111 CHGCLR

- 51 -

Page 56: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

Functie: Veranderd kleur van scherm Parameters: Scherm-mode in [A] Kleuren in FORCLR, BAKCLR, BDRCLR Resultaat: Geen Wijzigt: Alle &H0115 CLS Functie: Maakt scherm schoon Parameters: Geen Resultaat: Geen Wijzigt: Alle

- 52 -

Page 57: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

&H0119 CLRTXT Functie: Maakt het tekst-scherm schoon Parameters: Geen Resultaat: Geen Wijzigt: Alle &H011D DSPFNK Functie: Schakelt functietoetsen aan [Key on] Parameters: Geen Resultaat: Geen Wijzigt: Alle &H0121 DELLNO Functie: Verwijdert een regel in tekst-mode Parameters: Regel-nummer in [L] Resultaat: Geen Wijzigt: Alle &H0125 INSLNO Functie: Voegt regel tussen in tekst-mode Parameters: Regel-nummer in [L] Resultaat: Geen Wijzigt: Alle &H0129 PUTVRM Functie: Zet een karakter op tekst-scherm Parameters: Regelnummer in [L], kolomnummer in [H] Resultaat: Geen Wijzigt: [AF], [BC] &H012D WRTVDP Functie: Schrijft naar VDP register Parameters: Register in [C], data in [B] Resultaat: Geen Wijzigt: [AF], [BC] &H0131 VDPSTA Functie: Leest VDP status Parameters: Status-register in [A] (0-9) Resultaat: Data in [A] Wijzigt: [F] &H0135 KYKKLOK Functie: Bestuur Kana-toets en -lamp (Japan) Parameters: ??? Resultaat: ??? Wijzigt: [AF] &H0139 PUTCHR Functie: Haalt een toets-code van toetsenbord, converteert het naar een Kana-karakter, en stopt het in de buffer (Japan) Parameters: Zero-vlag wordt gezet indien niet in conversie-mode Resultaat: Geen Wijzigt: Alle &H013D SETPAG Functie: Stelt VDP register in op pagina wissel

- 53 -

Page 58: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

Parameters: (ACPAGE, DPPAGE) Resultaat: Geen Wijzigt: AF

- 54 -

Page 59: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

14.7. Palette-functies Het VDP-palette heeft 3 kleuren: rood, groen en blauw. Eklke kleur heeft 3 bits om de intensiteit van de kleur weer te geven. Het huidige palette wordt opgeslagen in VRAM, omdat het niet te lezen is uit de VDP. &H0141 INIPLT Functie: Initialiseert palette en VRAM voor opslag van palette Parameters: Geen Resultaat: Geen Wijzigt: [AF],[BC],[DE] &H0145 RSTPLT Functie: Stelt palette opnieuw in vanuit VRAM Parameters: Geen Resultaat: Geen Wijzigt: [AF],[BC],[DE] Opmerking: Is gelijk aan color=Restore &H0149 GETPLT Functie: Haalt kleur-codes van palette Parameters: Kleur in [A] (0-15) Resultaat: Rood code in hoogste 4 bits van [B] Blauw code in laagste 4 bits van [B] Groen code in laagste 4 bits van [C] Wijzigt: [AF],[DE] &H014D SETPLT Functie: Zet kleur-codes in palette Parameters: Kleur in [D] (0-15) Rood code in hoogste 4 bits van [A] Blauw code in laagste 4 bits van [A] Groen code in laagste 4 bits van [E] Resultaat: Geen Wijzigt: [AF] 14.8. Basic Extended Statements Let op: weer alleen vanuit de Basic-interpreter &H0151 PUTSPR [BASIC] Functie: Zet sprites Parameters: Tekstpointer in [HL] Resultaat: Bijgewerkte tekstpointer in [HL] Wijzigt: Alle &H0155 COLOR [BASIC] Functie: Verandert scherm-kleur, sprite-kleur, palette Parameters: Tekstpointer in [HL] Resultaat: Bijgewerkte tekstpointer in [HL] Wijzigt: Alle &H0159 SCREEN [BASIC] Functie: Verandert scherm-mode Parameters: Tekstpointer in [HL] Resultaat: Bijgewerkte tekstpointer in [HL] Wijzigt: Alle

- 55 -

Page 60: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

&H015D WIDTHS [BASIC] Functie: Verandert tekstscherm breedte Parameters: Tekstpointer in [HL] Resultaat: Bijgewerkte tekstpointer in [HL] Wijzigt: Alle &H0161 VDP [BASIC] Functie: Stelt VDP register in Parameters: Tekstpointer in [HL] Resultaat: Bijgewerkte tekstpointer in [HL] Wijzigt: Alle

- 56 -

Page 61: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

&H0165 VDPF [BASIC] Functie: Leest huidig VDP register in Parameters: Tekstpointer in [HL] Resultaat: Bijgewerkte tekstpointer in [HL] Wijzigt: Alle &H0169 BASE [BASIC] Functie: Stelt VDP base-register in Parameters: Tekstpointer in [HL] Resultaat: Bijgewerkte tekstpointer in [HL] Wijzigt: Alle &H016D BASEF [BASIC] Functie: Leest VDP base-register Parameters: Tekstpointer in [HL] Resultaat: Bijgewerkte tekstpointer in [HL] Wijzigt: Alle &H0171 VPOKE [BASIC] Functie: Schrijft een byte naar VRAM Parameters: Tekstpointer in [HL] Resultaat: Bijgewerkte tekstpointer in [HL] Wijzigt: Alle &H0175 VPEEK [BASIC] Functie: Leest een byte van VRAM Parameters: Tekstpointer in [HL] Resultaat: Bijgewerkte tekstpointer in [HL] Wijzigt: Alle &H0179 SETS Functie: Stelt beep in, Adjusting, tijd en datum Parameters: Tekstpointer in [HL] Resultaat: Bijgewerkte tekstpointer in [HL] Wijzigt: Alle 14.9. Diversen : Beep, Prompt &H017D BEEP Functie: Beep Parameters: Geen Resultaat: Geen Wijzigt: Alle &H0181 PROMPT Functie: Laat prompt zien (normaal 'Ok') Parameters: Geen Resultaat: Geen Wijzigt: Alle 14.10. Herstel scherm &H0185 SDFSCR Functie: Herstelt scherm-parameters vanuit RAM op klok-chip (batterij!). Als de carry-flag niet geset is bij aanroep vanuit MSX-

DOS worden de functietoetsen niet getoond Parameters: Carry is nul bij aanroep vanuit DOS

- 57 -

Page 62: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

Resultaat: Geen Wijzigt: Alle &H0189 SETSCR Functie: Herstelt scherm-parameters en print openings-boodschap Parameters: Geen Resultaat: Geen Wijzigt: Alle

- 58 -

Page 63: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

14.11. VRAM Data Transfer Functies Opmerking: Vanaf adres &HF562 moeten parameters klaar staan, zie hiervoor de bijlage over systeemvariabelen. &H018D SCOPY [BASIC] Functie: Kopieert VRAM, array en disk file Parameters: Tekstpointer in [HL] Resultaat: Bijgewerkte tekstpointer in [HL] Wijzigt: Alle &H0191 BLTVV Functie: Kopieert VRAM naar VRAM Parameters: [HL]=&HF562 SX,SY,DX,DY,NX,NY,ARG,L_OP gevraagd Resultaat: Geen Wijzigt: Alle &H0195: BLTVM Functie: Kopieert Main Ram naar VRAM Parameters: [HL]=&HF562 [SX]=Adres van array met scherm-data DX,DY,ARG, L_OP gevraagd. (NX,NY staan in de array) Resultaat: Carry-flag geset als fout in RAM-data Wijzigt: Alle &H0199 BLTMV Functie: Kopieert VRAM naar Main RAM Parameters: [HL]=&HF562 [DX]=adres van scherm data in RAM Verder : SX, SY, NX, NY, ARG Resultaat: Geen Wijzigt: Alle &H019D BLTVD Functie: Kopieert diskfile naar VRAM Parameters: [HL]=&HF562 [SX]=@Filename Verder: DX, DY, ARG, L_OP &H01A1 BLTDV Functie: Kopieert VRAM naar diskfile Parameters: [HL]=&HF562 [DX]=@Filename Verder SX,SY, NY, NX, ARG Resultaat: Geen Wijzigt: Alle &H01A5 BLTMD Functie: Laadt array-data van diskfile Parameters: [HL]=&HF562 [SX]=@Filename [DX]=Startadres (RAM) [DY]=Eind adres (RAM) Resultaat: Geen

- 59 -

Page 64: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

Wijzigt: Alle &H01A9 BLTDM Functie: Slaat array-data op naar diskfile Paramaters: [HL]=&HF562 [DX]=@Filename [SX]=Startadres (RAM) [SY]=Eindadres (RAM) Resultaat: Geen Wijzigt: Alle

- 60 -

Page 65: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

14.12. Muis en Trackball &H01AD NEWPAD Functie: Leest paddle, muis en trackball Parameters: Toegang via GTPAD in de BIOS (&H00DB). Procedure: Lees eerst van het apparaat, vraag dan de X en Y op. A (parameter) 8 Lees lichtpen (255 indien aanwezig) 9 Geef X-Coördinaat 10 Geef Y-Coördinaat 11 Geef lichtpen-status (255 indien aanwezig) 12 / 16 Lees muis/trackball aangesloten op poort 1 / 2 13 / 17 Geef X-Offset 14 / 18 Geef Y-Offset 15 / 19 Geen functie (altijd 0) Resultaat: Waarde in A Wijzigt: Alle 14.13. Diversen &H01B1 GETPUT [BASIC] Functie: GET TIME en GET DATE en PUT KANJI (Japan) Parameters: Tekstpointer in [HL] Resultaat: Bijgewerkte tekstpointer in [HL] Wijzigt: Alle &H01B5 CHGMDP Functie: Stelt VDP mode in op SCRMOD Parameters: Scherm-mode in [A] 0-8 Resultaat: Geen Wijzigt: Alle &H01B9 RESVI Functie: Wordt niet gebruikt. Reserve 14.14. Kanji Print &H01BD KNJPRT Functie: Zet een Kanji karakter op het grafische scherm (5-8) Parameters: [BC]= JIS Kanji karakter code [A] = display mode 0 = vol 1 = even 2 = oneven Resultaat: Geen Wijzigt: [AF] 14.15. Toegang tot klok-chip &H01F5 REDCLK Functie: Leest klok-data Parameters: [C] = Klok ram adres bit - 7 6 5 4 3 2 1 0 [C] = X X B1 B0 A3 A2 A1 A0

- 61 -

Page 66: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

Resultaat: [A] = gelezen data (laagste 4 bits) Wijzigt: [F] &H01F9 WRTCLK Functie: Schrijf klok data Parameters: Zie REDCLK Resultaat: Geen Wijzigt: [F]

- 62 -

Page 67: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

15. MT - HELP BIOS - CALL's kunnen altijd opgeroepen worden, dit geldt niet voor de SUB-BIOS-Calls in het SUB-ROM. Hiervoor moet men eerst het SUB-ROM aanspreken. Er zijn daarom drie manieren van aanroepen, in BASIC, MT of MSX-DOS 15.1. MT DD,21,nn,nn LD IX, [Adres of Sub-call] CD,5F,01 CALL &H015F 15.2. BASIC Dit moet ook gewoon in MT maar vergeet hierbij niet IX te bewaren en terug te halen. DD,E5 PUSH IX DD,21,5F,01 LD IX, [Adres of Sub-Call] CD,5F,01 CALL &H015F DD,E1 POP IX 15.3. MSX-DOS Het SUB-ROM kan nu niet gewoon aangesproken worden, dit moet op de volgende manier : DD,21,nn,nn LD IX, [Adres of Sub-Call] FD,21,F7,FA LD IY, &HFAF7 CD,1C,00 Call &H001C FB EI IY, wordt geladen met het slot-nummer van het SUB-ROM, dit bevindt zich op &HFAF8. In de Assembler-code is dit &HFAF7 omdat het hoge byte nodig is. Het assembler commando 'Enable interrupt (EI)' is nodig omdat de call naar &H001C (CALSLT) de interrupt wel uitzet maar deze niet aan. Doe je die niet dan kan je de computer niet meer gebruiken.

- 63 -

Page 68: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

16. Systeemboodschappen

Nr. Systeemboodschap Nr. Systeemboodschap

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24

NEXT without FOR Syntax error RETURN without GOSUB Out of DATA Illegal function call Overflow Out of memory Undefined line number Subscript out of range Redimensioned array Division by zero Illegal direct Type mismatch Out of string space String too long String formula too complex Can't continue Undefined user function Device I/O error Verify error no RESUME RESUME without error Unprintable error Missing operand

25 26- 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71

Line buffer overflow Unprintable errors Field overflow Internal error Bad file number File not found File already open Input past end Bad file name Direct statement Sequential I/O only File not open Bad FAT Bad file mode Bad drive name Bad sector number Fill still open File already exists Disk full Too many files Disk write protected Disk I/O error Disk off line Rename across disk

- 64 -

Page 69: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

17. Hooks Staat de naam van de HOOK tussen aanhalingstekens dan bevat HL een tekstpointer naar de BASIC-gegevens. Wordt er Hook From Titel, aktie evt. Extra informatie &HFD9A &H0C4A KEYI, Interrupt afhandeling. &HFD9F &H0C53 TIMI, Timer interrupt routine. &HFDA4 &H08C0 CHPUT, CHarachter outPUT routine.(beeldscherm) Gegevens: [A] bevat karakter Opm.: Alle registers mogen gewijzigd worden &HFDA9 &H09E6 DSPC, Display cursor routine (cursor aan). &HFDAE &H0A33 ERAC, Erase Cursor routine (cursor uit). &HFDB3 &H0B2B DSPF, Display Function key routine (beeldscherm). &HFDB8 &H0B15 ERAF, Aangeroepen aan het begin van de Erase Function key routine (beeldscherm). &HFDBD &H0842 TOTE, Aangeroepen aan het begin van de force screen TO TExt mode routine. &HFDC2 &H10CE CHGE, Aangeroepen aan het begin van de CHaracter GEt routine. (keyboard) Gegevens: Geen Opm.: Alle registers mogen veranderd worden. &HFDC7 &H071E INIP, Karakterset van ROM naar VRAM. &HFDCC &H1025 Key Coder routine, om andere tekens aan toetsen toe te kennen. &HFDD1 &H0F10 Key Easy Coder routine, om andere tekens aan toetsen toe te kennen. &HFDD6 &H1398 NMI, Non Maskable Interrupt rouitne aangeroepen. &HFDDB &H23BF PINLIN, Program input line routine (keyboard). &HFDE0 &H23CC QINLIN, Question mark and input line routine (keyboard). &HFDE5 &H23D5 INLIN, Input Line routine (keyboad). &HFDEA &H7810 "ON DEVICE GOSUB" &HFDEF &H7C16 "DSKO$", DiSK Output routine. &HFDF4 &H7C1B "SET", SET attributeS routine. &HFDF9 &HFC20 "NAME", reNAME routine. &HFDFE &H7C25 "KILL", KILL routine. &HFE03 &H7C2A "IPL", Initial Program Load. &HFE08 &H7C2F "COPY", COPY file routine. &HFE0D &H7C34 "CMD", CoMmanD routine. &HFE12 &H7C39 "DSKF", Disk Free routine. &HFE17 &H7C3E "DSKI$", Disk Input routine. &HFE1C &H7C43 "ATTR$", ATTRibute routine. &HFE21 &H7C48 "LSET", Left SET routine. &HFE26 &H7C4D "RSET", Right SET routine. &HFE2B &H7C52 "FIELD" : FIELd routine. &HFE30 &H7C57 "MKI$", Make Int routine. &HFE35 &H7C5C "MKS$", Make Single routine. &HFE3A &H7C61 "MKD$", Make Double routine. &HFE3F &H7C66 "CVI", ConVert Integer routine. &HFE44 &H7C6B "CVS", ConVert Single routine. &HFE49 &H7C70 "CVD", ConVert Double routine. &HFE4E &H6A93 "GETP", GET file Pointer routine. &HFE53 &H6AB3 "SETF", SET File pointer routine. &HFE58 &H6AF6 "NOFO", NO FOR clause routine. &HFE5D &H6B0F "NULO", NULl file Open routine. &HFE62 &H6B3B "NTFL", Not FiLe number 0 routine. &HFE67 &H6BB3 "MERG", MERGe program files. &HFE6C &H6BA6 "SAVE", SAVE routine. &HFE71 &H6BCE "BINS", BINary Save routine. &HFE76 &H6BD4 "BINL", BINary Load routine. &HFE7B &H6C2F "FILE", FILEs routine.

&HFE80 &H6C3B "DGET", Disk get routine. &HFE85 &H6C51 "FILO", File out routine. &HFE8A &H6C79 "INDS", Input disk routine. &HFE8F &H6CD8 "RSLF", Re-SeLect old drive. &HFE94 &H6D03 "SAVD", SAVe current Drive. &HFE99 &H6D03 "LOC", Location routine. &HFE9E &H6D20 "LOF", Lenght of file routine. &HFEA3 &H6D33 "EOF", End of file routine. &HFEA8 &H6D43 "FPOS", File position routine. &HFEAD &H6E26 "BAKU", Back up routine. ("LINE INPUT£")

- 65 -

Page 70: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

&HFEB2 &H6F15 PARD, PARse Device name om het aantal logische device namen te kunnen

uitbreiden. &HFEB7 &H6F33 NODE, NO DEvice routine om andere default devices te kunnen definiëren &HFEBC &H6F37 POSD, POSsibly Disk routine. &HFEC1 DEVN, DEVice name routine, om het aantal logische device namen te kunnen

uitbreiden. &HFEC6 &H6F8F GEND, GENeral Device dispatcher. om het aantal device namen te kunnen uitbrei-

den. &HFECB &H629A RUN-CLEAR &HFED0 &H62A1 RUN-CLEAR &HFED5 &H62AF RUN-CLEAR, LOPD, LOop and set Default routine, om andere

default waarde aan variabelen toe te kennen. &HFEDA &H62F0 Reset stapel &HFEDF &H145F ISFLIO routine &HFEE4 &H1B46 OUTDO routine &HFEE9 &H7328 CR, LF naar OUTDO &HFEEE &H7374 Hoofdlus line input &HFEF3 &H593C Lijn trekken &HFEF8 &H4039 Programma eind &HFEFD &H40DC ERROR controle &HFF02 &H40FD ERROR controle &HFF07 &H4128 Hoofdlus "Ok" &HFF0C &H4134 Hoofdlus &HFF11 &H41A8 Hoofdlus (directe invoer) &HFF16 &H4237 Hoofdlus beëindigd &HFF1B &H4247 Hoofdlus beëindigd &HFF20 &H42B9 Token vorming &HFF25 &H4353 Token vorming &HFF2A &H437C Token vorming &HFF2F &H43A4 Token vorming &HFF34 &H44EB Token vorming &HFF39 &H45D1 "FOR"

- 66 -

Page 71: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

&HFF3E &H4601 Runlus nieuw statement &HFF43 &H4646 Runlus uitvoeren &HFF48 &H4666 CHRGTR routine &HFF4D &H4821 "RETURN" &HFF52 &H4A5E "PRINT" &HFF57 &H4A94 "PRINT" &HFF5C &H4AFF "PRINT" &HFF61 &H4B4D "READ/INPUT" fout &HFF66 &H4C6D Expressie evaluatie &HFF6B &H4CA6 Expressie evaluatie &HFF70 &H4DD9 Factor evaluatie &HFF75 &H4F2C Factor evaluatie &HFF7A &H4F3E Factor evaluatie &HFF7F &H51C3 Runlus uitvoeren &HFF84 &H51CC "WIDTH" &HFF89 &H522E LIST om listings te benvloeden of te voorkomen. Gegevens: HL bevat linenumber. &HFF8E &H532D Tokens vertalen &HFF93 &H543F Integer omzetting &HFF98 &H5514 Regelnummer pointer &HFF9D &H67EE Vrije string/geheugenruimte &HFFA2 &H5EA9 Variabele detectie &HFFA7 &H148A PHYDIO, Wordt aangeroepen aan begin PHYsical Disk drive routine. &HFFAC &H148E FORMAT, FORMat disk routine. &HFFB1 &H406F ERROR, Wordt aangeroepen aan het begin van de ERRROr routine. &HFFB6 &H085D LPTOUT Line PrinTer Output routine. Vanaf: LPTOUT, &H00A5 Gegevens: Af te drukken karakter in A Opm. Alle registers moeten bewaard worden. &HFFBB &H0884 LPTSTT, Line PrinTer Status routine. &HFCC0 &H79CC "SCREEN", SCREEN x. Gegevens: Screen nummer x in A &HFFC5 &H73E5 "PLAY", om het PLAY-statement te kunnen uitbreiden.

- 67 -

Page 72: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

18. File Control Block Disk-BASIC maakt, voor het correct werken met files op schijven, gebruik van een aantal administaratiegebeiden in het RAM-geheugen. Deze administratiegebieden worden File Control Blocks genoemd, kortweg angeduid met FCB. Voor iedere file die wordt geopend wordt zo'n File Control Block aangelegd. Het bij een file behorende FCB kan worden teruggevonden door gebruik te maken van de VARPTR-functie. Indien een disk-file werd geopend met het volgende statement: OPEN "A:Filename" for output as #1 dan zal de functie : VARPTR(#1) Het start-adres van het File Control Block opleveren. Dit File Control Block heeft de volgende layout: Displ. Vld: Betekenis &H00 MOD Mode waarin de file werd geopend. &H00/02 FCA Pointer naar het DOS-FCB. (lsb / msb) &H03 LSA Back up teken &H04 DSK Device nummer. &H05 SLB ? &H06 BPS Positie binnen het data-buffer &H07 FLG Flag-info &H08 OPS Pseudo kop-positie &H09/108 BUF Data buffer. (256 bytes) Het data-buffer bevat de informatie die naar schijf moet worden geschreven of die van schijf is gelezen. De Pointer naar het FCB-FCB wijst naar een uitgebreider File Control Block, waarin gegevens zoals de filenaam, de plaats binnen de directory, de voor de file gebruikte sectoren, de tijd en datum, etc. kunnen worden gevonden. De Layout van die FCB wordt gegeven in het volgende hoofdstuk

- 68 -

Page 73: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

19. BDOS Calls Wanneer aan de MSX-computer een diskdrive met controller is aangesloten, dan bevinden zich alle disk-routines zich (net als Basic IO system routines) in het geheeugen van de computer. Ook voor deze disk routines geldt, dat ze vanuit een applicatie routine kunnen worden aangeroepen. Om te voorkomen, dat een programma wel op de ene computer wel op de ene maar niet op de andere computer werkt, moeten ook deze disk-routines (BDOS-routines) door middel van een speciale manier van aan aanroepen worden gebruikt. De manier om deze routine aan te roepen is als volgt: 1 Laadt het functie nummer van het aan te roepen routine in register C van de Z80-microprocessor. 2 Call het adres &HF37D, indien het aanroepende programma onder Disk Basic draait. Call het adres &H0005, indien het aanroepende programma onder MSXDOS draait. Daar een groot aantal BDOS calls gebruik maken van het File Control Block (FCB) en van het Drive Parameter Block (DPB) zullen de indelingen van deze blokken worden gegeven, voordat op de BDOS calls zelf wordt ingegaan. 19.1. FILE CONTROL BLOCK (37 bytes) Displ.: Betekenis: &H00 Drive naam (default = 0, A:=1) &H01/08 De file-naam. Maximaal 8 tekens. Indien de naam uit minder dan 8 tekens bestaat, dienen de overgebleven posities uit

spaties te bestaan. &H09/0B De file-naam Extentie. Maximaal 3 tekens. Indien de extentie uit minder dan 3 tekens bestaat, dienen de overgebleven

posities uit spaties te bestaan. &H0C/0D Current Block. Pointer naar het blok waarin het record dat zal worden gelezen zich bevindt &H0E/0F Record Size. Default 128. Kan een andere waarde worden gegeven, doch niet langer dan 255 tekens. &H10/13 File Size. Gootte van de file in aantal blokken van 128 bytes. &H14/15 Datum. &H16/17 Tijd. &H18 Device ID. &H19 Directory location. &H1A/1B First Cluster of File. &H1C/1D Last Cluster Accessed. &H1E/1F Last Cluster Accessed. Relatief ten opzichte van het eerste cluster van de file. &H20 Current record &H21/24 Random record. Indien de lengte korter is dan 64 bytes, worden alleen de displacemenst &H21/23 gebruikt. 19.2. Drive Parameter Block Displ.: Betekenis &H00 Drive nummer. &H01 Media ID byte. &H02/03 Aantal bytes per sector. &H04 Directory masker. &H05 Directory shift. &H06 Cluster masker. &H07 Cluster shift. &H08/09 Eerste sector van de FAT.

Displ.: Betekenis &H0A Aantal FAT's. &H0B Aantal directory entries. &H0C/0D Eerste data sector. &H0E/0F Aantal clusters + 1. &H10 Aantal sectoren per FAT. &H11/12 Eerste directory sector. &H13/14 FAT-adres.

- 69 -

Page 74: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

19.3. BDOS-Calls-functies In de hierna volgende opsomming van BDOS calls worden van iedere Call de volgende gegevens opgenomen: NUMMER NAAM FUNCTIE INPUT OUTPUT Nummer is het functienummer, dat in register C moet worden geplaatst voordat adres &HF37D (Onder Disk-Basic) of &H0005 (MSXDOS) wordt aangeroepen &H00 SYSTEM RESET Springt naar de "warme start" van DISK BASIC of naar adres &H0000 indien de functie onder MSXDOS werd

aangeroepen. CP/M-compatibel. &H01 CONSOLE INPUT Leest een teken van console en zet dit in register [A]. Voert functie &H00 uit indien CONTROL+C werd ingedrukt. Start

output van beeldscherminfo naar de printer wanneer CONTROL+P werd ingedrukt en beëindigt dit weer indien CONTROL+N werd ingedrukt. Stuurt het ingevoerde teken naar het beeldscherm. CP/M-compatibel

OUTPUT [A] : Het ingetoetste teken &H02 CONSOLE INPUT Stuurt het teken dat in register [E] staat naar de console. CP/M-compatibel. INPUT [E] : Het naar de console te schrijven teken. &H03 AUX INPUT Leest een teken van het AUX-device (bijv. RS232) en zet dit in register [A]. CP/M-compatibel. OUTPUT [A] : Het gelezen teken. &H04 AUX OUTPUT Schrijft het teken uit register [E] naar het AUX-Device. CP/M-compatibel. INPUT [E] : Het naar AUX te schrijven teken. &H05 LST OUTPUT Schrijft het teken uit register [E] naar de printer. CP/M-compatibel. INPUT [E] : Het af te drukken teken. &H06 DIRECT CONSOLE IO Stuurt het teken dat in register [E] staat naar de console, tenzij in register [E] de code &HFF staat. In dit geval wordt van

het console gelezen. Het gelezen teken wordt in [A] gezet, zonder dat er op de ingetoetste code wordt gechecked en zonder dat het ingetoetste teken naar console wordt gestuurd. Indien er niets wordt ingetoetst, zal register [A] de waarde 0 bevatten. CP/M-compatibel.

INPUT [E] : &HFF indien moet worden gelezen. Iedere andere code wordt naar console geschreven. OUTPUT [A] : Het ingelezen teken.

- 70 -

Page 75: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

&H07 DIRECT INPUT Leest een teken van console en zet dat in register [A]. Er wordt niet op de code van het teken gechecked en het teken

wordt niet naar console teruggestuurd. OUTPUT [A] : Het ingelezen teken. &H08 DIRECT INPUT Leest een teken van console en zet dat in register [A]. Controleert op CONTROL+N, CONTROL+P, CONTROL+C.

Stuurt het ingetoetste teken niet terug naar console. OUTPUT [A] : Het ingetoetste teken. &H09 STRING OUTPUT Schrijft de string waarvan het startadres in DE staat, naar console. Het schrijven gaat door, totdat een $-teken wordt

gevonden. CP/M-compatibel. INPUT [DE] : Het startadres van de string. &H0A BUFFERED INPUT Leest een string van console en zet deze in het geheugen vanaf het in registerpaar gegeven adres [DE+2]. CR beëindigt de

string. De lengte van de string wordt op het in registerpaar [DE+1] gegeven adres gezet. CR wordt niet meegeteld in de lengte. De maximale lengte van de string wordt doorgegeven via de geheugen locatie die met het adres in [DE] wordt aangewezen. CP/M-compatibel.

INPUT [DE] : Pointer naar string-ruimte. &H0B CONSOLE STATUS Controleert of er input van console wordt gedaan. Zet 0 in register [A] indien er geen input is. Zet &HFF in register [A]

indien er geen input is. CP/M-compatibel. OUTPUT [A] : Console status. &H0C GET VERSION NUMBER Zet het versie nummer in registerpaar [HL]. CP/M-compatibel. OUTPUT [H] : &H00 [L] : &H22 Versie 2.200 &H0D DISK RESET Stelt drive A: in als default drive, zet het transfer-adres op &H80 en verwijdert alle sectoren in het geheugen die zijn

gewijzigd, maar nog niet naar schijf geschreven zijn. CP/M-compatibel. &H0E SELECT DISK Maakt de in register E gegeven disk de default drive (0 komt overeen met Drive A:). CP/M-compatibel. INPUT [E] : Drive nummer

- 71 -

Page 76: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

&H0F OPEN FILE Open een file volgens de specificaties in het File Control Block waar [DE] naar verwijst. De volgende velden van het FCB

worden gevuld vanuit de directory: FileSize, Date, Time, Device ID, Directory location, First Cluster, Last Cluster, Last Accessed Cluster. De volgende velden van het FCB zijn ge-set na uitvoering van deze functie: Record Size, Current Block, Current Record, Random Record. Indien de functie succesvol is uitgevoerd zal [A] de waarde 0 bevatten, zoniet, dan zal [A] de waarde 255 bevatten. CP/M-

compatibel. INPUT [DE] FCB-adres OUTPUT [A] &H00 = succesvol &HFF = niet succesvol &H10 CLOSE FILE Sluit de file die in het File Control Block staat dat met het adres in [DE] staat aangegeven. Indien de file succesvol is

gesloten zal [A] de waarde 0 bevatten, zoniet, dan bevat [A] de waarde &HFF. INPUT [DE] FCB-adres OUTPUT [A] &H00 = succesvol &HFF = niet succesvol &H11 SEARCH FIRST Zoekt vanaf het begin van de directory naar het voorkomen van de file, die in het File Control Block dat met het adres in

[DE] wordt aangewezen staat aangegeven, in de directory en copieert de directory-enrt (32 bytes lang) naar het transfer adres. Indien de file in de directory wordt gevonden zal bovendien [A] met &H00 worden geladen. Wordt de file niet gevonden, dan wordt niets naar het transfer adres gecopieerd en wordt [A] met de waarde &HFF geladen. In de file-naam (in het FCB) mag gebruik worden gemaakt van de tekens en ?. CP/M-compatibel.

INPUT [DE] FCB-adres OUTPUT [A] &H0 = File gevonden &HFF = File niet gevonden &H12 SEARCH NEXT Zoekt in de directory vanaf de plaats waar met de laatste SEARCH-functie een gezochte file werd gevonden naar het

volgende voorkomen van de filenaam in de directory. Werkt voor het overige precies hetzelfde als de SEARCH FIRST functie. CP/M-compatibel.

INPUT [DE] FCB-adres OUTPUT [A] &H00 = File gevonden &HFF = File niet gevonden

- 72 -

Page 77: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

&H13 DELETE FILE Wist de file die in het FCB staat (aangeduid door [DE]). Hiertoe wordt het eeerste teken van de filenaam vervangen door

de code &HE5 en in de FAT de door de file gebruikte clusters vrij gegeven. CP/M-compatibel. INPUT [DE] FCB-adres OUTPUT [A] &H00 = File gewist &HFF = File niet (geheel) gewist &H14 SEQUENTIAL READ Leest een record (van 128 bytes). De file, het blok binnen de file waarin het record zich bevindt en het record zelf staan

weergegeven in de velden File name, current block en current record van het File Control Block dat met het adres in [DE] wordt aangewezen. De gelezen informatie wordt in het geheugen adres van het ingestelde "transfer"-adres. De velden current-block en current-record in het FCB worden automatisch met 1 verhoogd. CP/M-compatibel.

INPUT [DE] FCB-adres. OUTPUT [A] &H00 = Record gelezen. &HFF = Record niet (goed) gelezen. &H15 SEQUENTIAL WRITE Schrijft een record (van 128 bytes) naar de file dir in het FCB dat met [DE] wordt aangegeven. De data, die het record

vormt, staat in het RAM-geheugen, vanaf het "Transfer"-adres. Het record (op schijf) wordt bepaald door de velden currentblock en current-record in het FCB. Deze velden worden automatisch verhoogd met 1. CP/M-compatibel.

INPUT [DE] FCB-adres OUTPUT [A] &H00 = Record geschreven &HFF = Record niet geschreven &H16 CREATE FILE Creëert een file, volgens de gegevens in het File Control Block, (aangegeven met [DE]). Indien de file reeds bestaat wordt

deze overgeschreven(!). Na uitvoering van deze functie zijn de volgende velden vastgelegd: Record Size, Current Block, Current Record, Random record. Of de file wel of niet is gecre/erd wordt teruggemeld in [A]. CP/M-comaptibel. INPUT [DE] FCB-Adres OUTPUT [A] &H00 = File gecreëerd &HFF = File niet gecreëerd &H17 RENAME FILE Geeft de file, die wordt aangegevn met het File Control Block, dat wordt aangegeven met het adres in registerpaar DE, de

file-naam uit het FCB dat wordt aangewezen door het adres [DE+16]. In de filenaam mag gebruik worden gemaakt van de wildcards. CP/M-compatibel.

INPUT [DE] FCB-adres te hernoemen file [DE+16] FCB-adres met nieuwe filenaam OUTPUT [A] &H00 = File hernoemd &HFF = File niet hernoemd &H18 GET LOGIN VECTOR Geeft in registerpaar [HL] een bit-tbael waaruit kan worden opgemaakt welke drivers on-line zijn. CP/M-compatibel. OUTPUT [HL] Bit-tabel

- 73 -

Page 78: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

&H19 GET DEFAULT DRIVE NAME Zet de default drive naam in register A. CP/M-compatibel. OUTPUT [A] Default drive naam &H1A SET TRANSFER ADRES Stelt het RAM-adres, waar de data die naar disk moet of van disk wordt gelezen, in op het registerpaar [DE] gegeven

adres. CP/M-compatibel. INPUT [DE] RAM-adres &H1B GET ALOCATION Geeft informatie over de in register [E] aangegeven disk drive. Indien de aangegeven diskname niet geldig is, zal register

[A] na uitvoering de waarde &HFF bevatten INPUT [E] Drive naam OUTPUT [A] Aantal sectors per cluster [BC] Aantal bytes per sector [DE] Aantal cluster sop schijf [HL] Aantal vrije clusters [IX] Device parameter Block adres [IY] File Allocation Tabel adres &H21 RANDOM READ Leest een record uit de file, die wordt aangewezen met het File Control Block, dat wordt aangewezen met het adres in

registerpaar [DE]. Het te lezen record wordt bepaald door het Random block veld uit het FCB. De data van het record wordt in het RAM-geheugen gezet vanaf het "transfer"-adres. De record lengte is altijd 128 bytes. CP/M-compatibel.

INPUT [DE] FCB-adres OUTPUT [A] &H00 = Record gelezen &HFF = Record niet (goed) gelezen &H22 RANDOM WRITE Schrijft een record naar de file, die wordt aangewezen in het File Control Block, dat wordt aangewezen met het adres in

registerpaar [DE]. De dat avoor het record begint op het "transfer"-adres. Welk record (binnen de file) wordt geschreven, wordt bepaald door het random block veld uit het FCB. CP/M-compatibel.

INPUT [DE] File Opntrol Block OUTPUT [A] &H00 = Record geschreven &HFF = Record niet geschreven &H23 GET FILE SIZE Berekent de lengte van de file uit het File Control Block. De lengte van de file wordt als een veelvoud van 128 bytes

gegeven en opgeslagen in het Random record veld van het FCB. CP/M-compatibel. INPUT [DE] FCB-adres [A] &H00 = lengte berekend &HFF = lengte niet berekend &H24 SET RANDOM RECORD Berkent de positie van het "current record" met behulp van de velden current block en current record uit get File Control

Block dat wordt aangewezen met DE en plaatst het adres van deze berekening in het veld random record van hetzelfde FCB. CP/M-compatibel.

INPUT [DE] FCB-adres

- 74 -

Page 79: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

&H26 RANDOM BLOCK WRITE Schrijft record(s) naar de file uit het FCB. De data voor het record begin top het transfer adres. Het te beschrijven record

in de file wordt bepaald door het random block veld uit het FCB. Het veld random record wordt automatisch verhoogd met het aantal geschreven records. Het aantal records wordt bepaald door de waarde in [HL]. De recordlengte wordt bepaald door het record size veld uit het FCB.

INPUT [DE] FCB-adres HL Aantal records OUTPUT A = 0 Record(s) geschreven A = 1 Record(s) niet geschreven. &H27 RANDOM RECORD READ Leest HL aantal record(s) uit de file (aangegeven door FCB in [DE]). Voor overige gegevens zie RANDOM BLOCK

WRITE. INPUT [DE] FCB-adres HL Aantal te lezen records OUTPUT A = 0 Record(s) geschreven A = 1 Record(s) niet geschreven HL Aantal geschreven records. &H28 RANDOM WRITE WITH ZERO-FILL Schrijft een record naar de file die wordt aangegeven door het FCB ([DE]). Welk record geschreven wordt, wordt bepaald

door het veld random blok in het FCB. De recoprd lengte is altijd 128 bytes. Wanneer een file wordt uitgebreid, zullen alle records die niet zijn geschreven met nullen worden gevuld. CP/M-Compatibel.

INPUT [DE] FCB-adres OUTPUT A = 0 Record(s) geschreven A = 1 Record(s) niet geschreven &H2A GET DATE Leest de datum en zet deze in Z80-registers OUTPUT [A] Dag van de week [D] Dag [E] Maand [HL] Jaar &H2B SET DATE Stelt de datum in op de in registerparen [DE] en [HL] gegeven datum INPUT [D] Dag [E] Maand [HL] Jaar &H2C GET TIME Leest de tijd en zet deze in Z80-registers OUTPUT [E] Hondersten van seconden [D] Seconden [L] Minuten [H] Uren

- 75 -

Page 80: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

&H2D SET TIME Stelt de tijd in op de in [DE] en [HL] gegeven tijd INPUT [E] Hondersten van seconden [D] Seconden [L] Minuten [H] Uren OUTPUT [A] &H00 = Tijd ingesteld &HFF = Tijd niet ingesteld &H2E SET VERIFY FLAG Zet Verify Flag aan of uit, afhankelijk van [E]. INPUT [E] = 00 Verify flag ge-reset Else Verify flag ge-set &H2F ABSOLUTE DISK READ Leest sector(S) van schijf en zet de inhoud van die sector(s) in het RAM-geheugen vanaf het "transfer"-adres. INPUT [DE] Sector nummer [H] Aantal te lezen sectoren [L] Drive nummer. &H30 ABSOLUTE DISK WRITE Schrijft sector(s) naar schijf, vanuit het RAM-geheugen (beginnende op het "transfer" adres). INPUT [DE] Sector nummer [H] Aantal te schrijven sectoren. [L] Drive nummer

- 76 -

Page 81: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

20. I/O-Poort adressen In de hiernavolgende opsomming van I/O-poort adressen en adres-gebieden, worden de MSX-specificaties gegeven. Het is echter heel goed mogleijk dat een bepaalde fabrikant afwijkt van deze specificatie. Het is daarom niet gegarandeerd, dat deze adressen exact overeen komen met de in uw computer gebruikte adressen. Het is zelfs ten sterkste af te raden programma's voor gebruik op meerdere computers te schrijven, waarin deze adressen rechtstreeks worden aangeroepen. Dergelijke programma's dienen altijd gebruik te maken van de beschikbare BIOS-entry points. Adres(sen): Functie: &H00 - &H7F Gereserveerd &H80 - &H83 RS232C-Support (USART 8251): &H80 DATA-register van de 8251-chip &H81 Status/commando-register van de 8251-chip &H82 Status/interrupt masker van de 8251-chip &H83 Gereserveerd &H84 - &H87 Gereserveerd &H88 - &H8B Gereserveerd voor de Video Display Processor 9938 voor MSX1 adaptor &H8E - &H8F Gereserveerd &H90 - &H91 Printer-poort: &H90 Control Write - bit 0 = strobe. Read - bit 1 = status. &H91 Data &H92 - &H97 Gereserveerd &H98 - &H9B Gereserveerd voor de Video Display Processor. (MSX1 en MSX2). &H9C - &H9F Gereserveerd &HA0 - &HA3 Sound processor (AY-3-8910): &HA0 Adres register &HA1 Data naar register schrijven. &HA2 Data uit register lezen. &HA4 - &HA7 Gereserveerd &HA8 - &HAB Parrallel I/O-poort (8255): &HA8 Poort A lezen en schrijven &HA9 Poort B lezen en schrijven &HAA Poort C lezen en schrijven &HAB Mode setting register &HAC - &HAF Gereserveerd &HB0 - &HB3 Extern geheugen (8255) &HB0 Poort A : Adreslijnen A0 - A7 &HB1 Poort B : Adreslijnen A8 - A10, A13-A15, CONTROL, R/W &HB2 Poort C : Adreslijnen A11 - A12, datalijnen Do-D7 &HB3 Mode setting register

- 77 -

Page 82: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

&HB4 - &HB5 Kalander klok (RP-5C01): &HB4 Adres register &HB5 Data lezen en schrijven &HB6 - &HB7 Gereserveerd &HB8 - &HBB Lichtpen &HBC - &HBF VHD-Control &HC0 - &HC1 MSX-Audio &HC2 - &HC7 Gereserveerd &HC8 - &HCF MSX-interface &HD0 - &HD7 Floppy disk controller &HD8 - &HDB KANJI-ROM &HDC - &HF4 Gereserveerd. &HF5 Systeem Controle: De bits van deze I/O-poort geven aan welke devices in het systeem aanwezig zijn. Een 1 wil zeggen

aanwezig, een 0 betekent niet aanwezig. Deze poort kan zowel worden gelzezen als beschreven. Door het betreffende bit 0 te maken verwijdert u het device als het ware uit het systeem:

bit 0 KANJI-ROM bit 1 Gereserveerd bit 2 MSX-Audio bit 3 Super impose bit 4 MSX-interface bit 5 RS232C -interface bit 6 Lichtpen bit 7 Kalender-klok &HF6 Colro bus I/O &HF7 A/V-control De betekenis van de bits op dit I/O-adres is als volgt: bit 0 Audio rechts bit 1 Audio Links bit 2 Video Input Select bit 3 Video Input Sense (Read) bit 4 A/V-control bit 5 Ym control bit 6 Ys control bit 7 Video Select &HF8 - &HFB Gereserveerd &HFC - &HFF Memory Mapper: &HFC Memory Mapper &H0000 - &H3FFF &HFD Memory Mapper &H4000 - &H7FFF &HFE Memory Mapper &H8000 - &HBFFF &HFF Memory Mapper &HC000 - &HFFFF

- 78 -

Page 83: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

21. Video Display Processor In MSX-computers worden twee verschillende Video Display Processors gebruikt. DE TMS9918-chip wordt als video processor in MSX1 computers toegepast. In MSX2 computers wordt de TMS9938-chip gebruikt. Alles wat de TMS9918 kan, kan de TMS9938 ook, maar de laatste chip kan nog meer. De TMS9918 kent vier screen-modes, waarbij de scherminformatie wordt opgeborgen in een video-geheugen dat maximaal 16 Kbytes groot is. De TMS9938 kent 9 screen-modes, de vier modes van de TMS9918 plus vijf nieuwe modes. Die nieuwe modes zijn bijna allemaal zogenaamde bit-mapped modes. Dat houdt in dat ieder beeldpunt afzonderlijk is te benaderen en te bewerken. Afhankelijk van de gekozen mode zal er tot 64 Kbytes aan videogeheugen nodig zijn voor het opslaan van 1 beeldschermplaatje. De TMS9938 is in staat beeldschermplaatjes in verschillende pagina's op te slaan. Het videogeheugen kan dan ook tot maximaal 128 kBytes groot zijn. In de hiernavolgende beschrijving zal eerste worden gekeken naar de indeling ivan het Video Ram voor de verschillende screen-modes. Daarna zal de video display processor zelf onder de lopen worden genomen. Dat laatste wil zeggen, dat de besturing van de chip zal woirden bekeken aan de hand van de interne registers daarvan. 21.1. Indeling van het Video RAM In het video RAM wordt de informatie, die op het scherm moet worden afgebeeld, in de vorm van tabellen opgeslagen. Zo zijn er tabellen, waarin de matrix-patronen van de letters worden opgeslagen, tabellen waarin de kleuren van letters of beeldpuntjes staan en tabellen waarin de sprites zijn vastgelegd. In de navolgende beschrijviongen zullen deze tabellen verder worden uitgewerkt. De startadressen van de tabellen zijn onder BASIC door het systseem vastgelegd. Wilt u het startadres weten dan kunt u dat opvragen met de systeemvariabele BASE(n). Hierin staat de letter n voor het nummer van de gevraagde tabel. Deze nummers zullen in de volgende beschrijving worden gegeven. Tenslotte dient nog te worden opgemerkt, dat de startadressen van alle tabellen met behulp van de systeemvariabele BASE kunnen worden uitgelezen. Alleen de adressen van de tabellen 0 tot en met 19 kunnen worden gewijzigd. Indien de adressen van 10 tot en met 14 worden gewijzigd, heeft dat tot gevolg, dat ook de adressen van de tabellen 20 tot en met 24 worden gewijzigd. SCREEN 0 (40-tekens) Tabelnaam: default-adres lengte: regnr.: Scherm-info-tabel &H0000-&H03BF 960 bytes BASE(0) Matrix-tabel &H0800-&H0FFF 2048 bytes BASE(2) Palette-tabel &H0400-&H041F 32 bytes - Scherm-info-tabel: Deze tabel bestaat uit entries van 1 byte. Iedere entry heeft betrekking op een tekenpositie op het beeldscherm. Er zijn 960 tekenposities op het

scherm Matrix-tabel Deze tabel bestaat uit 256 entries van elk 8 bytes. Iedere entry bevat de 8 bij 8 matrix van een teken, zoals dat op het beeldscherm wordt afgedrukt.

Elk byte bevat 8 horizontale beeldpunten. Elk volgende byte bevat de 8 horizontale punten van het teken op de volgende beeldlijn. Palette-tabel Deze tabel is alleen in MSX2-computers aanwezig., Deze tabel bestaat ui 16 entries, voor ieder van de kleuren 0 tot en met 15. Elke entry is twee

bytes lang. Zie voor uitleg het hoofdstuk over palette werking en kleuren.

- 79 -

Page 84: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

SCREEN 0 (80-tekens) Tabelnaam: Default-adres: Lengte: regnr.: Scherm-info-tabel &H0000-&H077F 1920 bytes BASE(0) Kleur-tabel &H0800-&H090D 270 bytes BASE(1) Matrix-tabel &H1000-&H17FF 2048 bytes BASE(2) Palette-tabel &H0F00-&H0F1F 32 bytes - Scherm-info-tabel: Onder MSX2 kan met WIDTH=80 de regellengte tot 80 tekens worden verlengd. In dat geval zal de scherm-info-tabel 1920 bytes lang zijn (2 zo

lang). Voor het overige is deze tabel; het zelfde als beschreven onder SCREEN 0 (40 tekens) Kleur-tabel: Deze tabel is 240 bytes lang, hetgeen overeenkomt met 240 keer 8 is 1920 bits. Dit is 1 bit voor iedere tekenpositie op het scherm. Een bit in deze

tabel geeft aan of het bijbehorende teken op het scherm de normaal inegstelde kleur moet hebben (bit=0), of de kleur zoals aangegeven in VDP-regiser 12. VDP register 13 geeft in dat geval aan hoe lang de normaal ingestelde kleur en de kleur uit het VDP-register afwisselend moeten worden weergegeven.

Matrix-tabel: Zie onder SCREEN 0 (40 tekens) Palette-tabel: Zie onder SCREEN 0 (40 tekens) SCREEN 2 Tabelnaam: default-adres lengte: reg.nr Matrix-tabel &H0000-&H17FF 6144 bytes BASE(12) Scherm-info-tabel &H1800-&H1AFF 768 bytes BASE(10) Sprite-info-tabel &H1B00-&H1B7F 128 bytes BASE(13) Palette-tabel &H1B80-&H1B9F 32 bytes - Kleur-tabel &H2000-&H37FF 6144 bytes BASE(11) Sprite$-tabel &H3800-&H3FFF 2048 bytes BASE(14) Matrix-tabel In schermmode 2 is het beeldscherm opgebouwd uit 24 regels van 32 tekens. Ieder teken bestaat uit een matrix van 8 bij 8 bits. De matrix-tabel is

opgebouwd uit 24*32=768 entries van 8 bytes (de teken-matrix). De bitjes in de bytes komen overeen met de beeldpuntjes op het scherm, binnen de teken-matrix.

Scherm-info-tabel Deze tabel bestaat uit 3 blokken van 256 bytes, die door BASIC met de default waarden 0 tot en met 255 worden gevuld. De waarde 0 t/m 255 uit het

eerste blok hebben betrekking op de eerste 256 entries in de matrix-tabel. De tweede serie waarden van 0- to ten met 256 hebben betrekking op de tweede 256 entries in de matrix tabel, etc. De plaats van een waarde in de scherm-info-tabel bepaalt waar de uit de matrix-tabel gelezen entry op het scherm zal worden afgedrukt.

Sprite-info-tabel Zie onder SCREEN 1 palette-tabel Zie onder SCREEN 0 (40 tekens) Kleur-tabel Deze tabel loopt parallel aan de matrix-tabel. In ieder byte staan twee kleuren, de voorgrond en de achtergrondkleur. Dit houdt in dat elk horizontaal

rijtje van 8 bits uit de matrix-tabel slechts 2 verschillende kleuren kan hebben. De waarde van ieder byte in de kleur-tabel is 16*de voorgrondkleur plus de achtergrondkleur.

- 80 -

Page 85: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

Sprite$-tabel Zie onder SCREEN 1 SCREEN 3 SCREEN 4

- 81 -

Page 86: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

21.2. SCREEN 5 - 8 Screen 5 tot en met 8 zijn zogenaamde bit-mapped schermmodes. Een andere bijzonderhied is, dat deze modes meer dan 1 beeldscherm tegelijk in het Video RAM aanwezig kan hebben. Er staan als het ware meerdere pagina's in het geheugen, waarvan er 1 zichtbaar is en een ander actief is (dit kan dezelfde pagina zijn) SCREEN 5 Indien de MSX-computer 64 kBytes aan videoRAM heeft kunnen er twee pagina's in het VRAM opgeslagen worden. Indien deze 128 kBytes is dan kunnen er 4 pagina's opgeslagen worden. De start-adressen van de pagina's is als volgt: pagina 1 - &H00000 pagina 2 - &H08000 pagina 3 - &H10000 pagina 4 - &H18000 Iedere pagina heeft de volgende lay-out: Tabelnaam: Default-adres lengte reg.nr. Scherm-info-tabel &H0000-&H69FF 27136 bytes BASE(25) Sprite-kleur-tabel &H7400-&H75FF 512 bytes - Sprite-info-tabel &H7600-&H767F 128 bytes BASE(28) Palette-tabel &H7680-&H769F 32 bytes - Sprite$-tabel &H7800-&H7FFF 2048 bytes BASE(29) Scherm-info-tabel: Voor ieder pixel op het beeldscherm staat in deze tabel een groepje van 4 bits. Het scherm heeft 212 beeldlijnen en is per beeldlijn ingedeeld (212

beeldlijnen). Sprite-kleur-tabel: Zie onder SCREEN 4 Sprite-info-tabel: Zie onder SCREEN 4. Palette-tabel: Zie onder SCREEN 0 (40 tekens). Sprite$-tabel: Zie onder SCREEN 1. SCREEN 6 SCREEN 6 heeft de zelfde indeling als SCREEN 5. Alleen is de scherm-info-tabel anders. Het scherm heeft weer 212 beeldlijnen maar er passen nu 512 pixels op een beeldlijn. Er zijn dan ook maar 4 kleuren tegelijk mogelijk. SCREEN 7 SCREEN 8

- 82 -

Page 87: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

21.3. VDP-besturing Het besturen van de Video Display Processor (VDP) gaat door middel van het laden cq uitlezen van de in de chip aanwezige registers. In de hiernavolgende beschrijving worden alle registers opgesomd. Daartoe zijn de registers gegroepeerd in functioneel bij elkaar behorende registers. Om de registers vanuit BASIC te kunnen beïnvloeden, dient gebruik te worden gemaakt van de functie VDP(x). De werkelijke registernummers en de nummers, die in de functie VDP moeten worden gebruikt, zijn niet altijd gelijk. Daarom zijn beide nummers in de tabel opgenomen. Zou u de registers vanuit een machinetaalroutine willen laden, dan dient u de registernummers te gebruiken (reg), wilt u de registers met VDP benaderen dan gebruikt u de VDP-nummers(VDP(x)). De MSX1-computer kent alleen de registers 0 tot en met 8. 21.3.1. VDP Mode-registers

VDP Reg 7 6 5 4 3 2 1 0

0 1 9

10

0 1 8 9

0 - MSE LN

DG BLK LCS 0

IE0 IE2 TP SYM1

IE1 M1 CBD SYM0

M5 M2 VRS1 IL

M4 0 VRS0 E/O

M3 SZ SPD NTSC

D MAG B/W DCD

DG Digitize IE0 Vertical Retrace Interrupt Enable IE1 Horizontal Retrace Interrupt Enable IE2 Light pen/mouse Interrupt Enable M5/1 M5 M4 M3 M2 M1 Screen 0

0 0 0 0 0 0 1 1 1

0 0 0 0 1 1 1 0 0 1

0 0 0 1 0 0 1 0 1 1

0 0 1 0 0 0 0 0 0 0

0 1 0 0 0 1 0 0 0 0

1 0 (40t) 3 2 4 0 (80t) 5 6 7 8

D External VDP-input (0=ON, Alleen MSX1) BLK Enable/Disable display (1=Enable) SZ Sprite Size (0--> 8*8) MAG Magnify sprites (1=vergroot) MSE Light pen/mouse (1=muis) LCS Light pen/coincidence select (1=light pen) TP Transparant mode (0=code 0 is transparant, 1=code 0 is niet transparant) CBD Color Bus Direction (0=Output) Video Ram Select: VRS1/0 VRS1 VRS0 0

0 1 1

0 1 0 1

1 * 16 kByte 4 * 16 kByte 1 * 64 kByte 1 * 64 kByte High Speed

SPD Sprite Disable B/W Black and White mode (32 levels Composiute Video output).

- 83 -

Page 88: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

Synchronisation mode: SYM1/0 SYM1 SYM0 0

0 1 1

0 1 0 1

Intern Mix Extern (digitize) none

IL Interlace mode (1=interlace) E/O Even/Odd (0=normal display, 1= even/odd alternitve screen display) NTSC TV-mode select (0=NTSC, 1=PAL) DCD Dot CLock Direction (0=dot clock input)

- 84 -

Page 89: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

21.3.2. VDP adres-registers

VDP Reg 7 6 5 4 3 2 1 0

2 3

11 4 5 12 6 15

2 3

10 4 5 11 6 14

0 B13 0 0 D14 0 0 0

A16 B12 0 C16 D12 0 E16 0

A15 B11 0 C16 D12 0 E16 0

A14 B10 0 C15 D11 0 E15 0

A13 B9 0 C14 D10 0 E14 0

A12 B8 B16 C13 D9 0 E13 F16

A11 B7 B15 C12 D8 D16 E12 F15

A10 B6 B14 C11 D7 D15 E11 F14

A16/A10 Scherm-info-tabel B16/B6 Kleur-tabel C16/C11 Matrix-tabel D16/D7 Sprite-info-tabel E16/E11 Sprite$-tabel F16/F14 Video Ram Acces 21.3.3. VDP tekstcontrole-registers

VDP Reg 7 6 5 4 3 2 1 0

7 13 14

7 12 13

TC3 C3 ON3

TC2 C2 ON2

TC1 C1 ON1

TCO CO ON0

BDC3 BC3 OF3

BDC2 BC2 OF2

BDC1 BC1 OF1

BDC0 BC0 OF0

TC3/0 Text color BDC3/0 Back Drop Color C3/0 Color BC3/0 Back Color ON3/0 Blink On (Aantal perioden van 1/5 seconde) OF3/0 Blink Off (Aantal perioden van 1/5 seconde) 21.3.4. VDP controle-registers

VDP Reg 7 6 5 4 3 2 1 0

16 17 18 19 20 21 22 23

15 16 17 18 19 20 21 22

0 0 0 dV3 IL7 0 0 0

0 0 0 dV2 IL6 0 0 0

0 0 RC5 dV1 IL5 CBX5 CBY5 CBZ5

0 0 RC4 dV0 IL4 CBX4 CBY4 CBZ4

RS3 C3 RC3 dH3 IL3 CBX3 CBY3 CBZ3

RS2 C2 RC2 dH2 IL3 CBX3 CBY3 CBZ3

RS1 C1 RC1 dH1 IL1 CBX1 CBY1 CBZ1

RS0 C0 RC0 dHO IL0 CBX0 XBYZ CBZ0

RS3/0 Registernummer van status register C3/0 Color code (relatief palette adres) RC5/0 Registernummer van Control register dV3/0 delta Vertical adjust dH3/0 delta Horizontal adjust IL7/0 verticale line number of Line Interrupt

- 85 -

Page 90: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

CBX5/0 color burst value of phase 0 CBY5/0 color burst value of phase 1/3 CBZ5/0 color burst value of phase 2/3

- 86 -

Page 91: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

21.3.5. VDP status-registers

VDP Reg 7 6 5 4 3 2 1 0

8 -1 -2 -3 -4 -5 -6 -7 -8 -9

0 1 2 3 4 5 6 7 8 9

F FL TR X7 0 Y7 0 C7 BX7 0

SD LPS VR X6 0 Y6 0 C6 BX6 0

C I4 HR X5 0 Y5 0 C5 BX5 0

S4 I3 BD X4 0 Y4 0 C4 BX4 0

S3 I2 0 X3 0 Y3 0 C3 BX3 0

S2 I1 0 X2 0 Y2 0 C2 BX2 0

S1 IO E/O X1 X9 Y1 Y9 C1 BX1 BX9

S0 FH CE X0 X8 Y0 Y8 C0 BX0 BX8

F Vertical retrace interrupt. Wordt gereset door uitlezen van dit register (Reg.0). SD Vijfde cq. negende sprite gedetecteerd. Wordt gereset door het uitlezen van dit register. C Botsing tussen sprites gedetecteerd. S4/0 Nummer van vijfde cq. negende sprite. FL Muis of lichtpen schakelaar status. LPS Tweede muis of lichtpen schakelaar status. I4/0 LSI-versie nummer. FH Horizontal retrace interrupt. Wordt gereset door het uitlezen van dit register (reg. 1). TR Transfer met CPU data Ready. VR Vertical retrace timing. HR Horizontal retrace timing. BD Border detected. E/O Even or Odd field status. X9/0 X-Coördinaat van sprite coincidentie, muis of lichtpen. Y9/0 Y-Coördinaat van sprite coincidentie, muis of lichtpen. C7/0 Kleurencode van gelezen kleurregister. BX9/0 Border X-Coördinaat van sprite-coincidentie, muis of lichtpen 21.3.6. VDP programma-registers

VDP Reg 7 6 5 4 3 2 1 0

33 34 35 36 37 38 39 40 41 42 43 44 45 46 47

32 33 34 35 36 37 38 39 40 41 42 43 44 45 46

SX7 0 SY7 0 DX7 0 DY7 0 NX7 0 NY7 0 CH3 0 CM3

SX6 0 SY6 0 DX6 0 DY6 0 NX6 0 NY6 0 CH2 0 CM2

SX5 0 SY5 0 DX5 0 DY5 0 NX5 0 NY5 0 CH1 0 CM1

SX4 0 SY4 0 DX4 0 DY4 0 NX4 0 NY4 0 CH0 MXS CM0

SX3 0 SY3 0 DX3 0 DY3 0 NX 0 NY3 0 CL3 Y LO3

SX2 0 SY2 0 DX2 0 DY2 0 NX2 0 NY2 0 CL2 X LO2

SX1 0 SY1 SP1 DX1 0 DY1 DP1 NX1 NX9 NY1 NY9 CL1 E/N LO1

SX0 SX8 SY0 SP0 DX0 DX8 DY0 DP0 NX0 NX8 NY0 NY8 CL0 M/M LO0

SX9/0 Source X-coördinaat SY7/0 Source Y-coördinaat

- 87 -

Page 92: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

SP1/0 Source Page (VRAM) DX8/0 Destination X-coördinaat DY7/0 Destination Y-coördinaat DP1/0 Destination Page (VRAM) NX9/0, NY9/0 Aantal horizontale en verticale pixels CH3/0 Kleurcode CL3/0 Kleurcode MXC CPU-acces external memory MXD Destination external memory MXS Source external memory X Richting X-coördinaat Y Richting Y-Coördinaat E/N Equal / Not Equal detected (0=equal) M/M Major/Minor (0=X-as is major richting, 1=Y-as is major richting) Vervolg, op volgende pagina

- 88 -

Page 93: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek

CM3/0 Commando: CM3 CM2 CM1 CM0 Bewerking: Richting ------------------------------------------------------------------- 1 1 1 1 Move byte CPU > VRAM 1 1 1 0 Move byte VRAM > CPU 1 1 0 1 Move byte VRAM > VRAM 1 1 0 0 Move byte VDP > VRAM 1 0 1 1 Move dot CPU > VRAM 1 0 1 0 Move dot VRAM > CPU 1 0 0 1 Move dot VRAM > VRAM 1 0 0 0 Move dot VDP > VRAM 0 1 1 1 Line dot VDP > VRAM 0 1 1 0 Search dot VRAM > VDP 0 1 0 1 PSET dot VDP> VRAM 0 1 0 0 POINT dot VRAM > VDP LO3/0 Logische operatie LO3 LO2 LO1 LO0 Bewerking: --------------------------------------------------- 0 0 0 0 SC -> DC 0 0 0 1 SC AND DC -> DC 0 0 1 0 SC OR DC -> DC 0 0 1 1 SC OR DC -> DC 0 1 0 0 NOT SC -> DC 1 0 0 0 IF SC=0 AND TP=0 THEN DC -> DC ELSE SC-> DC 1 0 0 1 IF SC=0 AND TP=0 THEN DC -> DC ELSE SC AND DC -> DC 1 0 1 0 IF SC=0 AND TP=0 THEN DC -> DC ELSE SC OR DC -> DC 1 0 1 1 IF SC=0 AND TP=0 THEN DC -> DC ELSE SC XOR DC -> DC 1 1 0 0 IF SC=0 AND TP=0 THEN DC -> DC ELSE NOT SC -> DC

- 89 -

Page 94: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek, Bijlagen

Bijlage I. De CMD bijlage MSX-Basic mag dan niet de snelste der programmeer talen zijn; veelzijdig is zij in ieder wel. Niet alleen beschikt MSX-Basic over een heel arsenaal aan grafische en geluidsinstructies, maar er zijn ook ver-schillende manieren beschikbaar om machinetaal te combineren met Basic. De meest gebruikte functie daarvoor is de USR-functie, een andere veel gebruikte manier is de CALL-opdracht. De CALL-opdracht heeft echter een wat ingewikkelder constructie, de beste manier is het echter wel. De qua gebruik gemakkelijkste methode is echter de CMD-methode. Over dit commando is maar weinig bekend, daarom heb ik dit stukje ook toegevoegd aan dit boek. Het programma CMDEMO is te compileren met ZASSY. Het gebruikt van CMD is niet moeilijker dan dat van USR, maar ook wat beperkter. Daar staat dan weer tegenover dat het veel eleganter is: CMD COLOR staat nu eenmaal een stuk beter - en is bovendien véél leesbaarder - dan een constructie zoals: A=USR(16) Netjes Buigen De werking van de CMD is erg elegant ontworpen met toekomstvisie, zou je bijna zeggen. Het idee is dat meerdere programma's zichzelf in het geheugen van de computer kun-nen installeren. Deze kunnen dan allemaal reageren op een beplaad CMD-commando. Samen vormen ze als het ware een (mogelijke) keten. Als MSX-Basic een CMD-opdracht tegenkomt, wordt de CMD-hook op adres $FE0D aangeroepen. Het programma dat de hook 'omgebogen' heeft, moet nu zelf onderzoeken of de juiste tekens achter het CMD-commando staan. Als dat niet zo is roept de routine gewoon wee de oude hook aan. Mocht deze ook al omgebogen zijn op het moment dat dit programma genstalleerd werd, blijft het oude programma ook actief. Een voor-beeld:

Direct na het opstarten van de computer wordt er een programma uitgevoerd dat de CMD-hook ombuigt. Dit programma -A, bijvoorbeeld - reageert op : CMD A en doet dan iets. Op het moment dat programma A zichzelf installeerd en de hook ombuigt, is de hook zelf nog inactief en bevat 5 RET instructies. Programma A copieert deze 5 in-structies naar een andere plaats in het geheugen. Als het commando: CMD Z Nu moet worden uitgevoerd, roept MSX-Basic de CMD-Hook aan. Die is omgebogen, dus het programma A wordt aangeroepen. Die ziet dat er geen A maar een Z staat en spring vervolgens naar de eerder bewaarde hook toe. Die bevat RET instructies, dus programma A keert terug naar de Basic-ROM, die de boodschap 'illigal function call' afdrukt. Stel nu dat er vervolgens een programma B opgestart wordt, dat op 'CMD B' reageert en dat zichzelf ook 'netjes' installeert. De CMD-hook wijst op programma A, dus als er: CMD A uitgevoerd moet worden ziet B dat dit niet voor hem geschikt is en komt bij programma A terecht. Die constateert de letter A achter CMD en wordt uitgevoerd. Programma B heeft zich als het ware tussen Basic en Programma A ingenesteld. Dit kan net zo vaak gebeuren als het geheugen het toelaat, mits elk programma zichzelf maar netjes installeert - en mits er natuurlijk geen programma's geladen worden die op de zelfde CMD-opracht reageren! Het ombuigen van de hook wordt verzorgd door de routine ZETHOOK in de listing van CMDEMO, waarop we zo nog terugkomen. De hook wijst, na ombuiging, op de routine START. De CMD-Hook Hoe zit de CMD-Hook nu precies in elkaar? Bij aanroep van de hook bevat A een karakter en HL een adres. Dit karakter is het eerste geldige letter na het woord CMD:spaties worden overgeslagen. In de praktijk wordt het door de Basic-ROM opgehaald met behulp van de BIOS-functie

CHRGTR - CHaracter GeTteR - op adres $0010. Omdat deze erg vaak door Basic gebruikt wordt, is hij op een adres geplaatst dat met een RST-instructie kan worden aangeroepen. De opracht RST $10, is gelijk aan CALL $0010 maar de eerste is maar 1 byte lang.

- 90 -

Page 95: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek, Bijlagen

CHRGTR verwacht als invoer het HL-register, dat een adres in het BASIC-programma moet bevatten. Vanaf dit adres worden spaties overgeslagen, er wordty een karakter gelezen en HL krijgt een nieuwe waarde. Daarnaat wordt de carry-flag gezet als het karakter een cijfer is; de zero-vlag wordt gezet als het einde van een opracht bereikt is. Dit kan betekenen dat de regel afgelopen is, maar ook dat er een dubbele punt achter de opracht staat. Wat moet een programma, dat de CMD-hook gebruikt, nu doen? Allereerst moet er onderzocht worden of het CMD-commando wel voor dit programma bestemd is. Daarvoor moet het programma zelf met RST $10 oprachten tokens inlezen - RST $10 heeft als uitvoer tokens. Wordt er een ongewenst karakter gevonden dan moeten HL en AF ongewijzigd blijven en moet de oude hook worden aageroepen - misschien dat die er iets mee aan kan vangen. Aan de slag Als wél aan alle eisen voldaan is, voert het programma zijn taak uit. Dan moet het programma alvast het volgende karakter lezen en terug springen naar Basic. Dit terugspringen kan niet zomaar met een RET-instructie, omdat die immers terug zou springen naar waar de hook was omgebogen en het ROM-reageert daar domweg met een illigal function call op. De juiste methode van terugkeren is om het return adres zelf van de stack te halen met een POP-opdracht en daarna pas de RET-instructie uit te voeren. Eén van de twee POP AF-instructies in de routine EINDE is hiervoor bedoeld. De listing van CMDEMO bevindt zicht op de volgende pagina, daarna volgt een verdere uitleg over de werking.

- 91 -

Page 96: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek, Bijlagen

10 REM CMDEMO

20 REM Demonstratie van het CMD-commando

30 REM

60 AD%=&HFA75

70 READ A$:IF LEFT$(a$,1)<>"*" THEN POKE AD%,VAL("&h"+A$):AD%=AD%+1:GOTO 70

80 DEF USR=&hFA75:A=USR(0)

90 PRINT "Druk op een toets ...";INPUT$(1)

100 FOR I%=1 TO 1000:CMD COLOR:NEXT I%:CMD BP

110 END

120 'ORG $FA75 ; programma in PLAY-rij 3

130 ';

140 'EQU chgclr, $0062 ; BIOS COLOR-routine

150 'EQU beep, $00C0 ; BIOS BEEP-routine

160 ';

170 'EQU forclr, $F3E9 ; voorgrondkleur

180 'EQU bakclr, $F3EA ; achtergrondkleur

190 'EQU hook, $FE0D ; CMD-hook

200 ';

210 'EQU CmdLet1, #B ; eerste letter na CMD

220 'EQU CmdLet2, #P ; tweede letter na CMD

230 ';

240 'EQU ColorTk, $BD ; token voor COLOR

250 ';

300 DATA F3 : ' ZETHOOK: DI ; interrupts uit

310 DATA 11,CB,FA : ' LD DE, OUDHK ; bewaar-plaats

320 DATA 21,0D,FE : ' LD HL, HOOK ; hook-adres

330 DATA 01,05,00 : ' LD BC, 5 ; een hook is 5 bytes

340 DATA ED,B0 : ' LDIR ; verplaats HOOK naar OUDHK

350 ';

360 DATA 11,90,FA : ' LD DE, START ; adres START in DE

370 DATA 21,0D,FE : ' LD HL, HOOK

380 DATA 3E,C3 : ' LD A, $C3 ; JP-instructie

390 DATA 77 : ' LD (HL), A ; in 1e byte van de hook

400 DATA 23 : ' INC HL

410 DATA 73 : ' LD (HL), E ; leid de hook om naar

420 DATA 23 : ' INC HL

430 DATA 72 : ' LD (HL), D ; START

440 DATA FB : ' EI ; interrupts aan

450 DATA C9 : ' RET

460 ';

470 '; Hier begint de CMD afhandeling.

480 '; A bevat TOKEN, HL de tekstpointer.

490 ';

500 DATA F5 : 'START: PUSH AF ;bewaar alle registers

510 DATA C5 : ' PUSH BC

520 DATA D5 : ' PUSH DE

530 DATA E5 : ' PUSH HL

540 ';

550 DATA FE,BD : ' CP COLORTK ;token van COLOR?

560 DATA 28,10 : ' JR Z, INIT

570 ';

580 DATA FE,42 : ' CP CMDLET1 ;Onze letter?

590 DATA 20,05 : ' JR NZ, RETURN

600 DATA D7 : ' RST $10 ;Volgende letter

610 DATA FE,50 : ' CP CMDLET2

620 DATA 28,07 : ' JR Z, INIT ;Twee letters gevonden

630 ';

- 92 -

Page 97: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek, Bijlagen

640 DATA E1 : 'RETURN: POP HL ;Herstel tekstpointer

650 DATA D1 : ' POP DE ; en andere registers

660 DATA C1 : ' POP BC

670 DATA F1 : ' POP AF ; en oude karakter

680 DATA C3,CB,FA : ' JP OUDHK ;probeer volgende hook

Vervolg op volgende pagina

- 93 -

Page 98: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek, Bijlagen

690 ';

700 '; Start CMD-commando:

710 ';

720 DATA D1 : 'INIT: POP DE ;Vervang oude tekst-

730 DATA E5 : ' PUSH HL ; pointer door nieuwe

740 ';

750 DATA FE,BD : ' CP COLORTK

760 DATA 28,05 : ' JR Z, DOCLR ; CMD COLOR dan verder

770 ';

780 DATA CD,C0,00 : ' CALL BEEP

790 DATA 18,11 : ' JR EINDE

800 ';

810 DATA 3A,EA,F3 : 'DOCLR: LD A, (BAKCLR) ;achtergrond naar A

820 DATA 67 : ' LD H, A ;en door naar H

830 DATA 3A,E9,F3 : ' LD A, (FORCLR) ;voorgrond naar A

840 DATA 32,EA,F3 : ' LD (BAKCLR), A ;en naar achtergrond

850 DATA 7C : ' LD A, H ;oude achtergrond

860 DATA 32,E9,F3 : ' LD (FORCLR), A ;nieuwe voorgrond

870 DATA CD,62,00 : ' CALL CHGCLR ;zet de kleuren

880 ';

890 '; Klaar: terug naar Basic

900 ';

910 DATA E1 : 'EINDE: POP HL

920 DATA D1 : ' POP DE

930 DATA C1 : ' POP BC

940 DATA F1 : ' POP AF

950 DATA F1 : ' POP AF

960 DATA D7 : ' RST $10

970 DATA C9 : ' RET

980 ';

990 DATA * 'OUDHK DEFS 5

- 94 -

Page 99: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek, Bijlagen

BEEP en COLOR Het voorbeeld programma reageert op twee CMD-instructies: CMD BP en: CMD COLOR Het eerste doet niet anders dan BEEP; de tweede vorm keert de huidige voor en achtergrondkleuren om. Biede alle behalve wereldschokkend, maar het is dan ook maar een voorbeeld. Het controleren van de CMD-opdracht gebeurt in START. Hier worden eerst alle register-paren op de stack bewaard. Dan wordt er gekeken of het inge3lzen karakter soms gelijk was aan COLORTK. Dit is een met EQU gedefinieerde waarde die gelijk is aan het TOKEN COLOR ($BD). Als dit token gevonden wordt, springt START door naar INIT. Is het eerste karakter niet gelijk aan COLORTK, dan is het mischien een B, de eerste letter van de striung "BP". Als die ook niet zo is gaat het programma verder met de oudere hook. Was het wel een B, dan wordt ge-controleert op een P, zo ja dan wordt naar INIT gesprongen, zo nee dan de oudere hook. INIT is heel eenvoudig: afhankelijk van het karakter in A wordt de BIOS-routine BEEP aangeroepen of de kleuren gewisseld. Bij Einde wordt de - eventueel aangepaste - tesktpointer, wel eerst door de nieuwe, die eventueel onstaan is door het lezen van de tweede letter van "BP". TOKENS Zoals u al heeft kunnen lezen in de inleiding is de uitkomst van RST $10 een token (of een karakter). Om het u nou makkelijk te maken is er een TOKEN-lijst bijgevoegd in dit boek.

Uitbreiden Dit voorbeeld programma is opzichzelf natuurlijk zinloos, maar het is een skelet dat zonder al te veel moeite uitgebreid kan worden tot een compleet programma dat verschillende CMD-commando's toevoegd aan BASIC. Hoewel zulke CMD-oprachten in een programma veel duidelijker zijn dan de USR-oprachten is de CMD-opracht veel minder veelzijdig. De USR-opracht is een functie, dat wil zeggen: de ML-routine kaan een waarde teruglveren en gegeven krijgen. Dat laatste is met de CMD-ook mogelijk: in princiepe is er niet sop tegen om een CMD-opracht te maken die tussen haakjes een serie parameters verwacht, net als een CALL opracht. Bijvoorbeeld: CMD COLOR (10,1) Maar het inlezen van 'evalueren' van die parameters is een vervelend karweitje, omdat commando's ald: CMD COLOR(&H25, 1E-3) of: CMD COLOR(A%, SIN(23)*C) eigenlijk ook goed afgehandeld moeten worden. Hiervoor zijn de nodige Basic-routines aanwezig in het Basic-ROM, maar die zijn - qua adres in het ROM - juist niet gegarandeerd voor alle MSX-versies.....

- 95 -

Page 100: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek, Bijlagen

Bijlage II, Rompack utilities Voor de volgende twee programma's bestaat een zeker risico voor de computer, Het is niet zonder risico om een rompack in een slot te stoppen terwijl de computer aanstaat. De schrijver van dit boek neemt geen enkele verantwoording voor eventuele gevolgen. Rompack Simulator Sommige rompack's zijn te combineren met andre cartridges. Bijv. Nemesis II (slot 1) met Maze of Galious (Slot 2). Met dit programma is het mogelijk om de rompack in slot 2 te simuleren. Type, na het starten van het programma, het nummer van de Maze of Galious in (RC749). Dit nummer staat op de handleiding en op de cartridge zelf. Stop daarna Nemesis 2 in slot 1 en druk een toets in. De computer wordt gereset en Nemesis 2 wordt opgestart. Enkele andere combinaties zijn: Nemesis 2 met RC743 Nemesis 2 met RC746 Nemesis 2 met RC749 Salamander met RC751 100 ' ROM-1 KONAMI ROMPACK SIMULATOR

120 '

150 SCREEN 0:KEY OFF:COLOR 15,0,0:WIDTH 40:RESTORE:DEFINT A-Z

160 PRINT "KONAMI ROMPACK SIMULATOR":PRINT

180 PRINT "Cartridge nummer : RC";

190 I$=INKEY$:IF I$="" THEN 190

200 IF I$<"0" OR ASC(I$)>"9" THEN 190

210 N$=N$+I$:PRINT I$: IF LEN(N$)<3 THEN 190

220 FOR A=&h8800 TO &h8877:READ D$:POKE A, VAL("&h"+D$):NEXT

250 DATA 41,42,15,40,00,00,00,00,00,00,00,00,00,00

260 DATA 00,00,43,44,00,00,00,CD,6C,00,CD,C3,00,01

270 DATA 19,00,11,98,21,2B,88,CD,5C,00,CD,9F,00,C9

280 DATA 47,65,20,61,61,6E,77,65,7A,69,67,20,63,61

290 DATA 72,74,72,69,64,67,65,20,61,61,6E,77,65,7A

300 DATA 69,67,20,21,FF,C5,CD,9F,FD,C1,10,F9,F3,26

310 DATA 40,3A,42,F3,CD,24,00,11,00,40,21,00,88,01

320 DATA 80,00,ED,B0,18,0A,26,40,3A,C1,DC,CD,24,00

330 DATA FB,C9,2A,02,40,22,31,C8,CD,00,00,18,EB

340 POKE &h8812,VAL("&h"+MID$(N$,1,1))

350 POKE &h8813,VAL("&h"+mID$(n$,2,2))

360 PRINT:PRINT"Stop nu de cartridge in de computer, Toets ...";

370 I$=INPUT$(1)

380 PRINT:PRINT "Gestart"

390 DEFUSR=&h8844:A=USR(0)

Rompack Spectator

Met dit programma is het mogelijk om de rompacknummers van de 2e rompack uit te lezen. Kopieer de rompack

eerst met een rompack back-upper. Eerst geeft het programma het nummer van de rompack zelf (b.v. RC751

voor Nemesis 2). Vervolgens komen de nummers van de 2e cartridge (RC743, RC746, RC749). Deze nummers kunt

u met Nemesis 2 in slot 1 intypen met de Rompack simulator.

100 ' ROM-2 KONAMI ROMPACK SPECTATOR

120 '

130 SCREEN 0:KEY OFF:COLOR 15,0,0:WIDTH 40:RESTORE:DEFINT A-Z

140 PRINT "KONAMI ROMPACK SIMULATOR":PRINT

150 PRINT "Filename : ";:LINE INPUT F$:IF F$="" THEN GOTO 130

- 96 -

Page 101: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek, Bijlagen

160 BLOAD F$

210 PRINT:PRINT "Searching ... ";:PRINT

230 A$="???":FOR A=&h8800 TO &h8819

240 IF (PEEK(A)=&h43)AND(PEEK(A+1)=&h44) THEN A$=HEX$(PEEK(A+2))+HEX$(PEEK(A+4))

250 NEXT

260 PRINT "Cartridge nummer : RC";A$:PRINT:PRINT "Combinatie carts : ";

290 FOR A=&h8819 TO &hC800

300 IF(PEEK(A)=&h43)AND(PEEK(A+2)=&h44)THEN GOSUB 340

310 NEXT

320 I$=INPUT$(1):IF I$=CHR$(27) THEN CLS:NEW

330 RUN

340 LOCATE 18:PRINT "RC";HEX$(PEEK(A+2));HEX$(PEEK(A+3)):RETURN

- 97 -

Page 102: MSX 2 - Handboek...MSX - 2 Gegevensboek 2. BASE-gegevens Een hele serie MSX1- en MSX2-routines maakt gebruik van een reeks variabelen die VRAM adressen aangeven. Voor de …

MSX - 2 Gegevensboek, Bijlagen

Bijlage III, List utilitie In deze bijlage wordt de LIST hook gebruikt om het LIST commando te veranderen. Als je je basic programma wilt listen geef je vaak geen eindregel op en ben je vaak te laat met onderbreken als je op de gewenste regel bent. Hiervoor is dit programma geschreven. Na: * LIST regelnummer - regelnummer verschijnt het gevraagde stuk programma keurig scherm voor scherm. Na ieder scherm pauzeert de MSX, tot men op de spatiebalk drukt. Met de cursor omhoog en omlaag kan men zelfs één regel op het scherm verspringen. De <ESC> tenslotte beeindigt deze luxe vorm van LIST, waarna men weer gewoon in de Basic-omgeving belandt. Deze Basic-uitbreiding is natuurlijk in machinetaal geschreven. Het programma installeert deze boven in het vrije geheugen en zet de pointer voor het beschikbare Basic-geheugen meteen goed. Oftewe, de LIST-uitbreiding moet voordat men aan het werk gaat geladen worden anders wordt het programma in het geheugen vernield. Erg veel ruimte neemt één en ander niet, nog geen 180 bytes. 10 REM LIST

20 REM

30 REM LIST-commando uitbreiding

40 REM

50 CLEAR 200,PEEK(&hFC4A)+256*PEEK(&hFC4B)-&HB3

60 W=PEEK(&hF3B0)

70 SCREEN 0:WIDTH 39

80 CLS:PRINT "Installing ..."

90 ST=PEEK(&hFC4A)+256*PEEK(&hFC4B)

100 FOR I=0 TO &hB2

110 READ A$

120 CS=CS+VAL("&h")+A$)

130 IF A$="**"

THEN READ A$: CS=CS+VAL("&h"+A$): P=ST+VAL("&h"+A$):

POKE ST+I, P-INT(P/256)*256:I=I+1:POKE ST+I,INT(P/256)

ELSE POKE ST+I,VAL("&h"+A$)

140 NEXT

150 IF CS<>22604 THEN CLS:PRINT "U heeft een fout gemaakt in de data-regels!":STOP

160 POKE &hFF89, &hC3

170 POKE &hFF8A, ST-INT(ST/256)*256

180 POKE &hFF8B, INT(ST/256)

250 CLS:WIDTH W:PRINT "ML geinstalleerd op ";HEX$(ST)

260 END

270 DATA 3A,16,F4,FE,01,C8,3A,DE,F3,32,**,B0,CD,CC,00,3E,0C,DF,C1,CD,79,42,ED,43

280 DATA **,B1,C5,21,FF,FF,22,1C,F4,E1,D1,4E,23,46,23,78,B1,28,7B,C5,4E,23,46,23

290 DATA C5,E3,EB,E7,C1,38,6F,E3,E5,C5,EB,22,B5,F6,CD,12,34,E1,7E,FE,09,28,03,3E

300 DATA 20,DF,CD,84,52,21,5E,F5,CD,7B,52,CD,28,73,3A,DC,F3,FE,14,38,BE,CD,9F,00

310 DATA FE,1B,28,40,FE,1E,28,12,FE,1F,28,19,FE,20,20,ED,3E,0C,DF,E1,E5,22,**,B1

320 DATA 18,A1,E1,2A,**,B1,7E,23,66,6F,E5,18,EB,ED,4B,**,B1,60,69,ED,5B,76,F6,1B

330 DATA 2B,E7,28,C9,78,BE,20,F8,2B,E7,28,C1,79,BE,20,F1,D1,E5,18,CC,E1,E1,3A,**

340 DATA B0,B7,C4,CF,00,C3,1F,41,00,00,00

- 98 -