Las Rutinas del BIOS

MSX – Las Rutinas de la BIOS

Nota: el símbolo «#» delante de un número indica que ese número es Hexadecimal.

RST-and other routines

Posición: #0000  (CHKRAM) (también llamada STARTUP, RESET or BOOT)
Esta rutina no necesita parámetros de entrada ni tampoco ofrece ninguno a la salida. Puede ser ejecu­tada utilizando un restart (RST O). Su función es la de inicializar el ordenador. Por consiguiente, se lla­ma cuando se quiere empezar de nuevo, cuando se pulsa el botón de reset o, automáticamente, al en­cender el aparato.

Posición #0008 (SYNCHR)    y    #0010   (CHRGTR )
Estas rutinas son utilizadas por el intérprete BA­SIC para analizar los errores de sintaxis, tomar el siguiente carácter o token del programa, etc. Son de poca utilidad, aunque una posible aplicación seria la de construir un BASIC extendido.

Posición: #000C  (RDSLT)
Se usa para leer una dirección de memoria de un cartucho determinado. El número de cartucho ha de colocarse en el acumulador y la dirección en el registro HL. Altera AF, BC y DE.

Posición: #0014  (WRSLT)
Igual que la anterior pero para escribir.

Posición: #0018 (OUTDO)
Es, sin duda, una rutina muy útil. Puede ser lla­mada con RST 18. Se encargará de sacar el carácter contenido en el acumulador al periférico seleccio­nado.
– Si la posición de memoria #F416 contiene un cero, la salida será a la pantalla.
– Si #F416 es distinto de cero, la salida será por impresora.
Por último, tienes la posibilidad de escribir en un fiche­ro de disco, cargando #F864 con la dirección de memoria de dicho fichero, que señalará el dato a mandar.
RST 18 no modifica ningún registro. Por otra parte, realiza una llamada al gancho situado en #FEE4 después de guardar el par AF en la pila. Como puedes intuir, poner un parche en esa direc­ción te dará la oportunidad de controlar los distin­tos periféricos a tu antojo.

Posición: #001C  (CALSLT)
Esta rutina se emplea para ejecutar una subruti­na de un cartucho.

Posición: #0020  (DCOMPR)
Puedes comparar los registros DE y HL llamando a esta rutina. Aquí tienes su listado:

LD            A, D
CP            H
RET          NZ
LD            A, E
CP           L
RET

Posición: #0024  (ENASLT)
Esta rutina selecciona una página de un cartucho. 

Posición #0028  (GETYPR)
Es empleada por el intérprete BASIC para cono­cer el tipo de variable que se está utilizando.
Alter­nativamente se puede leer la dirección #F663, puesto que siempre se almacena aquí el número de bytes de la variable usada; es decir; dos para las va­riables numéricas enteras, cuatro para las de preci­sión sencilla, ocho para las de doble precisión y tres para las cadenas alfanuméricas.
Sin embargo, no es seguro que esta dirección se respete en futuras ver­siones. Por tanto observa si el flag C está a 0 (tipo 8), el flag M está a 1 (tipo 2), el flag Z está a 1 (tipo 3) o el flag P se encuentra a 0 (tipo 4).

Posición #0030  (CALLF)
Ejecuta una rutina contenida en un cartucho. El byte siguiente al RST 30 debe contener el identifica­dor del cartucho y después debe colocarse la direc­ción de llamada.

Posición #0038 (KEYINT)
Esta rutina es ejecutada 50 veces por segundo, salvo que las interrupciones estén desactivadas.
Lo primero que hace es guardar los registros en la pila (incluidos los alternativos y los de indice), por lo que podrás emplearlos todos libremente y sin res­tricciones.
Si pones un parche en la dirección #FD9A forzarás al sistema operativo a ejecutar una de tus rutinas siempre que se produzca una in­terrupción.
Como puedes ver, esto te da un poder in­menso sobre el ordenador. No modifica ningún re­gistro, pero altera muchas posiciones de memoria, ya que actualiza, entre otras, la variable TIME y las escalas musicales. Asimismo, comprueba las coli­siones de los SPRITES, el teclado, etc.

Initialization-routines

Posición: #003B  (INITIO)
Inicializa el Dispositivo.
Modifica todos los Registros.

