User Tag List

Показано с 1 по 10 из 10

Тема: мысли по написанию модуля эмуляции z80 на С

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    10.05.2005
    Адрес
    Москва
    Сообщений
    715
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию мысли по написанию модуля эмуляции z80 на С

    думаю написать отдельный модуль эмуляции 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*/
    лень писать ,)
    Последний раз редактировалось boo_boo; 21.01.2006 в 19:03.

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Руководство по написанию пресс-релизов.
    от Vyacheslav Mednonogov (500:812/1.30) в разделе Разный софт
    Ответов: 0
    Последнее: 13.10.2005, 21:30
  2. Странные мысли
    от acidrain в разделе Несортированное железо
    Ответов: 162
    Последнее: 18.08.2005, 09:21

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •