SEMBERIA BASIC PER C64 (2024)
Introduzione
Si è parlato molto delle carenze del C64 BASIC negli oltre 40 anni della sua esistenza. Progettato nel 1977, il BASIC per il Commodore PET era il migliore della sua categoria, offrendo comandi per lavorare con variabili alfanumeriche e numeri reali con funzioni trascendenti. Ma il BASIC dell'epoca in cui le telescriventi erano ancora un rilevante dispositivo di input/output è rimasto quello per i successivi sette anni sui successivi modelli Commodore, senza nemmeno i rudimentali comandi per cancellare lo schermo, posizionare il cursore sullo schermo o attivare l'alta risoluzione grafica. Quindi sono stati utilizzati PEEK, POKE e CHR$.
![]() |
Caricamento di Semberia in memoria |
Anche se questo non ha impedito al Commodore 64 dal diventare il computer di casa di maggior successo, molti computer con hardware più deboli del Commodore 64 (Sinclair ZX Spectrum, MSX 1, Atari 400, Apple II+), erano molto più convenienti da programmare, perché avevano tutti i comandi BASIC necessari. Incredibilmente, il dibattito su quale computer fosse migliore continua ancora oggi. Le estensioni del BASIC C64 apparvero abbastanza presto, le più famose delle quali sono Simons’ BASIC e BASIC 3.5. Inoltre, le riviste di informatica hanno pubblicato elenchi su come estendere il BASIC con nuovi comandi o routine di linguaggio macchina/assembly che forniscono l'accesso all'hardware. Tuttavia, queste estensioni non sono prive di inconvenienti:
- Devono essere sempre precaricate in memoria prima di utilizzare nuovi comandi, il che rende la preparazione al lavoro più difficile e dispendiosa in termini di tempo.
- Alcuni di essi riducono significativamente lo spazio fornito per i programmi BASIC (Simons BASIC per 8K).
- Estensioni diverse spesso occupano le stesse posizioni di memoria, quindi non possiamo ad esempio utilizzare un'estensione che aggiunge i comandi grafici insieme alla routine RENUMBER perché sono entrambi all'indirizzo 49152
- Non possiamo scegliere quali comandi vogliamo usare e quali no, quindi anche quelli di cui non abbiamo bisogno occupano memoria.
- I programmi scritti in BASIC esteso possono essere utilizzati solo da coloro che hanno tali estensioni.
SEMBERIA (Simple Embeddable Modular Basic Extension Relocatable It's Acronym) è un’estensione del BASIC che tenta di superare queste limitazioni. Non è ambizioso come Simons’ BASIC ma, nella sua configurazione completa, ha 27 nuovi comandi e occupa meno di 2 kilobyte di RAM. Inoltre, tutti i comandi sono rilocabili e per lo più indipendenti l'uno dall'altro. Pertanto, è possibile posizionare l'estensione BASIC in quasi tutte le posizioni di memoria:
- Dalla posizione 49152, lasciando intatti tutti i 38 kilobyte di spazio BASIC, ma anche 1 kilobyte all'interno dell'area del programma macchina per altri programmi in linguaggio macchina o sprite (versione HIGH)
- Dalla posizione 2061, che riduce lo spazio BASIC a 36 kilobyte, ma consente il BASIC programmi utilizzando i nuovi comandi da salvare insieme all'estensione e caricare e avviare con i consueti comandi LOAD e RUN, senza la necessità di alcun caricatore. I programmi possono essere modificati Dopo.
- Nelle righe BASIC DATA che permette di personalizzare l'estensione BASIC (scegliendo posizione di memoria e comandi da includere o escludere), quindi salvare come blocco di codice macchina.
- Tra i programmi BASIC e le variabili, dove i programmi macchina sono solitamente posizionati sul C64. Permette anche di salvare i programmi BASIC insieme a questa estensione, ma non di modificare i programmi. Questo verrebbe utilizzato con i programmi inizialmente sviluppati utilizzando il classico V2 BASIC, con comandi utilizzati in seguito durante la creazione della versione finale.
L'autore dell'estensione SEMBERIA è il prof. Samir Ribić, Ph.D. di Sarajevo, Bosnia e Erzegovina. Semberija è il territorio della parte nord-orientale della Bosnia ed Erzegovina ed è stata fonte di ispirazione per il nome del programma. È stato sviluppato come un progetto retrò per celebrare i 40 anni di programmazione Basic ed è completamente gratuito da usare e modificare. La motivazione dell'autore, altrimenti orientata per tutta la vita verso ZX Spectrum e computer IBM PC compatibili, è quella di mostrare ciò che avrebbe dovuto esistere nel 1984 per iniziare la sua vita di programmatore con il (allora odiato) C64.
SEMBERIA può essere scaricato da Internet sotto forma di file su dischetto (D64) o su nastro (TAP, WAV). I file D64 e TAP verranno probabilmente utilizzati tramite un emulatore (come VICE Emulator). WAV è destinato ad essere salvato su un registratore a nastro utilizzando la scheda audio del PC e quindi caricato su un vero C64 utilizzando il dispositivo a nastro 1530. Ognuno di essi contiene tre versioni: HIGH, LOW e INSTALL.
Versione HIGH, posizione 49152
Questa versione non utilizza memoria riservata ai programmi BASIC, ma deve essere caricata prima del programma BASIC che utilizza nuovi comandi. Eseguire i seguenti comandi per caricare e attivarlo.
LOAD "HIGH",8 per la versione del disco
LOAD "HIGH" per versione a nastro
Avviare il programma con RUN e inserisce SEMBERIA alla posizione 49152, lo inizializza ed elimina il programma BASIC. Dopodiché è disponibile e puoi usarla nei tuoi pogrammi BASIC. Se per qualche motivo l'estensione BASIC deve essere riavviata, può essere fatto con SYS49152
SAVE "NOME" su nastro
SAVE "NOME",8 su dischetto
Prima di caricare un programma scritto in BASIC esteso, è necessario caricare ed eseguire la versione HIGH dell'estensione SEMBERIA, come descritto sopra, e quindi eseguire
LOAD "NOME"
LOAD "NOME",8 dal nastro da dischetto
Versione LOW, immediatamente prima del programma BASIC
Questa versione occupa due kilobyte di memoria BASIC, ma può essere salvata insieme al BASIC programma che utilizza nuovi comandi, diventandone parte integrante. Esegui i seguenti comandi per il caricamento:
LOAD "LOW",8 per la versione disco
LOAD "LOW",1 per la versione a nastro
Esegui il programma con RUN
Successivamente, sono disponibili i nuovi comandi. È possibile salvare i programmi scritti in BASIC esteso nel modo seguente
POKE 44,8 SAVE "NOME"
RUN
sul nastro
POKE 44,8 SAVE "NOME",8
RUN
su floppy
Se per qualche motivo è necessario riavviare l'estensione BASIC, è possibile farlo con SYS2061
Versione INSTALL nelle righe DATA
Questa versione viene utilizzata per personalizzare SEMBERIA BASIC senza ricompilare il codice sorgente. Digitare i seguenti comandi per caricare e attivare:
LOAD "INSTALL",8 per la versione del disco
LOAD "INSTALL" per la versione su nastro
L'estensione BASIC viene memorizzata in righe DATA. E' possibile modificare l'inserzione per aggiungere o eliminare comandi, modificare l'indirizzo di caricamento predefinito o il nome del file.Esegui il programma con RUN
Attendere la lettura delle righe DATI e il salvataggio della versione personalizzata di SEMBERIA su disco oppure (se l'hai modificato) su nastro. Resetta il tuo computer e, supponendo che tu non abbia modificato INSTALL (mantenendo le opzioni predefinite per il nome e la posizione di avvio), caricare e inizializzare SEMBERIA BASIC utilizzando LOAD "EXBAS",8,1 SYS 49152
Nuovi comandi
Al fine di ridurre al minimo l'utilizzo della memoria durante il riconoscimento dei comandi e di renderli più veloci, tutti I nuovi comandi iniziano con un punto esclamativo seguito da due byte rappresentati da lettere o token BASIC esistenti.
Questo è un elenco di anteprima dei nuovi comandi. Vedere il manuale per descrizioni più dettagliate. L'elenco non è definitivo.
!AT x,y - Imposta la posizione del cursore di testo, colonna x (0 ≤ x ≤ 39), riga y (0 ≤ y ≤ 24)
!BCLR sfondo,bordo - Imposta lo sfondo e il colore del bordo dello schermo per le modalità di testo standard, definibile dall'utente e grafica multicolore.
!TCLR colore - Imposta il colore del testo per il testo standard e le modalità di testo definibili dall'utente. Il valore del parametro rappresenta il codice colore descritto nel comando BCLR.
![]() |
Comando per il cambio dei colori dello sfondo e del bordo |
!CLRS - Cancella il testo standard o il testo che consente la definizione di caratteri da parte dell'utente e posiziona il cursore nell'angolo superiore sinistro.
!ORD - Passa alla modalità testo standard (40x25), con memoria video situata all'indirizzo $ 0400 (1024).
!USRT - Passa alla modalità testo (40x25), che consente la predefinizione dei caratteri, con memoria video situata a $CC 00 (52224) e definizione dei caratteri a $E 000 (57344).
!CDEF indirizzo o pattern - Rende possibile la ridefinizione di caratteri o sprite
Comandi grafici ad alta risoluzione e multicolore :
!GR mode - Attiva la modalità grafica 320x200 o 160x200 con memoria video situata all'indirizzo $E 000 (57344) sotto la ROM KERNAL e quadrati di attributo che definiscono aree di colore 8x8 all'indirizzo $CC 00 (52224)
!CLRG colore1,colore2 - Cancella la schermata grafica e imposta i colori iniziali in tutti i quadrati di colore.
!GETPRINT over - Copia il contenuto della schermata di testo ordinaria nella memoria video grafica, utilizzando il set di caratteri nella ROM.
!PPOS x,y,c - Traccia un pixel sullo schermo in corrispondenza delle coordinate (x,y) in modalità grafica. In entrambe le modalità (320x200 e 160x200) l'angolo in alto a sinistra è alle coordinate (0,0) e l'angolo in basso a destra è alle coordinate (319,199). ! LI x1,y1,x2,y2,c Disegna una linea retta tra i punti con le coordinate (x1,y1) e (x2,y2) utilizzando il colore logico specificato dal parametro c.
!SQRCLR x,y,colore1,colore2, colore3 - Imposta il colore del quadrato dell'attributo 8x8 associato all'immagine grafica con una risoluzione di 320x200 o 160x200.
!SDEF num,addr,colore - Specifica l'indirizzo di memoria della definizione dello sprite e il colore iniziale.
!SPOS num,x,y,visible - Imposta la posizione dello sprite e lo rende visibile o invisibile.
!EXPAND num,dimensione,valore - Modifica la visibilità, l'altezza, la larghezza, la priorità dello sfondo e il numero di colori dello sprite.
!IFCLOSE num - Controlla se uno sprite ha toccato un altro sprite o lo sfondo. In tal caso, il bit meno significativo della variabile ST è impostato su 1.
!MPOKE da addr, a addr, dimensione - Copia parte della memoria a partire dall'indirizzo specificato dal parametro da addr, all'indirizzo specificato nel parametro a addr, trasferendo i byte totali specificati dal parametro dimensione.
!DPOKE addr, valore - Memorizza il valore a 16 bit specificato dal parametro valore in due posizioni di memoria adiacenti specificate dal parametro addr
!NOTON - Resetta il chip audio e disattiva l'audio. Si consiglia di chiamare questo comando prima di utilizzare altri comandi audio.
!VVAL volume - Imposta il volume massimo per tutti i canali.
!NOTE canale,frequenza - Suona una nota utilizzando un'onda triangolare sul canale specificato. La frequenza è di 17 Herz
!LENV channel,attack,decay,sustain,release - Definisce l'inviluppo del suono riprodotto utilizzando !NOTE oppure !FORM.
!FORM channel,frequence,waveform,pulse - Riproduce un tono della frequenza specificata, utilizzando una forma d'onda speciale.
!STOPON linea - In caso di errore del programma, l'esecuzione continua dalla riga del programma BASIC specificata
!RESTORETO linea - Specifica la riga con il comando DATA da cui il successivo comando READ prenderà i dati. I nomi dei comandi vengono scelti in modo da occupare 2 byte dopo il segno esclamativo, per semplificare e velocizzare l'analisi e mantenere l'estensione rilocabile.
Il manuale fornisce i modi per aggiungere nuovi comandi o ridurre l'estensione BASIC per rimuovere i comandi non necessari: la compilazione incrociata del codice sorgente su PC o la modifica delle righe DATA nella versione INSTALL. Esempi di comandi aggiuntivi sono !DLIST (elenca la directory senza perdere il programma BASIC) e !CGOTO (comando GOTO calcolato).
Nessun commento:
Posta un commento