Google Analytics

18 januari 2023

Bouw: Een Cambridge Mk14 in een PIC

De Microcomputer Kit 14 (Mk-14) is ontwikkeld in 1977 door Science of Cambridge (later Sinclair) uit het Verenigd Koninkrijk. Deze kit is gebaseerd op de 8-bit INS8060 processor van National Semiconductor uit 1976 en hoort bij de SC/MP II familie (uitgesproken als "Scamp") wat staat voor Simple Cost-effective MicroProcessor.

Het doel van de kit was om te leren programmeren door middel van de 46 beschikbare instructies van deze SC/MP processor. De kit bestaat uit een printplaat met 18 IC's (exclusief de 7805 spanningsregulator), een 9-cijferig bubble led-display, een membraamtoetsenbord met 20 toetsen, een resetknop, 512 bytes ROM en 256 bytes RAM (uitbreidbaar naar 640 bytes).

Foto van een originele Mk14. Deze kan worden uitgebreid met een INS8154 RAM/IO IC
(in de rode voet) en een RAM uitbreiding in de andere voetjes. Foto: John Short

Er zijn in totaal 5 versies van de Mk14 gemaakt. Van de destijds meer dan 15000 verkochte exemplaren zijn er tegenwoordig nog maar weinig exemplaren van over. Op dit moment (januari 2023) is er een originele ongebouwde kit te koop op eBay voor een bedrag van maar liefst 3239 euro. In de loop der jaren zijn er verschillende replica's op de markt verschenen op basis van de originele chipset, maar de deze IC's zijn lastig te verkrijgen.

Het PIC ontwerp

Karen Orton† heeft de Mk14 weten te emuleren in slechts één goedkoop IC, de PIC16F876. De PIC wordt geklokt op de maximale klok frequentie van 20MHz en door de emulatie komt dit overeen met een Mk14 op 4 MHz, slechts 11% trager dan de originele Mk14 (4,43 MHz).

Schema van de Mk14 PIC emulator, bron: Karen Orton website

Budgetronics.eu heeft een printplaat ontworpen voor dit ontwerp en levert een complete kit met het voorgeprogrammeerde PIC IC.

De bouw


De onderdelen van de "Mk14 in a PIC" kit

Na ongeveer 1.5 uur solderen is de Mk14 in a PIC gereed.


Werking

Na een druk op de SC/MP reset knop, verschijnt links op het display 0000 (adres) en rechts 00 (data). Dit is het startpunt van het SCIOS monitorprogramma. Hierna wordt het start adres ingetoetst en daarna de Term-toets voor het invoeren van de opcode/data. Door middel van de MEM-toets wordt de inhoud opgeslagen en het adres automatisch met 1 verhoogd, waarna het programma op dezelfde wijze verder kan worden ingevoerd.

De ABORT-toets wordt gebruikt om het invoeren af te ronden. Voer nu het startadres in en druk op de GO-toets om het programma te starten.

De SC/MP instructieset van de Mk14


Enkele verschillen

In tegenstelling tot de originele Mk14, is er op de "Mk14 in a PIC" geen IO-interface beschikbaar voor het aansturen van andere apparatuur.

Zoals uit onderstaande tabel blijkt, is de geheugenindeling van de "Mk14 in a PIC" is niet volledig identiek aan die van de Mk14. Items die ontbreken in de standaard Mk14 zijn tussen haakjes weergegeven. Hoewel het RAM-geheugen van de PIC14 meerdere keren voorkomt in de geheugenindeling, zijn dit slechts kopieën.
In totaal zijn er dus slechts 256 bytes RAM beschikbaar.

Adres   Mk14Mk14 (PIC)          
000
100
SCIOSSCIOS
200
300
SCIOSSCIOS
400
500
SCIOSSCOIS
600
700
SCIOSSCIOS
800(RAM IO)Display
900DisplayDisplay
A00(RAM IO)RAM
B00(Expansion RAM)RAM
C00(RAM IO)Display
D00DisplayDisplay
E00(RAM IO)RAM
F00Standaard RAMRAM

De Sense A-interrupts zijn niet geïmplementeerd en SC/MP-paging is ook niet aanwezig.

Illegale SC/MP-instructies zorgen op de "Mk14 in a PIC" voor een reset. Dit is een voordeel, omdat een programma-crash door een illegale instructie op de Mk14 vaak onopgemerkt bleef en vaak leidde tot het (gedeeltelijk) overschrijven van het RAM-geheugen.


Extra functies

De "Mk14 in a PIC" heeft een aantal extra functies ten opzichte van de originele Mk14:

De geprogrammeerde instructies blijven bewaard in het Flash geheugen, dus zelfs na uitschakeling van het systeem.

