Bjarni Juliusson skrev den 2015-02-28 21:08:
On 02/28/2015 09:56 AM, Anders Magnusson wrote:
Bjarni Juliusson skrev den 2015-02-28 00:28:
Processorn har ju en outputpinne som säger om den nuvarande cykeln är en instruktionsfetch!
Hm, det har jag aldrig hört nån använda sig av :-) Isåfall så refererar man bara till en separat mapptabell för minnet när den bitten är satt. Men jag antar att man behöver lite mer logik också? Till exempel om man gör jmp $1234 så lär den bara ha pinnen satt när jmp hämtas?
Ah, just, fasen, den säger faktiskt bara 1 på den pinnen när den hämtar själva opkodsbyten. :/ Då får man ha lite mer logik. Hm, eftersom man vet när det är fetch så kan man ju göra en riktig mmu också, med split I/D. Borde kunna funka såhär ungefär:
- Vi tänker att vi har minnet indelat i 16 pages om 4k styck, dels för data och dels för kod. - När fetch sätts, kolla om instruktionen som läses är 1, 2 eller 3 bytes lång (tabell). Låt det antalet minnesreferenser gå via en pagetabell för kod istället. Kolla samtidigt om adressen + antal cykler går till en page man inte har access till, om man inte har det så fejka att den läser jmp ($02) istället. Nu fick vi en trap :-) - Om fetch inte är satt så kollar vi bara accessen. Om man inte har access, låt instruktionen köra färdigt och ignorera minnesreferenserna, och vid nästa fetch fejka en jmp ($03). Nu har vi fått en data access trap. Så, hängde du med på hur jag tänkte? :-)
Förresten, http://visual6502.org om du inte redan kände till den.
Jo, jag har sett den :-)
Allt går :-) Till och med 6J6 från 1939 var rekommenderat att användas i radioapparater upp till 250MHz...
Shit alltså... det är väldigt lockande! Precis. Kom igen nu! :-)
Jag börjar med mitt SD-interface! :)
Lycka till! -- R