@nataliapc/mcp-openmsx
Version:
Model context protocol server for openMSX automation and control
734 lines (712 loc) • 16.1 kB
Markdown
# MSX 2 SUBROM BIOS Entries
## MSX 2 SUBROM BIOS Entries
These are additional BIOS routines which are available in the MSX 2 standard. No new subrom calls were introduced on the MSX 2+ / turbo R. They are located in the so-called SUBROM, which is an alternate BIOS page, switched when necessary. You can call the SUBROM by putting the jump address in register IX and then calling the BIOS routine `EXTROM` (#15F) or `SUBROM` (#15C). Please note that officially it is illegal to call the SUBROM using `CALSLT` because this will cause trouble with some DiskROMs. Therefore, it cannot be called directly from MSX-DOS environment. There is a workaround for that though, which is described in [this article](#msxdocs://bios/Calling_BIOS_from_MSX-DOS).
* [Basic calls](#basic-calls)
* [Double BIOS calls](#double-bios-calls)
* [MSX 2 specific calls](#msx-2-specific-calls)
* [Palette-functions](#palette-functions)
* [BIT-BLIT routines](#bit-blit-routines)
### BASIC calls
#### PAINT (Basic!)
```
Address : #0069
Function : Paints graphical screen
Input : HL - Basic textpointer
Output : HL - Adapted Basic textpointer
Registers: All
```
#### PSET (Basic!)
```
Address : #006D
Function : Sets a point
Input : HL - Basic textpointer
Output : HL - Adapted Basic textpointer
Registers: All
```
#### ATRSCN (Basic!)
```
Address : #0071
Function : Scans color attribute
Input : HL - Basic textpointer
Output : HL - Adapted Basic textpointer
Registers: All
```
#### GLINE (Basic!)
```
Address : #0075
Function : Draws a line
Input : HL - Basic textpointer
Output : HL - Adapted Basic textpointer
Registers: All
```
#### DOBOXF (Basic!)
```
Address : #0079
Function : Draws a filled box
Input : HL - Basic textpointer
Output : HL - Adapted Basic textpointer
Registers: All
```
#### DOLINE (Basic!)
```
Address : #007D
Function : Draws a line
Input : HL - Basic textpointer
Output : HL - Adapted Basic textpointer
Registers: All
```
#### BOXLIN (Basic!)
```
Address : #0081
Function : Draws a box
Input : HL - Basic textpointer
Output : HL - Adapted Basic textpointer
Registers: All
```
#### DOGRPH
```
Address : #0085
Function : Draws a line
Input : BC, HL are start coordinates
GXPOS, GYPOS are end-coordinates
ATRBYT for attribute
LOGOPR for logical operator
Registers: AF
```
#### GRPPRT
```
Address : #0089
Function : Places a character on graphic screen
Input : A - Character
ATRBYT for attribute
LOGOPR for logical operator
```
#### SCALXY
```
Address : #008D
Function : Clip coordinates (till border of screen)
Input : BC - X-position
DE - Y-position
Output : BC - X-position bordered
DE - Y-position bordered
Registers: AF
```
#### MAPXYC
```
Address : #0091
Function : Converts an X,Y position to an address: and mask in CLOC and CMASK
Input : BC - X-position
DE - Y-position
Output : HL - VRAM address: In SCREEN 3 (in CLOC too)
A - Mask In SCREEN 3 (in CMASK too)
HL - X-position In SCREEN 5->8 (in CLOC too)
A - Y-position In SCREEN 5->8 (in CMASK too)
Registers: F
```
#### READC
```
Address : #0095
Function : Reads attribute of pixel
Input : X-position in CLOC
Y-position in CMASK
Output : A - the attribute
Registers: AF
```
#### SETATR
```
Address : #0099
Function : Set attribute in ATRBYT
Input : A - attribute
Output : C-flag set if attribute is wrong
Registers: F
```
#### SETC
```
Address : #009D
Function : Set attribute of pixel
Input : X-position in CLOC
Y-position in CMASK
Attribute-byte in ATRBYT
Registers: AF
```
#### TRIGHT
```
Address : #00A1
Function : Moves pixel to the right
Input : X-position in CLOC
Yposition in CMASK
Output : New X-position in CLOC
New Y-position in CMASK
C-flag set if border of screen is reached
Registers: AF
Remark : SCREEN 3 only
```
#### RIGHTC
```
Address : #00A5
Function : Moves pixel to the right
Input : See TRIGHT
Output : See TRIGHT (except for the C-flag remark)
Registers: AF
Remark : SCREEN 3 only
```
#### TLEFTC
```
Address : #00A9
Function : Moves pixel to the left
Input : See TRIGHT
Output : See TRIGHT
Registers: AF
```
#### LEFTC
```
Address : #00AD
Function : Moves pixel to the left
Input : See RIGHTC
Output : See RIGHTC
Registers: AF
Remark : SCREEN 3 only
```
#### TDOWNC
```
Address : #00B1
Function : Moves pixel down
Input : See TRIGHT
Output : See TRIGHT
Registers: AF
```
#### DOWNC
```
Address : #00B5
Function : Moves pixel down
Input : See RIGHTC
Output : See RIGHTC
Registers: AF
Remark : SCREEN 3 only
```
#### TUPC
```
Address : #00B9
Function : Moves pixel up
Input : See TRIGHT
Output : See TRIGHT
Registers: AF
```
#### UPC
```
Address : #00BD
Function : Moves pixel up
Input : See RIGHTC
Output : See RIGHTC
Registers: AF
Remark : SCREEN 3 only
```
#### SCANR
```
Address : #00C1
Function : Scans pixels to the right
Input : B - 'Suspend'-flag
C - Border-counting
Output : DE - Border-counting
C - 'Pixel-changed'-flag
Registers: All
```
#### SCANL
```
Address : #00C5
Function : Scans pixels to the left
Input : DE - Border-counting
Output : DE - Border-counting
C - 'Pixel-changed'-flag
Registers: All
```
#### NVBXLN
```
Address : #00C9
Function : Draws a box
Input : BC - X start-position
DE - Y-start-position
X end-position in GXPOS
Y-end-position in GYPOS
Attribute in ATRBYT
Logical operator in LOGOPR
Registers: All
```
#### NVBXFL
```
Address : #00CD
Function : Draws a filled box
Input : See NVBXLN
Registers: All
```
### Double BIOS calls
The following routines are called from the equally named calls in the MAIN ROM, and therefor the input and results will not be shown, nor will the register changes. For that, refer to the corresponding call in the MSX1-BIOS.
#### CHGMOD
```
Address : #00D1
Function : Switches to given screenmode
```
#### INITXT
```
Address : #00D5
Function : Switches to SCREEN 0
```
#### INIT32
```
Address : #00D9
Function : Switches to SCREEN 1
```
#### INIGRP
```
Address : #00DD
Function : Switches to SCREEN 2
```
#### INIMLT
```
Address : #00E1
Function : Switches to SCREEN 3
```
#### SETTXT
```
Address : #00E5
Function : Switches VDP in SCREEN 0
```
#### SETT32
```
Address : #00E9
Function : Switches VDP in SCREEN 1
```
#### SETGRP
```
Address : #00ED
Function : Switches VDP in SCREEN 2
```
#### SETMLT
```
Address : #00F1
Function : Switches VDP in SCREEN 3
```
#### CLRSPR
```
Address : #00F5
Function : Initialises sprite tables
```
#### CALPAT
```
Address : #00F9
Function : Returns address of sprite pattern-table
```
#### CALATR
```
Address : #00FD
Function : Returns address of sprite attribute-table
```
#### GSPSIZ
```
Address : #0101
Function : Returns current sprite-size
```
### MSX 2 specific calls
#### GETPAT
```
Address : #0105
Function : Returns current pattern of a character
Input : A - ASCII code of character
Output : Pattern in PATWRK starting from address #FC40
Registers: All
Remark : Same as routine in MSX1-BIOS, but there is doesn't exist as
a BIOS-call
```
#### WTRVRM
```
Address : #0109
Function : Writes data in VRAM (#0000 - #ffff)
Input : HL - Address
A - Value
Registers: AF
```
#### RDVRM
```
Address : #010D
Function : Reads content in VRAM (#0000 - #ffff)
Input : HL - Address
Output : A - Read value
Registers: AF
```
#### CHGCLR
```
Address : #0111
Function : Changes screen colors
Input : A - Screenmode
See MSX1BIOS.HTM (CHGCLR)
Registers: All
```
#### CLS
```
Address : #0115
Function : Clear screen
Registers: All
```
#### CLRTXT
```
Address : #0119
Function : Clear Text-screen
Registers: All
```
#### DSPFNK
```
Address : #011D
Function : Display the function keys
Registers: All
```
#### DELLNO
```
Address : #0121
Function : Remove line in text screen
Input : L - Line Number
Registers: All
```
#### INSLNO
```
Address : #0125
Function : Add line to text screen
Input : L - Line Number
Registers: All
```
#### PUTVRM
```
Address : #0129
Function : Put character on text screen
Input : H - Y-position
L - X-position
Registers: AF
```
#### WRTVDP
```
Address : #012D
Function : Write to VDP-register
Input : B - Value to write
C - Register number
Registers: AF, BC
```
#### VDPSTA
```
Address : #0131
Function : Read VDP-status
Input : A - Status register
Output : A - Read value
Registers: F
```
#### KYKLOK
```
Address : #0135
Function : Control KANA-key and KANA-lamp (Japan)
Registers: AF
```
#### PUTCHR
```
Address : #0139
Function : Gets a key-code of keyboard, conversion to KANA and in
buffer (Japan)
Input : Z-flag set if not in conversion mode
Registers: All
```
#### SETPAG
```
Address : #013D
Function : Switches the page
Input : ACPAGE - Active page
DPPAGE - display page number
Registers: AF
```
### Palette-functions
#### INIPLT
```
Address : #0141
Function : Initialises the palette (current palet is save in VRAM)
Registers: AF, BC, DE
```
#### RSTPLT
```
Address : #0145
Function : Restores palette from VRAM
Registers: AF, BC, DE
```
#### GETPLT
```
Address : #0149
Function : Obtains the colorcodes from the palette
Input : A - Colorcode
Output : B - RRRRBBBB
C - xxxxGGGG
Registers: AF, DE
```
#### SETPLT
```
Address : #014D
Function : Sets the color code to the palette
Input : D - Colorcode
E - xxxxGGGG
A - RRRRBBBB
Registers: AF
```
#### PUTSPRT (Basic!)
```
Address : #0151
Function : Set sprites
Input : HL - Basic textpointer
Output : HL - Adapted Basic textpointer
Registers: All
```
#### COLOR (Basic!)
```
Address : #0155
Function : Changes Screen- or spritecolor, or palettevalues
Input : HL - Basic textpointer
Output : HL - Adapted Basic textpointer
Registers: All
```
#### SCREEN (Basic!)
```
Address : #0159
Function : Changes screenmode
Input : HL - Basic textpointer
Output : HL - Adapted Basic textpointer
Registers: All
```
#### WIDTHS (Basic!)
```
Address : #015D
Function : Changes textscreen-width
Input : HL - Basic textpointer
Output : HL - Adapted Basic textpointer
Registers: All
```
#### VDP (Basic!)
```
Address : #0161
Function : Sets VDP-register
Input : HL - Basic textpointer
Output : HL - Adapted Basic textpointer
Registers: All
```
#### VDPF (Basic!)
```
Address : #0165
Function : Reads VDP-register
Input : HL - Basic textpointer
Output : HL - Adapted Basic textpointer
Registers: All
```
#### BASE (Basic!)
```
Address : #0169
Function : Sets VDP base-register
Input : HL - Basic textpointer
Output : HL - Adapted Basic textpointer
Registers: All
```
#### BASEF (Basic!)
```
Address : #016D
Function : Reads VDP base-register
Input : HL - Basic textpointer
Output : HL - Adapted Basic textpointer
Registers: All
```
#### VPOKE (Basic!)
```
Address : #0171
Function : Writes a byte to VRAM
Input : HL - Basic textpointer
Output : HL - Adapted Basic textpointer
Registers: All
```
#### VPEEK (Basic!)
```
Address : #0175
Function : Reads a byte from VRAM
Input : HL - Basic textpointer
Output : HL - Adapted Basic textpointer
Registers: All
```
#### SETS (Basic!)
```
Address : #0179
Function : Sets BEEP, ADJUST, TIME and DATE
Input : HL - Basic textpointer
Output : HL - Adapted Basic textpointer
Registers: All
```
#### BEEP
```
Address : #017D
Function : Generates beep
Registers: All
```
#### PROMPT
```
Address : #0181
Function : Shows prompt (default: “Ok”)
Registers: All
```
#### SDFSCR
```
Address : #0185
Function : Recovers screen-parameters of clock-chip. When C-flag is set
function-key text will be displayd
Input : C-flag reset after MSX-DOS call
Registers: All
```
#### SETSCR
```
Address : #0189
Function : Recovers screen-parameter and prints Welcome message
Registers: All
```
#### SCOPY (Basic!)
```
Address : #018D
Function : Copy's VRAM, array and disk-file
Input : HL - Basic textpointer
Output : HL - Adapted Basic textpointer
Registers: All
```
### BIT-BLIT routines
From here on the so-called BIT-BLIT routines are listed, which are mostly executed by the VDP. The parameters must be passed through the system RAM at #F562. See the MSX 2 system variables documentation for more details. HL must always contain the value #F562 when calling.
#### BLTVV
```
Address : #0191
Function : Copy VRAM to VRAM
Input : SX, SY, DX, DY, NX, NY, ARG, L\_OP
Registers: All
```
#### BLTVM
```
Address : #0195
Function : Copy Main-RAM to VRAM
Input : SX - Address of screendata in RAM
DX, DY, ARG, L\_OP. NX and NY must be in screendata
Output : C-flag set if data failure in RAM
Registers: All
```
#### BLTMV
```
Address : #0199
Function : Copy VRAM to Main-RAM
Input : DX - Address of screendata in RAM
SX, SY, ARG, L\_OP. NX and NY must be in screendata
Registers: All
```
#### BLTVD
```
Address : #019D
Function : Copy Diskfile to VRAM
Input : SX -Address of filename.
SX, SY, ARG, L\_OP. NX and NY must be in diskfile
Registers: All
```
#### BLTDV
```
Address : #01A1
Function : Copy VRAM to Diskfile
Input : DX - Address of filenaam.
SX, SY, NX, NY,ARG
Registers: All
```
#### BLTMD
```
Address : #01A5
Function : Copy Diskfile to Main-RAM
Input : SX - Address of filenaam.
DX - start-address
DY - end-address (in Main-RAM)
Registers: All
```
#### BLTDM
```
Address : #01A9
Function : Copy Main-RAM to Diskfile
Input : DX - Address of filenaam.
SX - start-address
SY - end-address (in Main-RAM)
Registers: All
```
#### NEWPAD
```
Address : #01AD
Function : Read light pen, mouse and trackball
Input : A - Function call number. Fetch device data first, then read.
[ 8] Fetch light pen (#FF if available; touching screen)
[ 9] Read X-position
[10] Read Y-position
[11] Read lightpen-status (#FF if pressed)
[12] Fetch mouse/trackball in port 1
[13] Read X-offset
[14] Read Y-offset
[15] No function (always #00)
[16] Fetch mouse/trackball in port 2
[17] Read X-offset
[18] Read Y-offset
[19] No function (always #00)
[20] Fetch 2nd light pen (#FF if available; touching screen)
[21] Read X-position
[22] Read Y-position
[23] Read light-pen status (#FF if pressed)
Output : A - Read value
Registers: All
Remark : Access via [GTPAD](msxbios.php#GTPAD) in the main BIOS, function call numbers 8 and up
will be forwarded to this call.
```
#### GETPUT (Basic!)
```
Address : #01B1
Function : GET TIME, GET DATE and PUT KANJI
Input : HL - Basic textpointer
Output : HL - Adapted Basic textpointer
Registers: All
```
#### CHGMDP
```
Address : #01B5
Function : sets SCREEN-mode
Input : A - SCREEN-mode
Registers: All
```
#### RESVI
```
Address : #01B9
Function : Not used... Reserve entry
```
#### KNJPRT
```
Address : #01BD
Function : Puts Kanji-character on graphical screen (5-8)
Input : BC - JIS Kanji-character code
A - Display-mode (0=full, 1=even, 2=odd)
Registers: AF
```
#### REDCLK
```
Address : #01F5
Function : Read clock-RAM
Input : C - clock-RAM address
xxBBAAAA
||++++-- address
++------ Block-number
Output : A - Read value in lowest four bits
Registers: F
```
#### WRTCLK
```
Address : #01F9
Function : Write clock-RAM
Input : C - clock-RAM address
xxBBAAAA
||++++-- address :
++------ Block-number
A - Value to write
Registers: F
```
~BiFi
© 2025 MSX Assembly Page. MSX is a trademark of MSX Licensing Corporation.