I was trying to get Cyclod running with the sirius joyport, but for some reason I couldn't get it to select the joyport. Supposedly you enable the atari joystick with CTRL+SHIFT+P (which is actually CTRL+@). CTRL+P will enable the normal apple joystick.

Sirius freefall and snakebyte wants CTRL+SHIFT+P too:

https://archive.org/details/Cyclod/page/n1
https://archive.org/details/1982-sirius-freefall/page/n1
https://archive.org/details/sirius_snakebyte_manual/page/n1

This puzzled me because none of these seem to work. So let's start digging:

I looked at the code inside cyclod for reading the joyport and sure enough, it's got code that hits c05a and c05b
Code
>find 0,bfff,5a,c0
Found at 869D
Found at 882B
Found at 8CB5
[MAME]> 

>find 0,bfff,5b,c0
Found at 86BE
[MAME]> 
and there's a joyport reading routine at 8699, but why doesn't it get called?

let's watch what is actually reading from the keyboard and that leads us to the code where it reads the keyboard:

Code
wp c000,1,r,1,{printf "keyboard read: pc=%x wpaddr=%x  wpdata=%x ",pc,wpaddr,wpdata;g}

7398: AD 00 C0 lda KBD / 80STOREOFF
739B: 8D 27 70 sta $7027
739E: AD 10 C0 lda KBDSTRB
73A1: AD 5E 70 lda $705e
73A4: C9 01    cmp #$01
73A6: F0 06    beq $73ae
73A8: 20 99 86 jsr $8699

so our joyport routine will get called if there isn't a 1 in 705e


we can find these routines by looking for where 7027 and 705e get accessed:
Code
>find 0,bfff,5e,70
>find 0,bfff,27,70


8D7D: AD 27 70 lda $7027    keycode gets put here
8D80: C9 8B    cmp #$8b      8b = CTRL+K  keyboard
8D82: D0 09    bne $8d8d
8D84: A9 00    lda #$00        puts 00 in 705e
8D86: 8D 5E 70 sta $705e
8D89: 20 BC 82 jsr $82bc          calls some other stuff
8D8C: 60       rts
8D8D: C9 90    cmp #$90     90 = CTRL+P joystick
8D8F: D0 09    bne $8d9a
8D91: A9 01    lda #$01        puts 01 in 705e
8D93: 8D 5E 70 sta $705e
8D96: 20 84 7D jsr $7d84
8D99: 60       rts
8D9A: C9 80    cmp #$80      80 = CTRL+shift+p or CTRL+@
8D9C: D0 08    bne $8da6
8D9E: A9 02    lda #$02       puts 02 in 705e
8DA0: 8D 5E 70 sta $705e
8DA3: 20 E6 76 jsr $76e6
8DA6: 60       rts
very similar routines to those above reading CTRL+k,CTRL+P,CTRL+@
Code
8DA7: AD 27 70 lda $7027      
8DAA: C9 8B    cmp #$8b
8DAC: D0 06    bne $8db4
8DAE: A9 00    lda #$00
8DB0: 8D 5E 70 sta $705e
8DB3: 60       rts
8DB4: C9 90    cmp #$90
8DB6: D0 06    bne $8dbe
8DB8: A9 01    lda #$01
8DBA: 8D 5E 70 sta $705e
8DBD: 60       rts
8DBE: C9 80    cmp #$80
8DC0: D0 05    bne $8dc7
8DC2: A9 02    lda #$02
8DC4: 8D 5E 70 sta $705e
8DC7: 60       rts


so the code is there but it's looking for a keycode of 0x80, but we're not getting it.

Looking at the key table in src/mame/drivers/apple2.c we can fix the table to send a 0x00 code:

Code
static const uint8_t a2_key_remap[0x32][4] =
{
/*    norm shft ctrl both */
        { 0x33,0x23,0x33,0x23 },    /* 3 #     00     */
        { 0x34,0x24,0x34,0x24 },    /* 4 $     01     */
        { 0x35,0x25,0x35,0x25 },    /* 5 %     02     */
...
        { 0x55,0x55,0x15,0x15 },    /* u U     10     */
        { 0x49,0x49,0x09,0x09 },    /* i I     11     */
        { 0x4f,0x4f,0x0f,0x0f },    /* o O     12     */
        { 0x50,0x40,0x10,0x00 },    /* p P     13     */  //should be a 0x00 for a CTRL_SHIFT_P
        { 0x44,0x44,0x04,0x04 },    /* d D     14     */
        { 0x46,0x46,0x06,0x06 },    /* f F     15     */
        { 0x47,0x47,0x07,0x07 },    /* g G     16     */
        { 0x48,0x48,0x08,0x08 },    /* h H     17     */
        { 0x4a,0x4a,0x0a,0x0a },    /* j J   
but we still don't get an 0x80 code because of an if statement in ay3600_data_ready_w that checks to see if our translated character is zero:

commenting that out we now get the 0x80 code when we read $c000! Yay!

Code
WRITE_LINE_MEMBER(apple2_state::ay3600_data_ready_w)
{
        if (state == ASSERT_LINE)
        {
                int mod = 0;
                m_lastchar = m_ay3600->b_r();

                mod = (m_kbspecial->read() & 0x06) ? 0x01 : 0x00;
                mod |= (m_kbspecial->read() & 0x08) ? 0x02 : 0x00;

                m_transchar = a2_key_remap[m_lastchar&0x3f][mod];


//              if (m_transchar != 0)
                {
                        m_strobe = 0x80;
//          printf("new char = %04x (%02x)\n", m_lastchar&0x3f, m_transchar);
                }
        }
}