Recreation of STNICCC-2000 demo for the BBC Micro.
Released at the Revision 2020 demoparty winning 1st place in the Old Skool Demo compo.
Links:
Port of STNICCC-2000 for the BBC Micro.
Home Page: https://bitshifters.github.io/posts/prods/bs-beeb-niccc.html
License: MIT License
Recreation of STNICCC-2000 demo for the BBC Micro.
Released at the Revision 2020 demoparty winning 1st place in the Old Skool Demo compo.
Links:
Timing is too tight and specific to Master.
We'll want credits at the end for the folks involved.
Plus thanks / greets as ever.
Currently hard coded to slot #4.
When you're calling the main plot function ~1 million times across the sequence, every extra cycle adds up...
Wait until code has finished (and turn off _DEBUG define).
Can't read from &FE30 - need to read from &F4 instead!
Ensure no random crashes - ask folks to test on real Model B hw.
Ensure runs through on b-em.
I've almost certainly broken the B version whilst focusing on Master model only for party version.
Demo is supposed to loop but currently doesn't.
Figure we should just leave looping on by default, user can press BREAK.
We'll almost certainly want some kind of intro at the start to call out the specs of the machine:
BBC w/ 32K RAM (+16K? for music)
No VIC, no blitter etc.
Real floppy discs
2MHz 6502 CPU
Oh and a Bitshifters logo somewhere as well, I'm sure. :)
It would be possible to make a custom NULA version that runs in MODE 8 but with full 16 colour palette. Not sure what to do about the resolution though as 64x100 is going to look super-chunky.
There might be some optimisations to be made since we wouldn't require the dithering pattern for the palette?
In MQ the exact same scanline is duplicated for the second (odd) line by running the plot routine twice with the same palette byte. It shouldn't be that hard to increment the palette lookup so the second line is using the correct palette byte for the odd scanline. This would increase the apparent resolution and might be virtually indistinguishable from HQ.
Works fine on Master (emulated and real hw).
Doesn't use any Master CPU specific instructions so not sure what's going on here!
Only time this is vaguely useful is when the demo is left on loop at Acorn World and I'm going nuts from hearing the tunes for the 100x.
For the determined completist with only one disk drive: a version that has a disk swap message, waiting for a keypress, so you can still see the whole thing.
Some versions of the demo have a clock (minutes:seconds:frames) either during the whole thing or at the end to indicate the speed. Perhaps not a great idea considering this is hardly the fastest version (!!) but might be of interest to some.
Noticed that the Xmas demo looked way worse on real hw than on any of the emulators.
Want this to be as good as possible!
The original colour palette and dither patterns were a lucky guess + MODE 5 defaults!
Need to have a look at the palette data in the stream to see if it is worth redefining the palette at various points in the sequence. How much can be pre-baked?
What dither patterns actually look best with the selected palette colour values?
What dither patterns should be used for the medium / low quality settings as these can turn into a pixellated mess quite easily?
There's a bit of the bitshifters symbol left on screen, at least in b2. Is this something that can be fixed easily enough?
Worth a few runs adjusting the TImer 1 value as low as we can get away with to minimise the overal frame rate but not starve the disk streaming code.
Thought I'd done this already but at the moment only the X values in the de-interleaved indexed vertex data has been pre-divided by 2.
Integrate most recent / optimised music player (is this from Wave Runner or use Simon's LZ compressor?)
Pick awesome music, ideally an SN version of ChechnoBankh if we can..
Once we believe there's no more juice to squeeze out of the code, final optimisation would be to directly inline the plot_span function into plot_poly_span and maybe even inline plot_poly_span into parse_frame.
This would remove the 6c JMP/JMP overhead per fn call which is considerable across the entire sequence. It will, however, make the code very hard to read / maintain.
Halving both the horizontal and vertical vertex coordinates can leave some degenerate (single point) polys which aren’t handled very well. End up with a two pixel dash on the edge of a line because the span buffer isn’t set correctly. Need to filter these out in quality modes < high.
Last time I tried, streaming didn't work on my B with a recent version of MMFS. Possible regression in MMFS for OSWORD &7F implementation as had problems getting Bad Apple to run as well and sure this was OK previously.
Might need to implement the same disc speed test as Bad Apple and change streaming to sector-by-sector load rather than track-by-track as the latter caused stuttering / slowdown on Bad Apple.
The batch files a quality=1 NuLA build, which looks pretty nice. The makefile build creates a quality=0 NuLA build, because then the demo finishes before the music, rather than the other way around.
4b481dc adds a delay to the NuLA version so the quality=0 version runs in the same time as the non-NuLA version, so it finishes in time with the music. (Haven't tried this on real hardware, though... just b2.)
The quality=0 build does look a bit dim, of course, which might be objectionable. So perhaps we want quality=1 after all, get rid of the delay, avoid the temptation to re-open #25, and just live with the music finishing early?
Since setting up 4x individual SSD images in the correct drives could be a challenge for some users, it would be nice to create a BEEB.MMB image that contains the 4x disk images in the correct order and autoboot.
Details of the MMB format can be found here: https://sweh.spuddy.org/Beeb/mmb_utils.html
I done broken the NULA version for the party version. Sorry.
Need to do another pass on ST palette => BBC dither mapping.
The start and end of the sequence look good but the middle parts turn into a bit of a pixellated mess.
Try using more contrasting dither patterns - fewer middle values, push to extremes (either almost empty or almost filled).
Are there any occasions when it is possible to mix up the colours a bit to make it more solid?
Hate the green/yellow combination of the boring pentagonal tunnel. Can we swap one of the colours for something else? Even if the palette switch is obvious? (Need yellow for the blue tunnel later on and using green as come out of a very green tunnel beforehand). Perhaps cyan would be better?
Must be abusing some RAM - check Xmas demo for how to fix this.
Would almost certainly benefit from a custom short span plot routine also.
At the moment we're just issuing a VDU MODE call which looks messy.
Demo just crashes at the end of drive 0 but works fine for Tom on his real floppy hw. Can't hear the head seeking back to the start of drive 2 so not sure what's going on here.
Works fine on DataCentre under DTRAP.
Screen is currently top left - should centre this with CRTC reg values.
Can’t quite complete the sequence - crash on frame &653 when swapping to final disc. Our stream read ptr catches the load to ptr. It’s running too fast!!
Select low / medium / high quality
Select loop? (For ABUG type events)
Confirm SWRAM usage for music?
Select music on/off?
Must also work without input for online emulator.
Bit hard to fix this one as we're changing the vsync position and vdisplayed. Might have to fade to black not white to remove it.
How to install / run on floppy + DataCentre + MMC type solution.
Given that the demo is across 4x SSD images some less technical folks might find this problematic to get running on real hw.
Ask John nicely if he has time to make a new one for this demo.
See http://www.pouet.net/prod.php?which=85252#c887275
Had a brief skim through some other Revision entries and it doesn't look like anybody else has bothered...
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.