Desarrollo en MSX1

Pagina 2/2
1 |

Van assembler

Champion (378)

afbeelding van assembler

10-09-2010, 08:38

Primeros pasos con el SDCC.

Me he estado peleando intentando adaptar las librerías de z88dk para que funcionen en SDCC, pero no he tenido suerte (tampoco he podido echar demasiado tiempo).

Al final he decidido montar las mías propias. Como el juego es sencillito, y no necesito mucho, he empezado a hacerme mi minilibrería (vpokear, vpeekear, cambiar el modo de pantalla y leer teclado, cursor y joysticks simultaneamente, asunto necesario para un juego de 4 jugadores, a ver si es posible).

Supongo que habrá librerías por ahí que hagan eso, pero así me suelto un poco con el ASM del z80. Un poco nada más, que no estoy yo para muchos trotes Wink

Van assembler

Champion (378)

afbeelding van assembler

10-09-2010, 11:55

Una pregunta para los entendidos en ASM:
¿Puedo hacer alegremente un

in a, (0x99) <-- supuestamente esto era para sincronizar la CPU con el VDP
ld a,Byte bajo ram
out (0x99),a
ld a,Byte alto ram + 64
out (0x99),a
ld a, dato
out (0x98),a

para escribir en la VRAM, o tengo que estar pendiente de las interrupciones, ciclos u otras cositas?
También he visto por ahí que para ser 100% compatible, no se debe atacar directamente a los puertos 0x98 y 0x99, sino que hay que mirar (no se donde) para saber a que puertos atacar...

Van pitpan

Prophet (3131)

afbeelding van pitpan

11-09-2010, 01:07

Te recomiendo que te leas esta documentación en el foro de Karoshi. En ella se resuelven tus dudas sobre cómo leer el puerto correcto y las esperas necesarias entre iniciar los puertos y mandar datos. En un emulador te funcionará casi todo, así que mejor ponte en el peor caso ya de salida y asegúrate la compatibilidad con las máquinas reales ;)

Van assembler

Champion (378)

afbeelding van assembler

13-09-2010, 11:50

Gracias pitpan por el enlace.

Estoy trabajando con BlueMSX y parece que trata bien la relación entre la CPU y el VDP, porque haciendolo mal, aparecen datos erroneos en la pantalla cuando no se respetan los tiempos.

Otro problema que he superado (creo) es el de las variables. Haciendo pruebas no tenía ninguna pega, pero cuando el código ha empezado a crecer, no volvía correctamente al MSXDOS.
He revisado el código asm generado y me ha parecido ver que las variables locales las mete en la zona de RAM donde está el SO. Al usar variables globales, parece que va todo bien.

¿Alguien me puede decir la estructura de la memoria cuando está cargado el MSXDOS (donde va la ram, desde y hasta que dirección se puede utilizar en un programa)?

Van pitpan

Prophet (3131)

afbeelding van pitpan

13-09-2010, 14:04

Muy sencillo: la VRAM en MSX-DOS va exactamente en la VRAM... Wink
La VRAM del MSX no está mapeada en la RAM y no es visible directamente por el Z80. La única forma de acceder (salvo manipulaciones del hardware) es a través de los puertos que indicas.

En el MSX-DOS los programas de cargan en memoria a partir de 0100h. Los 256 bytes anteriores incluyen datos del SO, los comandos, etc. Y luego en la RAM alta tienes un poco de todo, así que cuidado... Pero puedes trabajar con total seguridad entre 0100h y 0E800h (siendo muy precavido, seguro que alguien que sepa de qué va el MSX-DOS te puede confirmar esto mejor, seguramente no pasa nada hasta llegar más allá de F800h), siempre que coloques la pila (SP) en una posición segura.

Van assembler

Champion (378)

afbeelding van assembler

13-09-2010, 16:56

Creo que está todo más o menos bajo control, aunque quiero investigarlo más.

Mi pregunta era sobre la RAM. Ahora que he empezado a programar he visto que con MSX-DOS, está todos los slots como RAM, pero supongo que el SO se pillará un cacho porque no creo que con los 100h primeros tenga para nada. Supongo que son ganchos a rutinas en otro sitio.

¿Puede ser que si el programa necesita 4KB de código y 2KB de datos, se cree un ejecutable de 6KB y se meta en la memoria de forma que así quede "reservada" toda la memoria que necesita?

Gracias pitpan.

Van assembler

Champion (378)

afbeelding van assembler

28-09-2010, 13:20

otro cambio más

Ahora estoy probando con asMSX. La verdad es que es más sencillo de lo que recordaba. Igual es por poder trabajar con el PC y el emulador. Tongue

Ya tengo la pantalla y los sprites cargados y moviendose con los cursores en plan cutre.

Pagina 2/2
1 |