zomaar een vraag over iets ouds....

Je had vroeger het Uniface systeem van PTCC..

het was dus een systeem om via de computer dingen te besturen...
je had een computerdeel... daaruit kwam de uniface-bus, en op die bus kon je dan diverse printje bevestigen, met 8 ingangen, of 8 uitgangen... enz enz.

nu zat ik dat zomaar op nieuw door te kijken...
https://www.arjan-swets.com/hardware/uniface/images/schema_msx.gif
dit is het schema van het computerdeel van de MSX...

maar ik vroeg me opeens af... hoe dat nu werkt , die Poorten in een computer (toentertijd)

ik weet bij de msx werd port 48 en 49 gebruikt... bij de PC versie poort 784 en 785...

maar waar komen die nummers vandaan?
want als ik (met mijn beperkte kennis van elektronica) kijk naar het msx schema... zie ik eigenlijk maar 1 byte de computer in en uit gaan,,, althans d0 tot D7

dan hebben we nog een A0 tot A7, volgens mij word daarmee lezen of schrijven bepaald?

ik snap dus dat we hier 2 poorten hebben... maar 48? 49?

dus de vraag is eigenlijk, waar word er voor gezorgd dat port 48 en 49 gebruikt worden.... of was de cartridges poort altijd 48/49?

eventueel meer informatie of het geheel.. :
https://www.arjan-swets.com/hardware/uniface/uniface_old.html

trouwens de adressering op de applicatie printen snap ik wel... dmv 2 7485 ic, word de adresbus vergeleken met het adress welke je dmv dipswitches heb ingesteld, en als dat overeen komt word dmv een 74ls373 word de data op de bus gezet, of gelezen....

dus door eerst het adress van een print op de bus te zetten, en daarna de data, kan je een byte naar een output kaart sturen....

goed ik geef toe... tis allemaal oud... (maar dat ben ik ook :-) ) maar ik vroeg me opeens ....

kortom... nu na 40 jaar wil ik als nog weten hoe het nu allemaal werkt... :-)

cnc filmpjes op Http://www.arjan-swets.com
big_fat_mama

Zie Paulinha_B

A0-A7 vormen een adresbus, de CPU kiest daarmee een adres uit een bereik van 2^8 oftewel 256 mogelijke adressen. Met R/'W heeft dat niets te maken, daarvoor zijn er weer andere pinnen op de CPU. Vaag staat me voor dat sommige cpu's aparte pinnen hadden voor IOR, IOW, MEMR, MEMW

