Page 7 of 11

Re: OricExos - making the impossible

Posted: Mon Feb 18, 2019 2:42 pm
by ibisum
I want this so bad it hurts. Lets turn this system into a multi-timbral polyphonic synthesiser! :)

Re: OricExos - making the impossible

Posted: Mon Feb 18, 2019 5:43 pm
by Dbug
Maybe it should just be put in a transparent case, with some blinking things :)
orac.jpg

Re: OricExos - making the impossible

Posted: Mon Feb 18, 2019 7:33 pm
by iss
Dbug wrote: Mon Feb 18, 2019 5:43 pm... а transparent case, with some blinking things
Yep, just like Blake's Orac :).
Dbug wrote: Mon Feb 18, 2019 8:07 am So, two questions:
- What did you finally came up with for the soundchips: Mono, Stereo (and if Stereo, how is it split?)
- What are the video mixing algorithms you have implemented
All 4 sound output are "as is" - standalone without mixing. The 4 speakers will be attached with wires and proper connectors to every board (next to the purple/white wires which connect the master reset button on the picture). If anyone has an idea for something better - now is the right time to share it :).

BTW, I need (but can't find so far) a sample sound in MYM player compatible format with 4*3 = 12 channels. The idea is to split them in 4 streams and test how the simultaneous playback will work.

The video mixer has two modes:
- direct connection:
= every Oric draws 1/4 of the screen (hm, quadrant or band - which will be faster for update?) with all known limitations;
= available are 5 levels per color i.e. theoretically 5*5*5 = 125 different colors but not all combination are possible;
- R-2R ladder: 16 levels per color or 16*16*16=4096 total colors but not all combination are possible.

Re: OricExos - making the impossible

Posted: Mon Feb 18, 2019 7:53 pm
by Dbug
iss wrote: Mon Feb 18, 2019 7:33 pm All 4 sound output are "as is" - standalone without mixing. The 4 speakers will be attached with wires and proper connectors to every board (next to the purple/white wires which connect the master reset button on the picture). If anyone has an idea for something better - now is the right time to share it :).
The only important thing is to not split the channels of any of the YM to do stereo per chip: That would make it difficult to replay sample sounds.

Imo, there are two valid/easy to use setups:
- 4 chips outputs mixed together to get 12 channels mono
- 2 chips mixed together to get 6 channels mono + 1 chip on the left + 1 chip of the right
iss wrote: Mon Feb 18, 2019 7:33 pm BTW, I need (but can't find so far) a sample sound in MYM player compatible format with 4*3 = 12 channels. The idea is to split them in 4 streams and test how the simultaneous playback will work.
My idea was to try to extend Fabrice's mini2ym player to use 12 channels, it's gives a large number of music to try, because there are not so many YM musics using more than 2 YM chips.
iss wrote: Mon Feb 18, 2019 7:33 pm The video mixer has two modes:
- direct connection:
= every Oric draws 1/4 of the screen (hm, quadrant or band - which will be faster for update?) with all known limitations;
= available are 5 levels per color i.e. theoretically 5*5*5 = 125 different colors but not all combination are possible;
- R-2R ladder: 16 levels per color or 16*16*16=4096 total colors but not all combination are possible.
Do you have some pseudo-code formula to describe the mix?

Something like that:

Direct Connect:
- Ro = RI0 or RI1 or RI2 or RI3
- Go = GI0 or GI1 or GI2 or GI3
- Bo = BI0 or BI1 or BI2 or BI3

Ladder:
- Ro = RI0 + RI1/2 + RI2/3 + RI3/4
- Go = GI0 + GI1/2 + GI2/3 + GI3/4
- Bo = BI0 + BI1/2 + BI2/3 + BI3/4

(With O=Output, I=Input, 0-3 computer number)

Re: OricExos - making the impossible

Posted: Mon Feb 18, 2019 8:58 pm
by iss
For the audio - it's OK, both options are easy but what type of connectors do you need, so I can prepare them?

I think the pseudo-code formulas to describe the mix are:
Direct connect:
- Fast mode:
Ro = RI0 or RI1 or RI2 or RI3
Go = GI0 or GI1 or GI2 or GI3
Bo = BI0 or BI1 or BI2 or BI3

- Low color mode:
- Ro = 1/4*RI0 + 1/4*RI1 + 1/4*RI2 + 1/4*RI3
- Go = 1/4*GI0 + 1/4*GI1 + 1/4*GI2 + 1/4*GI3
- Bo = 1/4*BI0 + 1/4*BI1 + 1/4*BI2 + 1/4*BI3

High color mix (ladder):
- Ro = 1/2*RI0 + 1/4*RI1 + 1/8*RI2 + 1/16*RI3
- Go = 1/2*GI0 + 1/4*GI1 + 1/8*GI2 + 1/16*GI3
- Bo = 1/2*BI0 + 1/4*BI1 + 1/8*BI2 + 1/16*BI3

i.e. Xo = 8/16*XI0 + 4/16*XI1 + 2/16*XI2 + 1/16*XI3 or the value varies from 0/16 to 15/16 with step 1/16 ;).

