думаю написать отдельный модуль эмуляции z80, на чистом C, чтоб с полпинка вставлялся куда угодно -- библиотека и h-файл. за основу возьму, наверное, код из FUSE.. или US...
вопрос в том, каким делать API, требования -- возможность создания нескольких процессоров, никаких экспортируемых переменных, только функции, ну и поддержка всех фич, ессно
набросал вот чего-то:
Код:
/*процессор -- поперто из FUSE*/
typedef struct {
regpair af,bc,de,hl;
regpair af_,bc_,de_,hl_;
regpair ix,iy;
byte i;
word r;
byte r7; /* The high bit of the R register */
regpair sp,pc;
byte iff1, iff2, im;
int halted;
} Z80;
/*создание и инициализация процессора.
page1/2/3 -- указатели на массивы (длиной 16K),
которые будут использоваться как страницы памяти*/
Z80 *z80_create(void *page1, void *page2, void *page3);
/*уничтожение процессора -- тешу свою страсть к разрушению ;) */
void z80_destroy(Z80 *cpu);
/*замена одной из 3х страниц памяти -- для вещей вроде
переключения 128k страниц и тп*/
void z80_set_mempage(Z80 *cpu, int page_num, void *page);
/*выполнение очередной команды, возвращает затраченное
кол-во тактов*/
int z80_step(Z80 *cpu);
/*установка функции-callback'а на чтение из порта*/
void z80_set_pread_cb(Z80 *cpu, z80_pread_cb cb_fn);
/*установка callback'а на запись в порт*/
void z80_set_pwrite_cb(Z80 *cpu, z80_pwrite_cb cb_fn);
/*установка callback'а на чтение из памяти*/
void z80_set_mread_cb(Z80 *cpu, z80_mread_cb cb_fn);
/*установка callback'а на запись в память*/
void z80_set_mwrite_cb(Z80 *cpu, z80_mwrite_cb cb_fn);
/*прерывание*/
void z80_int(Z80 *cpu);
/*немаскируемое прерывание*/
void z80_nmi(Z80 *cpu);
/*сброс*/
void z80_reset(Z80 *cpu)
/*функции для получения значений регистров -- чтоб
не завязываться на поля struct'уры Z80*/
лень писать ,)