Flat Commodore 128 From 16k to 32k ROMs and Switchless JiffyDOS Kernal

I have been wanting to put JiffyDOS on my Commodore 128. My 1541ii came with JiffyDOS, but none of my Commodore Computers did. I recently purchased JiffyDOS from RETRO Innovations, I am also doing a 4 way Switchless JiffyDOS setup on my Commodore 64.

The Commodore 128 Flat model shipped setup with 16k ROMs, it can be switched over to using 32k ROMs by setting some jumpers. If you switch it to 32k ROMs then there are only 2 ROMs required instead of 4. The ROMs that shipped in the Commodore 128 Flat model area also older than what is available. I wanted to update the Basic ROM, and the Kernal as well, so it is nice to only need two eproms instead of four.

In this case I am going to switch to the 32k ROMs, and also install a Switchless JiffyDOS ROM.

To change the Commodore 128 Flat from 16kB ROMs to 32kB ROMs we just have to install jumpers or bridge J3, J4, and J6. I am going to put in Jumpers to make it easy to switch back if needed. You will find instructions at various sources that tell you to do a mod that will connect the one jumper differently (J4) so that you can use the Commodore 128DCR ROM. I found that they did apparently make a Commodore 128 “Flat/D” 32k ROM, well I can’t tell where it came from, but it is listed like it has a Commodore Part Number. I decided to go with just putting in the jumpers for J3, J4 and J6 using the C128 “Flat/D” specific ROM. You can alternately make this slightly different ROM, it is about the order of the data on it.

To setup the JiffyDOS 32K ROM Set. We pull U33 (16k) and U34 (16k) and install the 32k U34 to replace them. That new ROM is the basic.390393-01.bin (32kB).

The second ROM we pull the 16K U32 and U35. Since I am doing the JiffyDOS Switchable ROM, I am making a 64K ROM to replace the original U32.

Switched C128/C128DCR KERNAL ROM (64kB):
basic.901226-01.bin (C64 Basic)
kernal.901227-03.bin (C64 Kernal)
kernal.318020-05.bin (C128 Kernal)
basic.901226-01.bin (C64 Basic)
JiffyDOS_C64_6.01.bin (C64 JiffyDOS Kernal)
JiffyDOS_C128DCR_6.01.bin (C128 JiffyDOS Kernal)

To do the Switched ROM we keep Pin1 (A15) bent out, and not inserted in the Socket. If I was going to do a Kernal “Switch”, then I would wire a 4.7k (recommended value I found) Resistor from Pin1 (A15) to Pin28 (VCC). Then put a switch between Pin1 and Ground. I am going to use an Arduino Pro Mini, it will not need the Pullup Resistor. I expect you could do Kernal Switcher that does more than two modes by making a 128K ROM, but for the Commodore 128 I don’t know of other Kernals that I care to use. That would also be a 32PIN Eprom so an adapter would also be required. If you did stick with the 16k ROMs, you could then alternately use 64k Eproms to setup a 4 way ROM Switcher.

I am basing the Arduino Pro Mini code on a modified version of Adrian Black’s C64 Kernal Switcher. It will be modified to only switch between two modes instead of four. I am starting with Mark Ormond’s modified version of the code as the basis. I only need to trigger switching A15 on one Eprom. It was setup to control 2 Eproms and rotate through more ROMs triggering several Address lines. With 16k ROMs on the Commodore 128 you do need to control 2 different ROMs. The board will be wired with a Current Limiting Resistor to the PowerLED to show the status changes. It will be triggering A15 on the 64k ROM triggering it to use either the upper or lower 32k portion. It will also be wired to the ResetLine, EXROMLine and RestoreKey, as well as Ground and 5V.

Above is the starting point. We have the four 16k ROMs installed. The first part of this modification is to remove them and install the jumpers to switch the system over to 32k ROM mode. That is just adding the 3 jumpers to the board.

There was a bit of an issue with that, the pins are not standard jumper pin spacing, I slightly bent the bottom part of the jumper to get it inserted. I do know there is a smaller size jumper I have seen on other equipment, but I don’t have the pins or jumpers to put on them. After bending the pins a bit they did fit well. I then got out some spare jumpers and installed them. By using the jumpers I can easily switch to 16k ROMs again if I want.

The next thing I had to do was put in the connections for the Switchless Kernal Switcher. It also handles doing a Hard Reset, well it is supposed to. I don’t know how it works with the Commodore 128 as I have only seen such mods on Commodore 64s. I wanted to make it removable, so I put in pins where I could, even to the point of putting pins on the side of two of the 74 logic ICs. That made it so I can detach the Pro Mini board and go back to normal ROMs, be it 32k or 16k ROMs. Also if the Pro Mini fails I can more easily switch it out. Be sure to get a 5V Pro Mini, not a 3.3V model.. The only wire directly soldered to the Pro Mini without a connector on the other end is for the Eprom, but it is socketed itself, so not a huge deal.

The last pin is Pin 1 of the new U32. It needs to kept out of the socket and wired to the Pro Mini pin5.

U32 Pin 1 is Not in the Socket, is it connected just to the white wire.

Above you can see the new 64k Switched U32, and the 32k U34 in place. It may not be visible but Pin 1 on U32 is Not in the Socket, it is sticking out on the side and not making contact to the socket. The wire there goes over to Pin5 on the Pro Mini. Since I am using the Pro Mini, as I mentioned there is no Pullup Resistor from Pin 1 to Pin 28 on U32 like would be done with a “switch” based JiffyDOS setup.

I have modified Adrian/Mark’s code so that by default it will do a 4 way Kernal Switch for the Commodore 128. That can only be done with 16k ROMs though. Mark had it setup for 16k ROMs with a 4 way switch for only 1 of the ROMs and only doing 2 way for the second. That has a use, being you can use a smaller Eprom for the 2 way mode, but my version would have to be modified to do that. It now does a 4 way switch for both Commodore 128 16k ROMs by default. I added a “Max ROMs” entry that is set to 4 by default, but for my use I set that to 2 as I am using 32k ROMs and only have 2 sets of ROMs. Well I set it for 2 the second time around, I thought I messed up the code when it was trying to do a 4 way switch initially. I miswired the U32 Pin 1 to the wrong output of the Pro Micro, so I had to fix that too. Other than those two little issues it worked.

There is also the oddity that when it resets, the Commodore 128 goes into 64 Mode. Maybe it doesn’t like the Exrom Reset? It does properly remember the selected Kernal, and it does go into 128 mode when powered on based on the saved Kernal setting, the factory Reset button on the 128 also takes you to 128 Mode. You may catch that the RF Modulator was changed out on the pictures, you can also find the post other recent post about the RF Mod. The RF Modulator change was certainty worth it for the video quality improvement for 40 Column output. I did all of the changes at the same time.

I’m going to work on getting the code uploaded to Github as a branch to Mark’s release. I plan to add some instructions and pictures. Mark does have his pictures and a guide posted at another site, but he has the code at Github.

I am not certain the code below is correct for 16k 4 way switching for the C128 or not. I was getting U35 and U32 etc all mixed up when working on it. It is the code I compiled and used on my 2 way, except below it is set for 4 way switching with that one variable “NumROMs”.

#include <EEPROM.h>

// C64/C128 Kernel Switcher and Restore Key Reset/Selector
// Version 1.3 - 03-26-2023 Updates - By Travis Durf

// Based on C64 Kernel Switcher - 26-March-2019 - By Adrian Black
// Restore Key Mod: https://www.breadbox64.com/blog/c64-restore-mod/
// Initial C128 Changes - 06-22-2020 - By Mark Ormond aka dabone

/*
             "The Simple" Pro-Mini

           DTR  TX   RX   VCC  GND  GND
        +--------------------------------+
        |  [ ]  [ ]  [ ]  [ ]  [ ]  [ ]  |
        |              FTDI              |
    D1  | [ ]1/TX                 RAW[ ] |    
    D0  | [ ]0/RX                 GND[ ] |    
        | [ ]RST        SCL/A5[ ] RST[ ] |   C6
        | [ ]GND        SDA/A4[ ] VCC[ ] |    
    D2  | [ ]2/INT0    ___         A3[ ] |   C3
    D3  |~[X]3/INT1   /   \        A2[ ] |   C2
    D4  | [X]4       /PRO  \       A1[ ] |   C1
    D5  |~[X]5       \ MINI/       A0[ ] |   C0
    D6  |~[X]6        \___/    SCK/13[ ] |   B5
    D7  | [X]7                MISO/12[ ] |   B4
    B0  | [X]8      [RST-BTN] MOSI/11[ ]~|   B3
    B1  |~[X]9  GND[ ]A6[ ]A7[ ]SS/10[X]~|   B2
        +--------------------------------+  
 
Based on: http://busyducks.com/ascii-art-arduinos

D3 to EXROMLine (C128 U11 (PLA) Pin12)
D4 to PowerLED to 220 Ohm resistor to Power LED
D5 to C64 A13, C128 U32 (A14) Pin27 
D6 to C64 A14 27256(32kB), C128 U32 (A15) Pin1 With 27512(64kB) EEPROM 32kB ROMs
D7 to ResetLine (C128 U63 Pin2)
D8 to RestoreKey (C128 U16 Pin9)
D9 to C128 U35 (A14) Pin27
D10 to C128 U35 (A15) Pin1 With 27512(64kB) EEPROM 16kB ROMs

Set "NumROMs" to be the Maximum Number of ROMs.  2-4 Default is "4"

For Commodore 64:
To do 4 ROM Sets you can use a 27256(32kB) EEPROM with A13 and A14
You can use a 27128(16kB) EEPROM and do 2 ROM Sets with A13.

For Commodore 128:
To do 4 ROM Sets on a stock C128 Flat that uses 16k ROMs you can use 27512(64kB) EEPROMs with A14 and A15
You can use 27256(32kB) EEPROMs and do 2 ROM Sets with A14.

For C128 Flat/D set to 32kB ROMs, or DCR (Both use 32kB ROMs), you can use 27512(64kB) EEPROMs to do 2 ROM sets with A15. 
When doing 32kB C128 ROMs you only use U32 and only use A15 as A14 is kept in the Socket and controlled by the C128.
U35 is removed in the 32kB ROM configuration and is now included in the 32kB based U32 now.  The drawback here is you can only
do two ROM Sets with the 27512 EEPROMs.
The C128 Basic ROMs must be replaced with a new 32kB Basic ROM (basic.390393-01.bin) in U34, also removing U33.

*/

const int EXROMLine = 3;    // Output the /EXROM line
const int PowerLED = 4;     // Output Power LED
const int PowerLEDAlt = 13; // Output Power LED (onboard LED)
const int RomAOne = 5;      // Output EPROM C64 A13 (C128 16kB Mode U32 Pin27 A14, 32kB Mode U32 Pin1 A15)
const int RomATwo = 6;      // Output EPROM C64 A14 (C128 16kB Mode U32 Pin1 A15 27512 EEPROM)
const int ResetLine = 7;    // Output to /RESET line
const int RestoreKey = 8;   // Input Restore key
const int RomBOne = 9;      // Output EEPROM C128 16kB U35 Pin27 A14
const int RomBTwo = 10;     // Output EEPROM C128 16kB U35 Pin1 A15 27512 EEPROM


int RestoreDelay = 2000;    // 2000ms delay for restore key
const int FlashSpeed = 75;  // LED Flash delay

const unsigned long repeatdelay = 500; // used for debouncing
 
const int NumROMs = 4;		// Maximum Number of ROMs
int CurrentROM;				// which rom is select (0-3)
int debouncecounter = 0;	// how many times we have seen new value (for debounce)
int debouncereading;
int debounce_count;
int RestoreHeld;
unsigned long TimeHeld;     // amount of time Restore is held down

int buttonDuration = 0;     // for keeping track of how long restore is held down
boolean buttonHeld = 0;     // for keeping track when you are holding down 
boolean Released = 0;       // Keeping track when the restore key is released
boolean holdingRestore = 0; // Keeping track if you are holding restore
boolean resetSystem = 0;    // keep track whether to reset

int buttonInput;            // used to return if restore is held
unsigned long time;         //used to keep track of millis output
unsigned long htime;        //used to keep track of millis output
unsigned long btime;        //used to keep track of bounce millis output