Posición: #003E  (INIFNK)
Inicializa el contenido de las Teclas de Función.
Modifica todos los Registros.

VDP routines

Posición: #0041  (DISSCR)
Llamándola haces que la pantalla se desconecte. No obstante, todo lo que escribas se conservará y podrás visualizarlo con la siguiente rutina. Suele ser útil cuando se hace un dibujo muy complicado que se quiere mostrar en pantalla instantáneamen­te. Modifica los pares AF y BC.

Posición: #0044  (ENASCR)
Esta rutina activa la pantalla, por lo que comple­menta a la anterior. Al igual que aquélla, modifica los registros AF y BC.

Posición: #0047  (WRTVDP)
Se llama a esta rutina para escribir en uno de los registros de estado del procesador de vídeo (VDP).
En C debe ponerse el número de registro a escribir y en B el dato en cuestión. Su equivalente en BASIC se­ría: VDP(C)=B. Es importante emplear esta rutina, en lugar de acceder al VDP directamente, puesto que se encarga de guardar una copia del registro de estado en la RAM del sistema, desde la posición #F3DF hasta la #F3E6.
Ten presente que estos registros sólo son de escritura y no podrías com­probar los datos una vez mandados. Modifica los pares AF y BC.

Posición #004A   (RDVRM)
Funciona igual que la instrucción VPEEK del BA­SIC. Debes cargar la dirección de la RAM de vídeo en el par HL y obtendrás a la salida el resultado en el acumulador. Modifica sólo AF.

Posición: #004D  (WRTVRM)
Es idéntica a la anterior sólo que ésta actúa como VPOKE. El dato a escribir ha de ponerse en el acumulador.

Posición: #0050  (SETRD)
Dispone el VDP para una operación de lectura. Es mejor pasarla por alto y llamar directamente a la rutina situada en #59.

Posición: #0053  (SETWRT)
Prepara el VDP para una operación de escritura. Al igual que la anterior es mejor olvidarla y acceder a la rutina colocada en #5C.

Posición: #0056  (FILVRM)
Esta rutina llena la RAM de vídeo de un mismo valor contenido en el acumulador. La posición de origen debe encontrarse en HL y la longitud del blo­que en BC. Modifica los pares AF y BC.
La utilidad de esta rutina es colorear la pantalla rápidamente. Las instrucciones CLS, COLOR, LINE y PAINT la em­plean.

Posición: #0059  (LDIRMV)
Esta rutina traslada un bloque de la RAM del VDP hacia la memoria central. La longitud del referido bloque ha de encontrarse en BC, el destino en DE y el origen en HL. Modifica AF, BC y DE.
Tarde o tempra­no todos los programadores han de encontrarse con esta rutina, por lo que su uso es prácticamente imprescindible.

Posición: #005C  (LDIRVM)
La rutina situada en esta dirección tiene un com­portamiento análogo a la anterior, con la diferencia de que traslada un bloque desde la memoria central a la RAM de vídeo.

Posición: #005F (CHGMOD)
Esta llamada pone al VDP en uno de los cuatro modos de pantalla. El acumulador deberá contener el modo seleccionado.
Su equivalente en BASIC se­ría SCREEN A. No inicializa los SPRITES. Modifica todos los registros así como las posiciones de me­moria #F3B0, #F922, #F924, #FCAF y #FCB0.

Posición: #0062  (CHGCLR)
Esta rutina cambia el color de la pantalla, toman­do como nuevos valores las posiciones de memoria siguientes: #F3E9 (color de la tinta), #F3EA (color del papel) y #F3EB (color del borde). Modi­fica los pares AF, BC y HL.

Posición: #0066  (NMI)
Función : Executes (non-maskable interupt) handling routine.

Posición: #0069 (CLRSPR)
Su cometido es inicializar todos los SPRITES. Al­tera todos los registros.

Posición: #006C  (INITXT)
Esta rutina actúa como la instrucción BASIC SCREEN 0. Modifica todos los registros así como lasposiciones de memoria que van desde la #F3DF a la #F3E5.

Posición: #006F  (INIT32)
Funciona igual que la anterior pero para el SCREEN 1.

Posición: #0072  (INIGRP)
Igual que las anteriores pero para SCREEN 2.

Posición: #0075 (INIMLT)
Igual para SCREEN 3.

