Jump-less Dual-Kernal Switcher: Difference between revisions
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 |
|||
| (2 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
{{Infobox hardware | {{Infobox hardware | ||
| name = | | name = Switchless kernal switcher (SKS64) | ||
| image = [[File:Switchless-Kernal-SKS64.jpg|250px]] | | image = [[File:Switchless-Kernal-SKS64.jpg|250px]] | ||
| caption = | | caption = An SKS64 switchless kernal switcher | ||
| developer = | | developer = BWACK | ||
| type = Internal | | type = Internal ROM adapter and kernal switcher | ||
| | | application = Commodore 64, C64C, 1541, 1541C, 1541-II | ||
| | | licence = CERN Open Hardware Licence v1.2 | ||
}} | }} | ||
<templatestyles src="Template:StyledTable/styles.css" /> | |||
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.'''<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: | |||
! | == 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''' | ||
| | |||
|- | |- | ||
| | | ~5 seconds || '''EXROM reset''' — a cold start | ||
|- | |||
| Several seconds, then tap || Enter bank selection | |||
|} | |} | ||
The | 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 == | ||
{| class="wikitable | |||
! | 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" /> | ||
== ROM layout == | |||
Images are placed in '''8 K banks''' on the computer and '''16 K banks''' on the 1541C/1541-II:<ref name="sks" /> | |||
{| class="wikitable styled-table" style="width:90%; text-align:left;" | |||
|+'''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.<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> | |||
== Two different boards == | |||
There are '''two PCBs''', and they are not interchangeable:<ref name="sks" /> | |||
* '''"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.<ref name="sks" /> | |||
== | == 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" /> | ||
{| class="wikitable" style="width: | |||
! | == 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 | |||
|- | |||
| 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 | |||
|} | |} | ||
<ref name="sks" /> | |||
== Credits == | |||
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" /> | |||
== | == Related pages == | ||
* | * [[JiffyDOS Kernal Upgrade]] — the kernal most people fit one of these for | ||
* | * [[Commodore 64 Power-Supply Protector (C64 Saver)]] | ||
* | * [[PLA Replacement Options]] | ||
* [[Commodore 64]] | |||
== | == References == | ||
<references /> | |||
[[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
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]
- 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.[1]
Reset and cold start
[edit | edit source]| 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]
| 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]| 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 |
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]
Related pages
[edit | edit source]- JiffyDOS Kernal Upgrade — the kernal most people fit one of these for
- Commodore 64 Power-Supply Protector (C64 Saver)
- PLA Replacement Options
- Commodore 64
References
[edit | edit source]- ↑ 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.
- ↑ 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).