Важная информация

User Tag List

Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 16

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

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

    По умолчанию Код эмуляции i8080 на С

    Вот, написал i8080 для своих проектов - если кто то хочет использовать - на здоровье, не жалко. Код проходит все тесты которые я нашел, прост в использовании и короткий (понятный). по скорости он тоже не плохой, все флаги считаются по таблицам

    если вы хотите использовать - на здоровье, если какие вопросы - пишите тут или на [email protected] отвечу

    если найдете ошибки или какие то штуки которые я не сэмулировал как положено - буду страшно рад и исправлю

    есть маленький отладчик и дизассемблер - если надо что то посмотреть в эмуляторе по ходу разработки

    для примера приложу использующие этот i8080 эмуляторы Орион 128 и РК-86 на C/SDL2 - очень простенькие - как тест этой эмуляции =) только там пути к биосу и образам дисков вбиты жестко - надо поменять на ваши =)) ну я их писал для внутреннего использования и поэтому они сыроваты и без какого либо интерфейса удобного

    написал и компилировал на в Xcode но по идее должно везде работать где есть SDL2 а если чуть поменять вывод из буферов кадра то и где угодно =)
    Вложения Вложения
    • Тип файла: zip i8080.zip (10.6 Кб, Просмотров: 281)
    • Тип файла: zip orion128.zip (69.1 Кб, Просмотров: 226)
    • Тип файла: zip rk86.zip (32.4 Кб, Просмотров: 212)

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

  3. #2
    Master Аватар для Eagle
    Регистрация
    14.09.2014
    Адрес
    г. Гусь-Хрустальный
    Сообщений
    603
    Спасибо Благодарностей отдано 
    83
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    А недокументированные команды эмулируются?

    Скрытый текст

    ZX Spectrum +2 +divIDE + BDI
    Profi 1024k plus
    Scorpion ZS-256 Turbo+
    ZX Evolution rev.C2+NeoGS+SDCard HxC Floppy Emulator
    ZX Evolution rev.C2+ZXM-SoundCard Extreme+ZXM-MoonSound
    AVR ZX Spectrum V2.0
    Орион 128
    [свернуть]

  4. #3
    Moderator
    Регистрация
    25.11.2007
    Адрес
    Симферополь
    Сообщений
    2,164
    Спасибо Благодарностей отдано 
    1
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    а на 8080 разве были такие команды ?
    Amiga 1200+Blizzard 1260 72 Mb+Mtek 68030,Compozit 128, Leningrad 2,
    Atari STE 1040,ZX Spectrum +2,Pentagon 48, Speccy2007 - 2 , ATAS 256k.
    ZX Evo 4Mb- в строю.
    Speccy2010 v1
    Специалист (пока готовлюсь к восстановлению).
    Это все мое!
    Родное!
    Все люблю на свете я! Это родина моя!

  5. #4
    Master Аватар для Eagle
    Регистрация
    14.09.2014
    Адрес
    г. Гусь-Хрустальный
    Сообщений
    603
    Спасибо Благодарностей отдано 
    83
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от balu_dark Посмотреть сообщение
    а на 8080 разве были такие команды ?
    В КР580ВМ80А есть, и некоторые умники их использовали.

    Скрытый текст

    ZX Spectrum +2 +divIDE + BDI
    Profi 1024k plus
    Scorpion ZS-256 Turbo+
    ZX Evolution rev.C2+NeoGS+SDCard HxC Floppy Emulator
    ZX Evolution rev.C2+ZXM-SoundCard Extreme+ZXM-MoonSound
    AVR ZX Spectrum V2.0
    Орион 128
    [свернуть]

  6. #5
    Moderator
    Регистрация
    25.11.2007
    Адрес
    Симферополь
    Сообщений
    2,164
    Спасибо Благодарностей отдано 
    1
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    А где почитать про это ?
    Amiga 1200+Blizzard 1260 72 Mb+Mtek 68030,Compozit 128, Leningrad 2,
    Atari STE 1040,ZX Spectrum +2,Pentagon 48, Speccy2007 - 2 , ATAS 256k.
    ZX Evo 4Mb- в строю.
    Speccy2010 v1
    Специалист (пока готовлюсь к восстановлению).
    Это все мое!
    Родное!
    Все люблю на свете я! Это родина моя!

  7. #6
    Veteran
    Регистрация
    06.02.2009
    Адрес
    Кемерово
    Сообщений
    1,327
    Спасибо Благодарностей отдано 
    57
    Спасибо Благодарностей получено 
    162
    Поблагодарили
    129 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)
    ПК8010 "Корвет"+ExtRom+AY, Atari 65XE+SDrive, Дельта-С(52ИС)+AY, Scorpion ZS 1024+SMUC

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

    По умолчанию

    Ну в таком смысле да - все опкоды которые приводят к тем же командам я сделал

    Но реально новых команд в нем нет насколько я понимаю просто некоторые декодируются частично и имеют по 2/4 кода

    Я все недокументированное поведение которое нашел воплотил

    Вот когда я Z80 делал - там с этим я намучился, очень много нюансов подковерных и всякие странные биты во флагах недокументированные надо вычислять

    Выложу и его на днях, там вот тоже все тесты которые нашел он проходит включая недокументированное все

    ---------- Post added at 19:37 ---------- Previous post was at 19:29 ----------

    Там в рк-86 есть еще DMA и VG - я делал по документации буржуйской и если честно по VG есть еще вопросы, буду его допиливать может у кого то есть документация по нему какая то дополнительная? Кроме родного даташита?

    Я доведу их до независимых библиотек удобных и тоже выложу
    Последний раз редактировалось medvdv; 03.01.2015 в 19:31.

  9. #8
    Activist
    Регистрация
    14.05.2013
    Адрес
    г. Москва
    Сообщений
    254
    Спасибо Благодарностей отдано 
    1
    Спасибо Благодарностей получено 
    6
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Я в своем эмуляторе не придумал, как сделать корректную эмуляцию DMA для РК86 при покомандной эмуляции 8080. Ведь цикл DMA может быть в любом цикле команды процессора и в зависимости от него отжирает разное количество тактов.

  10. #9
    Guru
    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,777
    Спасибо Благодарностей отдано 
    2
    Спасибо Благодарностей получено 
    122
    Поблагодарили
    61 сообщений
    Mentioned
    16 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от uart Посмотреть сообщение
    Я в своем эмуляторе не придумал, как сделать корректную эмуляцию DMA при покомандной эмуляции
    На мой взгляд, если использовать Fibers ( сопрограммы ) - можно легко превратить покомандную эмуляцию в "поцикловую".

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

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

    По умолчанию

    Цитата Сообщение от uart Посмотреть сообщение
    Я в своем эмуляторе не придумал, как сделать корректную эмуляцию DMA для РК86 при покомандной эмуляции 8080. Ведь цикл DMA может быть в любом цикле команды процессора и в зависимости от него отжирает разное количество тактов.
    можем подумать вместе как нибудь =))

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

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

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

    это будет достаточно эффективно в плане нагрузки

    более тонко я использовал для VDP в ямахе там у меня эмуль проца после каждой команды звал хендлер VDP и он запускал и VDP

    можно так и дма тут вкрячить прямо в проц или звать хендлер

    можно вообще кстати сделать монстра в одном цикле и проц и видео контроллер и дма и все потактово - цикл потактовый - а команда непосредственно разбивается на фазы -выборку декодирование выборку исполнение запись - ну какие есть... и дма так же

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

    скайп на днях? а я пока оформлю идею + мне любопытно про апогей поспрашивать чуть

    ---------- Post added at 02:06 ---------- Previous post was at 02:01 ----------

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

    ну не дословно конечно оформить в коде можно как угодно но суть в том что главный луп эмуляции реально потактовый
    Последний раз редактировалось medvdv; 08.01.2015 в 02:10.

Страница 1 из 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

Ваши права

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