void setup() {
  pinMode(PowerLED, OUTPUT);
  pinMode(PowerLEDAlt, OUTPUT);
  pinMode(RomAOne, OUTPUT);
  pinMode(RomATwo, OUTPUT);
  pinMode(RomBOne, OUTPUT);
  pinMode(RomBTwo, OUTPUT);
  pinMode(ResetLine, INPUT);
  pinMode(EXROMLine, INPUT);
  pinMode(RestoreKey, INPUT);

  digitalWrite(PowerLED, HIGH); // turn on the power LED

  digitalWrite(ResetLine, LOW); // keep the system reset
  pinMode(ResetLine, OUTPUT);   // switch reset line to OUTPUT so it can hold it low
  digitalWrite(ResetLine, LOW); // keep the system reset

  CurrentROM = EEPROM.read(1);
  SetSlot(CurrentROM);
  delay(200);
  pinMode(ResetLine, INPUT);    // set the reset pin back to high impedance which releases the INPUT line
  delay(1000);                  // wait 1000ms 
  FlashLED(CurrentROM);         // flash the power LED to show the current state
  
  // all set!
}

void loop() {
  buttonInput = readButton(); delay(500);
  time = millis(); // load the number of milliseconds the arduino has been running into variable time
  if (buttonInput == 1) {
    if (!buttonHeld) {
      htime = time; TimeHeld = 0; buttonHeld = 1; } //restore button is pushed
    else { 
      TimeHeld = time - htime; } // button is being held down, keep track of total time held.
  }
  if (buttonInput == 0) {
    if (buttonHeld) {
      Released = 1; buttonHeld = 0; htime = millis(); TimeHeld = 0; //restore button not being held anymore
    } 
  }
  
  if (TimeHeld > RestoreDelay && !Released) { // do this when the time the button is held is longer than the delay and the button is released
    htime = millis();
    if (holdingRestore == 0) { FlashLED(CurrentROM); holdingRestore = 1; resetSystem = 1; } // first time this is run, so flash the LED with current slot and reset time held. Set the holding restore variable.
    else {
      if (CurrentROM < NumROMs - 1) { CurrentROM++; SaveSlot(CurrentROM); } // or you've already been holding restore, so increment the current ROM slot otherwise reset it to 0
      else { CurrentROM = 0; SaveSlot(CurrentROM); }
      if (TimeHeld > RestoreDelay) { TimeHeld = 0;}  // reset the time held
      FlashLED(CurrentROM); //flash the LED
    }
  }
  
  if (Released) {
    //if time held greater than restore delay, reset the system, set the current rom slot, reselt the time held and holding restore
    if (resetSystem) { // on do this if the reset system has been set above
      htime = millis();
      resetSystem = 0;
      holdingRestore = 0;
      Released = 0;
      digitalWrite(ResetLine, LOW); // keep the system reset
      digitalWrite(EXROMLine, LOW); // keep the EXROM line low
      pinMode(ResetLine, OUTPUT);
      pinMode(EXROMLine, OUTPUT);
      digitalWrite(ResetLine, LOW); // keep the system reset
      digitalWrite(EXROMLine, LOW); // keep the EXROM line low
      delay(50); // wait 50ms
      SetSlot(CurrentROM); // select the appropriate kernal ROM
      delay(200); // wait 200ms before releasing RESET line
      pinMode(ResetLine, INPUT); // set the reset pin back to high impedance so computer boots
      delay(300); // wait 300ms before releasing EXROM line
      pinMode(EXROMLine, INPUT); // set the reset pin back to high impedance so computer boots
    } else { //otherwise do nothing
      htime = millis(); Released = 0; resetSystem = 0; holdingRestore = 0;
    }
  }
// finished with loop  
}

int readButton() {
 if (!digitalRead(RestoreKey) && (millis() - btime >= repeatdelay)) {
  for(int i = 0; i < 10; i++)
    {
      debouncereading = !digitalRead(RestoreKey);

      if(!debouncereading && debouncecounter > 0)
      {
        debouncecounter--;
      }
      if(debouncereading)
      {
        debouncecounter++; 
      }
      // If the Input has shown the same value for long enough let's switch it
      if(debouncecounter >= debounce_count)
      {
        btime = millis();
        debouncecounter = 0;
        RestoreHeld = 1;
      }
    delay (10); // wait 10ms
    }
   } else {
    RestoreHeld = 0;
   }
return RestoreHeld;
}


void SaveSlot(int CurrentRomSlot) {
  // Save Current ROM selection (0-3) into EPROM
  EEPROM.write(1,CurrentRomSlot);
}

void FlashLED(int flashcount) {
    // Flash the LED to represent which ROM slot is selected
    switch (flashcount) {
    case 0:
      digitalWrite(PowerLED, LOW);
      digitalWrite(PowerLEDAlt, LOW);
      delay(FlashSpeed);
      digitalWrite(PowerLED, HIGH);
      digitalWrite(PowerLEDAlt, HIGH);
      break;
    case 1:
      digitalWrite(PowerLED, LOW);
      digitalWrite(PowerLEDAlt, LOW);
      delay(FlashSpeed);
      digitalWrite(PowerLED, HIGH);
      digitalWrite(PowerLEDAlt, HIGH);
      delay(FlashSpeed);
      digitalWrite(PowerLED, LOW);
      digitalWrite(PowerLEDAlt, LOW);
      delay(FlashSpeed);
      digitalWrite(PowerLED, HIGH);
      digitalWrite(PowerLEDAlt, HIGH);
      break;
    case 2:
      digitalWrite(PowerLED, LOW);
      digitalWrite(PowerLEDAlt, LOW);
      delay(FlashSpeed);
      digitalWrite(PowerLED, HIGH);
      digitalWrite(PowerLEDAlt, HIGH);
      delay(FlashSpeed);
      digitalWrite(PowerLED, LOW);
      digitalWrite(PowerLEDAlt, LOW);
      delay(FlashSpeed);
      digitalWrite(PowerLED, HIGH);
      digitalWrite(PowerLEDAlt, HIGH);
      delay(FlashSpeed);
      digitalWrite(PowerLED, LOW);
      digitalWrite(PowerLEDAlt, LOW);
      delay(FlashSpeed);
      digitalWrite(PowerLED, HIGH);
      digitalWrite(PowerLEDAlt, HIGH);
      break;
    case 3:
      digitalWrite(PowerLED, LOW);
      digitalWrite(PowerLEDAlt, LOW);
      delay(FlashSpeed);
      digitalWrite(PowerLED, HIGH);
      digitalWrite(PowerLEDAlt, HIGH);
      delay(FlashSpeed);
      digitalWrite(PowerLED, LOW);
      digitalWrite(PowerLEDAlt, LOW);
      delay(FlashSpeed);
      digitalWrite(PowerLED, HIGH);
      digitalWrite(PowerLEDAlt, HIGH);
      delay(FlashSpeed);
      digitalWrite(PowerLED, LOW);
      digitalWrite(PowerLEDAlt, LOW);
      delay(FlashSpeed);
      digitalWrite(PowerLED, HIGH);
      digitalWrite(PowerLEDAlt, HIGH);
      delay(FlashSpeed);
      digitalWrite(PowerLED, LOW);
      digitalWrite(PowerLEDAlt, LOW);
      delay(FlashSpeed);
      digitalWrite(PowerLED, HIGH);
      digitalWrite(PowerLEDAlt, HIGH);
      break;
    default:
      digitalWrite(PowerLED, LOW);
      digitalWrite(PowerLEDAlt, LOW);
      delay(FlashSpeed);
      digitalWrite(PowerLED, HIGH);
      digitalWrite(PowerLEDAlt, HIGH);
      break;
  }
}

void SetSlot(int DesiredRomSlot) {
    // Select the actual ROM slot being used
    switch (DesiredRomSlot) {
    //Stock-Kernal0
    case 0:
      digitalWrite(RomAOne, LOW);
      digitalWrite(RomATwo, LOW);
      digitalWrite(RomBOne, LOW);
      digitalWrite(RomBTwo, LOW);
      break;
    //Kernal1
    case 1:
      digitalWrite(RomAOne, HIGH);
      digitalWrite(RomATwo, LOW);
      digitalWrite(RomBOne, HIGH);
      digitalWrite(RomBTwo, LOW);
      break;
    //Kernal2
    case 2:
      digitalWrite(RomAOne, LOW);
      digitalWrite(RomATwo, HIGH);
      digitalWrite(RomBOne, LOW);	  
      digitalWrite(RomBTwo, HIGH);
      break;
    //Kernal3  
    case 3:
      digitalWrite(RomAOne, HIGH);
      digitalWrite(RomATwo, HIGH);
      digitalWrite(RomBOne, HIGH);
      digitalWrite(RomBTwo, HIGH);
      break;
    default:
      digitalWrite(RomAOne, LOW);
      digitalWrite(RomATwo, LOW);
      digitalWrite(RomBOne, LOW);
      digitalWrite(RomBTwo, LOW);
      break;
  }
}

While I was working on the Commodore 128, I had been having issues with the Cartridge Port reading correctly. So while I had the board out I reflowed all the pins on the cartridge port. Upon getting the Kernal Switcher (and RF Modulator change) done I put in two different cartridges and both worked properly the first time. I’m hoping this means my Commodore 128 is in good working order now. It is annoying not being able to use cartridges reliably. I do have JiffyDOS now. I need to try it out with my 1541ii that has a Vintage JiffyDOS rom in it. I also purchased JiffyDOS for the 1541, and will be putting it on my pi1541 and trying that out. But not tonight, it is way to early in the morning to start that, I am going to go get some sleep. I was nice getting a number of these projects wrapped up today/ in the last 24hours.

I realized I forgot to show a JiffyDOS 128 80 Column RGB Video screen shot. You see it adds the JiffyDOS line to the startup screen there.

Commodore 64 326298 Rev A 1982(FAB 326295 Rev D) Reset Mod and Switchless Kernal Mod

The Commodore 64 326298 Rev A has a different reset circuit. The 556 is wired in with a way that it keeps the reset line pulled to 5V and will supply as much current to that as it can. There are various ways to rework the circuit from over the years. I was looking at the least invasive way to accomplish this. I ran across a post on the Backbit Forum, as this reset being the way it is prevents the Backbit cartridge from working properly. It also affects other cartridges that use the Reset or have Reset buttons integrated into them. When they try to pull Reset to Ground the 556 works hard to keep it from resetting. It may crash the computer or cause glitches, probably as much as anything because it pulls the 5V line down starving the computer for power.

The process posted on the forum was to install a 1k Resistor in R36. This is a pull up resistor that keeps the Reset line pulled to 5V but “gently”. If it is missing the system could randomly reset, or be stuck in reset. The second part is to disconnect Pin9 on the 556 IC. We only want to disconnect the pin, the “wire” that is in the board there needs to remain connected. The simplest and easiest way to accomplish this would be to cut the leg off the 556. I didn’t want to do that.

What I ended up doing was desoldering the 556 from the board. I then took a 14pin machine pin IC Socket and clipped the bottom of Pin9 from it. I then paced he modified socket into the board so that Pin9 on the 556 is not going to the board. The Wire though is still going from the Pin9 Pad to Pin13 but that wire is no longer making contact with Pin9 of the 556. I then installed the 556 into the socket. On power on the system didn’t work. I checked the work, and then also tested the 556. The 556 had failed, it may have been during desoldering it, but it also may be that a portion of the 556 had been damaged by trying to use the Reset button on my cartridge. It may still have worked with Pin9 connected. I did have a spare so I tested the replacement and installed it. On powering it up the system worked normally again. I also tested using the reset button on the cartridge and that worked properly now. R36 is installed, it is a 1.5k resistor, a special precision one I have a small stock of, as I was short on 1k resistors at the time.

I believe if I had not done the Reset Modification that my next Modification, the Switchless Kernel ROM probably wouldn’t have worked normally. It also pulls Reset low, which it couldn’t sink all the current required to overcome the 556 previously.

C38 was previously replaced with a 4.7nF capacitor when I replaced the Electrolytic Capacitors to make the Restore key responsive. With the factory 51pF capacitor you have the hit the Restore key quite hard to get it to register usually, I don’t know if that would in any way affect the Kernal Switcher, as I haven’t seen it said that mod needs to be done. I did it as part of the recaping process based on it being recommended by Console5 where I purchased the kit. It did work as described, I tested both before and after switching that capacitor out.

