Log inRegister an accountBrowse CSDbHelp & documentationFacts & StatisticsThe forumsAvailable RSS-feeds on CSDbSupport CSDb Commodore 64 Scene Database
You are not logged in - nap
CSDb User Forums


Forums > CSDb Entries > Release id #252090 : Signal Carnival
2025-04-23 00:13
Krill

Registered: Apr 2002
Posts: 3083
Release id #252090 : Signal Carnival

Quote:
The highest frequency the chip can output is 3906Hz, which is the equivalent of changing the video output every four rasterlines.
Similar with ADSR, for which the smallest possible configurable attack time is 2 ms, so about 32 rasterlines.

But thankfully, there's also circuitry that is wired more directly and and gives instant output: the volume register ($d418)!
This has been used in the past to generate samples at high frequencies (16+ khz), and is a good choice for generating video, as well.
I was surprised that there isn't even a mention of pulse-width modulation. Did that turn out to be entirely unusable for the purposes of this demo?

Quote:
Talking about GCR decoding, I found it tedious to handcode the decoding tables, so we instead wrote a solver that generates them given the code that uses the tables, and the desired input/output.
Interesting! I wrote a couple of those GCR table Tetris generators/solvers as well, but all of them were rather special purpose, and most of them went nowhere. Never saw any obvious route of how them make them somewhat generic.

Also, i see more adds than shifts in the read+decode loop. Could it be you applied something like i outlined in Bitwise GCR decoding based on reordered GCR mappings and such?
2025-04-23 04:03
Quiss

Registered: Nov 2016
Posts: 52
Quote:

I was surprised that there isn't even a mention of pulse-width modulation. Did that turn out to be entirely unusable for the purposes of this demo?


Waveforms as a whole turned out to not be very useful for video. For starters, every waveform triggers negative voltages, but video out is supposed to be between +0V and ~+1V.
But even ignoring that, whatever pattern you generate using pulse widths, filters etc., would still only repeat every 4 lines, since that's the highest frequency you get.

Quote:

Also, i see more adds than shifts in the read+decode loop. Could it be you applied something like i outlined in Bitwise GCR decoding based on reordered GCR mappings and such?


Ooh, interesting thread, thanks for the link!

I use something very similar, but my GCR values are simply sorted by value:

0 -> 01001
1 -> 01010
2 -> 01011
3 -> 01101
4 -> 01110
5 -> 01111
6 -> 10010
7 -> 10011
8 -> 10101
9 -> 10110
A -> 10111
B -> 11001
C -> 11010
D -> 11011
E -> 11101
F -> 11110


With this, for some combinations (like read-1-bit-then-4-bits or read-3-bits-then-2-bits) the table lookups become separable.
2025-04-23 19:38
Quiss

Registered: Nov 2016
Posts: 52
Actually, after re-reading your post, I see that the mapping you generate your tree from is sorted, as well. And seperable at an arbitrary bit boundary!

Checksumming remains an open problem?

And a holy grail would be to on-the-fly checksum while being able to write anywhere.
(I have one partial solution, but it requires 8ish tables, and the checksum would be based on the reordered GCR, so can't be matched against the one at the end of the sector.)
2025-04-24 11:16
Krill

Registered: Apr 2002
Posts: 3083
Quoting Quiss
Waveforms as a whole turned out to not be very useful for video. For starters, every waveform triggers negative voltages, but video out is supposed to be between +0V and ~+1V.
Okay, so you're using $d418 "samples" to force a DC bias in the output stage (with enabled filters to "digifix" because 8580) and thus get rid of negative voltages? (Are the volume levels restricted to >= 8 then?)
And wouldn't this work _on top_ of waveforms, too? (How is that "plasma" on the X-rotator done?)

Quoting Quiss
But even ignoring that, whatever pattern you generate using pulse widths, filters etc., would still only repeat every 4 lines, since that's the highest frequency you get.
I was thinking of pulse-width modulation, as in having the CPU change square wave pulse width or duty cycles at high frequency - PWM samples at 7.8 KHz (2 lines) or higher have been done, ofc.

Quoting Quiss
With this, for some combinations (like read-1-bit-then-4-bits or read-3-bits-then-2-bits) the table lookups become separable.
Yes, those are GCR partitions discussed further down in that thread, 1:4 and 3:2 in this case. But will continue this discussion over there. =)

Quoting Quiss
And a holy grail would be to on-the-fly checksum while being able to write anywhere.
Which benefits does the 1 KB block buffer in Signal Carnival's custom loader give?
Reading the next block that happens to roll by while a previously cached one is still waiting to be downloaded by the C-64?
2025-04-24 22:34
Burglar

Registered: Dec 2004
Posts: 1137
would it be possible to drive the video with 2 sids so u get color too?
2025-04-24 22:57
chatGPZ

Registered: Dec 2001
Posts: 11510
C64 isnt fast enough for that, for color you need to frequency-modulate a 4.4somethingMHz signal. Its barely fast enough to produce those bars in b/w :)
2025-04-25 01:27
Quiss

Registered: Nov 2016
Posts: 52
Quote:

Okay, so you're using $d418 "samples" to force a DC bias in the output stage


Exactly. Rectangle waveform, pulse width of 0. All three voices.
Volume 0 then gives me +0V, and volume 15 ~ +0.6V.

Voltage of volumes 0-7 is so low that they trigger h/v syncs. So indeed I only use volume 8-15.

Quote:

And wouldn't this work _on top_ of waveforms, too?


You could have one voice do a waveform, and the other two pull the signal into the positive voltage range.

