Possibly not minimal, but another good example of what can be done.
These are the sort of questions debated (and sometimes answered!) in other retrocomputing, minimalist, and similar forums… I can give you my thoughts, but are they representative of others? Who knows - and even I’m now confused having dived into the world of FPGAs in the last month or so.
Operating systems even more so - from a toggle switch and lamp entry system to command-line to GUI with no command-line to what?
(Although it seems the command-line is mostly a common theme, despite Apple and Microsofts efforts to eliminate it!)
And something I’ve debated/queried in recent times regarding the command-line - can you/someone/anyone come up with something that doesn’t resemble the unix shell without being as crude as CP/M ? I think it’s tricky - but maybe I’ve been hanging round unix systems for too long (almost 42 years now)
I do like my BCPL system though - it has just enough to be usable and needs a fairly low-end CPU to run, although running on a 16Mhz 65816 which is running an assembly coded bytecode interpreter for the compiled BCPL is a little slow at times…
When I looked at migrating my BCPL OS off it’s existing and very retro 65816 CPU, I looked at RISC-V… So to get myself up to speed on RISC-V coding, I write my own RV32IM emulator for it. In BCPL. On my existing system.
Sure - there are 100’s of emulators out there, as well as hardware but where’s the fun in that…
Anyway, it works, and it works well enough for me to re-implement the bytecode interpreter directly in RISC-V asm to let me run compiled BCPL programs under - and I can run my entire BCPL OS inside it, however it is somewhat slow. It takes 5 minutes to boot compared to the base system which boots in under 5 seconds, but I do feel I’m doing the whole tread in the footsteps of giants thing - nothing new as a concept, but actually quite satisfying for me.
Don’t forget From Nand to Tetris, where you design an 8-bit CPU from first principles. The hardware section of the textbook stops with a simulated CPU in a minimalist HDL dialect, but plenty of people have gone on to build them in real hardware, as well as refine and expand the basic design.
I’m trying to wrap my head around bootstrapping some kind of system on an ARM Cortex-M4 MCU. Initially I was using the C compiler suite from Inferno/Plan 9 to write an interpreter for a simple language, then I wanted to generate machine code myself so I wrote a quick and dirty compiler for a very simple language. Now I’m trying to bring those two things together so that I can write in a fairly high-level language but get better performance than the interpreter.
One thing I found when writing an interpreter was that it was easy to implement in C, in my case, but difficult to map bytecode to assembly language efficiently. I could imagine an instruction set that supported the operations I wanted to do more directly.
Thank you all. But I already knew all links except 1.
I’m not sure if it helps seeing more and more existing projects. Yes, someone has to know the basics.
It’s like writing a book or composing a new song. The more you read and hear other works, the more you might think that everything already exist. Someone needs got talent and good ideas.
On the other hand. When you plan something and spend lots of time and then find, that what you’ve invented did also someone else.
I do think as well, that an emulator could also be a way.
Or reading some books.
Probably inventing a new computer or even architecture is not that easy.
Most of my work is done from and with a clean-slate computing stack running on a forth-like CPU. All the software that I use is assembled for that specific CPU target. I’m not sure if this exactly what you have in mind, but here are some links that have helped me figure things out:
Yes, looks quite interesting.
But I think it’s not a completely new “architecture”.
From j1.pdf: “The J1 is a 16-bit von Neumann architecture”…
And 16 bits and with the graphics that is not that minimalistic.
I’m thinking about something extremely simple (without FPGA) or something completey new.
I got a bit confused with the scale because you said you wanted to build an OS.
If you’re looking for more esoteric, and less practical.
You could design a Iota/BLC CPU(1 instruction): Iota - Esolang
Or some flavor of LC CPU(7 instructions): Nock - Esolang
Or a Fractran CPU(1 instruction): XXIIVV — fractran
Something more standard would be a subleq(1 instruction): XXIIVV — subleq (DawnOS is an operating system targetting this architecture)
The Subleq operating system has this little text file that comes with it, which I like:
Imagine that software development becomes so complex and expensive that no software is being written anymore, only apps designed in devtools. Imagine a computer, which requires 1 billion transistors to flicker the cursor on the screen. Imagine a world, where computers are driven by software written from 400 million lines of source code. Imagine a world, where the biggest 20 technology corporation totaling 2 million employees and 100 billion USD revenue groups up to introduce a new standard. And they are unable to write even a compiler within 15 years. “This is our current world.”
No, I wasn’t thinking about an esoteric OS. I also thought of a simple one. But as I haven’t written an OS before, I don’t know how difficult it is. As said it should be for the new computer. Or an existing one like RPI.
Concerning a computer:
I’m not sure if it’s even possible to invent a new computer architecture/type (on the lower end).
And the most minimalistic computer probably also already exist. (1 Bit, 1 CPU, CPU-less etc).
Someone can’t reinvent the wheel, just improve it. But there are vehicles with no round wheels or not with 4 wheels. You can’t drive well, though. A new computer can be weird or experimental. But I have no ideas what could be different/new.
Well, there’s plenty of options, for example SBTCVM is a computing using trites, fractran would be a computing using fraction multiplication as its only opcode. Make a BLC computer, you’ll be one of the first.
Almost everything is new if you leave the realm of computing, everything has yet to be done.
These (virtual) computers already exist. There are screenshots of SBTCVM.
I want something own and new and not copying other’s ideas.
Yes, it might help learning from others. But I have to do it myself.
Currently, I don’t have enough time.
(Compare this previous post.)
It covers general architecture, but also goes quite into detail regarding CPU architecture, bit-sliced CPUs and microcode, and generally helps in understanding even advanced concepts and what they may involve.
Another great source, predating any microcomputer related thinking, are the UNIVAC I manuals, which were written, when the concept was still new, and go into such detail that you could build a copy from the descriptions provided. As this is starting from the very principles and basic building blocks, it may provide an inspiration for thinking out-of the box and finding your very own angle point for lifting the world.
These are available at Bitsavers (I’d have a look at the Preliminary Description and the Intro To Computers): http://bitsavers.org/pdf/univac/univac1/
(However, it’s still about von Neumann architecture, or, if you prefer, Eckert–Mauchly architecture, as it is, well, by Eckert and Mauchly.)
Then, I think, @EdS tip on prototyping in a familiar language and in a familiar environment is a great one. (You can actually write a OS in basic JS for the browser, compare https://masswerk.at/jsuix/.)
Writing your own simple OS is actually pretty easy, but start with a simple processor not a PI. There’s a huge amount of baggage to make all these modern processors do much useful.
If you start with something simple like a monitor and then extend it slowly to provide basic I/O services to whatever you are running you’ll end up with something akin to as lot of the early micro systems. Disk is a bit more fun because you’ve then got to deal with storage allocation which cassette tape didn’t need.
Essentially what I did in my Ruby project - but I copied ideas because I was somewhat lazy in the early days, and I like the 6502 - so I wrote my own thing that looked like “Woz Mon” and made Apple Integer BASIC run under it, then Applesoft, then I upgraded it to an Acorn MOS look-a-like because I wanted BBC Basic.
Then I took that from the 6502 to the 65816 and used it to bootstrap my BCPL OS.
Who knows where I’m going next!
(Actually, I do know, but I don’t know if I’ll get there - yet…)
Ps. As well as lazy, I’ve found it hard to get away from the unix paradigm in both things like system calls and a shell-like CLI … )-:
So you know about Ben Eater’s breadboard computer based on the 6502, but he also has a project where he builds a computer and CPU from logic gates. https://eater.net/8bit
His YouTube series where he describes the project is also a good introduction to how simple CPUs can work - I think it could be useful to watch if you want a place to start, even if you don’t want to copy his design.
(edit - I don’t think it includes keyboard or much of a display, just some lights it can blink)
I found a Brainfuck CPU on Opencores.
On Google, I found another Brainfuck computer which is very minimalistic.
Unfortunately, it’s just an Arduino shield, and originally I thought of a computer with regular keyboard and display.
But a good inspiration.
It has 4-bit, 4 buttons, 10 LEDs and a buzzer.
I also found the very expensive book “Computer Architecture: A Minimalist Perspective” mentioned above, online. Maybe, there are better books, or it’s better to read several books or read websites than spending $100 for that book.