Kernel Switcher:

The I am using bwak’s SKS64 “C64-Switchless-Multi-Kernal-27C256-adapter” project. This is a custom PCB that works as an adapter to install a 27256 as a 4 way Kernal ROM replacement. It is controlled with an ATTiny85, an early version used a PIC instead. I happened to have some ATTiny85s and liked the idea of using one for this. There are also ATMega based Arduino type board options out there. I am using a Pro Mini Arduino board for my Commodore 128 Switchless Kernal. This ATTiny was a neater solution for this, it is a all-in-one optkoon as we already need an adapter board to convert the 27256 to work with the Commodore 64.

It has very good documentation at his Github page. There are considerations on what order your solder the parts together. He does cover that in his documentation.

The documentation shows where you can tap into the required signals on the C64 mainboard. The Reset, Restore and EXRom lines. Keep in mind the images below are for the 326298 Rev A, the guide from bwak shows similar images of all the various board types for reference.

I preped the board putting in single angled pin headers for the three signals and replaced the old single wipe socket for the Kernal ic. Of course I messed up and used the only socket I had, which you can see in the picture is solid in the center so the ATTiny85 on the bottom of the adapter can’t go in place.. So I have to replace it again, this time with machine pin header strips, as I don’t have an appropriate machine pin or other hollowed out socket to put on the board.

Opps wrong socket..

Since I had the wrong socket, I had to use the Turn Pin socket strips.

Now that the socket problem is sorted, I can get the adapter installed.

Switcher with the required header wires.

I was glad I was able to use some premade dupont cables I had. They are actually all premade cables from my breadboard cables I have. For the LED cable I just swapped the single dupont plastic holder for a tripple holder. There is an issue with just using the stock Red LED, but for now it works.

Note: I quickly replaced the Stock Red LED with a RGB LED, while it worked and the pictures in this section are showing the wiring for that, you only had the LED on if it was in Kernal 1, so the computer didn’t give an indication on the case that the power was on. The code could be change to always keep the RED LED on and just blink, but I didn’t want to look into what that involved. I just went with swapping to the RGB LED as I had them anyways.

The documentation is a lacking information on making the file to program the Eprom. You can get information from bwak on doing similar things by looking at the documentation on his VersaCart project. I’ll cover some basics blow.

The 27c256 is a 32k Eprom that can hold four 8k Kernal ROMs. I program the Eprom with my TL866ii plus.

To prepare the bin file for the Eprom. I collected them all in the same folder. I am using the Stock Kernal for the first one, then JiffyDos from RetroInovations, MasterRom 64, and JaffyDos (customized JiffyDos). Taking those 4 files in a folder, then open a Command Prompt window and while in the folder with the files use the command below. This is for the exact filenames I had, so your do need to be sure to enter the filenames you have instead. The U4_32KuB.bin is the 32k bin file I will use with my TL866ii to program the 27c256 Eprom. The code below it all in 1 line, if it is wrapped to two or more lines when viewing this page keep that in mind.

copy /b kernal.901227-03.bin+JiffyDOS_C64_6.01.bin+MASTEROM64_V3.0.BIN+jaffydos.bin U4_32KuB.bin

I will say JaffyDOS was a bit annoying to create. I couldn’t find proper instructions on how to accomplish it. JaffyDOS is created with a Commodore 64 .prg. You need to run it from the Commodore 64 Vice Emulator. You answer some customization settings once you manage to get it mounted properly and get it to where it can find your “JiffyDOS_C64_6.01.bin” which it has to be able to access. Running it properly will then create the jaffydos.bin file in the same folder as “JiffyDOS_C64_6.01.bin” had been located in. I did find some apparently outdated and possibly incomplete instructions and fumbled through getting the prg in Vice and the folder where the JiffyDOS bin was.

Once you have the 32k bin it is a simple task to use the TL866ii to burn the data to the Eprom. I will not go into detail on that, it is easy to find instructions on using at TL866 to program an Eprom or EEprom etc.

So the next bit that was a bit lacking in the documentation is programming the ATTiny85. You need to setup the Arduino IDE to be able to use the ATTiny85, and use bwak’s files to compile the program file. bwak does cover that you need to disable the Reset pin on the ATTiny if you want to use the EXRom function which enables doing a Hard Reset rather than the standard “Soft” Reset, if you are just using the Arduino IDE to program the ATTiny, then I don’t know how you disable the Reset pin, I think one or more of the ATTiny board types can do that. The ATTiny core I use for Arduino apparently doesn’t, or doesn’t make it obvious how to to it. The main reason I expect is they don’t want it to be easy for you to accidentally doing it without knowing that you will no longer be able to program the ATTiny with the Arduino IDE you will then have to use a HV(High Voltage) Programmer. If you have a TL866ii, it is a HV Programmer, it can set the Reset disable fuse, and also enable reset again if needed as well. He does cover that in his document. I actually used the Arduino IDE to program the ATTiny85, then used the TL866ii Plus to disable the ATTiny’s Reset pin fuse. You can also use the TL866ii to upload the Hex file created by the Arduino IDE though, which is in bwak’s document.

For now I just have the Stock LED in place. I will have to finish wiring up a RGB LED so I can then see which ROM is enabled by looking at it. I was hoping it would just keep the standard LED enabled, maybe somewhere in the code there is an option to tell it to just use the RED LED, I didn’t notice it though. The board looks like it is intended to be alternately used with the Stock LED though.

Beyond the LED being off for all but the First ROM (the Stock ROM in my case) it is working great. I’ll get that LED wired up and installed shortly. I have the right RGB LED, I just didn’t get around to making it up initially, I really didn’t want to make it up. I may look at the Code and see if there is an option to change the LED output behavior it is about as easy to make up the RGB LED as it is to pull the chip and recompile the code.

Commodore 128 / Commodore 64 Shortboard RF Module Replacement

I have been unhappy with the regular 40 Column video output on my Commodore 128. Watching a video by TheRetroChannel on Youtube, I saw his RF Module replacement. I feel technically that is not the right thing to call these types of boards, they “replace” the RF Module, but they are not “Replacement RF Modules”. You loose the “RF” Output, this really isn’t an issue as not many people would likely want to ever connect up the Commodore 128/64 by RF to an old TV tuned to Channel 3/4.

He released the board designs on Github as open source projects. There are two versions the C64 Longboard and the C64 Shortboard/C128 versions. For the Commodore 128 I needed the short board version, so I ordered them from JLCPCB. This is specifically the board that fits the Commodore 64 Short Board and Commodore 128 as they share the same type of Modulator. He also made a Commodore 64 Long Board version, they are basically the same but the Long Board version is a bit larger pcb to fit the Long Board properly.

https://github.com/TheRetroChannel/C128-C64-Shortboard-RF-replacement

The boards have various options on them. I have populated everything except the C64 Hard Reset section. This is for a Commodore 128 after all, and it already has a reset button. That isn’t a Hard Reset though, but by the time I install this that also won’t be an option. It is indicated it may not work on the C128 though I don’t know if that is the case or not.

I put on the 500 Ohm Trimmer Pots rather than the default resistors. I had the exact parts in stock, and I have a fair quantity of them, I purchased them for some project, maybe even when I was working on the earlier RGBI Adapter builds years ago. I did set them to match the set resistors as a starting point. The center and “right” pin have to be set to the baseline value, 75 Ohm and 180 Ohm I believe. I don’t know if I will have to do any adjustments on them or not, but I had them and it made sense to me to use them. I probably have more of those Trimmers than resistors of the correct values anyways. This whole board was populated with parts I had in stock, the Audio jack was salvaged, but everything else is new. It was neat having a project I had everything for.

It was a strait forward build, everything is labeled. The two capacitors are labeled on the bottom of the board instead of the top, that did have me almost putting them in the wrong locations. It is easy to transpose the positions when flipping something over. I know he mentioned he made is so that the parts would cover up most of the silk screen markings. When assembled it does look pretty nice too. The only other thing I did check which pins on the Trimmers needed the proper baseline resistance set on them, but that was easy. I picked the White boards as I thought it would look nice when installed as well. It won’t clash with the color of the C128 board, or look like some poor attempt to color match it.

I am going to start with the normal Chroma/Luma paths. I will test that everything is working properly there, then I plan to switch to the External Chroma/Luma lines. The whole reason I am doing this modification is to try to improve the poor video quality I get from the VIC 40 Column video output. My Commodore 64s have far superior Video Output to the C128.

I really don’t need the SVideo and 3.5mm Audio Jack output. I have my RGBI Video Adapter which already has level adjusted SVideo and the SVideo jack (which is why I had a spare SVideo jack in my stash of parts), plus the Audio Jack on it. It won’t hurt to have them. It was unclear as to if the Chroma/Luma output on the Commodore AV Port was still active, but looking at the Schematics and board itself it is still connected.

Again, it was an easy build. TheRetroChannel does say the hard part of this mod is removing the RF Modulator module from the C128/64 board. He is correct, I have removed three of them, and well it is not something I look forward to.

I desoldered the factory RF Modulator, and stuck in the new unit. I fit it without soldering. The pins helped hold it reasonably secure so it wasn’t sliding around. So I did a test fit, and put the board in the case to get it lined up to the openings properly.

You can see that it is crooked in relation to the board. This is due to the alignment of the holes in the case having the opening for the “switch” lower than the “RF” port opening. Once I had it set where I wanted it, I carefully removed the boards from the case. I then tacked some of the pins with a bit of solder. I fitted it back inside the case again to make sure it didn’t move. Then I removed it from the case again and finished soldering it in. It was not difficult to align the board, as the pins held it fairly firmly in place as there are 12 pins they gave enough friction to not have it flop around while I was lifting it out of the case or flipping it over to solder.

It is in and the pins are all cut down properly. It was time to test it. I wanted to get some pictures of the output before switching out the modulator, but I forgot.. I fully remember it was awful in comparison to both of my Commodore 64s even in SVideo output. I was hoping I had some pictures of testing the SVideo output when I built the new RGBI adapter. I didn’t take pictures of the SVideo output. It was still awful at the time..

There is a jumper on the board to enable the Composite video, I believe the Chroma line to it. If you are just going to use SVideo, having it disabled is to slightly improve the output. I forgot to install it and ended up with the first screen above, basically no color except the “noise” around the text. The second shot is the Composite after putting the Jumper on. The last being SVideo output. The SVideo is much cleaner with no noise around the text. Even the Composite is a huge improvement over having the RF Modulator installed.

I wish I had some pictures of the Before. It is dramatic in this case. I was going to do the Chroma / Luma Bypass, those two pins on the lower right of the board. Without doing that, the video is comparable to my Commodore 64s. I feel it isn’t worth it at this point. I don’t want to bend out the VIC’s Chroma and Luma pins from the socket and solder wires to them. The improvement as it is was totally worth it. The two trimmer potentiometers are left set on the 180 and 75 ohm settings, I didn’t see a reason to adjust either at this point. I figure your probably safe to put in the standard resistors for those unless you want to go all out and tweak it to perfection. The same wit the Chroma / Luma bypass. You can still see Jailbars on the display, they are far better and overall the image is much sharper and cleaner.

Flat Commodore 128 Maintenance and 64k VDC Ram Upgrade

When I purchased my first Commodore 64 I also purchased a Commodore 128 Flat type model. The Commodore 128 worked when it arrived. It was complete and in the original box. It is quite yellowed, after cleaning it looks a little better, but is still very yellow. I did the kind of Maintenance I had done with the Commodore 64s.

Pulling the board, cleaning the case with soap and water. I pulled all of the keys from the keyboard and cleaned them and the keyboard frame. The capacitors were all replaced with a kit from Console 5. Two capacitors had residue under them. I also pulled the cover and frame from around the VIC/VDC area. I did not reinstall the RF Shields, I did install heatsinks on various of the ICs that tend to get warm. For the heatsinks I filed an angle on the Pin 1 corner. I also painted that angled area to make it stand out and painted the IC Part on the side of the heatsink to know what ICs they are if they are removed.

The heatsinks came from Console5 as well. They are attached with “THERMALLY CONDUCTIVE HEAT SINK ADHESIVE GLUE“. To identify Pin1 when they are installed, I have Filed the corner of the heatsink a bit where Pin1 is and they painted the filed edge with a Sharpie Paint Marker (Not a Permanent Marker as they “fade” with time). I also paint the IP Part on the side of the heatsink to identify them.

