https://github.com/bluewaysw/pcgeos
(which I'd love to see get ported to the Raspberry Pi EDIT: or updated to make it easy to run on contemporary hardware)
https://github.com/bluewaysw/pcgeos
(which I'd love to see get ported to the Raspberry Pi EDIT: or updated to make it easy to run on contemporary hardware)
I think it would be remarkably feasible. The size and memory model is almost ideally suited.
A rp2350 with PSRAM and a SD card as a harddrive could do a quite capabLe implementation.
It's more of an architecture port than a code port because it is almost all ASM.
This is my scanline at a time renderer.
https://fingswotidun.com/cruft/2350LCD_5.mp4
The text mode is generated per Scanline using an ARM core, Tile, image, and sprite layers are all DMA+PIO generated.
So a Tile Layer is
TileMapDMA
|
V
TileIndexPIO
|
V
TileDataDMA
|
V
UnpackPixelIndex_PIO
|
V
PaletteReadDMA
|
V
TransparencyPIO <-- ScanlineBufferReadDMA
|
V
ScanlineBufferWriteDMA (Yes this was as hard to debug as it looks)
To do the entire tile map with paletted tileset happens in a single chained DMA operation, the other layers are a little simpler. It could generate the entire display without using the CPU, but the memory for the display Descriptors would take up too much memory, so there is a simple interrupt at the start of each scanline that updates the pointers in the DMA descriptors for the source and destination addresses that change per scanline.I did have a text mode running without CPU as well but it was cumbersome due to the attribute color lookup adding another map lookup. Now it is spending just a little CPU time per scanline to do the ReadChar, Read Attribute, read Font to convert it into a 1 bit-per-pixel image with a color per byte.
Performance is better that way, even if it does make a little more work for the CPU, the scanline renders quicker. Since they all render into the single scanline buffer, you can do as many layers as you have time for, so using no CPU is no good if it still takes too long.
could as easily run it in an emulator
For some the "point" is just solving a problem, however that happens.
For others it's an art form that gives them a sense of worth, using their knowledge and experience to do something special that not just anyone can do.
Neither is right or wrong; people just have different goals.
e.g. https://github.com/rdaum/rekursiv/ done on a whim based on a book i've had on the shelf for 25 years
it's just insane what you can get done these days.
i just think with this thing in particular, it being in x86 assembly means you're not really "porting" but rewriting. and then why that and not something else? :)
I have things running in my homelab which are awesome and amazing and useful and one of a kind. It is a great feeling.