nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 28 Mar 2024 02:53



Reply to topic  [ 41 posts ]  Go to page 1, 2, 3  Next
Слово состояния STATUS i8080 
Author Message
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Слово состояния STATUS i8080

Мы часто в раных топиках обсуждаем разделение адресного пространства i8080
на разные страницы на основе битов слова состояния STATUS.
И я всегда начинаю метаться по форуму в поисках этих картинок.
Пусть лучше будут здесь в одном месте, чтобы можно было обсуждать предметно...


Временная диаграмма выполнения обобщенного машинного цикла микропроцессора
i8080
приведена на рисунке:

Image
Увеличить

Заметим, что оба сигнала ПМ и ВД изображены здесь активными условно.

ADDR - ША [0—15] - выходные сигналы тины адресов для адресации
памяти или портов ввода — вывода;
DATA - ШД [0—7] — входные или выходные сигналы двунаправленной шины данных
для обмена данными с памятью или портами ввода - вывода, а также для вывода
из микропроцессора информации о его состоянии;
F1, F2 - С1, С2 — входные периодические сигналы для тактирования микропроцессора;
SYNC - С — выходной сигнал синхронизации, вырабатываемый в начале каждого
машинного цикла и указывающий, что, но шине данных передается информация
о состоянии микропроцессора;
RES - СБР — входной сигнал установки микропроцессора в начальное состояние,
обеспечивающее выполнение программы с команды, содержащейся в ячейке памяти
с адресом 0000Н;
DBIN - ПМ — выходной сигнал, инициирующий выдачу данных периферийными модулями
на шину данных;
WRITE - ВД — выходной сигнал, сопровождающий выдачу микропроцессором информации
на шину данных для записи в периферийные модули;
READY - ГТ — входной сигнал от модулей памяти или портов ввода — вывода,
указывающий на их готовность к обмену данными с микропроцессором;
WAIT - ОЖ — выходной сигнал при ожидании микропроцессором готовности периферийных
модулей;
HOLD - ЗХ — входной сигнал, инициирующий перевод шин адресов и данных микропроцессора
в высокоимпедансное состояние;
HLDA - ПЗХ — выходной сигнал, подтверждающий перевод шин адресов
и данных микропроцессора в высокоимпедансное состояние;
INTE - РПР — выходной сигнал разрешения прерывания выполнения текущей программы;
INT - ЗПР — входной сигнал запроса прерывания.

В каждом такте любого машинного цикла микропроцессор выполняет определенные действия:
T1 — устанавливает код адреса периферийного модуля на шине адресов.
Т1/Т2 — выводит информацию о своем состоянии (STATUS) по шине данных,
Т2 — проверяет состояние сигналов на входа READY и HOLD,
Т3 — реализует обмен одним байтом информации с памятью или портами,
Т4/Т5 — выполняет внутренние межрегистровые передачи и обработку данных
в соответствии с командой.

Подробнее с этой информацией можно ознакомиться по следующим адресам:
http://retro.h1.ru/MK80/CPU/M80CPUi.php
http://www.danbigras.ru/MK80/CPU/M80CPUi.html

В более сложных микро-ЭВМ используют дополнительные сигналы управления, выдаваемые
микропроцессором на шину данных в тактах Т1/Т2 в виде 8-разрядного кода — байта (слова)
состояния, который по сигналу синхронизации SYNC - С запоминается (фиксируется) во
внешнем регистре и определяет действия микропроцессора в остальных тактах текущего
машинного цикла. Использование байта (слова) состояния позволяет однозначно определить,
с какой группой периферийных модулей происходит обмен данными в текущем машинном
цикле. Наличие единицы в отдельных разрядах слова состояния - STATUS является признаком
выполнения микропроцессором в текущем машинном цикле следующих действий:
ШД[0] (ППР) — обслуживание запроса прерывания;
ШД[1] (3В) — запись в память или вывод данных в порт;
ШД[2] (СТК) — обращение к области памяти, используемой в качестве стека;
ШД[3] (ОСТ) — останов микропроцессора по команде HLT,
ШД[4] (ВЫВ) — вывод данных в порт,
ШД[5] (M1) — чтение кода операции команды,
ШД[6] (ВВ) -- ввод данных из порта,
ШД[7] (ЧТП) — чтение данных из памяти.

