Código para leer ROM mapper ASCII 16KB

Par DarkSchneider

Paladin (942)

Portrait de DarkSchneider

17-03-2014, 09:29

He estado buscando mucho pero desgraciadamente sólo encontraba al respecto de los ROM mapper temas de hardware, para fabricarse cartuchos. Lo otro que vemos por ahí es la documentación "técnica" sobre los bancos y donde escribir para seleccionarlos. Sin embargo desde el punto de vista del software no he logrado encontrar nada.

Así pues, me he puesto manos a la obra y aquí tengo un código con el que se puede leer de una ROM con mapper de tipo ASCII 16KB. Está totalmente comentado con creo lo necesario para entenderlo. Si no es así pues basta con que quien quiera pues pregunte y respondemos Wink

10 REM para ejecutar este programa, ejecutar "POKE &HF676,1:poke &Hf677,&HC0:POKE &HC000,0:new" en una sola linea, y luego hacer el LOAD del programa
20 REM OJO, no se puede establecer el 8000h sin establecer el 4000h al cartucho
30 REM si vamos a establecer solo 1, DEBE ser 4000h. Si se quiere usar la 8000h hay que cambiar el slot para ambos, establecer el bank (vale solo para la 8000h) y luego volver a restaurar el slot de 4000h
40 REM CUIDADO, no se puede ejecutar codigo en un banco al que cambiamos el SLOT (como el 8000h por defecto y BASIC). Para ello o almacenamos el codigo en RAM (C000h) o usamos 4000h del cartucho
50 DATA &h3e,1,&h21,0,&h40,&hcd,&h24,0
60 DATA &h3e,1,&h21,0,&h80,&hcd,&h24,0
70 REM en 6000h seleccionamos el bank de 4000h y en 7000h el de 8000h, es simplemente el numero de segmento de 16KB empezando en 0. Podemos seleccionar cualquier segmento en cualquier bank
80 REM para probar a usar solo 8000h, comentar linea 90 y descomentar 110, y adecuar el TO del FOR
90 DATA &h3e,2,&h32,0,&h60
100 DATA &h3e,3,&h32,0,&h70
110 REM DATA &h3e,0,&h21,0,&h40,&hcd,&h24,0
120 DATA &h3a,0,&h40,&h32,0,&he0
130 DATA &h3a,0,&h80,&h32,1,&he0
140 DATA &h3e,0,&h21,0,&h40,&hcd,&h24,0
150 DATA &h3e,0,&h21,0,&h80,&hcd,&h24,0,&hc9
160 REM modificar el TO dependiendo de lo que se haya comentado o no anteriormente
170 FOR I%=0 TO 54:READ A%:POKE &HD000+I%,A%:NEXT I%
180 DEFUSR=&HD000:A%=USR(0)
190 PRINT PEEK(&HE000):PRINT PEEK(&HE001)

La ROM para pruebas es esta:
https://dl.dropboxusercontent.com/u/56103320/Files/MSX/ascii%20test.rom
Hay que cargarlo como ASCII 16. Es una ROM de 128KB en la que simplemente en el 1er byte de cada segmento de 16KB contiene un 1, 2, 3..., 8. Así sabremos de que segmento estamos leyendo en cada banco. Ejecutando el código anterior comprobamos que funciona.
La ROM puede ser también de 64KB, 256KB, etc. La única diferencia es la cantidad de segmentos seleccionables en 6000h y 7000h antes de "dar la vuelta".

Hay una cosa que no entiendo, y es el por qué debo poner mi código BASIC fuera de la página 8000h si cuando hago el cambio de slot para dicha página estoy ejecutando CM en D000h. ¿Alguien lo sabe?.

Y otra duda que tengo, ¿cómo se identifica un cartucho su tipo de mapper?, ¿se hace por una BD o se puede detectar de alguna forma?. Es que si hago algo en ROM de este tipo, pues tendría que acompañarlo con un TXT diciendo que hay que forzarlo al cargar en formato ASCII 16, y me gustaría que se detectara automáticamente.

!login ou Inscrivez-vous pour poster

Par Guillian

Prophet (3473)

Portrait de Guillian

17-03-2014, 10:57

DarkSchneider wrote:

Hay una cosa que no entiendo, y es el por qué debo poner mi código BASIC fuera de la página 8000h si cuando hago el cambio de slot para dicha página estoy ejecutando CM en D000h. ¿Alguien lo sabe?.

Porque no restauras correctamente el slot de la página 2 (#8000-#BFFF). Estás seleccionando el slot 0 (ROM) con lo que el programa BASIC desaparece.

DarkSchneider wrote:

Y otra duda que tengo, ¿cómo se identifica un cartucho su tipo de mapper?, ¿se hace por una BD o se puede detectar de alguna forma?. Es que si hago algo en ROM de este tipo, pues tendría que acompañarlo con un TXT diciendo que hay que forzarlo al cargar en formato ASCII 16, y me gustaría que se detectara automáticamente.

Los emuladores suelen usar una base de datos para identificar la ROM y así saber su mapper.

Par DarkSchneider

Paladin (942)

Portrait de DarkSchneider

17-03-2014, 11:07

Leñe es verdad, es lo que tiene el copy-paste. Hay que cambiar esta línea (no puedo editar el mensaje original):
150 DATA &h3e,3,&h21,0,&h80,&hcd,&h24,0,&hc9
Y eliminar la línea 10 que ya no hace falta.

OK, entonces a tirar de TXT Big smile

Par Miguel_Noe

Champion (465)

Portrait de Miguel_Noe

08-04-2014, 18:41

Yo esto de pasar los LD, INC ...a &h3e, ni pu.. Idea. me parece de papel y lápiz.

Par DarkSchneider

Paladin (942)

Portrait de DarkSchneider

08-04-2014, 19:02

Jaja si es un poco coña, en realidad es tan sólo transcribir los opcodes a su hexadecimal, código máquina como quien dice. Ya pregunté sobre los opcodes del Z80 en otro hilo para esto.

Par Miguel_Noe

Champion (465)

Portrait de Miguel_Noe

08-04-2014, 19:51

Estoy empezando esto del código maquina en mi MSX con un ensamblador en cinta... Madre de dios.

Par Miguel_Noe

Champion (465)

Portrait de Miguel_Noe

08-04-2014, 22:17

Que suerte! Que suerte! buscando en internete, encontré un libro cojo--nudo, para empezar a programa en CM.
Comunidadmsx.com y Jose Delgado, muchas gracias!!! Big smile

Vamos a ver los 3,5 MHz lo rápido que son...