Karoshi MSX Community
05 de Julio de 2021, 03:29:21 pm *
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.

Ingresar con nombre de usuario, contraseña y duración de la sesión
Noticias:
 
   Inicio   Ayuda Buscar Ingresar Registrarse  
Páginas: [1]
  Imprimir  
Autor Tema: Identificación de modelo desde el DOS  (Leído 2923 veces)
0 Usuarios y 1 Visitante están viendo este tema.
aorante
Karoshi Maniac
****
Mensajes: 451


nuTella Power!


WWW Email
« : 30 de Junio de 2013, 11:36:39 am »

Hola compañeros!

Estoy con una aplicación pasándola de ROM a .COM (por facilitar el acceso a disco), y me encuentro que al ejecutarla se transforma esa parte inicial de la BIOS que se conserva en el DOS, perdiendo el valor de modelo de MSX que utilizo para tocar la paleta en MSX2 o superiores.

Hay alguna forma de identificar el modelo desde MSX-DOS?

utilizo la versión 1.03 del DOS y lo he probado en el emu blueMSX
En línea

--------------------------------- ------ ----- --- -- -
aorante/303bcn
http://aorante.blogspot.com
http://twitter.com/#!/aorante
http://303bcn.wordpress.com/
--------------------------------- ------ ----- --- -- -
pitpan
Karoshi Forum's Guru
*******
Mensajes: 1812


« Respuesta #1 : 30 de Junio de 2013, 01:10:02 pm »

Pues prueba con algo parecido a lo siguiente:

Código:
CALSLT equ 001Ch
EXPTBL equ FCC1h
RDSLT equ 000Ch
MSXVER equ 002Dh

; Read BIOS slot
ld iy,[EXPTBL-1]

; BIOS routine address
ld ix,RDSLT

; BIOS routine parameters
ld a,iyl
ld hl,MSXVER

; Interslot call
call CALSLT             

No la he probado, pero parece funcionalmente correcta: hace desde MSX-DOS una llamada interslots que a su vez, llama a la rutina de la BIOS para leer un valor desde una posición de memoria en un slot dado. Igual hay algo parecido y más fácil, pero esta debería funcionar bien en cualquier MSX, incluso aunque no tenga la BIOS ubicada en 0-0.

Y si no funciona, juega un poco con ella, que tiene buena pinta... Grin
En línea
MsxKun
Karoshi Forum's Guru
*******
Mensajes: 1554


Kimochi-ii


WWW Email
« Respuesta #2 : 30 de Junio de 2013, 01:35:52 pm »

De hecho deberias poder usar RDSLT directamente y te ahorras un pasico... Prueba a ver.

Código:

@EXPTBL@:  equ $FCC1
@MSX@:      equ $2d
_RDSLOT_:   equ $0c

ld a,(@EXPTBL@-1) ; slot BIOS
ld hl,@MSX@
call _RDSLOT_

En línea

--

Cindy Lauper She Bops!
aorante
Karoshi Maniac
****
Mensajes: 451


nuTella Power!


WWW Email
« Respuesta #3 : 02 de Julio de 2013, 12:09:28 pm »

Muchas gracias pitpan y kun!

funciona!!  Cheesy

lo he trasladado a C (SDCC) y lo pego por aquí por si a alguien le interesa:

Código:
//Reads the value of an address in bios slot
unsigned char peekBiosSlot(unsigned int addr)
{
addr;
__asm
  ld L,4(ix)
  ld H,5(ix)
   
  ld A,(#0xFCC1-1)  ; slot BIOS
  call 0x000C       ;RDSLT

  ld l,a  ;devuelve el valor
__endasm;
}
En línea

--------------------------------- ------ ----- --- -- -
aorante/303bcn
http://aorante.blogspot.com
http://twitter.com/#!/aorante
http://303bcn.wordpress.com/
--------------------------------- ------ ----- --- -- -
Páginas: [1]
  Imprimir  
 
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.21 | SMF © 2013, Simple Machines XHTML 1.0 válido! CSS válido!