8-bit computer op een breadboard

Ik begrijp wat je bedoelt.
Je kan een Flag register maken, waar ik mee zit is hoe check je of een bit is gezet, er is nog geen instructie om dat te doen.
Ik was redelijk thuis in assembler voor de Z80, daar had je instructies voor vergelijken en conditionele sprongen.
In hardware zou dat betekenen dat je een soort filter moet maken dat afhankelijk van die ene bit wel of niet een adres doorlaat dat van te voren op de bus is gezet vanuit de instructie en dat adres van de bus dan in de PC toelaat.

Dus, volgorde:


  • ALU doet een subtract (dan wordt er wel of niet een carry gegenereerd)
  • De instructie (JC of Jump when Carry) doet vervolgens de volgende signals::

    • MO (Memory out); PCiC (Program Counter In when Carry)
    • CE (Count Enable



Nou ja, zoiets. Voor het filter kun je kijken naar de schakeling die in Ben's video voorkomst bij de ALU waar hij de SUBtract behandelt.

Gerard
Ain't no place like 127.0.0.1
Uhm ik denk even wild voor een simpele quick and dirty oplossing. Op de EEPROMs, zeker wanneer je 4-bit instructie words hebt of bijv de 28C256 gebruikt, heb je voldoende address pinnen die niets doen. Daar zou ie voor de verschillende (combinaties van) je verschillende flags wat mee kunnen doen. Je sluit de output van de flags aan op de overige address pinnen en programmeert bij de relevante microcode instructies verschillende uitvoeringen (microcode die uitgevoerd wordt is afhankelijk van welke flags geset zijn). Bij instructies die niet van de flags afhankelijk zijn geef je voor elke combinatie natuurlijk het zelfde mee.

Het kan ongetwijfeld mooier, maar dit is wel redelijk efficiënt. Met de 28C256 heb je ruimte voor vijf flags dan. Mits je max acht micro-cycles (3-bit) hanteert.
Eigenlijk vind ik dat - met alle respect - een nogal inefficiënte oplossing. Er zijn slechts een paar instructies die voor hun werking van flags afgaan gelijk zijn. Om dan daarvoor de hele instructieset vijf maal te dupliceren?

Just my $0.02...

Gerard
Ain't no place like 127.0.0.1
Hij zei ook: een quick and dirty oplossing, en dat is het precies. :)
Op 26 oktober 2017 21:56:37 schreef GerardWassink:
Eigenlijk vind ik dat - met alle respect - een nogal inefficiënte oplossing. Er zijn slechts een paar instructies die voor hun werking van flags afgaan gelijk zijn. Om dan daarvoor de hele instructieset vijf maal te dupliceren?

Just my $0.02...

Gerard


Elegant is het inderdaad zeker niet. Inefficiënt, valt zeker wat voor te zeggen. Maar aangezien we de EEPROM toch niet met de hand hoeven te programmeren is het best te doen. Je krijgt gewoon een wat complexere structuur voor het schrijven en programmeren van de microcode. Aangezien de rest van de ROM momenteel nog leeg is, en dus nauwelijks extra ICs nodig zijn (alleen een register), is kán het in dat opzicht zelfs niet eens efficiënter denk ik.

Maar goed dit is niet de meest mooie oplossing. Wel lekker concreet en snel. Je hoeft zelfs niet eens na te denken hierover! :P

Edit: overigens het nog veel erger dan jij denkt, 2^5 = 32 maal de instructieset schrijven. Elk van de vijf flags kan twee waardes hebben, dus 32 mogelijkheden en niet vijf ;-)
In praktijk zullen de meeste de vijf flags niet halen gok ik. Maar goed, ik zie nog steeds geen grote problemen.

[Bericht gewijzigd door tmdr op 27 oktober 2017 14:30:21 (13%)]

255 instructies maal 8 control words (microcode stappen per instructie);
dit maakt 2K bytes;
3 bytes per control word maakt al 6K bytes

maal de door jou voorgestelde factor 32 maak 192K bytes.

Dat gaat in elk geval niet passen in mijn AT28C64, 8K bytes EEPROMs. Ik heb nog net ruimte voor uitbreiding naar 4 bytes / Control Word...

Gerard
Ain't no place like 127.0.0.1
Op 27 oktober 2017 14:57:20 schreef GerardWassink:
255 instructies maal 8 control words (microcode stappen per instructie);
dit maakt 2K bytes;
3 bytes per control word maakt al 6K bytes

maal de door jou voorgestelde factor 32 maak 192K bytes.

Dat gaat in elk geval niet passen in mijn AT28C64, 8K bytes EEPROMs. Ik heb nog net ruimte voor uitbreiding naar 4 bytes / Control Word...

Gerard