Er is een seriële download-functie beschikbaar waarmee een Intel hex-bestand naar de "Mk14 in a PIC" kan worden gestuurd. Deze functie wordt automatisch gestart na een PIC-reset. Als deze functie niet nodig is, kan deze modus worden verlaten door op de SC/MP reset-toets te drukken, waarbij de RAM wordt geladen vanuit het Flash-geheugen. Bestanden dienen te worden overgedragen met een baudrate van 9600, 8 databits, 1 stopbit en geen pariteit. Omdat de verbinding eenrichtingsverkeer is wordt er ook geen handshake toegepast.


Kleine hardware aanpassing

De schakeling is ontworpen om RS-232 signalen te verwerken die worden ontvangen via de "Serial-in" aansluiting op de printplaat. Deze signalen variëren tussen de -12V (1) en +12V (0). De ingangsschakeling zet deze signalen om naar TTL-niveau (0V en 5V) en inverteert het signaal door middel van de BC547 transistor. 
Om een bestand vanaf een PC te kunnen versturen, wil ik gebruik maken van onderstaande kabel, die USB-signalen omzet naar serieel TTL-niveau omdat ik deze al in bezit heb.



Deze kabel kan niet rechtstreeks op de "Serial-in" worden aangesloten. Daarom voorzie ik de "Mk14 in a PIC" van een extra aansluiting op TTL niveau. Ik soldeer hiervoor een extra signaal pin op de plek waar normaal gesproken de collector van de BC547 transistor zit. Vervolgens soldeer ik de transistor aan de onderkant van de printplaat.

De GND aansluiting van de kabel word op de - aansluiting van de "Serial-in" gestoken en de TXD op de nieuwe TTL ingang. Zie rechter foto hierboven.

Software test

Om de "MK14 in a PIC" te testen gebruik ik het programma Babbage, gemaakt door Karen Orton. Dit programma berekent de waarde van Pi met behulp van het Babbage-algoritme. Hieronder staan de hex codes zoals die handmatig op de "Mk14 in een PIC" worden ingevoerd, beginnend op adres 0f20 en eindigend op 0fee.

      0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
0f20 c4 0d 35 c4 0f 36 c4 8d 32 c4 32 c8 e6 c4 0f 37
0f30 c4 9b 33 c4 00 c8 dd c4 00 31 c4 04 c8 d7 c3 00
0f40 d4 0f 01 c2 80 cd 01 c4 0b 8f 00 c7 01 1c 1c 1c
0f50 1c 01 c2 80 cd 01 c4 00 8f 00 b8 b9 9c e0 c4 0b
0f60 8f 00 c4 00 c9 00 c7 fc b8 aa 9c cb c0 a5 98 bd
0f70 c7 fc c4 0a c8 9e c4 08 c8 9b 02 c3 00 eb 08 cf
0f80 01 b8 92 9c f6 b8 8d 9c ed b8 88 90 a0 3f 06 5b
0f90 4f 66 6d 7d 07 7f 67 00 00 00 00 00 00 00 00 91
0fa0 03 44 30 92 98 79 00 83 49 41 90 61 93 99 99 24
0fb0 23 26 00 63 93 99 99 21 67 69 55 06 00 00 00 03
0fc0 60 50 72 02 00 00 00 91 19 36 98 99 99 99 99 20
0fd0 55 86 93 99 99 99 99 72 79 06 01 00 00 00 00 99
0fe0 74 90 99 99 99 99 99 62 36 00 00 00 00 00 00

Een alternatief voor handmatige invoer is het omzetten van bovenstaande codes naar het Intel HEX-formaat. Dit bestand wordt dan via de seriële interface kabel van de PC naar de "Mk14 in a PIC"  verzonden:

:100F2000C40D35C40F36C48D32C432C8E6C40F3781
:100F3000C49B33C400C8DDC40031C404C8D7C30097
:100F4000D40F01C280CD01C40B8F00C7011C1C1C33
:100F50001C01C280CD01C4008F00B8B99CE0C40B55
:100F60008F00C400C900C7FCB8AA9CCBC0A598BD1F
:100F7000C7FCC40AC89EC408C89B02C300EB08CFC4
:100F800001B8929CF6B88D9CEDB88890A03F065BA6
:100F90004F666D7D077F6700000000000000009134
:100FA0000344309298790083494190619399992440
:100FB0002326006393999921676955060000000371
:100FC0006050720200000091193698999999992001
:100FD00055869399999999727906010000000099B4
:0F0FE00074909999999999623600000000000069
:00000001FF

