VOGONS


First post, by cyberluke

User metadata
Rank Member
Rank
Member

Hi, I have 10 joystics and 4 computers.

I found this issue with two of them.

In Dos, joycalib,exe works and you can see the min and max values.

In Windows, everytime I move the stick to upper top or left border, it displays this disconnected & retry popup. I hit cancel and it still normally works. I tried to disable polling as well.

Joystick is connected to ISA. Tried Pentium 200mhz mmx as well as K6-2 450mhz super socket 7 board. Ttied both creative and ESS ISA soundcards. This issue is reproducible on two computers with two different configurations and two different joystick manufacturers.

First one is: Logic3 PC Terminator (emulates CH and FCS - both modes do this)
Second one is: Firefox Competition Pro joystick (this one even includes custom Windows driver on floppy and still does this)

Is this CPU 200mhz too fast for that? Would some dedicated gameport specific ISA card work? I have seen one that can set slow/fast gameport speed.

Attachments

Reply 1 of 54, by cyberluke

User metadata
Rank Member
Rank
Member

In Windows game, it will disconnect and button is not working. When moving back to center with stick, it will be enabled again.

In DOS buttons are working all the time, even you put the stick at the edge. But I noticed that samples per second will fall from 700 to 80 only. This might answer the Windows issue. When the stick is at top or left edge (near x=0 or y=0), it will slow down the rate of the samples and Windows will tell me it is disconnected and at that time will ignore button pressed. While in DOS the same happens, but button press will still get counted.

Is there some Win 98 patch at gameport protocol level 😁 ?

Reply 2 of 54, by cyberluke

User metadata
Rank Member
Rank
Member

In Descent 1, DOS, it stops moving as well for left and top. Down and right are ok. And the first joystick is brand new - new old stock, so it is not hardware failure.

Reply 3 of 54, by Horun

User metadata
Rank l33t++
Rank
l33t++

If it only is those two joysticks out of the 10 then sounds like those two joysticks are going bad. Can you list the joysticks that do not have any issue ? Might help narrow the "why"...
added: is the one a "Honey Bee Competition Pro Firefox Joystick PC-800" ?

Hate posting a reply and then have to edit it because it made no sense 😁 First computer was an IBM 3270 workstation with CGA monitor. Stuff: https://archive.org/details/@horun

Reply 4 of 54, by cyberluke

User metadata
Rank Member
Rank
Member

Yes, it is the Honey Bee. I even bought Interact ISA board gameport controller for 2 joysticks with switch for Low / High bus speed for gameport. Only to realize that it cannot be used for 4 button joystick as one port support only 2 buttons per spec.

And I know Sidewinder gameport have this issue on a newer computer that you need to change the speed in Windows registry somewhere.

I can unpack & reinstall 486DX4 100MHz and try it there as well.

It seems something inside the joystick MCU, a specific implementation. Only when you go at top left corner, it will slow down the rate of samples or just stop sending - like bandwidth saving optimization. As a DIY guy, the only thing I could do is grab Teensy or Arduino, create some kind of custom Necroware adapter with Gameport IN and Gameport OUT. And for this specific case, I would write a custom code that when it reach TOP or LEFT (based on current calibration of course), then it will keep sending that position even original device is not sending this data. But buttons work. This hack would make it working, but it involes around 50 hours of work on weekends.

Working joysticks:
Quickshot QS-123 (2 button, 2 axis)
Genius, model J-2 (4 button, 2 axis)
Genius, model J-8
Quickshot QS-202 (Squadron Commander, includes DIN&PS/2 adapter for throttle control, fully programmable)
Thrustmaster Pro Flight Control System + Thrustmaster Mark II Weapons Control System (includes DIN&PS/2 adapter, fully programmable, throttle control)
Quickshot Avenger Pro
Quickshot Skyhawk
Microsoft Sidewinder 3d Pro (gameport)
CH Mach I
Gravis Advanced Analog Joystick

