@@ -69,6 +69,7 @@ const int ACT_SID = 4;
6969const int ACT_LAUNCH_CRT = 5 ;
7070const int ACT_LAUNCH_PRG = 6 ;
7171const int ACT_LAUNCH_KERNAL = 7 ;
72+ const int ACT_SIDKICK_CFG = 8 ;
7273const int ACT_NOTHING = 0 ;
7374
7475extern CLogger *logger;
@@ -335,8 +336,8 @@ void printBrowserScreen()
335336 if ( subSID )
336337 {
337338 printC64 ( 0 , 24 , " choose CRT/Dxx or PRG w/ SID+FM to start" , skinValues.SKIN_BROWSER_TEXT_FOOTER , 0 , 3 );
338- printC64 ( 16 , 24 , " PRG w/ SID+FM" , skinValues.SKIN_BROWSER_TEXT_FOOTER_HIGHLIGHTED , 0 , 3 );
339- printC64 ( 9 , 24 , " CRT" , skinValues.SKIN_BROWSER_TEXT_FOOTER_HIGHLIGHTED , 0 , 3 );
339+ printC64 ( 18 , 24 , " PRG w/ SID+FM" , skinValues.SKIN_BROWSER_TEXT_FOOTER_HIGHLIGHTED , 0 , 3 );
340+ printC64 ( 7 , 24 , " CRT" , skinValues.SKIN_BROWSER_TEXT_FOOTER_HIGHLIGHTED , 0 , 3 );
340341 }
341342
342343 lastLine = printFileTree ( cursorPos, scrollPos );
@@ -386,6 +387,7 @@ int getMainMenuSelection( int key, char **FILE, int *addIdx, char *menuItemStr )
386387 if ( key == VK_F8 ) { resetMenuState (0 ); return ACT_EXIT;/* Exit */ } else
387388 if ( key == VK_F7 ) { resetMenuState (3 ); return ACT_BROWSER;/* Browser */ } else
388389 if ( key == VK_F1 ) { resetMenuState (1 ); return ACT_GEORAM;/* GEORAM */ } else
390+ if ( key == VK_F6 ) { return ACT_SIDKICK_CFG; } else
389391 if ( key == VK_F3 ) { resetMenuState (2 ); return ACT_SID;/* SID */ } else
390392 {
391393 if ( key >= ' A' && key < ' A' + menuItems[ 2 ] ) // CRT
@@ -434,10 +436,10 @@ int getMainMenuSelection( int key, char **FILE, int *addIdx, char *menuItemStr )
434436
435437extern void deactivateCart ();
436438
437- #define MAX_SETTINGS 13
439+ #define MAX_SETTINGS 14
438440u32 curSettingsLine = 0 ;
439- s32 rangeSettings[ MAX_SETTINGS ] = { 4 , 10 , 6 , 2 , 16 , 15 , 4 , 4 , 16 , 15 , 2 , 16 , 15 };
440- s32 settings[ MAX_SETTINGS ] = { 0 , 0 , 0 , 0 , 15 , 0 , 0 , 0 , 15 , 14 , 0 , 15 , 7 };
441+ s32 rangeSettings[ MAX_SETTINGS ] = { 4 , 10 , 6 , 2 , 16 , 15 , 4 , 4 , 16 , 15 , 2 , 16 , 15 , 2 };
442+ s32 settings[ MAX_SETTINGS ] = { 0 , 0 , 0 , 0 , 15 , 0 , 0 , 0 , 15 , 14 , 0 , 15 , 7 , 0 };
441443u8 geoRAM_SlotNames[ 10 ][ 21 ];
442444
443445void writeSettingsFile ()
@@ -475,9 +477,9 @@ void applySIDSettings()
475477{
476478 octaSIDMode = ( settings[ 2 ] > 2 ) ? 1 : 0 ;
477479 // how elegant...
478- extern void setSIDConfiguration ( u32 mode, u32 sid1, u32 sid2, u32 sid2addr, u32 rr, u32 addr, u32 exp, s32 v1, s32 p1, s32 v2, s32 p2, s32 v3, s32 p3 );
480+ extern void setSIDConfiguration ( u32 mode, u32 sid1, u32 sid2, u32 sid2addr, u32 rr, u32 addr, u32 exp, s32 v1, s32 p1, s32 v2, s32 p2, s32 v3, s32 p3, s32 outputPWMHDMI );
479481 setSIDConfiguration ( 0 , settings[2 ], settings[6 ], settings[7 ]-1 , settings[3 ], settings[7 ], settings[10 ],
480- settings[4 ], settings[5 ], settings[8 ], settings[9 ], settings[11 ], settings[12 ] );
482+ settings[4 ], settings[5 ], settings[8 ], settings[9 ], settings[11 ], settings[12 ], settings[ 13 ] );
481483}
482484
483485int lastKeyDebug = 0 ;
@@ -598,6 +600,12 @@ void handleC64( int k, u32 *launchKernel, char *FILENAME, char *filenameKernal,
598600 int temp;
599601 int r = getMainMenuSelection ( k, &filename, &temp, menuItemStr );
600602
603+ if ( r == ACT_SIDKICK_CFG )
604+ {
605+ *launchKernel = 11 ;
606+ return ;
607+ }
608+
601609 if ( subSID == 1 )
602610 {
603611 if ( k == VK_ESC )
@@ -1235,7 +1243,13 @@ void handleC64( int k, u32 *launchKernel, char *FILENAME, char *filenameKernal,
12351243 {
12361244 curSettingsLine ++;
12371245 if ( settings[2 ] > 2 )
1238- curSettingsLine %= 3 ; else
1246+ {
1247+ if ( curSettingsLine == 13 + 1 )
1248+ curSettingsLine = 0 ;
1249+ if ( curSettingsLine == 2 + 1 )
1250+ curSettingsLine = 13 ;
1251+ // curSettingsLine %= 3;
1252+ } else
12391253 curSettingsLine %= MAX_SETTINGS;
12401254 } else
12411255 // up
@@ -1244,10 +1258,16 @@ void handleC64( int k, u32 *launchKernel, char *FILENAME, char *filenameKernal,
12441258 if ( curSettingsLine == 0 )
12451259 {
12461260 if ( settings[2 ] > 2 )
1247- curSettingsLine = 2 ; else
1261+ {
1262+ curSettingsLine = 13 ;
1263+ } else
12481264 curSettingsLine = MAX_SETTINGS - 1 ;
12491265 } else
1250- curSettingsLine --;
1266+ {
1267+ if ( settings[2 ] > 2 && curSettingsLine == 13 )
1268+ curSettingsLine = 2 ; else
1269+ curSettingsLine --;
1270+ }
12511271 }
12521272 if ( (k == ' s' || k == ' S' ) && typeInName == 0 )
12531273 {
@@ -1301,10 +1321,10 @@ void printMainMenu()
13011321 if ( subGeoRAM && subHasKernal )
13021322 {
13031323 // "012345678901234567890123456789012345XXXX"
1304- printC64 ( 0 , 23 , " choose KERNAL and/or PRG (w/ F7) " , skinValues.SKIN_MENU_TEXT_FOOTER , 0 );
1324+ printC64 ( 0 , 23 , " choose KERNAL and/or PRG (w/F7) " , skinValues.SKIN_MENU_TEXT_FOOTER , 0 );
13051325 printC64 ( 0 , 24 , " ? back, RETURN/F1 launch " , skinValues.SKIN_MENU_TEXT_FOOTER , 0 );
13061326 // "012345678901234567890123456789012345XXXX"
1307- printC64 ( 33 , 23 , " F7" , skinValues.SKIN_MENU_TEXT_FOOTER , 128 , 0 );
1327+ printC64 ( 32 , 23 , " F7" , skinValues.SKIN_MENU_TEXT_FOOTER , 128 , 0 );
13081328 printC64 ( 8 , 24 , " \x9f " , skinValues.SKIN_MENU_TEXT_FOOTER , 128 , 0 );
13091329 printC64 ( 16 , 24 , " RETURN" , skinValues.SKIN_MENU_TEXT_FOOTER , 128 , 0 );
13101330 printC64 ( 23 , 24 , " F1" , skinValues.SKIN_MENU_TEXT_FOOTER , 128 , 0 );
@@ -1351,17 +1371,20 @@ void printMainMenu()
13511371 }
13521372
13531373 if ( modeC128 )
1354- printC64 ( 36 , 23 , " C128" , skinValues.SKIN_MENU_TEXT_SYSINFO , 0 ); else
1355- printC64 ( 37 , 23 , " C64" , skinValues.SKIN_MENU_TEXT_SYSINFO , 0 );
1374+ printC64 ( 36 , 23 - 0 *(hasSIDKick? 1 : 0 ) , " C128" , skinValues.SKIN_MENU_TEXT_SYSINFO , 0 ); else
1375+ printC64 ( 37 , 23 - 0 *(hasSIDKick? 1 : 0 ) , " C64" , skinValues.SKIN_MENU_TEXT_SYSINFO , 0 );
13561376 if ( modeVIC == 0 ) // old VIC2
13571377 {
1358- printC64 ( 36 , 24 , " 6569" , skinValues.SKIN_MENU_TEXT_SYSINFO , 0 );
1378+ printC64 ( 36 , 24 - 0 *(hasSIDKick? 1 : 0 ) , " 6569" , skinValues.SKIN_MENU_TEXT_SYSINFO , 0 );
13591379 } else {
13601380 if ( modeC128 )
1361- printC64 ( 36 , 24 , " 8564" , skinValues.SKIN_MENU_TEXT_SYSINFO , 0 ); else
1362- printC64 ( 36 , 24 , " 8565" , skinValues.SKIN_MENU_TEXT_SYSINFO , 0 );
1381+ printC64 ( 36 , 24 - 0 *(hasSIDKick? 1 : 0 ) , " 8564" , skinValues.SKIN_MENU_TEXT_SYSINFO , 0 ); else
1382+ printC64 ( 36 , 24 - 0 *(hasSIDKick? 1 : 0 ) , " 8565" , skinValues.SKIN_MENU_TEXT_SYSINFO , 0 );
13631383 }
13641384
1385+ if ( hasSIDKick )
1386+ printC64 ( 36 , 22 , " SIDK" , skinValues.SKIN_MENU_TEXT_SYSINFO , 0 );
1387+
13651388 // menu headers + titels
13661389 for ( int i = 0 ; i < CATEGORY_NAMES; i++ )
13671390 if ( menuX[ i ] != -1 )
@@ -1423,6 +1446,13 @@ void printMainMenu()
14231446 printC64 ( menuX[ 0 ]+3 , menuY[ 0 ]+3 , " Settings" , skinValues.SKIN_MENU_TEXT_ITEM , 0 );
14241447 ADD_JOY_ITEM ( menuX[ 0 ], menuY[ 0 ]+3 , 2 , VK_F5 );
14251448
1449+ if ( hasSIDKick )
1450+ {
1451+ printC64 ( menuX[ 0 ], menuY[ 0 ]+4 , " F6" , skinValues.SKIN_MENU_TEXT_KEY , 0 );
1452+ printC64 ( menuX[ 0 ]+3 , menuY[ 0 ]+4 , " SIDKick Config" , skinValues.SKIN_MENU_TEXT_ITEM , 0 );
1453+ ADD_JOY_ITEM ( menuX[ 0 ], menuY[ 0 ]+4 , 2 , VK_F6 );
1454+ }
1455+
14261456 if ( joyIdx != - 1 )
14271457 printC64 ( (joyX-1 +40 )%40 , (joyY%25 ), " >" , 1 , 0 );
14281458
@@ -1490,6 +1520,7 @@ void printSettingsScreen()
14901520 char sidStrO[ 3 ][ 8 ] = { " off" , " on" };
14911521 char sidStrS2[ 4 ][ 20 ] = { " 6581" , " 8580" , " 8580 w/ Digiboost" , " none" };
14921522 char sidStrA[ 4 ][ 8 ] = { " $D400" , " $D420" , " $D500" , " $DE00" };
1523+ char sidStrOutput[ 3 ][ 9 ] = { " PWM" , " HDMI" , " PWM+HDMI" };
14931524
14941525 printC64 ( x+1 , y2+11 , " SID #1" , skinValues.SKIN_MENU_TEXT_ITEM , (l==2 )?0x80 :0 );
14951526 printC64 ( x2+10 , y2+11 , sidStrS[ settings[2 ] ], skinValues.SKIN_MENU_TEXT_ITEM , (l==2 )?0x80 :0 );
@@ -1508,40 +1539,47 @@ void printSettingsScreen()
15081539 sprintf ( t, " %2d" , settings[ 5 ] - 7 );
15091540 printC64 ( x2+15 , y2+13 , t, skinValues.SKIN_MENU_TEXT_ITEM , (l==5 )?0x80 :0 );
15101541
1511- printC64 ( x+1 , y2+15 , " SID #2" , skinValues.SKIN_MENU_TEXT_ITEM , (l==6 )?0x80 :0 );
1512- printC64 ( x2+10 , y2+15 , sidStrS2[ settings[6 ] ], skinValues.SKIN_MENU_TEXT_ITEM , (l==6 )?0x80 :0 );
1542+ printC64 ( x+1 , y2+14 , " SID #2" , skinValues.SKIN_MENU_TEXT_KEY , (l==6 )?0x80 :0 );
1543+ printC64 ( x2+10 , y2+14 , sidStrS2[ settings[6 ] ], skinValues.SKIN_MENU_TEXT_KEY , (l==6 )?0x80 :0 );
15131544
1514- printC64 ( x+1 , y2+16 , " Address" , skinValues.SKIN_MENU_TEXT_ITEM , (l==7 )?0x80 :0 );
1515- printC64 ( x2+10 , y2+16 , sidStrA[ settings[7 ] ], skinValues.SKIN_MENU_TEXT_ITEM , (l==7 )?0x80 :0 );
1545+ printC64 ( x+1 , y2+15 , " Address" , skinValues.SKIN_MENU_TEXT_KEY , (l==7 )?0x80 :0 );
1546+ printC64 ( x2+10 , y2+15 , sidStrA[ settings[7 ] ], skinValues.SKIN_MENU_TEXT_KEY , (l==7 )?0x80 :0 );
15161547
1517- printC64 ( x+1 , y2+17 , " Volume" , skinValues.SKIN_MENU_TEXT_ITEM , (l==8 )?0x80 :0 );
1518- printC64 ( x+1 +6 , y2+17 , " /" , skinValues.SKIN_MENU_TEXT_ITEM , 0 );
1519- printC64 ( x+1 +7 , y2+17 , " Panning" , skinValues.SKIN_MENU_TEXT_ITEM , (l==9 )?0x80 :0 );
1548+ printC64 ( x+1 , y2+16 , " Volume" , skinValues.SKIN_MENU_TEXT_KEY , (l==8 )?0x80 :0 );
1549+ printC64 ( x+1 +6 , y2+16 , " /" , skinValues.SKIN_MENU_TEXT_KEY , 0 );
1550+ printC64 ( x+1 +7 , y2+16 , " Panning" , skinValues.SKIN_MENU_TEXT_KEY , (l==9 )?0x80 :0 );
15201551 sprintf ( t, " %2d" , settings[ 8 ] );
1521- printC64 ( x2+10 , y2+17 , t, skinValues.SKIN_MENU_TEXT_ITEM , (l==8 )?0x80 :0 );
1522- printC64 ( x2+13 , y2+17 , " /" , skinValues.SKIN_MENU_TEXT_ITEM , 0 );
1552+ printC64 ( x2+10 , y2+16 , t, skinValues.SKIN_MENU_TEXT_KEY , (l==8 )?0x80 :0 );
1553+ printC64 ( x2+13 , y2+16 , " /" , skinValues.SKIN_MENU_TEXT_KEY , 0 );
15231554 sprintf ( t, " %2d" , settings[ 9 ] - 7 );
1524- printC64 ( x2+15 , y2+17 , t, skinValues.SKIN_MENU_TEXT_ITEM , (l==9 )?0x80 :0 );
1555+ printC64 ( x2+15 , y2+16 , t, skinValues.SKIN_MENU_TEXT_KEY , (l==9 )?0x80 :0 );
15251556
1526- printC64 ( x+1 , y2+19 , " SFX Sound Exp." , skinValues.SKIN_MENU_TEXT_ITEM , (l==10 )?0x80 :0 );
1527- printC64 ( x2+10 , y2+19 , sidStrO[ settings[10 ] ], skinValues.SKIN_MENU_TEXT_ITEM , (l==10 )?0x80 :0 );
1557+ printC64 ( x+1 , y2+17 , " SFX Sound Exp." , skinValues.SKIN_MENU_TEXT_ITEM , (l==10 )?0x80 :0 );
1558+ printC64 ( x2+10 , y2+17 , sidStrO[ settings[10 ] ], skinValues.SKIN_MENU_TEXT_ITEM , (l==10 )?0x80 :0 );
15281559
1529- printC64 ( x+1 , y2+20 , " Volume" , skinValues.SKIN_MENU_TEXT_ITEM , (l==11 )?0x80 :0 );
1530- printC64 ( x+1 +6 , y2+20 , " /" , skinValues.SKIN_MENU_TEXT_ITEM , 0 );
1531- printC64 ( x+1 +7 , y2+20 , " Panning" , skinValues.SKIN_MENU_TEXT_ITEM , (l==12 )?0x80 :0 );
1560+ printC64 ( x+1 , y2+18 , " Volume" , skinValues.SKIN_MENU_TEXT_ITEM , (l==11 )?0x80 :0 );
1561+ printC64 ( x+1 +6 , y2+18 , " /" , skinValues.SKIN_MENU_TEXT_ITEM , 0 );
1562+ printC64 ( x+1 +7 , y2+18 , " Panning" , skinValues.SKIN_MENU_TEXT_ITEM , (l==12 )?0x80 :0 );
15321563 sprintf ( t, " %2d" , settings[ 11 ] );
1533- printC64 ( x2+10 , y2+20 , t, skinValues.SKIN_MENU_TEXT_ITEM , (l==11 )?0x80 :0 );
1534- printC64 ( x2+13 , y2+20 , " /" , skinValues.SKIN_MENU_TEXT_ITEM , 0 );
1564+ printC64 ( x2+10 , y2+18 , t, skinValues.SKIN_MENU_TEXT_ITEM , (l==11 )?0x80 :0 );
1565+ printC64 ( x2+13 , y2+18 , " /" , skinValues.SKIN_MENU_TEXT_ITEM , 0 );
15351566 sprintf ( t, " %2d" , settings[ 12 ] - 7 );
1536- printC64 ( x2+15 , y2+20 , t, skinValues.SKIN_MENU_TEXT_ITEM , (l==12 )?0x80 :0 );
1567+ printC64 ( x2+15 , y2+18 , t, skinValues.SKIN_MENU_TEXT_ITEM , (l==12 )?0x80 :0 );
1568+
1569+ printC64 ( x+1 , y2+20 , " Output" , skinValues.SKIN_MENU_TEXT_ITEM , (l==13 )?0x80 :0 );
1570+ printC64 ( x2+10 , y2+20 , sidStrOutput[ settings[13 ] ], skinValues.SKIN_MENU_TEXT_ITEM , (l==13 )?0x80 :0 );
1571+
15371572 } else
15381573 {
15391574 // "012345678901234567890123456789012345XXXX"
1540- printC64 ( x+1 , y2+13 , " This is a special mode with 8 SIDs" , skinValues.SKIN_MENU_TEXT_ITEM , (l==3 )?0x80 :0 );
1541- printC64 ( x+1 , y2+14 , " at the following addresses:" , skinValues.SKIN_MENU_TEXT_ITEM , (l==3 )?0x80 :0 );
1575+ printC64 ( x+1 , y2+13 , " This is a special mode with 8 SIDs" , skinValues.SKIN_MENU_TEXT_KEY , (l==3 )?0x80 :0 );
1576+ printC64 ( x+1 , y2+14 , " at the following addresses:" , skinValues.SKIN_MENU_TEXT_KEY , (l==3 )?0x80 :0 );
1577+
1578+ printC64 ( x+1 , y2+16 , " Left: $D400, $D480, $D500, $D580" , skinValues.SKIN_MENU_TEXT_KEY , (l==3 )?0x80 :0 );
1579+ printC64 ( x+1 , y2+17 , " Right: $D420, $D4A0, $D520, $D5A0" , skinValues.SKIN_MENU_TEXT_KEY , (l==3 )?0x80 :0 );
15421580
1543- printC64 ( x+1 , y2+16 , " Left: $D400, $D480, $D500, $D580 " , skinValues.SKIN_MENU_TEXT_ITEM , (l==3 )?0x80 :0 );
1544- printC64 ( x+ 1 , y2+17 , " Right: $D420, $D4A0, $D520, $D5A0 " , skinValues.SKIN_MENU_TEXT_ITEM , (l==3 )?0x80 :0 );
1581+ printC64 ( x+1 , y2+20 , " Output " , skinValues.SKIN_MENU_TEXT_ITEM , (l==13 )?0x80 :0 );
1582+ printC64 ( x2+ 10 , y2+20 , sidStrOutput[ settings[ 13 ] ], skinValues.SKIN_MENU_TEXT_ITEM , (l==13 )?0x80 :0 );
15451583 }
15461584
15471585 printSidekickLogo ();
0 commit comments