Nadat de kabel op de USB poort van de PC is aangesloten, wordt een virtuele COM poort op de PC aangemaakt, die te vinden is in Windows Apparaatbeheer. In mijn geval is dit COM5.
Daarna wordt via een Windows-opdrachtprompt de poort ingesteld door middel van het commando:

mode com5 baud=9600 parity=n data=8 stop=1

Status for device COM5:
-----------------------
    Baud:            9600
    Parity:          None
    Data Bits:       8
    Stop Bits:       1
    Timeout:         OFF
    XON/XOFF:        OFF
    CTS handshaking: OFF
    DSR handshaking: OFF
    DSR sensitivity: OFF
    DTR circuit:     OFF
    RTS circuit:     OFF

De knop "PIC Reset" wordt gebruikt om het programma naar de "Mk14 in een PIC" te sturen. Op de PC wordt dan het volgende commando gegeven:

copy babbage.hex com5

Nadat het programma is geladen wordt het startadres 0F20 ingevoerd en kan het programma worden gestart door op de knop "Go" te drukken. Na een aantal iteraties wordt een benadering van het getal Pi weergegeven op het display.

Het is geweldig om te zien dat het mogelijk is om Pi te benaderen met slechts 256 bytes aan programma geheugen en een beperkte instructieset!

07 januari 2023

Reparatie: C64 #1

Een oud collega kocht uit nostalgie een Commodore 64 (C64) op Marktplaats met de vraag om deze te testen.

De eerste vraag daarbij is: hoe sluit je een C64 aan op een moderne TV / monitor? De C64 beschikt over een composiet video signaal (15kHz) en latere revisies ook over een s-video signaal. Een wat oudere TV die over een RGB scart connector beschikt kan hiervoor worden gebruikt door een speciale kabel te maken, zie hiervoor de volgende blog: https://www.lemon64.com/forum/viewtopic.php?t=72807

Beschik je alleen over een TV / monitor met een HDMI aansluiting dan kan een video naar HDMI converter worden gebruikt. Hiervoor bestaan diverse hele goedkope uitvoeringen maar die geven vaak een vrij slecht beeld.
Zelf ben ik tevreden over de video converter van Tendak die over zowel een composiet als een s-video ingang beschikt. De s-video geeft over het algemeen een beter resultaat. 

Voor en achterzijde van de Tendak video converter

De benodige bekabeling is kant en klaar te verkrijgen maar kan uiteraard ook zelf worden gemaakt.

Na het aansluiten van de voeding en de bekabeling blijkt de C64 niet goed te functioneren. De tekst is verstoord en de gerapporteerde hoeveelheid vrij geheugen is 14528 bytes in plaats van de gebruikelijke 38911 bytes.
Ik plaats een z.g.n. diagnostics cartridge om een diagnose uit te kunnen voeren en ook hier is de tekst inhoudelijk verstoord met steeds veranderde tekens (zie tweede afbeelding).

Naarmate de tijd verstrijkt wordt de inhoud wel steeds beter, waarschijnlijk door opwarming van één of meerdere IC's.


Tijdens het doorlopen van de geheugentest loopt het programma vast met het volgende patroon:


Uit dit beeld valt af te leiden dat de RAM die gebruikt wordt voor het weergeven van de kleuren wel lijkt te functioneren.

Aanpak

De eerste stap na het openen van de behuizing is een visuele inspectie van de printplaat en componenten;

  • Zijn er verkleurde of verbrande plaatsen op de printplaat?
  • Zijn er elco's aanwezig die zijn opgezwollen of hebben gelekt?
  • Zijn alle IC's goed in de voet gedrukt?
  • Is er corrosie aanwezig aan de IC pootjes of connectoren?

C64 Printplaat uit 1983, in dit geval assy 250407 Rev. B

Wat opvalt is dat IC U8 en U12 in IC voetjes zitten, normaal gesproken zitten deze rechtstreeks op de printplaat gesoldeerd. Er heeft dus al eerder een reparatie (of een poging daartoe) plaatsgevonden. Verder ziet alles er visueel goed uit behalve dan dat de metalen afscherming van het VIC-II video gedeelte (rechts van het midden) ontbreekt. Deze dient niet alleen voor de RF afscherming maar ook voor de koeling van dit IC die behoorlijk heet kan worden.

Ook aan de onderkant van de printplaat zijn geen bijzonderheden te zien.
Dan is het zaak om naar de meest waarschijnlijke oorzaken te kijken van video weergave problemen, dit zijn:

  • De geheugen IC's
  • VIC-II IC
  • PLA IC
  • Logica IC's van het fabricaat MOS.

Testen van de geheugen IC's (U9 t/m U12, U21 t/m U24)