When I installed the Heatsinks on my first Commodore 64 I had not filed the corner or labeled the ICs. I just went by they were in the right place already and that I wasn’t planning to remove them. I believe they can be separated, but it would be risking damage to the chips, and I don’t know how well the glue can be removed once fully cured. I went with the Glue on type of heatsink, in a small part is I could get them. The main reason I liked the Glue on type is I feel more confident in the “thermal glue” being “Thermally Conductive” as intended than the double sided tape used on other heatsinks. I am not real good with the paint marker, and it is a rather blunt marker. The paint seems to work well and last better than a Permanent Marker. With the Thermal Glue, you don’t want it any thicker than it has to be for the best thermal transfer. With about any thermal transfer material it is best to keep it as thin as possible. Before installing the heatsinks I do like to make sure I have good pictures of all the chips, that way I can look up date codes and revisions etc if I want to in the future.

For bolt on heatsinks such as the regulators, I do use modern thermal paste to replace the old white paste. Not the Liquid Metal stuff that eats the metal surfaces though.

The 64k Ram upgrade for the 80Column mode is quite easy. There are two ram chips that need to be desoldered from the board. Then I soldered in IC Sockets and put in the new Ram Chips. The Ram can be checked with a basic program to ensure it is active. Yes there is a “no soldering required” 64k Ram upgrade, this is a carrier board that you pull the VDC from the socket and install it where the VDC is then reinstall on the board.

From Ray Carlsen’s site:

One way to tell if you have the upgraded VRAM is with a little BASIC
program typed in 80 column mode:
POKE DEC(“D600”),28:POKE DEC(“D601”),63:SYS DEC(“FF62”):SCNCLR <RETURN>
If the screen says: READY and looks normal, you have 64K of VRAM. If you
have only 16K, the screen will fill up with zeros.

Ray Carlsen CET Carlsen Electronics

To test the Commodore 128 I made up one of the modified VersaCart boards with some Commodore 128 Diagnostic ROMs. It is one of the spare boards I had left over, setup with two different versions of the diagnostics. For the Versa Cart as I set it up, I closed JP8 A15, JP10 A14, ROML, J5 set to Switch. Resistor installed for A13, and the last switch installed to toggle between the two ROMs.

I did have issues with the cartridge making good contact. You may see in the first picture there is another cartridge sitting under it, slightly wedging it upward. I looked at the cartridge port, it looks fine, I cleaned it with contact cleaner, I checked all around and can not find why it is being problematic. I’ll be looking at the port more. I had the same problems with other cartridges. With being careful to get good contact, and the C64 harness connected everything passed though. I later found out you shouldn’t get the solder coated PCBs, you need to order them with Gold Plated contacts to get good contact. Without looking, I am not sure any of my modern cartridges have Gold Plated contacts. I don’t use them often, but they have worked what little bit I use them fine in my 64s. Many though aren’t wanting to work properly in this C128. I do have some old cartridges, and the original PCB that my one Commodore cartridge does have Gold Contacts. I have had issue with the Atari 2600 with certain original solder plated cartridges being far far more problematic, and need serious cleaning to get working well.

When doing my next project on this C128, I resoldered all the points on the cartridge connector. I can’t see anything wrong with it, it looks to be clean, doesn’t look like any of the pins/contacts are bent or pushed out to far etc. It has been cleaned with contact cleaner several times. I did then test one of my original cartridge games and it worked properly, I don’t remember if I used that specific one previously, and I haven’t tried the C128 Diag Cart again at this point.

Commodore 128 RGBI/CGA to Analog RGB Part 4: A New Case

Part 1: Prototype Post

Part 2: PCB Design, Schematics and BOM

Part 3: Boards Assembly and Testing

The KiCad files, Gerbers, Schematics, Bill of Materials and 3d Models are all released at Github:
https://github.com/Markeno76/rgbi2rgba

I worked up some 3D Printable Cases for the C128 RBGI/CGA to Analog RGB Adapter boards.

I am trying to get away from TinkerCAD, the AMpI4 case (See the post on that here) that I made in TinkerCAD turned out for me. It was a lot of work and it is complex to make modifications to that model when I need/want to.

This time I went back to DesignSpark Mechanical, which is what I started with for the AMpI4 case. I wasn’t ready for a project like that as my first real attempt to make anything in it. This time it was painful as well, but it is a much easier project. I learned a fair bit, but have a long way to go. The case hasn’t turned out perfect, but I’m quite happy with it overall. I make make a couple adjustments to it yet. To start with a made up a mockup of the physical board. That took awhile, then I realized I could export a 3d model of the board from KiCad. When I found that option, I went back and partially started over. I then just had to model the various ports. I did not size them to real world size, I upsized them to be used as the penetrations in the case exterior.

I ended up with making two prototype case prints. The first one showed me the primary mistakes. The SVideo Mini DIN Port opening was too small. The port was accessible with it being properly uncovered, but the outer plastic of the SVideo cable couldn’t get into the opening as it has to go down flush to the port. The RCA ports were correct, they don’t go the whole way down around the outside. The 5V Barrel jack was properly sized for 3 different power cables I tested with it. The DE9 was right. The screw holes placement for the HD15 port were 1mm to high, the whole port was 1mm to high, the cutout and all. This may be due to me using the DE9 measurements as the basis for both openings. I resized the Mini DIN opening, dropped the screw holes for the HD15 port and made the case thicker overall. The first case closed properly, all port alignments were right (short of the HD15 height), the mounting holes for the board and the posts were all correct. I made those adjustments and printed another test of what is now the “all” version of the case. The revised case printed out well, the Mini DIN Port cable now fit properly, the screws for the HD15 were aligned properly and the case was not as flimsy feeling. Once that all checked out, I went back into DesignSpark Mechanical and made up my variant cases from the initial “all” openings case. It was easy to make those variants as it only took a couple minutes. If I was familiar with it I bet it would be more like 2 minutes to do the modifications. I am still very unfamiliar with it, but I like the greater control with the model compared to TinkerCAD.

There are 3 versions of the case, the “all”, the “CGA” and the “C128” variants.

The “all” case has openings for all of the ports.

As you can see the case design is a split top case. There are no overhangs (except the DB/DE screw holes and the underside holes) that require support when printing. There is a slight rounding on the corners. With the settings I am using on my printer it takes about around 1.5hours per half of the case. I normally print faster on my Ender 3 Pro, but the filament I am using didn’t like that. It is some old PLA+ and that particular filament always gets moisture in it. To speed up the process I ended up printing each half on one of my two printers. That is why the filament is different for each, as I didn’t have two spools of the same color. I printing in PLA/PLA+ incase I wanted to paint the case. The color is an acceptable color for the use though. I plan on making up a version of the labels I put on my prototype to put on the tops of the cases. I’ll have to get ink cartridges in the printer before I an make the labels up though. The DE9/HD15 ports have the holes for the standoffs in the lower case shell. The bottom of the case has 4 holes in it for screws to go up through into the standoffs on the top half of the case to keep it shut. I don’t put the Standoffs in tight until I have the bottom screws in to prevent cracking something. With the case design, it does take opening the case to move the jumpers of course. I’d rather not have holes in the top for stuff to fall in, it is also hard swap jumpers in openings like that. It may be possible to rework the PCB to have some sort of DIP Switch. That makes another part to have to source, but it is possible to use that footprint for Jumpers too. DIP Swithes though are generally SPST, not SPDT which is what three of those jumpers need. I do have “mini” SPDT Switches, which I actually intended to install into the C128 type board, but I forgot to. They fit the 3pin Pin Header footprint, and have a narrow somewhat tall slide. These are used on some Commodore 64 (and I am sure other) New and Reproduction cartridges such as my C64 Diag/DeadTest Cartridge. I have also used them on some cartridges, like the C128 Multi Diag Cartridge I made awhile ago. For those mini switches it could be possible to design a case top that let you change them either with small openings, or even make extension caps that let you toggle the switches with the case closed. I don’t expect to be switching the configuration of the adapters often. The SCART to HDMI adapter was unstable in testing the games and was said to introduce lag, I’ll likely just use these with my GBS Control adapter instead. I’d love to be able to use them with my Sony PVM, but it takes a 4V Sync signal, I haven’t even looking at what may be done to adapt that from the ~1V Sync that normally is put out with RGBI/CGA.



The “C128” case is modified to accept my slightly custom RGBI board and has openings for the four Commodore 128 specific ports along the left side. It doesn’t have an opening for the DE9 Male port, as I am using a short “dongle” type cable out the side. It has a smaller opening where the 5V DC barrel jack would be and a second matched opening beside that for my two “dongle” cables grommets to rest in.

I use the short “dongle” cables there for the C128 version as I don’t want to have to make up short stubby cables to plug into ports. I also don’t want to make a custom Commodore AV Cable of some type. It gets more complex trying to find a port and jack for the Commodore AV Cable, then everyone who wants to make one needs to source the same “odd” port and jack. It is bad enough getting the Commodore AV Port “U” DIN connector. Since I am using that short AV dongle there is no good reason to make up a shot stubby DE9 Male to Female cable either. In my case that is part of an old DE9 Serial Modem cable. The grommets fit the cables snuggly and are from a case of grommets I picked up at Harbor Freight. I sized the holes to accept those grommets.

The third type of case is the “CGA” Case. It doesn’t have any of the Commodore 128 ports on the side, but has all the other normal openings in it. The case should be easy to modify with various 3d modeling packages, even with Tinkercad or such if you want different openings.

The case isn’t perfect but I’m happy with it. The holes in the bottom were meant to take recessed M3 screws. The recesses aren’t deep, or wide enough. I have already printed 4 cases today for just 2 adapters, so I don’t plan to rework the recesses. I also don’t have any tapered M3 screws of an appropriate length. It seems to close well with M3 screws, I made the holes in the top standoffs to be hollowed out quite deeply, but something like a 10mm or probably 8mm screw is sufficient. My cases are printed out of PLA on two different printers and the holes worked well on both, the holes are a good fit for the M3 screws on both, but each printer is a bit different. I thought of putting Brass Standoffs in, which takes a larger hole, but there is alot of variation on what size and depth they need to be. It is hard to make a “universal” case when using brass standoffs. I have some super cheap thin ones, them my good ones are massive.. When sitting the case together there is a slight pulling at the corners, but on putting the screws in the minor gaps close up tightly. With my cases the fact it is made of two different materials does make it stand out a bit, but I kind of like the look. It should print fine in PETG. I used PLA as I have more color options, and if I decide I want to color match it with paint, PLA is the better option. I like doing prints in Transparent PETG, but this is for use with an 80s Era Computer not an iMac. I have a couple opaque PETG filaments, but not one in a color that I felt was appropriate.

Above are pictures of the closed up cases from various angles. I also showed some bottom views where the screws are present. It is quite bland looking and you can’t tell what it is for by just looking at it. I want to make labels similar to the prototype, but I’ll need ink for the printer before making them.

After assembly I did some testing with the Commodore 128 with my GBS Control (see post on that for details) taking the 80 Column output the rest of the way to standard VGA.

I did test the Monochrome Composite 80 Column Output after doing my bodge on the V1.2 board the Monochrome Composite 80 Column worked properly after. The Monochrome 80 Column is fixed on the released V1.3 Board design. I really don’t know why anyone would use it, it can very easily be used just connecting directly to the pin on the RGBi Video Port. I only added it because I could.

The KiCad files, Gerbers, Schematics, Bill of Materials and 3d Models are all released at Github:
https://github.com/Markeno76/rgbi2rgba

I went back and finally looked at H2Obsession’s “Ultimate” adapter project. He included a “Dark Gray” fix as well. I wasn’t aware there was an issue with Dark Gray. I’ll have to look at it and see why that was done. It should be simple enough to add. I’m also thinking about the PVM taking 5V CSync for RGB. I’m wondering if I could come up with an option for that.

