Me presento y hago una pregunta sobre Desarrollo de ROMS

By Juancar020870

Supporter (2)

Juancar020870's picture

16-07-2019, 22:45

Saludos a todos. Soy nuevo por aquí...
Antiguo programador de juegos en z80 (sin ningún éxito! :-) ) pero ahora me ha picado el gusanillo y quiero volver a disfrutar con el ensamblador en estas máquinas.
Me estoy interesando en hacer algún juego (que tengo a medias desde hace 30 años) para MSX, tal vez MSX2, y estoy en proceso de aprender...
La verdad es que me está costando encontrar un hilo único del que tirar y os haré una pregunta que tal vez sea una gran chorrada, así que espero que seais comprensivos... Ahí va:

Cuando se programan juegos que se producen en ROM, cómo mapean la memoria estos juegos en el cartucho? es decir la van metiendo siempre en un único slot o en los 64K? Y cómo manejan las variables y datos del juego? quiero decir que si es ROM, no podrán actualizar nada allí, por lo que necesariamente necesitarán usar la RAM del MSX "nativa" para manejar variables y buffers, no?

Gracias por no reiros de la cuestión y la ayuda!!!

Un saludo!

Login or register to post comments

By osises

Master (214)

osises's picture

17-07-2019, 17:56

Hola.

Respecto a como funciona el manejo de memoria de una rom de un cartucho en MSX hay que entender que hay tres formas. Una, la más primigenia, implementada en MSX de primera generación; en la segunda generación, MSX2, se implementó un sistema de memoria, conocida como "memoria mapeada", que aumentaba la cantidad total de memoria accesible por el sistema; el tercer método consiste en alguna otra implementación realizada por el fabricante del cartucho, que añadía circuitería para acceder a toda la memoria implementada en el cartucho.

El método desarrollado en la primera generación funciona más o menos así: Supongamos un juego de 16KB. Las primeras 16KB que accede el Z80, desde la dirección 0000h, están ocupadas por la BIOS. El contenido del cartucho, las 16KB, se ubican a continuación, por lo que el resto de memoria, 32KB si dispone de 32KB ó 64KB en total de RAM, se ubican seguidas en los dos bloques de 16KB altos. Esta zona de RAM es la de trabajo que utilizará el programa contenido en el cartucho y la propia BIOS.

Creo que es posible crear cartuchos de 8KB (no tengo claro si de menos), que funcionará de una forma similar. Igualmente hay muchos juegos de 32KB de ROM, que dejarán libre únicamente un bloque de 16KB de RAM, en la zona más alta.

Todos los cartuchos que dispongan de más de 32KB (si no me equivoco) utilizan algún método de mapeo de memoria, el cual es accesible por medio de las rutinas incluidas en el programa almacenado en la ROM. Si no me equivoco hay dos o tres métodos para hacerlo, básicamente el creado por ASCII y el de Konami.

En libro blanco de MSX (creo que es ese) explica todo lo necesario para crear programas que se almacenarán en cartucho, con los códigos que deben aparecer al inicio de este para que pueda ser leído y ejecutado correctamente por la BIOS.

Seguro que los gurús del foro te puedan dar más detalles de esto.

Salu2

By Mortimer

Supporter (10)

Mortimer's picture

17-07-2019, 22:09

Por completar la gran explicación de osises, sí que pueden haber cartuchos de más de 32KB sin mapeador, los de 48KB son frecuentes, y los de 64KB menos pero existen. Los de 48KB usan las tres páginas inferiores, y como en la cero está la BIOS, o bien conmutan temporalmente y luego vuelven a restaurar la BIOS, o bien a partir de cierto momento no la vuelven a utilizar. En el caso de los 64KB es un poco más complicado porque normalmente supone quedarse sin RAM, se suele usar para almacenar cosas que enviar a la VRAM.

Como dices que estás empezando o reempezando, los más sencillo es hacer una ROM de 16 o 32KB, si es de 16 no tienes que hacer nada con los slots y la BIOS te pasa el control con todo listo, si es de 32KB sólo necesitarás una pequeña rutinita para hacer visible toda la ROM y listo.

Ánimo!

By Juancar020870

Supporter (2)

Juancar020870's picture

18-07-2019, 11:35

Jobar, muy bien explicado!! Sois unos cracks. Muchísimas gracias!

A ver si consigo montarme un entorno de desarrollo ágil, ya que no tengo MSX donde programar y no encuentro un emulador con el ensamblador "incrustado", que me sería lo ideal (tipo WinAPE para Amstrad).

Lo dicho, Muchas gracias!

By manolito74

Paladin (993)

manolito74's picture

18-07-2019, 14:29

Buenas:

Pues sí, @Juancar020870, es impresionanante el nivel Técnico que hay por estos lares. ;-)

No sé si te sirve de algo o no, pero a modo de curiosidad te dejo este enlace donde se habla de la Memoria de los MSX, la Ram, Rom y demás:

https://yotambientuveunmsx.wordpress.com/2016/12/03/curso-de...

Saludetes. ;-)

By Manel46

Champion (417)

Manel46's picture

18-07-2019, 18:08

 output "nombre.rom"
 org #4000
 DB "AB" ;#41,#42 Identificador de rom
 DW INICIO,0,0,0,0,0,0  ;Inicio codigo. Puede ser qualquier dirección
 ;Código
INICIO
;
;
;
FINAL ;Final código
 ;PARA 8 Kbs
 DS #6000-FINAL ;#8000, para 16Kbs
; Variables
 MAP #C000 ;ram P3
VARIBLE1  #1 ;Reservamos bytes para variables.
VARIBLE2  #4 ;#n, n número de bytes
VARIBLE3  #2
 ENDMAP

Este seria el código de una rom tipo de 8/16kbs. Para sjasm. El editor que uso es el Editplus.
Para roms de 32 kbs, hace falta rutina para situar la p2 de la rom.