Inderdaad, zeker waar. Mijn rekenvoorbeeld was dan ook met de 28C256. Met de 64 zit je op 2 flags max dus. (8-bit instructies, 3-bit steps, 2 flags geeft dus 13 bits / address lines.
Overigens klopt je berekening van de drie bytes / CW niet of mis ik iets? Dit zou ivm de drie bytes, over drie ROMs uitgesmeerd worden, waardoor je nog met 8-bit words rekent en dus je dus maal drie hoeft te doen.
Wat je zegt klopt wel, maar ik rekende even de totale capaciteit uit. Voor mij is die 32K bytes...
Ain't no place like 127.0.0.1
Op 27 oktober 2017 15:09:51 schreef GerardWassink:
Wat je zegt klopt wel, maar ik rekende even de totale capaciteit uit. Voor mij is die 32K bytes...


Ah zo. Duidelijk. Met slechts twee flags heb je 2 ^ 2 = 4 combinaties van de flags. Dus die 6K moet dus * 4 = 24K. En dat is weer de 3 * 8K/ROM!

Offtopic: waarom kunnen we geen Latex in de posts tikken trouwens? Ik vind dat wel handig voor dit soort berekeningen. Wordt het stukken overzichtelijker van. Zoiets moet niet moeilijk zijn toch: https://www.mathjax.org Kan dus al kennelijk, maar wel veel tikken om elke keer [ math] te doen voor wat kleine berekeningen in-line.

Edit: ben overgiens wel benieuwd of iemand een betere en/of elegantere oplossing heeft (al dan niet uitgewerkt als schema of prototype). Er zijn altijd meer wegen die naar Rome leiden natuurlijk.

Edit 2: de [ math] functie werkt niet meer. Tijd voor die JS lib? :P
Hallo, ik heb de nieuwste video nog niet bekeken...
Mijn idee voor de flag-handling is een extra instructieregister (?voor elke vlag?). In de code van een uC staan vaak op de eerste regels de vectoradressen. Dit kan je ook doen met sprong en conditionele instructies. De vlag selecteert wel of niet een alternatieve opvolgende instructie. Met één extra (instructie)register ben je dan al klaar denk ik.

Het organiseren van de flow voor een stack ben ik nog niet aan toe, maar zal ws neerkomen op een riedeltje (mov/inc)instructies ergens.
Op 26 oktober 2017 21:56:37 schreef GerardWassink:
Eigenlijk vind ik dat - met alle respect - een nogal inefficiënte oplossing. Er zijn slechts een paar instructies die voor hun werking van flags afgaan gelijk zijn. Om dan daarvoor de hele instructieset vijf maal te dupliceren?

Just my $0.02...

Gerard


Ik heb wel oplossingen gezien, waarin in een set eeproms de hele ALU was ondergebracht.

maar ben het wel met je eens, dat er efficientere oplossingen zijn.
meten is weten, weten is meten, maar hoe kan je weten wat je allemaal moet meten en weten.
Ik zit nog steeds te wachten op de nieuwe video van Ben..!
Iemand die ondertussen nog progressie heeft gemaakt?
Hier heeft het helaas lange tijd stil gelegen.
Bij mij heeft dit knutselproject ook geen prio. Ben wel even lekker bezig geweest met de aansturing van de schakelaars. De verlichting in de schakelaars wil ik lang of kort-stondig laten knipperen afhankelijk van de functie run/hold, step/goto, start/stop oid.
Om makkelijk en moeilijk te doen had ik bedacht om met de schakelaars een MMV gegenereerde puls op de signaallijn te zetten. Elke schakelaar zou dan zijn eigen pulslengte hebben die verderop weer gedecodeerd kan worden. Leuk om mezelf bezig te houden :) waarschijnlijk ga ik toch per schakelaar een draad gebruiken en was dit leuk om te prutsen.

Iig wel een klok met drivers gebouwd, en een klok voor het secondenwerk van de schakelaarverlichting. Ingang heeft 0.1Sec periodetijd die tot 0,2 0,4 en 0,8 word gedeeld. Middels flankdetectors en flipflops kan ik dan ook een 1 seconde kloksignaal destilleren.
fred101

Golden Member

Vanmiddag de registers afgemaakt (74HC273 en een 74LS245)
Een MR en OE lijn, beide met streepje er boven. (active low) Ook een bus gemaakt met ledjes via een weerstand naar gnd.

Het doet wel wat maar ik weet nog niet wat.
Als ik wat bus lijnen aan gnd leg gaan gelijk na de klokpuls de register leds branden als MR aan +5 hangt. Dat klopt volgens mij niet.
Als hij aan gnd ligt gebeurd er niets.

Dus hang ik er een aan gnd, de ander aan 5V en lees dan daar de data in. Dan kan ik de bus vrijmaken en de waarde blijft in het register staan.
Als ik dan OE laag trek gaan de bus leds in het juiste patroon branden. Dus output werkt.

