Here is my less-than-alpha, still-to-be-debugged patch for C64 keyboard support for MBSEQ v3.2. I didn’t write any mapping table yet - it just checks for the Commodore key and this will recall the menu. I don’t want to go further without doing any debugging, so it’s here for who wants to have a look at (and maybe do some checks).
I’ll continue this work when I’ll have the parts from SmashTV.
Best regards, Enrico
diff -au midibox_seq_v3_2/app_defines.h midibox_seq_v3_2_c64k/app_defines.h
--- midibox_seq_v3_2/app_defines.h Fri Jul 06 16:27:57 2007
+++ midibox_seq_v3_2_c64k/app_defines.h Fri Jul 06 01:15:20 2007
@@ -431,7 +431,9 @@
SEQ_EDIT_SONG_BANK_G3 EQU 0x17c
SEQ_SONG_RECURSION_CTR EQU 0x17d ; used in "seq_song.inc", SEQ_SONG_FetchPosDirect to avoid a live lock
- ;; free: 0x17e-0x19d
+SEQ_BLM_ROW_CTR_3 EQU 0x17e ; RAZ: 3-bit row counter for C64 keyb matrix
+
+ ;; free: 0x17f-0x19d
;; ==================================================================================
diff -au midibox_seq_v3_2/main.inc midibox_seq_v3_2_c64k/main.inc
--- midibox_seq_v3_2/main.inc Tue May 22 01:39:26 2007
+++ midibox_seq_v3_2_c64k/main.inc Sun Jul 08 01:41:11 2007
@@ -12,7 +12,7 @@
; ==========================================================================
;
; Version: <-------------->
-#define MBSEQ_VERSION_STR "MBSEQ V3.2 "
+#define MBSEQ_VERSION_STR "MBSEQ V3.2-c64k "
; (fixed string length - 16 characters!)
;
;
Only in midibox_seq_v3_2_c64k: price.xls
diff -au midibox_seq_v3_2/seq_buttons.inc midibox_seq_v3_2_c64k/seq_buttons.inc
--- midibox_seq_v3_2/seq_buttons.inc Tue May 22 01:39:26 2007
+++ midibox_seq_v3_2_c64k/seq_buttons.inc Sun Jul 08 01:38:43 2007
@@ -117,6 +117,17 @@
;; since the row line of the buttons is identical to the row line of the LEDs,
;; we can derive the button row offset from SEQ_BLM_ROW_CTR
+#if DEFAULT_SRM_8X8_ENABLED
+ ;; (RAZ) we use the 3-bit version to use the whole 8x8 matrix.
+ decf SEQ_BLM_ROW_CTR_3, W, BANKED
+ movwf IRQ_TMP1
+
+ ;; (RAZ) the matrix pins are connected to the left DIN.
+ movlw DEFAULT_SRM_DIN_L - 1
+ ;; rgoto SEQ_BUTTON_GetRowIRQ_Sub
+
+#else
+
;; store row*2 offset in IRQ_TMP1
decf SEQ_BLM_ROW_CTR, W, BANKED
rlf WREG, W
@@ -131,7 +142,7 @@
incf IRQ_TMP1, F ; row*2+1
movlw DEFAULT_SRM_DIN_R - 1
;; rgoto SEQ_BUTTON_GetRowIRQ_Sub
-
+#endif
;; expecting: DIN SR number in WREG
;; row counter in IRQ_TMP1
@@ -265,6 +276,27 @@
movlw 0x01
movwf MIOS_PARAMETER2
+#if DEFAULT_SRM_8X8_ENABLED
+
+ ;; (RAZ) takes current row and column and uses them as an index
+ ;; for the 8x8 mapping table. Format is 00rrrccc.
+ movf SEQ_BLM_COL_CTR, W, BANKED
+ rrf WREG, W
+ rrf WREG, W
+ rrf WREG, W
+ iorwf MIOS_PARAMETER1, W
+
+ ;; As a first try, check for press of the "C=" button, which recalls the menu.
+ xorlw b'00110101' ; fifth column of the sixth row of the C64 keyboard matrix
+ bnz SEQ_BUTTON_SRM_8X8_End
+ movlw (5+8*2) ; fifth pin of second SR, which recalls SEQ_BUTTON_Menu
+ movwf MIOS_PARAMETER1
+ call SEQ_BUTTON_Handler
+
+SEQ_BUTTON_SRM_8X8_End
+
+#else
+
;; switch to 8-15 in MIOS_PARAMETER1 if right half of 4x16 matrix
btfsc SEQ_BLM_COL_CTR, 0, BANKED
bsf MIOS_PARAMETER1, 3
@@ -287,6 +319,7 @@
call SEQ_GP_Button
#endif
+#endif
;; request display update
bsf CS_STAT, CS_STAT_DISPLAY_UPDATE_REQ
diff -au midibox_seq_v3_2/seq_leds.inc midibox_seq_v3_2_c64k/seq_leds.inc
--- midibox_seq_v3_2/seq_leds.inc Tue May 22 01:39:26 2007
+++ midibox_seq_v3_2_c64k/seq_leds.inc Fri Jul 06 16:03:23 2007
@@ -169,6 +169,12 @@
incf SEQ_BLM_ROW_CTR, F, BANKED
bcf SEQ_BLM_ROW_CTR, 2, BANKED ; wrap at 4
+#if DEFAULT_SRM_8X8_ENABLED
+ ;; (RAZ) increment BLM 3-bit row counter, for 8x8 scan matrix
+ incf SEQ_BLM_ROW_CTR_3, F, BANKED
+ bcf SEQ_BLM_ROW_CTR_3, 3, BANKED ; wrap at 8
+#endif
+
;; ---[update the GP LEDs]---
;; store selected track in IRQ_TMP5[3:0]
@@ -375,6 +381,11 @@
;; if track active: cathode signal must be 0
;; if track not active: cathode signal must be 1
SET_BSR SEQ_BASE
+#if DEFAULT_SRM_8X8_ENABLED
+ movf SEQ_BLM_ROW_CTR_3, W, BANKED
+ call MIOS_HLP_GetBitANDMask
+ movwf MIOS_PARAMETER1
+#else
movf SEQ_BLM_ROW_CTR, W, BANKED
call MIOS_HLP_GetBitANDMask
andlw 0x0f
@@ -383,6 +394,7 @@
;; duplicate for button matrix
swapf WREG, W
iorwf MIOS_PARAMETER1, F
+#endif
#if DEFAULT_SRM_DOUT_CATHODES1
movlw DEFAULT_SRM_DOUT_CATHODES1 - 1