Wednesday, April 14, 2021

The risk of buying chips online

 So far I’ve been pretty lucky buying chips from the internet but recently ( 2021 ). I have had two bad purchases on AliExpress.

The first purchase was 2 x 6510 CPU’s. This was a pretty easy dispute as one of the chips was broken in half and the other was dead.  This dispute was very quickly and easily resolved. 

On the second dispute I got scammed by a very schrewed and dishonest trader.  So I am going to document my lessons learned here for dealing with fake chip disputes on AliExpress. 

So here goes . .

When opening a dispute with AliExpress you need to document your dispute fully. 

1) take photos of the product front and back

2) take photos of the packaging front and back including all packing material

3) take SHORT videos of you testing the item as clearly as you can showing the item not working. 

4) write your issue in detail in full

5) when logging the issue only do "full refund no return"

6) do not engage the vendor if they try to get you to return the item.   Let AliExpress deal with them. 

I learnt a very hard lesson from this vendor and lost a lot of money. So in full disclosure I’m going to put it here.

I do not recommend buying from Liheng at Aliexpress.  Please note that they have a number of shop fronts such as Liheng1 and Liheng2 . . etc etc.  I suspect this is so they can cycle through thier stores to clean out negative feedback.


Saturday, March 27, 2021

Atmel ATF1504AS(L) CPLD Development Board - Part 8 - Replacing Logic 74HC00

Time to experiment with replacing Logic chips.  This time I am going to replace a 74HC00 on a Z80-MBC2 board.

It's important to review not only the data sheet for the 74HC00, but also the Z80-MBC2 to ensure that it is appropriate.  For this experiment everything is running at 5Volts so it is safe to proceed.

You don't need a Z80-MBC you can just connect A and B to the VCC and GND lines in combinations and the Y lines to some LEDs.

However I wanted to see if it would work in a REAL system.

You can go to Hack a Day to learn more about the Z80-MBC.

 

74HC00 Datasheet

Let's first review the Datasheet, specifically we need to know how the 74HC00 operates and the pin out.  In this case it is very easy, there are four NAND gates in the DIP.
 
It should be strongly noted that we are implementing LOGIC only with the CPLD.  Some Logic chips have built in electrical characteristics that can not be replicated by the CPLD

 

Replicating the 74HC00 in Verilog

Now it's time to replicate the 74HC00 in Verilog.
As you can see on the image above there are Four NAND gates.
 
To save time having to type out each gate individually you can create an array of pins, the following declares 4 pins ( 0,1,2 and 3 ).
 
     input [3:0]  pinA
 
which is much better than this
 
    input pinA0    
    input pinA1
    input pinA3    
    input pinA4
 
Each gate has Two Inputs ( A and B ) and One Output ( Y ).
The Two inputs A and B are AND'ed togther and then the result is NOT'ed ( reversed ).
 
    Y = NOT ( A AND B )
 
In Verilog this is as follows where x is the pin number in the array.
 
    assign y[x] = ! ( a[x] & b[x] ) 
 


Let use also allocate the pins in a logical way in the Pin Planner.


Hooking it all up

Finally let's hook it up to the Z80-MBC2.  It is a bit tight for space so take your time with the wires.  I am using the Z80 to power the CPLD via pins 7 GND and 14 VCC.

Without the 74HC00 installed the computer stops at the line" IOS: Z80 is running from now".

It lives, the user prompt is ready and waiting for action.







Thursday, March 25, 2021

Atmel ATF1504AS(L) CPLD Development Board - Part 7 - Using a Clock ( clk )

Buttons and LEDs are fine but it really doesn't come close to interfacing with real hardware.  So now to take the human element out of the equation and time to use a clock.

For this experiment I am using a 1 Mhz crystal oscillator.  It doesn't sound very fast but the untrained human eye can only really see somewhere less than 100Hz (see various debates on this on the internet).

This isn't a step by step, but I've given you big hints on how to avoid the big issues.

Happy learning!

The BOM

For this experiment I will be using the following items:

  • 1 x CPLD Dev board
  • 1 x LED array ( as seen previously, or you can just use 1 LED and a resistor )
  • 2 x 4017 decade counters
  • 1 x 1 Mhz crystal oscillator, any 5 volt, 1Mhz  4pin crystal oscillator will do.
  • 1 x 01.uF capacitor
  • Lots of Jumper wires
  • LA2016 Logic Analyzer ( or any logic analyzer that can handle 5v )  (optional bonus content)


 

