Aaaalso, im Anschluss an die Firmware Hovercards und nach dem Vorschlag von @Devlin habe ich mich mal drangesetzt und ähnliche Hovercards für BASIC-Schlüsselwörter umgesetzt!
Da sie der natürlichen Sprache sehr ähnlich sind, musste ich sie allerdings auf Code-Blöcke beschränken:
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
Tadaaa!
Damit das funktioniert, musste ich aber auch sicherstellen, dass es wirklich nur in BASIC-Code-Blöcken greift. Und obwohl ich versucht habe, das Forum-System so einzustellen, dass es BASIC in vorformatiertem Text automatisch erkennt, klappt das nicht immer (darum sollte ich mich irgendwann nochmal kümmern). Achtet also darauf, dass ihr auch wirklich BASIC auswählt, wenn ihr ein BASIC-Programm eingebt:
Und das war’s auch schon.
Feedback ist wie immer herzlich willkommen!
PS: Das Ganze war viel einfacher umzusetzen, als ich ursprünglich gedacht hatte, da die Vorarbeit am FW-Parser und den BASIC-Code-Blöcken ja schon erledigt war. Die größte Hürde war eigentlich, die BASIC-Befehle aus dem Wiki selbst zu scrapen – verdammter Bot-Schutz ![]()
PS2: Verwendete Quellen für die BASIC-Übersicht:
- Locomotive BASIC Reference Manual: Genutzt für die exakte Befehlssyntax, Parameterklammern und Versionsunterschiede (BASIC 1.0 vs 1.1).
- AMSDOS Firmware & Reference Manual (Soft 158): Genutzt für die 13 nativen Resident System Extension (|) Disc-Befehle, Umschalten der Laufwerke und Syntaxparameter.
- CPCWiki Locomotive BASIC Category: Dokumentation und ROM-Token-Tabellen zur Überprüfung von Spezialfällen (wie
COPYCHR$undWINDOW SWAP) sowie Hardware-Register-Interaktionen.
…alles in Gemini gefüttert, das dann das benötigte JSON für den Parser ausgespuckt hat.