Re: OricExos - making the impossible

Posted: Mon Feb 18, 2019 9:21 pm
by Dbug
iss wrote: Mon Feb 18, 2019 8:58 pm For the audio - it's OK, both options are easy but what type of connectors do you need, so I can prepare them?
The ideal would just be a standard stereo female headphone jack, can easily connect that to my videocapture card or audio input on my speakers.
iss wrote: Mon Feb 18, 2019 8:58 pm I think the pseudo-code formulas to describe the mix are:
Direct connect:
- Fast mode:
Ro = RI0 or RI1 or RI2 or RI3
Go = GI0 or GI1 or GI2 or GI3
Bo = BI0 or BI1 or BI2 or BI3

- Low color mode:
- Ro = 1/4*RI0 + 1/4*RI1 + 1/4*RI2 + 1/4*RI3
- Go = 1/4*GI0 + 1/4*GI1 + 1/4*GI2 + 1/4*GI3
- Bo = 1/4*BI0 + 1/4*BI1 + 1/4*BI2 + 1/4*BI3

High color mix (ladder):
- Ro = 1/2*RI0 + 1/4*RI1 + 1/8*RI2 + 1/16*RI3
- Go = 1/2*GI0 + 1/4*GI1 + 1/8*GI2 + 1/16*GI3
- Bo = 1/2*BI0 + 1/4*BI1 + 1/8*BI2 + 1/16*BI3

i.e. Xo = 8/16*XI0 + 4/16*XI1 + 2/16*XI2 + 1/16*XI3 or the value varies from 0/16 to 15/16 with step 1/16 ;).
Ok, and how do you switch from one mode to the other, how many cycles does that take, can I change every line, multiple time per scanline, etc... without generating snow or effects like that? Or should that be just on a per-frame thing?

Re: OricExos - making the impossible

Posted: Mon Feb 18, 2019 10:01 pm
by iss
Dbug wrote: Mon Feb 18, 2019 9:21 pm Ok, and how do you switch from one mode to the other, how many cycles does that take, can I change every line, multiple time per scanline, etc... without generating snow or effects like that? Or should that be just on a per-frame thing?
Ha-ha, this starts to be crazy even for me ;)

WIP source here: 'oricexos.s'

In short:

Code: Select all

;--------------------------
extadr    =   $380
;--------------------------
; hold the extension status
; extadr + bit 0 - ram/rom switch
; extadr + bit 1 - on/off pp buffer
; extadr + bit 2 - in/out pp buffer
; extadr + bit 3 - mixer switch
OR:

Code: Select all


                          ram/rom       pp buffer     pp buffer direction    mixer A/B
        STA $380 -          rom               off           out              A (direct) <--- default status after RESET
        STA $381 -          ram               off           out              A (direct)
        STA $382 -          rom               on            out              A (direct)
        STA $383 -          ram               on            out              A (direct)
        STA $384 -          rom               off           in               A (direct)
        STA $385 -          ram               off           in               A (direct)
        STA $386 -          rom               on            in               A (direct)
        STA $387 -          ram               on            in               A (direct)
        STA $388 -          rom               off           out              B (ladder)
        STA $389 -          ram               off           out              B (ladder)
        STA $38A -          rom               on            out              B (ladder)
        STA $38B -          ram               on            out              B (ladder)
        STA $38C -          rom               off           in               B (ladder)
        STA $38D -          ram               off           in               B (ladder)
        STA $38E -          rom               on            in               B (ladder)
        STA $38F -          ram               on            in               B (ladder)
Important is the WRITE operation, the value in register A doesn't matter (can be any).
The change is immediate and can be done at any time - simply the mixer has nothing in common with ULAs.
About the 'snow effect' - I don't know but I believe it will not happen ... :)

Re: OricExos - making the impossible