Om niet alle IC's te hoeven desolderen kijk ik eerst of er IC's zijn die erg heet worden. Defecte IC's kunnen veel warmte produceren. Ik meet dit met een infrarood thermometer. Een rode laserstip (zie foto) geeft aan waar gemeten wordt en ik vergelijk de temperatuur van de 4164 RAM IC's onderling. Ik meet hierbij geen noemenswaardige onderlinge verschillen.


De diagnostics cartridge is in staat om het geheugen te testen, maar dat is lastig af te lezen als het beeld zo verstoord is. Na voldoende opwarmen en een goed moment komt vaak het geheugen IC U9 als defect naar voren.

Deze heb ik gedesoldeerd, vervolgens een IC voetje geplaatst en het IC vervangen. Het 4164 IC heb ik getest met de Retro Chip Tester Pro en deze blijkt inderdaad defect. Het defect komt pas aan het licht bij het uitvoeren van een z.g.n. March test, dus een redelijk zeldzame fout.

De vervanging lost wel het probleem met de beschikbare hoeveelheid geheugen op, maar het beeld is nog steeds verstoord.

Testen van het VIC II IC (U19)

Het complexe 6569R3 VIC II video display IC kan het beste worden getest door deze te vervangen door een werkend exemplaar. Deze IC's worden niet meer geproduceerd en er is nog geen goed alternatief beschikbaar dus de enige optie is om een IC uit een werkende C64 te lenen. Dit kan vrij gemakkelijk omdat deze al bij assemblage in een IC voet is geplaatst. Vervanging lost  helaas het probleem niet op.

Testen van het PLA IC (U17)

Het PLA IC wordt ook niet meer geproduceerd, maar hier is wel een goedkoop alternatief voor ontwikkeld door Daniël Mantione: de PLA20V8 op basic van twee GAL20V8B IC's. Zie zijn website https://www.freepascal.org/~daniel/c64pla/ voor verdere technische details.

Het printje kan in de bestaande U17 IC voet worden gestoken. Helaas lost ook deze vervanging het probleem niet op.

Logica IC's van het type MOS

Andere veel voorkomende problemen worden veroorzaakt door logica IC's van het fabricaat MOS. Het toenmalige productie proces uit de jaren '80 bevatte fouten, waardoor deze IC's tegenwoordig massaal uitvallen. Om een C64 toekomst bestendig te maken raadt ik aan om deze IC's altijd te vervangen, ook als ze nu nog werken.
Op deze printplaat blijken er twee te zitten: U27, een MOS 7712 (equivalent aan 74LS08) en U14, een MOS 7709 (equivalent aan 74LS258). Vervanging van deze IC's door hun equivalent blijkt het probleem op te lossen.

De defecte IC's (1984)

Na vervanging van de defecte IC's heb ik ook nog koelribben geplaatst op de belangrijkste IC's: De 906114-01 PLA (U17), SID 6581 (U18) en de VIC-II  6567 (U19).

Testen van de C64

Bij het testen van de C64 wordt gekeken naar de resultaten van de diagnostics cartridge. Bekijk het Tynemouth blog voor meer informatie.
http://blog.tynemouthsoftware.co.uk/2014/10/commodore-64-diagnostics-test-harness.html 

Bij een een aantal IC's wordt BAD weergegeven. Dit betekent niet dat deze componenten ook echt defect zijn. Er zijn namelijk speciaal bedrade connectors nodig die op de C64 poorten worden aangesloten, waar ik niet over beschik. In plaats daarvan test ik het gebruik van de diverse poorten, cassette recorder, joystick, toetsenbord en het geluid door ze simpelweg uit te proberen.
Als enige kwam het slecht functioneren van het toetsenbord naar voren, sommige toetsen reageerden helemaal niet en bij andere moest er meerdere malen of met enige kracht een toets worden ingedrukt.
Oplossing hier is het reinigen van de kontakten. Het toetsenbord is eenvoudig los te schroeven uit de behuizing. 

Maar liefst 23 schroefjes dienen te worden verwijderd om de onderplaat te kunnen verwijderen. Ook de twee draadjes van de shift lock toets links worden los gesoldeerd.


Na het verwijderen van de onderplaat worden de toetsen zichtbaar die allemaal over twee geleidende vlakjes beschikken. Al deze vlakjes worden schoongemaakt met een wattenstaafje gedrenkt in 99,9% isopropanol.

Daarna is de printplaat zelf aan de beurt, veel van de goudkleurige vlakjes blijken vervuild en ook hier wordt alles met isopropanol schoongemaakt totdat ze weer mooi blinken. Het is veel werk maar het resultaat is een weer prima functionerend toetsenbord. 

De C64 is nu helemaal gerepareerd en geschikt voor vele uren retro plezier.