lunedì 1 marzo 2021

Wuerthele's Expanded BASIC

Wuerthele's Expanded BASIC

Espansione BASIC senza perdita di memoria.

Ci sono molte espansioni BASIC per il C 64, e le principali schede potete trovarle in questo blog nella loro sezione dedicata. Tutte offrono nuovi comandi, ma quasi tutte "inghiottono" parte della memoria. "Wuerthele's Expanded BASIC", tuttavia, offre più memoria di quella necessaria per il BASIC durante il normale funzionamento.

L'estensione BASIC viene caricata in modo assoluto (LOAD "WEB", 8.1) e quindi avviata con SYS49152. Se viene caricata dal disco originale non si ha bisogno dell'istruzione SYS, perché è presente un piccolo loader di programmi (web.loader) che carica il programma vero e proprio e lo avvia sul dischetto. Quindi è meglio usare sempre questo piccolo loader per velocizzare le operzioni di avvio. "Wuerthele's Expanded BASIC" offre più memoria di quella normalmente richiesta per il BASIC. Inoltre si può usare un proprio carattere e una propria schermata grafica, con spazio sufficiente anche per i propri sprite. Lo spazio di memoria così ampio può essere utilizzato anche per le proprie routine. L'area ROM completa viene utilizzata se non viene utilizzata per il BASIC.


Schermata di avvio di WEB


Prima di cominciare a lavorare con il programma, è bene guardare prima le istruzioni con le loro dimostrazioni, presenti entrambi sul floppy. Tutti i programmi sul dischetto che iniziano con "EB" nel nome del file sono demo che possono essere caricate usando l'estensione BASIC. L'estensione inoltre offre delle funzioni speciali. L'integrazione di "no-border-sprite" ad esempio. La demo inclusa "EB CLOCK SHOW" lo dimostra molto chiaramente. "WEB", l'abbreviazione di "Wurthele's Expanded BASIC", ha comandi grafici molto veloci che superano persino la velocità di "SIMONS BASIC!


Caricamento programmi demo


"WEB" permetterà l'uso del solo floppy dopo l'installazione. Il buffer della cassetta infatti viene utilizzato come memoria BASIC. Se si vuole ancora lavorare con una cassetta, bisogna aumentare la memoria BASIC di 1022 kb e quindi sacrificare alcuni byte di spazio di archiviazione. Tuttavia, è disponibile più spazio di archiviazione del solito. Ciò si ottiene spostando la memoria dello schermo nella RAM sopra l'indirizzo 49152. Comunque, se non si vuole fare a meno del datasette, immettere quanto segue dopo aver installato "WEB":

Poke 43,254:Poke 44,3:Poke 1021,0:New

L'estensione BASIC offre alcuni nuovi e utili comandi che portano al programmatore molti vantaggi:

- Comandi grafici (linee, punti, ecc.)

- Possibile set di caratteri personalizzato senza restrizioni alla raccolta

- Gestione degli sprite

- Non sono supportati sprite di bordo

- Directory ed elenco pratici

- Memoria BASIC più grande del normale, schermo grafico, proprio set di caratteri e sprite memorizzabili. Tutti gli sprite sono nel quarto blocco VIC.

- Comandi estesi (variabile GOTO)

- In modalità testo (nessuna pagina grafica) 64 blocchi sprite disponibili

- Altre estensioni


Sono disponibili 17 nuovi comandi e comandi GOTO e LIST migliorati La memoria RAM del C64 può essere utilizzata quasi completamente con "WEB". Le aree RAM sotto la ROM sono usate per la bitmap, il set di caratteri e gli sprite, il resto è disponibile per la memoria BASIC L'espansione non interessa i comandi BASIC già contenuti nel C64, cioè tutti i vecchi Comandi del C64 vengono mantenuti.

I nuovi comandi iniziano sempre con il simbolo @ .

L'elenco esatto di tutti i nuovi comandi può essere trovato nella tabella 1.

Nel caso di costruzioni IF ... THEN, si dovrebbe notare che se THEN è seguito da un comando "WEB", questo deve essere separato dall'istruzione THEN da due punti. Un esempio:

IF a=4 THEN:@B6

Il comando @ può essere inserito solo in modalità diretta. In caso di emergenza, un programma in crash può essere reso nuovamente listabile. Tuttavia, non è un RESET al 100%.

Con SYS50231 è possibile visualizzare lo stato del disco o il canale di errore su floppy. Questo comando fa parte dei comandi directory e può quindi considerarsi un'ulteriore estensione del set di comandi.

Per adattare alcuni programmi BASIC che si inseriscono nella memoria dello schermo, è necessario aggiungere il valore 51200 all'indirizzo reale (1024 diventa 52224). Ad esempio gli sprite si memorizzano dall'indirizzo 61440 e i puntatori dello sprite sono quindi nell'intervallo da 53240 a 53247 invece che nell'intervallo da 2040 a 2047.

In "Wurthele's Expanded BASIC" il comando GOTO può anche essere seguito da variabili o espressioni matematiche. Esempio:

GOTO VA+4/INT(RND(1))

Il comando LOAD regola l'un l'altro i colori dello sfondo e della cornice in modalità bordo espanso per evitare lo sfarfallio. Con il comando LIST è possibile interrompere lo scorrimento con qualsiasi tasto, con il tasto funzione F7 si prosegue con la funzione LIST. Se l'elenco è stato interrotto, viene elencata una lettera o un'espressione a seconda del tasto premuto.

