Jump to content

Jump-less Dual-Kernal Switcher: Difference between revisions

From RetroTechCollection
Rewrite from BWACK's own SKS64 README: the switching sequence is hold-and-tap RESTORE with an RGB colour code, not a double reset tap; MCU is ATtiny45/85 not ATtiny13A; it does need RESTORE/RESET/EXROM wired into motherboard vias; the short board loses a bank to BASIC because U4 is a combined 23128; add the drive-switching feature, the EXROM cold start and the CERN OHL v1.2 licence
 
Line 1: Line 1:
{{Infobox hardware
{{Infobox hardware
| name          = Jump-less Dual-Kernal Switcher
| name          = Switchless kernal switcher (SKS64)
| image          = [[File:Switchless-Kernal-SKS64.jpg|250px]]
| image          = [[File:Switchless-Kernal-SKS64.jpg|250px]]
| caption        = A switch-less SKS64 board installed inside an early ''Assy 250407'' C64 (EPROM not fitted)
| caption        = An SKS64 switchless kernal switcher
| developer      = Community-developed (original concept & firmware by ''bwack''; later boards by PCBWay Open Source Project, Byte-Munchers, Retrowhiz et al.)
| developer      = BWACK
| type          = Internal, switch-less multi-KERNAL ROM adapter
| type          = Internal ROM adapter and kernal switcher
| first_released = 2018 (v0.9 proof-of-concept)
| application    = Commodore 64, C64C, 1541, 1541C, 1541-II
| latest_release = SKS64 v1.1 / Switchless-27C010 PCB (2022)
| licence        = CERN Open Hardware Licence v1.2
| operating_voltage = +5 V DC (from C64 mainboard)
| application    = Commodore 64 / 64C / SX-64 ‹long- & short-boards›
}}
}}
<templatestyles src="Template:StyledTable/styles.css" />


The '''Jump-less Dual-Kernal Switcher''' (often called the ''switch-less'' or ''jumper-less'' KERNAL board) is an open-hardware add-on that lets a Commodore 64 toggle between two —or up to sixteen—KERNAL ROM images '''without any external toggle-switch, jumper wire, or case mod'''.  Selection is performed entirely from the keyboard or by a special reset-pulse sequence, leaving the computer’s case stock-looking and the user free from “which switch is which?” confusion.
A '''switchless kernal switcher''' plugs into the KERNAL ROM socket and lets the machine hold several kernal images at once, selected from the keyboard rather than from a toggle switch drilled through the case. The best-documented design is BWACK's '''SKS64'''.
== Why replace / switch KERNALs? ==
* Run a fast-loading DOS such as '''JiffyDOS''' while still retaining the stock Commodore KERNAL for compatibility. 
* Alternate between region ROMs (PAL vs NTSC) or diagnostic ROMs (Dead-Test, Diag64). 
* Test self-built or patched KERNALs without repeatedly desoldering chips.


== Design overview ==
'''Every figure below comes from the project's own README and change log.'''<ref name="sks">BWACK, ''C64 Switchless Multi Kernal 27C256 adapter'' (SKS64), https://github.com/bwack/C64-Switchless-Multi-Kernal-27C256-adapter . README and change log. Source for the designer, the CERN Open Hardware Licence v1.2, the supported machines, the RESTORE-key switching, reset and EXROM-reset sequences, the RGB-LED bank indication, the ROM bank layouts for long boards, short boards, the 1541 and the 1541C/1541-II, the two PCB variants, the ATtiny45/85 and its predecessor the PIC12F629, the programming routes, the via-wiring requirement for RESTORE, RESET and EXROM, the machines for which wiring diagrams are published, the acknowledgements, and the revision history.</ref>
{| class="wikitable" style="width:70%; text-align:center;"
 
! colspan="3" | Major functional blocks (SKS64 reference design)
== How you actually switch kernals ==
 
There is no double-tap of the reset button and no RUN/STOP combination. The sequence is:<ref name="sks" />
 
# '''Hold RESTORE''' for several seconds, until the LED flashes.
# '''Release''', then '''tap RESTORE''' repeatedly until the LED shows the colour of the kernal you want.
# '''Wait a couple of seconds.''' The machine resets itself into the selected kernal.
 
The selected bank is shown as a '''colour''' on an RGB LED fitted in place of the power LED — not as a count of blinks.<ref name="sks" />
 
=== Reset and cold start ===
 
{| class="wikitable styled-table" style="width:80%; text-align:left;"
|+'''RESTORE key timings'''
! Hold RESTORE for !! Result
|-
| ~2 seconds || LED flashes; release and wait two seconds for a '''reset'''
|-
|-
| style="width:33%;" | '''EPROM / Flash'''<br />27C256 (4 × 8 KB)<br />27C512 (8 × 8 KB)<br />27C010 (16 × 8 KB)
| ~5 seconds || '''EXROM reset''' — a cold start
| style="width:33%;" | '''ATtiny13A μC'''<br />Decodes reset / RESTORE pulses,<br />latches two address bits to pick the bank
| style="width:33%;" | '''74xx logic'''<br />HCT08 & HCT02 gate ROM CS<br />and isolate the bus during bank switch
|-
|-
| colspan="3" | The board plugs into the KERNAL socket (U4 on long-boards, U4/U32 on 250469) and '''requires no cuts or flying leads'''.
| Several seconds, then tap || Enter bank selection
|}
|}


