«РАДИО-86РК» - 512 Кб / 16 Мб

Советский компьютер Радио-86РК (1986) и его клоны

Moderator: Shaos

aviator
Maniac
Posts: 310
Joined: 10 Dec 2008 08:39
Location: Стокгольм, Швеция

Re: «РАДИО-86РК» - 512 Кб / 16 Мб

Post by aviator »

Понял, вопросов больше нет.
С уважением, Сергей.
Mondx
Doomed
Posts: 541
Joined: 10 Aug 2022 07:27
Location: Crimea

Re: «РАДИО-86РК» - 512 Кб / 16 Мб

Post by Mondx »

Alikberov wrote: Если не ошибаюсь, ЮТ-88 использовал перехват доступа к стеку для каких-то нужд?
Этот вариант я тоже рассматривал, но из-за того, что только на i8080/ВМ80 это доступно и уже никак не реализуемо под i8085 и z80, его отверг...
"Никогда не говори никогда". В детстве делал доступ к эл диску через стек на z80. Пару мс логики.
User avatar
Alikberov
Doomed
Posts: 364
Joined: 14 Oct 2019 18:10
Location: Tashkent

Re: «РАДИО-86РК» - 512 Кб / 16 Мб

Post by Alikberov »

Mondx wrote:
Alikberov wrote: Если не ошибаюсь, ЮТ-88 использовал перехват доступа к стеку для каких-то нужд?
Этот вариант я тоже рассматривал, но из-за того, что только на i8080/ВМ80 это доступно и уже никак не реализуемо под i8085 и z80, его отверг...
"Никогда не говори никогда". В детстве делал доступ к эл диску через стек на z80. Пару мс логики.
Логика требовалась для перехвата конкретных команд (PUSH/POP) или циклов?
Квазидиск ЮТ-88
Очень интересная идея для организации хранения данных на дополнительном ОЗУ. Реализации идеи способствует тот факт, что компьютер построен на процессоре КР580ВМ80. Суть квазидиска в том, что доступ к нему организуется через стек и никак более.

Почему КР580ВМ80? Дело в том, что процессор не имеет "на борту" контроллера для организации шины управления. В нём нет, как в Z80 готовых выходов для обращения к памяти и внешним устройствам. Для КР580ВМ80 эти сигналы формирует внешний контроллер, в ЮТ-88 это специализированная микросхема КР580ВК38. По сигналу /STB (который является синхронизированным с тактовой частотой проинвертированным сигналом SYNC) процессор через шину данных передаёт так называемое управляющее слово, в котором "зашифрован" текущий режим работы. Это слово распознаётся контроллером КР580ВК38, и он формирует на своих выходах требуемые сигналы (чтение/запись, память/внешнее устройство).

В управляющем слове бит D2=1 означает операции работы со стеком. Поэтому для обращения к памяти квазидиска берётся бит 2 шины данных процессора, выделяется из управляющего слова, и в момент работы со стеком основное ОЗУ отключается и вместо него подставляется ОЗУ квазидиска.
Практически стек - отдельный теневой банк в 65536 байтов.

Так же, как и в моих изысканиях, коду приложения, работающий по адресам 0000…7FFF должен по адресам 8000…FFFF открываться дополнительный банк 32 Кб. Что и достигает лёгкой доработкой с ТМ2. То есть, я использую бит D5 для этого, а не бит D2 - вот вся разница.
Mondx
Doomed
Posts: 541
Joined: 10 Aug 2022 07:27
Location: Crimea

Re: «РАДИО-86РК» - 512 Кб / 16 Мб

Post by Mondx »

Alikberov wrote: Логика требовалась для перехвата конкретных команд (PUSH/POP) или циклов?
Ага, push/pop. Что значит циклов?
User avatar
Alikberov
Doomed
Posts: 364
Joined: 14 Oct 2019 18:10
Location: Tashkent

Re: «РАДИО-86РК» - 512 Кб / 16 Мб

Post by Alikberov »

Mondx wrote:
Alikberov wrote: Логика требовалась для перехвата конкретных команд (PUSH/POP) или циклов?
Ага, push/pop. Что значит циклов?
Стр.11
Разряды ССМЦ имеют следующие функциональные назначения:
  • ППР (Д0) - подтверждение прерывания, используется для управления выдачей на шину данных кода команды RST (разд.7);
  • ЗПП (Д1) - запись в память и вывод, указывает на то, что в машинном цикле будет выполняться операция записи данных в память или в устройство вывода;
  • СТЕК (Д2) - обращение к стеку, указывает, что в машинном цикле будет происходить запись в стек или чтение из стека, на адресной шине в этом машинном цикле находится содержимое УC (используется квазидиском ЮТ-88);
  • ПОСТ (ДЗ) - подтверждение останова, указывает на то, что MП перешел в, состояние останова (по команде HLT);
  • ЗПВВ (Д4) - вывод, указывает на то, что в машинном цикле будет происходить операция записи данных в устройство вывода;
  • M1 (Д5) - выборка, указывает на то, что в машинном цикле будет происходить выборка первого байта команды из памяти (используется в режиме 64 Кб у меня);
  • ЧТВВ (Д6) - ввод, указывает на то, что в машинном цикле будет происходить чтение данных в МП из устройства ввода;
  • ЧТП (Д7) - чтение из памяти, указывает на то, что в машинном цикле будет происходить операция чтения из памяти;
Mondx
Doomed
Posts: 541
Joined: 10 Aug 2022 07:27
Location: Crimea

Re: «РАДИО-86РК» - 512 Кб / 16 Мб

Post by Mondx »

Ну а как пуш/поп поймаешь? В МАШИННОМ цикле М1 по данным взводишь триггер и вперёд, до следующего М1.
User avatar
Alikberov
Doomed
Posts: 364
Joined: 14 Oct 2019 18:10
Location: Tashkent

Re: «РАДИО-86РК» - 512 Кб / 16 Мб

Post by Alikberov »

Mondx wrote:Ну а как пуш/поп поймаешь? В МАШИННОМ цикле М1 по данным взводишь триггер и вперёд, до следующего М1.
А как по Вашему ВК28/ВК38 вырабатывают сигналы IOWR/IORD? Ведь ВК28/ВК38 не декодирует коды инструкций IN/OUT - DB/D3, а просто фиксирует флаги D4 и D6 как IOWR и IORD в начале каждого машинного цикла (не только M1), которых у ВМ80 много.

То есть, используя только бит D2 флага статуса, можно поймать именно цикл доступа к стеку (не M1) и подставить нужную страницу памяти. При этом будут работать не только PUSH/POP, но и CALL/RET, даже XTHL!

В своём варианте доработки я ничего не декодирую (JMP/CALL/RET/PCHL), а просто слежу за флагами. Соответственно, полноценный доступ к теневому стеку возможен только через флаг бита D2 машинного цикла, что проще в сотню раз - один ТМ2 со статусом "стек не стек".

И это возможно только на i8080/ВМ80.
Mondx
Doomed
Posts: 541
Joined: 10 Aug 2022 07:27
Location: Crimea

Re: «РАДИО-86РК» - 512 Кб / 16 Мб

Post by Mondx »

Так я ж не про 8080! С ним то всё понятно!
User avatar
Alikberov
Doomed
Posts: 364
Joined: 14 Oct 2019 18:10
Location: Tashkent

Re: «РАДИО-86РК» - 512 Кб / 16 Мб

Post by Alikberov »

Mondx wrote:Так я ж не про 8080! С ним то всё понятно!
Ну, перехватывать коды x80-совместимых процессоров - это уже треш!

Хотя, вот, инструкции IN/OUT я бы перехватил, чтобы закрыть пользовательскому коду доступ к УВВ и подменить их на прерывания или FF, что позволило бы полностью виртуализировать порты: Типа, вместо CALL F803 - просто IN 03.

Кстати, я до сих пор не нашёл способа перехвата этих кодов.
Так как нужно построить узел, который при кодах D3 и DB в цикле M1 начнёт на ШД процессора выдавать код FD до следующего цикла M1, чтобы процессор прочитал «FD FD FD» - «CALL* FDFD». Соответственно, в ПЗУ с адреса FDFD должен расположиться код эмуляции УВВ, определяющего по указателю PC в стеке, какая конкретно инструкция была: D3 или DB?
Вот тут компактно (как на ТМ2 выше) никак не получается…
aviator
Maniac
Posts: 310
Joined: 10 Dec 2008 08:39
Location: Стокгольм, Швеция

Re: «РАДИО-86РК» - 512 Кб / 16 Мб

Post by aviator »

Alikberov wrote:Практически стек - отдельный теневой банк в 65536 байтов.
Нельзя так делать. Все языки высокого уровня передают параметры в функцию через стек. Вот только для чтения их используются MOV - в функции параметры используются не в том порядке и многократно.
С уважением, Сергей.
Mondx
Doomed
Posts: 541
Joined: 10 Aug 2022 07:27
Location: Crimea

Re: «РАДИО-86РК» - 512 Кб / 16 Мб

Post by Mondx »

aviator wrote: Нельзя так делать. Все языки высокого уровня передают параметры в функцию через стек.
Перед пересылкой сектора из стека, сначала запрещаются прерывания, выставляется разрешение, а уж только потом...
aviator
Maniac
Posts: 310
Joined: 10 Dec 2008 08:39
Location: Стокгольм, Швеция

Re: «РАДИО-86РК» - 512 Кб / 16 Мб

Post by aviator »

...и это всё будет люто-бешено тормозить.
С уважением, Сергей.
Mondx
Doomed
Posts: 541
Joined: 10 Aug 2022 07:27
Location: Crimea

Re: «РАДИО-86РК» - 512 Кб / 16 Мб

Post by Mondx »

Люто-бешено это насколько? Всё же считается и давно просчитано. Иначе бы не использовали пересылку через стек.
aviator
Maniac
Posts: 310
Joined: 10 Dec 2008 08:39
Location: Стокгольм, Швеция

Re: «РАДИО-86РК» - 512 Кб / 16 Мб

Post by aviator »

Если вы перехватываете опкоды инструкций PUSH/POP, чтобы перенести стек в физически другую память, то при входе в функцию вам нужно будет переместить фрагмент стека в основное ОЗУ, чтобы оно было доступно для кода функции, а потом ещё и обратно, так как функции могут быть с побочным эффектом. И для каждого вида calling convention, используемого в компиляторах, вам придётся делать свой вид обработки. Я уже не говорю о том, что программы написанные вручную на ассемблере чаще всего используют нестандартный подход, для скорости и уменьшения объёма. Вот как с ними быть?
Поэтому все разговоры о "стеке-теневом банке" приносят больше проблем, чем выгоды.
А вот выделить для каждой задачи свою банку стека - наоборот логично, и не принесёт никаких проблем.
С уважением, Сергей.
Mondx
Doomed
Posts: 541
Joined: 10 Aug 2022 07:27
Location: Crimea

Re: «РАДИО-86РК» - 512 Кб / 16 Мб

Post by Mondx »

Электронный диск используется в ОС, в секции BIOS. Там всё на ассемблере. У тебя абсолютно всё под контролем, никаких побочек. Откуда они возьмутся? Да, скорость обмена на первом месте, иначе бы делали по простому. А так, пишется один раз и забывается напрочь.