Strumenti Utente

Strumenti Sito


it:ugbasic:10liner
Traduzioni di questa pagina:


Partecipa al BASIC 10Liner Contest con ugBASIC

All'inizio di ogni anno si tiene un interessante concorso: il BASIC 10Liner Contest. Condotto da Gunnar Kanold dal 2011, puoi inviare giochi o programmi scritti per qualsiasi BASIC per home computer a 8 bit per i quali è disponibile un emulatore. Alcuni dei programmi presentati negli anni precedenti erano sbalorditivi, e forniscono un esempio delle capacità dei computer quali il Commodore 64 o l'Atari 800.

Ovviamente è possibile utilizzare ugBASIC per partecipare al prossimo concorso “BASIC10Liner”, nelle seguenti categorie:

Categoria Descrizione Consentito?
PUR-80 Un gioco in 10 linee di massimo 80 caratteri (con abbrev.)
PUR-120 Un gioco in 10 linee di massimo 120 caratteri (con abbrev.)
EXTREME-256 Un gioco in 10 linee di massimo 256 caratteri (con abbrev.)
SCHAU Un programma in 10 linee di massimo 256 caratteri (con abbrev.)

Non si può partecipare alla categoria PUR-80 poiché ugBASIC non è un BASIC nativo, come richiede la categoria. Per ridurre lo spazio è possibile utilizzare abbreviazioni di una o due lettere per ciascuna istruzione.

Per produrre un eseguibile che soddisfi le regole devi usare l'opzione -1 nella versione a riga di comando. In alternativa, se stai utilizzando UGBASIC-IDE, l'opzione può essere abilitata utilizzando l'opzione “10-Liner” Contest nel menu Build.

Regole per partecipare

Sul sito ufficiale troverai l'elenco esatto delle regole che il sorgente dovrà rispettare. Ve ne sono di generali, che valgono indipendentemente dalla categoria, e che devono essere soddisfatte. Questa piccola sezione aiuterà a scrivere un programma che le rispetti tutti.

Nessun dato esterno

1. Loading of data or program parts from mass storage is not allowed

Non è possibile caricare immagini, file di testo o altri dati da file esterni. Questa è una funzionalità molto comoda di ugBASIC, perché ti permette di declinare una risorsa per varie piattaforme. Purtroppo il regolamento non consente questo tipo di funzionalità. Per garantire meglio che questa regola sia soddisfatta, l'opzione -1 disabilita le istruzioni di caricamento (LOAD e simili) e l'opzione su UGBASIC-IDE fa lo stesso.

Vi sono comunque alternative.

È possibile sostituire un file esterno con una definizione “inline”, con la definizione di un buffer che contiene i dati binari equivalenti. In questo caso, però, è necessario ricostruire i dati nativi. Al momento non esiste alcuna funzione che converta un buffer generico (e comunque occuperebbe troppo spazio). Ovviamente, eventuali risorse grafiche statiche possono essere sostituite da disegni in tempo reale.

  pipe = LOAD IMAGE("pipe.png")
  PUT IMAGE pipe AT 0, 0

Can be replaced with

  DRAW 0, 0 TO 0, 8

Niente linguaggio macchina

2. The 10 lines must not contain any machine programs

Questa regola è implicitamente rispettata. Infatti, al momento non è possibile includere o eseguire codice assembly quindi non servono accorgimenti particolari.

Permessa la compilazione

3. Programs may be compiled (source must still be submitted)

Questa regola è implicitamente rispettata. Infatti ugBASIC permette di compilare e di fornire anche il sorgente, separatamente e tramite il comando LIST.

No codice automodificante o inizializzazioni nascoste

4. All code must be visible in the listing: self-modifying code or hidden initializations are not allowed

Questa regola è implicitamente rispettata. Infatti, al momento non è possibile auto-modificare il codice ugBASIC, o inizializzarlo utilizzando niente di diverso da una costante esplicita.

Sono permessi i POKE

