INT(RST N) в i8080

8-битные микроконтроллеры и микропроцессоры от Intel и их клоны, а также компьютеры на них построенные

Moderator: Shaos

User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

INT(RST N) в i8080

Post by Lavr »

Меня одна интересная мысль тут давно посетила, и я к ней частенько возвращаюсь...
Но никак нет времени её проверить... (лето вот опять началось с ремонтов - замена электропроводки). :osad:

А мысль вот какая: довольно часто в простых конструкциях на i8080 aka K580BM80А в прерывании
используются nedo-вектора RST N, а уж RST 7 - самый популярный, поскольку код его 0FFH
и это легко реализуется аппаратно, резисторами к +5В.

Неудобно, что передача управления этих nedo-векторов идет на адреса 0000Н-0038Н,
а большинство популярных отечественных машин имеют на этих адресах ОЗУ.
RST N активно используют в Васиках, но хотелось бы, чтобы вызовы RST N приходили
в системную ПЗУ. А она у нас - вверху, с 0F800H по стандарту вызовов РК-86 ну и у
всех остальных популярных недо-компов Монитор вверху

Так вот идея у меня следующая: все такие недо-компы имеют аппаратный механизм,
который по RESET "прижимает" системную ПЗУ на адрес 0000Н.
По этому адресу записано: JMP [ADDR в ПЗУ] и по адресу JMP следующая операция
восстанавливает нормальную карту памяти, далее выполняя холодный старт Монитора.

А что если распространить этот механизм и на обработку INT по RST N ?

Ну, скажем так: приходит INT и если он разрешен (INTЕ) системная ПЗУ "прижимается" аппаратно
на адрес 0000Н.
Ну, скажем, сработало аппаратно RST 7 = CALL 0038H. По адресу 0038H (он же 0F838H)
в системной ПЗУ записано: JMP [в ПЗУ на адрес обработчика прерывания] .
По этому адресу восстанавливается нормальная карта памяти, и далее идет тело обработчика
с возвратом по RET.
Получается, что вектора RST N будут указывать в системную ПЗУ в старших адресах.

Как такая мысль?
iLavr
petrenko
Doomed
Posts: 598
Joined: 10 Mar 2012 16:21
Location: РФ

Re: INT(RST N) в i8080

Post by petrenko »

Уже реализовано похожее.
При помощи похожего "финта ушами" к вм80 "прикрутил" относительные переходы и вызовы :
PUSH D , PUSH H , потом в HL смещение , потом PUSH PSW сохраняет флаги, потом RST7 ( которое определяется сигналом M1 ->&-> кодом FF на ШД и "ремапит" нижний адресный блок на пзу ) и после нескольких несложных "вывертов" делаем R(не_условие)->выходит без смещения, а иначе DAD D сложит {"POP-нутое" в DE "до-вызывное" содержимое PC} c HL и тогда PCHL - то есть эта подпрограмма делает эквивалентно CALL(условие),{смещение} по сути.

Недостаток в том, что ни с чем не совместимо и никто не будет писать код под таким образом аппаратно-завёрнутую систему - разве что для себя на досуге.
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: INT(RST N) в i8080

Post by Lavr »