Maar meer lukt niet. Ik kan zo via de bus de waarde overzetten naar het tweede register en ook weer terug maar meer niet. Ik kan niet beide registers onafhankelijk met een waarde laden (via de bus)

Dus dat word nog eens de videos bekijken en de datasheets bestuderen en een mooi excuus met mijn nieuwste aanwinsten, een mooie (81 kanaals) Tek 1241 LA met alles erop en eraan en HP547A current tracer te spelen :
www.pa4tim.nl, Reparatie van meet- en calibratie apparatuur, ook oud en exotisch
Goedemiddag iedereen.

Laat ik mij eerst even voorstellen aangezien ik hier nieuw in dit topic kom.
Mijn naam is Van Stolk hier op dit (en andere) forum(s). En ik ben een man van 44 jaar jong. Relevant voor dit forum is dat ik in mijn jeugd eind jaren 80 eens wat heb gespeeld met philips electronica lab sets(plaatje geleend van internet) verder rommel ik nog iets met elektriciteit om mijn geld te verdienen.

Na het vinden van de you-tube serie van Ben vorig jaar. Ben ik deze gaan volgen tot waar we eigenlijk nu zijn, Bij een uitleg voor een vrijwel voltooid apparaat.

Ondertussen tot de conclusie gekomen dit deze IC set zich laat samenbouwen als lego blokken eens gekeken of ik hier een replica voor mij zelf van kan bouwen. En vanuit daar dus weer dit topic gevonden.

Na succesvol en moeiteloos de klok module en de drie registers gebouwd te hebben is het nu tijd om de RAM module op te bouwen. Mijn bouwvolgorde laat zich dicteren door de leveringen uit Hong Kong.

Nu komt echter het probleem. Na de RAM module te hebben opgebouwd worden de LS189 IC aanzienlijk warm. en doet de schakeling niet wat je er van verwacht.

Om het een en ander voor mij zelf te testen heb ik een nieuwe ls189 even los in een test schakeling gebouwd zodat ik het één en ander kan uitproberen.



Ik hoop dat de foto een beetje duidelijk is.

Ik heb de meeste pins vast aangesloten behalve pin 1,3 en 4. deze jumper draden gebruik ik om wat te kunnen proberen.

De LED op pin 5 wordt aanvullen in serie met een weerstand van 330 Ohm geplaatst. Dit om zeker te weten dat ik geen grote stroom trek.

Tot mijn verbazing wordt nu ook deze IC voelbaar warm.

IK heb op dit moment even geen idee waarom het nu fout gaat. Heeft iemand hier een idee waar ik het moet zoeken?

vast bedankt voor enige bijdrage.
Ik mis alvast een ontkoppel c.
Dit ic in deze schakeling zou niet warm moeten worden.
u=ir betekent niet :U bent ingenieur..
Ik denk dat dit IC maar 3mA kan sourcen en 20mA kan sinken, je moet dus uw led anders schakelen.
Een ontkoppel C is natuurlijk vanzelfsprekend ;)

edit: ik zat in de datasheet van de 74F189 te kijken, de LS versie zou 6.5mA sourcen aankunnen.
LDmicro user.
Ik denk dat deze chips normaal toch wat warm zullen aanvoelen( 50 graden zou niet direct abnormaal zijn). Ik zie dat je write vast aan de GND ligt. Dan zijn de uitgangen tristate en kun je geen outputs lezen. Je zou even de write aan GND moeten leggen en daarna terug aan VCC leggen. Of gewoon een pullup weerstand aan pin 3 van vb 1K naar de VCC. Als je nu pin3 even aan de GND tikt met een draadje zou je de data moeten inschrijven. Eens terug naar hoog van pin3 zou je die data (invers) moeten zien aan de uitgangen.

En ja zoals reeds aangegeven zeker minstens 1 ontkoppel C (100nF) per IC en liefst nog een kleine elco op de volledige power line (100 uF).

Frans.

[Bericht gewijzigd door fotoopa op 16 december 2017 17:29:55 (12%)]

Op 16 december 2017 16:28:41 schreef van Stolk:

Nu komt echter het probleem. Na de RAM module te hebben opgebouwd worden de LS189 IC aanzienlijk warm. en doet de schakeling niet wat je er van verwacht.
Ik krijg in een keer een dejavu gevoel. Had iemand een tijdje geleden ook al niet een srammetje uit verweggistan was achteraf een fake oid was?

Oh ja: Ledjes aan een TTL chip hangen is per definitie een slecht idee. De uitgang kan vrijwel niks sourcen. (behalve de speciale open collector drivers die naar GND sinken).
Henri's Law 1: De wet van behoud van ellende. Law 2: Ellende komt nooit alleen.
Oh ja: Ledjes aan een TTL chip hangen is per definitie een slecht idee. De uitgang kan vrijwel niks sourcen. (behalve de speciale open collector drivers die naar GND sinken).