Posición #0078 (SETTXT)
Inicializa al VDP para trabajar en SCREEN 0, pero sin tocar la RAM de vídeo. Modifica los mismos registros y posiciones de memoria que la rutina si­tuada en #6C.

Posición: #007B  (SETT32)
Trabaja igual que la anterior pero para SCREEN 1.

Posición #007E   (SETGRP)
Igual que las anteriores pero para SCREEN 2.

Posición: #0081 (SETMLT)
Lo mismo para SCREEN 3.

Posición: #0084  (CALPAT)
Función: Devuelve la dirección de la Tabla de Patrones de los Sprites.
Entrada: A – Sprite ID
Salida : HL – Para la Dirección.

Posición: #0087  (CALATR)
Con esta rutina sólo tendrás que cargar un núme­ro de SPRITE en el acumulador para que te devuelva la dirección de la VRAM en la que se encuentran los atributos del SPRITE seleccionado, gracias al regis­tro HL.
Modifica los pares HL y DE así como los flags.

Posición: #008A  (GSPSIZ)
Esta rutina te informará del tipo de SPRITE que estás empleando, o mejor dicho: el número de bytes que emplea cada uno de éstos, que pueden ser 8 ó 32. Por tanto, a la salida tendrás en el acumulador una de estas dos cantidades. Además el carry se pondrá a 1 si los SPRITES son del tipo ampliado. Unicamen­te modifica el par AF.

