nedoPC.org

Community of electronics hobbyists established in 2002

...
Atom Feed | View unanswered posts | View active topics It is currently 22 Sep 2017 20:27



Reply to topic  [ 94 posts ]  Go to page Previous  1 ... 3, 4, 5, 6, 7  Next
Программная модель Intel 8080/КР580ВМ80А 
Author Message
Admin
User avatar

Joined: 09 Jan 2003 02:22
Posts: 15486
Location: New York
Reply with quote
Post 
Lavr wrote:
Shaos wrote:
Хм, а тут кстати в моих знаниях пробел - а что будет если она таки вернётся по RET?
Пойдёт на следующую команду после HLT?

Именно так.
Но из ваших исходников мне с HLT нифига непонятно... :(

А сказки и трололо я при случае рассказывать тоже - ой как умею!


Ну в наших исходниках HLT не эмулируется из-за ненадобности
P.S. В моих исходниках была попытка поддержать HLT, но она оказалась не совсем правильная :)

_________________
:eugeek: https://twitter.com/Shaos1973


19 Sep 2012 18:05
Profile WWW
Doomed

Joined: 26 May 2003 09:57
Posts: 599
Reply with quote
Post 
Shaos wrote:
Хм, а тут кстати в моих знаниях пробел - а что будет если она таки вернётся по RET? Пойдёт на следующую команду после HLT?

Восполняю пробел. Когда встречается команда HLT, процессор переходит в режим останова, а в этом режиме РС не увеличивается. Если прерывания разрешены и приходит запрос на прерывание, то режим останова выключится, при этом РС увеличится на еденицу, а затем произойдёт обычный процесс обработки прерывания.

Для меня всегда была загадка, как реализован режим останова: читается ли код HLT каждый раз, или выполняя цикл останова процессор ничего не считывает из памяти? Т.е. вопрос в том, что произойдёт, если карта памяти вдруг изменится, и вместо HLT в том месте будет другая команда?

_________________
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/


20 Sep 2012 02:11
Profile WWW
Banned
User avatar

Joined: 20 Mar 2005 16:41
Posts: 2155
Location: От туда
Reply with quote
Post 
Quote:
HALT SEQUENCES
When a halt instruction (H LT) is executed, the CPU enters the ha It state (TWH) after state T2 of the next machine cycle, as shown in Figure 2-11. There are only three ways in which the 8080 can exit the halt state:
• A high on the RESET line will always reset the 8080 to state T 1; RESET also clears the program counter.
• A HOLD input will cause the 8080 to enter the hold state, as previously described. When the HOLD line goes low, the 8080 re-enters the halt
state on the rising edge of the next ¢1 clock pulse.
• An interrupt (Le., INT goes high while INTE is enabled) will cause the 8080 to exit the Halt state and enter state T 1 on the rising edge of the next ¢1 clock pulse. NOTE: The interrupt enable (INTE) flag must be set when the halt state is entered;
otherwise, the 8080 will only be able to exit via a RESET signal.
Figure 2-12 illustrates halt sequencing in flow chart form.







20. The processor will remain idle in the halt state until an interrupt, a reset or a hold is accepted. When a hold request is accepted, the CPU enters the hold mode; after the hold mode is terminated, the processor returns to the halt state. After a reset is accepted, the processor begins execution at memory location zero. After an interrupt is accepted, the processor executes the instruction forced onto the data bus (usually a restart instruction).

Т.е., проц находится в идле, реагирует на HOLD (это BUSREQ), INT и RESET. Шинку не дергает.


20 Sep 2012 03:47
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 11:08
Posts: 7777
Location: Россия
Reply with quote
Post 
b2m wrote:
Для меня всегда была загадка, как реализован режим останова: читается ли код HLT каждый раз, или выполняя цикл останова процессор ничего не считывает из памяти? Т.е. вопрос в том, что произойдёт, если карта памяти вдруг изменится, и вместо HLT в том месте будет другая команда?

Наверное - это можно проверить. И проще всего - VituZz-у, у него простенький
оперативный макет под руками есть.
"Шарицца" ли проц по шинам во время HLT ? :wink:

Моё мнение - что не "шарицца": скушал HLT и тупо ждёт прерывания
или Ресета...
Я по-молодости этого HLT-а как-то боялся даже... А ну - как не среагирует на
прерывание - тогда что же - Ресет всей программы?
Но поюзав - привык.

