User Tag List

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

Тема: Код эмуляции i8080 на С

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

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

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

    По умолчанию

    Цитата Сообщение от uart Посмотреть сообщение
    У себя я использую не такты процессора, а "такты" кварца.
    Я вот думал и пришел к выводу что можно сделать разумно компромиссную архитектуру - некий секвенсер кучи параллельно работающих устройств с разными циклами длительности

    скажем есть текущее время в каких то условных тиках которые мельче любых устройств в машине

    обычно это как минимум пиксель клок который раза в 2 чаще чем такты CPU ну или даже еще мельче

    clock = 0

    while emulationOn {
    next_clock = 0
    foreach chip in chips[] {
    if chip.local_clock <= clock { chip.local_clock += chip.execute() }
    if (next_clock == 0) || (next_clock > chip.local_clock) { next_clock = chip.local_clock }
    }
    clock = next_clock
    }

    chip.execute() возвращает количество проэмулированных тиков и мы плюсуем их к локальному времени устройства

    соответственно эмуляция это куча устройств (вывод на экран тоже становится устройством и можно реально попиксельно обновлять / сканировать наш виртуальный телек соотв с эмуляцией всей фигни типа динамической смены палитр по ходу сканирования и бордера от звука в спектруме и тд) так вот устройства тут все - и клавиатура и сканер картинки и видео процессор если надо и дма и все что угодно - и каждое после атомарной операции сообщает на сколько тиков вперед оно просчиталось и соответственно мы не трогаем его раньше времени.

    теперь можно сделать что CPU будет не покомандно работать а по своим там внутренним циклам или просто потактно а можно и по старинке покомандно - это не меняет сути самого секвенсера и спрятано внутри объекта цпу или иного устройства

    вот как то так видится

    а внутри того же CPU в .execute() просто меняются стейты FETCH / DECODE / EXECUTE / RD / WR
    так же внутри DMA и прочих устройств

    ticks cpu::execute()
    {
    switch(.state) {
    case FETCH: ... .state = DECODE; return 4;
    case DECODE:
    case RD:
    case EXECUTE:
    case WR:
    }
    Последний раз редактировалось medvdv; 25.03.2015 в 01:16.

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

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

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

Похожие темы

  1. Потактовый клон i8080 на FPGA/CPLD
    от HardWareMan в разделе Разработка электроники
    Ответов: 471
    Последнее: 06.07.2020, 19:39
  2. Совместимость Z80 и i8080 (580ВМ80)
    от Dmitry Dubrovenko в разделе Для начинающих
    Ответов: 50
    Последнее: 08.05.2016, 09:54
  3. Комманды ассемблера/коды i8080/КР580ВМ80А
    от sergey2b в разделе Разное
    Ответов: 4
    Последнее: 29.11.2015, 14:01
  4. МикроСтеплер. Компилятор ЯП СТЕПЛЕР для i8080
    от Kakos_nonos в разделе Программирование
    Ответов: 8
    Последнее: 31.05.2013, 16:34
  5. Эмулятор i8080
    от Higgins в разделе Разное
    Ответов: 2
    Последнее: 20.05.2011, 11:43

Ваши права

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