Failing and learning ( get a Logic Analyzer )

The one thing I learnt early on when constructing this experiment was that I simply could not get the clock division down to a low enough level to see the result.  What I really needed was a Logic Analyzer so I could actually see what was going on.  I went over and over the code trying to work out what was wrong with it and . . . there was nothing wrong.  I just didn't have the right instruments to tell me I was ok.

If you are going to continue your journey with CPLD's and FPGA's you are going to need one.  Go buy it now or you will just be frustrated.

Failing and learning part 2 (tie down all of the control input pins on the 4017)

 
The second issue I had was just failing to ground the reset and clock enable pins on the 4017.  Don't let control inputs float.  Either connect them to ground or to power.  I only realized at the end that I had not tied the reset pin to ground.  So frustrating.

 

Failing and learning part 3 (assign ALL pins on the CPLD)


I got mighty confused with the clocking because of the way the compiler works.  If you don't assign all of the outputs the compiler will assign random outputs on the internal buses that are not assigned to unassigned pins.  If you don't want to see output then assign them all to 0.

 

Example code

 
I originally wrote the code in Verilog, but as I didn't have a Logic Analyzer I failed and looked around for some example code.  Eventually I found Bil Herds example program on Hackaday and modified it for my own use.
 
The source is just a plain rip-off of Bil's project with a few modifications with the help of old school wisdom from my cousin.


Here are the pin assignments.

 

Why are you using 4017 decade counters?

 
This is pretty simple really.  When I first started this project I made some really rookie errors and couldn't get the clock less than about 122Hz with a little advice I managed to get it to work properly and no longer need them.
 
However, it is fun to used them and we get to learn a little more about how to interface with the CPLD.


Wiring up the board and Logic Analyzer output

 
Looking at the Analyzer you can see a number of signals.
  1. This signal is the clock itself at 1MHz.
  2. This is the output of the first CPLD counter at 3.90KHz
  3. This is the output of the second CPLD counter at 49.90Hz
  4. This is the output of the third CPLD counter at around 0.06Hz +/- a bit

 

Plugging the second CPLD output into the 4017's makes the LED flash a around once every 3 seconds.

And here is the finished product.

 


Saturday, February 27, 2021

Repair : Commodore 128 blackscreen repair - part 1

Quite a while ago I bought what I thought would be an easily fixable Commodore 128.  On the pictures it booted into 128 mode and c64 mode just had the blue screen with no text.

When the computer eventually arrived the green screen started with no text, that's odd and the C64 screen was not working at all.  Then after a few restarts nothing worked. Ugh oh!.

Let's open her up!

 
I've bought and fixed two 128's so far and previously I've used the rocking method on a soft surface with mixed results.  This time I tried a spudger and it work miraculously.  
 
Insert the flat end just above the joystick port and slowly move it to the high point.
As you get close to the highest point lift the spudger up, this pulls the bottom of the case out and pushes the top in.  Intern this releases the catch.
 
Once complete do the same on the other side.  


Maintenance on the Character and Kernel Roms

On opening the case, the first blatantly obvious issue was that the character ROM had fallen out.  It was a custom ROM in an adapter so that a larger 8K ROM would fit in the 4K ROM socket.  Reseating the ROM did not fix the issue either.

The second thing I noticed was that the Character and Kernel ROMs didn't have any tape over the windows.  So I covered them immediately and popped them out to verify the ROM contents.  Surprisingly both ROMs where 100% fine.  So I put them back in.

What is going on with the PLA?

I left the machine for a few days and when I started it again 128 mode was working again, but this time it only lasted for one reboot then disappeared.  This really confused me.  I removed the SID and still nothing.  I was about to pull both of the CIA's when I noticed the PLA had one of those round pin sockets.  I am really dubious about them so I tried booting again with my finger pushing down on Chip and it booted back into the familiar 128 boot screen.

I tried this a number of times and it was really really inconsistent. In the end the best method I found was to try to twist the whole socket.  Even bending out the pins to make better contact with the socket failed to help. At this point I knew the socket had to come out so I ordered a proper socket and waited for it to arrive.

Previous repair damage, what *%# happened to this board?

While waiting I decided to remove the old socket.  I used the desoldering gun and some solder wick clean up most of the pins. The socket itself proved to be difficult to remove, so I ended up carefully cutting it up the removing it piece by piece.  The disaster struck, part of a via and the connecting trace slightly lifted. However the the damage was minimal.  On inspecting the board I also noticed that one of the other vias was damaged as well, this one I definitely was not responsible for, it just was not there. 

Then I had a really good look at the board and noticed the damage on the Ram sockets where someone had applied way too much heat and burnt the board and then soldered in the sockets really badly.

This machine was a mess and it was pretty obvious a lot of repair work had been done on the board prior to me receiving it.

The damaged vias I decided where probably the primary source of the issue of the socket.  So I decided that was the first item on my list to fix,  I would deal with the rest later.

Replacing the vias

I've never replaced vias or riveted a PCB before so I took a fairly pragmatic approach.  I worked out the current diameter of the vias by inserting micro drill bits into the holes and then double checking the diameter with digital calipers.  The diameter worked out to be 0.8mm.  I then sourced some vias from EBay, specifically this item here.


As the internal diameter was correct I needed to drill out the holes very carefully using a hand drill to 1.2mm.

 After inserting the rivet I placed tape over it so it wouldn't fall out and them placed a standoff under the via to stop it pushing out.

Ensuring the rivet is sitting on the standoff by pushing it down a little, hopefully you'll meet the resistance that the standoff offers.

Using a circular motion slowly flatten the rivet down. then use the other end to ensure it is flat to the edge.


Once you are happy and the rivet is tight, you will need to solder the track back to the rivet and then more importantly check the continuity of the new via and track!

A working C128, well just the 128 part!

Soldering in the socket and inserting the PLA back in gave me rock solid C128 mode.


The final stretch, fix C64 mode

The final part of this repair wasn't straight forward either. I was using the C64 dead test cartridge and using the old put the new RAM chip over the top of the old RAM chip technique. I just couldn't get it work 100%.  On closer inspection every single one of the already replaced and socked RAM chips had terrible soldering. There were huge blobs and non-existant solder on every single socket. The first job was to resolder every single leg.  After that I was very quickly able to complete identifying and replacing two RAM chips.



So really there wasn't very much wrong?

In the end there really wasn't much to do.  However it does pay to inspect your unknown dead boards for bad repairs before you start the repair work.  I'm pretty happy how this turned out.

The final step for this will be to recap the electrolytic capacitors and I might look at a video memory upgrade using modern parts, but that is a whole other project.

But hang on wait . . . I've only check the C64 mode . . . does the C128 mode actually work properly?

See part 2


Saturday, February 20, 2021

Repair : Burning "Chucky's" DiagROM

After fixing 8 or so C64's I'd gotten a little board with 8 bit repair. So on a whim I bought a very broken Amiga 2000 and Oh my . . . now I'm neck deep in it.

To assist my efforts I'm having to source chips, but the availability of just bits from broken machines is really limited at the moment and I really am not keen to cannibalize working Amigas for this.  So I thought, let's see what "Chucky's" DiagROM does, I've got some spare EEPROMS.

Steps in detail

I've previously backed up and burnt Amiga EEPROM's in previous projects using my GQ-4x4 with the 16 bit ROM adapter. This time let's do it in detail.

DiagROM

    You can get the DiagROM from  Chucky's website here : https://www.diagrom.com/
 
1) Plug your burner in and start the software (don't put any chips or adapters in it just yet).
 

2) Go to "Device" and select "AT27C400".
 
The Software tells you that you will need a) the Adapter and b) to put the chip into the bottom of the 40 pin socket.


 

3)  Go to "File" and then "Open" and open the file "16.bit" from the zip file you downloaded from the website.

4) You can leave all of the settings default and just click on "Write" to burn the image to the chip.  I will also perform a verify as well once complete.
 
 
5) Complete, now you have a DiagROM of your very own.
 
 
The next step from here is to get a serial console going.  So I'll need to get a USB to Serial cable, Null modem cable and a 9pin serial to ( whatever the big d-sub socket is ) converter.