Witam,
napisalem emulator procesora z80 na kanwie ktorego uruchomilem zx spectrum emulator (w innym watku i na atari.online.pl mozna zobaczyc jak dzialaja gry z zx spectrum uruchomione na tym emulcu) obecnie chcialbym opublikowac emulator z80 w najwygodniejszej dla userow formie (oczywiscie mozna go extractowac z tych gier ale sa wygodniejsze metody - publikacja).
moja propozycja:
- z80 emulator jako osobny programik (wielkosc ok. 3 kb razem z tablicami)
- biblioteka rozkazow (osobno, poniewaz mozna emulowac inny niz z80 procesor)
emulator z80 posiada tablice skokow zawierajaca:
- procedure uruchomienia z80 (run_z80).
- procedure powrotu z trybu z80
przyklad1:
lda #0 ; program 6502
jsr run_z80 ; uruchomienie z80
xor a ; program z80
ld (colbaks),a
ret ; makro $dd,$01 powrot do trybu 6502
ldy #0 ; program 6502
przyklad2:
lda <_z ; program 6502
ldx >_z ; wartosci dla pc procesora z80
jmp run_z80 ; uruchomienie z80
_6 lda #0 ;
_z xor a ; program z80
ld (colbaks),a
jp _6 ; makro $dd,$02 powrot do trybu 6502
roznica jest taka, ze w pierwszym przykladzie nastapi korekta pc procesora 6502, tak ze po powrocie z trybu z80 program bedzie wykonywany od kolejnego rozkazu (tym razem juz rozkazu 6502)
- procedury dodawania/aktualizacji rozkazow emulowanego procesora
- procedury aktualizacji pc emulowanego procesora
przyklad:
ldy #$12 ; kod rozkazu LD (de),a procesora z80
lda <_z
ldx >_z ; adres procedury obslugi rozkazu
jsr update_z80
_z ldy #0
lda z80_a
sta (z80_de),y
jmp z80_pc_plus1
i wlasnie zdefiniowalismy nowy rozkaz zapisujacy zawartosc akumulatora z80 do pamieci pod adresem wskazywanym przez pare rejestrow de proca z80, jesli masz 65816 zdefiniujesz sobie rozkazy korzystajac
z jego mozliwosci
procedur update jest 5 dla rozkazow zwyklych, i z prefiksami fd,dd,ed,cb (oczywiscie prefiksy tez mozemy zmieniac)
procedury aktualizacji pc z80 o 1,2,3 i 4 bajty
czy to wystarczy? jakies uwagi?
-- edit
sa dwie procedury aktualizacji pc: o 1 bajt i o ilosc bajtow zawarta w akumulatorze - to uklon w strone makrorozkazow.