Image

Слово состояния - STATUS обычно обабатывается системным контроллером (К580ВК28/38)
для формирования сигналов обращения к памяти, устройствам ввода/вывода и к контроллеру
прерываний
: MEMRD, MEMWR, IORD, IOWR, INTA.

Но можно сформировать эти же сигналы и более простой схемой:

Image

Здесь сигнал СТС(STB) (от ГТИ) - это укороченный по длительности сигнал SYNC - С, пропущенный
через генератор К580ГФ24(8224) и соответствующий середине длительности STATUS.

Отметим, что сигналы MEMRD, MEMWR, IORD, IOWR формируются вентилями с открытым коллектором,
чтобы не вступать в конфликт с одноименными сигналами контроллера ПДП.

--------------------------------------

Что-то, мне кажется, эта схема выше не очень правильная в плане формирования INTA... :-?
Вот эта - более верная, поскольку INTA - это DBIN (RD), но перенаправленный
к источнику команды прерывания...
Image
То есть, стробом INTA процессор считывает от 1 до 3 байт, от устройства прерывания,
как делал бы это из памяти, но стробом DBIN...
А там выше они INTA из STB сделали, что меня несколько смущает... :-?

Более конкретная, правильная схема из независимого источника:

Image
Источник: Артюхов и др. Проектирование микропроцессорной электронно-
вычислительной аппаратуры
. Справочник. - Киев, 1988. с.46.

_________________
iLavr


Last edited by Lavr on 04 Oct 2015 06:05, edited 4 times in total.



07 Sep 2012 01:46
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Post 
Тут HardWareMan как-то говорил, что можно простробить SYNC с помошью F1 и получить как раз этот STB без ГТИ...

_________________
:dj: https://mastodon.social/@Shaos


07 Sep 2012 05:45
Profile WWW
Banned
User avatar

Joined: 20 Mar 2005 13:41
Posts: 2141
Location: От туда
Reply with quote
Post 
Ну ГТИ, собственно, это и делает.


Last edited by HardWareMan on 05 Jan 2014 07:16, edited 1 time in total.



07 Sep 2012 06:06
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Post 
HardWareMan wrote:
Ну ГТИ, собственно, это и делает.


Ну если есть шанс обойтись без ГТИ (ГФ24), то почему бы и не обойтись? ;)

_________________
:dj: https://mastodon.social/@Shaos


07 Sep 2012 06:23
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Shaos wrote:
Ну если есть шанс обойтись без ГТИ (ГФ24), то почему бы и не обойтись? ;)


Ну так и обходились, глядя на внутренности 580ГФ24:

Image

В "Мико-80" точно прямо по ней конструировали... в "ЮТ-88" с "Мико-80"
срисовывали, упрощая чутка... :wink:

И STB из SYNC, действительно, формируется вот так:

Image

Quote:
По переднему фронту тактирующего сигнала Ф2(C2) синхросигнал С(SYNC) подается
на вход СВ ГТИ и с его помощью на вывод СТС(STB) ГТИ передается инвертированный
сигнал Ф1(C1), который является системным стробом СТС(STB).

STB - просто короткий строб посредине STATUS, что позволяет использовать
защелку по фронту, по спаду и по низкому уровню...

_________________
iLavr


Last edited by Lavr on 02 Dec 2012 04:23, edited 1 time in total.



07 Sep 2012 06:56
Profile
Doomed

Joined: 10 Mar 2012 16:21
Posts: 598
Location: РФ
Reply with quote
Post 
В других ветках было :
Lavr wrote:
petrenko wrote:
Спрашиваю, ибо слегка не уверен, что верно понял всё в "дэйташиит" про M1

Ну дык "дэйташиит" у нас у всех один... :wink: Прочитай еще раз... :lol:

Фиксация M1 в принципе позволит тебе разделить КОП-ы и данные в разные
плоскости физической памяти.

Но мы уже это обсуждали здесь где-то*: это получатся "дырявые мешки".
То есть только изощренным программированием** возможно как-то эти дыры
использовать...

*_Да, действительно, обсуждали :
HardWareMan wrote:
Вся проблема в том, что "выборка команды" это М1, поэтому команда STA 1234h, которая в памяти по адресу, скажем, 8000h лежит как 32 34 12 будет выполнена так (C - код, D - данные):
R C:8000 32
R D:8001 34
R D:8002 12
W D:1234 XX

Ну я попробую порассуждать здесь насчёт "мешка памяти" и "мешка с кодами", да чтоб был не "дырявым".
Из всего у меня получается следующие выводы :

1) "Мешок памяти"- то есть "слой" стека использовать вполне возможно.
Самый удобный вариант - располагать в этом "слое" виртуальный диск.
Поскольку я с клоном РК-86 экспериментирую, то нижние 32К не трогаю (а может только 16К не трогать, а в эксперимент втянуть 48К ? ), так что для "расслоения" адресного пространства берём верхние 32К - такой и будет объём VDSK .

2) "Мешок с кодами" тоже можно попробовать использовать, хотя это несколько сложнее будет. Этот "слой" по названию цикла обзовём его - "M1-слой" адресного пространства - будет использоваться , скорее всего для подпрограмм и модулей, берущих данные, как входные, поскольку (если я правильно понял "дэйташиит")) непосредственные данные в команде прочтутся из основного "слоя", а в М1 только первый байт=код_операции и , соответственно, двух- и трёх-байтовые команды для "мешка с кодами" не приемлемы.
**_Изощренным программированием придётся заняться. Каким образом ?
И чтоб "мешок" с кодами не был "дырявым" ?
Ну во-первых придётся сильно урезать возможности, а именно не применять следующие команды :
{ MVI LXI STA LDA SHLD LHLD ADI ACI SUI SBI ANI XRI ORI CPI JMP JNZ JZ JNC JC JPO JPE JP JM CALL CNZ CZ CNC CC CPO CPE CP CM IN OUT}
Но как обойтись без "JMP"-ов и "CALL" ?
Ну допустим "JMP"-ы как то можно заменить на PCHL
А для CALL ничего, кроме какой-нибудь аппаратной хитрости (типа защёлкнутый в отдельном регистре предыдущий адрес обращения в М1 прочесть, как пару ячеек памяти и затолкнуть в стек) не придумывается.
IN и OUT в РК и так не используются (а жаль)
Во-вторых прерывания. В РК-шке их нет, но на всякий случай надо продумать, что произойдёт при этом. Я бы прерывания всё же хотел бы использовать.

Итого : Не трогаем первые 32К, а верхние 32К "расслаиваем" на три слоя 1- слой стека, в нём VDSK 2- слой M1, в нём модули и подпрограммы и 3- слой данных - таблицы, массивы и т.п. удобно держать.
Да ещё можно и страниц несколько сделать и произвольно переставлять их местами при помощи доп. регистра и хитрого дешифратора.
Вот как то так. Дальше, подробней надо хорошенько обдумать.


03 Oct 2012 18:35
Profile
Devil

Joined: 26 May 2003 06:57
Posts: 859
Reply with quote
Post 
petrenko wrote:
Да ещё можно и страниц несколько сделать и произвольно переставлять их местами при помощи доп. регистра и хитрого дешифратора.

Когда есть страничная дешифрация, то зачем все эти слои M1,стек,данные? Например работа с виртуальным диском ведётся как правило лишь из одного места - п/п чтения/записи диска, т.е. только там нужно будет переключать страницы (пара команд, от которых, как я понимаю хочется избавиться).

Расширение адресного пространства за счёт деления на код и данные - необоснованно сложное техническое решение. Гораздо проще сделать страничную дешифрацию.

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


04 Oct 2012 03:13
Profile WWW
Doomed

Joined: 10 Mar 2012 16:21
Posts: 598
Location: РФ
Reply with quote
Post 
Конечно проще, но во-первых есть некоторые моменты, почему не хочется, а во-вторых мы же экспериментируем, т.е для собственного удовольствия, понимаете, забавляемся, развлекаемся. Ну каждый по своему - один знакомый для забавы в шахматы играет (а другой восклицает "ничего себе забава - от этих обдумываний ходов мозги могут свариться !" ), а мне охота со старьём повозиться, ведь "прикольно" обнаружить, что там ещё всякие особенности есть. о которых раньше не знал или не обращал внимания.

Кстати я именно "для прикола" слегка переделал кусочки модуля переключения в режим VDSK , вот, взгляните : (можно покритиковать даже)
SPtoVDSK: DI ;
PUSH PSW ;
PUSH B ;
PUSH D ;
PUSH H ;
PUSH H ;
; {FIXSP EQU 0xxxxh ; где xxxx- адрес ячейки-указателя адреса хранения предыдущего значения SP (SP_for_SP так сказать) } ; - вместо этого примем жёстко FIXSP=8000h и всё сделаем только однобайтовыми командами !
SUB A ; обнуление
MOV D,A ;
MOV E,A ;
MOV C,A ;
STC ;
RAR ; теперь A=10000000b
MOV B,A ; теперь BC=1000000000000000b=8000h
LDAX B ;
MOV L,A ; в L содержимое 8000h
INX B ; BC=8001h
LDAX B ;
MOV H,A ; теперь в HL содержимое из ячеек памяти 8001h 8000h
;{LHLD FIXSP} ; -
XCHG ; теперь SP_for_SP лежит в DE ,а HL=0
DAD SP ; по сути как бы перемещение из SP в HL получается
XCHG ; теперь значение SP уже в DE ,а SP_for_SP в HL
INX H ;
INX H ;
SPHL ; теперь в SP лежит SP_for_SP+2 ,то есть адрес, куда поместить своё предыдущее значение
; {SHLD FIXSP ; сохраняем новый адрес хранения предыдущего значения SP} ; -
MOV A,H ;
STAX B ;
DCX B ; BC=8000h
MOV A,L ;
STAX B ;
; {} ; -
XCHG ; старое значение SP в HL
XTHL ; вот наконец то сохранили старое значение SP в памяти
; {VDSKPTR EQU 0yyyyh ; yyyy- адрес ячейки-указателя "дорожки" виртуального диска}; - вместо этого примем VDSKPTR=7FFEh
DCX B ; BC=7FFFh
LDAX B ;
MOV H,A ;
DCX B ; BC=7FFEh
LDAX B ;
MOV L,A ;
; {LHLD VDSKPTR} ; - вместо этого сделали однобайтовыми только
SPHL ; мы в режиме работы с виртуальным диском ("мешком памяти")


; {Здесь идёт работа с данными VDSK .... }

VDSKtoSP:SUB A ; обнуление
MOV E,A ;
MOV H,A ;
MOV L,A ;
MOV C,A ;
STC ;
RAR ; теперь A=10000000b
MOV B,A ; теперь BC=1000000000000000b=8000h
MOV D,A ; DE=8000h
DAD SP ;
DCX D ; DE=7FFFh
MOV A,H ;
STAX D ;
DCX D ; DE=7FFEh
MOV A,L ;
STAX D ; содержимое SP сохранено в ячейках 7FFEh 7FFFh то есть VDSKPTR
LDAX B ;
MOV L,A ; в L содержимое 8000h
INX B ; BC=8001h
LDAX B ;
MOV H,A ; теперь в HL содержимое из ячеек памяти 8001h 8000h то есть SP_for_SP
;{LHLD FIXSP} ; -
SPHL ; теперь в SP содержимое ячеек 8001h 8000h то есть SP_for_SP
DCX H ;
DCX H ; SP_for_SP уменьшили
; {SHLD FIXSP ; сохраняем новый адрес хранения предыдущего значения SP} ; -
MOV A,H ;
STAX B ;
DCX B ; BC=8000h
MOV A,L ;
STAX B ; SP_for_SP сохранено в ячейках памяти 8001h 8000h
XTHL ; теперь в HL старое значение SP, сохранявшееся ранее модулем SPtoVDSK по адресу SP_for_SP
SPHL ;
POP H ;
POP H ;
POP D ;
POP B ;
POP PSW ;
EI ; теперь можно
RET ;


04 Oct 2012 08:45
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Ээээ... коды неплохо бы выделять и ставить сверху тег "Code"...
При этом шрифт равноширинный и читать приятнее...

Я, честно говоря, больше склоняюсь к страничной адресации.

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

Вот, в частности, в контроллере дисковода "Специалиста" козырно использовали HOLD.
Обращение к контроллеру дисковода вызывало активцию сигнала HOLD.
Как только байт считывался - HOLD снимался и 580ВМ80 байт "скушивал". :wink:

Вот это, мне кажется, достойный аппаратый трюк, который преодолевает
программную недееспособность 580ВМ80 на частоте 2МГц.

А вот даже стековый "мешок" мне уже не по душе - ограничивает и так не слишком
развитые программные средства 580ВМ80.

Нет, я понимаю, что мы делаем многое just for fun, но мне кажется - должна же быть
некая "изюминка" в этом? :roll:

_________________
iLavr


04 Oct 2012 09:23
Profile
Banned
User avatar

Joined: 20 Mar 2005 13:41
Posts: 2141
Location: От туда
Reply with quote
Post 
Я бы поставил регистр, который выхватывал опкод (М1 цикл), сравнивал с заранее определенными опкодамии включал бы на следующий цикл другую страницу памяти. Например, забандить на MOV A,M/MOV M,A/LDAX/STAX и всего делов. Включаем "экстенд", делаем мовы, выключаем "экстенд". И программа проста и страница полные 64К без дыр. Вот с Z80 это сделать сложнее - префиксы, мать их. Эту идею уже давно озвучивал тут.


Last edited by HardWareMan on 05 Jan 2014 07:17, edited 1 time in total.



04 Oct 2012 12:07
Profile
Doomed

Joined: 10 Mar 2012 16:21
Posts: 598
Location: РФ
Reply with quote
Post 
Интересно. Можно поподробнее. Где посмотреть ?


04 Oct 2012 14:59
Profile
Devil

Joined: 26 May 2003 06:57
Posts: 859
Reply with quote
Post 
HardWareMan wrote:
Например, забандить на MOV A,M/MOV M,A/LDAX/STAX и всего делов.

Можно даже на все команды реагировать. Для этого нужно лишь ПЗУ на 256 байт, два счётчика циклов и немного логики, чтобы в зависимости от значений на выходах счётчиков включать/выключать расширенную страницу. Счётчики инициализировать 4-х битовыми значениями с выходов ПЗУ в конце цикла М1, увеличивать счётчики каждый новый цикл. Первый счётчик будет определять через сколько циклов включить расширенную память, второй - через сколько выключить (чтобы следующий цикл М1 читал из области кодов).

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


05 Oct 2012 02:17
Profile WWW
Senior
User avatar

Joined: 09 Aug 2012 11:20
Posts: 176
Location: 95.135.174.189
Reply with quote
Post 
HardWareMan wrote:
Вот с Z80 это сделать сложнее - префиксы, мать их. Эту идею уже давно озвучивал тут.


Префикс не проблема, ПЗУ побольше ну и защелку!

_________________
Хочу стать всезнайкой ;-)


05 Oct 2012 02:32
Profile
Banned
User avatar

Joined: 20 Mar 2005 13:41
Posts: 2141
Location: От туда
Reply with quote
Post 
b2m wrote:
Первый счётчик будет определять через сколько циклов включить расширенную память, второй - через сколько выключить (чтобы следующий цикл М1 читал из области кодов).

Зачем, если сам по себе M1 должен сбрасывать счетчик циклов? Когда пришел М1 - счетчик циклов сбросился. Каждый не М1 - счетчик+1. Все просто по максимуму. Я, кстати, эту мысль вынашивал еще в 90х... Но реализовать на Орионе не успел. Жалко, что тетрадки с проектированием схемы утеряны навсегда из-за многочисленных переездов.


Last edited by HardWareMan on 05 Jan 2014 07:17, edited 1 time in total.



05 Oct 2012 03:08
Profile
Devil

Joined: 26 May 2003 06:57
Posts: 859
Reply with quote
Post 
HardWareMan wrote:
Зачем, если сам по себе M1 должен сбрасывать счетчик циклов?

Можно и сбрасывать. Тогда достаточно одного счётчика. Допустим, расширенная память будет включаться, когда значение счётчика >=8, тогда, например, для LHLD, если загружать или делать +1 в конце цикла, нужно загрузить счётчик числом 6. А для LDAX/STAX/... сразу числом 8.

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


05 Oct 2012 04:09
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 41 posts ]  Go to page 1, 2, 3  Next

Who is online

Users browsing this forum: Google [Bot] and 12 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

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