Если HLT подменить в памяти - ничего не будет особого (ну, скажем, мы
переключили страницы) - а в другой HLT-а здесь просто нет.

Обычно, когда работают через HLT, после обработки прерывания
по типу CALL или RST N - возвращаются на 1-ю команду за HLT-ом, а там
должно быть: JMP на адрес HLT-а...


PS. Хардыч, ты б поджал свои "труъ" картинки хотя бы до 800 ?
Ну разносит ведь форму форума...
:(

_________________
iLavr


Last edited by Lavr on 20 Sep 2012 13:13, edited 1 time in total.



20 Sep 2012 06:23
Profile
Retired
User avatar

Joined: 25 Jul 2011 03:14
Posts: 1348
Location: WWW
Reply with quote
Post 
b2m wrote:
Т.е. вопрос в том, что произойдёт, если карта памяти вдруг изменится, и вместо HLT в том месте будет другая команда?
ничего не произойдет, пока не возникнет одно из событий - HOLD(BUSRQ) RESET INT(IRQ). можно проверить на железке. ставлю на то, что на ША будет адрес останова, на ШД код команды останова в момент, когда память доступна процессору


20 Sep 2012 06:29
Profile
God
User avatar

Joined: 13 Nov 2010 07:06
Posts: 1286
Reply with quote
Post 
Lavr wrote:
Наверное - это можно проверить. И проще всего - VituZz-у, у него простенький
оперативный макет под руками есть.

Моя железочка переживает очередную перепайку по очередной версии схемы :-). Но в принципе через пару дней можно и попробовать. Я как раз хотел испытать что-то вроде пульта для ручного ввода команд. И кстати, эта тема мне подсказала, что ввод команд нужно делать не только для /MR, но и для /IOR, и для INTA. Для общности.


20 Sep 2012 13:03
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 11:08
Posts: 7777
Location: Россия
Reply with quote
Post 
VituZz wrote:
Я как раз хотел испытать что-то вроде пульта для ручного ввода команд.

То есть - помимо процессора - в память? Я правильно понял?
Процессор - в HOLD, а мы с клавиатурки вводим адрес и КОП-ы прямо в память?

_________________
iLavr


20 Sep 2012 13:11
Profile
God
User avatar

Joined: 13 Nov 2010 07:06
Posts: 1286
Reply with quote
Post 
Нет, это как в самых древних схемах. Проц читает КОП из пульта, хотя думает, что из ОЗУ или порта. У железочки ещё нет никакого "Монитора", поэтому пульт достаточно удобен для разных экспериментов. Вот только он сам уже длительное время жертва экспериментов... :-)

П.С. Подумал, что сделать так, как ты говоришь, тоже вроде бы неплохо...
Блин, мой пульт уже превысил по размерам саму "железочку", а количество израсходованного на него МГТФа заставляет вспомнить потроха ЕС-1022.


20 Sep 2012 13:16
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 11:08
Posts: 7777
Location: Россия
Reply with quote
Post 
VituZz wrote:
Подумал, что сделать так, как ты говоришь, тоже вроде бы неплохо...

Я просто делал такой. Это раньше так принято было. А сейчас все смотрят в
справочник Шахнова - а там на общей схеме пририсован этот пульт.
И никто не знает - а что это такое? :o

Я тоже поначалу смущался, мне друг с завода говорил, - "ну ты не можешь что-ли
вогнать пару команд с пульта
"?
А потом я пришел к выводу, что эта штука порой полезная весьма... :wink:

_________________
iLavr


20 Sep 2012 13:31
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 11:08
Posts: 7777
Location: Россия
Reply with quote
begoon wrote:
Выложил в виде проекта исходники эмулятора I8080, которые являются сердцем моих эмуляторов РК.

Меня очень озадачил вот какой вопрос, джентльмены, специалисты по С/С++.

Вы свои эмуляторы пишете как EXE-шники, или исполняемые файлы.
Мы же сейчас пытаемся написать эмуляцию I8080 в виде DLL-библиотеки.

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

Так если мы в своей DLL-модели I8080 объявляем регистры I8080 и др. в виде переменных
ну, скажем, как-то так:
Code:
//--------------------------------------------
   LONGLONG prev_time;    // Предыдущее время
   IDEBUGPOPUP *dbPopup;
   BYTE regCMD;      // Регистр команд 8-бит
   BOOL iniRES;      // Сброс по инициализации 3 такта
   BOOL tmpRES;      // Сброс по входу RESET
   BOOL tgINTE;      // Триггер "Разрешения прерывания"
   BOOL tgHLDA;      // Триггер "Подтверждения захвата"
   BOOL tgHALT;      // Триггер "Подтверждение останова"
   INT  cntRES;      // Счетчик тактов сброса
   INT  takt_T;      // Номер такта
   INT  max_TM;      // Максимальный такт цикла
   INT  cycleM;      // Номер цикла


