20 Feb 2019

System 16B motherboard - Sega (repair log)

The third and last board I got from ekorz. It was sent as non going but I found game logic was actually working but:
- sound was totally absent
- colours were wrong (mostly yellow screen)
- text and background layers were missing

It's hard to see but sprites are actually drawn in white.
By looking at the board something caught my eyes: UMC (United Microelectronics Corporation) branded RAM chips (known to be unreliable).
I probed them:
- 1 * 6116 type for sound RAM: was bad
- 2 * 6116 type for palette RAM: one was bad
- 2 * 6116 type for text RAM: both were bad

Once replaced:

Motherboard fixed.

13 Feb 2019

Hammer Away - Sega+Santos 1991 (repair log)

I got this game in a lot of faulty boards from ekorz. I'd like to thank him a lot, the boards were in great condition. According to him romboard was fine but motherboard had colour issue and a repair had been previously attempted. I could confirm both, game had a saturated blue colour, and both palette RAMs and a couple of nearby TTL chips had been put on sockets.

I started by probing the palette RAMs and found signal /WE of IC42 was floating. I traced it back to a LS244 (IC40) but piggybacking it made no difference. Then I found the two enable signals (1G/2G) of this LS244 were tied together and held high when not writting to the RAMs. This causes the output signals to go in high impedance state, however probing /WE signal of the second palette RAM revealed it was high so there clearly was a pull-up resistor involved. I measured 1kΩ resistance with Vcc whereas the floating output measure few MΩ. Looking at the board closely I discovered a 1kΩ resistor between the two palette RAMs. On was tied to Vcc as expected the the other, altough aligned with the /WE pin of the RAM IC42 was connected to nothing. I could see the trace was going straight to the rivet (only few millimetres away) of /WE pin so to me had to be connected there. I restored connection and colours were fixed:

I then tested inputs, sound, etc. but found nothing else wrong.
Game (very easily) fixed.

6 Feb 2019

Master System II - Sega (uneconomical repair)

Some repairs aren't worth the effort an time they would need. I'm looking at you faulty Pit Fighter PCB! But giving up is the easy way and I like challenges.

Here we have a faulty Master System II. According to previous owner left direction for player 1 is stuck. I powered the console (with Alex Kidd built-in) and sure enough Alex went straight to the left. I opened the unit and found the custom chip handling (amongst other things) inputs was a 315-5237. SMSPower website has tons of info about the MS and is an extremely valuable source, thanks to all of you guys contributing to it. So I quickly found pinout and probed pins used for controls:
- P1 down was floating
- P1 left was stuck low (= seen as button depressed)
- P1 right was stuck low (= seen as button depressed)
Other controls seemed fine (P1 up/buttons, P2 controls). This was confirmed by testing the player 2 port with different games, however behaviour for player 1 changed from game to game:
- Alex Kidd = keeps going left and impossible to crouch/duck
- Double Dragon = keeps going down/right
- etc.

Not that way Alex!

Ugh... I'm cornered.

I suppose this all depends on how each game was coded and what priority was given between up/down and left/right directions.

Anyway pull-up resistors for those inputs are embedded in the custom chip and previous owner already installed an external resistor but it didn't do the trick. I measured resistance for all 3 faulty inputs and found:
- P1 down wasn't connected to anything internally (no pull-up resistor measured, in fact resistance was infinite with any other pin)
- P1 left and P1 right had only few dozens of ohms resistance with ground so wasn't surprising the external 4.7kohm resistor didn't work

I could have stopped there, custom chip being faulty I would have needed a replacement from an other Master System II with the same motherboard. Sega hardware is generally rock solid and only faults I've repaired before on Master System II were broken solders on the AV port and severed traces, in other words even if I had found a compatible donor it's likely repairing it would have been simple. At least simpler than pulling the DIP48 custom chip and transplanting it in the other console.

Having repaired older Sega hardware similar to the Master System (e.g. Mark III) I knew controls could be read and data sent on the bus with simple TTL chips. My idea was to reverse engineer the part of the 315-5237 custom chip handling inputs.
I started to build a small test circuit with the custom chip on a socket and a GAL chip to recreate the faulty part of the custom chip. I lifted pins of the custom chip corresponding to P1 down/left/right and data bits D1/D2/D3 in order to isolate them.

The Master System reads control trough two mapped ports $DC and $DD, inputs are latched to the data bus:
- $DC.d0 = P1 UP
- $DC.d1 = P1 DOWN
- $DC.d2 = P1 LEFT
- $DC.d3 = P1 RIGHT
- $DC.d4 = P1 BUTTON  1
- $DC.d5 = P1 BUTTON 2
- $DC.d6 = P2 UP
- $DC.d7 = P2 DOWN

- $DD.d0 = P2 LEFT
- $DD.d1 = P2 RIGHT
- $DD.d2 = P2 BUTTON 1
- $DD.d3 = P2 BUTTON 2
- $DD.d4 = RESET BUTTON (not present on MS2 anyway)
- $DD.d5 = Cartridge slot CONT signal

Given all other functions of the custom chip were working fine I went for the minimal replacement solution, that is to say reading of P1 DOWN/LEFT/RIGHT inputs and latching them to D1/D2/D3 on the data bus. It was quite easy to figure out equations. Here is the PLD file I wrote for a GAL16V8 chip in case someone else has a similar issue and wants to take inspiration (for some reason WinCUPL didn't allow me to use more than one term for the OE equations so I used a spare output, it might be a GAL16V8 limitation):

Name      315-5237_repair;
Partno    ;
Date      ;
Revision  ;
Designer  Apocalypse;
Company   ;
Assembly  None;
Location  None;
Device    G16V8;
/**  Inputs  **/
PIN 1 = JyDs;
PIN 2 = A0;
PIN 3 = A6;
PIN 4 = A7;
PIN 5 = RD;
PIN 11 = IN_OE;
/**  Outputs  **/
PIN 18 = D1_BUS;
PIN 17 = D2_BUS;
PIN 16 = D3_BUS;
PIN 15 = D1_5237;
PIN 14 = D2_5237;
PIN 13 = D3_5237;
PIN 12 = OUT_OE;
/** Logic Equations **/
OUT_OE = !RD & !JyDs & !IOREQ & A6 & A7;
D1_BUS = !A0 & DOWN # A0 & D1_5237;
D2_BUS = !A0 & LEFT # A0 & D2_5237;
D3_BUS = !A0 & RIGHT # A0 & D3_5237;
D1_5237.OE = !IN_OE;
D2_5237.OE = !IN_OE;
D3_5237.OE = !IN_OE;
D1_5237 = D1_BUS;
D2_5237 = D2_BUS;
D3_5237 = D3_BUS;
And then was successfully tested:

Console (uneconomically) fixed.