emulgator:
1. rejestry z80 na stronie zerowej poukladane tak, zeby mozna bylo uzywac adresowania (),y czyli np. rej H i L leza w kolejnosci L, H itd.
2. petla dekodujaca na stronie zerowej
3. tablice skokow 256b x 2 (L adresu, H adresu procedury emulacji rozkazu)
4. pamiec od $4000 - 32kb
5. dbamy przy operacji na stosie i skokach bezposrednich z80 o wlasciwa wartosc pc - pc powiekszone jest o $4000
petla dekodujaca na stronie zerowej:
start:
ldy #0
lda (pc),y
tax
lda Lo_tab,x
sta _jmp+1
lda Hi_tab,x
sta _jmp+2
_jmp:
jmp $ffff - 27 cykli i mamy zdekodowany rozkaz z80
procedura emulacji LD (HL),$n
_LD
iny
lda (PC),y - argument
dey
sta (HL),y - do pamieci
inc pc
bne _LDend
inc pc+1
bpl _LDend
lsr pc+1 - pc od $4000 do $7fff
jmp start
-- wlasnie zauwazylem ze pc ma sie zwiekszyc o 2 wiec tu wchodzi w gre procedura z adc #2
i to tyle, emulec nie jest taki ciezki do zrobienia cos mi sie wydaje. cos przegapilem?
a 65816 swoja droga by sie przydal, nie trzeba by bylo stronicowac pamieci z80...
---
tak chcialem zeby emulec zmiescil sie tak w 4 kb :-) i uruchomil na 65xe bez rozszerzenia dla z80 i 32kb ramu
---
jak wyglada Twoja procedura dekodowania rozkazu?
---
500 rozkazow :-) ufff to ja chyba zerknalem na inna tabele rozkazow z80 :-) zlamilem :-)