ccz80

Programando el Amstrad en BASIC, C, etc.
Avatar de Usuario
dinoneno
Megaforero
Megaforero
Mensajes: 298
Registrado: Mié 13 Sep , 2006 7:32 am
Ubicación: Nambroca

Re: ccz80

Mensajepor dinoneno » Mié 08 Abr , 2009 8:55 am

Aquí está la librería que pusiste ayer con las 10 funciones que me asignaste. Al menos compilan correctamente, habrá que probar si su ejecución también lo es. Me ha surgido una duda en CollSp, sobre si devuelverá correctamente el valor de retorno, pero en las pruebas se verá.
Adjuntos
cpcrslib.zip
(5.12 KiB) Descargado 102 veces

Avatar de Usuario
Artaburu
Trasteador
Trasteador
Mensajes: 8419
Registrado: Vie 07 Oct , 2005 6:18 pm
Ubicación: En tu pantalla

Re: ccz80

Mensajepor Artaburu » Mié 08 Abr , 2009 9:12 am

Estupendo... las pruebo a ver.
Yo ya he añadidoy probado todas las de teclado, en cuento pruebe tu conversión las cuelgo juntas.
Salu2,
Arta

Avatar de Usuario
Artaburu
Trasteador
Trasteador
Mensajes: 8419
Registrado: Vie 07 Oct , 2005 6:18 pm
Ubicación: En tu pantalla

Re: ccz80

Mensajepor Artaburu » Mié 08 Abr , 2009 9:52 am

Por cierto, dinoneno, ¿cómo se incluye un binario? Quiero probar las rutinas de descompresión y no puedo adjuntar los ficheros comprimidos.
Ah bueno, y ya de paso... en c defino una estructura para los sprites y es la estructura que uso tanto en el mapa de tiles como en la colisión de sprites... ¿Se puede definir en ccz80 algo similar a esto:?

Código: Seleccionar todo

struct sprite {
int datos_fondo; //2 bytes 01
int datos_sprite; //2 bytes 23
int coord_pantalla; //2 bytes 45
int ocoord_pantalla; //2 bytes 67
unsigned char cx, cy; //2 bytes coordenadas nuevas
unsigned char ox, oy; //2 bytes coordenadas actuales
unsigned char dir1,rotacion; //2 bytes
unsigned char proximo_giro, velocidad; //1 bytes Indica la dirección hacia donde gira.
};
struct sprite coche1, coche2;
Salu2,
Arta

Avatar de Usuario
dinoneno
Megaforero
Megaforero
Mensajes: 298
Registrado: Mié 13 Sep , 2006 7:32 am
Ubicación: Nambroca

Re: ccz80

Mensajepor dinoneno » Mié 08 Abr , 2009 12:38 pm

Las estructuras en ccz80 no existen directamente. Tendrías que hacer como en ensamblador, definir un espacio de memory (con array byte en ccz80) y ahí ir metiendo los valores en la posición que quieras. Para el ejemplo que pones de la estructura sprite definirías un array de 15 bytes, llamado por ejemplo sp1 (array byte sp1[15]) y para meter un valor en coord_pantalla, por ejemplo 15, harías **(coord_pantalla + 4) = 500.

No hay tampoco instrucción directa para incluir un fichero binario. Es una buena idea para la próxima versión (instrucción binary "fichero", dirección, por ejemplo). O bien creas una instrucción asm { "org NNNN", "defb ..." } para que se incluyan los bytes que indiques en la dirección NNNN o bien pones una instrucción asm { "incbin \"fichero.bin\"" } y generas sólo el archivo ensamblador con la opción /asm y luego ensamblas con pasmo.

Espero que estos inconvenientes no sean demasiado perjudiciales para la conversión.

Avatar de Usuario
Artaburu
Trasteador
Trasteador
Mensajes: 8419
Registrado: Vie 07 Oct , 2005 6:18 pm
Ubicación: En tu pantalla

Re: ccz80

Mensajepor Artaburu » Mié 08 Abr , 2009 12:51 pm

