Bueno, como veo que no hay muchas noticias de desarrollo .. voy a intentar crear una
Como bien saben algunos .. estaba con el compilador MSXScript en marcha y en pausa. Hace unos meses me puse a desarrollar un SDK para Symbos el cual tengo bastante avanzado y que permite desarrollar aplicaciones en C con SDCC para este sistema operativo.
El Symbos es realmente alucinante .. no doy crédito a ver el pedazo de curro que se ha pegado el Jörn Mirka y lo impresionante que es este sistema operativo.
La cuestión que se me ocurrió migrar el MSXScript a Symbos y continuarlo de manera que pudieramos tener una herramienta de desarrollo para MSX y dentro de Symbos. Y he aquí la noticia
.. pues que ya tengo una versión del compilador para PC (de momento, aunque preparada para hacer el port a MSX) y que compila y todo
jejeje .. bueno .. mi intención es crear algo al menos igual de rápido que MSXBASIC pero para Symbos claro está. El compilador compila algo muy parecido al C .. la verdad es que practicamente igual aunque sin sintaxis de punteros típica (char **) (pero tiene punteros, por supuesto)
En estos momentos ya se pueden hacer cosas como:
#include "prueba.h"
struct DATA
{
byte b;
char c;
pointer str;
int i;
};
const int x = 10;
int j;
void MyHook (void)
{
print ("MyHook\n\r");
}
void main ()
{
DATA data;
const char str[32] = "HOLA";
pointer str2 = malloc(64);
pointer s;
int f;
word len;
pointer buffer;
byte lastLine = -1;
byte line;
byte pat;
data.str = "HOLA";
print(data.str);
memcpy (str2, "SYMSCRIPT POWER!\n\r", strlen("SYMSCRIPT POWER!\n\r")+1);
print (str2);
free (str2);
buffer = MyHook;
buffer();
f = fopen ("A:\\music.pt3");
len = fsize(f);
buffer = malloc (len);
fread (f, buffer, len);
fclose(f);
pat = sizeof(int);
pat = sizeof(data.str);
pat++;
print ("%d\n\r", (int)pat);
for (pat=0; pat<10; pat++)
{
print ("%d", (int)pat);
}
print ("\n\rPress Space to Stop\n\r");
PT3_Play (buffer, len);
while(1)
{
if (keytest(47)) // SPACE
{
break;
}
line = PT3_GetCurrentLine();
pat = PT3_GetCurrentPattern();
if (lastLine != line)
{
lastLine = line;
print ("P:%d", (int)line, " L:%d\n\r", (int)pat);
}
}
print ("End\n\r");
return;
}
Aunque parezca mentira
.. eso se compila y se ejecuta y funciona
.. gracias al poder de Symbos .. impresionante!
El "prueba.h" viene a ser esto:
#ifndef __INC_PT3__
#define __INC_PT3__
pointer malloc (word len) extern 1;
void free (pointer addr) extern 2;
void print (pointer str, ...) extern 3;
void itoa (int val, pointer str) extern 4;
void memcpy (pointer dst, pointer src, word len) extern 5;
word strlen (pointer src) extern 6;
byte inp (word port) extern 7;
void outp (word port, byte value) extern 8;
pointer loadscript (pointer str) extern 9;
int runscript (pointer script) extern 10;
pointer runprogram (pointer str) extern 11;
void endprogram (pointer id) extern 12;
int fopen (pointer path) extern 13;
int fread (int handle, pointer buffer, int bytes) extern 14;
int fwrite (int handle, pointer buffer, int bytes) extern 15;
int fsize (int handle) extern 16;
int fclose (int handle) extern 17;
byte keytest (byte scanCode) extern 18;
#define PT3_MAP_FILE "pt3.dll"
extern PT3_MAP_FILE : "H:/prog_msx/projects/symbos_msxscript/pt3_DLL/release/main.map";
void PT3_Play (pointer buffer, word len) extern PT3_MAP_FILE : _f_PT3_Play;
void PT3_Stop (void) extern PT3_MAP_FILE : _f_PT3_Stop;
byte PT3_GetCurrentPattern (void) extern PT3_MAP_FILE : _f_PT3_GetCurrentPattern;
byte PT3_GetCurrentLine (void) extern PT3_MAP_FILE : _f_PT3_GetCurrentLine;
#endif
Como podeis apreciar, todo esto son pruebas. Necesito asegurarme que el compilador compila bien y que todo funciona antes de que nadie le eche mano y luego tenga ganas de matarme
Lo interesante es que permite trabajar con DLLs que se linkan en tiempo real, de manera que podemos aumentar la libreria de funciones y disponer solo en memoria de lo que necesitamos. Vease el caso de las pruebas con el módulo PT3.
Luego hay una biblioteca fija (por asi decirlo) que es la de funciones básicas (malloc, free, etc.)
Ala, pues a ver si sigo con esto y podemos hacer algo divertido. Me gustaría poder incluir "Assembler Inline" y todo eso pero .. antes tengo más cosillas por hacer.