Here are a few pictures of the Commodore 128 setup. It is a bit crowded with projects, most of them have posts here on the blog. The Commodore 64 replacement Power Supply, a Commodore 64 to Commodore 128 Power Supply Adapter cable (I don’t have post about it, It takes the C64 power jack on once side and the Commodore 128 plug is from “Hey Birt!“. My C64 power supplies were built for higher current than the factory model making them able to handle the C128’s requirement fine. I used Drunk “n” Retro’s Diagram, which you can find many examples of diagrams to do so ). I do have the serviced Commodore 128 Power Supply, but it is easier to just swap in the adapter cable, than having both out on the desk. The Commodore 128 is connected to the Samsung 940MW TV I repaired. I of course have the RGBI Adapter tucked in under the monitor. I do have the Monochrome Composite 80 column connected up to the TV, as I was testing it. I also have the 40 Column SVideo connected to the TV. The RGBI Adapter is connected across to the GBS Control (silver box on the right under the pi1541 which is another project). Then the Commodore 128 which I serviced, but I guess I have no post on servicing it. I’m still debating painting it, I won’t be retrobrighting it.

Finally the gamepad project, which I don’t have a post about. It is far from flawless, the Dpad isn’t great. It has 2 buttons, the normal fire button on the left and “button 2” is either “Up” or wired to one of the Pot inputs. It also has an adjustable speed 555 based Rapid Fire option for the primary Fire button. I want to revisit that project, maybe then I’ll make a post about it.

I made up some labels for the two units I built up. Below you will see the original 2019 prototype with the new 2023 label. I made that label the same way as before. It was printed on plain inkjet paper. Then covered with adhesive laminate film and cut to size. In 2019 I masked off the “case” and sprayed adhesive spray onto the case. I then removed the masking and put the label on it. This time I tried the “easy way” of spraying the paper, as you can see it ended up with the obvious effect of the paper looking like it got something on it showing through. That is why I had originally sprayed the Case instead of the label. This was for testing, and I wasn’t completely happy with the label. I need to get new ink cartridges for my printer and then I may remake the label. The second picture shows the reduced build CGA Adapter’s label. This label was printed on a scrap of HP Adhesive Vinyl. The printer didn’t print quite right due to being out of black ink and the red cutting out too. This label does look better overall although it isn’t perfect. I did put a label for Audio In on the CGA label. It is possible to jumper across the outer two pins of the Audio Out jumper to send the “Audio Output” jack to the “Audio In” Pin on the HD15 port for use with the SCART to HDMI Adapter. All I would have to do is open the case and cut in a hole for the rca jack and install it to the board in the future if I wanted to. I don’t plan to do that currently though.

I think that pretty much wraps up this project. You can see the label on the box there now, and the 128 is running JiffyDOS now. I do have the SID Audio, Monochrome 80 Column Composite, 40 Column SVideo, and of course the RGB through the GBS Control into on the Samsung TV.

NABU PC Black Screen, FAN Repair and Checks

Like a lot of other people I purchased one of the NABU Personal Computers that came up for sale in November. My Nabu arrived in December. It all looked good, when I turned it on there were two problems, the fan was making an awful noise and while I was getting a video signal it was a blank black screen. I opened the cover to look if something was out of place, and to check that fan. I pressed all the socketed ICs, reseated cables, tried other displays. Nothing helped and I didn’t feel it was worth shipping back. I mean even if scrapped I expect the computer was worth keeping.

I did inform the seller and he offered to send me another if I shipped it back. I decided to keep it in hopes of getting a second one, but there were none for sale. I kept looking back and recently he had some listed without the keyboard. I figured I probably had a working keyboard so I purchased a second one.

The new one came in and it worked with my monitor just fine. I was initially happy that the fan wasn’t making any noise, then I realized it wasn’t turning at all. I could hear that high pitch sound that likely indicated a stuck motor, which after opening it I found that was what was going on. We will get back to that later.

Now that I had a working Nabu I decided I would look at the other unit. The fan was noisy and I had pulled it back in December to check it. I connected it up to the monitor to see if it was in the same condition. It was still just displaying a black screen (it was powering on, and there was video signal), I didn’t realize it but looking at the LEDs on the front may have indicated if it was doing anything. Interestingly the fan was working much better, again I will get back to that later.

I found a guide to help trouble shoot the Nabu here: https://github.com/RudyRetroIntel/Vintage-Computer-Diagnostics

I have worked on a number of 80s era computers so there were a few things I was going to try. I started by pulling the power supply to get the fan detached to check it further. While I had the supply out, I checked it and reflowed some solder points on it. I didn’t see any issues with the power supply soldering, except I felt some pins were a little light on solder. I also polished all the connector pins on the power supply. They were pretty clean, but it was easy to do while it was out. I put the supply back in without the fan attached just for testing.

I pulled the mother board to get full access to it, and check the bodge wires on the bottom against the guide. It is the same revision of the board as in the guide, and has the same wires on the bottom (except different colors).

While I had it out I really don’t like that the LED board doesn’t have a connector on it. I put on a regular pin header and made a cable up and soldered that to the LED board and reinstalled it. Checking over the main board I didn’t find any issues. Before I reinstalled the mainboard though I rechecked the bodge wires, two of them had been pressed into and poked on component legs, I moved them and rechecked as I reinstalled the board.



I pulled all the socketed ICs starting with the video generator ic. That IC had very tarnished legs. I take it that is due to the type of coating on that chip, I see that type of tarnish on IC and connectors and such. I used a fiberglass brush on the legs being sure to also do the inside of the legs. The IC Sockets on the Nabu look nice, I put a bit of contact cleaner into the socket before putting the IC back. I did the same with all of the other socketed chips. The video generator was the only IC that looked questionable.

On the left you see the video generator chip before cleaning, then the right is the chip after cleaning it.

After cleaning the ICs and reinstalling the board the Nabu was working properly. The fan still needs to be reinstalled but it all seemed to be working otherwise. They were tested before shipping out, so I expect it was a bad connection on some chip, possibly that one above.

The next thing to do was fix the fans on both of the computers. I was thinking about why the fan seemed to be working well on the first Nabu as it wasn’t before I took it apart in December. I figured it just freed up. Then looking it, it was still rubbing slightly. I pulled the fan from the Second Nabu, it wasn’t turning at all. I found the blades rubbed the outer frame just at the bottom. Looking at it closer I could tell there was no gap in the bottom and a wider gap at the top. The fan comes apart by taking out three small screws, this separates the motor from the frame.

The fans are very heavy. They are made of cast aluminum apparently, both the frame and the blades. They have been sitting so long, it seems the fan motor settled a little bit and slid down where the blades are now catching on the frame part. To correct this, you just have to take the three small screws loose on the back and get it properly centered again and reinstall them. There is very little clearance on these old German made fans. Modern fans are all plastic and many have far larger gaps between the blades and the frames. After doing this process with both fans they are properly centered again and moving freely without noise or any catching on the frames.

I reinstalled the fan and added a connector so that I can easily put it out off I have to in the future.

These computers do not appear mass produced. There is hand done work with the various cables and connectors. There are odd choices in assembly. The fans only have 3 screws holding them in, there are washers on the screws, flat washers glued to both sides of the fans, those locking washers glued to the top of that flat washer on the inside and a nut glued to that (which the glue has failed from removing them). The LED board on the front has spacers between it and the front frame. The fan has one connector that is removable, but the other one had a permanent splice crimp on it so it couldn’t be fully disconnected. The oddity that is the power cable from the power supply to the mainboard, which has no connector on that end either. The LED board being permanently soldered to the mainboard. That LED board is difficult to remove having to bend one or more of the LEDs to the side to get it out, possibly due to the LED lead being left so long do to having to use those spacers. It feels like they were designed and had some issues that were addressed, it would have been cool to see a “Rev 2” Nabu without the little oddities. I like the system, it is just a bit odd.

I look forward to using the Nabu. I guess at some point I may look at coming up with a keyboard for the second unit. I really like the Nabu Keyboard. I keep realizing I probably should have more pictures of these things working.

PSU Bottom, Reinforced Ground connector on the lower right corner.

Both of the NABU Power Supply Ground Lugs pushed off the pcb when reinstalling the ground wire to them. The pcb is a single sided board and no through hole plating to keep it solid. The first one pushed and tore the copper the first time I went to put it back on, and I thought maybe it wasn’t solid or fully seated when it was put on originally. I pulled the power supply out and repair it, by soldering some heavy wire around the pads and adjacent pin to reinforce it. Then tonight when getting the fan reinstalled into the second NABU the same thing happened to it. I know that one was soldered on well, as I had reworked the solder points on it and had even added solder to them. I pulled it back out again and did the same reinforcement with some heavy coper wire around the solder points. The picture above the ground connector is on the other side of the board there on the lower right corner. The two points from the lug holes and the one hole to the left of it are now all joined up with the wire in the solder. I was careful reinstalling the ground wire so as to not tear it free again from the copper. With that fixed and the fan reinstalled both of my NABUs are working now. I do only have one Keyboard, I’m wondering what it would take to build up a replacement keyboard. I would love to have had keyboards for both, but the current listing for them doesn’t include keyboards. I don’t see myself using both at once, I hate to keep a fully working unit as a spare parts machine though..

The second NABU worked perfectly out of the box, it had some rust along bottom of the back edge of the case top. I cleaned that up scraping away the worst of the rust, then used a fiberglass pen to get most of the rest. I then put some clear nail polish to protect the metal a bit. Beyond that I fixed the fan as described above, as it didn’t spin at all. The fan is now removable as I replaced the permanent crimp connection on the one lead with a connector. The system looked good otherwise and is working fine. I didn’t do any other modifications or changes to it. That unit is back in it’s box sitting on the storage shelves.

The other unit which was the one giving a black screen before pulling and cleaning all the socketed chips, I also fixed the fan on. It is the unit I put the removable connector on the front LED Panel. This was the first NABU I purchased, and it is the one with the matching keyboard so it will be the one I keep out to use. It also now has the fan removable with the detachable connector on the second wire on it.

Commodore 128 80 Column RGBI/CGA to RGB Analog Adapter Part 2

This is a follow up to an older project I did. The RGBI (RGB Digital) to RGBA (RGB Analog) for the Commodore 128 80 Column Video. Commodore’s RGBI is essentially the same as CGA so the adapter works on either. I made my prototype adapter back in 2019. I wanted a project to work on and wanted to work with KiCad to see how that went.

The Original Project: https://hobbytronics.home.blog/2019/10/08/commodore-128-80-column-rgbi-to-scart-to-hdmi/

I had started making a PCB Design in Eagle back in 2019, but I never finished it. I didn’t want to keep using Eagle so I stopped working on it.

This project is the RGBI to RGBA project packaged into a custom PCB Design and with a few additions. Such as a dedicated 5V DC Power Jack for when using it with an IBM Based pc for CGA.

It still has all the Commodore functions and more passthrough functions now for the Commodore 128. The Commodore specific parts could be skipped though.

Below are some pictures of the PCB Design work in progress.

3/4/23 the finished v1.3. Is ready to download.

The board is sized to fit into the same case I used for the prototype. The problem with that is you can not get it into the case with the DB ports soldered on. I still laid it out for that size and the mounting holes to match that case. I have a couple of them yet. I think it would probably be better to design a 3d printed case. I can make it split at the place I need to get it in and out easily that way.

The board layout is basically a DB9 port on the left side for the RGBI/CGA input. Along the top the first port is for a single RCA Port for 80 Column Monochrome output from the Commodore 128’s RGBI Port. It is there, so I figured it is easy to include. You don’t need an “adapter” to use the Monochrome output, it is just Pin7 on the RGBI DB9 port on the back of the C128, I am passing it through the 74LS244 buffer though. The next footprint is a SVideo Port for from the Commodore 40 Column from the AV Port, including a 300 Ohm resistor on the Chroma line. The next port along the top is for another RCA Port and it is the Commodore 40 Column Composite Video from the AV Port. The last port along the top is a third RCA Port which is the Audio Output from the Commodore AV Port. There along the right side is the 15 Pin RGB Analog Output. The bottom left has the 5V DC Barrel Jack footprint (Center Positive). The Header pins are the C64 AV Port, it is oversized as I want to make it “keyed” with a missing pin and a plugged hole in the connector. The CSync/HSync is to set the Sync output for the normal HSync pin on the VGA port to either be Combined Sync (CSync) or to just pass through the HSync normally. The Audio header is a jumper to either output the Audio to the RCA Port above it when in the Left side or to output it on the VGA port on Pin10 for when I use it with the SCART to HDMI Converter box. InvertSync is another jumper to Invert the CSync/HSync line if needed. Finally the SCART Blanking is a jumper to enable sending VCC/5V to Pin9 on the VGA Port again this is for when I use the adapter with the SCART to HDMI Converter box, this enables the SCART RGB Detection on SCART Pin 16.

