Een nieuwe System 5-kloon

Ik heb al meerdere malen aangegeven dat ik geen plaats en doel heb voor een System 5. In een vorig nummer van de Asterisk schreef ik al dat ik daarom mijn Atom 2k14 had aangepast zodat deze zich als een System 5 kan gedragen. Op zich werkt dat goed maar ik heb gemerkt dat er toch verschillen zijn, programma’s werken toch niet 1-op-1 op de Atom en op de echte System 5 van Bas. Daarom wordt het toch tijd voor een nieuwbouw System 5...

Ik heb nog een rack liggen uit de tijd dat het bouwen van een Atom-in-een-rack erg populair was. Daar kon je tenminste nog wat uitbreidingen in kwijt. Dit rack wordt de basis voor mijn System 5+. Om een System 5 (of 4, 3 danwel 2) te maken heb je minimaal nodig:

Voor mij zou dit betekenen dat ik minimaal drie eurokaarten moest bestellen bij Chris Oddy (hij verkoopt replica kaarten voor System computers) a £9.90 per stuk. Dat wordt inclusief verzendkosten en invoerkosten al snel een duur grapje. Dus ik heb besloten om mijn eigen CPU kaart te ontwerpen. Deze kaart heeft een 6502A processor, 6522 VIA, 128 kB RAM geheugen en 128 kB ROM geheugen. Behalve in een System 5 is deze kaart dus ook toepasbaar als stand-alone CPU board (zeg maar een hele grote en dure Raspberry Pi Pico met minder mogelijkheden, maar wel te programmeren in 6502 assembler).

Omdat ik zo veel geheugen tot mijn beschikking heb, kreeg ik nog een paar leuke ideeën die ik hier met jullie wil delen.

Idee 1 voor System 5+
Goed plan: ontwerp een extra memory map die de geheugen-indeling van de BBC Micro benadert. Dit geeft namelijk de mogelijkheid om tekstmode applicaties zoals programmeertalen (Pascal, Lisp) maar ook programma’s als View en ViewSheet te draaien. Dit zal overigens geen volwaardige BBC computer worden aangezien kenmerkende hardware ontbreekt, denk daarbij vooral aan het video-geheugen, seriële interface en sound chip. Een aantal componenten kan wel als aparte uitbreidingskaart toegevoegd worden zoals de genoemde seriële interface, sound chip, Tube® en User Via met printer-aansluiting.

Benodigdheden:

Hindernis:

Oplossing:

Idee 2 voor System 5+
De 24x40 Teletext VDU kaart werkt niet op 2 MHz; omdat het benodigde 6 MHz signaal afgeleid wordt van ∅2 is het niet mogelijk om zo maar de clock frequentie van de processor te verdubbelen. Ik heb geprobeerd om dit op te lossen door op de VDU kaart IC3 te vervangen door een oscillator van 6 MHz. Toevallig komt dit met de pin bezetting heel goed uit. In principe werkt dit wel, echter, er zit storing in het beeld. Maar er zit nog een andere adder onder het gras: de SAA5050 verwacht ook nog een 1 MHz signaal op pin 20 (F1). Dat wordt echter 2 MHz waardoor deze handige hack dus niet werkt zonder de VDU kaart grondig te verbouwen.

Daarom dus een ander idee: maak van de Acorn Bus, net als bij de BBC computer, een vaste 1 MHz bus. Dus ∅2 op de backplane is altijd 1 MHz. Het enige dat de CPU kaart dan hoeft te doen is de klok hardwarematig terugschakelen naar 1 MHz als er I/O aangesproken wordt.

Na het lezen van de 6502 datasheet en de Advanced User Guide van de Beeb lijkt het voldoende om de kloksnelheid terug te zetten als er I/O gelezen wordt op het moment dat de 1 MHz clock laag is.

Implementatie:
De CPLD heeft nu twee clock-uitgangen, eentje die continu 1 MHz is (Clk_1MHz) en de clock die naar de processor gaat (Phi0). Door de CPLD kunnen beide clock-uitgangen onafhankelijk van elkaar aangestuurd worden.

Bijzonderheid: Idee 3: het toetsenbord
Een van de belangrijkste invoer-componenten voor de System 5 is toch wel het toetsenbord. Echter, losse toetsenborden zijn zo schaars als kippentanden. Maar... de Atom lijkt toch sprekend op een System toetsenbord; dus waarom geen Atom ombouwen?

Voordat u in paniek raakt, nee, de Atom wordt niet onherstelbaar beschadigd. Lees gerust verder.

