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.
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 filenaam.
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 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