{{htmlmetatags>metatag-robots=() metatag-title=(Partecipa al BASIC 10Liner Contest con ugBASIC) metatag-keywords=(ugBASIC,BASIC,10Liner,Contest) metatag-description=(Come partecipare al contest usando ugBASIC) metatag-media-og:image=( :ugbasic:ugbasic-10liners-logo-fb.jpg ) metatag-og:title=(Come partecipare al contest usando ugBASIC) metatag-og:description=(Come partecipare al contest usando ugBASIC) }} ====== Partecipa al BASIC 10Liner Contest con ugBASIC ====== All'inizio di ogni anno si tiene un interessante concorso: il **[[https://gkanold.wixsite.com/homeputerium|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 [[:it:ugbasic:user:abbreviations|abbreviazioni di una o due lettere]] per ciascuna istruzione. {{ :ugbasic:ugbasic-ide-10liner.png?nolink&400 |}} Per produrre un eseguibile che soddisfi le regole devi usare l'opzione ''-1'' nella versione a riga di comando. In alternativa, se stai utilizzando **[[https://spotlessmind1975.itch.io/ugbasic-ide|UGBASIC-IDE]]**, l'opzione può essere abilitata utilizzando l'opzione **"10-Liner" Contest** nel menu __**Build**__. ===== Regole per partecipare ===== Sul [[https://gkanold.wixsite.com/homeputerium|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. ([[https://github.com/spotlessmind1975/ugbasic/issues/320|per maggiori informazioni clicca qui]]). ==== Listabilità ==== ''10. The program must be listable (The LIST command must produce a readable program listing)'' {{ :ugbasic:ugbasic-10liner-shell2.jpg?nolink&400 |}} 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. {{ :ugbasic:ugbasic-10liner-count.png?nolink&600 |}} 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 [[https://spotlessmind1975.itch.io/ugbasic-ide|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 ([[https://github.com/spotlessmind1975/adv10en/blob/master/adv10en.bas|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, [[https://github.com/spotlessmind1975/adv10en/blob/master/adv10en.ugbasic.bas|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'[[https://github.com/spotlessmind1975/adv10en/blob/master/adv10en.ugbasic.c64.prg|eseguibile]]. ====== POWERED BY ====== [[https://ugbasic.iwashere.eu|{{ :ugbasic:user:logo-ugbasic.png?nolink&600 |}}]]