Let wel dat geldt voor de intel-familie, die hadden aparte adressering voor memory en I/O. De 6800 en afgeleiden (6502, 6809, 68000, 680x0, ...) kenden slechts een enkele adresseringsruimte waarin de hardwareontwikkelaar memory én I/O kon en moest onderbrengen. Nog steeds heb ik heimwee naar de Apple ][ die ongelofelijk elegant het laatste bitje wist te gebruiken van de schaarse 64k die een 16-bits adresbus te bieden had.

Dat bepaalde adressen (48 en 49 in uw voorbeeld) met bepaalde hardware overeenkomen wordt bepaald door decodering, daarvoor ziet men al eens gemakkelijk 74xx138 en 74xx139 in die generatie computers. Later werd het mode om te decoderen met een prom, en ik herinner me zelfs een ontwerp (de 68000'er van MC) waarin een snelle SRAM als voornaamste adresdecoder diende.

[Bericht gewijzigd door big_fat_mama op zaterdag 16 oktober 2021 14:05:24 (21%)

hoe beter de vraag geschreven, zoveel te meer kans op goed antwoord

Die poort nummers zijn de adressen van de poort. Op dat adres zit dan een chip die de 8-bit data van dat adres naar buiten koppelt.

A0-A7 is de adres bus (8 bit, dus 0 t/m 255). Die bepaalt welke poort wordt geadresseerd. Voor het aansturen van poort 48 moet dan het getal 48 op de A0-A7 staan. (Hex 0x30 of binair 0b00110000).
Voor lezen/schrijven heb je dan RD/WR pinnen op de bus.

Op een PC had je ook een Bus (ISA). Daar kon je insteek-kaarten inzetten en dan dmv software rechtstreeks aansturen.

Tegenwoordig is dat niet meer zo gemakkelijk op een PC. De bus werkt nu met hoge frequentie zodat een hobbyist niet zomaar een eigen insteekkaart kan knutselen, en het operating systeem blokkeert de toegang tot de hardware registers zodat er device drivers nodig zijn.

Dus bij MSX was het cardrigeSlot altijd 48 en 49?

dat zit al ergens in de msx bepaald?
onee dat zeg je niet...

er zitten 2 74ls138 op die print...
dus daarmee word 48 en 49 bepaald?

snap het nog niet helemaal.... ook omdat de data vanuit de computer (d0 tot D7) op de unface-bus aan de data in,data uit en adressbus hangt....
https://www.arjan-swets.com/hardware/uniface/images/xjmia3fli5.jpg

de ISA kaart zag er niet zoveel anders uit... en die gebruikte poorten 784 en 785...

OUT 785,0; De-adressering
OUT 784,144; Waarde bestemd voor adres 100
OUT 785,100; Adressering op adres 100
OUT 785,0; De-adressering
OUT 784,88; Waarde voor adres 200
OUT 785,200; Adressering op adres 200
OUT 785,0; De-adressering

maar ook daar snap ik niet waar nu die 784 en 785 vandaan komen... althans hoe de print weet dat hij daar na moet kijken...

[Bericht gewijzigd door Arjan Swets op zaterdag 16 oktober 2021 14:41:12 (82%)

cnc filmpjes op Http://www.arjan-swets.com
big_fat_mama

Zie Paulinha_B

Daarover kan ik geen uitsluitsel geven, die hardware is me totaal onbekend. Maar het klinkt waarschijnlijk dat het verband tussen het cartridgeslot en de adressen 48-49 hardcoded vastlag in de hardware van de i/o-decodering, jawel.

hoe beter de vraag geschreven, zoveel te meer kans op goed antwoord

Wat voor processor had die msx?
Als dat een Z80 is dan heb je ook nog te maken met een i/o-request en een memory-request pin om onderscheid te maken tussen het adresseren van geheugen of i/o poorten.

reading can seriously damage your ignorance

Kijk eens naar:
http://ebook.pldworld.com/_eBook/MSX/Schematics/YIS503.jpg

Die vond ik bij zoekterm MSX schematic. Ik heb niet gewacht totdat ie geheel geladen is, want ik vond reeds wat ik zocht.

Midden boven links van "battery" zie je dat wat adreslijnen wat logica ingaan en daar worden dan de rd, wr, en cs signalen voor die chip van gemaakt. Ook zie je bij deze chip de onderste 4 adreslijnen de chip in gaan. Dit is dan een chip die waarschijnlijk 16 adressen (poorten) beslaat.

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/

Misschien dat dit plaatjes iets verduidelijkt.

Elke eprom gebruikt 8 kilobyte. Totaal zijn er 8 eproms. De adresbus is 16 bits groot. Totaal kan die 65536 geheugenplaatsen adresseren.

Bij de eerste eprom loopt het geheugenbereik van 0 tot 8191 bij de tweede loopt het bereik van 8192 tot 16383. En zo gaat het door tot 65535. Het laatste mogelijke geheugen adres bij een 16 bits adresbus.

Met adres lijnen A0 t/m A12 kun je maximaal 8KB (8192) aan. De eerste 12 adreslijnen gaan dus naar elk van die 8 eproms in de tekening. Met de overige adreslijnen maak dus een soort van keuze schakeling die de juiste chip kiest. En hier wordt dat gedaan met 138.

[Bericht gewijzigd door Ex-fietser op zaterdag 16 oktober 2021 15:30:30 (83%)

Inderdaad. Die 74LS138 was erg populair als adres decoder. Daarmee kun je testen wanneer de A0 - A7 een bepaald adres voeren. Voor elke 3 adres bits heb je zo een chip nodig.

big_fat_mama

Zie Paulinha_B

Dat voorbeeld van @ex-fietser is duidelijk, maar wel een beetje theoretisch: het stopt de volledige adresruimte van 64KB vol met eprom. Geen plaats over voor RAM, dus geen stack, dus geen interupts, geen subroutines... En als het een 6800 of een derivaat daarvan betreft: ook geen I/O. Een echt nuttige computer wordt dat niet :) Oei, te snel gereageerd: het betreft een 8088-machine, die heeft meer adreslijnen. Dan kan het wel.

[Bericht gewijzigd door big_fat_mama op zaterdag 16 oktober 2021 16:19:58 (14%)

hoe beter de vraag geschreven, zoveel te meer kans op goed antwoord
benleentje

Golden Member

Op 16 oktober 2021 14:30:49 schreef Arjan Swets:
Dus bij MSX was het cardrigeSlot altijd 48 en 49?

dat zit al ergens in de msx bepaald?

maar ook daar snap ik niet waar nu die 784 en 785 vandaan komen... althans hoe de print weet dat hij daar na moet kijken...

Die getallen, poorten, adressen worden al ver van te voren in de ontwerpfase van een computer bedacht. Niet alleen op welk adres maar hoeveel bytes elke poort mag en kan gebruiken.Zoals bv de geheugenruimte, voor video, audio, toetsenbord, joystick, rom, ram, karakter rom, basis rom, enz

Een poort is niet altijd helemaal hetzelfde als een adres. Een porrt is meestal een software naam, die meerdere fysieke adressen kan hebben.
Een compoort op een pc heeft bv als naam naam com0 maar hardwarematig heeft het meerdere adressen voor input output en config bits.

Een print weet op 2 manieren wanneer het gebruikt word
1- Door een eigen adres decoder
2- Door een adresdecoder ergens anders die een enable signaal stuurt naar de print.

Een enablesignaal kan dan soms ook weer een geheugen functie hebben, dus eenmaal geactiveerd blijft hij dat totdat hij uitgezet word. Terwijl een adres maar 1 klokpuls aanwezig is.

Mensen zijn soms net als een gelijkrichter, ze willen graag hun gelijk hebben.

Dus die poortnummers word tijdens het ontwerp al vast gezet...

Dus bij de msx was dat 48/49 en bij de pc 784 en 785 bij de P2000 was het 96/97

ik praat ff over het msx plaatje...
https://www.arjan-swets.com/hardware/uniface/images/schema_msx.gif

als ik in basic
out 49,0 (adress bus op 0 zetten )
out 48,255 ( data voor kaart 100)
out 49,100 ( adress bus op 100 zetten)

maar ik dan snap ik eigenlijk nog niet, als ik kijk naar de msx kant, wanneer nu en waar die getallen op binnen komen....

want om die 255 op de uniface bus te krijgen, moet die op de D0-D7 lijnen komen te staan... door later door de 374 op de uniface bus gezet te kunnen worden....

maar ook als ik het adress 100 op de uniface bus wil zetten moet deze waarden op D0-D7 gezet worden...

dus ik begrijp nog niet goed, hoe je nu met out 48,255 en met out 49,100 data zet op de zelfde data lijnen....?

cnc filmpjes op Http://www.arjan-swets.com
big_fat_mama

Zie Paulinha_B

( heel voorzichtigjes want nogmaals: deze hardware is me totaal onbekend )

Wie weet wordt er een truc gehanteerd ongeveer zoals in de 6845?
In een "klassieke" io-chip zoals de 6850 of 8255 had je een beperkt aantal interne registers, misschien 4 of hooguit 8. Had een chip nu 4 registers (=interne adressen), dan had hij twee adreslijnen en minstens 1 chip-select. Die adreslijnen hing je aan A0 en A1, en de chipselect decodeerde je uit de hogere adreslijnen A2-A15, met een nest '138/'154/'139 of met een prom of met wat dan ook.

Maar de 6845 had (als ik het nog goed heb) 31 registers, dan had je al vijf adreslijnen nodig, dat vond men wat teveel en dus is er een trucje bedacht: de 6845 heeft maar twee registers, "data" en "register select". Om nu data in een bepaald register te schrijven of te lezen, een van de 31 dus, zet men in een eerste I/O bewerking het gewenste register in de "register select"; daarna kan men dan in een tweede I/O-bewerking de data lezen of schrijven in het "data"-register.

Zou het kunnen dat MSX voor de data-cartridge ook zoiets doet?

[latere edit] ik heb eens gekeken naar de schema's op de webstek van Arjan, https://www.arjan-swets.com/hardware/uniface/images/xjmia3fli5.jpg en het ziet ernaar uit dat het inderdaad zoiets is.
Als men schrijft naar het adres dat wordt gedecodeerd tot W311, dan wordt de geschreven byte gelatcht in de '374 U6; daarna kan men dan data schrijven naar het adres dat wordt gedecodeerd to W310 en die byte belandt dan in U4, eveneens een '374. Of men kan (misschien na een beetje wachten, ter stabilisatie) data lezen op het adres dat decodeert tot R310, daarmee activeert men dan de '244 U5. Lezen op R311 zet de statusinformatie van US0 resp. US1 op D0 en D1 van de databus via twee poorten van de '125 U3.
Mijn kop staat er nu niet naar om die decodering te gaan analyseren, maar ik zie alle kans dat 310 overeenkomt met 0x30 oftewel decimaal 48 en 311 met 0x31.

hoe beter de vraag geschreven, zoveel te meer kans op goed antwoord

Bij de PC zijn de adresbereiken van de poorten in elk geval vooraf vastgelegd in de specificaties. De lagere nummers horen bij periferie op het moederbord, ik meen bijvoorbeeld 0x80 voor het toetsenbord. De bereiken voor de parallele, seriële, video, floppy en harddisksubsystemen liggen ook allemaal vast. Andere of extra kaarten moeten dus ergens een vrij adres gebruiken, in een range die daarvoor bestemd is.

www.elba-elektro.nl | "The mind is a funny thing. Sometimes it needs a good whack on the side of the head to jar things loose."
big_fat_mama

Zie Paulinha_B

Dat is waar - of het was minstens ooit waar :) - maar daar gaat het hier nu niet om. Het is trouwens een zeer arbitraire - en ietwat "pittoreske" - keuze van 1 hardwarefabrikant, een keuze die min of meer tot norm is geworden. Bv. de drie mogelijke basisadressen voor lpt-poorten zijn heel erg willekeurig en rommelig gekozen, al zal er vermoedelijk wel een verhaal bij horen.

Let overigens op het onderscheid tussen "poort" en "i/o-chip": om 1 poort te realiseren, hetzij LPT of COM of USB of wat dan ook, heeft men bijna altijd meerdere i/o-adressen nodig. Zoals reeds aangebracht, trouwens.

hoe beter de vraag geschreven, zoveel te meer kans op goed antwoord
benleentje

Golden Member

maar ook als ik het adress 100 op de uniface bus wil zetten moet deze waarden op D0-D7 gezet worden...

dus ik begrijp nog niet goed, hoe je nu met out 48,255 en met out 49,100 data zet op de zelfde data lijnen....?

Nu word het wat duidelijker waar je vraag precies over gaat.

Een CPU ziet data en adres zelf niet al geschieden maar ziet zelf eigenlijk enkel data en ook adressen ziet hij als data. Als een CPU opstart dan begint het als eerst met een vaste ingebakken instructie. Die instructie is dan zet adres FFFB op de bus en lees daar de data in en zit dit als highbyte in het adres register, 2de instructie is lees op FFFA en lees die data in en zet die in de lowbyte van het adresregister.
Maar zelfs da adressen FFFA en FFFB zij wat de CPU betreft ook gewoon data die hij dan in het adres register moet zetten. De adressen FFFC t/m FFFF zijn dan voor een interrupt en gemaskeerde interrupt

De cpu weet nog steeds niet wat een adres is enkel dat hij 2 bytes in het adresregister heeft gezet en vervolgens de busdriver online zet en daarna wat signalen naar buiten stuurt zoals ALE, R/w en nog enkele die als signaal vlaggen dienst doen. Het adres register is een bijzonder register in die zin dat het enige register is die data zet op de adresbus, hij is dus als enige verbonden met zowel de databus als de adresbus

In de MSX die ik verder niet ken zit een CPU met een eigen adres en databus, echter was de 16bit adresbus toen al te beperkt er was toen blijkbaar ook al behoeft aan meer ruimte dan dat de 16 bit adresbus te bieden had. Dit kan je oplossen door er een interface chip of een 8 bits geheugen chip aan toe te voegen.

Nu gaan we naar je mee gelinkt afbeelding.

Links zitten 2 chips U1 en U2 die dienst doen als adres decoder samen met U7A en U7B kan ik daarmee U4, U5, U6 en U3 mee selecteren of ze een klokpuls geven.

Stel op de databus staat de waarde 100, dat is nu nog gewone data. De data staat op de ingangen van alles wat er maar zich in de computer bevind en dus ook op de ingangen van U4, U5 en U6. Nu staat de data klaar maar slecht 1 enkele adres mag die dat inlezen. Ik zet vervolgens het adres voor U4 op de bus en daarna een AEN signaal erachteraan. De AEN zegt tegen de computer dat het adres geldig is wat ervoor zorgt dat U1 actief kan worden en vervolgens uitgang Y0 laag maakt en U4 een klokpuls krijgt. U4 neemt nu de informatie over van de ingang en houd deze vast. Hetzelfde geld voor U6.

Ik ben nu vrij om te doen wat ik wel met de data uit U4 en U6 en kan bv van U4 een nieuwe aparte 8 bit adresbus maken. Of van U4 en U6 samen een 16 bit bus

U5 in het midden leest data in samen met U3 is dat totaal 11 bit.

Mensen zijn soms net als een gelijkrichter, ze willen graag hun gelijk hebben.

code:

out 49,0

Bij zo een instruktie gaat de 49 naar de adres lijnen (A0-A7) en de 0 naar de data lijnen (D0-D7). Dan is het aan de hardware wat er daarna mee gebeurt.

Het lijkt er hier op dat er op adres 49 een adres vastgelegd wordt, en op adres 48 de data. Dat is dan geen funktie van de MSX maar eerder van de Uniface.

Dat blijkt ook uit de Uniface schema:
https://www.arjan-swets.com/hardware/uniface/images/schema_msx.gif

Een out(49,0) instruktie schrijft de 0 naar U6 (en dus naar de Uniface adres lijnen UA0-UA7, en out(48,0) schrijft naar U4, en dus naar de Uniface databus UD0-UD7.

De adressen (48 resp 49) liggen vast in de bedrading van de beide 74LS138 chips (U1 & U2).

bprosman

Golden Member

Een CPU ziet data en adres zelf niet al geschieden maar ziet zelf eigenlijk enkel data en ook adressen ziet hij als data. Als een CPU opstart dan begint het als eerst met een vaste ingebakken instructie. Die instructie is dan zet adres FFFB op de bus en lees daar de data in en zit dit als highbyte in het adres register, 2de instructie is lees op FFFA en lees die data in en zet die in de lowbyte van het adresregister.
Maar zelfs da adressen FFFA en FFFB zij wat de CPU betreft ook gewoon data die hij dan in het adres register moet zetten. De adressen FFFC t/m FFFF zijn dan voor een interrupt en gemaskeerde interrupt

dat is voor een 6502. Voor een Z80 (MSX) begint de processor gewoon op $0000 te lopen. In INT mode 0/1 zijn de interrupt vectoren vast.

De jongere generatie loopt veel te vaak zijn PIC achterna.

het verhaal rondom u4,u5,u6 en u7 snap ik...

die zitten eigenlijk ook weer op de applicatie printjes...

bijvoorbeeld het printje met 8 outputjes, daar zitten ook weer 2x de 74ls85.. en die vergelijk het adres op de uniface adres bus met een een dipswitch instelling... en als dat klopt, geeft hij de data op de data bus weer door aan een 374 die op die print zit... dus dat deel snap ik (geloof ik :-) )

maar ik snap niet zo goed wat die U1 en U2 nu doen...
ja, ik snap dat je met de 3 ingang abc met die 3 inputje kan je de Y0 tot Y7 alle hoog maken, of dmv binair tellen op abc 1 output laag maken....

maar ik snap dus nog steeds niet goed, wat de computer nu op A1 tot A7 aanbied.... en door welk commando dat nu komt... out48 of out49?

cnc filmpjes op Http://www.arjan-swets.com
bprosman

Golden Member

maar ik snap niet zo goed wat die U1 en U2 nu doen...

Over welk schema heb je het dan ?
Als het de 74LS138's zijn dan dienen die om een adres uit te decoderen , net als in een ander schema met de 74LS85.

Overigens kent een Z80 maar 256 I/O adressen.
Dus je komt uit met de laagste 8 adreslijnen.
Het verschil of er geheugen of I/O geadresseerd wordt zit in /IOREQ (voor I/O) of geheugen (/MREQ).

[Bericht gewijzigd door bprosman op zaterdag 16 oktober 2021 21:47:27 (31%)

De jongere generatie loopt veel te vaak zijn PIC achterna.

Op 16 oktober 2021 21:05:42 schreef deKees:

code:

out 49,0

Bij zo een instruktie gaat de 49 naar de adres lijnen (A0-A7) en de 0 naar de data lijnen (D0-D7). Dan is het aan de hardware wat er daarna mee gebeurt.

Het lijkt er hier op dat er op adres 49 een adres vastgelegd wordt, en op adres 48 de data. Dat is dan geen funktie van de MSX maar eerder van de Uniface.

Dat blijkt ook uit de Uniface schema:
https://www.arjan-swets.com/hardware/uniface/images/schema_msx.gif

Een out(49,0) instruktie schrijft de 0 naar U6 (en dus naar de Uniface adres lijnen UA0-UA7, en out(48,0) schrijft naar U4, en dus naar de Uniface databus UD0-UD7.

De adressen (48 resp 49) liggen vast in de bedrading van de beide 74LS138 chips (U1 & U2).

het werkte eigenlijk bij alle computers bijna het zelfde... althans bij de MSx, en de P2000 en de PC.... alleen de poort nummers verschilde...

maar ik snap nog steeds niet goed,

code:


OUT 49,0;     De-adressering
OUT 48,144; Waarde bestemd voor adres 100
OUT 49,100; Adressering op adres 100

dat als je 144 naar de data port stuur , (port 48), dat die dan op d0 tot d7 terecht moet komen, om deze door te sturen naar de data out bus (Uo0 tot Uo7) , en als je daar na het uniface kaart adres naar port 49 stuurt (kaart adress 100), maar die moeten ook op d0 tot d7 komen te staan, om die door te kunnen geven aan de uniface adressbus (ua0 tot ua7)

cnc filmpjes op Http://www.arjan-swets.com

Bij out(48,0) gaat de 48 naar A0-A7, de 0 gaat naar D0-D7.
48 (decimaal) = 0x30 hex = 0b00110000 binair.

A2 t/m A6 gaan naar U2, dus Y4 van U1 wordt laag op alle adressen
0bx01100xx (de x bits worden hier niet gebruikt)

A0 A1 A7 gaan naar U1. Maar U1 is alleen aktief als U2.Y4 laag is. Dus daardoor kan U1 de rest van de adres bus uit decoderen. Met als gevolg dat U1.Y0 laag wordt op adres 48, en U1.Y1 op adres 49. En daarmee worden dus U4 resp U6 geselecteerd.

Als U1.Y0 laag wordt dan schakelt U4 de data van D0-D7 door naar UD0-UD7. U4 is een 8-bit latch dus de data blijft staan tot de volgende out(48..)

Evenzo voor U1.Y1 naar U6 die de data doorschakelt van D0-D7 naar UA0-UA7.

[Bericht gewijzigd door deKees op zaterdag 16 oktober 2021 21:56:27 (20%)

Op 16 oktober 2021 21:44:51 schreef bprosman:
[...]
Over welk schema heb je het dan ?
Als het de 74LS138's zijn dan dienen die om een adres uit te decoderen , net als in een ander schema met de 74LS85.

ik had het dus over de printen, welke je op de Unface bus kon bevestigen...
je had dus een computerdeel... dat is het deel waar we het hier over hebben... en die had je voor veel computers... PC (isa kaart) , en MSX was een cardrige... maar er was ook P2000 en commondore computer deel....

uit dat computerdeel kwam een 34p lint kabel, waar je allerlei buiten delen kon bevestigen... dus kaarten met 8 inputs, 8 outputs ,adc 8 , Dac 8...

en op die printjes zat dus dat verhaal met die 2 74ls85... dus die vergeleken het adress op de adresbus, met de stand van dipswitches op de kaart, en als het klopt, werd de waarde van de databus, door gegeven aan die kaart...

zo kon je dus 254 kaarten aan je computer hangen....

dus het gedeelte met de 374 snap ik wel... dus het stuk van d0-d7, naar Ua0-Ua7 en Uo0-Uo7... alleen het stukje rond om U1 en U2 snap ik nog niet goed....

ik snap nog steeds niet goed dat out 49,100 op de datalijnen D0-d7 terecht komt, maar out 48,144 ook op D0-d7 terecht komt...
?

cnc filmpjes op Http://www.arjan-swets.com

Op 16 oktober 2021 21:51:57 schreef deKees:
Bij out(48,0) gaat de 48 naar A0-A7, de 0 gaat naar D0-D7.
48 (decimaal) = 0x30 hex = 0b00110000 binair.

A2 t/m A6 gaan naar U2, dus Y4 van U1 wordt laag op alle adressen
0bx01100xx (de x bits worden hier niet gebruikt)

A0 A1 A7 gaan naar U1. Maar U1 is alleen aktief als U2.Y4 laag is. Dus daardoor kan U1 de rest van de adres bus uit decoderen. Met als gevolg dat U1.Y0 laag wordt op adres 48, en U1.Y1 op adres 49. En daarmee worden dus U4 resp U6 geselecteerd.

Als U1.Y0 laag wordt dan schakelt U4 de data van D0-D7 door naar UD0-UD7. U4 is een 8-bit latch dus de data blijft staan tot de volgende out(48..)

Evenzo voor U1.Y1 naar U6 die de data doorschakelt van D0-D7 naar UA0-UA7.

deze ga ik even goed een paar keer lezen :-)...

cnc filmpjes op Http://www.arjan-swets.com

Bij inlezen 'in(48)' en 'in(49)' gebeurt er iets soortgelijks, maar dan andersom.

De WR lijn zit ook aan de adres decoder U1. Dus bij een in() instruktie worden U1.Y4 resp U1.Y5 aktief (ipv Y0 en Y1).

Daardoor wordt de data van U5 resp U3 doorgeschakeld naar D0-D7 en kan de CPU de data inlezen.