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

Evan Drake vuole il suo romanzo

Secondo posto al concorso Bissa la Fantasia 2026

Senza il trucco da Sprawl