Hovercard BASIC

CoooSI, facendo seguito alle Hovercard del Firmware e dopo il suggerimento di @Devlin, mi sono lanciato e ho implementato hovercard simili per le parole chiave del BASIC!

A causa della loro somiglianza con il linguaggio naturale, ho dovuto limitarfe 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!

Tuttavia, affinché funzioni, ho dovuto assicurarmi che sia attivo 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 funziona (dovrò occuparmene prima o poi). Quindi, assicurati di selezionare BASIC quando inserisci un programma BASIC:

E questo è tutto.

I feedback sono sempre i benvenuti!

P.S. È stato molto più facile del previsto, dato che il lavoro sul parser del FW e sui blocchi di codice BASIC era già stato fatto. Detto ciò, l’ostacolo più grande è stato fare lo scraping dei comandi BASIC dalla wiki stessa, a causa della protezione anti-bot :joy:

Assolutamente fantastico!

Mi chiedevo solo… è possibile in qualche modo mostrare l’elenco dei parametri per le funzioni del BASIC quando ci si passa sopra con il mouse?

ENV è un ottimo esempio di comando con diversi parametri.

Sì, è fattibile. Non solo ENV, ma anche ENT e SOUND. Ci sono altri comandi che prendono più sotto-parametri?

Ho intenzione di aggiungere un dettaglio dei parametri voce per voce nelle hovercard per questi e per tutti gli altri che ci servono.

Ok, penso di esserci riuscito. Ho ampliato i seguenti comandi:

  1. AFTER: ritardo, indice del timer (0–3) e numero di riga di destinazione.
  2. BORDER: colore primario e colore alternativo lampeggiante.
  3. ENT: numero dell’inviluppo (1–15), numero di step di intonazione, ampiezza dello step di variazione di intonazione e durata della pausa.
  4. ENV: numero dell’inviluppo (1–15), numero di step del volume, ampiezza dello step di variazione del volume, durata della pausa e forma/periodo PSG hardware.
  5. EVERY: intervallo di ripetizione, indice del timer (0–3) e numero di riga di destinazione.
  6. INK: numero di penna logico, colore fisico 1 e colore lampeggiante 2.
  7. KEY DEF: numero di tasto (0–79), attivazione/disattivazione della ripetizione e codici carattere per tasto normale/maiuscolo/control.
  8. ORIGIN: offset delle coordinate (x, y) e limiti di ritaglio della viewport (sinistra, destra, basso, alto).
  9. SOUND: maschera di bit del canale, periodo dell’intonazione, durata/rendezvous, volume, inviluppo del volume, inviluppo del tono e periodo del rumore.
  10. SPEED INK: durata del lampeggio fase 1 e fase 2.
  11. SPEED KEY: ritardo iniziale e velocità di ripetizione.
  12. SYMBOL: codice carattere di destinazione (240–255) e i 8 byte della bitmap di riga.
  13. WINDOW: numero di stream (#0–#7) e coordinate rettangolari della finestra (sinistra, destra, alto, basso).

Inoltre, ho limitato la funzione del parser che genera le hovercard per evitare che le crei dopo le istruzioni REM, dato che queste possono contenere testo in linguaggio naturale. Facciamo una prova:

10 MODE 1: BORDER 0, 1: SPEED INK 15, 15
20 INK 0, 0: INK 1, 26: INK 2, 6: INK 3, 15
30 REM Notice that MODE, BORDER, and SOUND inside this comment stay unlinked
40 SPEED KEY 30, 2: WINDOW #1, 2, 38, 2, 8: CLS #1
50 SYMBOL 240, 24, 60, 126, 255, 255, 126, 60, 24
60 ENV 1, 5, 1, 5: ENT 1, 10, -5, 2
70 SOUND 1, 239, 40, 12, 1, 1
80 ORIGIN 320, 200: DEG
90 EVERY 150, 1 GOSUB 200
100 PRINT #1, "Custom character: "; CHR$(240)
110 FOR a = 0 TO 360 STEP 45
120   DRAWR 60 * COS(a), 40 * SIN(a), 2
130 NEXT a
140 CALL &BB18: REM KEY and WAIT checks ignored here
150 END
200 PRINT #1, "*TICK* ";: RETURN

Che ne dici, @ervin ? :slight_smile:

Questa roba è davvero fantastica. La prossima volta potrei usare la CPC wiki per scrivere il mio codice, sarà di sicuro più veloce che andare a cercare nel manuale.

Grazie amico, lo apprezzo davvero. Piace molto anche a me com’è venuta, meglio di quanto mi aspettassi. Devo dire che Gemini mi ha dato una gran mano a organizzare tutto per bene, altrimenti ci avrei messo una vita a compilare il tutto…

Che dici, dovrei creare un editor BASIC su questa base da qualche parte sul forum o sulla wiki? Magari potrei persino farlo stand-alone, ci sono editor di codice già pronti che potrei usare invece di reinventare la ruota e la struttura di base c’è già! Potrebbe persino supportare il completamento automatico e magari l’esportazione in un file dsk OLTRE A farlo girare sull’RVMPlayer integrato?!

Forse il creatore di questo sito potrebbe essere d’aiuto?

Sono sicuro che sarebbe fantastico, ma non sentirti in dovere. Hai fatto un lavoro fantastico per riportare tutto online e tutte queste nuove funzionalità sono già un enorme miglioramento. Ti meriti proprio un’altra bella pausa a breve!