Come annunciato da Microsoft, lo scorso 15 giugno il web browser Internet Explorer (abbr. IE) è andato in pensione, cedendo il passo a Edge.
Nonostante il pensionamento, la presenza di Internet Explorer si farà ancora sentire. Per qualche tempo, infatti, sarà attiva in Edge la modalità Internet Explorer, che consentirà la corretta visualizzazione di siti e applicazioni legacy durante la fase di transizione. Moltissime organizzazioni, infatti, fino ad ora hanno richiesto come requisito imprescindibile il supporto a IE!
Sebbene IE sia stato ultimamente oggetto di molti meme scherzosi, che ironizzano soprattutto sulla la sua lentezza nei confronti dei browser moderni, è innegabile che, nel bene e nel male, con esso finisca una parte della storia di Internet e del World Wide Web.
Se da una parte IE ha vinto la prima guerra dei browser (Netscape fu annienteto), anche grazie alle politiche monopoliste di Microsoft, è anche vero che nei primi anni 2000 è stato praticamente l’unico strumento in grado di visualizzare qualsiasi sito web (soprattutto quelli non conformi agli standard), non solo su sistemi Windows. Ricordo che quando ero studente universitario, per poter consultare alcuni siti dovetti installare IE5 per Solaris/Sparc, suscitando l’indignazione dei puristi di Unix e occupando buona parte della mia quota disco disponibile! Infine, proprio grazie alla scelta da parte di Microsoft di includerlo nel sistema operativo Windows 95 e superiori, Internet Explorer ebbe il “merito” di traghettare nel web milioni di utenti nel mondo.
Forse, ora gli sviluppatori web frontend tireranno finalmente un sospiro di sollievo, in quanto non saranno più costretti a supportare un browser che, benché onnipresente, era ormai universalmente ritenuto obsoleto!
Nota importante: EVAS10N.RAS.DOT attualmente supporta solo la modalità video a 32 colonne!
TL; DR
Sono un utente Sinclair ZX Spectrum dal 1988 e un appassionato di ZX Spectrum Next da quando ne ho sentito parlare per la prima volta, nel 2017. Adoro i (retro)computer e soprattutto amo sviluppare applicazioni (principalmente videogiochi) per essi. Ho iniziato a programmare in BASIC da bambino e poi ho studiato Pascal , C , Java , C++ e C# , tra gli altri. Attualmente, il mio linguaggio di programmazione preferito per lo sviluppo retro è il C e la mia toolchain preferita è z88dk . Uno dei primi programmi che ho realizzato per ZX Spectrum Next è il comando more (precedentemente noto come readme), incluso nella distribuzione software ufficiale . Ho anche effettuato il port per ZX Spectrum Next di una semplice versione del programma scherzoso cowsay.
Nell’aprile 2020, mi è stato finalmente consegnato il tanto atteso ZX Spectrum Next e ho immediatamente configurato l’ambiente CP/M e installato il compilatore Turbo Pascal 3.
Recentemente, EVAS10N.PAS è stato migliorato e ottimizzato per CRISS CP/M, un interessante computer basato su microcontroller AVR e in grado di emulare la CPU Z80 e di eseguire il sistema operativo CP/M.
Negli ultimi anni, ho sentito spesso parlare di TRSE (Turbo Rascal Syntax Error), una suite completa che include un moderno IDE e un cross-compiler Pascal e che supporta molti computer a 8 e 16 bit, basati su microprocessori come il MOS 6502, lo Zilog Z80, il Motorola 6800 o la linea X86. Penso che sia una suite eccellente e non vedevo l’ora di provarla!
Alcuni giorni fa è stata annunciata la DotJam. Lo scopo è provare a creare un gioco, una demo o un tool interessante sotto forma di file .dot. Pur desiderando partecipare alla DotJam, non sarei riuscito a trovare il tempo per ideare e realizzare qualcosa di nuovo. Poiché, tecnicamente parlando, qualsiasi file binario con estensione “.dot” e contenente fino a 8K di codice macchina che può essere eseguito dall’indirizzo $2000 (8192 in decimale) può essere un dot command e TRSE consente di specificare l’indirizzo di inizio del programma (menu Progetto => Impostazioni progetto = > scheda Target Settings), ho pensato di partecipare, convertendo EVAS10N.PAS da Turbo Pascal a TRSE, facendone un dot command!
Essendo il port di un programma per CP/M, EVAS10N.RAS.DOT non utilizza (ancora?) alcuna delle funzionalità di ZX Spectrum/Next, come colori, suono, grafica ad alta risoluzione, sprite, ecc… Sarebbe quindi interessante evolverlo per sfruttare appieno le capacità dello ZX Spectrum Next, magari mediante una unit dedicata (vedi file: next.tru).
Note di conversione
La conversione in TRSE non è stata così semplice e lineare come avrei inizialmente immaginato, a causa di alcune differenze tra TRSE e il dialetto Pascal che conosco, quindi annoterò alcune osservazioni. Per maggiori informazioni, potresti consultare la documentazione della sintassi TRSE .
Preciso inoltre che, avendo appena iniziato ad utilizzare TRSE, alcune delle mie ipotesi e considerazioni potrebbero essere sbagliate!
Cicli for
Il valore finale in un ciclo for non è incluso.
Quindi, ad esempio, questo ciclo:
for i := 0 to 10 do
begin
txt::put_ch(48 + i);
end;
produce il seguente risultato: 0123456789 e questo ciclo:
for i := 2 to 5 do
begin
txt::put_ch(48 + i);
end;
produce questo output: 234.
No array bidimensionali
Gli array di array non sono consentiti.
Quindi ho semplicemente sostituito:
var bricks: array[1..6] of array[1..32] of Boolean;
...
bricks[r, c] := true;
con:
var bricks: array[6*32] of Boolean;
...
bricks[(r * 32) + c] := True;
Condizioni annidate
Le condizioni annidate devono essere racchiuse tra parentesi, altrimenti accadranno cose terribili! si faccia riferimento alla sintassi TRSE per i dettagli.
Nomi di variabili locali
Il compilatore non consente lo stesso nome per più variabili, anche se il loro scope è diverso. Forse questo può essere risolto con il modificatore global… devo indagare ulteriormente!
Ecco un esempio in cui il compilatore segnalerà errori:
program Test;
function Square(val: Integer): Integer; // Fatal error: Variable 'val' is already defined!
var newval: Integer; // Fatal error: variable 'newval' is already defined!
begin
newval := val * val;
Square := newval;
end;
var
val, newval: Integer;
begin
val := 5;
newval := Square(val);
end.
Altre note
Prestare attenzione ai tipi di parametri di funzioni/procedure e alle variabili passate: passare un Integer dove è previsto un Byte o viceversa apparentemente può causare problemi.
Integer e Byte sono tipi senza segno!
Considerazioni finali
EVAS10N.RAS.DOT è stato realizzato in maniera spiccia, senza troppi test; pertanto il programma contiene sicuramente alcuni bug e può essere migliorato in molti modi. Sono comunque felice di essermici dedicato, in quanto mi ha dato la possibilità di conoscere TRSE, un ottimo strumento di sviluppo!