SymbOS: preemptive multitasking OS that can play mp3s, video on 8-bit Z80 PCs
symbos.de
symbos.de
Not that I need more computers...I live in a travel trailer, and already have a C64, a modern desktop, a modern laptop, a netbook, two tablets, and probably other crap I'm not thinking of. But, whenever I see stuff like this, I really want to tinker with it, on the real hardware (somehow emulation isn't quite the same). I wonder if there are any FPGA recreations of these machines that would run SymbOS? That's been a subject I've started getting interested in, since one can have a "real" Amiga, Atari ST, and C64, in a single hardware package just by loading new images.
Edit: So, I did some googling, and the Replay FPGA computer has begun shipping to pre-orders, and it currently has support for Amiga and a few others. The developer seems to be planning support for MSX (as well as the BBC machine, which was also on my "I wish I could play with one" list). So, the MiST, the MiniMig, and the Replay are all options for retro computing nerds who want to not fill their closet with old machinery. That's pretty cool.
No, they didn't. Despite being a Microsoft standard. They were big in Europe, Japan and Brazil.
The MSX were wonderful machines. The even had "plug and play" hardware – cartridges were designed for software, but they could have basically anything. Companies created disk drive interface, hard drive, lightpen, you name it. And they would all setup automatically, due to the included ROM.
Also had great audio and video capabilities for the time. Eg. from 1989 (during the IBM PS/2 era, with VGA and the pc speaker for sound) https://www.youtube.com/watch?v=gcZJ64PgtgA That's for MSX2(which still used the Z-80). An example for the original MSX in 1986: https://www.youtube.com/watch?v=sk5C2E90dGY
It is amazing what a <4 Mhz processor can do. It did have a GPU, which helped due to the sprites (see the zanac example above). However, much later, people discovered that the GPU was actually a bottleneck and the CPU would have been able to push pixels (patterns, actually) at a much faster rate if it had access to the video memory directly.
The reason why Space Manbow there sounds so much better than Zanac A.I. is that Konami started to put their own sound chip (SCC https://en.wikipedia.org/wiki/Konami_SCC) in the cartridges of their later games, which would improve the sound capabilities of the MSX. This is one example of the "plug and play" hardware you mentioned.
The Colecovision was also pretty close to the MSX and many games has been ported between both systems including some classic Konami games.
The only real MSX sold in USA as a far I know was made by Yamaha, CX5M, and sold as midi sequencer bundle in music stores.
Sega for a while also had a policy of incrementing architecture by adding more "power" to their original architecture. So the Sega Genesis/MegaDrive is essentially still compatible with the Master System (the SMS adapter was pretty much just a pin adapter)...which means that the Spectravideo/MSX architecture lived on in some form for a very long while.
Thanks! I'm interested because I'm considering doing the same.
The "lot of tech" is actually a problem. I'm traveling with a girlfriend and her two cats this time, and it's pretty cramped in the trailer, even though I opted for a large-ish one (a 1984 34.5' Avion; one of the classic aluminum ones). We still need to downsize our belongings a bit before we really hit the road in earnest. Most stuff is boxed up in the back of the truck, so it's not realistically usable, so it probably ought to go into storage.
If someone can make a Z80 play MP3s, in any form, I'm impressed.
( If I remember right, some of them are basically Z80 cpu with MP3 decoding DSP built it. )
Or maybe a Fabrice Bellard project.
[1]: https://web.archive.org/web/20000311130535/http://lp3music.c...
From an idea to now, an effort that is going for 36 years so far! Incredible persistency.
CLiPS (on the same site) appears to support preemption [2], but that requires a C64. I don't know how that is achieved.
Very impressive work nevertheless.
I'm also a little puzzled about real preemption on a Z80, but http://www.cpcwiki.eu/index.php/SymbOS#Technical_background states
"Even the Z80 8-bit CPU is able to run a pre-emptive multitasking environment. Missing mechanisms like memory protection, which are often called as a condition for multitasking, are system stability issues only. The MP/M operating system already proved, that multitasking on Z80 computers is possible.
While the MOS Technology 6502 can not move the stack, the Z80 can freely replace it to any position in the memory, which is more or less a condition for pre-emptive multitasking. The existance of an alternative register set accelerates the content switching between the tasks dramatically. The restriction of Z80 systems to a 64 kB address space can be solved with bank switching. In this way computers like the Amstrad CPC and PCW, MSX, Enterprise or SAM Coupé are able to access hundred or thousand of kilobytes of memory. "
The previous sentence is "I want to give everything to SymbOS what a modern OS needs.", so I read that as being a statement of what the developer wants the OS to have in the future.
Further down the page, in the details section, it states "Priority based preemptice [sic] and cooperative multitasking" is done. Wikipedia mentions that a combination of preemptive and cooperative task management is used [1]. I'm confused.
(And just to be clear: I'm not trying to be negative. I'm very impressed with the technology and tenacity of the author.)
At least it can address enough memory to make it not a complete waste.
(In either case, you'll probably want some mechanism for tasks to relinquish their timeslice early; no reason not to make multitasking run better when tasks cooperate, even if it doesn't absolutely require that.)
To do the actual task switch, do exactly what you do on any system:
- save register state in tasks's register area (the state will be available on entry to the interrupt routine, in the usual fashion. The task pointer will be a system global at a fixed address)
- set timer for one timeslice hence (timers probably count down to zero, so this will just be a question of putting a value somewhere into an I/O register)
- resumes task by jumping to the program counter value from the task's register area
- GOTO 10...
(The complications come on something like the 6502, which has a fixed-size, fixed-address stack - but this it hard task-switching difficult, not the preemption! How I imagine CLIPS gets around this: it requires CMD SuperCPU, which is a 65816. Like the Z80 and 6809, but unlike the 6502, the 65816 has a relocatable stack. So it will probably behave as I describe above.)
Beside the flickering, it's pretty neat.