"KromiOS on the real machine" is up on the devlog: how it hands the whole KV260 to a program and takes it back a hundred times in a row, and the one bug only the real screen could show. Plus new icons, and windows that come back after a restart. https://kromi.one/blog/kromios-on-the-real-machine/
Kromi One
@kromi.one
A new home computer in the spirit of the Amiga: its own FPGA chipset and its own simple, extendable OS, KromiOS. For games, work and enthusiasts. Built by Sergej in Germany. Devlog and newsletter: kromi.one
Kromi One has no floppy drive, but it has the sound of one: the latch, the motor spinning up, the head stepping, the eject pop. Our own homage to the Amiga 500, played while the SD card works. You can hear it in the post: https://kromi.one/blog/one-card/
KromiOS's Studio reads your Lua as you write it: type the name of a table you made yourself, add a dot, and it offers that table's own fields and functions, however you gave them to it.
Two players, two keyboards: a program on Kromi One can now tell which keyboard or mouse each key press and movement came from. Tested on the board with Sergej's own keyboard and mouse: 434 key presses and 806 mouse moves, every one put down to the right device.
Unplugging a keyboard a hundred times by hand is no fun, so Kromi One's firmware does it itself: it switches the USB port's power off and on and times each return. 100 of 100 came back, the slowest after 0.42 s. #FPGA #retrocomputing
KromiOS is on the network: it gets an address by itself, answers pings and moves data over TCP in both directions, each side checking every byte. On the real board it has just got its first address from our home router. #KromiOS
KromiOS now picks up where you left off: after a restart your windows come back where they were. And the menu bar has a clock, with your time zone and summer time kept on the card.
Programs on Kromi One can now hand our chipset 8-bit (256-colour palette) and 16-bit images, and it draws them directly. For Kromylist, our port of a tactics game, that should cut a battle's art from 100–170 MiB to about 20–31 MiB, by the port's own estimate.
Our OS found a bug in our firmware. KromiOS's file system noticed that a write to the SD card only finished while the program kept calling KROM; KROM's own tests waited a different way and never saw it. Fixed the same morning, and checked on the board: 256 MiB written, read back intact.
#ScreenshotSaturday: Kromylist, our Duelyst port for Kromi One, now plays all six starter decks. 5,800 games against the original JavaScript game: every move identical. It also runs on the real board, 95–98 % of battle frames at 60 fps. Pictures: Kromi One emulator. Art: Duelyst (CC0)
Remake or new machine? We put Kromi One next to MiSTer, the MEGA65, the Commander X16 and others: what each one is for, and why we chose to build a new machine. https://kromi.one/blog/remake-or-new-machine/
Every frame Kromi One's chipset draws is checked: the display computes a checksum of each frame it sends to the monitor, and we compare it with our reference renderer. In the triangles run on the board, 1,799 frames, half a minute of picture, were checked: none different, none late. #FPGA
Press Ctrl+Alt+F12 on Kromi One and a panel appears over any program: temperatures, fan, power, CPU load, memory, FPS. The chipset draws it as the picture goes out, so a game doesn't lose a frame: on the board, the frame checksum is the same with the panel on or off. Art: Kenney (CC0)
The first time Sergej ran his Pong on the real machine, it didn't start. KromiOS refused because the game used a part of the system it hadn't declared. One missing line in the game's app file fixed it. Not a bug: KromiOS's permissions doing exactly what they're for. #KromiOS
This screenshot was taken by KromiOS itself: Print Screen now saves the whole screen as a PNG on the card. KromiOS writes the file with its own code, about 100 KB for a full-HD desktop, spread over a few frames so the desktop never stalls. So far in the emulator. #KromiOS
KromiOS's Studio now colours your code by what each word means: keywords, functions, fields, Lua's own library, your parameters in their own colour, and globals underlined with dots. And while you type, it offers names, your own variables and Lua's functions, as today's editors do.
A test that proved nothing: after a power cut, KromiOS replays the journal NetBSD leaves on the card. The first test passed, but NetBSD writes a moment after each journal entry, so the cut never hit the gap. With a slower virtual card it did: 511 blocks replayed, the same as NetBSD's own replay.
We switched on our own computer. The board lights up, our firmware starts from flash, picks a game from the SD card, and our own chip draws every picture. No PC, no console, no GPU. Filmed on our prototype board. Full session: https://youtu.be/ZUVw6epM-DE
KromiOS now remembers your settings on the card: theme, keyboard layout and sounds come back after a restart. A change is saved a few seconds later, and a damaged settings file is left alone, with one note to say so.
Small win overnight: Kromylist, our card battler for Kromi One, passed its first full check on the real hardware. Five recorded games, 103,813 frames, every pixel identical to the reference, every move the same. Battles hold 60 frames a second for 90–95 % of frames.
KSound 1.0 is done: Kromi One's sound engine mixes 16 voices on a processor core of its own. On the real board it played our piece 18 times in a row, bit for bit, no dropouts, under full 1080p graphics. And this morning we heard it through the monitor's speakers.
No GPU. Our own home computer's chip draws these effects from Kromylist, our port of Duelyst: summon lights, a death dissolve, a big hit, the map's glow. https://youtube.com/shorts/0E6Wbd__SgY
Twelve effects from Kromylist, our port of Duelyst to Kromi One, one at a time: lights, shadows, a death dissolve, a big hit. The original game used GPU shaders; Kromi One has none, so our own chip draws every one of them. https://youtu.be/VXyugBlSKM4
#ScreenshotSaturday: a desert level on Kromi One's own chip. Four parallax tile-map layers, sprites and glowing coins at 1080p60; the 2D engine needs 2.9 ms of each 16.7 ms frame. A scripted demo on our dev board. https://youtube.com/shorts/rBISfTunscc Art: Kenney (CC0) #gamedev
Switch Kromi One on, and about two seconds later our firmware shows what's on the SD card: KromiOS, a test program, Kromylist. Choose with the arrow keys, press Enter; when a program ends, you're back at the menu. KromiOS shows its first picture 255 ms after you pick it.
Sound on: Kromi One's own sound engine, KSound, plays its first music: up to 16 voices mixed live in 48 kHz stereo, on a real-time core of its own. Every sound is synthesised from scratch, no samples. This clip is from our emulator, sample-exact; the listening test on the board comes next.