Last edited by cyberluke on 2022-08-17, 14:37. Edited 1 time in total.

Reply 5 of 54, by cyberluke

User metadata
Rank Member
Rank
Member

First I bought this Firefox 2nd hand. So I thought, the computer is too fast and maybe it is for 386 or 486 specific bus. But now I bought this Logic3, which is new from regular e-shop, they keep old stock and they still have like twenty of them. So it includes warranty and returns.

But this one has the same behavior and even includes CH and TM emulation, so I'm kinda lost why. It should control throttle using Hat, but I was unable to make it working in pure DOS and Descent 1 (Quickshot QS-202 works there).

Reply 7 of 54, by Jo22

User metadata
Rank l33t++
Rank
l33t++
cyberluke wrote on 2022-08-16, 22:25:

In Windows game, it will disconnect and button is not working. When moving back to center with stick, it will be enabled again.

The analogue gameport works a bit like this.
There are multiple 555 timer ICs (or one 558?) inside for the axis.

Depending on how fast their associated capacitors get charged/discharged,
the the values of the X/Y axes are made.

Now, inside the joystick, there are variable resistors installed in a simple matrix.
These variable resistors are wired through the joystick cable to the gameport controller in your PC.
Inside, they are wired to to the capacitors/tge NE558.

Now to the interesting bit:
These variable resistors, socalled potentiometers, have a specific value, a specific resistance, depending how far they are turned (how much the joystick is moved).

That value goes from 0 Ohms to a few Kilo Ohms.
Which is read by the gameport as 8-Bit values going from 0 to 255.
(The gameport is like a crude Analog/Digital Converter).

The problem, you see, is when the potentiometers are delivering a very low value.
To the gameport or Windows, it's as if the joystick isn't there.
If the joystick goes back to center, even if badly adjusted, it will produce a digital value somewhen between 70 to 200 (guessed), at least.

Edit: Just checked, the ideal center value should be 127/127.

Edit: And since the X/Y axes are defined by how quickly these capacitors are charged/dischared, there is a timing problem.

On very fast PCs with non-speed compensating gameports, the values cannot be read correctly.

The Pro Audiospectrum 16 was one of the earlier cards that were speed-compensated, I vaguely remember.

Simpler gamecards had a little knob on the back to manually adjust the speed.
Modern soundcards, of course, don't need that anymore.
So you're likely safe here.

Here's one vintage card with the knob attached to a cable.
http://www.cyberg8t.com/f2comp/prodacm.htm

Unfortunately, I can't find a picture with the card with a knob.
Best I could find was an ad of the "Gamecard III", which had a switch with three sensitivity (speed) settings. It's attached below.

Attachments

"Time, it seems, doesn't flow. For some it's fast, for some it's slow.
In what to one race is no time at all, another race can rise and fall..." - The Minstrel

//My video channel//

Reply 8 of 54, by cyberluke

User metadata
Rank Member
Rank
Member

Thank you very much for sharing your knowledge!

I bought this card, it contains switch for clock speed: https://www.worthpoint.com/worthopedia/quicks … stick-453920204

So I believed this card would be a solution for Pentium 1 processors. These joysticks probably need 486. On the other hand even Descent 1 & 2 might benefit from Pentium.

"On very fast PCs with non-speed compensating gameports, the values cannot be read correctly."

"Modern soundcards, of course, don't need that anymore.
So you're likely safe here."

But I do observe this problem on Creative Sound Blaster AWE64 ISA and ESS1868 ISA, even on Pentium I MMX - 200 MHz.

Perhaps these two joysticks have even slower discharge timing that it is not being compensated on these, as you say, newer, cards.

The issue with Joystick adapter mentioned above is that it has 2 gameport ports, therefore it will not work with FCS / CH flightstick clones or anything with 4 buttons.

Is there any ISA or PCI card with 1 gameport that would solve this?
Would replacing the capacitor be adequate solution for these corner cases?

