Digital joystick - analog interface

So, I have an Atari type digital joystick
Its pins are: up, down, left, fight, trigger, +5, GND.
Moving the joystick shorts one or two of these pins to the ground.
To not waste P2 pins I reused my robot battery voltage measuring object:
' ADC driver for a robot
' v.0.02 - 20220110
' pik33@o2.pl
' MIT License
var
long aresult
long adcpina
long agnd
long avcc
long bresult
long adcpinb
long bgnd
long bvcc
pub start(apin,bpin) :cog |iii, m, n
adcpina:=apin
adcpinb:=bpin
cog:=coginit(16,@mixer,@aresult)
waitms(100)
return cog
pub measure() :vx,vy
return 33000*(aresult-agnd)/(avcc-agnd), 33000*(bresult-bgnd)/(bvcc-bgnd)
DAT
org
mixer setq #7
rdlong aaresult,ptra
fltl aapin
wrpin adc_config1, aapin
wxpin #%00_1101, aapin
dirh aapin
fltl abpin
wrpin adc_config1, abpin
wxpin #%00_1101, abpin
dirh abpin
mov x, #%001<<6
add x,aapin
setse1 x
loop waitse1
rdpin x,aapin
rdpin x,abpin
waitse1
rdpin x,aapin
rdpin x,abpin
waitse1
rdpin gnda,aapin
rdpin gndb,abpin
wrpin adc_config2, aapin
wrpin adc_config2, abpin
waitse1
rdpin x,aapin
rdpin x,abpin
waitse1
rdpin x,aapin
rdpin x,abpin
waitse1
rdpin vcca,aapin
rdpin vccb,abpin
wrpin adc_config3, aapin
wrpin adc_config3, abpin
waitse1
rdpin x,aapin
rdpin x,abpin
waitse1
rdpin x,aapin
rdpin x,abpin
waitse1
rdpin aaresult,aapin
rdpin abresult,abpin
wrpin adc_config1, aapin
wrpin adc_config1, abpin
setq #7
wrlong aaresult,ptra
jmp #loop 'loop
adc_config1 long %0000_0000_000_100000_0000000_00_11000_0 ' 100000 gnd
adc_config2 long %0000_0000_000_100001_0000000_00_11000_0 ' 100001 3v3
adc_config3 long %0000_0000_000_100011_0000000_00_11000_0 ' 100011 pin
x long 0
Then I connected pins via resistors.
- up - 1k
- down - 2k
- left - 4k
- right - 8k
The other ends of these resistors were connected to the P2 pin and also, via 8k resistor, to +3v3 (instead of +5)
I also connected +3v3 via 10k resistor to the trigger - not necessary, the P2 can do a pullup itself, but I want a "clear" thing not dependent on pin settings.
Then I had to write a test program:
#include "retromachine.bi"
dim adc as class using "adccog.spin2"
dim x,y,dir as ulong
dim dirt$ as string
startmachine
startvideo
adc.start(16,17)
v.setmode(0)
v.cls(154,147)
do
x,y=adc.measure()
if x<3090 then dir=5 :dirt$="Up-left"
if x>=3090 andalso x<3350 then dir=9 :dirt$= "Up-right "
if x>=3350 andalso x<4000 then dir=1:dirt$= "Up "
if x>=4000 andalso x<4900 then dir=6:dirt$= "Down-left "
if x>=4900 andalso x<6000 then dir=10:dirt$= "Down-right"
if x>=6000 andalso x<8000 then dir=2:dirt$= "Down "
if x>=8000 andalso x<12000 then dir=4:dirt$= "Left "
if x>=12000 andalso x<20000 then dir=8:dirt$="Right "
if x>=20000 then dir=0 : dirt$= "None "
if y<16000 then pinhi(56)
if y>=16000 then pinlo(56)
position 1,10: v.write(v.inttostr2(x,8)): position 20,10: v.write(dirt$): position 40,10: v.write(v.inttostr2(y,8))
loop
to discover that the joystick needs servicing (up contact was bad) but after that, the contraption works. 2 pins used instead of 5
The next retro task: connect an analog PC joystick which I also have.