I think it is a reasonably sized board. If it was to be used for CGA with an IBM Computer then you can install the Power Jack, and omit the 3 RCA Ports, the Mini Din Svideo Port and the 10 Pin Header for the Commodore AV Port. If it is going to be used for a Commodore 128 RGBI, just build the whole thing minus the Power Jack. I think the only thing with the power Jack is that plugging it in while having the Commodore AV Port connected could end up very bad. I might think about that a bit more if the 3pin Barrel jack could be setup to bypass the AV Port power or something like that.

I did go with through hole for the ICs, headers and ports. I was thinking of going with dual footprints for the Resistors and Capacitors to allow either through hole or surface mount parts. The Surface Mount capacitors and Resistors are 0603 Imperial size parts. I have all the ICs already in DIP/DIL, and I want them in sockets for easy replacement if required.

I had to make the footprints for the RCA Jacks, and the SVideo Jack. The RCA Jacks should have square holes on the front corners. I couldn’t see how to make such cutouts. I figure that I may just have to shave the plastic a bit on the RCA Jacks.

The board as well as the original prototype build can do a combination of outputs depending on your needs.

The board in the fully configured mode outputs RGBS, Red, Green, Blue and Sync (CSync or Combined Sync) with custom Audio and SCART Blanking voltage on the HD15 port. This is what you use for a SCART Input. With the Audio to the RCA Port and the SCART Blanking disabled (may or may not be an issue if it is enabled) the GBS Control also takes RGBS input. The GBS Control might get confused due to VSync being included too on the HD15 all the time. With the SCART Cable the VSync pin is just not wired to anything.

If it is set to HSync with the jumper then it outputs RGBHV: Red, Green, Blue, HSync, and VSync. VSync is always on the HD15 port. The GBS Control takes RGBHV, and that is the setup I use with it.


It will also do RGBS with an Inverted Sync with the other jumper. I think did that variation because of something to do with the GBS boards at the time. I don’t remember what it was about though for sure.

The other two jumpers are specific for doing the RGBS with SCART, that puts Red, Green, Blue, Sync, Audio and 5V on the 15 Pin output. It is how I used this adapter until I build a GBS Control to go with it. The GBS boards weren’t as good for this use until the GBS Control project came out.

When using the adapter in RGBHV mode the 74LS86 is not required. The 74LS86 is just used to make the CSync by combining the HSync and VSync. It is also used to do the Inverted CSync if that is enabled (which it would also Invert the HSync technically if it was enabled while the other jumper was in the HSync position). If you look at the schematic you will see it is just bypassed. The 74LS244 is a buffer to protect the Computer video output. The 74LS138 handles the CGA Brown Fix.

I have received the parts I had on order and checked all the footprints. There was an issue with the DB9 port footprint that I had to fix. I also had a few adjustments to make to the Mini Din 4 for the SVideo port. I made changes for footprint corrections and some adjustments to labeling then put in an order for the v1.2 PCBs. I am going to build one to replace the one I made in 2019 for my Commodore 128 RGBI, as I want SVideo. I plan to scrap the prototype, reusing the short DB9 cable and the short Commodore AV Din cable I made for it. I also plan to build up a second one for IBM CGA without the Commodore AV Port related components. If the board tests out, I will post the KiCad project files and Gerber files on Github. Once I have the boards built up, I intend to design a case that can be 3d printed.

Update: 3/4/23 v1.3 I am correcting the schematic, the original one had the 80 Column Monochrome Video from the Commodore 128 RGBI port going through the 74LS244, and it shouldn’t be. I am also adding R11 as an option for a “Resistive Ground (RG)” on the Shell/Shield of the 15pin output port, it probably should have a 100 Ohm resistor between ground to help prevent potential Ground Loop issues. To prevent ground loops with the cable shield is generally recommended to only be “grounded” on one end, so you can put in the optional R11 or omit it. All of the other connectors have their shield to GND/Ground.

Parts List:

0603 – Resistors
1) 150 https://www.digikey.com/en/products/detail/walsin-technology-corporation/WR06X1500FTL/13239274
1) 300 https://www.digikey.com/en/products/detail/yageo/RC0603JR-07300RL/726765
2) 470 https://www.digikey.com/en/products/detail/walsin-technology-corporation/WR06X4700FTL/13240646
1) 560 https://www.digikey.com/en/products/detail/yageo/RC0603JR-07560RL/726805
3) 680 https://www.digikey.com/en/products/detail/walsin-technology-corporation/WR06X6800FTL/13240808
1) 1k https://www.digikey.com/en/products/detail/walsin-technology-corporation/WR06X102-JTL/13241138
1) 2k https://www.digikey.com/en/products/detail/yageo/RC0603JR-072KL/726726

0603 – Capacitor
3) .1uF 100nF https://www.digikey.com/en/products/detail/samsung-electro-mechanics/CL10B104KB8NNWC/3887593

RCA Jacks
1) Black RCA Jack https://www.digikey.com/en/products/detail/kycon-inc/KLPX-0848A-2-B/9990118
1) Red RCA Jack https://www.digikey.com/en/products/detail/kycon-inc/klpx-0848a-2-r/9990119
1) Yellow https://www.digikey.com/en/products/detail/kycon-inc/klpx-0848a-2-y/10246556

Svideo Jack
1) 4Pin Mini Din https://www.digikey.com/en/products/detail/kycon-inc/KMDGX-4S-BS/9990073

1) DB9 Male https://www.digikey.com/en/products/detail/amphenol-cs-fci/LD09P13A4GX00LF/4997285
1) DB HD15 https://www.digikey.com/en/products/detail/edac-inc/634-015-263-032/806194

1) 74LS244 https://www.digikey.com/en/products/detail/texas-instruments/SN74LS244N/277299
1) 74LS138 https://www.digikey.com/en/products/detail/texas-instruments/SN74LS138N/277285
1) 74LS86 https://www.digikey.com/en/products/detail/texas-instruments/SN74LS86AN/277315

Optionally a surface mount barrel power jack. Various pin headers and a couple jumpers.

See the next part of this project. Building, testing and fixes below:

Finished project: https://hobbytronics.home.blog/2023/03/12/commodore-128-rgbi-cga-to-analog-rgb-part-4-a-new-case/

Super Game Boy Console : Part 2 Revisions

I am going to add a few revisions for the Super Game Boy Console project here.

Joe realized the Left and Right Audio Channels were flipped so that is a revision past the board I worked on and already posted. I opened up the SGB Console and swapped the Left and Right Audio Channels. Joe has updated the pcb designs on his Github project to reflect the change.

I quickly modeled a snug fitting plug to go into the hole that was for the 3.5mm jack of the Pi2/3. The first print was the same shape, but too lose, I made a size adjustment and reprinted it. The new one is very snug, I figure I will let it go and see if it gets loose over time. If so, I’ll put a bit of glue on it. It is resting there just above the pcb of the HDMI board so it has a little flat area on the bottom.

While I had it open, I also checked the fit of the new board for the back center screw post. It looks like I have it aligned and sized properly. That will mean that back screw post will not have to be cut out if the new board design is used. You still loose the front center screw, as the GameBoy Cartridge goes though that area. The level shifter ic in the area of that front center screw post is now “less” in the way, but it many need that post shaved down just a little still. Before the ic was resting on the edge of that post in the lower case, but now it should just be the pins and solder pads.

I looked at the Wii Controller port, I was looking if I could get a bit of plastic in to cover the front of the edge of the pcb at the top of the opening. This issue is because I used the Wii Breakout Board “with holes”. The 3d parts are designed for the smaller Wii breakout board. There seemed to be two options to drop it all the way to the bottom of the opening, instead of raising it up from the bottom. Putting it all the way to the bottom didn’t work, it did give a bit of clearance on the top, but still not quite enough a gap in that tight area to reasonably get something to slip in from above. I then looked at raising it, the problem there is that the PCB and solder points on he back will be way to close to the upper main PCB. It may work in the short term that way but overtime they may touch and rub and then short out. I thought of putting it so the pcb was turned downward. There just wouldn’t be any integrity in the 3d part, it would be way to thin I believe. The two posts that the top plate screws into could be removed to give clearance, or whatever is above the pcb may be possible to integrate into the top screw on piece instead. I’m concerned about how secure the jack would be mounted. I don’t think I will do anything else at this point about the mount. The way I did it, the jack is quite secure even if it has a 2mm gap above it. It is hard to see unless you get close and are directly in front of it. The Wireless Receiver for the controller also completely covers the area. I’d probably just suggest going with Joe’s smaller Wii breakout board and use the models he provided unless you wanted to come up with a different mounting system of your own. I did use Joe’s lower mount plate model, and my jack fits right into that. For the Upper Screw on Plate, I am just using the upper most “flat” part of it, with the bits that would otherwise be hanging down cut away, and then just a little bit more cut down to fit properly. This presses the jack down tight by pressing down on the PCB side keeping it locked in very well.

I am finding it is slightly difficult to get the Gameboy Cartridge out. I am thinking if I had just left about 2mm more of the front case so the cartridge would be resting on it, that it would be a little easier to remove. The SGB cartridge slot is raised off the pcb by a few millimeters, and I have my opening closer to flush to the pcb. This angles the cartridge a little when I put pressure on to slide it out. I am just thinking if it had that bit of support on the end it may slide out slightly easier.

I also installed Joe’s updated firmware that uses the Home Button for the menu instead of Start + Select. On testing it I found an issue with the Color Scheme setting it would get stuck. Joe found and fixed that little bug and has released another firmware update on his Github page for the project.

https://github.com/joeostrander/consolized-game-boy

For myself, I believe I am going to call this project finished now. The minor thing with the small gap above the Wii port isn’t a huge thing even to ocd me. The 3.5jack hole was an issue I wanted to resolve though. I was going to also close he SD Card slot. I decided not to as the 3d mounting plate behind it does reasonably prevent someone sticking something in there and it is a bit of ventilation. I have played several games of Tetris on it and last night I got to the final Boss in Super Mario Land. It seems to work well, it is fun, provided the game itself doesn’t get frustrating. Thanks for reading and have fun.

Game Boy DMG Repairs and Upgrades

The only Vintage Game system or computer I have kept is my Game Boy DMG model. Based on the serial number I am guessing it was built in mid 1990. I had it from new and put a lot of hours on it playing games. It has seen better days. It was kept inside a case and never it an attic where it got hot. The case is pretty close to the original color, maybe some light yellowing. The display was missing lines, the glue failed on the screen cover and it fell off. I tried to glue the screen cover back on with super glue at some point, that held it some but ruined the “paint” on the under side of it.

The audio was being flakey at times on it at times. The screen even when it had the lines was well a DMG Screen.. I picked up some parts from Console 5 and somewhere else possibly on Ebay for my first pass of working on it.


So just as I said “first pass” Almost nothing in this picture ended up in the Game Boy well ended up remaining in the Game Boy. I’ll go over that anyways. The new Glass Screen cover, replacement Volume pot, Cap Kit. Button pads, well they were the wrong ones. Then also a back light kit with the Bivert board. Finally some Triwing drivers. It turns out my early Game Boy doesn’t have a single Triwing Screw in it. It is all Philips screws. It isn’t in the picture, but as I had concerns about audio I did get a speaker as well.

It wasn’t too bad to clean up the old screen, you can see where the glue I had stuck it back on with years ago pulled he old paint off the back of the plastic screen. I did have an issue with the new Glass Screen though.

So the first pass I went with the Backlight mod and the bivert board. The board was great. The removal of the old reflective layer was bad. Looking at the before picture, my screen wasn’t the best to start with.

Installing the board went very well following the provided instructions. There are 2 pins there to lift on the display connector on the CPU board side. The board is basically a carrier board for an inverter ic, the chip inverts the display. The light areas become dark and vice versa with it. With the Back Light rather than the reflective unlighted screen it makes it look better. The next part of the process was to take the reflective layer from the back of the LCD Screen. It was very tight, and while I got it off in the end the lcd was in worse condition afterward with more missing lines. I have seen people manage to repair the missing lines, but mine have been going bad since back when I was still using it in the 90s. Even so it looked so much better with the backlight.

