Aaaallora, sulla scia delle Firmware Hovercards e dopo il suggerimento di @Devlin, mi sono messo all’opera e ho implementato degli hovercard simili per le parole chiave del BASIC!
Data la loro somiglianza con il linguaggio naturale, ho dovuto limitarli solo ai blocchi di codice:
10 MODE 1: BORDER 0: CLS
20 INK 0, 0: INK 1, 26: INK 2, 6
30 ENV 1, 5, 1, 5: SOUND 1, 239, 50, 12, 1
40 ORIGIN 320, 200: DEG
50 FOR a = 0 TO 345 STEP 15
60 CALL &BD19: REM Sync to vertical flyback
70 DRAWR 100 * COS(a), 80 * SIN(a), 1
80 MOVER -100 * COS(a), -80 * SIN(a)
90 NEXT a
100 LOCATE 1, 24: PRINT "Press any key to reset palette...";
110 CALL &BB18: REM Wait for keypress
120 CALL &BC02: REM Reset inks to defaults
Ta-daaaah!
Per far sì che funzionasse, però, ho dovuto assicurarmi che si attivasse solo nei blocchi di codice BASIC. E anche se ho cercato di fare in modo che il sistema del forum identifichi automaticamente il BASIC nel testo preformattato, non sempre ci riesce (prima o poi me ne dovrò occupare). Quindi, assicurati di selezionare BASIC quando inserisci un programma in BASIC:
E questo è tutto.
I feedback sono sempre i benvenuti!
PS: È stato molto più facile del previsto grazie al lavoro già fatto sul parser del firmware e sui blocchi di codice BASIC. Detto ciò, l’ostacolo più grande è stato fare lo scraping dei comandi BASIC dal wiki stesso, a causa della protezione anti-bot ![]()
PS2: Fonti utilizzate per mettere insieme lo schema del BASIC:
- Locomotive BASIC Reference Manual (Usato per la sintassi esatta delle istruzioni, le parentesi dei parametri e le differenze di versione tra BASIC 1.0 e 1.1).
- AMSDOS Firmware & Reference Manual (Soft 158): Usato per i 13 comandi disco nativi Resident System Extension (|), lo switch dei drive e i parametri di sintassi.
- CPCWiki Locomotive BASIC Category: Documentazione e tabelle dei token ROM usate per verificare comandi particolari (come
COPYCHR$eWINDOW SWAP) e le interazioni con i registri hardware.
…il tutto dato in pasto a Gemini, che ha sputato fuori il file JSON necessario per il parser.