Con esos trucos creo que ya me sobro para seguir probando y haciendo la conversión. La mala noticia es que esta tarde me piro de vacaciones hasta el 20 de Abril y no voy a poder convertir nada así que si te animas tu... genial. La idea que tengo con el mapa de tiles es hacerlo igual que las rutinas del teclado, pero es que no ha supuesto ningún problema... en el mapa de tiles habrá que incluir también dentro de la librería el fichero tilemapconf.asm y santas pascuas :D
Salu2,
Arta

Avatar de Usuario
Artaburu
Trasteador
Trasteador
Mensajes: 8419
Registrado: Vie 07 Oct , 2005 6:18 pm
Ubicación: En tu pantalla

Re: ccz80

Mensajepor Artaburu » Mié 08 Abr , 2009 1:23 pm

Vale, todo funciona (he corregido un par de cosillas). Las funciones de la librería son, por ahora:
cpc_AnyKeyPressed()
cpc_AssignKey(numero,valor)
cpc_RedefineKey(numero)
cpc_ScanKeyboard()
cpc_TestKey(numero)
cpc_TestKeyF(numero)

cpc_SetMode(numero)
cpc_SetColour(numero,color hardware)
cpc_EnableFirmware()
cpc_DisableFirmware()
cpc_CollSp(sprite1, sprite2)
cpc_ClrScr()
cpc_UnExo(datos, destino)
cpc_Uncrunch(datos, destino)
cpc_PrintStr(cadena)

cpc_GetScrAddress (x,y)
cpc_GetSp (buffer,alto,ancho,origen)
cpc_PutSp (sprite,alto,ancho,destino)
cpc_PutSprite (sprite,destino)
cpc_PutMaskSp (sprite,alto,ancho,destino)
cpc_PutMaskSprite (sprite,destino)
cpc_PutSpXOR (sprite,alto,ancho,destino)
cpc_PutSpriteXOR (sprite,destino)
cpc_PutTile2x8 (tile,x,y)
cpc_PutTile4x16 (tile,x,y)
cpc_PutMaskSp2x8(sprite, destino)
cpc_PutMaskSp4x16(sprite, destino)

cpc_PrintGphStrStd(color, cadena, destino);
cpc_PrintGphStrStdXY(color, cadena, destino);
cpc_PrintGphStrM1(cadena, destino);
cpc_PrintGphStrXYM1(cadena, x,y);
cpc_PrintGphStr(cadena, destino);
cpc_PrintGphStrXY(cadena, x,y);
cpc_SetInkGphStr(numero, color)
cpc_SetInkGphStrM1(numero, color)

Un ejemplillo para ver el uso del teclado:

Código: Seleccionar todo

include "cpcrslib.ccz80";

