Blame | Last modification | View Log | Download
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="MSX%20BIOS%20calls_files/map.css" type="text/css"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<title>MSX BIOS calls</title>
<link rel="stylesheet" href="MSX%20BIOS%20calls_files/map.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
</head>
<body>
<h1 id="head">MSX Assembly Page</h1>
<div id="menu">
<ul>
<li><a href="http://map.grauw.nl/">Main</a></li>
<li><a href="http://map.grauw.nl/articles/">Articles</a></li>
<li><a href="http://map.grauw.nl/resources/">Resources</a></li>
<li><a href="http://map.grauw.nl/sources/">Sources</a></li>
<li><a href="http://map.grauw.nl/links/">Links</a></li>
<li><a href="http://map.grauw.nl/contributing/">Contributing</a></li>
</ul>
</div>
<div id="content">
<h1>MSX BIOS calls</h1>
<p>This is an overview of all official MSX BIOS calls.</p>
<ul>
<li><a href="#msx1bios">MSX 1 BIOS</a> (up till function call #159)</li>
<li><a href="#msx2bios">MSX 2 BIOS</a> (up till function call #177)</li>
<li><a href="#msx2pbios">MSX 2+ BIOS</a> (up till function call #17D)</li>
<li><a href="#msxtrbios">MSX turbo R BIOS</a> (up till function call #189)</li>
</ul>
<h1 id="msx1bios">MSX 1 BIOS Entries</h1>
<h2>RST-and other routines</h2>
<h3 id="CHKRAM">CHKRAM (also called STARTUP, RESET or BOOT)</h3>
<pre>Address : #0000
Function : Tests RAM and sets RAM slot for the system
Registers: All
Remark : After this, a jump must be made to INIT, for further initialisation.
</pre>
<h3 id="SYNCHR">SYNCHR</h3>
<pre>Address : #0008
Function : tests whether the character of [HL] is the specified character
if not, it generates SYNTAX ERROR, otherwise it goes to CHRGTR (#0010)
Input : set the character to be tested in [HL] and the character to be
compared next to RST instruction which calls this routine (inline parameter)
Output : HL is increased by one and A receives [HL], When the tested character is
numerical, the CY flag is set the end of the statement (00h or 3Ah) causes
the Z flag to be set
Registers: AF, HL
</pre>
<h3 id="RDSLT">RDSLT</h3>
<pre>Address : #000C
Function : Reads the value of an address in another slot
Input : A - ExxxSSPP
| || Primary slotnumber (00-11)
| - Secundary slotnumber (00-11)
+----------- Expanded slot (0 = no, 1 = yes)
HL - Address to read
Output : A - Contains the vaule of the read address
Registers: AF, C, DE
Remark : This routine turns off the interupt, but won't turn it on again
</pre>
<h3 id="CHRGTR">CHRGTR</h3>
<pre>Address : #0010
Function : Gets the next character (or token) of the Basic-text
Input : HL - Address last character
Output : HL - points to the next character
A - contains the character
C - flag set if it's a number
Z - flag set if it's the end of the statement
Registers: AF, HL
</pre>
<h3 id="WRSLT">WRSLT</h3>
<pre>Address : #0014
Function : Writes a value to an address in another slot.
Input : A - Slot in which the value will be written
see RDSLT for input
HL - Address of value to write
E - value to write
Registers: AF, BC, D
Remark : See RDSLT
</pre>
<h3 id="OUTDO">OUTDO</h3>
<pre>Address : #0018
Function : Output to current outputchannel (printer, diskfile, etc.)
Input : A - PRTFIL, PRTFLG
Remark : Used in basic, in ML it's pretty difficult
</pre>
<h3 id="CALSLT">CALSLT</h3>
<pre>Address : #001C
Function : Executes inter-slot call.
Input : IY - High byte with input for A in RDSLT
IX - The address that will be called
Remark : Variables can never be given in alternative registers
of the Z-80 or IX and IY
</pre>
<h3 id="DCOMPR">DCOMPR</h3>
<pre>Address : #0020
Function : Compares HL with DE
Input : HL, DE
Output : Z-flag set if HL and DE are equal. C-flag set if HL is less than DE.
Registers: AF
</pre>
<h3 id="ENASLT">ENASLT</h3>
<pre>Address : #0024
Function : Switches indicated slot at indicated page on perpetual
Input : A - ExxxSSPP
+-?------ see RDSLT
H - Bit 6 and 7 must contain the page number (00-11)
</pre>
<h3 id="GETYPR">GETYPR</h3>
<pre>Address : #0028
Function : Returns Type of DAC
Input : DAC
Output : S,Z,P/V, CY
Registers: AF
Remark : Not a very clear routine to me, please mail us if you know more about it.
</pre>
<h3 id="CALLF">CALLF</h3>
<pre>Address : #0030
Function : Executes an interslot call
Output : depends on the calling routine
Registers: AF, and the other registers depending on the calling routine
Remark : The following is the calling sequence:
RST #30
DB destination slot (see RDSLT accu)
DW destination address
</pre>
<h3 id="KEYINT">KEYINT</h3>
<pre>Address : #0038
Function : Executes the timer interrupt process routine
</pre>
<h2>Initialization-routines</h2>
<h3 id="INITIO">INITIO</h3>
<pre>Address : #003B
Function : Initialises the device
Registers: All
</pre>
<h3 id="INIFNK">INIFNK</h3>
<pre>Address : #003E
Function : Initialises the contents of the function keys
Registers: All
</pre>
<h2>VDP routines</h2>
<h3 id="DISSCR">DISSCR</h3>
<pre>Address : #0041
Function : inhibits the screen display
Registers: AF, BC
</pre>
<h3 id="ENASCR">ENASCR</h3>
<pre>Address : #0044
Function : displays the screen
Registers: AF, BC
</pre>
<h3 id="WRTVDP">WRTVDP</h3>
<pre>Address : #0047
Function : write data in the VDP-register
Input : B - data to write
C - number of the register
Registers: AF, BC
</pre>
<h3 id="RDVRM">RDVRM</h3>
<pre>Address : #004A
Function : Reads the content of VRAM
Input : HL - address read
Output : A - value which was read
Registers: AF
</pre>
<h3 id="WRTVRM">WRTVRM</h3>
<pre>Address : #004D
Function : Writes data in VRAM
Input : HL - address write
A - value write
Registers: AF
</pre>
<h3 id="SETRD">SETRD</h3>
<pre>Address : #0050
Function : Enable VDP to read
Input : HL - for VRAM-address
Registers: AF
</pre>
<h3 id="SETWRT">SETWRT</h3>
<pre>Address : #0053
Function : Enable VDP to write
Input : HL - Address
Registers: AF
</pre>
<h3 id="FILVRM">FILVRM</h3>
<pre>Address : #0056
Function : fill VRAM with value
Input : A - data byte
BC - length of the area to be written
HL - start address
Registers: AF, BC
</pre>
<h3 id="LDIRMV">LDIRMV</h3>
<pre>Address : #0059
Function : Block transfer to memory from VRAM
Input : BC - blocklength
DE - Start address of memory
HL - Start address of VRAM
Registers: All
</pre>
<h3 id="LDIRVM">LDIRVM</h3>
<pre>Address : #005C
Function : Block transfer to VRAM from memory
Input : BC - blocklength
DE - Start address of VRAM
HL - Start address of memory
Registers: All
</pre>
<h3 id="CHGMOD">CHGMOD</h3>
<pre>Address : #005F
Function : Switches to given screenmode
Input : A - screen mode
Registers: All
</pre>
<h3 id="CHGCLR">CHGCLR</h3>
<pre>Address : #0062
Function : Changes the screencolors
Input : Foregroundcolor in FORCLR
Backgroundcolor in BAKCLR
Bordercolor in BDRCLR
Registers: All
</pre>
<h3 id="NMI">NMI</h3>
<pre>Address : #0066
Function : Executes (non-maskable interupt) handling routine
</pre>
<h3 id="CLRSPR">CLRSPR</h3>
<pre>Address : #0069
Function : Initialises all sprites
Input : SCRMOD
Registers: Alles
</pre>
<h3 id="INITXT">INITXT</h3>
<pre>Address : #006C
Function : Schakelt naar SCREEN 0 (tekst-scherm met 40*24 tekens)
Input : TXTNAM, TXTCGP
Registers: All
</pre>
<h3 id="INIT32">INIT32</h3>
<pre>Address : #006F
Function : Switches to SCREEN 1 (text screen with 32*24 characters)
Input : T32NAM, T32CGP, T32COL, T32ATR, T32PAT
Registers: All
</pre>
<h3 id="INIGRP">INIGRP</h3>
<pre>Address : #0072
Function : Switches to SCREEN 2 (high resolution screen with 256*192 pixels)
Input : GRPNAM, GRPCGP, GRPCOL, GRPATR, GRPPAT
Registers: All
</pre>
<h3 id="INIMLT">INIMLT</h3>
<pre>Address : #0075
Function : Switches to SCREEN 3 (multi-color screen 64*48 pixels)
Input : MLTNAM, MLTCGP, MLTCOL, MLTATR, MLTPAT
Registers: All
</pre>
<h3 id="SETTXT">SETTXT</h3>
<pre>Address : #0078
Function : Switches to VDP in SCREEN 0 mode
Input : See INITXT
Registers: All
</pre>
<h3 id="SETT32">SETT32</h3>
<pre>Address : #007B
Function : Schakelt VDP in SCREEN 1 modus
Input : See INIT32
Registers: All
</pre>
<h3 id="SETGRP">SETGRP</h3>
<pre>Address : #007E
Function : Switches VDP to SCREEN 2 mode
Input : See INIGRP
Registers: All
</pre>
<h3 id="SETMLT">SETMLT</h3>
<pre>Address : #0081
Function : Switches VDP to SCREEN 3 mode
Input : See INIMLT
Registers: All
</pre>
<h3 id="CALPAT">CALPAT</h3>
<pre>Address : #0084
Function : Returns the address of the sprite pattern table
Input : A - Sprite ID
Output : HL - For the address
Registers: AF, DE, HL
</pre>
<h3 id="CALATR">CALATR</h3>
<pre>Address : #0087
Function : Returns the address of the sprite attribute table
Input : A - Sprite number
Output : HL - For the address
Registers: AF, DE, HL
</pre>
<h3 id="GSPSIZ">GSPSIZ</h3>
<pre>Address : #008A
Function : Returns current sprite size
Output : A - Sprite-size in bytes
C-flag set when size is 16*16 sprites otherwise C-flag is reset
Registers: AF
</pre>
<h3 id="GRPPRT">GRPPRT</h3>
<pre>Address : #008D
Function : Displays a character on the graphic screen
Input : A - ASCII value of the character to print
</pre>
<h2>PSG routines</h2>
<h3 id="GICINI">GICINI</h3>
<pre>Address : #0090
Function : Initialises PSG and sets initial value for the PLAY statement
Registers: All
</pre>
<h3 id="WRTPSG">WRTPSG</h3>
<pre>Address : #0093
Function : Writes data to PSG-register
Input : A - PSG register number
E - data write
</pre>
<h3 id="RDPSG">RDPSG</h3>
<pre>Address : #0096
Function : Reads value from PSG-register
Input : A - PSG-register read
Output : A - value read
</pre>
<h3 id="STRTMS">STRTMS</h3>
<pre>Address : #0099
Function : Tests whether the PLAY statement is being executed as a background
task. If not, begins to execute the PLAY statement
Registers: All
</pre>
<h2>Console routines</h2>
<h3 id="CHSNS">CHSNS</h3>
<pre>Address : #009C
Function : Tests the status of the keyboard buffer
Output : Z-flag set if buffer is empty, otherwise not set
Registers: AF
</pre>
<h3 id="CHGET">CHGET</h3>
<pre>Address : #009F
Function : One character input (waiting)
Output : A - ASCII-code of the input character
Registers: AF
</pre>
<h3 id="CHPUT">CHPUT</h3>
<pre>Address : #00A2
Function : Displays one character
Input : A - ASCII-code of character to display
</pre>
<h3 id="LPTOUT">LPTOUT</h3>
<pre>Address : #00A5
Function : Sends one character to printer
Input : A - ASCII-code of character to send
Output : C-flag set if failed
Registers: F
</pre>
<h3 id="LPTSTT">LPTSTT</h3>
<pre>Address : #00A8
Function : Tests printer status
Output : A - #FF and Z-flag reset if printer is ready
#00 and Z-flag set if not ready
Registers: AF
</pre>
<h3 id="CNVCHR">CNVCHR</h3>
<pre>Address : #00AB
Function : tests for the graphic header and transforms the code
Input : A - charactercode
Output : the C-flag is reset to not the graphic reader
the C-flag and Z-flag are set to the transformed code is set in A
the C-flag is set and Z-flag is reset to the untransformed code is set in A
Registers: AF
</pre>
<h3 id="PINLIN">PINLIN</h3>
<pre>Address : #00AE
Function : Stores in the specified buffer the character codes input until the return
key or STOP key is pressed
Output : HL - for the starting address of the buffer -1
C-flag set when it ends with the STOP key
Registers: All
</pre>
<h3 id="INLIN">INLIN</h3>
<pre>Address : #00B1
Function : Same as PINLIN except that AUGFLG (#F6AA) is set
Output : HL - for the starting address of the buffer -1
C-flag set when it ends with the STOP key
Registers: All
</pre>
<h3 id="QINLIN">QINLIN</h3>
<pre>Address : #00B4
Function : Prints a questionmark andone space
Output : HL - for the starting address of the buffer -1
C-flag set when it ends with the STOP key
Registers: All
</pre>
<h3 id="BREAKX">BREAKX</h3>
<pre>Address : #00B7
Function : Tests status of CTRL-STOP
Output : C-flag set when pressed
Registers: AF
Remark : In this routine, interrupts are inhibited
</pre>
<h3 id="ISCNTC">ISCNTC</h3>
<pre>Address : #00BA
Function : Tests status of SHIFT-STOP
</pre>
<h3 id="CKCNTC">CKCNTC</h3>
<pre>Address : #00BD
Function : Same as ISCNTC. used in Basic
</pre>
<h3 id="BEEP">BEEP</h3>
<pre>Address : #00C0
Function : generates beep
Registers: All
</pre>
<h3 id="CLS">CLS</h3>
<pre>Address : #00C3
Function : Clears the screen
Registers: AF, BC, DE
Remark : Z-flag must be set to be able to run this routine
XOR A will do fine most of the time
</pre>
<h3 id="POSIT">POSIT</h3>
<pre>Address : #00C6
Function : Plaatst cursor op aangegeven positie
Input : H - Y coordinate of cursor
L - X coordinate of cursor
Registers: AF
</pre>
<h3 id="FNKSB">FNKSB</h3>
<pre>Address : #00C9
Function : Tests whether the function key display is active (FNKFLG)
If so, displays them, otherwise erase them
Input : FNKFLG (#FBCE)
Registers: All
</pre>
<h3 id="ERAFNK">ERAFNK</h3>
<pre>Address : #00CC
Function : Erase functionkey display
Registers: All
</pre>
<h3 id="DSPFNK">DSPFNK</h3>
<pre>Address : #00CF
Function : Displays the function keys
Registers: All
</pre>
<h3 id="TOTEXT">TOTEXT</h3>
<pre>Address : #00D2
Function : Forces the screen to be in the text mode
Registers: All
</pre>
<h2>Controller routines</h2>
<h3 id="GTSTCK">GTSTCK</h3>
<pre>Address : #00D5
Function : Returns the joystick status
Input : A - Joystick number to test (0 = cursors, 1 = port 1, 2 = port 2)
Output : A - Direction
Registers: All
</pre>
<h3 id="GTTRIG">GTTRIG</h3>
<pre>Address : #00D8
Function : Returns current trigger status
Input : A - trigger button to test
0 = spacebar
1 = port 1, button A
2 = port 2, button A
3 = port 1, button B
4 = port 2, button B
Output : A - #00 trigger button not pressed
#FF trigger button pressed
Registers: AF
</pre>
<h3 id="GTPAD">GTPAD</h3>
<pre>Address : #00DB
Function : Returns current touch pad status
Input : A - Function call number. Fetch device data first, then read.
[ 0] Fetch touch pad data from port 1 (#FF if available)
[ 1] Read X-position
[ 2] Read Y-position
[ 3] Read touchpad status from port 1 (#FF if pressed)
[ 4] Fetch touch pad data from port 2 (#FF if available)
[ 5] Read X-position
[ 6] Read Y-position
[ 7] Read touchpad status from port 2 (#FF if pressed)
Output : A - Value
Registers: All
Remark : On MSX2, function call numbers 8-23 are forwarded to
<a href="http://map.grauw.nl/resources/subrom.php#NEWPAD">NEWPAD</a> in the SubROM.
</pre>
<h3 id="GTPDL">GTPDL</h3>
<pre>Address : #00DE
Function : Returns currenct value of paddle
Input : A - Paddle number
Output : A - Value
Registers: All
</pre>
<h2>Tape device routines</h2>
<h3 id="TAPION">TAPION</h3>
<pre>Address : #00E1
Function : Reads the header block after turning the cassette motor on
Output : C-flag set if failed
Registers: All
</pre>
<h3 id="TAPIN">TAPIN</h3>
<pre>Address : #00E4
Function : Read data from the tape
Output : A - read value
C-flag set if failed
Registers: All
</pre>
<h3 id="TAPIOF">TAPIOF</h3>
<pre>Address : #00E7
Function : Stops reading from the tape
</pre>
<h3 id="TAPOON">TAPOON</h3>
<pre>Address : #00EA
Function : Turns on the cassette motor and writes the header
Input : A - #00 short header
not #00 long header
Output : C-flag set if failed
Registers: All
</pre>
<h3 id="TAPOUT">TAPOUT</h3>
<pre>Address : #00ED
Function : Writes data on the tape
Input : A - data to write
Output : C-flag set if failed
Registers: All
</pre>
<h3 id="TAPOOF">TAPOOF</h3>
<pre>Address : #00F0
Function : Stops writing on the tape
</pre>
<h3 id="STMOTR">STMOTR</h3>
<pre>Address : #00F3
Function : Sets the cassette motor action
Input : A - #00 stop motor
#01 start motor
#FF reverse the current action
Registers: AF
</pre>
<h2>Queue routines</h2>
<h3 id="LFTQ">LFTQ</h3>
<pre>Address : #00F6
Function : Gives number of bytes in queue
Output : A - length of queue in bytes
Remark : Internal use
</pre>
<h3 id="PUTQ">PUTQ</h3>
<pre>Address : #00F9
Function : Put byte in queue
Remark : Internal use
</pre>
<h2>Graphic routines</h2>
<h3 id="RIGHTC">RIGHTC</h3>
<pre>Address : #00FC
Function : Shifts screenpixel to the right
Registers: AF
</pre>
<h3 id="LEFTC">LEFTC</h3>
<pre>Address : #00FF
Function : Shifts screenpixel to the left
Registers: AF
</pre>
<h3 id="UPC">UPC</h3>
<pre>Address : #0102
Function : Shifts screenpixel up
Registers: AF
</pre>
<h3 id="TUPC">TUPC</h3>
<pre>Address : #0105
Function : Tests whether UPC is possible, if possible, execute UPC
Output : C-flag set if operation would end outside the screen
Registers: AF
</pre>
<h3 id="DOWNC">DOWNC</h3>
<pre>Address : #0108
Function : Shifts screenpixel down
Registers: AF
</pre>
<h3 id="TDOWNC">TDOWNC</h3>
<pre>Address : #010B
Function : Tests whether DOWNC is possible, if possible, execute DOWNC
Output : C-flag set if operation would end outside the screen
Registers: AF
</pre>
<h3 id="SCALXY">SCALXY</h3>
<pre>Address : #010E
Function : Scales X and Y coordinates
</pre>
<h3 id="MAPXY">MAPXY</h3>
<pre>Address : #0111
Function : Places cursor at current cursor address
</pre>
<h3 id="FETCHC">FETCHC</h3>
<pre>Address : #0114
Function : Gets current cursor addresses mask pattern
Output : HL - Cursor address
A - Mask pattern
</pre>
<h3 id="STOREC">STOREC</h3>
<pre>Address : #0117
Function : Record current cursor addresses mask pattern
Input : HL - Cursor address
A - Mask pattern
</pre>
<h3 id="SETATR">SETATR</h3>
<pre>Address : #011A
Function : Set attribute byte
</pre>
<h3 id="READC">READC</h3>
<pre>Address : #011D
Function : Reads attribute byte of current screenpixel
</pre>
<h3 id="SETC">SETC</h3>
<pre>Address : #0120
Function : Returns currenct screenpixel of specificed attribute byte
</pre>
<h3 id="NSETCX">NSETCX</h3>
<pre>Address : #0123
Function : Set horizontal screenpixels
</pre>
<h3 id="GTASPC">GTASPC</h3>
<pre>Address : #0126
Function : Gets screen relations
Output : DE, HL
Registers: DE, HL
</pre>
<h3 id="PNTINI">PNTINI</h3>
<pre>Address : #0129
Function : Initalises the PAINT instruction
</pre>
<h3 id="SCANR">SCANR</h3>
<pre>Address : #012C
Function : Scans screenpixels to the right
</pre>
<h3 id="SCANL">SCANL</h3>
<pre>Address : #012F
Function : Scans screenpixels to the left
</pre>
<h2>Misc routines</h2>
<h3 id="CHGCAP">CHGCAP</h3>
<pre>Address : #0132
Function : Alternates the CAP lamp status
Input : A - #00 is lamp on
not #00 is lamp off
Registers: AF
</pre>
<h3 id="CHGSND">CHGSND</h3>
<pre>Address : #0135
Function : Alternates the 1-bit sound port status
Input : A - #00 to turn off
not #00 to turn on
Registers: AF
</pre>
<h3 id="RSLREG">RSLREG</h3>
<pre>Address : #0138
Function : Reads the primary slot register
Output : A - for the value which was read
33221100
||||||- Pagina 0 (#0000-#3FFF)
||||--- Pagina 1 (#4000-#7FFF)
||----- Pagina 2 (#8000-#BFFF)
------- Pagina 3 (#C000-#FFFF)
Registers: A
</pre>
<h3 id="WSLREG">WSLREG</h3>
<pre>Address : #013B
Function : Writes value to the primary slot register
Input : A - value value to (see RSLREG)
</pre>
<h3 id="RDVDP">RDVDP</h3>
<pre>Address : #013E
Function : Reads VDP status register
Output : A - Value which was read
Registers: A
</pre>
<h3 id="SNSMAT">SNSMAT</h3>
<pre>Address : #0141
Function : Returns the value of the specified line from the keyboard matrix
Input : A - for the specified line
Output : A - for data (the bit corresponding to the pressed key will be 0)
Registers: AF
</pre>
<h3 id="PHYDIO">PHYDIO</h3>
<pre>Address : #0144
Function : Executes I/O for mass-storage media like diskettes
Input : F - Set carry to write, reset carry to read
A - Drive number (0 = A:, 1 = B:, etc.)
B - Number of sectors
C - Media ID of the disk
DE - Begin sector
HL - Begin address in memory
Output : F - Carry set on error
A - Error code (only if carry set)
0 = Write protected
2 = Not ready
4 = Data error
6 = Seek error
8 = Record not found
10 = Write error
12 = Bad parameter
14 = Out of memory
16 = Other error
B - Number of sectors actually written or read
Registers: All
Remark : Interrupts may be disabled afterwards. On some hard disk interfaces,
when bit 7 of register C is set, a 23-bit addressing scheme is used
and bits 0-6 of register C contain bits 23-16 of the sector number.
</pre>
<h3 id="FORMAT">FORMAT</h3>
<pre>Address : #0147
Function : Initialises mass-storage media like formatting of diskettes
Registers: All
Remark : In minimum configuration only a HOOK is available
</pre>
<h3 id="ISFLIO">ISFLIO</h3>
<pre>Address : #014A
Function : Tests if I/O to device is taking place
Output : A - #00 if not taking place
not #00 if taking place
Registers: AF
</pre>
<h3 id="OUTDLP">OUTDLP</h3>
<pre>Address : #014D
Function : Printer output
Input : A - code to print
Registers: F
Remark : Differences with LPTOUT:
1. TAB is expanded to spaces
2. For non-MSX printers, Hiragana is transformed to katakana
and graphic characters are transformed to 1-byte characters
3. If failed, device I/O error occurs
</pre>
<h3 id="GETVCP">GETVCP</h3>
<pre>Address : #0150
Function : Returns pointer to play queue
Input : A - Channel number
Output : HL - Pointer
Registers: AF
Remark : Only used to play music in background
</pre>
<h3 id="GETVC2">GETVC2</h3>
<pre>Address : #0153
Function : Returns pointer to variable in queue number VOICEN (byte op #FB38)
Input : L - Pointer in play buffer
Output : HL - Pointer
Registers: AF
</pre>
<h3 id="KILBUF">KILBUF</h3>
<pre>Address : #0156
Function : Clear keyboard buffer
Registers: HL
</pre>
<h3 id="CALBAS">CALBAS</h3>
<pre>Address : #0159
Function : Executes inter-slot call to the routine in BASIC interpreter
Input : IX - for the calling address
Output : Depends on the called routine
Registers: Depends on the called routine
</pre>
<h1 id="msx2bios">MSX 2 BIOS Entries</h1>
<h3 id="SUBROM">SUBROM</h3>
<pre>Address : #015C
Function : Calls a routine in SUB-ROM
Input : IX - Address of routine in SUB-ROM
Output : Depends on the routine
Registers: Alternative registers, IY
Remark : Use of EXTROM or CALSLT is more convenient.
In IX a extra value to the routine can be given by first
PUSH'ing it to the stack.
</pre>
<h3 id="EXTROM">EXTROM</h3>
<pre>Address : #015F
Function : Calls a routine in SUB-ROM. Most common way
Input : IX - Address of routine in SUB-ROM
Output : Depends on the routine
Registers: Alternative registers, IY
Remark : Use: LD IX,address
CALL EXTROM
</pre>
<h3 id="CHKSLZ">CHKSLZ</h3>
<pre>Address : #0162
Function : Search slots for SUB-ROM
Registers: Alles
</pre>
<h3 id="CHKNEW">CHKNEW</h3>
<pre>Address : #0165
Function : Tests screen mode
Output : C-flag set if screenmode = 5, 6, 7 or 8
Registers: AF
</pre>
<h3 id="EOL">EOL</h3>
<pre>Address : #0168
Function : Deletes to the end of the line
Input : H - x-coordinate of cursor
L - y-coordinate of cursor
Registers: All
</pre>
<h3 id="BIGFIL">BIGFIL</h3>
<pre>Address : #016B
Function : Same function as FILVRM (total VRAM can be reached).
Input : HL - address
BC - length
A - data
Registers: AF,BC
</pre>
<h3 id="NSETRD">NSETRD</h3>
<pre>Address : #016E
Function : Same function as SETRD.(with full 16 bits VRAM-address)
Input : HL - VRAM address
Registers: AF
</pre>
<h3 id="NSTWRT">NSTWRT</h3>
<pre>Address : #0171
Function : Same function as SETWRT.(with full 16 bits VRAM-address)
Input : HL - VRAM address
Registers: AF
</pre>
<h3 id="NRDVRM">NRDVRM</h3>
<pre>Address : #0174
Function : Reads VRAM like in RDVRM.(with full 16 bits VRAM-address)
Input : HL - VRAM address
Output : A - Read value
Registers: F
</pre>
<h3 id="NWRVRM">NWRVRM</h3>
<pre>Address : #0177
Function : Writes to VRAM like in WRTVRM.(with full 16 bits VRAM-address)
Input : HL - VRAM address
A - Value to write
Registers: AF
</pre>
<h1 id="msx2pbios">MSX 2+ BIOS Entries</h1>
<h3 id="RDRES"><span id="RDBTST">RDRES</span></h3>
<pre>Address : #017A
Function : Read value of I/O port #F4
Input : none
Output : A = value read
Registers: AF
</pre>
<h3 id="WRRES"><span id="WRBTST">WRRES</span></h3>
<pre>Address : #017D
Function : Write value to I/O port #F4
Input : A = value to write
When bit 7 is reset it shows the MSX 2+ startup screen on boot,
and counts and initialises the RAM.
Output : none
Registers: none
</pre>
<h1 id="msxtrbios">MSX turbo R BIOS Entries</h1>
<h3 id="CHGCPU">CHGCPU</h3>
<pre>Address : #0180
Function : Changes CPU mode
Input : A = LED 0 0 0 0 0 x x
| 0 0 = Z80 (ROM) mode
| 0 1 = R800 ROM mode
| 1 0 = R800 DRAM mode
LED indicates whether the Turbo LED is switched with the CPU
Output : none
Registers: none
</pre>
<h3 id="GETCPU">GETCPU</h3>
<pre>Address : #0183
Function : Returns current CPU mode
Input : none
Output : A = 0 0 0 0 0 0 x x
0 0 = Z80 (ROM) mode
0 1 = R800 ROM mode
1 0 = R800 DRAM mode
Registers: AF
</pre>
<h3 id="PCMPLY">PCMPLY</h3>
<pre>Address : #0186
Function : Plays specified memory area through the PCM chip
Input : A = v 0 0 0 0 0 x x
| | |
| +-+-- Quality parameter (Speed: 0 = Fast)
+---------------- VRAM usage flag
HL= Start address in RAM or VRAM
BC= Length of area to play
D = Bit 0 = Bit 17 of area length when using VRAM
E = Bit 0 = Bit 17 os start address when using VRAM
Output : C-flag set when aborted with CTRL-STOP
Registers: all
</pre>
<h3 id="PCMREC">PCMREC</h3>
<pre>Address : #0189
Function : Records audio using the PCM chip into the specified memory area
Input : A = v t t t t c x x
| | | | | | | |
| | | | | | +-+-- Quality parameter (Speed: 0 = Fast)
| | | | | +------ Zero-data compression
| +-+-+-+-------- Treshold
+---------------- VRAM usage flag
HL= Start address in RAM or VRAM
BC= Length of area to play
D = Bit 0 = Bit 17 of area length when using VRAM
E = Bit 0 = Bit 17 os start address when using VRAM
Output : C-flag set when aborted with CTRL-STOP
Registers: all
</pre>
<p class="signed">BiFi</p>
</div>
<div id="foot">© 2020 MSX Assembly Page. MSX is a trademark of MSX Licensing Corporation.</div>
</body>
</html>