Yes it is missing more lines and even a couple horizontal lines now. Yes the Glass Screen broke installing it. The screen broke because it was very slightly oversized. I installed most of the capacitor kit, with the ones on the LCD, Power, and Audio boards. I tested the new ones and the old ones at the time on my component tester, none of them appeared to be bad. I left 5 of the 6 capacitors on the CPU board alone due to that and being disappointed in the outcome of the screen, the glass and the fact that the audio issues didn’t clear up with the new capacitors.

Well even in that condition the Game Boy was improved. I played it a bit like that. If the LCD wasn’t missing so many lines I would have kept it that way. It looked so much better and I wanted it keep it near original. That is why I didn’t go with one of the full LCD Replacements.

With the LCD not working out though, I did end up getting one of the Replacement IPS LCD kits.

The instructions for it worked out very well. This is an old project that I didn’t document much. I did take a few before and after pictures. I would say the kits were fairly polished when I purchased mine, and they have been refined since.

The IPS Screen looks great, and has various color options to choose from. It doesn’t have the ghosting of the original lcd, which is a nice plus on fast moving games. The IPS Screen is the V2 or V3, which is now an older version of the screen, I am sure the V5s are nice these days. I put this in a few years ago now though.

Once the IPS went in the screen looked good minus the cracked glass cover. To fix that I ordered another Glass cover, this one was also oversized, I filed it down with sandpaper on the edge to get it to fit. I purchased a few more games for it to play with.

I was still having issues with the audio and it was getting worse. It would often not be working at power on, and then it may start working after a little while. With the audio getting worse I packed it up and let it sit in the case.

With Joes Super/Game Boy Console project catching my interest I wanted to see if I could finally get my DMG back to full proper working order. Initially I thought maybe it was the audio jack. The Audio Jack has a switch built into it, when there are headphones plugged into the jack the internal speaker is disabled. I also wanted to look at the capacitors that were replaced and the ones that weren’t replaced. Looking at the Schematics for the CPU Board, the electrolytic caps are mostly audio related. Because I was working on the Super Game Boy Console, I let the DMG sitting in the case mostly. I wanted to add the Multiplayer Game Link function to the Super Game Boy Console, so I didn’t want to risk breaking the DMG before I could get that tested. I finished up the Super Game Boy Console recently (check my post about it if you are interested).

Last week after getting the SGB Console done and the Multiplayer tested I took a look at the DMG. The audio is completely dead out of the speaker. I plugged in head phones and only had one channel of the audio and a lot of buzzing. I then took it apart, looking it over I didn’t see anything obviously wrong. The capacitors that were changed looked fine. I was able to tell that the CPU Board had 5 original capacitors still on it, as only one was replaced on it. The Audio Jack which was still a question for me has a lot of oxidation on all the exposed metal on it. I have seen other connectors do this at times. This socket has a switch in it that disables the audio. I had previously tried to clean it with contact cleaner but nothing changed.

Today I went to look at it further. I replaced the 5 remaining capacitors on the cpu board. I did test the capacitors I removed and the new ones before installation. With the tester I have for them, the old ones appeared to be fine. I did put quite a few hours on the Game Boy back in the 90s, but likely no where near used them for their rated hours at the temperatures the Game Boy runs at. I probably wouldn’t replace the Capacitors on at DMG again anytime soon. I don’t plan to get another one either though. Certain hardware from the later 90s has bad capacitors in them due to defective design or bad mix in the electrolyte etc. I also feel capacitors from the early 80s especially in equipment that gets quite warm, will have a greater chance of being in need of replacement. In some of my retro computers or devices I have found capacitors that even my limited tester indicates are out of specification.

I looked over the boards again, but didn’t find any visible problems. I did clean up and redo some solder points, redid the power switch, the Link Port and some other solder points incase they had been stressed although I had not seen any visible cracked solder around any of the pins. I cleaned the tarnish off the exposed metal parts of the audio jack. I then removed the audio jack from the pcb with my desoldering gun. It shouldn’t have been awful to get off with the solder sucker. I tested it, and none of the pins were connected once it was pulled out. Checking the schematic, and tracing the wires I found that pin 6 of the audio amp is to be switched to ground, and that is the pin of the audio jack that goes to the white wire on the audio board. Testing again on the jack there was no continuity to the other half of the built in switch. I plugged in a 3.5 plug and it didn’t connect the switch. I was just able to see where the switch moved when the jack was inserted. I sprayed it with contact cleaner and used an Xacto blade to get a little under the switch. I was able to get the contact working again spraying it again and using the 3.5 plug in and out a number of times. I tested and had under 2 Ohms then. I also tested the 3 connections on the 3.5 plug and all are making good contact now. I then soldered the jack back onto the pcb and retested the switch and 3.5 plug contacts again.

I have some other pictures of the boards before cleaning off the flux and reinstalling them. While I had them out, I put contact cleaner in the Multiplayer Link Port, the Volume pot, Power Jack and Power Switch.

The internal speaker worked properly again after reassembling the DMG. There is a bit of hum, but that is mostly from the AC Adapter, when on batteries there is nearly no hum. I don’t remember the hum being there in the 90s when using the same AC Adapter. It may have an issue developing, I will probably check it with the scope and see what the output looks like. In looking into the hum, it was reported that the IPS LCD kit adds some Hum to the audio, due to higher current draw, well that is what they said. Maybe it also is making some of it due to intefearance from it’s operation being picked up in the audio amp or something. It is not very bad, but certainly is more present when on the AC Adapter. It was worse actually before cleaning the power port, power switch and other contacts, I thought it was from the Audio Amp itself, but it was that same hum just worse before working on it this last time.

The Directional Pad didn’t work properly though. While I had it apart, I had switched out the contact silicone pads, the Start, Select, A and B buttons all worked properly with the new pads. I took the DMG apart again and checked the pads. I cleaned the contacts on the PCB. I then tested conductivity of the new Directional Pad and also the Original Pad. The Original Pad was more conductive. I cleaned it lightly with IPA and reinstalled it. I also looked at them, and the new pad is designed just a bit differently. I tested the DMG again and the directional pad was working properly. I had swapped them as they are old and they look worn. It also seemed the directional pad wasn’t always working as well as I liked. It seems fine for now though after cleaning, hopefully it holds up.

The volume control is good and smooth, it isn’t scratchy at all. The power switch works properly making good contact, and the power jack is giving good connection too. The power cord could give some crackling before as it swiveled in the port on occasion before. It seems everything is finally working properly again. I’ll get a chance to play the old DMG again.

Looking at the photos from when I started working on the DMG, it has been over three years since I put in the Back Light mod and started putting the capacitors into it. It is nice having it finally sorted out and in good working condition again. Now I can pair it up with my Super Game Boy Console and play some two player Game Boy games.

You can check the post about the Super Game Boy Here.

Super Game Boy Console

I was watching the Andy West’s video of Joe Ostrander’s Game Boy Console project on the Element 14 Youtube channel. It was inspired by and earlier project video that Andy West had done awhile ago. In the new video Andy builds one of Joe’s v3.0 boards, and gives some details I will likely be missing here.

The latest version from Joe was v3.1 it uses a Raspberry Pi Pico, a Super Game Boy Cartridge with a few other parts to build a Super Game Boy Console in a tiny Retroflag NESPi case. With v3.1 Joe used the Super Game Boy Cartridge Port instead of the SMD Cartridge Port Andy had for the v3.0.

Here is the Video:

I liked this project because it included some things I could practice with and some new things.

Andy’s original project included the DMG Link Port for Multiplayer games, but Joes project did not. I looked over the schematics for the SGB and the DMG as well as Joe’s version and it seemed simple to add that feature.

The Super Game Boy can play the original Game Boy DMG games. The Super Game Boy didn’t have the Game Link Port, but the CPU was the same except it doesn’t have the Nintendo name scrolling down the screen at power on (unless the cartridge isn’t recognized properly you never see that screen at all).

I was able to contact Joe and he sent me a copy of the Easy EDA Project files. He had it listed at v3.1 at the time with the Super Game Boy Cartridge port. I modified Joe’s main pcb to add in the parts required for the Link port. This was the first time I have worked with Easy EDA. It took me a little bit to get used to working with it. I have used Eagle in the past for other projects, but for Hobby work it is very limited in board size. Easy EDA can send an order to JLCPCB for production, or your can have it generate Gerber files to send to your favorite PCB Producer. I made a Footprint for the DMG Link Port is a recreation of Gekkio’s KiCad DMG Link Port KiCad footprint in Easy EDA, so that I could make the DMG Link Port adapter board.

https://github.com/Gekkio/gb-hardware

There is a single Pi Pico that handles controller input and generates the VGA Video output. It also uses a VGA to HDMI Adapter to take the VGA output from the Pico to HDMI including the Audio.

It has options to either use a NES Controller port and Controller, or to take a Wii jack and use a compatible controller for that, be it one of the Wii Classic type controllers or one intended for the NES Mini such as I have used. There is different firmware for the Pico depending on which controller type you go with. Joe has both versions ready to go for you in the .u2f format. I went with the Wii port, and the cheapest way for me to get it quickly was to buy a Wii controller extension cable and salvage it out of there. I figured it was likely I could salvage and reuse it, and while 3 of the pins were cut short, it did turn out to be the regular through hole port and works just fine in my case. There are different Controller Port Mounts and as I said Firmware depending on which controller option you go with. The firmware is in the .uf2 format that is very easy to install to the Pico. You first download the .uf2 that you need on your computer, then get a usb cable for the Pico, hold the button on the Pico as you plug it into the USB port on your computer. You can release the button then, if you did it right, the Pico will show up as a drive on your computer. From there copy and paste the proper .uf2 file into that drive. The Pico will upload the code and reboot itself automatically. The files are gb_vga__pcbv3_nes_controller.uf2 for the NES Controller Port and gb_vga__pcbv3__nes_classic_or_wii.uf2 for the Wii Controller port (filenames prior to 1/15/23).

Update: 1/15/23 It appears Joe released an update for the code on the Pico, the new version only supports the Wii type controller. The Home button now brings up the OSD Controls. I’ll have to check it out later.

The Controller Ports also require different Adapter PCBs and wiring as well depending which you go with. The PCBs are labeled on both the Main PCB and the Breakout Boards. The pictures of my prototype board are not the final design for v3.21 on the final one (which I show a render picture of at the end of this post) you will find the “<– NES” and the “<– Wii” markings on the silk screen. Be sure to use 3V3 for the Wii Breakout. I have updated Joe’s Wii Breakout board to list 3V3 instead of VCC. For the NES use 5V and Gnd just as the board is labeled to accept.

There are numerous parts. Much of it is surface mount, minus the Pico and the reused SGB Cartridge port.

BOM:

