User Tag List

Страница 2 из 2 ПерваяПервая 12
Показано с 11 по 16 из 16

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

  1. #11

    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,805
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    147
    Поблагодарили
    78 сообщений
    Mentioned
    16 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от medvdv Посмотреть сообщение
    суть в том что главный луп эмуляции реально потактовый
    При потактовом подходе невозможно легко переключиться на покомандный для "буста" быстродействия ( для быстрой компиляции, например ), а при "поцикловом" подходе можно в любой момент перестать отслеживать отдельные обращения к шине и вернуться к более быстрой покомандной эмуляции.

  2. #12

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

    По умолчанию

    Цитата Сообщение от Patron Посмотреть сообщение
    При потактовом подходе невозможно легко переключиться на покомандный для "буста" быстродействия ( для быстрой компиляции, например ), а при "поцикловом" подходе можно в любой момент перестать отслеживать отдельные обращения к шине и вернуться к более быстрой покомандной эмуляции.
    Ну видимо я и имел ввиду эмуляцию по циклам процессора или шины, не по совсем уж тактам физически =) - тут терминология просто разошлась

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

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

  3. #13

    Регистрация
    14.05.2013
    Адрес
    г. Москва
    Сообщений
    264
    Спасибо Благодарностей отдано 
    3
    Спасибо Благодарностей получено 
    14
    Поблагодарили
    5 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    У себя я использую не такты процессора, а "такты" кварца. Процессор берет их с *коэффициентом 9, ВГ75 - 12. Выполнение каждой команды это обязательный вызов FETCH плюс, в зависимости от кода команды, необязательные обрамленные RD и/или WR. Из этих трех функциях и вызывается DMA, а заодно и обслуживание ВГ75.
    Но реализовано немного кривовато, в лоб, поэтому интересно было бы посмотреть на другую реализация.
    На оптимизацию пока забил, IMHO больше времени тратится на прорисовку эмуляции ВГ75, чем на все остальное. Да и все равно с большим запасом хватает...

  4. #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.

  5. #15

    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,926
    Спасибо Благодарностей отдано 
    105
    Спасибо Благодарностей получено 
    291
    Поблагодарили
    217 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от medvdv Посмотреть сообщение
    каждое после атомарной операции сообщает на сколько тиков вперед оно просчиталось и соответственно мы не трогаем его раньше времени
    В моём эмуляторе примерно так и сделано. Только у меня две величины:
    - время в тиках, которое проэмулировано
    - время, когда нужно вернуться к эмуляции данного устройства снова (т.е. попросту таймер), каждое устройство само решает, на сколько оно засыпает

    Т.е. у меня не эмулируется "наперёд", а наоборот, откладывается на некоторое время. Это важно, поскольку если устройства взаимодействуют между собой, то "доэмулировать" до нужного времени (до момента, когда происходит взаимодействие) можно, а вот откатить назад - нафиг надо.

  6. #16

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

    По умолчанию

    Цитата Сообщение от b2m Посмотреть сообщение
    Т.е. у меня не эмулируется "наперёд", а наоборот, откладывается на некоторое время. Это важно, поскольку если устройства взаимодействуют между собой, то "доэмулировать" до нужного времени (до момента, когда происходит взаимодействие) можно, а вот откатить назад - нафиг надо.
    Хорошо значит сделано

    Ну это уже вопрос терминологии / трактовки внутри объекта - можно сказать что вернул сколько ему спать дальше, или насколько тиков текущий стейт будет валиден, так то понятно что считаться надо до текушего времени <= clock скорее чем clock + еще сколькото, это верно, раз-ся
    Последний раз редактировалось medvdv; 27.03.2015 в 03:45.

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

Страница 2 из 2 ПерваяПервая 12

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

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

Эту тему просматривают: 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

Ваши права

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