zomaar een vraag over iets ouds....

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 16 oktober 2021 16:19:58 (14%)

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

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.

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
maartenbakker

Special Member

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

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.

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 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 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.

De MSX cpu ziet alleen 'out(adres,data)' en doet altijd hetzelfde: adres gaat naar A0-A7, data gaat naar D0-D7.

Het is de Uniface interface die de uitsplitsing doet naar UA0-UA7 en UD0-UD7.

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.

dus bij een out 48,255 of bij een out 49.100... dan komt de eerste (dus 48 of 49) altijd op de a0 tot a7 te staan... en het getal achter de komma komt op de d0-d7 te staan?

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

Op 16 oktober 2021 22:05:47 schreef deKees:
De MSX cpu ziet alleen 'out(adres,data)' en doet altijd hetzelfde: adres gaat naar A0-A7, data gaat naar D0-D7.

Het is de Uniface interface die de uitsplitsing doet naar UA0-UA7 en UD0-UD7.

okay.... nu begint het allemaal duidelijker te worden.....

ik dacht meer aan iets dat 48, bijvoorbeeld 8 data lijntjes waren, en port 49 ook...

dus dat het getal wat je naar 49 stuur op de a0-a7 terecht zou komen en wat je naar port 48 stuurt op d0-d7 terecht zou komen....

maar het commando out x,y zet X op a0-a7 en Y op d0-d7

en bij een inp(48) ? dan zet je 48 op a0-a7? en en leest de databus? en via die U7 schakelde hij de data van de uniface input bus, door na d0-d7?

[Bericht gewijzigd door Arjan Swets op 16 oktober 2021 22:16:15 (38%)

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

ik dacht meer aan iets dat 48, bijvoorbeeld 8 data lijntjes waren, en port 49 ook...

Feitelijk is dat dus ook zo. out(48,..) gaat naar UD0-UD7, en out(49,..) naar UA0-UA7. Maar dat gebeurt dus pas op de Uniface module.

Op 16 oktober 2021 22:31:51 schreef deKees:
[...]

Feitelijk is dat dus ook zo. out(48,..) gaat naar UD0-UD7, en out(49,..) naar UA0-UA7. Maar dat gebeurt dus pas op de Uniface module.

ja dat snap ik... maar ik zat meer met de a0/a7 en d0/d7 aan de computerkant...

maar nu snap ik dat out 49.100, dat 49 op de a0/a7 komt te staan, en 100 op d0/d7...

dus in dit geval, zit u1 en u2 er op om te kijken of er 48, of 49 op die a0/a7 staat...

en a0, is het bit wat er eigenlijk voor zorgt of de data de adresbus op gaat, of de databus? want dat is het eenigste bit wat veranderd bij 48 en 49... :-)

en die 48 en 49... dat had ook wat anders kunnen zijn... dan had dat u1 en u2 verhaaltje er anders uitgezien...

maar er zal wel ergens afgesproken zijn wat vrije nummers zijn ofzo...

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

Golden Member

en die 48 en 49... dat had ook wat anders kunnen zijn... dan had dat u1 en u2 verhaaltje er anders uitgezien...

maar er zal wel ergens afgesproken zijn wat vrije nummers zijn ofzo...

Inderdaad :

Bron :
http://ebook.pldworld.com/_eBook/MSX/MSX%20Technical%20Databook.pdf

De jongere generatie loopt veel te vaak zijn PIC achterna.

Lees mijn vorige post nog eens door daar heb ik al je laatse vragen al min of meer beantwoord.

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?

Vanuit de software krijgt de cpu de instructie out48,100.
Zoals gezegd weet de cpu niet precies wat een adres is het heeft enkel een adresregister. De cpu zet nu het getal 48 in het adresregister en het getal 100 op de adresbus. Vervolgens activeert hij de beide bussen tegelijk en aantal vlag signalen, zoals R/W en AEN.

Wat er nu op A0 tm A15 staat is dan gewoon exact het getal 48. En als ik uitga van een decimaal getal dan is het 0000 0000 0011 0000. Met als eerste A15 en als laatste A0.

Ik lijkt nog wat te missen want om U1 en U2 te laten werken moeten A8 en A9 hoog zijn het kan zijn dat de software dat oplost.

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)

Dat komt omdat je nog niet denkt als een computer. Een computer doet altijd maar steeds 1 kleine stap tegelijk. Daarom spreken we in een computer ook over klokpulsen. Elke klokpuls zet de cpu in de volgende stap. Daarom lijkt het voor jouw dat al die data er tegelijkertijd staat maar dat is niet zo. Ik werkelijkheid doet de CPU alles stap gewijs en staat de data er nog geen 100nS.
Je wel eens gezien dat er op een ramchip bv 100nS staat. Dat zou dan 10Mhz zijn zou je denken maar dat is niet waar. Als een CPU op 1Mhz werkt dan is de totale klok 1µS en dat is 500nS laag en 500nS laag en daarin moet het alles doen data inlezen in registers zetten enz. En dan moet het ook nog eens 100nS wachten dat het geheugen reageert en dat blijkt in de praktijk nog net te kunnen, maar een CPU op 4,7Mhz heeft dan toch echt sneller geheugen nodig.

en a0, is het bit wat er eigenlijk voor zorgt of de data de adresbus op gaat, of de databus? want dat is het eenigste bit wat veranderd bij 48 en 49...

Dat ja dat klopt. Maar zoals ik al eerder opmerkte kun je niet echt spreken van een adressbus. Voor de CPU is het allemaal data. Het is de systeem ontwerper die zorgt voor een diepere betekenis van het geheel.

Nog even wat toelichten. In 1980 kwamen de eerste cpu op de markt toen leek 16 bit adres en 8 bit dat al heel wat, maar al heel snel bleek dat toch te weinig. En werd er van alles bedacht om toch maar meer adresruimte te creëren. In de C64 van commodore werd dat deels opgelost door een aangepaste 6502 cpu die een extra 8 bit datapoort intern had. Met een aantal van deze extra bits werd dan extra adresruimte gecreëerd.
Bij de C64 zat die poort intern in het voorbeeld van dit topic zit die op een aparte kaart. In theorie kan je de adresruimte zo onbeperkt opvoeren. van 16 naar 32bit of 64bit allemaal geen probleem

Maar het heeft ook een nadelen
1- Het extra geheugen bevit zich in banken en die banken kunnen maximaal 32kB groot zijn omdat de adresruimte voor een cpu niet enkel voor ram is maar ook voor andere gedeelde taken.
2- Het schakelen tussen de banken kost tijd waardoor je de software ook moet opsplitsen om per stuk software steeds in 1 bank te blijven

mel

Golden Member

Ik ben er bij de 8080 en aanverwanten nooit achtergekomen ,bij een i/o handeling, welke adressen nu gebruikt worden, a0 tot7 of a8 tot15...

u=ir betekent niet :U bent ingenieur..
bprosman

Golden Member

Op 17 oktober 2021 08:13:01 schreef mel:
Ik ben er bij de 8080 en aanverwanten nooit achtergekomen ,bij een i/o handeling, welke adressen nu gebruikt worden, a0 tot7 of a8 tot15...

A0-A7

De jongere generatie loopt veel te vaak zijn PIC achterna.