News:

Printed Amstrad Addict magazine announced, check it out here!

Main Menu
avatar_mr_lou

4-player adapter? // MultiPlay MX4 Expansion

Started by mr_lou, 11:36, 29 June 15

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

andycadley

Quote from: TFM on 22:35, 06 July 15
Yes it is. And a nightmare in software.


The "Spare pin" solution keeps the regular two joystick compatible. But this solution makes all of them incompatible, since old games do not scan the CLK pin or what ever he likes to use.
The minute you have to do a hardware mod, it becomes a very niche solution. Lots of people are either unable, or unwilling, to start modifying there machines. Especially with rarer hardware like a 6128+.

It would be easier, if you wanted to go down that route, to use Fire 2 for that purpose. It would limit 4 player titles to a single fire button, but 8-bit machines got away with single fire for years just fine.

Although I suspect that if you really wanted to, you'd be better off ditching the idea that a four player adapter needs to work with existing games and come up with something more like the serial communication used by SNES pads.

Bryce

#101
Quote from: mr_lou on 05:32, 07 July 15
My personal favourite is still TotO's idea.

       
  • It's simple
  • supported from BASIC without using RSX
  • going to be compatible with other modern hardware
  • does not require any soldering or modification on the majority of machines.

I may have missed something, but how exactly is ToTOs device supported from BASIC?

@Gerald: Ok, it just seemed slow. My fading memory from back when I did the AMX Mouse adapter was that the port was read every 300ms or something similar.

Bryce.

Bryce.

Carnivius

Quote from: mr_lou on 06:50, 07 July 15

@Carnivac, I bought this now.
Amstrad CPC 464 664 6128 Two 2 x Joystick Game Port Y Adapter Cable | eBay
Says it's with diodes.


Oh cool.  So this probably gives 2 joysticks without any problems?  Great!   Now I just need a human friend to play the games with.  :)
Favorite CPC games: Count Duckula 3, Oh Mummy Returns, RoboCop Resurrection, Tankbusters Afterlife

mr_lou

Quote from: Bryce on 08:17, 07 July 15
I may have missed something, but how exactly is ToTOs device supported from BASIC?

Like this:

PRINT "Joystick A: ";INP(&F990)
PRINT "Joystick B: ";INP(&F991)

Bryce

Ah ok, I thought you were implying that the Joy command would work. Is there no similar method to read Geralds additional joysticks?

Bryce.

mr_lou

Quote from: Bryce on 09:57, 07 July 15
Ah ok, I thought you were implying that the Joy command would work. Is there no similar method to read Geralds additional joysticks?

I asked that question earlier in this thread, and gerald replied that it requires RSX to read his version from BASIC.

The question is how important it is to be readable from BASIC.
I liked that idea at first, but I have to admit that (to me) BASIC will never be able to offer the speed I want for a 4-player game.
So maybe it's irrelevant whether or not it's readable from BASIC.
I dunno.

In any case, I would just really like a solution that doesn't mess with the first 2 joysticks JOY(0) and JOY(1) so that existing games can be played using joysticks plugged into those two ports. The adapter should add 2 additional joystick ports, which requires special programming (e.g. INP(&F990)) to be read.

I think TotO's idea resembles what's seen on other platforms. But I don't feel I know enough about gerald's idea yet.

But I'd REALLY like to have an adapter in my hands soon, so my mates and me can play some 4-player games when we meet up in August.  :)

Bryce

The hardware might possibly be ready in August (although unlikely), but the games have to be written too! That's a very tight schedule!

4-way adapters on other systems are tied to a particular address because they usually use the user port which already has its address decoding done for it. If the CPC had this type of user port the hardware could be as simple as theirs.

Bryce.

mr_lou

Quote from: Bryce on 11:49, 07 July 15
The hardware might possibly be ready in August (although unlikely), but the games have to be written too! That's a very tight schedule!
Well I am mostly interested in us being able to play my own game. ;-)
But Megablasters and Quadraster sounds very interesting too of course.

Quote from: Bryce on 11:49, 07 July 15
4-way adapters on other systems are tied to a particular address because they usually use the user port which already has its address decoding done for it. If the CPC had this type of user port the hardware could be as simple as theirs.

I don't know about those things. To me, TotO's Multiplay resembles the C64 4-player adapter. They're both plugged in the back and offers 2 more joystick ports. Yay!
Is TotO's Multiplay a whole lot more complicated that the C64 4-player adapter?

Anyway, TotO is letting me either borrow or buy his prototype now. So hopefully we'll be playing some Amstrad CPC 4-player games in August now. :-) It'll be lots of fun, I can tell. :-D

arnoldemu

I gave mr.lou an updated arnold wip with multiplay emulated. Of course, without the actual hardware I can't say if the value of bit 6 and 7 are returned correctly.
I have followed all the info from ToTO and tested it in basic and against a test program and it works good.

My games. My Games
My website with coding examples: Unofficial Amstrad WWW Resource

arnoldemu

Quote from: gerald on 22:22, 06 July 15
It is not connected on the 6128/464plus either, but the keyboard connector provides an easy connection point
Doable, but tricky because of the power consideration.

We can also have a sync mechanism that assume that the joystick is scanned every frame.
- each time the line selection goes low, we toggle the joystick selection
- When the selection line is not low, we reset the toggle after a timeout (rc based)

So, if we scan the joysticks every frame (in fact it could be faster) we are sure we always start with the same joystick.
deselect/reselect the same line in a short time (faster than the timeout) and you get the other joystick.
Interesting. So you are relying on specific patterns or transitions on COM within a specific interval to select the joystick?

I have a question:

On CPC it is possible to set AY port A to output. In effect you can then output data through the joystick port.

I am assuming to do this you need to select line 9 (or 6; but preferably 9 because that will not clash with keys and potential keyboard membrane "fun"), set AY port to output and write values.

Now, on Plus, you will probably not be able to write to the directions because of the diodes?

So that leaves 2 fire bits open, they are not protected with diodes.
But the fire buttons are shared between 2 digital joysticks, 1 analogue joystick and the light gun.

(I just noticed the light gun has 2 fire buttons!!).

Could it help using fire buttons to select joysticks in some way?

The only other thing I can suggest, but I think you already suggested this?

Is to use the com signals as a bit pattern?

You would need to work on transitions perhaps, or some kind of specific timing.

Perhaps a transition on com0/com1 defines joystick?

so:

0,1 = reset (reads joy 0)
0,1,0 = joy 0
0,1,1,0 = joy 1 (now reads joy 1)

first 0 is line 9 selected,
then deselect line 9, device is reset (starts it's internal clock) and we can read joy 0 at any time com is 0.
Now compatible with normal games??

If we leave line selected, we now select joy 1.

We need one device on each joystick port and we have 2 joysticks.

The advantage here is that analogue and light gun should also work?

I am trying to think of a way where just com can be used.
My games. My Games
My website with coding examples: Unofficial Amstrad WWW Resource

mr_lou

I should probably mention that gerald is leaving / has left for vacation today, so he may not reply this thread for a while.
(But he might check from his phone of course because he miss us.  :) )

Bryce

The problem with using the second fire input is that some games might want to use Fire 2 within the game.

@mr_lou: The only real difference between the C64 solution and ToTOs solution is that the C64 has done the address decoding inside the C64, so the external hardware is minimal. On the CPC the address decoding needs to be done on the expansion.

Bryce.

mr_lou

Quote from: Bryce on 14:52, 07 July 15@mr_lou: The only real difference between the C64 solution and ToTOs solution is that the C64 has done the address decoding inside the C64, so the external hardware is minimal. On the CPC the address decoding needs to be done on the expansion.

Ok.
Looking at the price, there isn't much of a difference either.
The C64 4-player adapter costs 13.90 euro.
TotO said his Multiplay will be about 10 euro too.

So I gotta ask - and I don't mean this in any rude way: Why aren't we just going with TotO's version?
It sounds to me like TotO's Multiplay is a great solution, fast, simple, lots of advantages as far as I can see, most importantly: 2 existing ports aren't affected and no soldering is required. Usable from BASIC is an extra plus.

I admit I don't know enough about gerald's idea, and I don't understand 90% of all the tech talk going on about other ideas either, but as far as I can see a lot of the other ideas require soldering or affects the two existing ports in some way? Meaning IF these solutions are used, you'd have to connect/disconnect the adapter every time you wanted to play different games. (I.e. switching from a 4-player game to a 1-player game). Or have I misunderstood something?

arnoldemu

I don't know if gerald's solution requires the adaptor to be removed to play games that haven't been updated for it.

My understanding was that it shouldn't. I also believe that it requires special coding for the extra joysticks, same as ToTO's does, but instead of ToTO's i/o ports, you read them using modified joystick reading code.

I also think Gerald's device connects to the joystick port first, you then connect your joysticks to that, and the device controls the communication between computer/console and joysticks.
My games. My Games
My website with coding examples: Unofficial Amstrad WWW Resource

TFM

WoW! Lot's of posts, lot's of false- / mis-information!


I quit here, because I don't have the time to repeat thing 10000times. Please read the CPCWiki about keyboard-scanning (this _IS_ joystick-scanning!). Read about Mickeys and compatibility.


Then decide for the Bryce Solution with the "Spare" pin as selector to have a well solution. TotO's idea with two new ports is as good as. My 3 Pfennige here and I'm off...  ;)
TFM of FutureSoft
Also visit the CPC and Plus users favorite OS: FutureOS - The Revolution on CPC6128 and 6128Plus

KaosOverride

What I have understand from gerald's propose is an expansion card which mimics part of the PPI, like Piotr's PC keyboard adapter, and tries to detect which of the 10 selection lines is de Z80 trying to use. Then if one of the lines is from the joystick 1, 2 or the keyboard lines assigned to 3 and 4, it returns the value throught a cable to the real joystick port. I understand that there is no need to unplug for old games because joystick 1 and 2 is replicated correctly.

This gives us a card with 4 joystick IN ports, one OUT joystick port and the expansion port. This gives compatibility with keyboard scaning routines, because joysticks 3 and 4 acts as 2, keys from keyboard. Also I think this will be compatible with a GX-4000 using the same keyboard lines for joy 3 and 4, as COM2 signal at both joystick ports and the use of 2 CPC classic joystick splitters.

On the other hand ToTo's card offers 2 joy ports at 2 I/O address. We have to use new joystick routines for 3 and 4, but because PPI->PSG is not used, the routines are faster, hardware is more simple.

Both devices have pros and cons.  >:(
KaosOverride · GitHub
MEGA Amstrad Public Amstrad folder

andycadley

Quote from: TFM on 18:26, 07 July 15
Then decide for the Bryce Solution with the "Spare" pin as selector to have a well solution. TotO's idea with two new ports is as good as. My 3 Pfennige here and I'm off...  ;)

Neither of which will ever be viable on the GX4000, which is kind of the entire point. It would be nice to have a solution that works via the standard ports, without internal hardware modifications, so that it was as usable as possible.

mr_lou

#117
I trust the hardware gurus to decide which version to make. But I'll definitely vote against using that Spare because it requires soldering. And no, I won't send me hardware to you so you can solder for me.  :P

I've just re-read the entire thread again, and tried to sum up advantages and disadvantages for each idea so far.

Spot anything missing? Comment. Any idea on price for the two other ideas? Know of any other advantages / disadvantages?

 




TotO's Multiplay
Advantages Disadvantages

       
  • Fast
  • No soldering / modding required
  • Usable from BASIC using INP()
  • No clash with other joysticks nor keyboard
  • Price will only be about 10 euro

       
  • Not supported on the GX4000 due to lack of expansion port.
  • Requires purchase of proper Y-splitter with diodes for standard CPC's, in order for them not to clash with each other.




Gerald's idea
Advantages Disadvantages


       
  • No soldering / modding required
  • No clash with other joysticks

       
  • Not usable from BASIC (unless patching firmware).
  • Can clash with keyboard
  • Requires connection on both the joystick-port and expansion port.
  • Doesn't work on the GX4000 due to lack of expansion port.
Note: I'm not entirely sure about the "no soldering required". Gerald says he'll use "the non decoded lines 10 to 11" in the joystick port. Are we sure those two lines are connected on all machines?
He also said: "getting additional joystick state only require extending the current keyboard scan to 2 more lines.". Is this completely problem-free to do?





Bryce's idea
Advantages Disadvantages

       
  • Works on all CPCs including the GX4000
  • No soldering required

       
  • Slightly complex circuit, maybe slow? Maybe expensive?





TFM

Quote from: andycadley on 19:16, 07 July 15
Neither of which will ever be viable on the GX4000, which is kind of the entire point. It would be nice to have a solution that works via the standard ports, without internal hardware modifications, so that it was as usable as possible.


Ok, and now? There IS not game for the GX4000 supporting 4 joysticks and there will never be (imho).
TFM of FutureSoft
Also visit the CPC and Plus users favorite OS: FutureOS - The Revolution on CPC6128 and 6128Plus

mr_lou

Quote from: TFM on 19:35, 07 July 15
Ok, and now? There IS not game for the GX4000 supporting 4 joysticks and there will never be (imho).

If there is a 4-player adapter that'll work on the GX4000, there will of course be 4-player games for the GX4000, now that a ton of games are being converted to C4CPC.

TFM

Quote from: mr_lou on 19:38, 07 July 15
If there is a 4-player adapter that'll work on the GX4000, there will of course be 4-player games for the GX4000, now that a ton of games are being converted to C4CPC.


Conversions don't count.
TFM of FutureSoft
Also visit the CPC and Plus users favorite OS: FutureOS - The Revolution on CPC6128 and 6128Plus

Phi2x

#121
.

mr_lou

Quote from: phi2x on 19:43, 07 July 15
Bryce's idea: Only interest is compatibility with the GX4000, which doesn't have an expansion port that is needed for Gerald's and TotO's solutions. But it requires soldering. That isn't needed for Gerald's and TotO's solutions.

Gerald's idea: You have an hardware that needs to be connected BOTH to the expansion port AND the joystick port. Also, all the 4 joysticks need to be connected through that hardware. That's cumbersome and ugly.

TotO's multiplay: The 2 first joystick connections work as usual, with no clunky hardware in the middle. And joysticks 3 & 4 are shown as proper expansions of the system, as it was intented by Amstrad when they put an expansion port on the CPC.

Thanks! I've updated the table on previous page.
I did suspect the part about needing connecting on both expansion port and joystick port, but it wasn't clarified anywhere.

TFM

Quote from: phi2x on 19:43, 07 July 15
Bryce's idea: Only interest is compatibility with the GX4000, which doesn't have an expansion port that is needed for Gerald's and TotO's solutions. But it requires soldering. That isn't needed for Gerald's and TotO's solutions.

Soldering only for the GX4000 (and Plus-easy!)

Quote from: phi2x on 19:43, 07 July 15TotO's multiplay: The 2 first joystick connections work as usual, with no clunky hardware in the middle. And joysticks 3 & 4 are shown as proper expansions of the system, as it was intented by Amstrad when they put an expansion port on the CPC.


So no use with GX4000.
TFM of FutureSoft
Also visit the CPC and Plus users favorite OS: FutureOS - The Revolution on CPC6128 and 6128Plus

Bryce

My version doesn't require any soldering on any computer including the GX4000 if you do the detecting/multiplexing like Gerald suggested. The spare signal is then no longer needed and it works directly from the Joystick ports. The joystick scanning routines are probably a little bit more complicated though. Regarding plugging/unplugging for 2 player games: A simple switch on the device could disable the multiplexing and return the ports to the standard 2 stick config without having to remove the device.

Bryce.


Powered by SMFPacks Menu Editor Mod