Me presento y hago una pregunta sobre Desarrollo de ROMS

By Juancar020870

Supporter (4)

Аватар пользователя Juancar020870

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

By osises

Master (251)

Аватар пользователя osises

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

Rookie (20)

Аватар пользователя Mortimer

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 (4)

Аватар пользователя Juancar020870

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

Paragon (1293)

Аватар пользователя manolito74

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

Paladin (674)

Аватар пользователя Manel46

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.

By mohai

Paladin (1007)

Аватар пользователя mohai

14-10-2019, 20:15

Hola.
Si no conoces los MSX en profundidad, yo te recomendaría que te bajases el MSX Technical handbook.
Un apunte sobre cómo maneja el MSX la memoria: el BIOS siempre inicializa 1 banco de RAM en la parte alta de memoria, antes de arrancar otras ROMs o cartuchos, así que tu ROM se encontrará al menos, con 8 KB de RAM en 0xE000 (Si tu MSX es de los pocos que tienen 8 KB de RAM) ó 16 KB (Si tu MSX tiene 16 ó más).
Si tu ROM es de más de 16 KB, tu programa tendrá que habilitar a mano el otro banco de 16 KB.
Si necesitas más de 16 KB de RAM, tu programa tendrá que buscarla y habilitarla "a mano" (si no me equivoco).
Esto es a groso modo. No te lío con el sistema de slots/subslots. Si te lees documentción al respecto, creo que lo entenderás.

By samsaga2

Resident (62)

Аватар пользователя samsaga2

18-10-2019, 12:37

Personalmente te recomiendo el canal de YouTube:
https://www.youtube.com/watch?v=EKcw1-mKBPc&list=PLA4C5y1zBf...
Sobretodo el video numero 16 que es justo lo que tú estás buscando.

By Juancar020870

Supporter (4)

Аватар пользователя Juancar020870

09-05-2020, 20:38

Hola,
hace tiempo puse unas preguntas por aquí y dejé temporalmente el tema MSX por acabar los juegos en otro sistema (Amstrad). Ahora me estoy planteando ya más seriamente retomar la versión de MSX2.
Una pregunta adicional... por lo explicado y por lo que estoy viendo parece que lo normal debe ser que los juegos en cartucho funcionen con la BIOS activada y que incluso utilicen la BIOS para algunas cosas, como leer teclado o transferir datos a memoria. Es así? es normal el uso de la BIOS en juegos MSX?

Lo pregunto porque, por ejemplo, en Amstrad o Spectrum creo que es más normal que los juegos sean muy "autosuficientes" y una vez cargados desactiven todo el uso de BIOS o ROM.

Gracias por vuestra ayuda.

By Manel46

Paladin (674)

Аватар пользователя Manel46

10-05-2020, 18:07

Te aconsejo que uses la bios, de entrada.
http://map.grauw.nl/resources/msxbios.php
Claro que se puede pescindir de ella. Pero te facilita mucho el trabajo.
En esta web tienes rutinas que no la usan.