Reply 9 of 54, by cyberluke

User metadata
Rank Member
Rank
Member

INTERACT High Speed PC GAME CARD - you can adjust speed from 4.77 MHz to 100 MHz....so that would be maximum for these very old joystics

Now I would be interested how to run it at 200 MHz

Reply 10 of 54, by cyberluke

User metadata
Rank Member
Rank
Member

- I have Bondwell B120 and the switch changes the number of samples in JOYCALIB.EXE DOS. So it does affect something and it might be a cure.
- ISA sound cards cannot do it. But this one is for two joysticks, so you cannot use 4 buttons or FCS clones

It would be interesting if Goldstar or Winbond ISA controller with gameport would help or if there would be some other solution.

Reply 11 of 54, by cyberluke

User metadata
Rank Member
Rank
Member

I made progress!!

Bondwell B-120 is the same as Quickshot QS-102 card. There is no driver, only Win95 readme. I am attaching manual here. It is non plug n play card, so you add it manually and need to change default resource from port 201 to the second configuration 200-207 (port range). Then it starts to work in Windows 98 SE. In DOS it works out of the box, of course.

Now the switch: FAST, MEDIUM, NORMAL.

With switch in position MEDIUM & NORMAL, there was still the issue.

Switch in position FAST fixes analog joystick behavior on faster PC and now it works flawlessly in DOS and Descent 1. In Windows all other normal joysticks work, but these two will say Not Connected all the time. But this card make it working in DOS, at least. Throttle (analog axis Y2) works, POV switch works. Thrustmaster & CH emulation works.

Even this card has two gameports, if you connect something like Sidewinder 3D Pro with custom protocol or anything with 4 buttons, it will work! That is good news. So this basically works as universal Y split cable and if you connect 1 joystick only it makes direct connection with all the pins and it is like you would not have any Y cable. On top of that, there is clock speed switch (3 positions), which will fix all joystick issues on faster processor (tested on 200 MHz MMX Pentium).

So this issue is verified.

@Jo22 Now the cons:
- it fixes joystick in DOS, but it does not work in Windows (for that you will need custom Gameport to USB controller)
- This issue you described that you say is fixed in all sound cards after Pro Audiospectrum 16 is NOT TRUE. This issue still exists and nobody in retrogaming fixed it or described it as us here. There is no soundcard and no Winbond/Goldstar ISA controller that would have any kind of jumpers to set Gameport speed or Address. There is only ENABLE/DISABLE gameport. I guess PCI soundcard with gameport will not have any magic that would fix it. There is no BIOS options that would affect that (tried changing 8-bit and 16-bit CLK value in BIOS from 2 cycles to 8 cycles). This card is 8-bit.

Attachments

  • Filename
    120win95.doc
    File size
    30.75 KiB
    Downloads
    57 downloads
    File comment
    Quickshot QS-120 manual
    File license
    Public domain

Reply 12 of 54, by rasz_pl

User metadata
Rank l33t
Rank
l33t
Jo22 wrote on 2022-08-17, 14:56:

There are multiple 555 timer ICs (or one 558?) inside for the axis.

Depending on how fast their associated capacitors get charged/discharged,
the the values of the X/Y axes are made.

Reason for readout getting slower at extreme joystick position https://en.wikipedia.org/wiki/Game_port#Hardware:
>Using original IBM formula, Time = 24.2 μs + 0.011 (r) μs[20] and assuming 100Kohm potentiometers this process can take up to 1.1ms per readout, or over 60ms if we decide to read joystick position 60 times a second. This significant overhead was the reason why using original Gameport on the PC could consume up to 10% of CPU time independent of CPU speed
https://www.freepatentsonline.com/5714981.html:
> it was typical for a system in which two joysticks were coupled to a single game port (e.g., by a Y connector) to require approximately 1.3 milliseconds per read, or about 1.3% of elapsed time at a read rate of 10 reads per second (since the CPU was effectively monopolized for each 1.3 millisecond period and could not be used to perform other tasks, without risking loss or inaccuracy of data).