Posted: Mon Feb 18, 2019 11:37 pm
by Chema
Dbug wrote: Mon Feb 18, 2019 5:43 pm Maybe it should just be put in a transparent case, with some blinking things :)

orac.jpg
:lol: That would be nice!

Re: OricExos - making the impossible

Posted: Tue Feb 19, 2019 1:06 am
by NekoNoNiaow
Ahahah, this is fantastic work @ISS!
Keep up the effort, I cannot wait to see what can be produced with such a monster setup. ;)

Re: OricExos - making the impossible

Posted: Tue Feb 19, 2019 8:37 am
by Dbug
iss wrote: Mon Feb 18, 2019 10:01 pm ; extadr + bit 0 - ram/rom switch
; extadr + bit 1 - on/off pp buffer
; extadr + bit 2 - in/out pp buffer
; extadr + bit 3 - mixer switch
Important is the WRITE operation, the value in register A doesn't matter (can be any).
The change is immediate and can be done at any time - simply the mixer has nothing in common with ULAs.
Ok, that's actually cool, it's as fast as it can be, and does not require any register, which means that technically one could generate code that does special effects, inserting the right page 3 access to trigger the various effects.

You may have to explain what the "pp buffer" is and how it works, I guess it's what you spoke about, some way to use some of the screen content of one machine to mask out something, or is it something else?

Re: OricExos - making the impossible

Posted: Tue Feb 19, 2019 11:01 am
by iss
"pp buffer" is the additional Parallel Port buffering on the extension board.
It's a standard 74LS245 chip i.e. 8-bit bidirectional buffer with 3 states output and is connected to VIAs port A.
This allows PSG programming AND high-speed 8-bit bidirectional Parallel Port communication between master and slaves. :)

Re: OricExos - making the impossible

Posted: Tue Feb 19, 2019 6:40 pm
by Dbug
Regarding the music, there are two known midi players, midipsg from Fabrice (but I could not find the sources), and another one from Wasky which replays the Game of Throne music and comes with the sources: https://github.com/DJChloe/got

Spectrum coders have a bunch of converters as well (midi2ay, mid2asm, ...) on this page http://www.worldofspectrum.org/utilities.html just not sure which ones could actually be extended to support 4 chips.

Now of course, the MIDI standard is not that complicated, and I could just bite the bullet and write a converter and player that tries to actually replay things that sound like piano, violin and drums, but it's not a weekend project :D

Re: OricExos - making the impossible

Posted: Tue Feb 19, 2019 8:25 pm
by ibisum
All 4 sound output are "as is" - standalone without mixing. The 4 speakers will be attached with wires and proper connectors to every board (next to the purple/white wires which connect the master reset button on the picture). If anyone has an idea for something better - now is the right time to share it :).
Ermmm.. this may be a stupid suggestion, but what about adding a mixer to the setup for the audio channels? I built one of these recently, its quite decent for the task:

https://syntherjack.net/portable-audio-mixer/

Re: OricExos - making the impossible

Posted: Tue Feb 19, 2019 9:05 pm
by Dbug
ibisum wrote: Tue Feb 19, 2019 8:25 pm
All 4 sound output are "as is" - standalone without mixing. The 4 speakers will be attached with wires and proper connectors to every board (next to the purple/white wires which connect the master reset button on the picture). If anyone has an idea for something better - now is the right time to share it :).
Ermmm.. this may be a stupid suggestion, but what about adding a mixer to the setup for the audio channels? I built one of these recently, its quite decent for the task:
https://syntherjack.net/portable-audio-mixer/
There are no stupid questions, so I have one myself: How would you use the mixer?

I can see how having a user selectable global volume would be useful, but a user selectable mixing would be a headache for the programmer, a bit like on PC back in the day when you had to implement "reverse stereo" in programs because the Left/Right channels were not standardized.

Allowing to alter the level of stereo mixing would also mean it would be very difficult to make sure musics or sound effects are sounding how you want them to sound.

That being said, a hard coded setup, with for example 25% of the right channel going to the left channel, and 25% of the left channel going to the right, could allow for more natural sounding music (not like the horrible full separation audio of the Amiga).

The one important thing is to make sure that the relative voltage of the channels is predictable, because things like sample sound replay is based on volume tables that take in consideration the voltage. If you change these, your nice samples become noisy.

Re: OricExos - making the impossible

Posted: Tue Feb 19, 2019 9:28 pm
by Chema
Dbug wrote: Tue Feb 19, 2019 9:05 pmnot like the horrible full separation audio of the Amiga
I know a few who would hang you for this comment :lol: