Karoshi MSX Community
05 de Julio de 2021, 08:22:31 pm *
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.

Ingresar con nombre de usuario, contraseña y duración de la sesión
Noticias:
 
   Inicio   Ayuda Buscar Ingresar Registrarse  
Páginas: [1] 2 3 4
  Imprimir  
Autor Tema: Como programar ROMS en C  (Leído 25353 veces)
0 Usuarios y 1 Visitante están viendo este tema.
nerlaska
Karoshi Excellent Member
******
Mensajes: 1102


Programador


WWW Email
« : 12 de Diciembre de 2006, 06:26:43 am »

Bueno ... como ya hay gente que me lo esta pidiendo y veo que ya existe revuelo al respecto ... he creado un documento y he subido un par de recursos para que la gente pueda montar su primera ROM de 32Kb usando C con SDCC.
La idea es que este primer documento que podéis encontrar aquí:

http://www.nerlaska.com/msx/Como_crear_ROMS_de_32Kb_con_SDCC.pdf

Sirva como plataforma de arranque en el desarrollo C para todos aquellos que quieran. Por supuesto, como primer documento y estar escrito a eso de las 3:00 AM de hoy .. seguro que igua tiene algún bug o algo mal .. bueno .. la idea es seguir agregando y modificando temas, etc.

Dejar claro que SDCC tiene un fantastico compilador + linker Z80 assembler que funciona a las mil maravillas y que resulta interesante a la hora de poder compartir código entre programadores C y ASM.

Después de todo esto, mi idea es directamente crear un documento de como poder hacer MEGAROMS Konami SCC 8Kb o cualquer otro tipo de MEGAROM usando SDCC y una herramienta de la casa. SDCC sólo trabaja con 64Kb.
He pensado que preferíria invertir mi tiempo de desarrollo en cosas como el NLKTracker que haciendo el MSXScript, pienso que si ya hay un compilador en la calle que funciona bastante bien y a la gente le gusta el primero contacto con SDCC .. es más fácil que explique como funcionan mis Tools de crear MegaROMS que tener que montar un compilador, linker, etc. Luego siempre podemos compartir código C+ASM y que cada uno lo use como le de la real gana.

Espero que todo esto nos sirva y que empecemos a crear una división C dentro del desarrollo MSX. Merece la pena!
Yo espero dejar un sistema MSXSDK listo para descargar, una vez finalice mis tareas pendientes con la MSXDev. Es importante, a mi forma de entender, que a partir de ese momento intentemos crear una plataforma sólida de desarrollo. Intentado unificar código y dejándolo a la disposición de todo el mundo.
Bueno, ya hablaremos de todo esto cuando lo suba.
En línea

MSX4EVER2GETHER
www.nerlaska.com
nerlaska
Karoshi Excellent Member
******
Mensajes: 1102


Programador


WWW Email
« Respuesta #1 : 12 de Diciembre de 2006, 07:08:12 am »

También podéis bajaros el ejemplo del PDF, junto con los EXE y la rom_header.bin .. todo junto en un paquetito.

http://www.nerlaska.com/msx/prueba.rar
En línea

MSX4EVER2GETHER
www.nerlaska.com
burguera
Visitante
« Respuesta #2 : 12 de Diciembre de 2006, 12:15:52 pm »

Nada, nada, que ya no hay excusas para no programar en C Wink
Bueno, a mi me falta un pequeño detallito para que mi convencimiento sea absoluto: jugar al Monster Hunter!! Wink
En línea
Jon_Cortazar
Administrator
Karoshi Forum's God
********
Mensajes: 2777



WWW Email
« Respuesta #3 : 12 de Diciembre de 2006, 01:05:56 pm »

Gran iniciativa, nerlaska!. Luego lo leo todo con más detenimiento!  Wink

