Nuovo Compilatore Z80...

 Sono passati mesi dall'ultima volta che ho inserito qualche notizia o novità. Per pigrizia o forse perchè non mi è mai piaciuto tenere un diario :-O Comunque sia ad un certo punto guardando il sorgente in LiveCode del compilatore Z80 questo era diventato un coacervo di codice ridondante con funzioni duplicate e in alcuni casi dissonanti tra loro. A quel punto la decisione di ripartire da zero per la terza volta ma ora con le idee più chiare (forse) e una lista di funzioni base per riconoscere i vari dati, d'altronde non ha senso inventare ogni volta la ruota.  Ad aprile è nato il SAM ovvero Strange And Messy Compiler hahahaha. Il codice assembler generato non è proprio ottimizzato e spesso è arzigogolato ma funziona alla grande, per lo meno sul mio 6128 plus. Questi i comandi e funzioni implementate finora:

ASM,BORDER,CALL,CLS,COLORFG,COLORBG,COLORINV,CURSOR,DIM,ELSE,END,ENDIF,FOR,GET,GOTO,IF,IFG,IFP,INPUT,INK,NEXT,LABEL,LOCATE,MODE,PEEK,POKE,PRINT,RANDOMIZE,READGET,REM,RND,SAY,TAB,THEN,TO,STEP,VAR,WAITKEY,WEND,WHILE

 CPCVER,FREEMEM,LEN,MID,MIN,MAX,REVERSE,RND,TIME,VAL

Si lo so SAY e GET hanno il sapore del buon vecchio Clipper Summer 87 e i comandi IFG e IFP sono degli if mirati per i salti e la stampa a video, per evitare di scrivere IF nidificate :-) Diciamolo nella mia generazione di programmatori molti sono pigri e per non scrivere un else o un endif in più si crea un comando specifico hahahaha

Ecco un esempio:

temp = cpcver()
IFP temp = 0 print "Amstrad CPC 464"
IFP temp = 1 print "Amstrad CPC 664"
IFP temp = 2 print "Amstrad CPC 6128"
IFP temp = 3 print "Amstrad CPC 464 plus"
IFP temp = 4 print "Amstrad CPC 6128 plus"
IFP temp > 4 print "Unrecognized

oppure

IFG scelta = 1 goto InsArt
IFG scelta = 2 goto ModArt
IFG scelta = 3 goto StaArt
IFG scelta = 4 goto CanArt
IFG scelta = 5 goto RicArt
IFG scelta = 0 goto Uscita

In effetti è più leggibile e corto che scrivere:

IF temp = 0 then
    print "Amstrad CPC 464"
ELSE
    IF temp = 1 then
        print "Amstrad CPC 664"
    ELSE
        IF temp = 2 then
            print "Amstrad CPC 6128"
        ELSE
            IF temp = 3 then
                print "Amstrad CPC 464 plus"
            ELSE
                IF temp = 4 then
                    print "Amstrad CPC 6128 plus"
                ELSE
                    print "Unrecognized
                ENDIF
            ENDIF
        ENDIF
    ENDIF
ENDIF
Ovviamente se si deve scrivere solo il comando PRINT o GOTO.
Mi auguro di poter rilasciare un versione usabile nei prossimi mesi.
Buona serata
Paolo

Commenti

Post popolari in questo blog

Sinclair QL

Amstrad CPC 472