Het System toetsenbord is een ASCII toetsenbord. Dit houdt in dat het toetsenbord direct de ASCII code van de ingedrukte toets verstuurt. Dus, als de A toets ingedrukt wordt dan verstuurt het toetsenbord de code &41 met bit 7 gezet om aan te geven dat de toets is ingedrukt. De System computer leest dus &C1. Wordt de toets losgelaten dan wordt bit 7 gewist en blijft er &41 op de uitgang van het toetsenbord staan. De System leest deze waarde overigens in via zijn VIA.

Voor de Atom is het natuurlijk een koud kunstje om dit toetsenbord na te bootsen. Met behulp van een eenvoudig kabeltje en een kort programma is dit makkelijk te realiseren. Ik heb dit proof-of-concept al losgelaten op de System 5 van Bas en dat werkte prima. Om het helemaal makkelijk en stabiel te maken heb ik ook hiervoor een klein printje ontworpen dat zo op PL7 van de Atom aangesloten kan worden. Met behulp van een EPROM in socket 24 kan dit zelfs auto-start worden zodat er verder geen wijzigingen aan de Atom nodig zijn. Zelf wil ik de Atom zo veel mogelijk strippen en voeden vanuit de kabel tussen de System en de Atom.

Geheugen-indeling System 5+
Memory Map in System Mode:

&0000 - &03FF		Block 0 geheugen (zp + werkruimte)
&0400 - &0FFF		I/O ruimte (Adressering in dit geheugengebied zal BLK0 activeren)
CPU-kaart adressen:
&0E20	 - &0E2F	Systeem VIA	(gebruikt in System mode)
&0E30			ROM Latch
&0E31			System Latch
&0E40 - &0E4F	Systeem VIA 	(gebruikt in BBC mode)
&1000 - &7FFF		Vrij beschikbaar RAM geheugen
&8000 - &BFFF		Sideway RAM/ROM, 2 x 4 banken van 16 kB
&C000 - &DFFF		Vrij beschikbaar RAM geheugen
&E000 - &FFFF		Acorn MOS ROM (eventueel in write protected RAM)

Memory Map in BBC Mode:
&0000 - &7FFF		Block 0 geheugen (zp + werkruimte)
&8000 - &BFFF		Sideway RAM/ROM, 2 x 4 banken van 16 kB
&C000 - &F3FF		BBC MOS ROM  (eventueel in write protected RAM)
&F400 - &FEFF		I/O ruimte (Adressering in dit geheugengebied zal BLK0 activeren)
CPU-kaart adressen:
&FE20	 - &FE2F	Systeem VIA	(gebruikt in System mode)
&FE30			ROM Latch
&FE31			System Latch
&FE40 - &FE4F	Systeem VIA 	(gebruikt in BBC mode)
&FF00 - &FFFF		BBC MOS ROM (eventueel in write protected RAM)

De beide latches zijn 4 bits breed:

Bit 3 Bit 2 Bit 1 Bit 0
ROM latch 0 = SW-RAM
1 = SW-ROM
Niet gebruikt Bank select Bank select
System latch 0 = 1 MHz CPU
1 = 2 MHz CPU
0 = System Mode
1 = BBC Mode
0 = Write Prot uit
1 = Write Prot aan
0 = OS in ROM
1 = OS in RAM

Bovenstaande informatie is uiteraard een eerste plan om het systeem te bouwen. De printen zijn besteld, maar het kan goed zijn dat ik om praktische redenen hier toch nog van af moet gaan wijken.


Bovenstaande afbeelding is het printontwerp (uiteraard in KiCad). Aangezien mijn rack 1,5cm langer is dan het rack van Bas heb ik de connectoren voor het toetsenbord en de User Port dubbel uitgevoerd. Voor een kort (standaard?) rack kunnen deze extra connectoren makkelijk verwijderd worden met behulp van een zaag.


Dit is het schema van de CPU kaart. Omdat dit een prototype kaart is gebruik ik voor dit ontwerp nog een XC9572XL CPLD in PLCC44 behuizing. Deze zijn helaas al enige tijd niet meer in productie. Mocht de kaart een groot succes worden dan kan ik altijd nog het ontwerp aanpassen voor een meer gangbaar type.


Tenslotte nog even een impressie van het printje om de Atom als toetsenbord te gebruiken. KiCad plaatst hier nog een pin-header voor de flat-cable maar die laat ik achterwege. Ik soldeer de draadjes van de 20-aderige flat-cable direct in de gaatjes. Daarna ga ik met een stripje printplaat een klem maken om de kabel stevig vast te zetten. Daarvoor zijn de twee gaten boven en onder in het midden van de print.

Er is nog veel te doen deze winter, laat het slechte weer maar komen, ik ben er klaar voor!