| |
Hermit
Registered: May 2008 Posts: 208 |
Proposal for 2SID hardware-compatibility
I'm fiddling with 2SID hardware solution right now, and got an idea for a most suitable address for the 2nd SID, which could be compatible with almost all hardware solutions (except $de00, $df00, but they're not good selection anyway due to conflicting with AR,TFR, etc. cartridges.)
In VICE it's easy to set 2nd SID base-address, but it's not the case with real C64.
There's a multiplexer circuitry, which uses one of the address lines between A5..A9 ($20..$200) beside the original $d400..$d7ff chip-select signal. The address-line is hardwired in most of the cases, and not easily selectable/switchable in the real machines.
(Btw. I could solve it by hardware to see 2nd SID both in $d420 and $d500 locations, by "OR"-ing A5 and A8 lines...)
I think using/preferring only base-address $D7E0 for 2nd SID in 2SID programs & music releases would ensure that any of the A5..A9 address lines could select the 2nd SID in the machines, similarly to an "OR" function...
(the address came from this simple calculation: $d400+$20+$40+$80+$100+$200 = $D7E0)
It's easier by software than by hardware.
And VICE's 2nd SID address can be set to $D7E0. If VICE emulates the hardware multiplexor, the $d420, $d500, etc. settings could be fine too in VICE, just as on real C64, all would call 2nd SID at $d7E0
I guess it's not hard to configure in SID-players too...
Just, because 2SIDs seem to get more popular and real machine is always better to compose & listen with :)
Maybe the issue, it's not forward-compatible with 3SID, 4SID, etc solutions.
A further improvement to this 'specification' could be to distinguish mono (6 channels) vs stereo (2x3 channels) SID tunes by the A6 or A7 ($40 or $80) address lines, which seem rarely used for 2nd SID selection...
So in that case SID addresses could follow like this:
$d400..$d41f: 1st SID
$d7a0..$d7bf: 2nd SID, A6 ($40) low - line says "mono"
$d7e0..$d7ff: 2nd SID, A6 ($40) high - line says "stereo"
It was just a idea, i couldn't find this in the forum after some search, maybe it was mentioned before, maybe not... |
|
... 22 posts hidden. Click here to view all posts.... |
| |
tlr
Registered: Sep 2003 Posts: 1787 |
Quote: Quoting tlrI did a few changes to the binary as the edits indicate, when did you download it? (the changes were within a few minutes)
I downloaded it after both of the edits. If there's something funny with the hardware, maybe Tomi Malinen knows what's going on.
Nah, I'd rather analyze my program in detail first. It's more likely I made a bug than anything. We shouldn't trust emulators on things like this.
Having a schematic of the sid board would help though.
What I do (twice) for each test is set up a sawtooth like this:
$7f -> $xx12
$20 -> $xx0e
$20 -> $xx0f
$20 -> $xx12
then sample 3 values from $xx1b and verify that they are in the correct sequence.
After the two tests I do:
$00 -> $xx12.
In the test map you posted it detects every other sid which may indicate that running a new test after a working one always fails.
Any sid hacking guru that sees anything fatal here? |
| |
Zer0-X Account closed
Registered: Aug 2008 Posts: 78 |
Tested on my 6581 ($d400)/8580 (selectable) setup.
Chips at $d400, $d420, $d440, $d480, $d500 & $d600 were indentified correctly.
If I set both chips to $d400 it only detects the 6581, but that's because I've added logic to forbid reads from the 8580 if they're both at the same address. |
| |
tlr
Registered: Sep 2003 Posts: 1787 |
Cool! Could you post the sid map for some typical configuration so I can compare to the one Trurl posted? |
| |
Zer0-X Account closed
Registered: Aug 2008 Posts: 78 |
Not very surprising...
D400 11 11 11 11 11 11 11 11
D500 11 11 11 11 11 11 11 11
D600 11 11 11 11 11 11 11 11
D700 11 11 11 11 11 11 11 11
D400 11 20 11 20 11 20 11 20
D500 11 20 11 20 11 20 11 20
D600 11 20 11 20 11 20 11 20
D700 11 20 11 20 11 20 11 20
D400 11 11 20 20 11 11 20 20
D500 11 11 20 20 11 11 20 20
D600 11 11 20 20 11 11 20 20
D700 11 11 20 20 11 11 20 20
D400 11 11 11 11 20 20 20 20
D500 11 11 11 11 20 20 20 20
D600 11 11 11 11 20 20 20 20
D700 11 11 11 11 20 20 20 20
D400 11 11 11 11 11 11 11 11
D500 20 20 20 20 20 20 20 20
D600 11 11 11 11 11 11 11 11
D700 20 20 20 20 20 20 20 20
D400 11 11 11 11 11 11 11 11
D500 11 11 11 11 11 11 11 11
D600 20 20 20 20 20 20 20 20
D700 20 20 20 20 20 20 20 20 |
| |
tlr
Registered: Sep 2003 Posts: 1787 |
Thanks. Indeed expected. Looks like my little program is working after all.
I wonder what's up with Trurls config? Maybe it's just that read back is only allowed for A0=0 (SID1) and A0=1 (SID2)? |
| |
Zer0-X Account closed
Registered: Aug 2008 Posts: 78 |
I ordered couple of those DualSID boards that Trurl has. Will see what's up with them. |
| |
Zer0-X Account closed
Registered: Aug 2008 Posts: 78 |
2x8580 DualSID-card:
@$D400
D400 10 10 10 10 10 10 10 10
D500 10 10 10 10 10 10 10 10
D600 10 10 10 10 10 10 10 10
D700 10 10 10 10 10 10 10 10
DE00 -- -- -- -- -- -- -- --
DF00 -- -- -- -- -- -- -- --
@$D420
D400 10 20 10 20 10 20 10 20
D500 10 20 10 20 10 20 10 20
D600 10 20 10 20 10 20 10 20
D700 10 20 10 20 10 20 10 20
DE00 -- -- -- -- -- -- -- --
DF00 -- -- -- -- -- -- -- --
@$D500
D400 10 -- 10 -- 10 -- 10 --
D500 20 20 20 20 20 20 20 20
D600 10 -- 10 -- 10 -- 10 --
D700 20 20 20 20 20 20 20 20
DE00 -- -- -- -- -- -- -- --
DF00 -- -- -- -- -- -- -- --
@$DE00
D400 10 -- 10 -- 10 -- 10 --
D500 10 -- 10 -- 10 -- 10 --
D600 10 -- 10 -- 10 -- 10 --
D700 10 -- 10 -- 10 -- 10 --
DE00 20 20 20 20 20 20 20 20
DF00 -- -- -- -- -- -- -- --
@$DF00
D400 10 -- 10 -- 10 -- 10 --
D500 10 -- 10 -- 10 -- 10 --
D600 10 -- 10 -- 10 -- 10 --
D700 10 -- 10 -- 10 -- 10 --
DE00 -- -- -- -- -- -- -- --
DF00 20 20 20 20 20 20 20 20
While I had some trouble with the card initially (not hooking up the extra address-lines expecting both SIDs to still work at $D400) and looked how the address decoding was wired I noticed that under several settings the logic keeps SID1 disconnected when accessing it via certain addresses. |
| |
tlr
Registered: Sep 2003 Posts: 1787 |
A bit odd (and different than trurls) but detection seems to be working I guess. |
| |
chatGPZ
Registered: Dec 2001 Posts: 11350 |
and it shows that if your software uses the mirrors - its your fault =) |
| |
tlr
Registered: Sep 2003 Posts: 1787 |
Anything can happen when you add third party hardware modifications but sure if you want maximum compatibility, don't use mirrors. |
Previous - 1 | 2 | 3 | 4 - Next |