User Tag List

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

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

Комбинированный просмотр

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

    Регистрация
    16.01.2005
    Адрес
    Бобруйск
    Сообщений
    1,267
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    а, это мелочь. хранить массив из 16 регистров, они же не меняются со стороны самой AY

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

  3. #2

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

    По умолчанию

    Цитата Сообщение от SMT
    а, это мелочь. хранить массив из 16 регистров, они же не меняются со стороны самой AY
    а, круто

    очередной вариант api для z80, с учетом недоработок предыдущего:
    Код:
    enum Z80_REG_T {regAF,regBC,regDE,regHL,regAF_,regBC_,regDE_,regHL_,regIX,regIY,regPC,regSP,regIR,regIM/*0,1 или 2*/,regIFF1,regIFF2};
    
    typedef void (*z80_tstate_cb)();
    /*последующие 4 callback'a первым аргументом принимают номер такта в шаге, на 
    котором производится ввод/вывод*/
    typedef unsigned char (*z80_pread_cb)(unsigned char t_state, unsigned port);
    typedef void (*z80_pwrite_cb)(unsigned char t_state, unsigned port, unsigned char value);
    typedef unsigned char (*z80_mread_cb)(unsigned char t_state, unsigned addr);
    typedef void (*z80_mwrite_cb)(unsigned char t_state, unsigned addr, unsigned char value);
    
    struct _z80_cpu_context;
    typedef struct _z80_cpu_context Z80;
    
    /*создание и инициализация процессора.*/
    Z80 *z80_create();
    
    /*уничтожение процессора -- тешу свою страсть к разрушению ;) */
    void z80_destroy(Z80 *cpu);
    
    /*выполнение очередной команды, возвращает затраченное кол-во тактов*/
    int z80_step(Z80 *cpu);
    
    /*установка callback'a, который будет вызываться на каждом такте эмуляции*/
    void z80_set_tstate_callback(Z80 *cpu, z80_tstate_cb cb_fn);
    
    /*установка функции-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);
    
    /*прерывание, второй аргумент - код операции для IM0 %)*/
    void z80_int(Z80 *cpu, unsigned char op);
    
    /*немаскируемое прерывание*/
    void z80_nmi(Z80 *cpu);
    
    /*генерация w_states WAIT-циклов. (при этом будет w_states раз вызван 
    тактовый callback)
    для использования в callback'ах обращения к памяти и 
    портам*/
    void z80_w_states(Z80 *cpu, unsigned w_states);
    
    /*сброс*/
    void z80_reset(Z80 *cpu)
    
    /*функция для получения значения регистра*/
    unsigned z80_get_reg(Z80 *cpu, enum Z80_REG_T reg);
    
    /*функция для установки значения регистра*/
    unsigned z80_set_reg(Z80 *cpu, enum Z80_REG_T reg, unsigned value);
    
    /*возвращает 1 если z80 ждет на halt'e*/
    int z80_is_halted(Z80 *cpu);

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

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

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

Похожие темы

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

Ваши права

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