Karoshi MSX Community

Desarrollo MSX => Desarrollo (Español/Spanish) => Mensaje iniciado por: aorante en 30 de Junio de 2013, 11:36:39 am



Título: Identificación de modelo desde el DOS
Publicado por: aorante en 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


Título: Re: Identificación de modelo desde el DOS
Publicado por: pitpan en 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... ;D


Título: Re: Identificación de modelo desde el DOS
Publicado por: MsxKun en 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_



Título: Re: Identificación de modelo desde el DOS
Publicado por: aorante en 02 de Julio de 2013, 12:09:28 pm
Muchas gracias pitpan y kun!

funciona!!  :D

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;
}