-
Notifications
You must be signed in to change notification settings - Fork 0
Archived Bug Fixes May 2026
Rudolf Stepan edited this page Jun 20, 2026
·
2 revisions
This note is preserved for historical context. Some build/run commands in this document may reflect older workflows.
Drei kritische Bugs wurden behoben, die MS BASIC funktionsunfähig machten:
Problem:
- Kernel
INITsetzteVIA_IER = $82→ CA1-Interrupt aktiv - MS BASIC ruft in
eval.s(Gleitkomma) undmisc1.s(Zeitgeber)SEI…CLIauf - Nach
CLI: anstehender CA1-IRQ vom letzten Tastendruck → Sprung zum IRQ-Vektor$C000(INIT) - → Kompletter System-Reset bei jeder arithmetischen Operation
Lösung:
-
VIA_IERbleibt$00(kein VIA-Interrupt aktiviert) - Kernel pollt
VIA_IFRdirekt (CHRIN_NB), braucht keinen CPU-IRQ - Neue RTI-Handler hinzugefügt:
NMI_HANDLER($C01E) undIRQ_HANDLER($C01F)
Dateien:
-
tools/kernel/kernel.s: IER-Initialisierung entfernt, RTI-Handler hinzugefügt
Problem:
- NMI- und IRQ-Vektoren zeigten beide auf
$C000(Reset) - Unerwartete Interrupts → System-Reset
Lösung:
- NMI-Vektor →
$C01E(RTI) - IRQ-Vektor →
$C01F(RTI) - RESET-Vektor →
$C000(INIT, unverändert)
Dateien:
-
tools/make_msbasic_rom.sh: Vektoren in ROM korrigiert
Problem:
- In
via6522.c: beim Lesen vonVIA_ORAwurde CA1 gelöscht - Wenn noch Tasten im Puffer lagen, sah der nächste
CHRIN_NB-Aufruf kein CA1 - → Multi-Char-Eingaben (z.B. "PRINT") verloren Zeichen
Lösung:
- Nach
via_keyboard_pop(): CA1 neu setzen wennkb_count > 0 - Kernel sieht sofort, dass weitere Tasten verfügbar sind
Dateien:
-
src/via6522.c: CA1-Re-Assertion nach Pop
Problem:
- Font-Daten waren LSB-first encodiert (Bit 0 = links)
- Rendering nutzte MSB-first:
(0x80 >> px) - → Zeichen erschienen horizontal gespiegelt
Lösung:
- Font wird in
vic_init()bit-reversed (alle Bytes) - Rendering nutzt korrektes MSB-first:
(0x80 >> px)
Dateien:
-
src/vic.c: Bit-Reversal invic_init(), Font nicht mehrconst -
src/vic_sdl.c: Rendering auf MSB-first umgestellt
# ROMs neu bauen
make clean
bash tools/make_kernel_rom.sh
bash tools/make_msbasic_rom.sh
make
# Emulator starten (benötigt SDL2-Fenster)
./sbc6502
# Im Kernel-Prompt:
> BASIC
# Im MS BASIC:
PRINT 1+1
PRINT "HELLO WORLD"
10 FOR I=1 TO 10
20 PRINT I * I
30 NEXT I
RUN-
tools/kernel/kernel.s- VIA IER disabled, NMI/IRQ-Handler hinzugefügt -
tools/make_msbasic_rom.sh- Vektoren korrigiert -
src/via6522.c- CA1-Re-Assertion für buffered keys -
src/vic.c- Font bit-reversal -
src/vic_sdl.c- MSB-first rendering
# Kernel-ROM: RTI-Handler an $C01E und $C01F
xxd roms/kernel.rom | grep "00c0 4040"
# Erwartung: 00000010: ... 4040 (RTI-Opcodes)
# MS BASIC ROM: Vektoren am Ende
xxd roms/msbasic.rom | tail -1
# Erwartung: 00002ff0: ... 1ec0 00c0 1fc0
# ^^^^ ^^^^ ^^^^
# NMI RST IRQ- Kernel: "BASIC" startet MS BASIC
- MS BASIC: Banner erscheint, "READY" prompt erscheint
-
Bug: Bei
PRINT 1+1→ sofortiger Reset zum Kernel-Prompt - Bug: Multi-Char-Commands wie "PRINT" oft als "PIT" oder "PRNT" verstanden
- Bug: Zeichen gespiegelt dargestellt
- MS BASIC läuft stabil
- Arithmetik funktioniert:
PRINT 1+1→2 - Strings funktionieren:
PRINT "TEST"→TEST - FOR/NEXT-Schleifen funktionieren
- SAVE/LOAD funktionieren (Disk MVP)
- Zeichen korrekt dargestellt
Generated from 6502-sbc-emulator Markdown documentation. FPGA hardware track: 6502-sbc-fpga (FPGA Wiki).