• v1.2.0 d753ec9685

    SBC7 v1.2.0
    All checks were successful
    Release / build-rpm (push) Successful in 13m21s
    Release / build-deb (push) Successful in 14m8s
    Release / build-android (push) Successful in 17m4s
    Release / build-wasm (push) Successful in 3m48s
    Release / release (push) Successful (Homebrew tap step soft-failed, release published)
    Stable

    bcox released this 2026-03-29 05:55:32 +00:00 | 119 commits to main since this release

    If v1.0.0 was the release where SBC7 became a computer, v1.2.0 is the
    one where it escaped from the simulator and started living on actual
    silicon. The headline: SBC7 now runs on the MiSTer FPGA platform, on
    real hardware, with real VGA output and a real keyboard. Along the way
    it picked up two new programming languages, a debugger, a web
    emulator, and several CPU bug fixes that turned out to matter quite a
    lot once the gates were no longer imaginary.

    (Why no v1.1.0? Because the bugs we found on hardware were
    load-bearing enough that we wanted them fixed before anyone else hit
    them. Consider the intervening commits a dress rehearsal.)

    MiSTer FPGA Core

    SBC7 runs on the DE10-Nano. Plug it in, pick it from the menu, and
    you are looking at the monitor prompt on a real screen driven by real
    flip-flops.

    • VGA output through the MiSTer HDMI scaler. The native 7-bit
      color (2R+3G+2B) is expanded to 24-bit, so your television does not
      need to know it is only getting 128 colors.
    • PS/2 keyboard input via a serial bridge. Typed characters,
      Backspace, Delete, Enter, and Ctrl+letter all work as expected.
      Extended scancodes are filtered to a whitelist so your GUI key does
      not type a phantom q.
    • UART1 routed to the MiSTer serial port, so you can connect an
      external terminal for a second channel.
    • H7X file loading from the OSD. Open the File menu, pick a
      .H7X file, and type G at the monitor prompt to run it. This is
      how you load TinyBASIC, TinyLISP, and anything else that does not
      fit in ROM.
    • OSD controls: Reset, Programmer's Switch, and Power Cycle (which
      clears all RAM -- the FPGA equivalent of pulling the plug).
    • Joystick mapping: A = Programmer's Switch, Start = Reset,
      Select = Power Cycle. For when you want to debug with a gamepad,
      which is a sentence nobody expected to write.
    • Aspect ratio selectable in the OSD for the display purists.

    New Programming Languages

    SBC7 now ships with three high-level languages:

    • TinyBASIC -- a line-numbered BASIC interpreter. PRINT, INPUT,
      IF/THEN, GOTO, GOSUB, FOR/NEXT, and the rest of the 1975 starter
      kit. If you learned to program on a microcomputer, this will feel
      like coming home.
    • TinyLISP -- a Lisp interpreter with garbage collection, lambda,
      define, cons/car/cdr, and arithmetic. Seven bits are enough for
      anyone who wants to argue about parentheses.
    • Both join TinyFORTH, which shipped in v1.0.0 and remains as
      stack-happy as ever.

    CPU Bug Fixes

    These were found the hard way: by running real programs on real
    hardware and watching them do the wrong thing.

    • ST14 [addr] was broken. The DECODE2 condition ir[1] == 0
      excluded ST14 (opcode 0x1E), which meant the CPU skipped fetching
      the address bytes and jumped straight to EXECUTE. The write went to
      whatever garbage was left on the address bus, cheerfully corrupting
      memory. Every program that stores a 14-bit value to an address --
      which is to say every nontrivial program -- hit this. TinyBASIC,
      TinyFORTH, and TinyLISP all failed on hardware until this was
      found. It worked perfectly in the emulator, because of course it
      did.
    • INC A / DEC A set the N flag from the wrong value. The negative
      flag was being computed from the accumulator before the
      increment or decrement, not after. Subtle, but it meant branches
      after INC/DEC could go the wrong way.
    • Synchronous memory latency. A new MEM_WAIT state in the CPU FSM
      gives synchronous RAM time to deliver its data before the CPU reads
      the bus. Without it, back-to-back clock enables could read stale
      values. A companion hold-off cycle in the clock divider guarantees
      this cannot happen.

    MiSTer OSD Control Fixes

    • Programmer's Switch changed from level-sensitive to
      edge-detect with a pulse counter. Previously it only worked on odd
      clicks, because the T1 toggle would set on one press and clear on
      the next.
    • Power Cycle changed from R2 (which triggers the MiSTer
      framework's own RESET and raced with the RAM-clear FSM) to T2
      (toggle only), so the core controls its own destiny.
    • Extended key filtering tightened to a whitelist of known
      scancodes (Delete, Keypad Enter) instead of passing everything
      through. Left GUI was arriving as q, which is only charming the
      first time.

    Emulator and Tooling

    • dap7 -- a Debug Adapter Protocol server for VS Code.
      Breakpoints, single-stepping, register and memory inspection, and a
      live VGA display, all from the comfort of your editor.
    • Android emulator -- SBC7 in your pocket. The retrocomputing
      community has wanted this since approximately never, but here it is.
    • WASM web emulator -- SBC7 in your browser, no install required.
      The sbc7.js module is reusable for embedding in your own pages.
    • Web font generation from the built-in VGA character ROM, so the
      SBC7 aesthetic can follow you onto the web.
    • fmt7 assembly formatter and lsp7 language server, plus a
      VS Code extension bundling syntax highlighting and LSP
      integration. (These shipped in the unpublished v1.0.1 cycle and are
      now formally released.)

    ROM and Assembly

    • Named constants replace magic numbers across all assembly
      sources. The code now reads like documentation instead of a hex
      dump.
    • Monitor input buffer moved from I/O space to RAM, freeing I/O
      addresses for hardware that actually needs them.
    • Console output documentation and a character set graphic added to
      the docs.

    Packaging and CI

    • Cross-compilation replaces emulated ARM containers -- aarch64
      builds are now fast instead of merely possible.
    • Unified versioning across all Cargo.toml files, package.json,
      deb/rpm packages, and language version strings. One version number
      to rule them all.
    • Homebrew tap support (brew install bcox/sbc7/sbc7).
    • Proper runtime dependencies declared in deb and rpm packages.
    • Forgejo release creation with automated MiSTer zip upload.
    • CC0-1.0 license applied to the project.

    Why 1.2.0?

    Because the computer is no longer a simulation, the CPU had bugs that
    only showed up on real hardware, we added two programming languages,
    and incrementing the minor version once did not seem like nearly
    enough.

    Downloads