|
nedoPC.orgElectronics hobbyists community established in 2002 |
|
Программная модель Intel 8080/КР580ВМ80А
Author |
Message |
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22530 Location: Silicon Valley
|
Ну в наших исходниках HLT не эмулируется из-за ненадобности
P.S. В моих исходниках была попытка поддержать HLT, но она оказалась не совсем правильная
|
19 Sep 2012 15:05 |
|
|
b2m
Devil
Joined: 26 May 2003 06:57 Posts: 859
|
Восполняю пробел. Когда встречается команда HLT, процессор переходит в режим останова, а в этом режиме РС не увеличивается. Если прерывания разрешены и приходит запрос на прерывание, то режим останова выключится, при этом РС увеличится на еденицу, а затем произойдёт обычный процесс обработки прерывания.
Для меня всегда была загадка, как реализован режим останова: читается ли код HLT каждый раз, или выполняя цикл останова процессор ничего не считывает из памяти? Т.е. вопрос в том, что произойдёт, если карта памяти вдруг изменится, и вместо HLT в том месте будет другая команда?
_________________Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
|
19 Sep 2012 23:11 |
|
|
HardWareMan
Banned
Joined: 20 Mar 2005 13:41 Posts: 2141 Location: От туда
|
| | | | 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 00:47 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Наверное - это можно проверить. И проще всего - VituZz-у, у него простенький
оперативный макет под руками есть.
"Шарицца" ли проц по шинам во время HLT ?
Моё мнение - что не "шарицца": скушал HLT и тупо ждёт прерывания
или Ресета...
Я по-молодости этого HLT-а как-то боялся даже... А ну - как не среагирует на
прерывание - тогда что же - Ресет всей программы?
Но поюзав - привык.
Если HLT подменить в памяти - ничего не будет особого (ну, скажем, мы
переключили страницы) - а в другой HLT-а здесь просто нет.
Обычно, когда работают через HLT, после обработки прерывания
по типу CALL или RST N - возвращаются на 1-ю команду за HLT-ом, а там
должно быть: JMP на адрес HLT-а...
PS. Хардыч, ты б поджал свои "труъ" картинки хотя бы до 800 ? Ну разносит ведь форму форума...
_________________ iLavr
Last edited by Lavr on 20 Sep 2012 10:13, edited 1 time in total.
|
20 Sep 2012 03:23 |
|
|
MC68k
Retired
Joined: 25 Jul 2011 00:14 Posts: 1331 Location: WWW
|
ничего не произойдет, пока не возникнет одно из событий - HOLD(BUSRQ) RESET INT(IRQ). можно проверить на железке. ставлю на то, что на ША будет адрес останова, на ШД код команды останова в момент, когда память доступна процессору
|
20 Sep 2012 03:29 |
|
|
VituZz
God
Joined: 13 Nov 2010 04:06 Posts: 1345
|
Моя железочка переживает очередную перепайку по очередной версии схемы . Но в принципе через пару дней можно и попробовать. Я как раз хотел испытать что-то вроде пульта для ручного ввода команд. И кстати, эта тема мне подсказала, что ввод команд нужно делать не только для /MR, но и для /IOR, и для INTA. Для общности.
|
20 Sep 2012 10:03 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
То есть - помимо процессора - в память? Я правильно понял?
Процессор - в HOLD, а мы с клавиатурки вводим адрес и КОП-ы прямо в память?
_________________ iLavr
|
20 Sep 2012 10:11 |
|
|
VituZz
God
Joined: 13 Nov 2010 04:06 Posts: 1345
|
Нет, это как в самых древних схемах. Проц читает КОП из пульта, хотя думает, что из ОЗУ или порта. У железочки ещё нет никакого "Монитора", поэтому пульт достаточно удобен для разных экспериментов. Вот только он сам уже длительное время жертва экспериментов...
П.С. Подумал, что сделать так, как ты говоришь, тоже вроде бы неплохо...
Блин, мой пульт уже превысил по размерам саму "железочку", а количество израсходованного на него МГТФа заставляет вспомнить потроха ЕС-1022.
|
20 Sep 2012 10:16 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Я просто делал такой. Это раньше так принято было. А сейчас все смотрят в
справочник Шахнова - а там на общей схеме пририсован этот пульт.
И никто не знает - а что это такое?
Я тоже поначалу смущался, мне друг с завода говорил, - " ну ты не можешь что-ли вогнать пару команд с пульта"?
А потом я пришел к выводу, что эта штука порой полезная весьма...
_________________ iLavr
|
20 Sep 2012 10:31 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Меня очень озадачил вот какой вопрос, джентльмены, специалисты по С/С++.
Вы свои эмуляторы пишете как EXE-шники, или исполняемые файлы.
Мы же сейчас пытаемся написать эмуляцию I8080 в виде DLL-библиотеки.
Если я ничего не путаю, динамическая DLL-библиотека, будучи единожды загружена,
разделяется всеми процессами, которым она нужна.
Так если мы в своей DLL-модели I8080 объявляем регистры I8080 и др. в виде переменных
ну, скажем, как-то так:
Ну и в схеме моделирования задействуем 2 экземпляра I8080.
Первый - загрузит свою DLL-модель, инициализирует переменные...
Второй, как мне представляется, вторую копию DLL загружать не должен,
и как им делить в таком случае меж собой переменные и регистры?
Или я ошибаюсь по поводу загрузки DLL-библиотеки? Поясните, если в курсе,
как правильно эти переменные-то объявлять в случае DLL-библиотек?
_________________ iLavr
|
18 Dec 2012 15:43 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22530 Location: Silicon Valley
|
дык ты не делай их как глобальные переменные
делай структурки (или классы) и динамически создавай экземпляры объекта
у меня вот так было сделано (линк с первой страницы топика):
http://nedopc.cvs.sourceforge.net/viewv ... iew=markup
|
18 Dec 2012 15:50 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Да вроде так и делаю... но что-то озадачило меня... решил посоветоваться,
прежде чем 2 проца вместе " упадут"...
Ладно - надо будет запустить два - и убедиться...
А то скоро извилины выпрямятся - всё угадывать за этот i8080.
_________________ iLavr
|
18 Dec 2012 16:01 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Расписал я для себя растактовки для команд 8080, и поскольку я обычно проверяю
по нескольким источникам - сверился с твоими растактовками в исходниках.
Несколько команд не сошлись по количеству тактов...
Не подскажешь, свой источник растактовок по командам?
В принципе - я могу свои таблицы выложить для сравнения...
Я понимаю, что у тебя это не слишком принципиально для правильной работы,
но предполагал свериться как с эталоном.
Всё же ты достаточно много над своими исходниками работал...
_________________ iLavr
|
25 Dec 2012 22:52 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
там где cpu_tacts = хх - число тактов из таблиц, х ??? - число тактов из исходников.
Таблицы я использовал следующие:
_________________ iLavr
|
26 Dec 2012 09:04 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Shaos, покажи отсюда пример, как это у тебя сделано, а то мне сейчас надо dll-ку написать, где должно быть разделение переменных для разных процессов, а я что-то этот момент подзабыл...
_________________ iLavr
|
13 Feb 2016 03:57 |
|
|
Who is online |
Users browsing this forum: No registered users and 18 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
|
|