Posición: #008D  (GRPPRT)
Esta rutina escribe el carácter contenido en el acumulador en la dirección especificada por el cur­sor gráfico (la coordenada X está en #FCB3 y la coordenada Y en #FCB4), siempre y cuando estés trabajando en SCREEN 2.
Sólo modifica las posiciones de memoria #F92A, #F923 y #F92C.

PSG routines

Posición: #0090  (GICINI)
Esta rutina inicializa el Generador Programable de Sonido. No modifica ningún registro, pero altera toda el área de la cola del sonido, que empieza en #F975 y termina en #FA74.

Posición: #0093  (WRTPSG)
Con ella puedes escribir en uno de los registros del PSG. El número de registro ha de colocarse en el acumulador y en E el dato a mandar (comprendido entre 0 y 13).
Su equivalente en BASIC sería: SOUND A, E. Esta llamada no modifica ningún re­gistro.

Posición: #0096 (RDPSG)
Esta rutina sirve para leer un registro del PSG. El acumulador debe contener el número de registro (comprendido en 0 y 13). Sólo altera el contenido de A.

Posición: #0099  (STRTMS)
Se llama a esta rutina para ejecutar la escala mu­sical (caso de haberla). Si en el buffer de sonido no hay ninguna escala escrita el acumulador se carga­rá con un cero. Modifica los pares AF y HL, así como las posiciones de memoria #FB3F y #FB40.

Console routines

Posición: #009C   (CHSNS)
Comprueba si las teclas de función están activas en la pantalla. En caso afirmativo, analiza las teclas SHIFT, para mostrar el contenido de las funciones F6 y F10, si están pulsadas.
Esta rutina pondrá el flag Z a 1 si no hay ninguna tecla apretada. Unica­mente modifica AF.

Posición: #009F  (CHGET)
Esta rutina es de gran importancia. Su cometido es coger un carácter del buffer del teclado. Si este buffer está vacío enseñará el cursor y esperará has­ta que se pulse una tecla. A la salida, el acumulador contendrá el código del carácter. Asimismo, realiza una llamada al gancho situado en #FDC2 después de apilar los pares HL, DE y BC. No modifica ningún registro.

Posición: #00A2  (CHPUT)
Imprime el carácter del acumulador en la posición en la que se encuentre el cursor, aunque se tra­te de un código de control. Actualiza la pantalla, desplazándola o haciendo un cambio de línea si es preciso.
Después de apilar todos los registros salta al gancho situado en #FDA4. No modifica ningún registro pero sí las coordenadas Y y X del cursor (almacenadas en #F3DC y #F3DD respectiva­mente ) y la dirección #F661.

Posición: #00A5  (LPTOUT)
Envía el carácter contenido en el acumulador a la impresora, esperando hasta que ésta esté prepara­da. Si se pulsa CTRL-STOP el flag C se pondrá a 1. No modifica ningún registro.

Posición: #00A8  (LPTSTT)
Esta rutina es llamada por la anterior. Su finali­dad es comprobar si la impresora está ON-LINE. De no ser así el flag Z se pondrá a 1. Modifica el par AF.

Posición: #00AB  (CNVCHR)
Transforma el código contenido en el acumula­dor en un carácter gráfico (si es menor que 32), en la forma que el VDP está preparado para aceptar. Prueba con VPOKE 0,1 y entenderás perfectamente el funcionamiento de esta rutina. Modifica el par AF.

Posición: #00AE  (PINLIN)
Acepta una línea completa del teclado. Puesto que una línea puede contener hasta 255 caracteres, ésta se almacena en buffer de entrada que está si­tuado entre las posiciones #F55E y #F65D. A la salida, el par HL apunta al inicio de este buffer me­nos uno. Modifica todos los registros.

Posición: #00B1  (INLIN)
Esta rutina es similar a la anterior. Aceptará la entrada de caracteres e irá mostrándolos en la pan­talla hasta que se pulse RETURN o CTRL-STOP. Mo­difica todos los registros.

Posición: #00B4  (QINLIN)
Estarutina actúa de forma idéntica a las anterio­res, pero visualizando antes el signo de interroga­ción característico de los INPUT.

Posición: #00B7  (BREAKX)
Sirve para comprobar si se ha pulsado CTRL-STOP. Si esto es así, el flag C se pondrá a 1. Modifica AF.

Posición: #00BA  (ISCNTC)
Estarutina complementa a la anterior, pero ade­más analiza si se ha pulsado únicamente la tecla STOP, para detener la ejecución del programa cuan­do así sea. Altera el par AF.

Posición #00BD  (CKCNTC)
Esta rutina hace exactamente lo mismo que la anterior, pero empleando más tiempo.

Posición: #00C0  (BEEP)
Produce un BEEP e inicializa el PSG, llamando a la rutina situada en #90. Modifica todos los regis­tros. Su equivalente en BASIC sería: BEEP.

Posición: #00C3  (CLS)
Su cometido es borrar la pantalla, con la condi­ción de que pongas el flag Z a 0 antes de llamarla. Modifica los pares AF, BC y DE y las posiciones de la RAM del sistema relacionadas con el cursor.
El modo de pantalla que se esté utilizando es indife­rente.

Posición: #00C6  (POSIT)
Sitúa el cursor en la posición especificada por el registro HL, para lo cual es necesario poner la co­lumna en H y la fila en L. Altera el par AF y las direc­ciones de memoria encargadas de guardar las coor­denadas de cursor (#F3DC y &F3DD). Su equiva­lente en BASIC sería: LOCATE L, H.

Posición: #00C9  (FNKSB)
Esta rutina es llamada por el intérprete BASIC para saber si las teclas de función están activas.

Posición: #00CC  (ERAFNK)
Se llama a esta rutina para desconectar la visua­lización de las teclas de función. Su equivalente en BASIC sería: KEY OFF. Altera AF, BC y DE.

Posición: #00CF  (DSPFNK)
Puede utilizarse para mostrar el contenido de las teclas de función en la pantalla. Actúa como la ins­trucción BASIC KEY ON. Modifica los registros AF, BC y DE, asi como la posición #F3DE, que será cargada con #FF.

Posición: #00D2  (TOTEXT)
Esta rutina se emplea para cambiar de pantalla y ponerla en el otro modo de texto.

Controller routines

Posición: #00D5  (GTSTCK)
Esta llamada realiza una función idéntica a la instrucción BASIC A = STICK(A), por lo que te su­giero que leas el manual de tu ordenador para cono­cer los detalles. Modifica todos los registros.

Posición: #00D8  (GTTRIG)
Analiza el estado del disparador especificado por un número que debe cargarse en el acumulador. A la salida, tendrás un cero en el registro A, si ha ha­bido algún disparo, o 255, si no se ha pulsado el dis­parador. Modifica AF.

Posición: #00DB  (GTPAD)
Esta rutina funciona de forma análoga a la ins­trucción BASIC PAD (A). Por consiguiente, te acon­sejo que mires allí para obtener una información completa. Altera todos los registros.

Posición: #00DE  (GTPDL)
Esta rutina lee la raqueta de juegos especificada por el registro A. Asimismo, devuelve en el acumu­lador un parámetro comprendido entre 0 y 255, re­ferido a la posición actual. Modifica todos los regis­tros.

Tape device routines

Posición: #00E1  (TAPION)
Con esta llamada pondrás el motor del cassette en marcha y podrás leer la cabecera. Si se pulsa CTRL-STOP el flag C se pondrá a 1. Modifica todos los registros.

Posición: #00E4  (TAPIN)
Se emplea para leer un byte de la cinta, que será devuelto en el acumulador. Al igual que la rutina anterior, el carry se encenderá si la operación es abortada. Modifica todos los registros.

Posición: #00E7  (TAPIOF)
Esta rutina sirve para detener la operación de lectura del cassette. No altera ningún registro.

Posición: #00EA  (TAPOON)
Esta rutina pone el motor del cassette en marcha y escribe la cabecera en la cinta. El carry se pondrá a 1 si se interrumpe la escritura. Modifica todos los registros.

Posición: #00ED  (TAPOUT)
Carga el acumulador con un dato y esta rutina te lo escribirá en la cinta. Como siempre el carry en­cendido te indicará si la operación fue abortada por la pulsación de CTRL-STOP. Modifica todos los re­gistros.

Posición: #00F0  (TAPOOF)
Función: Detiene la Escritura en Cinta.

Posición: #00F3  (STMOTR)
Esta rutina conectará el motor del cassette, si el acumulador contiene un 1, o lo parará, si contiene un 0. Por otra parte, si cargas el registro A con #FF, antes de llamarla, invertirás el estado del motor.

Queue routines

Posición: #00F6  (LFTQ)
Function : Gives number of bytes in queue
Output : A – length of queue in bytes
Remark : Internal use

Posición: #00F9  (PUTQ)
Function : Put byte in queue
Remark : Internal use

Graphic routines

Posición: #00FC  (RIGHTC)
Esta rutina desplaza al cursor gráfico un punto hacia la derecha. Al llamarla, la posición #F92A y siguiente debe contener la dirección de la VRAM en la que se encuentra el punto.
Asimismo, deberás po­ner en la posición #F92C un valor cuyo único bit encendido muestre el punto a tratar. Por consi­guiente si #F92C contiene un 32 (&B00001000) el cursor gráfico señalará al tercer punto de la posi­ción especificada por #F92A, al volver de la ruti­na.
Modifica el par AF y las tres posiciones de me­moria antes referidas.

Posición: #00FF  (LEFTC)
Esta rutina hace exactamente lo mismo que la anterior, sólo que el cursor gráfico se desplaza un punto a la izquierda.

Posición: #0102  (UPC)
Hace lo mismo que las anteriores pero despla­zando el cursor hacia arriba.

Posición: #0105  (TUPC)
Trabaja igual que la rutina anterior pero pone el carry a 1 si se alcanza la fila superior de la pantalla.

Posición: #0108  (DOWNC)
Se comporta como #FC pero bajando un punto el cursor gráfico.

Posición: #010B  (TDOWNC)
También hace bajar un punto el cursor gráfico, aunque pondrá el carry a 1 si se llega a la fila infe­rior de la pantalla. El resto como #FC.

Posición: #011D  (READC)
Esta rutina devuelve en el acumulador el código de color del punto señalado por las posiciones de memoria #F92A a #F92C (ver la rutina situada en #FC).

Posición: #0120  (SETC)
Function : Returns currenct screenpixel of specificed attribute byte.

Posición: #0123  (NSETCX)
Esta rutina traza una línea hacia la derecha a partir de la posición especificada por las direccio­nes #F92A a #F92C (ver la rutina situada en #FC) y la longitud contenida en HL.
El color del trazo ha de colocarse en #F3F2. Modifica todos los registros.

Posición: #0126 (GTASPC)
Function : Gets screen relations
Output : DE, HL
Registers: DE, HL

Posición: #0129 (PNTINI)
Function : Initalises the PAINT instruction

Posición: #012C (SCANR)
Function : Scans screenpixels to the right

Posición: #012F (SCANL)
Function : Scans screenpixels to the left

Misc routines

Posición: #0132   (CHGCAP)
Usando esta rutina actuarás directamente sobre el diodo de las mayúsculas. Así, si el acumulador contiene un cero lo encenderás, con otro valor lo apagarás. Modifica el par AF.

Posición: #0135   (CHGSND)
Function : Alternates the 1-bit sound port status
Input : A – #00 to turn off
not #00 to turn on
Registers: AF

Posición: #0138   (RSLREG)
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

Posición: #013B   (WSLREG)
Function : Writes value to the primary slot register
Input : A – value value to (see RSLREG)

Posición: #013E   (RDVDP)
Function : Reads VDP status register
Output : A – Value which was read
Registers: A

Posición: #0141  (SNSMAT)
Esta rutina comprueba el estado de la matriz del teclado. Dicha matriz forma un cuadrado de 8 x 8. El acumulador deberá contener el número de la fila a explotar.
A la salida tendrás que A tiene un 255, si no ha sido pulsada ninguna tecla de la fila en cues­tión, o un bit puesto a cero indicando la tecla que si se ha pulsado. Unicamente altera el par AF y no es­pera hasta que se pulsa una tecla.

Posición: #0144  (PHYDIO)
Function : Executes I/O for mass-storage media like diskettes
Input : 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
F – Set carry to write, unset carry to read
Output : A – Error code (only when writing)
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 : Before the call is called, the Z-flag must be reset, and the execution
address which was in HL must be at the last stack address
By the way: In minimum configuration only a HOOK is available

Posición: #0147   (FORMAT)
Function : Initialises mass-storage media like formatting of diskettes
Registers: All
Remark : In minimum configuration only a HOOK is available

Posición: #014A   (ISFLIO)
Function : Tests if I/O to device is taking place
Output : A – #00 if not taking place
not #00 if taking place
Registers: AF

Posición: #014D  (OUTDLP)
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

Posición: #0150   (GETVCP)
Function : Returns pointer to play queue
Input : A – Channel number
Output : HL – Pointer
Registers: AF
Remark : Only used to play music in background

Posición: #0153  (GETVC2)
Function : Returns pointer to variable in queue number VOICEN (byte op #FB38)
Input : L – Pointer in play buffer
Output : HL – Pointer
Registers: AF

Posición: #0156  (KILBUF)
Sirve para borrar completamente el buffer del te­clado. Modifica el registro HL.
Nota: Las posiciones de la ROM 6 y 7 contienen los números de los puertos asignados para las ope­raciones de entrada/salida al VDP.

Posición: #0159 (CALBAS)
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

MSX 2 BIOS Entries

SUBROM

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.

EXTROM

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

CHKSLZ

Address  : #0162
Function : Search slots for SUB-ROM
Registers: Alles

CHKNEW

Address  : #0165
Function : Tests screen mode
Output   : C-flag set if screenmode = 5, 6, 7 or 8 
Registers: AF

EOL

Address  : #0168
Function : Deletes to the end of the line
Input    : H  - x-coordinate of cursor
           L  - y-coordinate of cursor
Registers: All

BIGFIL

Address  : #016B
Function : Same function as FILVRM (total VRAM can be reached).
Input    : HL - address
           BC - length
           A  - data
Registers: AF,BC

NSETRD

Address  : #016E
Function : Same function as SETRD.(with full 16 bits VRAM-address)
Input    : HL - VRAM address
Registers: AF

NSTWRT

Address  : #0171
Function : Same function as SETWRT.(with full 16 bits VRAM-address)
Input    : HL - VRAM address
Registers: AF

NRDVRM

Address  : #0174
Function : Reads VRAM like in RDVRM.(with full 16 bits VRAM-address)
Input    : HL - VRAM address
Output   : A  - Read value
Registers: F

NWRVRM

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


MSX 2+  – BIOS Entries

RDBTST

Address  : #017A
Function : Read value of I/O poort #F4
Input    : none
Output   : A = value read
Registers: AF

WRBTST

Address  : #017D
Function : Write value to I/O poort #F4
Input    : A = value to write
           Bit 7 shows the MSX 2+ startup screen when reset, otherwise it's skipped.
Output   : none
Registers: none

MSX – Turbo R – BIOS Entries

CHGCPU

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

GETCPU

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

PCMPLY

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

PCMREC

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

BiFi

Esta entrada fue publicada en Sin categoría. Guarda el enlace permanente.

Deja una respuesta

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s