Y en cuanto al Monster Hunter, pues la verdad es que mola mucho, pero lo pusiste tan cojonudo/konami-like/se os caerán los huevillos al suelo, que lo vi un tanto brusco en los movimientos del personaje, y la pantalla de luchas un pelín "vacía" y algún detalle más (eso te pasa por haberlo vendido tantoooooo  Wink )... pero bueno, que el juego, la verdad (y lo digo como lo siento), tiene BUENÍSIMA PINTA. Además, en estos juegos no es la velocidad al pixel lo que cuenta, sino la historia, la ambientación (gfx y música, que por cierto, era muy guapa), etc... Ansío poderle echar mano y viciarme, eso sí, despues de la dev...

Así que, y tras verlo en la RU, puedo decir que es uno de mis más esperados del MSXdev'06. Wink Además es impresionante, como primer juego... buen trabajo, nerlaska!  Cheesy

Lo dicho, en un rato me leo tu documento con más tranquilidad Smiley. Muchas gracias por compartir tu sapiencia por aquí!... por cierto, podríamos montar una especie de "biblioteca" con este tipo de documentos, que os parece?...
« Última modificación: 12 de Diciembre de 2006, 01:09:55 pm por Viejo_archivero » En línea

Jon Cortázar Abraido (aka El Viejo Archivero)
RELEVO Videogames
[Dioniso: La cafeína está haciendo su trabajo; yo espero hacer el mío.]
[pitpan: Me sigue pareciendo más productivo jugar al SNAIL MAZE que seguir esta discusión.]
nerlaska
Karoshi Excellent Member
******
Mensajes: 1102


Programador


WWW Email
« Respuesta #4 : 12 de Diciembre de 2006, 01:33:34 pm »

Gracias Jon .. bueno .. tampoco habia alardeado de grandes efectos y cosas así .. simplemente de la dificultad técnica que tiene haber montado un juego como este. También tengo que decirte que se han tenido que quitar cosas por el tema de la memoria .. pero .. en fin .. se ha hecho lo que se ha podido Smiley y aunque no lo creas .. hay un curro de morirse detrás.
En línea

MSX4EVER2GETHER
www.nerlaska.com
Jon_Cortazar
Administrator
Karoshi Forum's God
********
Mensajes: 2777



WWW Email
« Respuesta #5 : 12 de Diciembre de 2006, 01:42:49 pm »

y aunque no lo creas .. hay un curro de morirse detrás.

Si que lo creo, nerlaska, si que lo creo! Wink, anduve dando vueltas yo también al diseño de un RPG y flipé del curro que hay. Lo dicho, no quisiera que te tomaras mi comentario como algo negativo, en serio... tengo la ostia de ganas de poderlo jugar entero!. De nuevo, y por si no lo hubiera dejado bien claro: buen trabajo, nerlaska! (y colaboradores, claro)  :god:
En línea

Jon Cortázar Abraido (aka El Viejo Archivero)
RELEVO Videogames
[Dioniso: La cafeína está haciendo su trabajo; yo espero hacer el mío.]
[pitpan: Me sigue pareciendo más productivo jugar al SNAIL MAZE que seguir esta discusión.]
pitpan
Karoshi Forum's Guru
*******
Mensajes: 1812


« Respuesta #6 : 12 de Diciembre de 2006, 04:52:42 pm »

Gracias por preparar el tutorial, Nerlaska. Lo cierto es que parece más fácil de lo que me se me había antojado al principio. De todos modos, lo suyo sería coger el código fuente del SDCC y meter las modificaciones "en caliente" para que genere ya ROMs y no haya que hacer más pasos intermedios. No creo que sea especialmente difícil.

De momento me quedo con mi asMSX, pero creo que el C sí es una muy buena alternativa para gente que no tenga tiempo/ganas de meterse en ensamblador y quiera hacer algo con una ejecución mucho más rápida que en BASIC. Un camino más siempre es bienvenido.

Por lo demás, insisto:

.bios
.page 2
.rom
.start INIT

INIT:
...

Y ya tienes una ROM directamente  Cheesy
En línea
andrear1979
Karoshi Newbie
*
Mensajes: 13



WWW Email
« Respuesta #7 : 10 de Enero de 2007, 01:56:47 pm »