NameDesignatorFootprintQuantityManufacturer PartManufacturerLink
27pFC1,C20603 CAPACITOR2C1608C0G1H270J080AATDK Corporationhttps://www.digikey.com/en/products/detail/tdk-corporation/C1608C0G1H270J080AA/513761
1uF Tantalum Polarized CapacitorC3,C41411 CAP-SMD_L3.5-W2.8-R-RD2T491B105K050ATKEMEThttps://www.digikey.com/en/products/detail/kemet/T491B105K050AT/3724722
100pFC5,C6,C7,C80603 CAPACITOR406035A101JAT2AKYOCERA AVXhttps://www.digikey.com/en/products/detail/kyocera-avx/06035A101JAT2A/563285
MMBD7000HS-7-FD1,D2,D3,D4,D5SOT-23-3_L2.9-W1.3-P1.90-LS2.4-BR5MMBD7000HS-7-FDiodes Incorporatedhttps://www.digikey.com/en/products/detail/diodes-incorporated/MMBD7000HS-7-F/2179586
1MR1RESISTOR_R06031WR06X105 JTLWalsin Technology Corporationhttps://www.digikey.com/en/products/detail/walsin-technology-corporation/WR06X105-JTL/13239221
10KR2,R3RESISTOR_R06032RNCP0603FTD10K0Stackpole Electronics Inchttps://www.digikey.com/en/products/detail/stackpole-electronics-inc/RNCP0603FTD10K0/2240139
1KR4,R6,R8RESISTOR_R06033RMCF0603FG1K00Stackpole Electronics Inchttps://www.digikey.com/en/products/detail/stackpole-electronics-inc/RMCF0603FG1K00/1713699
500RR5,R7,R9RESISTOR_R06033RT0603BRC07500RLYAGEOhttps://www.digikey.com/en/products/detail/yageo/RT0603BRC07500RL/7708292
47RR10,R11RESISTOR_R06032RC0603JR-0747RLYAGEOhttps://www.digikey.com/en/products/detail/yageo/RC0603JR-0747RL/726793
180KR12RESISTOR_R06031RC0603JR-07180KLYAGEOhttps://www.digikey.com/en/products/detail/yageo/RC0603JR-07180KL/726723
510RR13,R14RESISTOR_R06032RC0603JR-07510RLYAGEOhttps://www.digikey.com/en/products/detail/yageo/RC0603JR-07510RL/726801
220RR15,R16,R17,R18,R19(Power/Reset Board)RESISTOR_R06035RMCF0603FT220RStackpole Electronics Inchttps://www.digikey.com/en/products/detail/stackpole-electronics-inc/RMCF0603FT220R/1760809
ABLS-4.194304MHZ-D-4-Y-TX2CRYSTAL-SMD_L11.4-W4.7-LS12.71ABLS-4.194304MHZ-D-4-Y-TABRACONhttps://www.digikey.com/en/products/detail/abracon-llc/ABLS-4-194304MHZ-D-4-Y-T/9997833
SN74LVC245ANSRU4SOIC-20_L13.3-W5.5-P1.27-LS7.8-BL1SN74LVC245ANSRTIhttps://www.digikey.com/en/products/detail/texas-instruments/SN74LVC245ANSR/499514
Raspberry Pi PicoU5RASPBERRY-PI-PICO1SC0915Raspberry Pihttps://www.digikey.com/en/products/detail/raspberry-pi/SC0915/13624793
Super Gameboy Cartridge HeaderU6SUPER GAMEBOY CARTRIDGE HEADER1NintendoFrom Super Game Boy
DMG-CPUU1DMG-CPU-B1NintendoFrom Super Game Boy
LH5264 RAMU2,U3DMG LH52642NintendoFrom Super Game Boy
GANA VGA to HDMI Audio Video Converter1https://a.co/d/2GTq5d7
Retroflag NESPi Case Plus1https://a.co/d/1K0sy7a
Super Gameboy Cartridge (to source the CPU, RAM and Cartridge Port)1NintendoSearch Ebay
Wii/NES Classic Port 90 degree (Optional this or the Original NES Port)1https://www.aliexpress.us/item/3256804436132647.html
Original NES Controller Port (Optional this or the Wii Port)1
Pin strip / header (for the Pico if it didn’t come with them)1
Wire 24awg Silicone Insulated Wirehttps://www.amazon.com/gp/product/B07TJXRGXM/?th=1
Wire 30awg Insulated Wirehttps://www.amazon.com/Treedix-Copper-Wrapping-Jumper-Optional/dp/B08D6D1TKH/
Super Game Boy Console Main Board PCBsgb_cart_motherboard_v3_21
Power and Reset Board PCBpower_reset_v3_21
Wii Controller Breakout Board PCB (Optional this or the NES Breakout)wii_jack_w_holes_v3_21
NES Controller Breakout Board PCB (Optional)nes_breakout_v3
DMG Game Link Multiplayer Breakout PCB (Optional)dmg_link_v3_21
USB Power with Data PCB (Optional, to Program the Pico in the case)pcb_v3_usb_w_data
BOM

I used the USB Port from Retroflag instead of the optional “USB Power with Data PCB”, I don’t expect to need to reprogram the Pico that often. I ordered in Joe’s Wii controller PCB. I also ordered his Power and Reset button board. I ordered the version of the Main PCB that I had added in the Link Port parts. For the Link port I ordered in a DMG-07 Four Player adapter to salvage off one of the Link Ports as Joe suggested.

I have since created a somewhat more refined version of the Main PCB and some other PCB changes. Keep in mind the BOM list above is for the v3.21 board not the proto type I have pictures of here. Some component designations have changed and D1 is now a Diode Array on the “finished” board. I also created the DMG Link breakout board. I used the protoboard version as seen in the pictures, but the Mount for the DMG Link board is designed for the PCB.

The first part was to do the main PCB modifications. I ordered the required boards, I also found out you can have them panelize the boards for you. I now have a crazy number of Wii Controller Breakout boards for the same price I would have paid for 5. That opens up some real possibilities for when I have a small board I would like more of.

The next part of the project was sourcing all of the other parts. Joe’s BOM at the time had a mistake on it the 22pf capacitor listed was a 0201 imperial part. The BOM above is listing a 0603 imperial sized part. That is an easy mistake to make as 0201 imperial is 0603 metric.. The parts listed above are the specific part numbers I ordered except for the wire. If you don’t care to do the Link Port, then you don’t need R15-R18, D1-D5, or C5-C8, or the DMG Link PCB, and the Link Port itself.

Once I had all the required parts it was time to prep the various parts. For the Retorflag case, I had to desolder the USB power board from the Power Reset button board so I could reuse it. I then had to desolder the Power and Reset Buttons as well as the LED and the LED Light pipe so I could reuse them. I then installed the Power and Reset Buttons and attached the USB power board to the new PCB. Just a note I missed seeing the pad for the Resistor for he LED on the board, I revised the board so that was listed on the silk screen and installed a 510 Ohm resistor on it ( I expect a 1k resistor would do well too if you don’t want it so bright).

The case requires a bit of modification to fit the new parts. The opening where the two USB ports needs enlarged depending on which Controller port type you go with. The top needs modified by cutting out the opening for the Cartridge to get in. That requires taking the front center post out of the top as well. Be careful to not remove too much. I did have to slightly trim some of the top posts (but not all) about the thickness of the PCB to get it to fit nicely. The back center post was removed on mine as well using the PCB as it was on the prototype. I revised the PCB so that v3.21 should let that back center post remain now. To see how much the top posts needed shaved down (about the thickness of the PCB) just check the fit of the PCB laying in the top of the case, it basically needs to sit level and about flush with it. For the Pi Pico to clear the top, I had to remove the tabs and a little bit more where the fan is to snap in. I think if the Pico is mounted with short posts it would have more clearance. I decided to mount it with some header sockets so I can remove it if I want/need to in the future. For the bottom there there is some material that needs removed from under where the green mounting part goes in for the Controller port. That part is where the Controller Port is mounted as well as the hole in it is the one hole that holds the VGA to HDMI board in place. Below you can see the modifications to the case. I didn’t think to take “before pictures”. You can also see the new Power Reset board, USB Power board as well as the Wii board mounted into the bottom of the case. The Link Port will be added to the lower right cavity later.

Beyond the case prep, and pulling those parts from the original Power Reset board there is the Super Game Boy Cartridge parts to deal with.

With the Super Game Boy, we pull the board. We need to salvage four parts. The CPU, the two Ram Chips (they are identical) and the Cartridge Port. Below you can see the board after those parts are removed. I did clean the flux from the board and kept it if I find a future use for it. To remove the chips I used the technique that Andy West showed with Low Temp Solder alloy. I watched him do it a couple times, I then watched some other people using it to remove chips. For me I wasn’t having all that great a luck with the CPU, so to make the process go easier I used my hot air station to make it easier that helped me a lot. It seemed that in Andy’s video it must have also taken him awhile to get the CPU off, I felt better using the hot air as the heat was applied for less time than it was taking with the iron alone. I am sure I would have gotten it with just the iron, but it is also nice to use the hot air station for more than heat shrink now and then. That low temp alloy is weird stuff, the flux smells odd too. It is the first I used it. Be sure to clean the low temp solder from the chips afer removing them. That stuff made a bit of a mess.

For the Cartridge Port, I used some money from Christmas to purchase one of the cheaper desoldering guns. I also used it to remove the switches from the Power Reset board and VGA and Audio sockets from the VGA to HDMI adaper. I could have done it with my desoldering iron, it is shown in one of my C64 refurbishing posts here I believe. I also used it to pull the Link Port from the DMG-07 4 Player adapter.

Below is the VGA to HDMI Adapter after it was prepped for installation. The VGA Port and the 3.5mm Audio port had to be removed. Even with the desoldering gun, I ended up pulling some of the through holes out of the VGA port, nothing that was a problem though in this case. It has 5V (Large Red), Ground (Large Green) for power that go over to the Power Reset board. Then the Dark Blue (Left Channel) and Brown (Right Channel) wires go to the pad for Left and Right audio over on the Main PCB, Ground is all joined so that doesn’t need a wire in this case. Then we have the Red, Green and Blue for the R, G, B pins then the Orange ( V Sync) and Yellow ( H Sync) and I did wire the Black wire for Ground there. The small wires are 30awg Wrapping Wire.

Below is the main work done on the unit. This was before adding in the Link Port.

Above you should be able to make out most if, not all the wiring there. I did put 2.5m screws into the Link Port holes to give it stability. You can possibly make out the green 3d printed washers under the screw heads. I didn’t want to scratch the pcb, and there is one trace right there by the left screw.

There is not too much going on on the top side of the PCB. The picture above was before I added the screws to secure the cartridge port. It is just the port and the Pico. I am using header sockets and pins so the Pico is removable if needed, but that shouldn’t be a big deal to solder it in with the normal pin headers. If you go to put it on header sockets, you may want to test fit it in the case to make sure it will fit. For me it go pretty close to having to cut out all that area where the fan is intended to be mounted.


To add the link port I modeled a part to sit down in the remaining cavity in the bottom corner of the case. I put the 3d printed link port mounting plate in for a test fit and I could not get it back out. Luckily my chip puller was able to get in under it and pop it out without damaging the case. The part is made so that you put the Game Link port in place and then press the 3d printed part in place, it clamps the port in by the little ears sticking back on it a bit. The main thing is to get the opening made in the right place at the right size for the port. I made a template of the port shape, then drilled a hole where it would be inside the area to help me get an idea on placement and got lucky enough I had it right in the end. I used a combination of small drill bits and an Xacto Knife.

I used two of the remaining shorter smaller diameter black screws from Retroflag to screw down the port PCB (or protoboard in my case). I didn’t expect the green printed part to fit in so securely, if it works loose I can just add a dab of glue and it shouldn’t be able to move. I do have all 4 sides fairly snug and the Link Port is put out into the case plastic so it can’t lift out on that side. I used Design Spark Mechanical to make that adapter mount, it was quite easy, far easier than getting something that dimension specific done in Tinker Cad. I have to spend more time using it. I probably could have made the Ampi case in it far more easily if I had stuck with it.

The image above is a view of the DMG Link Port Mount model. The first test print worked perfectly, which is uncommon. It was a snug press fit, the port fit right into the cavity for it, the screw posts printed solidly and the holes in it are the right size for the screws. You have to put the Link PCB with the jack on it while the mount plate it loose yet, just work them in together and you should have a good fit for both. It may look like the screw posts are back a bit far, but that is because my piece of proto board is a little shorter than the PCB I designed. I made the mount to match the PCB design, not the piece of proto board I am using.

The unit is complete now and tested. I used it awhile without the Link Port as I was still sorting out some things on how I wanted to install it. I also had tested the Link function and it wasn’t working due to me no knowing that there is a twist in the cable so two of the pins had needed switched with how I was connecting it up.

I have the revised v3.21 board shown above as it is now. Like I mentioned some component designations have been changed. D2 R18 etc. I have relocated some pads. I put the Wii pads together by bringing down the 3V3. The Work Ram is lower on the new revision. I think it may now clear the center front post in the lower case body, but with it where it is on my prototype it just gets in the way a little bit. I have added a notch in the board that should allow keeping the back center hole in the case instead of cutting the post off.


Joe has pulled my Fork into his project and corrected the Left/Right Audio being flipped as of 1/20/23.

https://github.com/joeostrander/consolized-game-boy

If I do more updates they will be available in my Fork of Joe’s project and hopefully get pulled into his:

https://github.com/Markeno76/consolized-game-boy

There are a few things I may do yet. Time will tell. I’ll have to fix the schematic listed here for the Left/Right being flipped.

Full Schematics:

Follow up post :