The micro-controller runs at 9.6 MHz (internal RC) and samples '''~60 Hz VSYNC''' from the VIC-II to time-out key-presses reliably over PAL & NTSC. Two GPIO lines drive A15/A16 of the EPROM through 10 k pull-ups, giving up to 4/8/16 selectable images depending on device size.
The EXROM reset exists for a real problem: some machine-language programs change how the machine returns from a reset, and without control of EXROM the only way back to BASIC is to power the machine off. By pulling '''RESET and EXROM together''' the board can cold-start it.<ref name="sks" />
 
'''EXROM reset is only available if the ATtiny's own RESET pin has been disabled''' by programming the '''#RSTDISBL''' fuse — and that can only be done with a high-voltage programmer such as a TL866, not with an ISP programmer. Decide this before you solder the microcontroller down.<ref name="sks" />
 
== It switches the disk drive too ==
 
This is the feature most descriptions miss. If an SKS64 is also fitted in the drive and set to 1541 mode, the '''reset pulse the board issues carries prepended serial data naming the bank number''', so the drive switches to its upper bank when the computer switches to bank 1. Fit JiffyDOS in bank 1 on both and the computer and the drive change over together — which is what you want, because a JiffyDOS kernal talking to a stock drive gains you nothing.<ref name="sks" />


=== Switch-less selection methods ===
== ROM layout ==
* '''Short double-reset''' – press the C64 reset button twice within < 0.9 s. 
* '''Long RESTORE hold''' – hold the RESTORE key ≥ 1 s while tapping RUN/STOP. 
The μC counts either event and advances an internal bank counter; the chosen bank number is flashed back on the C64 power LED (1-long, 2-long, …).  A cold-reset is then issued.


== Board variants ==
Images are placed in '''8 K banks''' on the computer and '''16 K banks''' on the 1541C/1541-II:<ref name="sks" />
{| class="wikitable sortable"
 
! PCB / Project !! EPROM !! Max banks !! Notes
{| class="wikitable styled-table" style="width:90%; text-align:left;"
|+'''What fits in which device'''
! Machine !! 27C256 (32 K) !! W27C512 (64 K)
|-
|-
| '''SKS64 v1.1''' || 27C256/512/010 || 4-16 || Most popular; plated-through-hole; Gerbers on GitHub.
| C64 long board || 4 kernals || 8 kernals
|-
|-
| '''Bwack 27C256 adapter''' || 27C256 || 4 || Original proof-of-concept; SMD ATtiny13A; published 2018.
| '''C64 short board''' || '''BASIC + 3 kernals''' || '''BASIC + 7 kernals'''
|-
|-
| '''Switchless-27C020''' || 27C020 || 32 || Experimental; needs extra 74HC139 for A17 gating.
| 1541 || CBM DOS + JiffyDOS in a 16 K image (27C128) ||
|-
|-
| '''SaRuMan-64 KS''' || 29F040 flash || 64 || Adds USB-ASP header for in-system reflashing.
| 1541C / 1541-II || KERNAL+CBMDOS and KERNAL+JiffyDOS in a 32 K image (27C256) ||
|}
|}