Juist, omgekeerd zou beter zijn maar als het normaal werkt zal die toch oplichten. Maar met de /WR (pin3) continue aan GND zoals nu op de foto te zien is, zal hij geen resultaat zien!
Het is van 1980 dat ik zo eens een IC gebruikt heb! Dat was toen al een "grote ram"
Als de IC fake is, t'ja dan is het einde verhaal!
High met Henk

Golden Member

Op 16 december 2017 18:10:24 schreef henri62:
[...]

Oh ja: Ledjes aan een TTL chip hangen is per definitie een slecht idee. De uitgang kan vrijwel niks sourcen. (behalve de speciale open collector drivers die naar GND sinken).


Sorry, je bent blijven steken in de jaren 70...
de HC(T) versies sourcen min 25 mA... Daar kun je best een ledje op laten branden
http://web.mit.edu/6.111/www/s2007/datasheets/hctfamspec.pdf

de F en L(S) versies stammen gewoon uit jaar kruik en de laatste die ik vasthad stond nog op "made by metuzalem"
to all newbies: RTFM/D of google eens (p.s. RTFM/D = Read the f*cking manual/datasheet).
Op de foto is wel een 74LS189AN van TI te zien! Maar een ledje zal toch al heel goed moeten oplichten.
De HC-HCT kunnen idd meer stroom leveren. Ik heb hier nog meer dan 100 LS IC's liggen maar nu gebruik ik toch ook de HC of HCT reeks. Met de 74HC165 en 74HC595 ben ik trouwens 3 PCB's aan het tekenen voor mijn super knikkerbaan.
Op 16 december 2017 16:44:11 schreef MGP:
Ik denk dat dit IC maar 3mA kan sourcen en 20mA kan sinken, je moet dus uw led anders schakelen.
Een ontkoppel C is natuurlijk vanzelfsprekend ;)

edit: ik zat in de datasheet van de 74F189 te kijken, de LS versie zou 6.5mA sourcen aankunnen.


Ik ga er met 330 Ohm vanuit dat ik rond de 8mA zal uitkomen op mijn uitgang. Dat zal dan inderdaad te veel zijn. En ga er eigenlijk maar vanuit dat dat wel zal kunnen. Bij andere IC's uit deze serie doen we immers niet anders. Het is voor mij ook een beetje nattevingerwerk met weinig voorkennis.

Op 16 december 2017 17:23:57 schreef fotoopa:
Ik denk dat deze chips normaal toch wat warm zullen aanvoelen( 50 graden zou niet direct abnormaal zijn). Ik zie dat je write vast aan de GND ligt. Dan zijn de uitgangen tristate en kun je geen outputs lezen. Je zou even de write aan GND moeten leggen en daarna terug aan VCC leggen. Of gewoon een pullup weerstand aan pin 3 van vb 1K naar de VCC. Als je nu pin3 even aan de GND tikt met een draadje zou je de data moeten inschrijven. Eens terug naar hoog van pin3 zou je die data (invers) moeten zien aan de uitgangen.

En ja zoals reeds aangegeven zeker minstens 1 ontkoppel C (100nF) per IC en liefst nog een kleine elco op de volledige power line (100 uF).

Frans.


Ik heb hier geen Ir thermometer om precies te bepalen hoe warm de IC wordt. maar als je je vinger er na ongeveer 10 seconden na het inschakelen van de voeding niet op kunt houden....

Ik heb inmiddels ook even de stroom gemeten aan Vcc met inmiddels de uitgang vrijgemaakt van de LED. en dan trek ik nog 377mA

Als ik alleen pin 16 (Vcc) en pin 8 (gnd) aansluit trek ik 83mA Hij wordt nu niet meer warm.

En als ik nu nog een nieuwe LS189 pak meet ik 26mA (als ik de datasheet lees Icc = max 35mA bij Vcc 5 volt)

IK ga morgen nog eens wat proberen. Dan met de ampèremeter er tussen en eens kijken hoever ik kan komen zonder dat de stroom teveel oploopt. wie weet kan ik zo de fout ontdekken.

Op 16 december 2017 18:10:24 schreef henri62:
[...] Ik krijg in een keer een dejavu gevoel. Had iemand een tijdje geleden ook al niet een srammetje uit verweggistan was achteraf een fake oid was?



Ik hoop het niet. Het kost allemaal maar weinig, Maar ik heb geen zin weer 4 weken te wachten op nieuwe onderdelen.


Iedereen vast bedankt voor het meedenken.
Op 16 december 2017 20:21:39 schreef van Stolk:
..maar als je je vinger er na ongeveer 10 seconden na het inschakelen van de voeding niet op kunt houden....

Met zekerheid voor de vuilbak..
LDmicro user.