====== Adding two buttons for L/R SID selection instead of one in mbSID v2 ======
====== Overview ======
Using two buttons to select the L/R SID is pretty easy, just follow the step-by-step procedure described below.
Difficulty level:
* easy 0-1-**2**-3-4-5-6-7-8-9 hard
Required actions:
* Search/insert
* Compile
Affected files [2]:
* ''src/cs_menu_buttons.inc''
* ''setup_*.inc''
\\
\\
====== Step-by-Step description ======
===== 1. Adding the button =====
* Open ''setup_*.asm''.
* Find ''CS_MENU_DIN_TABLE''
* After this line insert: DIN_ENTRY CS_MENU_BUTTON_SID_R, 4, 2 ; direct access to L/R toggling
DIN_ENTRY CS_MENU_BUTTON_SID_L, 4, 3 ; direct access to L/R toggling
* Make sure the SR pins are set correctly according to where your buttons are connected (here ''4,2'' and ''4,3'')
* If you don't have status LEDs for this function - you're done already.
\\
\\
=== Before the mod: ===
DIN_ENTRY_EOT MACRO
dw 0x0000, 0x0000
ENDM
CS_MENU_DIN_TABLE
;; Function name SR# Pin#
DIN_ENTRY CS_MENU_BUTTON_Dec, 1, 0 ; only valid if rotary encoder not assigned to these pins
DIN_ENTRY CS_MENU_BUTTON_Inc, 1, 1 ; (see mios_tables.inc) and CS_MENU_USE_INCDEC_BUTTONS == 1
\\
\\
=== After the mod: ===
DIN_ENTRY_EOT MACRO
dw 0x0000, 0x0000
ENDM
CS_MENU_DIN_TABLE
;; Function name SR# Pin#
DIN_ENTRY CS_MENU_BUTTON_SID_R, 4, 2 ; direct access to L/R toggling
DIN_ENTRY CS_MENU_BUTTON_SID_L, 4, 3 ; direct access to L/R toggling
DIN_ENTRY CS_MENU_BUTTON_Dec, 1, 0 ; only valid if rotary encoder not assigned to these pins
DIN_ENTRY CS_MENU_BUTTON_Inc, 1, 1 ; (see mios_tables.inc) and CS_MENU_USE_INCDEC_BUTTONS == 1
\\
\\
\\
===== 2. Adding the LEDs =====
* Find ''CS_MENU_DOUT_TABLE''
* After this line insert:
DOUT_ENTRY TMP4, 6, 1, 6 ; LEFT Sid LED
DOUT_ENTRY TMP4, 7, 1, 7 ; RIGHT Sid LED
* Be sure to change the pins (here ''1,6'' and ''1,7'') according to where you wired your two status LEDs
\\
\\
=== Before the mod: ===
DOUT_ENTRY_EOT MACRO
dw 0x0000, 0x0000
ENDM
CS_MENU_DOUT_TABLE
;; Register and bit SR# Pin# Description
DOUT_ENTRY CS_MENU_SELECTED_SID_FLAGS, 0, 1, 0 ; SID1 LED (Note: Pin #0 is the D7 output of first SR)
DOUT_ENTRY CS_MENU_SELECTED_SID_FLAGS, 1, 1, 1 ; SID2 LED
DOUT_ENTRY CS_MENU_SELECTED_SID_FLAGS, 2, 1, 2 ; SID3 LED
DOUT_ENTRY CS_MENU_SELECTED_SID_FLAGS, 3, 1, 3 ; SID4 LED
\\
\\
=== After the mod: ===
DOUT_ENTRY_EOT MACRO
dw 0x0000, 0x0000
ENDM
CS_MENU_DOUT_TABLE
;; Register and bit SR# Pin# Description
DOUT_ENTRY TMP4, 6, 1, 6 ; LEFT Sid LED
DOUT_ENTRY TMP4, 7, 1, 7 ; RIGHT Sid LED
DOUT_ENTRY CS_MENU_SELECTED_SID_FLAGS, 0, 1, 0 ; SID1 LED (Note: Pin #0 is the D7 output of first SR)
DOUT_ENTRY CS_MENU_SELECTED_SID_FLAGS, 1, 1, 1 ; SID2 LED
DOUT_ENTRY CS_MENU_SELECTED_SID_FLAGS, 2, 1, 2 ; SID3 LED
DOUT_ENTRY CS_MENU_SELECTED_SID_FLAGS, 3, 1, 3 ; SID4 LED
\\
\\
\\
===== 3. Adding the button handler =====
* Open ''src/cs_menu_buttons.inc''
* Find ''CS_MENU_BUTTON_SID_LR''
* Right before this line insert:
;; ------------------------------------------------------------------
CS_MENU_BUTTON_SID_L
movlw 0x01
goto CS_MENU_BUTTON_SID_TOGGLE
;; ------------------------------------------------------------------
CS_MENU_BUTTON_SID_R
movlw 0x02
;; goto CS_MENU_BUTTON_SID_TOGGLE
CS_MENU_BUTTON_SID_TOGGLE
;; do nothing if button has been depressed
btfsc MIOS_PARAMETER2, 0
return
;; exit with message if SID player mode enabled and SID1 selected
BRA_IFSET SID_STAT, SID_STAT_SIDPLAYER_CS_DISABLE, ACCESS, CS_MENU_BUTTON_SP_IgnoreMsg
;; toggle L/R
xorwf CS_MENU_SELECTED_SID_LR, 1
bsf CS_STAT, CS_STAT_DISPLAY_UPDATE_REQ
return
\\
\\
=== Before the mod: ===
bsf CS_STAT, CS_STAT_DISPLAY_UPDATE_REQ
return
;; ------------------------------------------------------------------
CS_MENU_BUTTON_SID_LR
;; do nothing if button has been depressed
btfsc MIOS_PARAMETER2, 0
return
;; exit with message if SID player mode enabled and SID1 selected
BRA_IFSET SID_STAT, SID_STAT_SIDPLAYER_CS_DISABLE, ACCESS, CS_MENU_BUTTON_SP_IgnoreMsg
;; toggle L/R
incf CS_MENU_SELECTED_SID_LR, W
andlw 0x03
skpnz
addlw 1
movwf CS_MENU_SELECTED_SID_LR
bsf CS_STAT, CS_STAT_DISPLAY_UPDATE_REQ
return
;; ------------------------------------------------------------------
CS_MENU_BUTTON_Sync
;; do nothing if button has been depressed
btfsc MIOS_PARAMETER2, 0
\\
\\
=== After the mod: ===
bsf CS_STAT, CS_STAT_DISPLAY_UPDATE_REQ
return
;; ------------------------------------------------------------------
CS_MENU_BUTTON_SID_L
movlw 0x01
goto CS_MENU_BUTTON_SID_TOGGLE
;; ------------------------------------------------------------------
CS_MENU_BUTTON_SID_R
movlw 0x02
;; goto CS_MENU_BUTTON_SID_TOGGLE
CS_MENU_BUTTON_SID_TOGGLE
;; do nothing if button has been depressed
btfsc MIOS_PARAMETER2, 0
return
;; exit with message if SID player mode enabled and SID1 selected
BRA_IFSET SID_STAT, SID_STAT_SIDPLAYER_CS_DISABLE, ACCESS, CS_MENU_BUTTON_SP_IgnoreMsg
;; toggle L/R
xorwf CS_MENU_SELECTED_SID_LR, 1
bsf CS_STAT, CS_STAT_DISPLAY_UPDATE_REQ
return
;; ------------------------------------------------------------------
CS_MENU_BUTTON_SID_LR
;; do nothing if button has been depressed
btfsc MIOS_PARAMETER2, 0
return
;; exit with message if SID player mode enabled and SID1 selected
BRA_IFSET SID_STAT, SID_STAT_SIDPLAYER_CS_DISABLE, ACCESS, CS_MENU_BUTTON_SP_IgnoreMsg
;; toggle L/R
incf CS_MENU_SELECTED_SID_LR, W
andlw 0x03
skpnz
addlw 1
movwf CS_MENU_SELECTED_SID_LR
bsf CS_STAT, CS_STAT_DISPLAY_UPDATE_REQ
return
;; ------------------------------------------------------------------
CS_MENU_BUTTON_Sync
;; do nothing if button has been depressed
btfsc MIOS_PARAMETER2, 0
\\
\\
\\
===== 4. Recompile =====
* Now recompile the setup_*.asm
* Send it to your mbSID via MIOSStudio
* You're all done!