I don't think most people can appreciate just how slow and minimalistic a stock IBM PC is unless they've had to program one. Congratulations to the team on an outstanding achievement.
Holy shit. If someone had figured out how to do this while CGA was still relevant it would've changed the course of history as far as games support on the PC went.
@@daniel.... people have found a TON of optimizations recently that would have been super hard to find back then. One of the earliest "super optimizations" I can remember was Quake's "magic" fast inverse square root algorithm in 1996.
@@daniel.... It's interesting to me because I had an 8 bit machine that used a similar MC6845 CRTC as IBMs CGA. My guess as to what held back wider adoption of these sorts of hacks is that the lack of raster interrupts means that the code has to be tuned for each graphics chipset, motherboard chipset and CPU combination. It might be possible with a whole lot of resources to store predefined timings to cover all the popular prebuilt machines, and subject the riff-raff to a wait while some very precise timings are made before the code can be "reassembled". It wouldn't, and couldn't be a simple matter of reconfiguration, as a lot of the tricks in these demos rely on using the exact amount of time it took to perform the preceding instructions to ensure that the timing of the current instruction is correct in relation to the position of the CRT beam. You would need some means of shuffling the instructions around like a deck of cards to get the timings correct for each chipset, but unlike a shuffled deck of cards, you would always need to end up with the suits in order. It's a tricky enough problem that it doesn't surprise me that there are few commercial applications that do CRTC hacking, but it's still baffling to me that there wasn't a 'scene' specifically for the very popular IBM 5150 + CGA combo or Tandy's CGA variant.
Honestly why is everyone ignoring the sound? This is the fucking speaker. Only way I can see that working is a straight DMA to the timer chip while another timer controls the DMA just to get all this smooth video. The 6850 also gives you insane control over the video and was designed with the idea that you could "add on" to it. Not that anyone did. Tech just moved to fast:P
You can play samples through the PC speaker using timed interrupts to send a series of frequencies that normally sets the pitch, but will actually ramp the voltage, similar to how samples are done with the C64 these days.
@@rakido7388 And that has a REALLY high overhead. IIRC Windows 3.1 could play 2 seconds on my 386 with 4 MB RAM. Doing this on a PC-XT in realtime, even if the screen was completely blank, is impressive.
Holy god you guys. There's racing the beam, and there's riding it like a rented mule. I was not expecting anything more to be wrung out of the PC after 8088 MPH.
There's no way you can do this with 8088 and CGA. I kept thinking this through the whole demo. Massive props for making the seemingly impossible actually possible.
Check out Adrian's Digital Basement II. He actually ran it on old CGA Card from the early 1980s and this demo looked just like this, colors and all. I suspect that the programmers figured out exploits on the card somehow to access undocumented modes or line by line mode switches to enable drawing with more colors. ruclips.net/video/0WMTYZ60OvE/видео.html
A good demo looks like magic. When I saw the graphics appear, I thought "no big deal, he's switching modes in the middle of a frame. All that takes is good timing." And then the text appeared next to the graphics. I gasped out loud.
This demo is so unbelievably awesome. I've already waxed poetic on Jim's video, but I feel I need to say it here too - congratulations on a very well deserved win. Truly the pinnacle of the IBM PC platform.
Wow. It wasn't until watching this version that I realized that the vertical photo scroll is actually scrolling one pixel at a time, with no visible artifacting showing off any of the tricks! Can't wait for the floppy version to be available to try it out on my 5150!
@@x86VileR Yea, speaking of having good footage to show the details of the effects... What bothers me about this capture is that the video window is too large. So the actual CGA screen is now 'letterboxed' inside the total video window. This does not give the correct experience of overscan (which is supposed to go 'over the eges' of the entire visible area of a CRT. Now it looks like there's still a border, just one that remains boringly black.
@@Scalibq That extra letterboxing was added in post-processing to get around youtube's lossy 4:2:0 chroma subsampling. I did a bunch of experiments with CGA footage on YT, and I noticed that chroma errors tend to pile up and make highly detailed/dithered areas look like a mess, especially when they're moving around quickly (as in the rotating gears, twister, parallax, etc.). If the 240 scanlines are scaled up to the full 1080p or 2160p, you get a vertical scale factor of 4.5 or 9 respectively. That didn't look very good: at YT's 4:2:0 the chroma is sampled only every other scanline, so you need an even integer factor to eliminate those subsampling artifacts. With the padding, the scale factor becomes x4 at 1080p, or x8 at 2160p (4K), and that's why the image looks as faithful as it does. But even if we ignored the chroma problem, I guess a non-letterboxed capture still wouldn't reflect the "CRT experience" 100%, because it shows more overscan than the CRT does. I've been looking at ways to get decent CRT footage of this demo without the common video camera artifacts, so we'll see :)
@@x86VileR But what happens if you use a non-standard resolution? Video containers aren't limited to 1080p, 2160p etc, so you could just pick the integer resolution you need. Not sure how YT handles that, but I know they have an 'original' setting for certain videos, where they play it in the original format. Aside from that I think the proper way to solve the mismatching resolution with this demo is to take the capture, remove the letterboxing, and run it through an actual CRT postprocessing-filter, and fill the 'letterbox area' up by taking a 5153 and using that as a border, projecting the captured video inside its CRT area? I suppose for people who want the 'clean sharp' look of a digital pixel capture, you could forgo the CRT postprocessing, and just use the 5153 to 'frame' the demo instead of a random black area.
@@Scalibq Hm, I don't remember seeing that "original" setting in a while... but it's probably still worth it to optimize for common resolutions like 1080p, otherwise there's still some scaling done on the player's side (and it's often gamma-incorrect.. which isn't very good for CGA-type dithering either). I did think about taking the captured video and running it through something like FFcrt to simulate the effect closely... might do that at some point, but it'll be fun to see if I can get some good footage out of the actual 5153 first.
This is freaking unbelievable, as someone who's first PC was an XT at 9,56Mhz I am mind blown this ran not only at 4.50Mhz but also CGA, not to mention by the end I found myself thinking, wait is this the PC speaker? Oh damn bhoy! Had heard wave audio from the PC speaker before, even on my own first PC, but the audio quality by end of this demo is like, how the heck did you manage this much sampling rate?
The credits section modplayer is all Reenigne's work - it plays 1 sample per scanline (15.7KHz), and part of what makes it possible is that the music data is single-track so there's no software mixing. I expect that there will be a full write-up about it after we release the final version!
@@vnules yes, that's the basis for most of the video modes used here, although they're heavily customized (for things like 60Hz fluid motion, graphics in the overscan area, text/graphics split-screen).
Very nice! Runs fairly well on my NuXT with an ATi Wonder Graphics Solution (which is fairly CGA compatible), but hangs after the blue ball rolling scene (which also bugs).
The ATI GS/Small Wonder video chipsets do have a few issues... but the hang sounds like it might be due to the FE2010A (which replaces some discrete Intel peripheral ICs in the NuXT) - that one didn't play nice with 8088 MPH either. Still, nice to know it gets that far!
@@x86VileR I didn't done anything for a while, trying to, but no time at all! I have to put my arms out of my but and draw something nice. But.. Job, family, house,...
If you have the free RAM then some parts might actually run, others might go by way too fast (like that crystal ball scrolltext), and one or two parts like the end credits won't work at all. But even the parts that do run won't look right (for one, the T1000s have different character fonts, and a lot of the graphics depend on that.)
@@x86VileR did you guys do some sort of dithering trickery at the end credits to get the audio to have multiple frequencies, hence the huge frequency spike around 16KHz? So facinating!
@@reedmayhew18 that peak in the frequency spectrum is the PWM carrier wave - reenigne's player outputs one sample per scanline, so the playback is synchronized with the CGA's horizontal refresh rate (~15.7 kHz).
The best CGA Graphics I have ever seen. I think some of them rivaled EGA or early VGA! It is clearly drawing with more colors than CGA originally was designed for (4-colors in graphics mode and 16 colors in text mode). Is this done with scanline swaps, by exploiting the ASCII Art text mode characters into custom ones, or does the CGA hardware have extra modes that were not documented, or ?
For those who want to really know: It's 640x200 16 color text mode, but it starts on a new line every other (or every) scanline depending on the part of the demo. Which means only the topmost line(s) of every character is ever actually shown. That way while it doesn't allow adressing each individual pixel with any color (thus why things like the marble in the marble madness homage has weird fuzz around it), you can still pass it off as "graphics" with clever artistry.
Awesome, guys. Congratulations. I tried run this demo on DosBox-X but I got trash graphics. The first images appear doubled and just messed up. I'll try make it work.
I am going to run this on MY real hardware 8088 RGB CGA! :) The old demo "8088MPH" requers composite, and my CGA card is a clone and I have no capable TV of displaying composite CGA in color., so I hope this demo will be colorful on my CGA monitor :)
@@x86VileR I tried it , but did not make a video yet. It is a bit glitchy and in some effects the dithering effect do not work so it shows less colors on the screen. Also the last water reflection effect do not work at all. The machines shows black screen and hangs
amazing demo, can't wait to see what the finished version looks like i wonder, how's it possible to play such high quality audio through 1 square wave channel?
The technique used in the credits section relies on PWM (pulse-width modulation), combined with the fact that the physical speaker cone doesn't go between its minimum and maximum positions instantly - it takes a certain amount of time, so switching states fast enough can get you levels in between. IIRC someone once worked out the effective bitrate to something around 6 bits. In this case, it's synchronized to the horizontal refresh rate so you get one sample per scanline - a rate of 15.7KHz.
I tested it on an 8088 laptop with a CGA card (from: Ali Express). How do the graphics in a high resolution work? Is that text mode with a modified character set?
IIRC, the IBM CGA’s character set is set in ROM, which mean it is unable to be customized in any way. What they’re doing is tricking the CGA to only display two lines of each character, thus simulating 640x200 at 16 Colors. (Love your vids, btw!)
I know this demo was made for RGBI, but I wonder how it looks on composite. If it even works at all. Probably might look very ugly, but I still wonder if it'd work.
1. WOW. Boundless respect. 2. Does anyone know if there are any MiSTer cores that can fully run this? 3. Does anyone know if there are any CGA-to-VGA or CGA-to-HDMI conversion solutions that can stomach this?
I've heard that some work is being done on the MiSTer PC/XT core but I wouldn't really expect anything substantially different from software emulators (happy to be proven wrong of course). And yes, RGB2HDMI handles it just fine - that's how this video was recorded (more details in the description).
Yes, you can build yourself a TTL to Analog cable which you can do with some resistors attached to the intensity pin and each of the components, then you plug that to an OSSC, and it works perfectly. There is also a specific device, LGR talks about it here: ruclips.net/video/9SII7ujB3FY/видео.html
CGA has only 16K Vram, 320x200 @ 16 Color requires 32000 bytes, 640x200 even more.... how can be possible? How the demo achieved split screens that require video sync accuracy?
Those VRAM limit calculations only apply when every pixel is addressable. A lot of the extra color tricks are actually based on heavily modified text modes, where VRAM is laid out in character/attribute byte pairs, so the limits are different (look up "ansi from hell"). The split screens are created by synchronizing the code with the raster beam, and reprogramming the CGA and MC6845 at particular scanlines, so modes/colors/video start addresses can be modified in mid-frame. More info (and source code?) will come when we release the final and improved version :)
That's something worth exploring: Using a hacked text mode to get graphics on an MDA (non-Hercules). Some people did something similar on the Commodore PET (which is also text mode with fixed character sets).
is the RGB2HDMI doing some of the work to display at colour depth and resolution. Does this work without the RGB2HDMI hardware? if so very impressive guys. If not still well done . Amazing demo.
Thanks! The RGB2HDMI just provides a way to convert the CGA signal for a modern display (or a video capture device in this case). It won't add anything that wasn't already present in the video signal - if you have a monitor with direct RGBI CGA input it's absolutely not needed.
Can any of these tricks be generalised / made into general purpose? Of course I want this turned into a (newer) Windows CGA display driver. Maybe it would even work it you could match a CGA video card to a (bit more) modern CPU.
Just made a video of this running inside UniPCemu. It's running for the most part (8088MPH seems to crash on the credits again with the changed CPU/CGA timing improvements required for this demo). It's still a WIP though (ruclips.net/video/kOoG0Orvk_M/видео.html).
Shiru composed his part using his own custom VST plugin, in Reaper I think. Monotone is still a good choice, although it updates at 60 Hz (compared to the 120 Hz in this tune).
@@JasperTedVidalTale it is sure easier, because it is not a tracker. The key feature it provides is the easy means to a create pseudo polyphony, i.e. overlay different parts with different priorities. In other words, you write your song as a multichannel one, with different tracks for different parts, and using the priority system you can overlay them to produce a monophonic stream. To my knowledge, there are no trackers designed to do this at the moment. With Monotone or Furnace you have to write a monophonic song with all monophonic parts all by hand.
With a very hacked-up text mode. Games like Round 42 or Paku Paku got their low-res 16-color 'mode' with a similar trick: they only ever used a single character for their "pixels", but here we're using the entire charset. RUclips doesn't like links in comments, but you can look up "ansi from hell" or "the Macrocom Method". (and if 16 is impressive, check out "8088 MPH" which does a little more) ;-)
@@x86VileR ohh so you've got some kind of mapping for the best character to use to represent what pixels you want to show, that explains the artifacting around the ball in the marble madness example, I wondered about that! Ahh 8088 mph, I had seen that before, I have an even greater appreciation for it now I know a bit more about what's going on!
I'd say no - the onboard video is EGA, and a dedicated CGA board would need some kind of ISA expansion (and a way to disable the onboard EGA controller). If the PC1's RAM is upgraded to 640K, it /might/ be able to run most of the demo by setting the onboard controller to CGA mode, but I wouldn't really get my hopes up.
@@x86VileR I think it is hard wired to 512k from memory, shame would be nice to see it running on real hardware but that's the only vintage PC I have from a bundle of stuff.
I don't think most people can appreciate just how slow and minimalistic a stock IBM PC is unless they've had to program one. Congratulations to the team on an outstanding achievement.
yeah, this 4.77MHz $20,000 computer is almost as good as a 1MHz $595 computer from same era (commodore 64)!
The C64 was a fun, one-off game machine but the PC was meant for business. Making this demo all that more impressive.
@@dschmenk Didn't you record 8088 MPH on a Compaq Portable? I'd love to see how it handles Area 5150!
@@Scalibq Finally got my CGA to HDMI converter. Here is the result: ruclips.net/video/_kUhYLsa7no/видео.html
imagine having to go back to running normal CGA games with normal PC squeaker blip blops after witnessing this demo.
Holy shit. If someone had figured out how to do this while CGA was still relevant it would've changed the course of history as far as games support on the PC went.
Why is this possible now but we didn't figure out how to do it when it was relevant?
@@daniel.... people have found a TON of optimizations recently that would have been super hard to find back then. One of the earliest "super optimizations" I can remember was Quake's "magic" fast inverse square root algorithm in 1996.
@@daniel.... It's interesting to me because I had an 8 bit machine that used a similar MC6845 CRTC as IBMs CGA.
My guess as to what held back wider adoption of these sorts of hacks is that the lack of raster interrupts means that the code has to be tuned for each graphics chipset, motherboard chipset and CPU combination.
It might be possible with a whole lot of resources to store predefined timings to cover all the popular prebuilt machines, and subject the riff-raff to a wait while some very precise timings are made before the code can be "reassembled".
It wouldn't, and couldn't be a simple matter of reconfiguration, as a lot of the tricks in these demos rely on using the exact amount of time it took to perform the preceding instructions to ensure that the timing of the current instruction is correct in relation to the position of the CRT beam.
You would need some means of shuffling the instructions around like a deck of cards
to get the timings correct for each chipset, but unlike a shuffled deck of cards, you would always need to end up with the suits in order.
It's a tricky enough problem that it doesn't surprise me that there are few commercial applications that do CRTC hacking, but it's still baffling to me that there wasn't a 'scene' specifically for the very popular IBM 5150 + CGA combo or Tandy's CGA variant.
@@muenstercheese wasn't that on Quake 3 instead?
it was @@DanielMonteiroNit
Honestly why is everyone ignoring the sound? This is the fucking speaker. Only way I can see that working is a straight DMA to the timer chip while another timer controls the DMA just to get all this smooth video.
The 6850 also gives you insane control over the video and was designed with the idea that you could "add on" to it. Not that anyone did. Tech just moved to fast:P
You can play samples through the PC speaker using timed interrupts to send a series of frequencies that normally sets the pitch, but will actually ramp the voltage, similar to how samples are done with the C64 these days.
@@rakido7388 And that has a REALLY high overhead. IIRC Windows 3.1 could play 2 seconds on my 386 with 4 MB RAM. Doing this on a PC-XT in realtime, even if the screen was completely blank, is impressive.
If you ever had the pleasure of having to produce nice graphics on CGA, you can appreciate this art.
It's a masterpiece.
This is just magical to a kid who was stuck gaming on CGA 8088 into the 90s.
Same.
Holy god you guys. There's racing the beam, and there's riding it like a rented mule. I was not expecting anything more to be wrung out of the PC after 8088 MPH.
Imagine what these guys could do with a 486 dx2 66… extremely impressive.
this is running on a nearly 5MHz processor, not 66MHz
There's no way you can do this with 8088 and CGA. I kept thinking this through the whole demo. Massive props for making the seemingly impossible actually possible.
Check out Adrian's Digital Basement II. He actually ran it on old CGA Card from the early 1980s and this demo looked just like this, colors and all. I suspect that the programmers figured out exploits on the card somehow to access undocumented modes or line by line mode switches to enable drawing with more colors. ruclips.net/video/0WMTYZ60OvE/видео.html
A good demo looks like magic. When I saw the graphics appear, I thought "no big deal, he's switching modes in the middle of a frame. All that takes is good timing."
And then the text appeared next to the graphics. I gasped out loud.
I was already floored by 8088mph, this is just on another level.
Good on y'all for pushing every last drop out of this PC.
holy shit.. i was a really big fan of 8088mph how am i just seeing this??
more people need to see this. this is insane beyond words
as i was watching this i said "If this a game had done this while I was a kid, I would have crapped my pants"
The ending part is just awesome. Figure you traveled back in time to the early 80s and showed this.
the soundtrack goes so fucking hard. had this on repeat all weekend ❤
I swear these guys are the Booze Design of the IBM PC world.
This demo is so unbelievably awesome. I've already waxed poetic on Jim's video, but I feel I need to say it here too - congratulations on a very well deserved win. Truly the pinnacle of the IBM PC platform.
Wow. It wasn't until watching this version that I realized that the vertical photo scroll is actually scrolling one pixel at a time, with no visible artifacting showing off any of the tricks! Can't wait for the floppy version to be available to try it out on my 5150!
We're working on it :) And yes, this sort of detail is exactly why 60fps footage is worth it.
@@x86VileR Yea, speaking of having good footage to show the details of the effects... What bothers me about this capture is that the video window is too large. So the actual CGA screen is now 'letterboxed' inside the total video window. This does not give the correct experience of overscan (which is supposed to go 'over the eges' of the entire visible area of a CRT. Now it looks like there's still a border, just one that remains boringly black.
@@Scalibq That extra letterboxing was added in post-processing to get around youtube's lossy 4:2:0 chroma subsampling. I did a bunch of experiments with CGA footage on YT, and I noticed that chroma errors tend to pile up and make highly detailed/dithered areas look like a mess, especially when they're moving around quickly (as in the rotating gears, twister, parallax, etc.). If the 240 scanlines are scaled up to the full 1080p or 2160p, you get a vertical scale factor of 4.5 or 9 respectively. That didn't look very good: at YT's 4:2:0 the chroma is sampled only every other scanline, so you need an even integer factor to eliminate those subsampling artifacts.
With the padding, the scale factor becomes x4 at 1080p, or x8 at 2160p (4K), and that's why the image looks as faithful as it does. But even if we ignored the chroma problem, I guess a non-letterboxed capture still wouldn't reflect the "CRT experience" 100%, because it shows more overscan than the CRT does. I've been looking at ways to get decent CRT footage of this demo without the common video camera artifacts, so we'll see :)
@@x86VileR But what happens if you use a non-standard resolution? Video containers aren't limited to 1080p, 2160p etc, so you could just pick the integer resolution you need. Not sure how YT handles that, but I know they have an 'original' setting for certain videos, where they play it in the original format.
Aside from that I think the proper way to solve the mismatching resolution with this demo is to take the capture, remove the letterboxing, and run it through an actual CRT postprocessing-filter, and fill the 'letterbox area' up by taking a 5153 and using that as a border, projecting the captured video inside its CRT area?
I suppose for people who want the 'clean sharp' look of a digital pixel capture, you could forgo the CRT postprocessing, and just use the 5153 to 'frame' the demo instead of a random black area.
@@Scalibq Hm, I don't remember seeing that "original" setting in a while... but it's probably still worth it to optimize for common resolutions like 1080p, otherwise there's still some scaling done on the player's side (and it's often gamma-incorrect.. which isn't very good for CGA-type dithering either).
I did think about taking the captured video and running it through something like FFcrt to simulate the effect closely... might do that at some point, but it'll be fun to see if I can get some good footage out of the actual 5153 first.
I've been watching this over and over for the past few weeks, and somehow I keep coming back. It's one hell of a demo.
demoscene has a new king
Really well done.... pushing the hardware to it's absolute limit! 👍
This is most efficient use of assembly I've ever seen on this machine ...
Holy moly, what an audiovisual treat! And it's all on the 8088. Incredible!
This is freaking unbelievable, as someone who's first PC was an XT at 9,56Mhz I am mind blown this ran not only at 4.50Mhz but also CGA, not to mention by the end I found myself thinking, wait is this the PC speaker? Oh damn bhoy!
Had heard wave audio from the PC speaker before, even on my own first PC, but the audio quality by end of this demo is like, how the heck did you manage this much sampling rate?
The credits section modplayer is all Reenigne's work - it plays 1 sample per scanline (15.7KHz), and part of what makes it possible is that the music data is single-track so there's no software mixing. I expect that there will be a full write-up about it after we release the final version!
@@x86VileR Just insane how he/you managed to do it with such audio quality while the dynamic image runs in background.
Really great! Can't wait to read the explanations.
I think it's mostly based on the "ANSI from Hell" technique which is cited in the article detailing the tricks in 8088 MPH.
@@vnules yes, that's the basis for most of the video modes used here, although they're heavily customized (for things like 60Hz fluid motion, graphics in the overscan area, text/graphics split-screen).
The demo uses color cells, similar to the C64. A shame it probably takes a lot of resources from the cpu.
Unbelievable. Wow.
holy shit it's squirrel monkey
Some very impressive stuff here. Some of the things here are amazing on a computer with such a slow CPU without help from a blitter.
This is insane! what black magic is this!
“So, your new video game console has tile graphics, a programmable sound generator, and a DPCM channel? Hold my registers.”
Very nice! Runs fairly well on my NuXT with an ATi Wonder Graphics Solution (which is fairly CGA compatible), but hangs after the blue ball rolling scene (which also bugs).
The ATI GS/Small Wonder video chipsets do have a few issues... but the hang sounds like it might be due to the FE2010A (which replaces some discrete Intel peripheral ICs in the NuXT) - that one didn't play nice with 8088 MPH either. Still, nice to know it gets that far!
@@x86VileR Yes, I was pleasantly surprised :)
True computer effect's is very nice and speed screen change with wave music in demo - more cool for view.👏🎞⌨😯😇
Absolute mayhem! Kudo's and respect guys, amazing work.
That's just AWESOME. Nice prod. Really really nice.
Thanks! (Now where is your new Atari ST stuff hiding at?? I haven't seen any in a while) :)
@@x86VileR I didn't done anything for a while, trying to, but no time at all! I have to put my arms out of my but and draw something nice. But.. Job, family, house,...
How? How? HOOOOWWW?
What kind of witchcraft is this!?
One of the best demos I watched in recent years. 👏👏👏
Dang, this some premium pixel pr0n! Amazing stuff!
And all that on the first PC. 🤯❤
Yes, this demo breaks your emulator hahahaha
Question is, i have a Tandy 1000 with a V20 upgrade, will it run on there? o.o
If you have the free RAM then some parts might actually run, others might go by way too fast (like that crystal ball scrolltext), and one or two parts like the end credits won't work at all. But even the parts that do run won't look right (for one, the T1000s have different character fonts, and a lot of the graphics depend on that.)
I appreciate the detail in the description 👍
I wasn't aware the PC speaker could produce so many channels of audio...
It can't- 1 channel only. You can mix them down, but cTrix's music during the end credits was composed as single-channel specifically for the purpose.
@@x86VileR did you guys do some sort of dithering trickery at the end credits to get the audio to have multiple frequencies, hence the huge frequency spike around 16KHz? So facinating!
@@reedmayhew18 that peak in the frequency spectrum is the PWM carrier wave - reenigne's player outputs one sample per scanline, so the playback is synchronized with the CGA's horizontal refresh rate (~15.7 kHz).
it feels weird to hear the music and sfx without the reverb of the room
This is pure insanity! Absolutely incredible
I love how this brings 8088 emulators to their knees
The best CGA Graphics I have ever seen. I think some of them rivaled EGA or early VGA! It is clearly drawing with more colors than CGA originally was designed for (4-colors in graphics mode and 16 colors in text mode). Is this done with scanline swaps, by exploiting the ASCII Art text mode characters into custom ones, or does the CGA hardware have extra modes that were not documented, or ?
For those who want to really know: It's 640x200 16 color text mode, but it starts on a new line every other (or every) scanline depending on the part of the demo. Which means only the topmost line(s) of every character is ever actually shown. That way while it doesn't allow adressing each individual pixel with any color (thus why things like the marble in the marble madness homage has weird fuzz around it), you can still pass it off as "graphics" with clever artistry.
THESE PEOPLE ARE AMAZING!!!!!!!!!!!!!!!!!!1
Awesome 😮
Wow, awesome work!
This is insane!
Outstanding.
This is truly majestic.
Just insane.
Awesome! To think that today's infinitely faster computers struggle with running MS Teams...
Very Impressive
This really is brilliant
honestly, i have no words. i wonder how much more you could push a cga card from 1981
These guys must be doing things with the MC6845 that would make even the guys at Motorola who designed the thing go WOW.
Yeah that was fun! Thx
Awesome, guys. Congratulations.
I tried run this demo on DosBox-X but I got trash graphics. The first images appear doubled and just messed up.
I'll try make it work.
After watching this video, I can tell that you guys are wizards and witchcraft.
Oh My God!
How the credits music was made with ONLY The PC Speaker??????
Ear warning at 8:27 haha
OMG! This is really awesome! I wonder how many of those effect could be done on c64 :)
Amazing!
How the f*ck?! Amazing.
super good!
unbelievable 👀
Insane!
Nice one!
What the hell!!! How did you this from a CGA?! Also sound is a masterpiece
I am going to run this on MY real hardware 8088 RGB CGA! :) The old demo "8088MPH" requers composite, and my CGA card is a clone and I have no capable TV of displaying composite CGA in color., so I hope this demo will be colorful on my CGA monitor :)
Nice! Interested to know how the clone board handles it.
@@x86VileR I tried it , but did not make a video yet. It is a bit glitchy and in some effects the dithering effect do not work so it shows less colors on the screen. Also the last water reflection effect do not work at all. The machines shows black screen and hangs
amazing in many ways!
Very impressive!
no way... is it an april fool? 😲and the ending music also by speaker?😲😲
This released in August...
amazing demo, can't wait to see what the finished version looks like
i wonder, how's it possible to play such high quality audio through 1 square wave channel?
The technique used in the credits section relies on PWM (pulse-width modulation), combined with the fact that the physical speaker cone doesn't go between its minimum and maximum positions instantly - it takes a certain amount of time, so switching states fast enough can get you levels in between. IIRC someone once worked out the effective bitrate to something around 6 bits. In this case, it's synchronized to the horizontal refresh rate so you get one sample per scanline - a rate of 15.7KHz.
@@x86VileR wow
this is fucking amazing !
Holy s**t!! Wow!
I tested it on an 8088 laptop with a CGA card (from: Ali Express). How do the graphics in a high resolution work? Is that text mode with a modified character set?
IIRC, the IBM CGA’s character set is set in ROM, which mean it is unable to be customized in any way.
What they’re doing is tricking the CGA to only display two lines of each character, thus simulating 640x200 at 16 Colors.
(Love your vids, btw!)
@@pixelcrunch300 Thank you and thank you!
I know this demo was made for RGBI, but I wonder how it looks on composite. If it even works at all.
Probably might look very ugly, but I still wonder if it'd work.
Impressive but fully understandable nothing like this appeared in 1980s: the cost and diversity of the PC hardware...
Wait, what did I just see?
I... I don't... understand... losing... mind...
1. WOW. Boundless respect.
2. Does anyone know if there are any MiSTer cores that can fully run this?
3. Does anyone know if there are any CGA-to-VGA or CGA-to-HDMI conversion solutions that can stomach this?
I've heard that some work is being done on the MiSTer PC/XT core but I wouldn't really expect anything substantially different from software emulators (happy to be proven wrong of course).
And yes, RGB2HDMI handles it just fine - that's how this video was recorded (more details in the description).
Yes, you can build yourself a TTL to Analog cable which you can do with some resistors attached to the intensity pin and each of the components, then you plug that to an OSSC, and it works perfectly. There is also a specific device, LGR talks about it here: ruclips.net/video/9SII7ujB3FY/видео.html
CGA has only 16K Vram, 320x200 @ 16 Color requires 32000 bytes, 640x200 even more.... how can be possible? How the demo achieved split screens that require video sync accuracy?
Those VRAM limit calculations only apply when every pixel is addressable. A lot of the extra color tricks are actually based on heavily modified text modes, where VRAM is laid out in character/attribute byte pairs, so the limits are different (look up "ansi from hell"). The split screens are created by synchronizing the code with the raster beam, and reprogramming the CGA and MC6845 at particular scanlines, so modes/colors/video start addresses can be modified in mid-frame.
More info (and source code?) will come when we release the final and improved version :)
CGA is 4 colors from a pallet of 16.
Not in textmode (or composite for that matter)
Next step: dual-monitor MDA/CGA.
That's something worth exploring: Using a hacked text mode to get graphics on an MDA (non-Hercules). Some people did something similar on the Commodore PET (which is also text mode with fixed character sets).
is the RGB2HDMI doing some of the work to display at colour depth and resolution. Does this work without the RGB2HDMI hardware? if so very impressive guys. If not still well done . Amazing demo.
Thanks! The RGB2HDMI just provides a way to convert the CGA signal for a modern display (or a video capture device in this case). It won't add anything that wasn't already present in the video signal - if you have a monitor with direct RGBI CGA input it's absolutely not needed.
There are various videos on RUclips that record what it looks like on an actual CGA monitor.
Great demo. Any plans to publish the source code?
Yes - we're working on an improved final version, and we plan to include the source when it's out. No ETA yet but maybe a couple of months...
Is there a walkthrough of how this is done? Or is it all trade secrets?
No trade secrets, we just want to complete a final version before we spill the beans (we'll also put the source out there). Hopefully soon...
Can any of these tricks be generalised / made into general purpose? Of course I want this turned into a (newer) Windows CGA display driver. Maybe it would even work it you could match a CGA video card to a (bit more) modern CPU.
Just made a video of this running inside UniPCemu. It's running for the most part (8088MPH seems to crash on the credits again with the changed CPU/CGA timing improvements required for this demo). It's still a WIP though (ruclips.net/video/kOoG0Orvk_M/видео.html).
Did they use monotone or a different music tracker? Because i sort of want to make pc speaker music
Shiru composed his part using his own custom VST plugin, in Reaper I think. Monotone is still a good choice, although it updates at 60 Hz (compared to the 120 Hz in this tune).
@@x86VileR Do you think shiru's PCSPE VSTi is easier than monotone & furnace tracker
@@JasperTedVidalTale it is sure easier, because it is not a tracker. The key feature it provides is the easy means to a create pseudo polyphony, i.e. overlay different parts with different priorities. In other words, you write your song as a multichannel one, with different tracks for different parts, and using the priority system you can overlay them to produce a monophonic stream. To my knowledge, there are no trackers designed to do this at the moment. With Monotone or Furnace you have to write a monophonic song with all monophonic parts all by hand.
@@shiru8bit Yay thanks for the info
I need to fix my Toshiba T3100SX just so I can run this on it
Even MartyPC pukes at points with this demo. 86Box is even worse and currently seeing a potential rewrite if the IBM PC code.
How was the PC Speaker audio captured?
The good old-fashioned alligator clip method :-) Ran it into a DAC so that I could adjust the input volume so that nothing clipped.
How do you get 16 colours out of CGA??
With a very hacked-up text mode. Games like Round 42 or Paku Paku got their low-res 16-color 'mode' with a similar trick: they only ever used a single character for their "pixels", but here we're using the entire charset. RUclips doesn't like links in comments, but you can look up "ansi from hell" or "the Macrocom Method".
(and if 16 is impressive, check out "8088 MPH" which does a little more) ;-)
@@x86VileR ohh so you've got some kind of mapping for the best character to use to represent what pixels you want to show, that explains the artifacting around the ball in the marble madness example, I wondered about that!
Ahh 8088 mph, I had seen that before, I have an even greater appreciation for it now I know a bit more about what's going on!
What song was used in the credits? I would love to use it in a DJ set.
That was made to order, a 1-channel module by cTrix, so you'd have to check with him (ctrix dot net).
@@x86VileR How do i contact him?
update: i got the song :3
Would this demo work on an Atari PC1?
I'd say no - the onboard video is EGA, and a dedicated CGA board would need some kind of ISA expansion (and a way to disable the onboard EGA controller). If the PC1's RAM is upgraded to 640K, it /might/ be able to run most of the demo by setting the onboard controller to CGA mode, but I wouldn't really get my hopes up.
@@x86VileR I think it is hard wired to 512k from memory, shame would be nice to see it running on real hardware but that's the only vintage PC I have from a bundle of stuff.
😲
Text Mode doesn't work this way (trust me, I have tried)
But how!? 😅
How??
What kind of sourcery is this?!?