One thing I didn't get around to is a "loading" part (e.g. the black screen at 2:07 is a bit too long for my taste).
I don't bitbang the video signal during loading. But it would have been feasible to set up some kind of waveform (at the start of each frame) that draws some basic rasterlines. Maybe just a scrolling triangle wave, or some such thing.

Quote:

(How is that "plasma" on the X-rotator done?)


It's all bitbanged. On every rasterline, I alternate writes of $0f and $08-$0f (depending on brightness) at different cycles. Here's a frame of the non-blurred version:

http://www.quiss.org/files/tsbar.png

Quote:

I was thinking of pulse-width modulation, as in having the CPU change square wave pulse width or duty cycles at high frequency - PWM samples at 7.8 KHz (2 lines) or higher have been done, ofc.


You can do that. You'd want to restart the waveform (set and reset the test bit) at the start of every rasterline, and that would then give you the ability to have the hardware change the voltage in the middle of the line, with the transition point determined by the pulse width.
You wouldn't be able to control the two voltages independently.
So not sure this would offer any benefits compared with the "brute force" solution: Write $d418, wait k cycles, write $d418, wait n-k cycles.

Quote:

Which benefits does the 1 KB block buffer in Signal Carnival's custom loader give?


I don't (pre)load while parts are running, I only load in between parts. So it helps if the drive has already something ready to be transferred by the time the C64 triggers loading. Some of the smaller parts (like the plasma) actually completely fit into 1kb. I always transfer exactly 256 bytes per frame, so that'll mean four frames of transfer, and then decrunching.

For the larger parts, the numbers I pulled say that for many parts, 1 kb buffer makes for shorter loading times than 0.75kb, as well. But since the loading times are heavily influenced by where on the track we happen to be at the start of loading and after track changes, those numbers are to be taken with a grain of salt.
2025-04-26 20:47
TheRyk

Registered: Mar 2009
Posts: 2466
I was also too lazy as of yet and a little too coward to try it here on real CRT. Now I read:
Quoting 'Jammer in Comments'
User Comment
Submitted by Jammer [PM] on 26 April 2025
I can only warn that Bitfunx Retroscaler doesn't like it and I probably fucked it for good but that's on me xD

My idea was using an old real CRT monitor (would not risk my very best Trinitron but a small studio JVS).
What do the hardware gurus say...
a) Can do no harm
or
b) Don't try this at home

@Jammer: Would be interesting if you did hotplugging or turned off power before you toasted your hardeare
2025-04-27 02:50
chatGPZ

Registered: Dec 2001
Posts: 11510
It shouldn't be a problem for either - as long as the voltages are within range (and they are) and the frequencies too (they are) there is no problem at all.
2025-04-27 07:47
Krill

Registered: Apr 2002
Posts: 3083
Quoting chatGPZ
It shouldn't be a problem for either - as long as the voltages are within range (and they are) and the frequencies too (they are) there is no problem at all.
I'd turn off the monitor if there's no picture to be seen for a certain time.

Some monitors really don't like to be syncless for extended periods of time. (Should be in the minutes to maybe hours range, but still.)
2025-04-27 11:53
tlr

Registered: Sep 2003
Posts: 1807
Quoting TheRyk
I was also too lazy as of yet and a little too coward to try it here on real CRT. Now I read:
Quoting 'Jammer in Comments'
User Comment
Submitted by Jammer [PM] on 26 April 2025
I can only warn that Bitfunx Retroscaler doesn't like it and I probably fucked it for good but that's on me xD

My idea was using an old real CRT monitor (would not risk my very best Trinitron but a small studio JVS).
What do the hardware gurus say...
a) Can do no harm
or
b) Don't try this at home

@Jammer: Would be interesting if you did hotplugging or turned off power before you toasted your hardeare

If anything, I'd be scared of breaking the SID if hot plugging the audio output into a monitor. The RCA plugs are quite evil in the sense that the ground gets connected last when hot plugging them.
 
... 3 posts hidden. Click here to view all posts....
 
Previous - 1 | 2 - Next
RefreshSubscribe to this thread:

You need to be logged in to post in the forum.

Search the forum:
Search   for   in  
All times are CET.
Search CSDb
Advanced
Users Online
Guests online: 280
Top Demos
1 Next Level  (9.7)
2 13:37  (9.7)
3 Codeboys & Endians  (9.7)
4 Mojo  (9.6)
5 Coma Light 13  (9.6)
6 Edge of Disgrace  (9.6)
7 Signal Carnival  (9.6)
8 Uncensored  (9.5)
9 Wonderland XIV  (9.5)
10 No Bounds  (9.5)
Top onefile Demos
1 Nine  (9.7)
2 Layers  (9.6)
3 Cubic Dream  (9.6)
4 Party Elk 2  (9.6)
5 Copper Booze  (9.5)
6 Scan and Spin  (9.5)
7 Onscreen 5k  (9.5)
8 Grey  (9.5)
9 Dawnfall V1.1  (9.5)
10 Rainbow Connection  (9.5)
Top Groups
1 Artline Designs  (9.3)
2 Booze Design  (9.3)
3 Oxyron  (9.3)
4 Performers  (9.3)
5 Censor Design  (9.3)
Top NTSC-Fixers
1 Pudwerx  (10)
2 Stormbringer  (9.7)
3 Fungus  (9.6)
4 Booze  (9.5)
5 Grim Reaper  (9.3)

Home - Disclaimer
Copyright © No Name 2001-2025
Page generated in: 0.056 sec.