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.
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?
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 zaterdag 16 oktober 2021 22:16:15 (38%)
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...
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
Golden Member
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
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...
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