>> Sarà anche lentino, ma sul badalòc potrebbe essere più che>> accettabile! >> >>A 21 MHz un paio di secondi per arrivare all'OK. Inoltre qui ci sono 512K >> di >ram, che per la cronaca sono paginate esattamente come sulla zxmmc+, >> >quindi... :-) Ci ho pensato naturalmente, e prima o poi ci arriveremo .. anzi, forse... non dico altro ! :oX La gestione grafica delle finestre l'ho presa pari-pari da quella che ho abbozzato sul compilatore; in modalità "angoli arrotondati" è molto poco ottimizzata, ripete il CLS di un'area più volte (che è a sua volta poco ottimizzato) ed è scritta interamente in C. Però, se ci fosse della grafica sullo sfondo le maschere terrebbero conto degli angoli arrotondati. E' un lavoro che ho abbozzato quest'inverno e per ora accantonato. I sorgenti completi non sono ancora pubblici perchè: - Devo capire come rispettare i copyright dei file di #include che ho modificato - Ho usato dei trucchi per risparmiare memoria: tutto potrebbe facilmente funzionare con allocazione dinamica della memoria, ma al momento ho dichiarato un singolo oggetto statico per ogni tipo: un solo font per volta, una sola finestra, ecc.. Le strutture dati sono enormi e non le posso toccare più di tanto, perchè perderei la compatibilità. - L'implementazione è estremamente essenziale, senza una documentazione adeguata potrei dare false speranze agli utenti; senza paging e accesso ai dischi è praticamente inutilizzabile, inoltre gli eventi non sono ancora gestiti (al di la del controllo della pressione di un tasto, che ho ottenuto con un trucco). - Non ho fatto praticamente test. Al di la di quel programma non ho trovato altro materiale che avrebbe potuto funzionare con le poche librerie che avevo predisposto. - C'è altro da fare ! Tra poco avremo una release del compilatore e ci sono dei BUG da risolvere. Una volta smarcato il primo punto e condivisa la cosa con Dom e Alvin cercherò comunque di mettere tutto in linea. Per rispondere a Enrico Maria: la compatibilità con Unix è da sempre più spinta di quella con DOS/Windows, ma pensare di far girare tutta la Xlib è praticamente fantascienza... è per quello che ci ho provato e non pensavo di poter arrivare neanche fin qui ! In effetti è stato molto istruttivo, ho dovuto "spogliare" le definizioni di molte cose e ridurle all'essenziale; è stato un po' come riportarle all'origine, negli anni '70. A proposito dei sorgenti della demo del microdrive, le librerie sono già online ..ed ecco la demo: ...pensavate a chissà quale programmone, vero ? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - /* Demonstrates the power of the low-level microdrive functions: - seeks the drives and gives a status report - for the existing drives, searches the 'run' program and, if it exists, displays an 'A' icon near the drive. $Id:$*/ #include <stdio.h> #include <zxinterface1.h> #include <games.h> #include <graphics.h> char drvlist[9]; char bootlist[9]; int i,drvcount,rocount,runcount; int j,sectcnt; struct M_CHAN myrec; char numbers[] = { 3, 5, 0x40 , 0x40 , 0x40 , 0x40 , 0x40 , 3, 5, 0xE0 , 0x20 , 0xE0 , 0x80 , 0xE0 , 3, 5, 0xE0 , 0x20 , 0xE0 , 0x20 , 0xE0 , 3, 5, 0xA0 , 0xA0 , 0xE0 , 0x20 , 0x20 , 3, 5, 0xE0 , 0x80 , 0xE0 , 0x20 , 0xE0 , 3, 5, 0xE0 , 0x80 , 0xE0 , 0xA0 , 0xE0 , 3, 5, 0xE0 , 0x20 , 0x20 , 0x20 , 0x20 , 3, 5, 0xE0 , 0xA0 , 0xE0 , 0xA0 , 0xE0 }; char sprite[] = { 15, 11, 0x3F , 0xF8 , 0x40 , 0x04 , 0x90 , 0x02 , 0x80 , 0x02 , 0x80 , 0x02 , 0x8F , 0xE2 , 0x88 , 0x22 , 0x8F , 0xE2 , 0x80 , 0x02 , 0x40 , 0x04 , 0x3F , 0xF8 , 15, 11, 0x3F , 0xF8 , 0x40 , 0x04 , 0x90 , 0x02 , 0x80 , 0x02 , 0x80 , 0x02 , 0x8F , 0xE2 , 0x8F , 0xE2 , 0x8F , 0xE2 , 0x80 , 0x02 , 0x40 , 0x04 , 0x3F , 0xF8 , 15, 11, 0xEF , 0xEE , 0x70 , 0x1C , 0xB8 , 0x3A , 0x9C , 0x72 , 0x8E , 0xE2 , 0x87 , 0xC2 , 0x8E , 0xE2 , 0x9C , 0x72 , 0xB8 , 0x3A , 0x70 , 0x1C , 0xEF , 0xEE }; char arrow[] = { 7, 8, 0x00 , 0x10 , 0x28 , 0x44 , 0x6C , 0x28 , 0x38 , 0x00 }; char a_char[] = { 6, 6, 0x00 , 0x30 , 0x48 , 0x78 , 0x48 , 0x00 };char a_mask[] = { 6, 6, 0x30 , 0x78 , 0xFC , 0xFC , 0xFC , 0xFC }; int main(void) { drvcount=0; rocount=0; runcount=0; clg(); printf("\n\n\nSeeking microdrives...\n"); for (i=1;i<=8; i++) { drvlist[i]=if1_mdv_status(i); if (drvlist[i]==1) rocount++; putsprite (spr_or,i*26-4,0,&numbers[(i-1)*7]); putsprite (spr_or,i*26,2,&sprite[drvlist[i]*24]); if (drvlist[i]!=2) { drvcount++; putsprite (spr_or,i*26+4,13,arrow); if (if1_load_record(i, "run", 0, myrec) != -1) { runcount++; printf ( "%u: volume %s has the 'run' autoboot program\n",i, if1_getname(myrec->hdname) ); putsprite (spr_and,i*26+11,10,a_mask); putsprite (spr_or,i*26+11,10,a_char); } putsprite (spr_and,i*26+4,13,arrow); } } printf("done.\n\n"); if (drvcount==0) { printf("No ready drives found"); return; } printf("%u drive(s) ready, %u read-only cartridge(s).\n",drvcount,rocount); printf("%u cartridge(s) have 'run' for autoboot\n\n",runcount); }- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - _________________________________________________________________ Crea il tuo gadget e vinci 10 Windows Vista e 30€ di musica! http://concorsogadget.it.msn.com/