All share the same firmware with a single compile-time constant (``#define BANKS``).
'''The short board loses a slot to BASIC.''' That is not a design compromise, it is the machine: on assembly 250469 the BASIC and KERNAL ROMs are combined into a single 23128 at '''U4''', so the adapter has to carry BASIC in every image set.<ref name="cerebrum">''C64 Hardware Reference and Repair Guide'' (open_cerebrum), https://opencbm.org/doc/c64/hardware_reference_and_repair_guide/pcb/250469.html . Community reference. Component placement for assembly 250469: U4 is a 23128 holding both BASIC ($A000–$BFFF) and KERNAL ($E000–$FFFF).</ref>


== Compatibility ==
== Two different boards ==
* Long-boards: 326298, 250407, 250425, 250466 – direct plug-in. 
* Short-board 250469-(xx): requires '''/HIRAM jumper''' wired to A14 because the 16 KB ROM is mapped as a single chip; most switcher PCBs include a solder-bridge. 
* SX-64 & VIC-20 CR: electrically identical 2364 pinout, confirmed working with minor socket shims. 


No effect on cartridges—the KERNAL is banked only after reset, so memory configuration is stable during normal operation.
There are '''two PCBs''', and they are not interchangeable:<ref name="sks" />


== Building & flashing ==
* '''"longboard"''' — C64 long boards, and the 1541 / 1541 Late.
# '''Program the EPROM''' with your chosen images in contiguous 8 KB blocks.  (Popular layout: C= KERNAL bank 0, JiffyDOS bank 1, Diagnostic bank 2, SpeedDOS bank 3 …).
* '''"shortboard"''' — C64C short boards, and the 1541C / 1541-II.
# '''Flash the ATtiny13A''' with ``sks13.hex`` via ISP (AVR-ISP mkII, USBasp, etc.). 
# Solder in sockets and logic ICs; fit 330 Ω LED-sense resistor if you wish to flash the front-panel LED. 
# Plug the assembly into U4, minding orientation; no other wiring needed on long-boards.


== Using the switcher ==
BWACK's own warning is worth repeating: '''the internals of C64 and C64C cases, and of 1541 and 1541C cases, are often mixed up.''' Open the case and look at the board before ordering. A machine in a C64C case is not necessarily a short board.<ref name="sks" />
{| class="wikitable" style="width:80%; text-align:center;"
 
! Action !! Key / button sequence !! Result
== It does need wiring ==
 
The board is not purely a plug-in. '''RESTORE, RESET and EXROM''' are brought to it by soldering 1 × 1 mm pin headers into motherboard vias. Wiring diagrams are published for assemblies '''326298, 250407, 250425, 250466 and 250469'''.<ref name="sks" />
 
== Microcontroller and programming ==
 
The current design uses an '''ATtiny45/85'''; revision 1.20 (July 2019) replaced the earlier '''PIC12F629''', moved the design from Eagle to KiCad and switched development to the Arduino IDE. '''The pinouts of the two microcontrollers are different — do not mix them up.'''<ref name="sks" />
 
Programming is by ISP (USBasp, or an Arduino Uno as ISP) or by high-voltage programmer (TL866). 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.<ref name="sks" />
 
== Revision history ==
 
{| class="wikitable styled-table" style="width:85%; text-align:left;"
|+'''SKS64 revisions'''
! Board !! Revision !! Change
|-
|-
| Next bank || Double-tap reset || Cycles 0 → 1 → 2…
| Longboard || 1.1 (2016-09-08) || First schematic and board; #RESTORE and RED_LED swapped because GP3 is input only
|-
|-
| Previous bank || Hold RESTORE ≥1 s, then tap RUN/STOP || Cycles backwards (firmware ≥1.1)
| Longboard || 1.11 (2016-09-10) || RGB LED header follows the RGB LED pinout (blue–green–GND–red)
|-
|-
| Identify bank || Hold RESTORE ≥3 s || LED blinks current bank count
| Longboard || 1.12 (2016-09-18) || Larger pads and holes; ground fill removed from the top layer; CERN OHL v1.2 applied
|-
|-
| Force cold-boot || Hold RESTORE while power-on || Bypasses autoboot carts
| Longboard || 1.13 (2016-09-28) || IC2 moved to clear the C64 socket
|-
| Longboard || 1.20 (2019-07-14) || KiCad; PIC12F629 → 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 / 1541-II support
|}
|}
<ref name="sks" />
== Credits ==


== Advantages ==
The shortboard version is based on '''Sven Petersen's''' C64 Kernal Adaptor Switch for short boards; an older shortboard version lives in '''DiscoHR's''' repository; and the idea of reusing the original LED and cable assembly comes from '''tebl's''' repository.<ref name="sks" />
* '''No holes or toggles''' – perfect for collector-grade cases. 
* '''One-hand operation''' – useful when the rear panel is obstructed. 
* '''Multiple ROM sizes supported''' – simply fit a larger EPROM for more images. 
* Works in parallel with cartridge port DOS accelerators (e.g., Kung Fu Flash).


== Limitations ==
== Related pages ==
* Cannot change bank while code is executing; must reset. 
* [[JiffyDOS Kernal Upgrade]] — the kernal most people fit one of these for
* Requires stable +5 V (excessive ripple may brown-out the ATtiny)
* [[Commodore 64 Power-Supply Protector (C64 Saver)]]
* Firmware presently uses a fixed LED blink protocol—may clash with aftermarket LED dimmers.
* [[PLA Replacement Options]]
* [[Commodore 64]]


== See also ==
== References ==
* [[JiffyDOS Kernal Upgrade]] – the most common alternative ROM paired with this adapter 
<references />
* [[Commodore 64 Power-Supply Protector (C64 Saver)|C64 Saver]] – advisable PSU-protector when fitting any internal mod 


[[Category:Commodore 64 Modifications and Enhancements]]
[[Category:Commodore 64 Modifications and Enhancements]]
[[Category:Commodore Systems]]
[[Category:Commodore Systems]]

Latest revision as of 22:25, 23 September 2026

Switchless kernal switcher (SKS64)
Caption An SKS64 switchless kernal switcher
Type Internal ROM adapter and kernal switcher
Designer BWACK
Manufacturer Unknown
First released Unknown
Latest revision
Operating voltage
Layers / PCB
Compatibility Commodore 64, C64C, 1541, 1541C, 1541-II
Features
Model No.

A switchless kernal switcher plugs into the KERNAL ROM socket and lets the machine hold several kernal images at once, selected from the keyboard rather than from a toggle switch drilled through the case. The best-documented design is BWACK's SKS64.

Every figure below comes from the project's own README and change log.[1]

How you actually switch kernals

[edit | edit source]

There is no double-tap of the reset button and no RUN/STOP combination. The sequence is:[1]

  1. Hold RESTORE for several seconds, until the LED flashes.
  2. Release, then tap RESTORE repeatedly until the LED shows the colour of the kernal you want.
  3. Wait a couple of seconds. The machine resets itself into the selected kernal.

The selected bank is shown as a colour on an RGB LED fitted in place of the power LED — not as a count of blinks.[1]

Reset and cold start

[edit | edit source]
RESTORE key timings
Hold RESTORE for Result
~2 seconds LED flashes; release and wait two seconds for a reset
~5 seconds EXROM reset — a cold start
Several seconds, then tap Enter bank selection

The EXROM reset exists for a real problem: some machine-language programs change how the machine returns from a reset, and without control of EXROM the only way back to BASIC is to power the machine off. By pulling RESET and EXROM together the board can cold-start it.[1]

EXROM reset is only available if the ATtiny's own RESET pin has been disabled by programming the #RSTDISBL fuse — and that can only be done with a high-voltage programmer such as a TL866, not with an ISP programmer. Decide this before you solder the microcontroller down.[1]

It switches the disk drive too

[edit | edit source]

This is the feature most descriptions miss. If an SKS64 is also fitted in the drive and set to 1541 mode, the reset pulse the board issues carries prepended serial data naming the bank number, so the drive switches to its upper bank when the computer switches to bank 1. Fit JiffyDOS in bank 1 on both and the computer and the drive change over together — which is what you want, because a JiffyDOS kernal talking to a stock drive gains you nothing.[1]

ROM layout

[edit | edit source]

Images are placed in 8 K banks on the computer and 16 K banks on the 1541C/1541-II:[1]

What fits in which device
Machine 27C256 (32 K) W27C512 (64 K)
C64 long board 4 kernals 8 kernals
C64 short board BASIC + 3 kernals BASIC + 7 kernals
1541 CBM DOS + JiffyDOS in a 16 K image (27C128)
1541C / 1541-II KERNAL+CBMDOS and KERNAL+JiffyDOS in a 32 K image (27C256)

The short board loses a slot to BASIC. That is not a design compromise, it is the machine: on assembly 250469 the BASIC and KERNAL ROMs are combined into a single 23128 at U4, so the adapter has to carry BASIC in every image set.[2]

Two different boards

[edit | edit source]

There are two PCBs, and they are not interchangeable:[1]

  • "longboard" — C64 long boards, and the 1541 / 1541 Late.
  • "shortboard" — C64C short boards, and the 1541C / 1541-II.

BWACK's own warning is worth repeating: the internals of C64 and C64C cases, and of 1541 and 1541C cases, are often mixed up. Open the case and look at the board before ordering. A machine in a C64C case is not necessarily a short board.[1]

It does need wiring

[edit | edit source]

The board is not purely a plug-in. RESTORE, RESET and EXROM are brought to it by soldering 1 × 1 mm pin headers into motherboard vias. Wiring diagrams are published for assemblies 326298, 250407, 250425, 250466 and 250469.[1]

Microcontroller and programming

[edit | edit source]

The current design uses an ATtiny45/85; revision 1.20 (July 2019) replaced the earlier PIC12F629, moved the design from Eagle to KiCad and switched development to the Arduino IDE. The pinouts of the two microcontrollers are different — do not mix them up.[1]

Programming is by ISP (USBasp, or an Arduino Uno as ISP) or by high-voltage programmer (TL866). 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 → 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 / 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 lives in DiscoHR's repository; and the idea of reusing the original LED and cable assembly comes 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 1.11 1.12 1.13 BWACK, C64 Switchless Multi Kernal 27C256 adapter (SKS64), https://github.com/bwack/C64-Switchless-Multi-Kernal-27C256-adapter . README and change log. Source for the designer, the CERN Open Hardware Licence v1.2, the supported machines, the RESTORE-key switching, reset and EXROM-reset sequences, the RGB-LED bank indication, the ROM bank layouts for long boards, short boards, the 1541 and the 1541C/1541-II, the two PCB variants, the ATtiny45/85 and its predecessor the PIC12F629, the programming routes, the via-wiring requirement for RESTORE, RESET and EXROM, the machines for which wiring diagrams are published, the acknowledgements, and the revision history.
  2. C64 Hardware Reference and Repair Guide (open_cerebrum), https://opencbm.org/doc/c64/hardware_reference_and_repair_guide/pcb/250469.html . Community reference. Component placement for assembly 250469: U4 is a 23128 holding both BASIC ($A000–$BFFF) and KERNAL ($E000–$FFFF).