Ну и в схеме моделирования задействуем 2 экземпляра I8080.
Первый - загрузит свою DLL-модель, инициализирует переменные...

Второй, как мне представляется, вторую копию DLL загружать не должен,
и как им делить в таком случае меж собой переменные и регистры?

Или я ошибаюсь по поводу загрузки DLL-библиотеки? Поясните, если в курсе,
как правильно эти переменные-то объявлять в случае DLL-библиотек?

_________________
iLavr


18 Dec 2012 18:43
Profile
Admin
User avatar

Joined: 09 Jan 2003 02:22
Posts: 15486
Location: New York
Reply with quote
Post 
дык ты не делай их как глобальные переменные
делай структурки (или классы) и динамически создавай экземпляры объекта
у меня вот так было сделано (линк с первой страницы топика):
http://nedopc.cvs.sourceforge.net/viewv ... iew=markup

_________________
:eugeek: https://twitter.com/Shaos1973


18 Dec 2012 18:50
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 11:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Shaos wrote:
дык ты не делай их как глобальные переменные
делай структурки (или классы) и динамически создавай экземпляры объекта
у меня вот так было сделано (линк с первой страницы топика):
http://nedopc.cvs.sourceforge.net/viewv ... iew=markup

Да вроде так и делаю... но что-то озадачило меня... решил посоветоваться,
прежде чем 2 проца вместе "упадут"... :wink:

Ладно - надо будет запустить два - и убедиться... :lol:
А то скоро извилины выпрямятся - всё угадывать за этот i8080. :-?

_________________
iLavr


18 Dec 2012 19:01
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 11:08
Posts: 7777
Location: Россия
Reply with quote
begoon wrote:
Выложил в виде проекта исходники эмулятора I8080, которые являются сердцем моих эмуляторов РК.
Благодаря помощи Вячеслава Славинского были выловлены все глюки, и сейчас тест 8080/8085 CPU
Exerciser полностью проходит.

Расписал я для себя растактовки для команд 8080, и поскольку я обычно проверяю
по нескольким источникам - сверился с твоими растактовками в исходниках.

Несколько команд не сошлись по количеству тактов... :(

Не подскажешь, свой источник растактовок по командам?

В принципе - я могу свои таблицы выложить для сравнения...

Я понимаю, что у тебя это не слишком принципиально для правильной работы,
но предполагал свериться как с эталоном.
Всё же ты достаточно много над своими исходниками работал...

_________________
iLavr


26 Dec 2012 01:52
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 11:08
Posts: 7777
Location: Россия
Reply with quote
Lavr wrote:
Расписал я для себя растактовки для команд 8080, и ...
сверился с твоими растактовками в исходниках.
Несколько команд не сошлись по количеству тактов... :(

Code:
        case 0x40:            /* mov b, b */ 4  ???
            cpu_tacts = 5;

        case 0xC1:            /* pop b */ 11   ???
            cpu_tacts = 10;

        case 0xD1:            /* pop d */ 11   ???
            cpu_tacts = 10;

        case 0xE1:            /* pop h */ 11   ???
            cpu_tacts = 10;
            break;

        case 0xD9:            /* ret, undocumented */10 ???
            cpu_tacts = 11;

        case 0x76:            /* hlt */ ------------------ 4 ???
            cpu_tacts = 7; - и далее пока не выйдем из hlt

там где cpu_tacts = хх - число тактов из таблиц, х ??? - число тактов из исходников.

Таблицы я использовал следующие:

Image

Image

Image

Image

Image

_________________
iLavr


26 Dec 2012 12:04
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 11:08
Posts: 7777
Location: Россия
Reply with quote
Post Re:
Shaos wrote:
делай структурки (или классы) и динамически создавай экземпляры объекта
у меня вот так было сделано (линк с первой страницы топика):
http://nedopc.cvs.sourceforge.net/viewv ... iew=markup

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

_________________
iLavr


13 Feb 2016 06:57
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 94 posts ]  Go to page Previous  1 ... 3, 4, 5, 6, 7  Next

Who is online

Users browsing this forum: No registered users and 1 guest


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

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.