(Sorry friends but I have to write in English)

Hi friends, my name is Andrea, from Italy. Some time
ago I sent a small game (I.N.E.R.T.I.A.) to the
MSXDEV'06 contest. Well, the game was developed
in C using SDCC, with a procedure similar to the one
proposed by Nerlaska, if time and chance will permit
I would write some similar PDF reporting my experience,
in that case I'll drop a message to MSXDEV team too.

My best regards,

Andrea
En línea

"... all toghether, good bad and mean, shall last forever in the Software Bin"
pitpan
Karoshi Forum's Guru
*******
Mensajes: 1812


« Respuesta #8 : 10 de Enero de 2007, 02:21:28 pm »

That would be great, Andrea. We look forward to hear from you!
En línea
ARTRAG
Visitante
« Respuesta #9 : 10 de Enero de 2007, 09:14:49 pm »

Welldone nerlaska!
but you should document also how you deal with magarom and ROM mappers Wink
I'd like to do a similar guide for Hitech C v7.8 (when I'll have the time).

BTW
What about a small article about the compiling efficiency of the C cross compilers for z80?

I am very curious about a comparison of the ASM code generated by SDCC and Hitech C.
Do you have same small segment of code you find interesting for comparing the compiler results?
If you post it on the forum, I could try to compile it with Hitech C and post its asm,
you could do the same with SDCC and we can try to comment the two compilers.

I think SDCC is improving fast, while Hitech, even if is a commercial product, has stopped the
development of its C compiler in 2001 (v7.80  has been released in September 2001).

I think it's worth a comparison, even only to know for which kind of algorithms one is more
suitable of the other
« Última modificación: 11 de Enero de 2007, 01:59:57 pm por ARTRAG » En línea
pitpan
Karoshi Forum's Guru
*******
Mensajes: 1812


« Respuesta #10 : 11 de Enero de 2007, 10:55:15 am »

Anyone out there is willing to prepare a C compilers benchmark? I'd be interesting to compile different source codes and compare the results using different C compilers. Check code efficiency in terms of size and speed would be great to decide which C compiler is more suitable for MSX game development.
En línea
doraemonppc
Karoshi Maniac
****
Mensajes: 358



WWW
« Respuesta #11 : 03 de Febrero de 2007, 03:29:44 pm »

La idea es que este primer documento que podéis encontrar aquí:

http://www.nerlaska.com/msx/Como_crear_ROMS_de_32Kb_con_SDCC.pdf


Esto..... podrias volver a subirlo porfavor.
A ver si le pego un ojo.
En línea

- El ensamblador con sangre entra-
jjfranco
Visitante
« Respuesta #12 : 19 de Febrero de 2007, 08:05:57 pm »

Bueno como he dicho por otro hilo, este tutorial hace tiempo que lo leí y me pareció interesante. Me gustaria que hicieras algun manualillo algo mas extenso mas que nada porque tengo agunas dudas de como hacer programas ROM en C. Te las pongo aquí por si te animas a hacerlo y de paso me ayudas a resolverlas:

duda numero uno: ¿ como metes los datos que son fijos ?, no sé si me explico, por ejemplo como metes los datos de un juego nuevo de caracteres por ejemplo. Me refiero más que nada a si lo haces en forma de archivo y por supuesto a como haces referencia a ellos. Espero que la duda no te parezca un poco chorra, pero en ensamblador o basic es muy facil o bien lo haces con db  (con su correspondiente etiqueta para hacer referencia a ellos cuando haga falta) o con data.

duda numero dos: No tengo muy claro como pasar datos a las funciones que usan "assembler inline". ¿ Como pasas los datos, por referencia, por valor? ¿en donde se almacenan ?

duda numero tres: ¿ como se hace un megarom en C?  Grin

En fin podría seguir, pero esto creo que es bastante ilustrativo de mis dudas.
En línea
jltursan
Karoshi Forum's Guru
*******
Mensajes: 1516


¿Que es lo que has aprendido hoy?


