Jump to content

Jump-less Dual-Kernal Switcher

From RetroTechCollection
Switchless kernal switcher (SKS64)
Switchless-Kernal-SKS64
Caption 3D render of the SKS64 adapter board
Type Kernal ROM adapter and switcher
Designer BWACK
Manufacturer Open hardware (CERN OHL v1.2), built by users
First released 2016 (longboard rev 1.1)
Latest revision Longboard rev 1.21 (2019); shortboard rev 1.1 (2021)
Operating voltage —
Layers / PCB —
Compatibility Commodore 64, C64C, 1541, 1541C, 1541-II
Features Kernal selected from the RESTORE key; RGB LED shows the bank; reset and EXROM reset; drive switches with the computer
Model No. —

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]

  1. Hold RESTORE for several seconds, until the LED flashes.
  2. Release it, then tap RESTORE until the LED shows the colour of the Kernal you want.
  3. 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]

What fits in each EPROM
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]
SKS64 revisions
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

[1]

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]

[edit | edit source]

References

[edit | edit source]
  1. ↑ 1.00 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.10 BWACK, C64 Switchless Multi Kernal 27C256 adapter (SKS64), GitHub repository, README and change log (retrieved 2026-10-01).
  2. ↑ open_cerebrum, C64 Hardware Reference and Repair Guide, "250469" (component placement table). Community reference.