|
nedoPC.orgCommunity for electronics hobbyists, established in 2002 |
|
Last visit was: 27 Oct 2024 14:08
|
It is currently 27 Oct 2024 14:08
|
Программная модель Intel 8080/КР580ВМ80А
Author |
Message |
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 23383 Location: Silicon Valley
|
вот "quick&dirty" прослойка, заменяющая i8080.c автора, для тестирования этими тестами моего 8080-ядра (proc8080.cpp из состава "nedoPC SDK"):
Результат таков:
далее висит...
Last edited by Shaos on 26 Aug 2012 22:39, edited 4 times in total.
|
26 Aug 2012 12:06 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Ну да, а мне-то как-то его вроде аппаратно эмулировать надо бы...
Вот он ( STATUS) меня несколько и озадачил...
Но в подавляющем большинстве случаев (работа с памятью) мне можно его
и не формировать, чтобы не тормозить и так тормозной PIC.
А вот в случаях IN/OUT, HOLD, HLT - как-то определиться надо для внешних
устройств... Или же сказать самому себе - да нет, это i8085 эмулируется!
Никаких STATUS-ов - нафиг!
_________________ iLavr
|
26 Aug 2012 12:43 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 23383 Location: Silicon Valley
|
| | | | Lavr wrote: Ну да, а мне-то как-то его вроде аппаратно эмулировать надо бы... Вот он ( STATUS) меня несколько и озадачил... Но в подавляющем большинстве случаев (работа с памятью) мне можно его и не формировать, чтобы не тормозить и так тормозной PIC. А вот в случаях IN/OUT, HOLD, HLT - как-то определиться надо для внешних устройств... Или же сказать самому себе - да нет, это i8085 эмулируется! Никаких STATUS-ов - нафиг! | | | | |
да нет - почему же 8085? это 8080, но шина данных спрятана за 8228
|
26 Aug 2012 12:57 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 23383 Location: Silicon Valley
|
дополнил программу автора вот такой функцией:
чтобы нагенерить гигабайты логов со значениями регистров на каждом шагу и сравнить со своими... P.S. пока вижу, что у меня неправильно считается AC при вычитании (и соответсвтенно сравнении) P.P.S. оказалось, что AC после вычитания должен содержать ИНВЕРТИРОВАННОЕ значение полупереноса (точнее "полузаёма"), кроме того DAA у меня было реализовано не совсем правильно... P.P.P.S. плюс там у меня были проблемы с переполнением 32-битного счётчика тактов (из-за этого зависало на последнем тесте) - всё исправил (а также добавил игнор неизвестных опкодов) и вот что получил: | | | | Code: bash-4.1$ make g++ -O2 -o i8080_test2 proc8080.cpp i8080_my.cpp i8080_hal.c i8080_test.c ./i8080_test2
********************************* 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
| | | | |
Спасибо автору - теперь и у меня есть "эталонный" эмулятор процессора 8080 P.P.P.P.S. Вот мой вариант DAA, который проходит все тесты:
А вообще этот DAA и флаг AC всё усложняют и замедляют - в следующем своём эмуле сделаю возможность отключать эту фигню ради скорости...
|
26 Aug 2012 13:18 |
|
|
b2m
Devil
Joined: 26 May 2003 06:57 Posts: 891
|
За исключением небольших несовпадений в использовании переменных, у меня абсолютно аналогично. Фактически, алгоритмы совпадают. Не удивительно.
_________________Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
|
26 Aug 2012 22:49 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 23383 Location: Silicon Valley
|
Я посмотрел как у других сделано - выглядит толще и путаннее
|
26 Aug 2012 23:26 |
|
|
begoon
Senior
Joined: 22 Aug 2012 17:06 Posts: 144 Location: 188.220.42.216
|
Надо полагать, что AC = A(3) | Param(3) в операциях AND ты тоже сделал? Остается загадкой, как господа svo и b2m до этого доперли в свое время.
UPDATE: Хотя вот, в разных мануалах разная информация.
|
27 Aug 2012 01:45 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Да кроме DAA ничто более этот флаг осевого переноса AC и не использует, на мой взгляд...
_________________ iLavr
|
27 Aug 2012 06:45 |
|
|
b2m
Devil
Joined: 26 May 2003 06:57 Posts: 891
|
Есть маньяки, использующие push psw / ret
_________________Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
|
27 Aug 2012 06:49 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
И с какой целью мониаки анализируют таким способом флаг осевого переноса AC ?
Защиты хитрые делают?
Вобщем-то программы таких мониаков становятся в этом случае жестко привязаны к i8080.
_________________ iLavr
|
27 Aug 2012 07:23 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 23383 Location: Silicon Valley
|
Ну поведение флагов C и AC достаточно подробно в документациях описаны, в отличие от DAA, которую многие просто игнорируют либо описывают двумя-тремя словами...
Я это изменение вроде бы уже давно сделал - где-то вычитал
|
27 Aug 2012 07:33 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
А мне казалось - достаточно приблизительно соблюсти временные соотношения, удобоваримые для распространённых ПЗУ, ОЗУ и УВВ...
Или я в этом вопросе не прав?
А никто не подскажет примеры, где эмулируют процессор программно-аппаратно?
То есть, где реально ПЗУ, ОЗУ и УВВ подключают? (Только не на ПЛИС...)
_________________ iLavr
|
28 Aug 2012 04:56 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 23383 Location: Silicon Valley
|
| | | | Lavr wrote: А мне казалось - достаточно приблизительно соблюсти временные соотношения, удобоваримые для распространённых ПЗУ, ОЗУ и УВВ... Или я в этом вопросе не прав? А никто не подскажет примеры, где эмулируют процессор программно-аппаратно? То есть, где реально ПЗУ, ОЗУ и УВВ подключают? (Только не на ПЛИС...) | | | | |
А какже слово состояния? Прерывания с чтением команды с щины адреса? И потом 8080 напрямую не подключишь - надо что-то между ставить...
|
28 Aug 2012 06:15 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Ну как-то надо упрощенно, как мне кажется... Слово состояния хочется "уволить" больше всего. Во многих конструкциях его же просто не используют... Чтением команды с шины адреса - это я как-то не понимаю... Прерывание - это по сути три стандартных по временной диаграмме чтения по шине данных от УВВ без выставления адреса. INTA - это фактически же дубликат DBIN. Ну а что " 8080 напрямую не подключишь - надо что-то между ставить" - эту странную точку зрения я только в некоторых странных книжках встречал... В отличие от i8085, i8080 и z80 как раз неплохо напрямую включаются, если не превышать нагрузочную способность шин... Или ты другое имел ввиду?
Я имею ввиду, где эмулируют PIC-ом или др. контроллером только сам проц,
а память и УВВ внешние.
Вот тут у нас коллега что-то похожее делал, цепляя 580ВВ55 к эмулятору i8080
на меге8515, но память внутреннюю юзал...
_________________ iLavr
|
28 Aug 2012 12:52 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 23383 Location: Silicon Valley
|
Я имел ввиду шину данных - по прерыванию 8080 читает оттуда команду которую надо выполнить. В наших нищебродских самодельных компах шина данных как правило подтянута к +5В и проц в этом случае читает FF что есть RST 7 (переход по адресу 0038h). Кроме того у 8080 нету команд !RMEM, !WMEM, !RIO, !WIO - их делает 8228/8238. Опять же у нас принято использовать в качестве !RD инвертированный сигнал DBIN, но это не везде проходит...
|
28 Aug 2012 14:11 |
|
Who is online |
Users browsing this forum: No registered users and 2 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
|
|