|
nedoPC.orgElectronics hobbyists community established in 2002 |
|
Программная модель Intel 8080/КР580ВМ80А
Author |
Message |
begoon
Senior
Joined: 22 Aug 2012 17:06 Posts: 144 Location: 188.220.42.216
|
Выложил в виде проекта исходники эмулятора I8080, которые являются сердцем моих эмуляторов РК. Благодаря помощи Вячеслава Славинского были выловлены все глюки, и сейчас тест 8080/8085 CPU Exerciser полностью проходит. В сборку включены еще тесты три теста. Все тесты прогоняются автоматически при сборке.
https://github.com/begoon/i8080-core
Старался сделать так, чтобы модуль процессора был максимально независим. В тестах можно посмотреть, как его "подключать" к аппаратуре.
Исходники полного эмулятора, работающего на Maximite, выложу скоро. Пришлось с начала глюки в процессоре вылавливать.
В целом идея максимально изоливать процессор появилась в процессе работы над тестами Exerciser'а. Так как можно запустить на любой машине, не надо ждать два часа. Все тесты у меня проходят секунд за 10.
P.S. Может кто сделает репост на zx.pk.ru. Там почему-то закрыта регистрация.
|
24 Aug 2012 06:32 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22567 Location: Silicon Valley
|
Надо будет мою кору 8080 сравнить с твоей - а то на моём коде CP/M нормально работать отказывается и кое-какие орионовские проги глючат...
|
24 Aug 2012 07:31 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22567 Location: Silicon Valley
|
А документашечка есть на это дело?
Вообще очень похоже на мой интерфейс http://nedopc.cvs.sourceforge.net/viewv ... iew=markupЯ тоже хотел на голимый си переписать, но только с возможностью иметь более одного процессора в программе P.S. Кстати вот эта конструкция на big-endian будет работать неправильно:
|
24 Aug 2012 14:17 |
|
|
begoon
Senior
Joined: 22 Aug 2012 17:06 Posts: 144 Location: 188.220.42.216
|
Эти функции вызываются, когда эмулятору надо прочитать или записать байт или слово в память. Я сделал явные функции для двухбайтовых величин (хотя их можно реализовать через однобайтовые), чтобы если писать отладчик, можно было реализовать брейкпоинты на слово, а не просто на байты. Вызываются командам IN и OUT соответственно. EI вызывает i8080_hal_iff(1) DI вызывает i8080_hal_iff(0)
Эта функция эмулятору собственно не нужна, но полезна для остальных "пользователей" HAL'а. Возвращает адрес первой ячейки пямяти.
Last edited by begoon on 24 Aug 2012 14:41, edited 2 times in total.
|
24 Aug 2012 14:32 |
|
|
begoon
Senior
Joined: 22 Aug 2012 17:06 Posts: 144 Location: 188.220.42.216
|
Факт. Хорошо, что PIC32 little endian. Там вообще надо реорганизовать. Убрать все это ерзанье со структурами и тем более юнионами. Ноги растут из моих неопытных давних попыток типа оптимизировать память. Я еще битовые поля использовал, но сейчас убрал.
Бонус тут в чем -- при наличие автоматического test suite'а можно карячить имплементацию как угодно. Шанс привнести баг, который не обнаружится текущими тестами крайне мал.
|
24 Aug 2012 14:39 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22567 Location: Silicon Valley
|
Это понятно - у меня тоже самое А как кстати прерывания реализовать при данном интерфейсе?
непонял, а если память побита не сегменты?
по идее в общем случае памяти как массива может и не существовать в-принципе...
|
24 Aug 2012 14:46 |
|
|
begoon
Senior
Joined: 22 Aug 2012 17:06 Posts: 144 Location: 188.220.42.216
|
Четкого интерфейса для прерываний у меня нет, так как в РК их реально нет. Можно, например, так: если извне принято решения о прерывании, и флаг IFF установлен, то после очередной команды лезем в регистры напрямую (сейчас есть функции только для чтения регистров), и сообразно меняем их так, как будто бы началось прерывание.
Эмулятору все равно, он просто вызвает функции для поступа в память по адресу. А вот уже эмуляция аппаратуры будет знать о сегментах и обрабатывать их. Массив-память или ее сегменты принадлежат аппаратуре, а не процессору.
|
24 Aug 2012 14:58 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22567 Location: Silicon Valley
|
в последней слаке собралось и отработало без проблем:
| | | | Code: bash-4.1$ make cc -O3 -o i8080_test i8080.c i8080_hal.c i8080_test.c ./i8080_test
********************************* File "CPUTEST.COM" loaded, size 19200
DIAGNOSTICS II V1.2 - CPU TEST COPYRIGHT (C) 1981 - SUPERSOFT ASSOCIATES
ABCDEFGHIJKLMNOPQRSTUVWXYZ CPU IS 8080/8085 BEGIN TIMING TEST END TIMING TEST CPU TESTS OK
Jump to 0000 from 3B25
********************************* File "TEST.COM" loaded, size 1793 MICROCOSM ASSOCIATES 8080/8085 CPU DIAGNOSTIC VERSION 1.0 (C) 1980
CPU IS OPERATIONAL Jump to 0000 from 014F
********************************* File "8080PRE.COM" loaded, size 1024 8080 Preliminary tests complete Jump to 0000 from 032F
********************************* File "8080EX1.COM" loaded, size 4608 8080 instruction exerciser (KR580VM80A CPU) dad <b,d,h,sp>................ OK aluop nn...................... OK aluop <b,c,d,e,h,l,m,a>....... OK <daa,cma,stc,cmc>............. OK <inr,dcr> a................... OK <inr,dcr> b................... OK <inx,dcx> b................... OK <inr,dcr> c................... OK <inr,dcr> d................... OK <inx,dcx> d................... OK <inr,dcr> e................... OK <inr,dcr> h................... OK <inx,dcx> h................... OK <inr,dcr> l................... OK <inr,dcr> m................... OK <inx,dcx> sp.................. OK lhld nnnn..................... OK shld nnnn..................... OK lxi <b,d,h,sp>,nnnn........... OK ldax <b,d>.................... OK mvi <b,c,d,e,h,l,m,a>,nn...... OK mov <bcdehla>,<bcdehla>....... OK sta nnnn / lda nnnn........... OK <rlc,rrc,ral,rar>............. OK stax <b,d>.................... OK Tests complete Jump to 0000 from 0137
| | | | |
P.S. попробую воткнуть свой 8080 в твой тест и погляжу как скажется на результатах
|
25 Aug 2012 19:24 |
|
|
begoon
Senior
Joined: 22 Aug 2012 17:06 Posts: 144 Location: 188.220.42.216
|
Я без наезда, но, думаю, тебя ждет большой сюрприз . По крайней мере, у меня он был.
|
26 Aug 2012 00:50 |
|
|
begoon
Senior
Joined: 22 Aug 2012 17:06 Posts: 144 Location: 188.220.42.216
|
Отлично. У меня работает на Windows VS2012 и OSX/Clang.
|
26 Aug 2012 00:52 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22567 Location: Silicon Valley
|
Я подозреваю что и не один
|
26 Aug 2012 06:14 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
А вот такой вопрос, чисто практический, нужен мне для этого проекта...
Словосостояние ( STАTUS) вы формируете каждый раз в цикле выборки
кода операции?
Или как в ситуации с прерываниями - только по мере необходимости?
Ну, скажем, только в случае IN/OUT, HOLD, HLT или тот же INT?
_________________ iLavr
|
26 Aug 2012 06:58 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22567 Location: Silicon Valley
|
эта программная модель вообще без прерываний
и вроде бы слова состояния там также нету
|
26 Aug 2012 07:55 |
|
|
begoon
Senior
Joined: 22 Aug 2012 17:06 Posts: 144 Location: 188.220.42.216
|
Не совсем понимаю, что вы имеете под названием STATUS? Регистр флагов F?
|
26 Aug 2012 10:30 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22567 Location: Silicon Valley
|
То что на шину данных выдаётся процессором 8080 в некоторые моменты времени для чипов 8228 или 8238, которые из него формируют сигналы MEMR, MEMW, IOR, IOW и т.д.
На самом деле в эмуляторах этого и не надо - как правило программная модель 8080 олицетворяет собой не конкретный чип 8080A, а процессорный модуль целиком, т.е. 8080+8024+8228
|
26 Aug 2012 11:32 |
|
|
Who is online |
Users browsing this forum: No registered users and 23 guests |
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot post attachments in this forum
|
|