cpc_PrintGphStrStd(1,"HOLA",#c000); //color, cadena, destino

cpc_AssignKey(1,#4804); //ESC to key #1

cpc_PrintStr("si no pulsas una tecla, aqui nos quedamos");
while(!cpc_AnyKeyPressed()){};

cpc_PrintStr("pulsa tecla para redefinirla");
cpc_RedefineKey(0);

cpc_PrintStr("pulsa esa teclar para probarla");
while (!cpc_TestKey(0)){};

cpc_PrintStr("y ahora pulsa ESC para terminar");
while (!cpc_TestKey(1)){};



cpc_PrintStr("Por ultimo se prueba el otro metodo");
cpc_PrintStr("que es mejor se se quieren detectar");
cpc_PrintStr("tres teclas o mas");
cpc_PrintStr("pulsa aquella tecla que definiste");
cpc_ScanKeyboard();
while (!cpc_TestKeyF(0)){
cpc_ScanKeyboard();
};


return;
El uso de *(sp1+7)=byte o **(sp1)=word es poco intuitivo para el usuario, pero bueno.
Y sí que deberías incluir la opción para incluir binario directamente, que el binario da mucho juego :D
Adjuntos
cpcrslib.rar
La librería con lo que tiene hasta ahora
(10.93 KiB) Descargado 113 veces
Salu2,
Arta

Avatar de Usuario
Artaburu
Trasteador
Trasteador
Mensajes: 8419
Registrado: Vie 07 Oct , 2005 6:18 pm
Ubicación: En tu pantalla

Re: ccz80

Mensajepor Artaburu » Mié 08 Abr , 2009 6:01 pm

En el post anterior he actualizado la librería y dejo aquí otro ejemplo para ver la impresión gráfica:

Código: Seleccionar todo

include "cpcrslib.ccz80";
cpc_DisableFirmware();
cpc_SetMode(1);
cpc_ClrScr();
cpc_PrintGphStrM1("HOLA PIRINDOLA",#c000);
cpc_SetInkGphStrM1(1,128);
cpc_PrintGphStrXYM1("PULSA UNA TECLA",10,30);
while (!cpc_AnyKeypressed()){};

cpc_SetMode(0);
cpc_ClrScr();
cpc_PrintGphStr("HOLA MORROSKO",#c000);
cpc_SetInkGphStr(1,160);
cpc_PrintGphStrXY("PULSA UNA TECLA",10,30);

while (!cpc_AnyKeypressed()){};
cpc_EnableFirmware();
return;
Por cierto, si en una cadena entre comillas meto un punto y como casca el compilado. Por ejemplo esto casca: cpc_PrintGphStrXY("HOLA;",10,30);

La explicación de las funciones de la librería están aquí:
http://code.google.com/p/cpcrslib/downloads/list

Y creo que faltan muy pocas funciones por transferir (a parte de la parte de Mapa de Tiles).
Salu2,
Arta

Avatar de Usuario
dinoneno
Megaforero
Megaforero
Mensajes: 298
Registrado: Mié 13 Sep , 2006 7:32 am
Ubicación: Nambroca

Re: ccz80

Mensajepor dinoneno » Mié 08 Abr , 2009 6:15 pm

Por cierto, si en una cadena entre comillas meto un punto y como casca el compilado. Por ejemplo esto casca: cpc_PrintGphStrXY("HOLA;",10,30);
Exacto, es un pequeño bug que tengo arreglado para la siguiente versión. Si te es imprescindible te envío la versión beta de esa nueva versión con el bug arreglado.
Y creo que faltan muy pocas funciones por transferir (a parte de la parte de Mapa de Tiles).
Intentaré estos días ver qué funciones faltan y procuraré convertirlas para tu vuelta de vacaciones. Que las disfrutes.

Avatar de Usuario
nacho
Keeper of The Forum
Keeper of The Forum
Mensajes: 572
Registrado: Jue 06 Dic , 2007 2:58 pm

Re: ccz80

Mensajepor nacho » Mié 08 Abr , 2009 10:15 pm

Descargando y probando. Vamos con las primeras impresiones (no te me enfades, Dinoneno, si parezco duro ;-) ) ...
  • No hay una única descarga "lista para usar". Sería muy sencillo preparar una descarga que incluyera compilador, librerías, IDE y documentación para una cierta plataforma.
  • Descargo por separado compilador, IDE, librería standard (problema adicional: es un fichero de texto, así que se abre en el propio navegador si haces clic izquierdo), librería CPC6128, librería cpcrslib (la última versión, de este mismo hilo del foro).
  • Descomprimo todo en una carpeta. Se echa en falta también algún fuente de ejemplo sencillo, para que fuera más amigable.
  • Entro al IDE, abro uno de los ejemplos de Artaburu (el del teclado). Como era de esperar en un ejecutable de tan poco tamaño, el IDE no realza sintaxis en colores. Si quieres, pásame una lista de palabras clave y de funciones de biblioteca y creo un fichero de sintaxis para Notepad++, que es un buen editor alternativo, gratuito (open source, para ser estrictos).
  • Intento compilar. Menú "Project / Compile". Obtengo un mensaje de error: "excepción no controlada en la aplicación... La ruta de acceso no tiene un formato válido". Sería muy sencillo hacer que por defecto se buscara el compilador en la propia carpeta del IDE, y que el mensaje de error apareciera en caso de que no se encuentre ahí.
  • Entro a "Project / Options", le indico la ruta del compilador. Vuelvo a intentar compilar... y vuelve a saltar la excepción no controlada. No hay más remedio que recurrir al manual...
  • Descargo la documentación del IDE. Es lineal, una referencia más que un manual. Se echa en falta una primera página de "cómo ponerlo en marcha". Aun así, se dice que todo los parámetros de compilación son opcionales salvo el compilador y ¿el fuente? ¿no se toma del nombre del fuente en la ventana activa, ni siquiera cuando es la única? Sólo se menciona como ejemplo "@SOURCE /org=25000". Lo pongo como argumentos, fuerzo la indicación de la ruta del fuente y vuelvo a compilar. Ahora sí !!!
Si este gripazo lo permite, mañana probaré a hacer algún ejemplo sencillo desde cero y pasarlos al emulador. Por ahora al menos las noticias son buenas en parte y malas en parte:
  • Las buenas: He podido crear un fichero BIN que probar en el emulador (o en un PC real) en un tiempo razonablemente corto.
  • Las malas: El entorno es poco amigable. Con apenas unas pocas mejoras podría ser mucho más sencillo de usar: lo que me ha llevado 10 minutos (algo más al teclear lo que iba haciendo ;-) ) se podría haber conseguido en 10 segundos.
Seguiremos informando... ;-)

Avatar de Usuario
dinoneno
Megaforero
Megaforero
Mensajes: 298
Registrado: Mié 13 Sep , 2006 7:32 am
Ubicación: Nambroca

Re: ccz80

Mensajepor dinoneno » Jue 09 Abr , 2009 1:57 pm

Hola Nacho (espero que mejores de tu resfriado). Ya he sacado tiempo para leer tu último mensaje y te contesto, a ver si no se me olvida nada. Por supuesto, gracias por el interés de probarlo. 8-[

- Tienes toda la razón de que se podría hacer un fichero para descargar todo lo concerniente a un sistema, sin tener que ir fichero por fichero. Ahí lo tengo pendiente, no es que sea complicado, pero siempre me voy a hacer cosas de más prioridad (correcciones en el compilador, etc.). #-o
- Es cierto que los ficheros de texto se abren en el navegador, a ver si los comprimo o pongo alguna indicación para decir que se descarguen con el botón secundario.
- También podría hacer un fichero fuente para cada plataforma. En el manual del ccz80 hay ejemplos, pero es cierto que sería bueno poner un programa "Hola mundo" para cada tipo de ordenador de los que tienen soporto ahora mismo. =D>
- El resto de cuestiones creo que son todas relacionadas con el IDE. Si soy sincero debo decir que este IDE fue un experimento, que al fin y al cabo funcionaba con sus carencias, así que lo publiqué con ese mínimo manual. Yo mismo confieso que no lo utilizo, sino que escribo los programas con el PSPad (también el NotePad++ es muy bueno) y desde ahí compilo. Luego en el WinAPE tengo un programita desde su ensamblador que lee el binario generado con la instrucción incbin y lo ejecuta. Así que nada de IDE. Por cierto, el IDE no compila el fichero fuente que se está editando ahora mismo, lo pensé como un IDE para proyectos, en que tuvieras varios archivos abiertos (el principal y otros), y siempre compila que principal, que es el que debe indicarse en las opciones. Ahora me doy cuenta que un mejor manual del IDE evitaría estos equívocos.
- Acepto tu ofrecimiento de un fichero de palabras claves para el NotePad++. Ya está en la web uno para el UltraEdit y otro para el PDPad, así que se agradece la ampliación.

Espero en breve aplicar tus sugerencias en la web, que tienes toda la razón que harán más amigable el entorno. En cuanto a mejorar el IDE aprovecho para pedir ayuda para hacerlo. ¿Alguien conoce el Visual Basic .NET para ello? Las fuentes del IDE están en la web. [-o<

Avatar de Usuario
nacho
Keeper of The Forum
Keeper of The Forum
Mensajes: 572
Registrado: Jue 06 Dic , 2007 2:58 pm

Re: ccz80

Mensajepor nacho » Jue 09 Abr , 2009 4:18 pm

Hola Nacho (espero que mejores de tu resfriado). Ya he sacado tiempo para leer tu último mensaje y te contesto, a ver si no se me olvida nada. Por supuesto, gracias por el interés de probarlo. 8-[
De nada, sabes que me atrae el proyecto y que quería echarle un ojo con detenimiento.
- Tienes toda la razón de que se podría hacer un fichero para descargar todo lo concerniente a un sistema, sin tener que ir fichero por fichero. Ahí lo tengo pendiente, no es que sea complicado, pero siempre me voy a hacer cosas de más prioridad (correcciones en el compilador, etc.). #-o
Lo entiendo perfectamente, pero hay veces que ese tipo de cosas, a base de darles menos prioridad, quedan en el olvido, así que aproveché anoche, que probé todas, para irlas comentando.

Si la página es HTML puro (sin inclusiones de PHP, etc) puedo aprovechar ahora que tengo unos días con algo más de tiempo libre para volcarla y enviártela con los cambios, de modo que sólo tengas que supervisarla y publicarla.
- Es cierto que los ficheros de texto se abren en el navegador, a ver si los comprimo o pongo alguna indicación para decir que se descarguen con el botón secundario.
Lo dicho, te lo preparo yo si quieres.
- También podría hacer un fichero fuente para cada plataforma. En el manual del ccz80 hay ejemplos, pero es cierto que sería bueno poner un programa "Hola mundo" para cada tipo de ordenador de los que tienen soporto ahora mismo. =D>
Sip. Yo incluso, si llegas (o llego, insisto) a crear un fichero de descarga para cada plataforma dejaría una carpeta "examples" o similar, que tuviera algún fuente (pocos) de ejemplo, partiendo de lo más fácil.
- El resto de cuestiones creo que son todas relacionadas con el IDE. Si soy sincero debo decir que este IDE fue un experimento, que al fin y al cabo funcionaba con sus carencias, así que lo publiqué con ese mínimo manual. Yo mismo confieso que no lo utilizo, sino que escribo los programas con el PSPad (también el NotePad++ es muy bueno) y desde ahí compilo.
Yo uso Notepad++, porque PsPad me estuvo dando problemas de cuelgues y excepciones durante una temporada larga, y Notepad++ está evolucionando muy bien.
Luego en el WinAPE tengo un programita desde su ensamblador que lee el binario generado con la instrucción incbin y lo ejecuta. Así que nada de IDE.
Eso también lo eché en falta: instrucciones de cómo llevar ese fichero binario al emulador.
Por cierto, el IDE no compila el fichero fuente que se está editando ahora mismo, lo pensé como un IDE para proyectos, en que tuvieras varios archivos abiertos (el principal y otros), y siempre compila que principal, que es el que debe indicarse en las opciones. Ahora me doy cuenta que un mejor manual del IDE evitaría estos equívocos.
No es sólo cuestión de un manual mejor. Si hubiera valores por defecto (compilador en la carpeta actual, presuponer que el fuente es la ventana activa), el manual estaría bien como referencia tal y como está.
- Acepto tu ofrecimiento de un fichero de palabras claves para el NotePad++. Ya está en la web uno para el UltraEdit y otro para el PDPad, así que se agradece la ampliación.
Me temo esos ahora mismo estarán anticuados, porque no incluirán las rutinas de la nueva biblioteca. ;-)
Espero en breve aplicar tus sugerencias en la web, que tienes toda la razón que harán más amigable el entorno. En cuanto a mejorar el IDE aprovecho para pedir ayuda para hacerlo. ¿Alguien conoce el Visual Basic .NET para ello? Las fuentes del IDE están en la web. [-o<
Es verdad, no me acordaba de que estaba el fuente. Descargando...

Yo hace años que no toco Visual Basic, pero quizá con el "IntelliSense" o como lo llamen, quizá consiga hacer los cambios en poco tiempo, porque él me ayude a saber las funciones que necesito. Y si no, intentaré tirar de MSDN ;-)

Ultimamente trabajo con C#. Puedo instalarme el compilador de VB y hacer un par de pruebas, y te cuento cosas, OK?

Avatar de Usuario
nacho
Keeper of The Forum
Keeper of The Forum
Mensajes: 572
Registrado: Jue 06 Dic , 2007 2:58 pm

Re: ccz80

Mensajepor nacho » Jue 09 Abr , 2009 4:30 pm

Es verdad, no me acordaba de que estaba el fuente. Descargando...

Yo hace años que no toco Visual Basic, pero quizá con el "IntelliSense" o como lo llamen, quizá consiga hacer los cambios en poco tiempo, porque él me ayude a saber las funciones que necesito. Y si no, intentaré tirar de MSDN ;-)

Ultimamente trabajo con C#. Puedo instalarme el compilador de VB y hacer un par de pruebas, y te cuento cosas, OK?
Buenas noticias. Desde el Sharp Develop que uso en el portátil he podido abrir el proyecto del IDE y compilarlo, así que ni siquiera necesito instalar VB.net. Voy a echarle un ojo...

Avatar de Usuario
nacho
Keeper of The Forum
Keeper of The Forum
Mensajes: 572
Registrado: Jue 06 Dic , 2007 2:58 pm

Re: ccz80

Mensajepor nacho » Jue 09 Abr , 2009 5:39 pm

He desenpolvado lo que recordaba de VB y hecho algunos cambios, para que el IDE quede "listo para usar":

En las opciones ("Options.vb")

- Desde el editor visual, añadir "ccz80.exe" en la propiedad "Text" de la casilla "ccz80CompilerTextBox"

- Desde el editor visual, añadir "@SOURCE /org=25000" en la propiedad "Text" de la casilla "ccz80CompilerArgumentsTextBox"

- Desde el editor visual, añadir "@CURRENTWINDOW" en la propiedad "Text" de la casilla "SourceFileTextBox"


Para incluir la nueva macro: en "main.vb", dentro de la función "ReplaceValues"

- La linea 433 era: Dim source As String = GetKey("SourceFile")

- Añadir a continuación la siguiente línea: source = source.Replace("@CURRENTWINDOW", Me.ActiveMdiChild.Text)


Para que avise de qué está compilando:

- En la línea 384 añadir el nombre del fuente: If Not RunProcess(p, "Compiling "+ReplaceValues(GetKey("SourceFile")), "ccz80 compiler", "ccz80 compiler") Then Return

(Aun así, aquí me toma el pelo: escribe "Compiling @CURRENTWINDOW...", en vez de su valor reemplazado, a pesar de que sí compila bien. Si escribiera el nombre del fuente exacto quedaría mejor, pero no veo cual es el motivo para que lo use bien en un caso y mal en otro...)


Una pequeña corrección en la traducción:

- En la línea 415, cambiado a: MessagesListBox.Items.Add("Finished")


(Bueno, y faltaría cambiar el número de versión de la 1.0.3 a 1.0.4 ;-) )

Adjunto el nuevo fichero con los fuentes.
Adjuntos
ccz80_ide_104.zip
(88.3 KiB) Descargado 86 veces

Avatar de Usuario
dinoneno
Megaforero
Megaforero
Mensajes: 298
Registrado: Mié 13 Sep , 2006 7:32 am
Ubicación: Nambroca

Re: ccz80

Mensajepor dinoneno » Sab 11 Abr , 2009 11:25 am

Excelente Nacho. En cuanto pueda repaso todo lo que has hecho y lo publico. ¡Gracias! =D>

Avatar de Usuario
dinoneno
Megaforero
Megaforero
Mensajes: 298
Registrado: Mié 13 Sep , 2006 7:32 am
Ubicación: Nambroca

Re: ccz80

Mensajepor dinoneno » Sab 11 Abr , 2009 4:40 pm

Por cierto, dinoneno, ¿cómo se incluye un binario? Quiero probar las rutinas de descompresión y no puedo adjuntar los ficheros comprimidos.
Para incluir un binario para lo que creo que tú necesitas tan sólo es necesario crear un array de tipo byte con los valores de ese archivo binario. Es cierto que puede quedar un archivo enorme, pero se puede dejar en un fichero diferente del principal y meterlo en él con include.

Adjunto una pequeña utilidad que te transforma el archivo binario que tengas en la definición del array correspondiente para que lo incluyas en tu código principal (lo deja en el portapapeles para que lo pegues directamente). Están el ejecutable y el fuente en C#.
Adjuntos
Source BinaryFileToArray.rar
Código fuente
(12.83 KiB) Descargado 105 veces
BinaryFileToArray.rar
Fichero ejecutable
(4.05 KiB) Descargado 104 veces


¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro


La Comunidad Española
ESP Soft, juegos para tu CPC Foro de Amstrad CPC Todos los juegos para CPC en un CD Web dedicada al Amstrad CPC (utilidades) Información útil para el CPC (talleres) Selección de juegos de Amstrad CPC Mundo CPC Pree Play then any Key CPC Basic