5. POKEs are allowed

Sebbene ugBASIC in teoria ti permetta di usare i comandi POKE, non dovresti averne bisogno.

Formato di distribuzione dell'eseguibile

9. The program must be submitted on a disk or tape image appropriate for the system

Al momento ugBASIC genera diversi tipi di output, a seconda del target considerato. In particolare:

target descrizione output descrizione consentito?
atari Atari 400/800 xex Eseguibile
atarixl Atari XL xex Eseguibile
c64 Commodore 64 prg Eseguibile
d32 Dragon 32 bin ROM
d64 Dragon 64 bin ROM
mo5 Thomson MO5 k7 Nastro
msx1 MSX 1 rom ROM
pc128op Olivetti Prodest PC128 k7 Nastro
plus4 Commodore PLUS/4 prg Eseguibile
vic20 Commodore VIC-20 prg Eseguibile
zx ZX Spectrum 48K tap Nastro

Per tutti i tipi selezionati, il formato è già compatibile per la competizione. Per gli altri è necessario inserire l'eseguibile in una immagine disco. Si tratta di una operazione semplice, ed è possibile eseguirla con uno dei tool “open source” disponibili. In una delle prossime versioni sarà, comunque, possibile generare direttamente da linea di comando l'immagine già pronta per essere consegnata. (per maggiori informazioni clicca qui).

Listabilità

10. The program must be listable (The LIST command must produce a readable program listing)

Utilizzando l'opzione -1, verrà inserito nel programma un piccolo modulo di runtime, che consentirà di eseguire il programma (comando RUN) o visualizzarlo (comando LIST).

Verifica della categoria

11. Include the following in a ZIP file with your submission: The program (on disk or tape image file); a text file with the program description and instructions; a short description of how to start the game via emulator; a screenshot in jpg or png format (or an animated screenshot in gif format); a program listing, proving that the program does not have more characters than allowed in the category.

In ugBASIC, il conteggio dei caratteri deve essere eseguito allo stesso modo degli altri BASIC. L'unica cosa a cui fare attenzione sono le sequenze di controllo (es: cambio colore, cancellazione schermo, cursori direzionali, …). In generale, le sequenze di controllo sono sempre lunghe due caratteri, ad eccezione della cancellazione dello schermo ({CLEAR}) e dell'emissione di un singolo carattere specifico ({048} per 0). In questi casi, l'occupazione è limitata a un solo carattere.

Oltre al conteggio manuale dei caratteri, che è una pratica che dovrà comunque essere eseguita almeno una volta, in Microsoft Windows si può utilizzare la comoda funzionalità integrata nel UGBASIC- IDE. Questa funzionalità consente di verificare, in tempo reale, se il codice sorgente del programma è conforme o meno a qualsiasi categoria, poiché conta i caratteri esatti per ogni riga (dieci righe al massimo), e controlla le sequenze di controllo nelle stringhe.

Esempio

Come esempio di come scrivere un 10 liner ho portato su ugBASIC il gioco creato per partecipare all'edizione 2020 del concorso “BASIC10Liner”, e che ha vinto il FRATZENGEBALLER'S SPECIAL AWARD. Il gioco (qui il sorgente originale) è stato originariamente scritto in COMMODORE BASIC V2. Poiché la macchina di destinazione (Commodore 64) è la stessa, è stato sufficiente apportare alcune modifiche minori (principalmente, la sostituzione delle lettere maiuscole sulle abbreviazioni, alcuni reindirizzamenti utilizzando POKE e alcune altre modifiche minime, il sorgente adattato si trova qui).

Potrebbe partecipare alla categoria EXTREME-256, oltre a quella originale. Il runtime viene caricato direttamente sull'emulatore ed è possibile visualizzare il codice sorgente del programma (comando LIST) prima di eseguirlo (comando RUN).

Questo è un porting molto limitato a solo scopo dimostrativo.

Qui è possibile scaricare l'eseguibile.

POWERED BY