have you seen this yet?
http://www.midibox.org/dokuwiki/doku.php?id=midiboxkb_-_using_a_c64_keyboard_as_input
There is a table in setup_mbseq_v2.asm
SEQ_IO_TABLE_DIN
;; Function name SR# Pin#
;; NOTE: the pins of the 16 general purpose buttons are assigned at main.asm
#if DEFAULT_ENC_DATAWHEEL < 0
DIN_ENTRY CS_MENU_BUTTON_Left, 1, 0
DIN_ENTRY CS_MENU_BUTTON_Right, 1, 1
#endif
DIN_ENTRY SEQ_BUTTON_Scrub, 1, 2
DIN_ENTRY SEQ_BUTTON_Metronome, 1, 3
DIN_ENTRY SEQ_BUTTON_Stop, 1, 4
DIN_ENTRY SEQ_BUTTON_Pause, 1, 5
DIN_ENTRY SEQ_BUTTON_Play, 1, 6
DIN_ENTRY SEQ_BUTTON_Rew, 1, 7
DIN_ENTRY SEQ_BUTTON_Fwd, 2, 0
DIN_ENTRY SEQ_BUTTON_F1, 2, 1
DIN_ENTRY SEQ_BUTTON_F2, 2, 2
DIN_ENTRY SEQ_BUTTON_F3, 2, 3
DIN_ENTRY SEQ_BUTTON_F4, 2, 4
DIN_ENTRY SEQ_BUTTON_Menu, 2, 5
DIN_ENTRY SEQ_BUTTON_Select, 2, 6
DIN_ENTRY SEQ_BUTTON_Exit, 2, 7
DIN_ENTRY SEQ_BUTTON_Track1, 3, 0
DIN_ENTRY SEQ_BUTTON_Track2, 3, 1
DIN_ENTRY SEQ_BUTTON_Track3, 3, 2
DIN_ENTRY SEQ_BUTTON_Track4, 3, 3
DIN_ENTRY SEQ_BUTTON_LayerA, 3, 4
DIN_ENTRY SEQ_BUTTON_LayerB, 3, 5
DIN_ENTRY SEQ_BUTTON_LayerC, 3, 6
DIN_ENTRY SEQ_BUTTON_Edit, 4, 0
DIN_ENTRY SEQ_BUTTON_Mute, 4, 1
DIN_ENTRY SEQ_BUTTON_Pattern, 4, 2
DIN_ENTRY SEQ_BUTTON_Song, 4, 3
DIN_ENTRY SEQ_BUTTON_Solo, 4, 4
DIN_ENTRY SEQ_BUTTON_Fast, 4, 5
DIN_ENTRY SEQ_BUTTON_All, 4, 6
DIN_ENTRY_EOT
[/code]
That table gets referred to when DIN events happen, and calls the appropriate routine.
Also...
[code]
; Some menus are provide the possibility to use 16 "general purpose" buttons
; Define the two shift registers which are assigned to this function here:
; (valid numbers: 1-16)
#define DEFAULT\_GP\_DIN\_SR0 7 ; first GP DIN shift register assigned to SR#7
#define DEFAULT\_GP\_DIN\_SR1 10 ; second GP DIN shift register assigned to SR#10
The code looks at the pins set on those DIN shift registers (i.e. if it gets an event on SR=7).
That should be enough for you to simulate button presses from your scan matrix routine.