Thanks to a suggestion from rfka1, I thought I'd try my hand at figuring out the Super Sketch on the c64.

It looks like it just reads the potentiometer inputs, so let's do some driver mangling to see what happens:



Code

add some member variables to hold an analog inputs


-               m_va15(1)
+               m_va15(1),
+m_test_joy1x(*this, "TEST_analog_joystick_1_x"),
+m_test_joy1y(*this, "TEST_analog_joystick_1_y")
+

+
+required_ioport m_test_joy1x,m_test_joy1y;
+
 };
 
 
add some defines for an analog input
 
+
+#define JOYSTICK_DELTA          80
+#define JOYSTICK_SENSITIVITY    50
+#define JOYSTICK_AUTOCENTER     80
+
+

+        PORT_START("TEST_analog_joystick_1_x")      /* Joystick 1 X Axis */
+        PORT_BIT( 0xff, 0x80, IPT_AD_STICK_X) PORT_NAME("TEST Joystick X")
+        PORT_SENSITIVITY(JOYSTICK_SENSITIVITY)
+        PORT_KEYDELTA(JOYSTICK_DELTA)
+        PORT_CENTERDELTA(JOYSTICK_AUTOCENTER)
+        PORT_MINMAX(0,0xff) PORT_PLAYER(1)
+        PORT_CODE_DEC(KEYCODE_4_PAD)    PORT_CODE_INC(KEYCODE_6_PAD)
+        PORT_CODE_DEC(JOYCODE_X_LEFT_SWITCH)    PORT_CODE_INC(JOYCODE_X_RIGHT_SWITCH)
+
+        PORT_START("TEST_analog_joystick_1_y")      /* Joystick 1 Y Axis */
+        PORT_BIT( 0xff, 0x80, IPT_AD_STICK_Y) PORT_NAME("TEST Joystick Y")
+        PORT_SENSITIVITY(JOYSTICK_SENSITIVITY)
+        PORT_KEYDELTA(JOYSTICK_DELTA)
+        PORT_CENTERDELTA(JOYSTICK_AUTOCENTER)
+        PORT_MINMAX(0,0xff) PORT_PLAYER(1)
+        PORT_CODE_DEC(KEYCODE_8_PAD)    PORT_CODE_INC(KEYCODE_2_PAD)
+        PORT_CODE_DEC(JOYCODE_Y_UP_SWITCH)      PORT_CODE_INC(JOYCODE_Y_UP_SWITCH)
+
+
 INPUT_PORTS_END
 

mangle the sid_pot reads, we'll just always return the m_joy1x or m_joy1y for cases 1,2,3.
 
READ8_MEMBER( c64_state::sid_potx_r )
 {
        uint8_t data = 0xff;
 
        switch (m_cia1->pa_r() >> 6)
        {
       
       case 1:
       case 2:
       case 3: data=m_test_joy1x->read(); break;

        }
 
        return data;
}
READ8_MEMBER( c64_state::sid_poty_r )
 {
        uint8_t data = 0xff;
 
        switch (m_cia1->pa_r() >> 6)
        {

       case 1:
       case 2:
       case 3: data=m_test_joy1y->read();
       break;
        }
 
        return data;
}


then you can change the potx and poty values with the analog input, and the digital joystick up/down/left and right will do the buttons for the pad.


To get past the initial screen put the joystick down in the lower right and press the digital down (I think that's the menu button).

[Linked Image from i.imgur.com]
[Linked Image from i.imgur.com]
some drawing (as best as I can with the numeric keypad masquerading as an analog joystick setting the analog speed/sensitivity to low values, I can't get the MouseX to map into the analog input in the UI menus)
[Linked Image from i.imgur.com]

I found a different SUPER-SKETCH.D64 but I could never get past the menu, wasted a few hours with that. There's also a .crt file but I couldn't get it to load.


make -j4 SOURCES=src/mame/drivers/c64.cpp SUBTARGET=myc64

./myc6464 c64 -joy1 joy -flop ../../supersketch-Uncredited-sb168350-Page-ZimmermanSet2.d64


There's still some puzzles to figure out (like why it wants to clock in a bunch of reads from the digital joystick inputs), but at least it does something.