petrenko wrote:Уже реализовано похожее.
И где, если не секрет?
petrenko wrote:...потом RST7 ( которое определяется сигналом M1 ->&-> кодом FF на ШД ...
Ибо M1 по отношению к i8080 aka K580BM80А вызывает некоторые сомнения... :wink:
А сложить PC с некоторым смещением можно и безо всякого RST7...

И где в этой весьма запутанной истории из "нескольких несложных "вывертов", собственно, сам аппаратный INT ?
iLavr
User avatar
VituZz
God
Posts: 1343
Joined: 13 Nov 2010 04:06

Re: INT(RST N) в i8080

Post by VituZz »

Если абстрагироваться от совместимости с существующим ПО, то мне кажется предпочтительным другой вариант. По сбросу в начальных ячейках ОЗУ просто разместить jmp на адреса в ПЗУ. Я так у себя в "Орионе" делал, был как-то интерес.
petrenko
Doomed
Posts: 598
Joined: 10 Mar 2012 16:21
Location: РФ

Re: INT(RST N) в i8080

Post by petrenko »

Аппаратный INT я пока не изпользовал - потому и "похожее" ,а не "такое же" .

пзу 556рт4 разрешается сигналом М1 и "следит" за ш.д. ,"отлавливая" команды RST и XTHL ,и обозначает их на выходах сигналами schnapp_rom_unteren и schloss , кроме того обозначает длину команд ( 1|2|3 ).

Именно для этого "финта ушами" я как раз на данном форуме и пытал точную разтактовку XTHL и особенности поведения сигнала М1 у вм80
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: INT(RST N) в i8080

Post by Lavr »

VituZz wrote:Если абстрагироваться от совместимости с существующим ПО...
Вот и я попытался совместимость с существующим ПО соблюсти, чтобы не было:
petrenko wrote:...ни с чем не совместимо и никто не будет писать код под таким образом аппаратно-завёрнутую систему - разве что для себя на досуге.
Всё остается полностью программно-совместимо (и я привел в пример Васик) поскольку программные RST N
остаются на местах, они не перехватываются и работают как есть.

А вот когда аппаратный INT обслуживается через механизм RST N, выставляемых на шине данных внешней
схемой, вот тут-то мы и "прижимаем" системное ПЗУ на адрес 0000Н, перехватывая эти "аппаратные" RST N.

Весь этот механизм аппаратно более прост, нежели отлов М1 через байт STATUS-а и прочие "выверты".

Для чего конкретно я хочу этот фокус использовать: «Galaksija» и «ZX80» удачно эксплуатируют особенности
микропроцессора Z80 и его системы прерываний для формирования видеосигнала програмно-аппаратным способом.
В i8080 aka K580BM80А подобного механизма нет.

То есть, если я даже поставлю "крючья" в младших адресах ОЗУ, я точно войду в конфликт с имеющимся
софтом, поскольку, скажем, RST 7 будет занят мной всегда.

А если хотя бы RST 7 по INT "вынести" в системное ПЗУ, то появится механизм для программно-
аппаратной генерации видеосигнала, уже "вписанный" в системное ПЗУ.

Собственно, в работоспособности этого трюка аппаратно я не вижу препятствий...
Но, возможно, я не вижу и какого-то "подводного камня", почему и решил это обсудить.
iLavr
petrenko
Doomed
Posts: 598
Joined: 10 Mar 2012 16:21
Location: РФ

Re: INT(RST N) в i8080

Post by petrenko »

Вроде никаких "подводных" и не должно быть.
Просто будет "нищебродский суррогат" вн59 ,но с аппаратным RST7 вместо аппаратного CALL 0xxxxh и с временным "ремаппером" нижнего адресного блока.
90% что будет работать как надо.
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: INT(RST N) в i8080

Post by Lavr »

petrenko wrote:Просто будет "нищебродский суррогат" вн59 ...
Тогда уж "суррогат" 589ИК14...
iLavr
petrenko
Doomed
Posts: 598
Joined: 10 Mar 2012 16:21
Location: РФ

Re: INT(RST N) в i8080

Post by petrenko »

А , ну да, об ик14 как то не вспомнил - а он сразу трёхбитный вектор делает - готовые RST0...RST7.

(Кстати, если есть 100% гарантия неизменности INT0...INT7 на время восприятия прерывания , то можно даже 155ив2 изпользовать. Ну это так - поизвращаться ..)

В общем идея по разной нужде по разному "ремапить" адресные блоки неплохая и, идя таким путём, можно "доапгрейдить" 8080 чуть ли не до 8086 ( без ES - екстру уж совсем никак не впихнуть , а вот код, данные и стек - запросто )
aav8
Maniac
Posts: 287
Joined: 05 Nov 2008 19:47
Location: 81.28.208.238

Re: INT(RST N) в i8080

Post by aav8 »

А меня интересует контроллер прерываний на 555ив?.
Правда я не понял, что такое 555ив2 (в справочнике В.Л.Шило такого нет).
Есть ив1 и ив3.
Наверное лучше использовать ив1 - есть признак события. И придется ставить шинник
для передачи вектора.
Хочу применить в партнер 01.01.
petrenko
Doomed
Posts: 598
Joined: 10 Mar 2012 16:21
Location: РФ

Re: INT(RST N) в i8080

Post by petrenko »

aav8 wrote:.. ставить шинник ..
В смысле ? Мне известна спортивная команда "Шинник" .. :econfused:

ив2 отличается от ив1 Z-состоянием трёх линий выхода.
( Этот "шило" - сборник "косяков" и ошибок - карандашиком правил по мере обнаружения - в результате каждая третья, а то и каждая вторая страница с правками - это не считая грамматических и "очепаток"
Вот там посмотрите описание :
http://qrz.ru/reference/kozak/ttl/ttlh28.shtml ,"буржуинский" аналог==**74LS348 )

Что-либо сурьёзное с шифратором прерываний на "ив*" делать не советую ,ибо прерывания могут запросто теряться . Так - побаловаться чуток - можно.

Схема временного "ремапа"~"прижимания_пзу_вниз" и по RES ,и по INT ,немножко сложнее схемы только по RES - надо будет продумать - по другому ли "вернётся наверх" в отличие от послестартового или так же.
aav8
Maniac
Posts: 287
Joined: 05 Nov 2008 19:47
Location: 81.28.208.238

Re: INT(RST N) в i8080

Post by aav8 »

Шинник имеется в виду шинный формирователь (555ап6, 589ап16/26 или что-то в этом роде). Потому-что внутренняя логика ив рассчитана на каскадирование. А шинник будет выдавать вектор прерывания.
Прерывания могут теряться в случае запроса в виде импульса. ВВ51 выдает запрос (готовность), пока данные не будут прочитаны/записаны.
Я для этого и планирую его (простейший контроллер прерываний) для этого использовать.
petrenko
Doomed
Posts: 598
Joined: 10 Mar 2012 16:21
Location: РФ

Re: INT(RST N) в i8080

Post by petrenko »

А .. шинный формирователь .. Понятно.

В случае с ***ив2 ш.ф. не обязателен.

Вот в 1821вм85 есть линия прерывания RST7.5 - хорошо тем, что достаточно сей линии прерывания перейти из нижнего логического уровня в верхний и дальше оно уже точно не потерялось - там внутри оно по фронту защёлкивается.

Если применить 589ик14 - тоже не будут теряться. И тоже ш.ф. необязателен.
И купить её настолько же "сложно", как и *ив1 *ив2 ,и цена вроде была 4р.( мож повысилась, не искал сейчас )

А вообще идея по разному обрабатывать программные RST(N) и аппаратные( "подсунутые" которые ) может привести к полезным результатам.
Хотя мне пока ещё не требовались аппаратные прерывания, но пожалуй для интересу таки надо "прикрутить" INT попробовать.