Jump-less Dual-Kernal Switcher
A switchless kernal switcher replaces the Kernal ROM with an EPROM holding several Kernal images, and selects between them from the keyboard instead of from a switch fitted through the case. BWACK's SKS64 is an open-hardware design of this kind for the Commodore 64, C64C, 1541, 1541C and 1541-II, released under the CERN Open Hardware Licence v1.2. Its firmware is written in the Arduino IDE.[1]
Switching Kernals
[edit | edit source]The selected bank is shown as a colour on an RGB LED fitted in place of the power LED.[1]
- Hold RESTORE for several seconds, until the LED flashes.
- Release it, then tap RESTORE until the LED shows the colour of the Kernal you want.
- Wait a couple of seconds. The C64 resets into the selected Kernal.
Holding RESTORE for two seconds, then releasing it and waiting two seconds, resets the machine. Holding it for five seconds gives an EXROM reset. Some machine-language programs change what the computer does after a reset, so that the only way back to BASIC is to switch off; by pulling RESET and EXROM together the board can cold-start the machine. EXROM reset only works when the ATtiny's own RESET pin has been disabled with the #RSTDISBL fuse, which needs a high-voltage programmer such as the TL866.[1]
Switching the disk drive
[edit | edit source]The reset pulse that the SKS64 issues carries serial data giving the bank number. An SKS64 fitted in a 1541 and set up in 1541 mode switches to its upper bank when the C64 is switched to bank 1. With JiffyDOS in bank 1 of both, the computer and drive change over together.[1] JiffyDOS needs its ROM at both ends for the speed-up (see JiffyDOS Kernal Upgrade).
ROM layout
[edit | edit source]Images are placed in 8 KB banks on the computer and in 16 KB banks on the 1541C and 1541-II.[1]
| Board | EPROM | Contents |
|---|---|---|
| C64 long board | 27C256 (32 KB) | 4 Kernals |
| C64 long board | W27C512 (64 KB) | 8 Kernals |
| C64 short board | 27C256 (32 KB) | BASIC + 3 Kernals |
| C64 short board | W27C512 (64 KB) | BASIC + 7 Kernals |
| 1541 | 27C128 (16 KB) | CBM DOS + JiffyDOS |
| 1541C, 1541-II | 27C256 (32 KB) | KERNAL+CBM DOS and KERNAL+JiffyDOS |
The short board gives up one bank to BASIC because on assembly 250469 BASIC and the Kernal share a single 23128 ROM at U4 ($A000-$BFFF and $E000-$FFFF).[2]
Boards and wiring
[edit | edit source]There are two PCBs. The "longboard" version fits C64 long boards and the 1541 and 1541 Late; the "shortboard" version fits C64C short boards and the 1541C and 1541-II. BWACK notes that C64 and C64C internals, and 1541 and 1541C internals, are often found in each other's cases, so open the case and check the board before ordering.[1]
RESTORE, RESET and EXROM are wired to the board through 1 × 1 mm pin headers soldered into motherboard vias. The README gives via locations for assemblies 326298, 250407, 250425, 250466 and 250469.[1]
Microcontroller and programming
[edit | edit source]The current design uses an ATtiny45 or ATtiny85. Longboard revision 1.20 (July 2019) replaced the earlier PIC12F629, moved the design from Eagle to KiCad and the firmware to the Arduino IDE. The two microcontrollers have different pinouts and must not be swapped.[1]
Program the microcontroller with an ISP programmer (USBasp, or an Arduino Uno as ISP) or a high-voltage programmer (TL866); gerbers and hex files are on the repository's release page. After programming, the board must be put into setup mode as described in the project's user guide. Either the original power LED or a common-cathode RGB LED can be used.[1]
Revision history
[edit | edit source]| Board | Revision | Change |
|---|---|---|
| Longboard | 1.1 (2016-09-08) | First schematic and board; #RESTORE and RED_LED swapped because GP3 is input only |
| Longboard | 1.11 (2016-09-10) | RGB LED header follows the RGB LED pinout (blue, green, GND, red) |
| Longboard | 1.12 (2016-09-18) | Larger pads and holes; ground fill removed from the top layer; CERN OHL v1.2 applied |
| Longboard | 1.13 (2016-09-28) | IC2 moved to clear the C64 socket |
| Longboard | 1.20 (2019-07-14) | KiCad; PIC12F629 replaced by ATtiny45/85; Arduino IDE |
| Longboard | 1.21 (2019-07-23) | 27C512 support, eight banks |
| Shortboard | 1.0 (2019-07-18) | Initial design |
| Shortboard | 1.1 (2021-08-10) | Jumpers for 1541C and 1541-II support |
Credits
[edit | edit source]The shortboard version is based on Sven Petersen's C64 Kernal Adaptor Switch for short boards. An older shortboard version is in DiscoHR's repository, and the idea of reusing the original LED and cable assembly came from tebl's repository.[1]
Related pages
[edit | edit source]- JiffyDOS Kernal Upgrade
- PLA Replacement Options
- Commodore 64 Power-Supply Protector (C64 Saver)
- Commodore 64