Jo22 wrote on 2022-08-17, 14:56:

That value goes from 0 Ohms to a few Kilo Ohms.

100Kohm

Jo22 wrote on 2022-08-17, 14:56:

The problem, you see, is when the potentiometers are delivering a very low value.

low value would be 0 ohm
24.2 μs + 0.011 * 0 μs = 24us
that would not be a problem, it would read joystics in 0 position.
The problem here imo is bad potentiometers with breaks in the resistive layer resulting in infinite resistance.
cyberluke get a multimeter and measure resistance on bad joysticks in extreme positions, it should go to 0 and ~100Kohm.

>It seems something inside the joystick MCU

no such thing, just two "volume knobs" and up to four buttons, joysticks are really basic.

Open Source AT&T Globalyst/NCR/FIC 486-GAC-2 proprietary Cache Module reproduction

Reply 13 of 54, by Jo22

User metadata
Rank l33t++
Rank
l33t++

I see, makes sense, thanks for the information everyone !
It's been a while since I tinkered with gameport I/O.

If the potentiometers aren't broken, but just corroded/shorted, how about
cleaning them with WD40 and then turning them back/forth a few times?
What everer gets in the way to the grinder contact might get loose then, maybe?

"Time, it seems, doesn't flow. For some it's fast, for some it's slow.
In what to one race is no time at all, another race can rise and fall..." - The Minstrel

//My video channel//

Reply 16 of 54, by cyberluke

User metadata
Rank Member
Rank
Member

It is from Europe warehouse, boxed and sealed, stored in dry professional warehouse environment. Capacitor could age, but resistor? I'm not sure.

Anyway I measured this:
1) Button 1 can measure both voltage and resistance
2) Joystick 1 axis X - can measure only analog voltage (3V to 4.6V and 4.6V is the maximum voltage provided by the breadbord, so it does not say anything about the device itself). For resistance it cannot be measured no matter how you move with the stick (voltage does change), so I guess you cannot measure resistance directly like that, right? There would need to be some extra part on the breadboard (resistor or timer?).

Also JOYCALIB measures using software 8253 timer-based loop by default (description here: http://www.oldskool.org/pc/joycalib ) and there is parameter to measure using BIOS function 15,84 directly). I remember there was some TSR to force joystick operation using BIOS function 15,84 directly. Couldn't that help with these analog joystics? I guess they need some sort of timer loop in order to measure the resistance. Either using software or hardware. But in the end some TSR for port 201h could provide a fix.

Reply 17 of 54, by cyberluke

User metadata
Rank Member
Rank
Member

According to this: https://hackaday.io/project/170908-control-fr … t-basic-circuit ...the X and Y axes should be measured with the meter connected to +5V and X axis instead of GND and X axis (as for button), right? Otherwise it might require a pull up resistor present.

Reply 18 of 54, by rasz_pl

User metadata
Rank l33t
Rank
l33t

> For resistance it cannot be measured no matter how you move with the stick

? measure resistance between pins 9-11 9-13 1-3 1-6

Open Source AT&T Globalyst/NCR/FIC 486-GAC-2 proprietary Cache Module reproduction

Reply 19 of 54, by cyberluke

User metadata
Rank Member
Rank
Member
rasz_pl wrote on 2022-08-18, 10:31:

measure pure resistance, test values at extreme positions, compare with fully working joysticks

Ok, I verified it with Quickshot. Quickshot joystick works and will show resistance. So the issue is that the faulty joystics beeps with short circuit error and have infinite resistance. But it shows voltage change correctly.

Quickshot center is 59.2kOhm...minimum is 5 Ohm. Maximum is 135k Ohm.

Measuring pin 1-3 (Joystick 1 X axis and +5V)