Se si desidera programmare in linguaggio macchina, è possibile utilizzare routine in linguaggio macchina oltre a "WEB". Fare riferimento alla tabella 2 che fornisce una panoramica esatta della memoria. In questo caso è meglio ridurre la memoria BASIC (ad esempio tramite l'indirizzo 55/56). È possibile utilizzare i 72 o 15 byte liberi sotto o sopra la memoria BASIC come buffer. Altri indirizzi (ad esempio nello Zeropage) devono essere salvati prima di poter essere utilizzati e ricaricati con il vecchio valore dopo la creazione della routine.

Bisogna fare attenzione quando si programmano gli interrupt! Se la modalità con bordo espanso è attivata, l'interrupt viene reindirizzato e ramificato in una routine time-critical.

Non c'era spazio all'interno di "WEB" per una funzione cerchio. Le tre righe seguenti si occupano di questo:

10 FORG*.7:Z=INT(SQR(1-(G/R))*R)

20 @PM,G+X,Y+Z:@PM,X+G,Y-Z:@PM,X-G,Y-Z:@PM,X-G,Y-Z:@PM,X-G,Y+Z:@PM,X+Z,Y+G:@PM,X+Z,Y-G

30 @PM,X-Z,Y-G:@PM,X-Z,Y+G:NEXT:RETURN

Nell'esempio, la chiamata viene effettuata da GOSUB 10. Vengono utilizzati i seguenti parametri:

x, y = coordinate del centro del cerchio r = raggio

m = modalità (1 = imposta, 0 = elimina)


In modalità Bordo espanso si può usare

POKE65535, Z

posizionare uno schermo nero sulla cornice estesa.

I seguenti parametri si applicano a Z:

Z = 0 schermo nero spento

Z = 255 schermo nero acceso

Tutti i programmi che sono stati creati in "WEB" possono essere dotati di un loader automatico. Ciò significa che tutti i programmi elaborati con esso possono essere caricati da "WEB" e avviati automaticamente dopo l'installazione. Questo elimina il fastidio di digitare il comando RUN.


Esecuzione di alcune demo:












--------------------------------------

TABELLA 1

--------------------------------------

COMANDI SENZA PARAMETRI

@C Cancella bitmap    ----------------   cancella lo schermo grafico

@D Visualizza directory   ---------------------    mostra la directory di un floppy disk. Annulla con F7, attendi con un altro tasto

@E Espandi bordo   -----------------   attiva il frame esteso

@G Modalità grafica   ----------------   accende allo schermo grafico

@I Inverti bitmap   -----------------   inverte lo schermo grafico

@N Modalità testo normale   --------------------   Schermata di testo, opposta a d)

@O Old Border   --------------   Schermo normale, opposto a c)

@R Redfine Charset   -------------------   imposta il normale set di caratteri C = come set di caratteri corrente


COMANDI A PARAMETRO SINGOLO

@B x Colore del bordo   --------------------   Colore cornice x

@F x Colore primo piano   ----------------------   Colore di primo piano x (x indica il valore del colore desiderato, vedere il manuale)


COMANDI A DUE PARAMETRI

@M x, z Modifica il colore della bitmap   -----------------------------   La schermata di testo è piena di caratteri che corrispondono al colore del carattere di selezione del colore x sullo sfondo x quando la modalità grafica è attivata. In modalità testo, lo schermo può essere riempito con gli stessi caratteri.

@ M 0.2   ------   cancella la schermata di testo


COMANDI A TRE PARAMETRI E MULTIPARAMETRI

@A x, z, a $   ---------   PRINTAT: La stringa a $ (può anche seguire direttamente tra virgolette) è scritta sullo schermo nella colonna y e nella riga x

@S a, x, y   --------   SPRITESET: Il numero di sprite a è impostato alla posizione x, y (LSB / HSB viene impostato automaticamente)

@P m, x, y   --------   PLOTPOINT: Se m è uguale a uno, il punto x, y è impostato nella bitmap. Se m è zero, viene cancellato

@L m, x, y, z, t   ------------   LINEPRINT: m è descritto al punto n). Viene tracciata una linea da x, yaz, t

@T m, b, x, y, a $   -------------   TESTO IN BITMAP: La stringa a $ viene scritta nella bitmap nella riga x, colonna y. La stringa può anche seguire tra virgolette.

Se m è uno, viene emessa la stringa "normale". Se m è due, è scritto al contrario.

La modalità testo è controllata con b. Se b è uno, viene attivata la normale modalità grande / grafica. Se b è due, viene attivata la modalità maiuscolo / minuscolo. Se b è tre o quattro, il proprio set di caratteri viene scritto in modalità maiuscolo / grafico o maiuscolo / minuscolo. Se non è stato creato alcun carattere separato, i valori tre e uno nonché quattro e due hanno ciascuno lo stesso effetto.


--------------------------------------

TABELLA 2

--------------------------------------

MEMORIA: PANORAMICA

00000 - 00694 Zeropage

00695-00767 72 byte liberi

00768 - 00819 vettori e sistema

00820-40960 40139 byte BASIC

40961 - 49151 BASIC-ROM, in RAM

49152 - 52223 programma principale


SUBROUTINE:

52224 - 53224 memoria dello schermo

53225-53239 15 byte liberi

53240 - 53247 puntatore per blocco siringa

53248 - 54296 Indirizzi VIC, SID, Indirizza caratteri ROM

54297-55296 RAM colore

55297 - 57343 indirizzi di sistema

57344-61439 Dati set di caratteri in formato RAM I / O

61440-65535 Dati Sprite nell'I / O RAM


Nessun commento:

Posta un commento