WWW Email
« Respuesta #13 : 19 de Febrero de 2007, 09:38:44 pm »

Citar
¿ como metes los datos que son fijos ?

Pues puedes hacer lo mismo en C, meter los datos fijos mediante "peazo" includes. Para ello hace falta un programa que genere una salida en el formato de array de C a partir de los binarios en cuestión.

Citar
Como pasas los datos, por referencia, por valor? ¿en donde se almacenan ?

En el SDCC los parámetros de la función se pasan mediante la pila, el código de la función los puede recoger a partir del 4º byte. Estos parámetros aparecen ocupando 1 byte o 2 bytes cada uno de ellos (no se si soporta tipos más grandes; pero tampoco voy a usarlos  Tongue)

Citar
¿ como se hace un megarom en C?

¿Con mucha paciencia?  Grin
En línea

Doom dee doom dee doom
nerlaska
Karoshi Excellent Member
******
Mensajes: 1102


Programador


WWW Email
« Respuesta #14 : 20 de Febrero de 2007, 08:13:07 am »

Bueno, tal y como dice JL .. pues si .. puedes meter los datos en un include en algo estilo:

unsigned char SPRITES_PERSONAJE[512] = { 50, 30, 10, 30, 50, ... }

Pero cuidado!! porque si lo metes así .. resulta que lo estás metiendo como RAM, o sea . .te creará el buffer en RAM además de tener los datos en ROM.
Si sólo quieres tenerlo en ROM lo unico que tienes que hacer es meter esto:

const unsigned char SPRITES_PERSONAJE[512] = { 50, 30, 10, 30, 50, ... }

Pero bueno .. ya te imaginas que pasará en cuanto empieces a meter muchos arrays de estos, verdad? :-)

Sobre lo de pasar los datos a funciones ASSEMBLER INLINE pues . .puedes hacerlo usando el estandard SDCC o sea por pila. O bien si queires puedes hacerlo por registro, pero para eso la llamada también tendrás que hacerla ASSEMBLER INLINE. La forma del SDCC está bastante bien y es muy cómoda.
Si tu has usado algo como:

void MiFuncion (char a, int b)
{
  _asm
     ld a, 4(ix)
     ld l, 5(ix)
     ld h,6(ix)
  _endasm;
}

El SDCC ya te ha preparado las cosas como toca, o sea, que tienes el registro IX listo para leer los argumentos. A partir del 4(ix) los tienes todos.
Si quieres devolver algún valor, usa el registro HL, L si es de 8 bits y HL si es de 16 bits. El SDCC ya supone esto, por ejemplo:

char MiFuncion (char a, int b)
{
  _asm
     ld a, 4(ix)
     ld l, 5(ix)
     ld h,6(ix)
  _endasm;
}

Si llamas a MiFuncion devolverá la parte baja del valor que hayas pasado como b.

Sobre lo de los MEGAROM, jejejee .. ese es mi pequeño secreto y mi gran currada por cierto Smiley
Para hacer esto tienes que tener la mente despejada y tener muy claras muchas cosas antes .. pero te adelanto de que va esto..

Tienes que saber separar código de datos dentro del ROM. Yo uso 32Kb para código y el resto para datos.
Eso como lo pongo? .. bueno .. pues obviamente despues de compilarlo todo. Incluyo con una herramienta toda la parte de código y de datos.
Generando el ROM de 128, 256 o 512.
Claro .. asi dicho suena fácil .. luego esta el tener código como datos y poder ejecutarlo Smiley
Al igual que todo el tejemaneje de mover datos de MEGAROM a la zona visible sin tocar tu código genérico ni tu RAM. Para eso has de organizar bién tu código y tener claras las limitaciones. Pero creo que antes .. deberias tener claro como hacer ROMS de 32Kb.




En línea

MSX4EVER2GETHER
www.nerlaska.com
Páginas: [1] 2 3 4
  Imprimir  
 
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.21 | SMF © 2013, Simple Machines XHTML 1.0 válido! CSS válido!