[zxspectrum] Re: ..e tre: follia con Z88DK

  • From: Stefano Bodrato <stefano_bodrato@xxxxxxxxxxx>
  • To: <zxspectrum@xxxxxxxxxxxxx>
  • Date: Fri, 13 Jul 2007 10:08:28 +0200

>> 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/

Other related posts: