OricExos - making the impossible

Want to discuss about Demos on the Oric, here you are !
User avatar
ibisum
Wing Commander
Posts: 1131
Joined: Fri Apr 03, 2009 8:56 am

Re: OricExos - making the impossible

Post by ibisum » Mon Feb 18, 2019 2:42 pm

I want this so bad it hurts. Lets turn this system into a multi-timbral polyphonic synthesiser! :)

User avatar
Dbug
Site Admin
Posts: 3049
Joined: Fri Jan 06, 2006 10:00 pm
Location: Oslo, Norway
Contact:

Re: OricExos - making the impossible

Post by Dbug » Mon Feb 18, 2019 5:43 pm

Maybe it should just be put in a transparent case, with some blinking things :)
orac.jpg

User avatar
iss
Squad Leader
Posts: 916
Joined: Sat Apr 03, 2010 5:43 pm
Location: Bulgaria
Contact:

Re: OricExos - making the impossible

Post by iss » Mon Feb 18, 2019 7:33 pm

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.

User avatar
Dbug
Site Admin
Posts: 3049
Joined: Fri Jan 06, 2006 10:00 pm
Location: Oslo, Norway
Contact:

Re: OricExos - making the impossible

Post by Dbug » Mon Feb 18, 2019 7:53 pm

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)

User avatar
iss
Squad Leader
Posts: 916
Joined: Sat Apr 03, 2010 5:43 pm
Location: Bulgaria
Contact:

Re: OricExos - making the impossible

Post by iss » 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?

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 ;).

User avatar
Dbug
Site Admin
Posts: 3049
Joined: Fri Jan 06, 2006 10:00 pm
Location: Oslo, Norway
Contact:

Re: OricExos - making the impossible

Post by Dbug » Mon Feb 18, 2019 9:21 pm

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?

User avatar
iss
Squad Leader
Posts: 916
Joined: Sat Apr 03, 2010 5:43 pm
Location: Bulgaria
Contact:

Re: OricExos - making the impossible

Post by iss » Mon Feb 18, 2019 10:01 pm

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 ... :)

User avatar
Chema
Game master
Posts: 2509
Joined: Tue Jan 17, 2006 10:55 am
Location: Gijón, SPAIN
Contact:

Re: OricExos - making the impossible

Post by Chema » Mon Feb 18, 2019 11:37 pm

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!

User avatar
NekoNoNiaow
Flight Lieutenant
Posts: 272
Joined: Sun Jan 15, 2006 10:08 pm
Location: Montreal, Canadia

Re: OricExos - making the impossible

Post by NekoNoNiaow » Tue Feb 19, 2019 1:06 am

Ahahah, this is fantastic work @ISS!
Keep up the effort, I cannot wait to see what can be produced with such a monster setup. ;)

User avatar
Dbug
Site Admin
Posts: 3049
Joined: Fri Jan 06, 2006 10:00 pm
Location: Oslo, Norway
Contact:

Re: OricExos - making the impossible

Post by Dbug » Tue Feb 19, 2019 8:37 am

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?

User avatar
iss
Squad Leader
Posts: 916
Joined: Sat Apr 03, 2010 5:43 pm
Location: Bulgaria
Contact:

Re: OricExos - making the impossible

Post by iss » Tue Feb 19, 2019 11:01 am

"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. :)

User avatar
Dbug
Site Admin
Posts: 3049
Joined: Fri Jan 06, 2006 10:00 pm
Location: Oslo, Norway
Contact:

Re: OricExos - making the impossible

Post by Dbug » Tue Feb 19, 2019 6:40 pm

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

User avatar
ibisum
Wing Commander
Posts: 1131
Joined: Fri Apr 03, 2009 8:56 am

Re: OricExos - making the impossible

Post by ibisum » 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/

User avatar
Dbug
Site Admin
Posts: 3049
Joined: Fri Jan 06, 2006 10:00 pm
Location: Oslo, Norway
Contact:

Re: OricExos - making the impossible

Post by Dbug » Tue Feb 19, 2019 9:05 pm

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.

User avatar
Chema
Game master
Posts: 2509
Joined: Tue Jan 17, 2006 10:55 am
Location: Gijón, SPAIN
Contact:

Re: OricExos - making the impossible

Post by Chema » Tue Feb 19, 2019 9:28 pm

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

Post Reply