«РАДИО-86РК» - 512 Кб / 16 Мб
Moderator: Shaos
-
- Maniac
- Posts: 310
- Joined: 10 Dec 2008 08:39
- Location: Стокгольм, Швеция
-
- Doomed
- Posts: 541
- Joined: 10 Aug 2022 07:27
- Location: Crimea
Re: «РАДИО-86РК» - 512 Кб / 16 Мб
"Никогда не говори никогда". В детстве делал доступ к эл диску через стек на z80. Пару мс логики.Alikberov wrote: Если не ошибаюсь, ЮТ-88 использовал перехват доступа к стеку для каких-то нужд?
Этот вариант я тоже рассматривал, но из-за того, что только на i8080/ВМ80 это доступно и уже никак не реализуемо под i8085 и z80, его отверг...
-
- Doomed
- Posts: 364
- Joined: 14 Oct 2019 18:10
- Location: Tashkent
Re: «РАДИО-86РК» - 512 Кб / 16 Мб
Логика требовалась для перехвата конкретных команд (PUSH/POP) или циклов?Mondx wrote:"Никогда не говори никогда". В детстве делал доступ к эл диску через стек на z80. Пару мс логики.Alikberov wrote: Если не ошибаюсь, ЮТ-88 использовал перехват доступа к стеку для каких-то нужд?
Этот вариант я тоже рассматривал, но из-за того, что только на i8080/ВМ80 это доступно и уже никак не реализуемо под i8085 и z80, его отверг...
Практически стек - отдельный теневой банк в 65536 байтов.Квазидиск ЮТ-88
Очень интересная идея для организации хранения данных на дополнительном ОЗУ. Реализации идеи способствует тот факт, что компьютер построен на процессоре КР580ВМ80. Суть квазидиска в том, что доступ к нему организуется через стек и никак более.
Почему КР580ВМ80? Дело в том, что процессор не имеет "на борту" контроллера для организации шины управления. В нём нет, как в Z80 готовых выходов для обращения к памяти и внешним устройствам. Для КР580ВМ80 эти сигналы формирует внешний контроллер, в ЮТ-88 это специализированная микросхема КР580ВК38. По сигналу /STB (который является синхронизированным с тактовой частотой проинвертированным сигналом SYNC) процессор через шину данных передаёт так называемое управляющее слово, в котором "зашифрован" текущий режим работы. Это слово распознаётся контроллером КР580ВК38, и он формирует на своих выходах требуемые сигналы (чтение/запись, память/внешнее устройство).
В управляющем слове бит D2=1 означает операции работы со стеком. Поэтому для обращения к памяти квазидиска берётся бит 2 шины данных процессора, выделяется из управляющего слова, и в момент работы со стеком основное ОЗУ отключается и вместо него подставляется ОЗУ квазидиска.
Так же, как и в моих изысканиях, коду приложения, работающий по адресам 0000…7FFF должен по адресам 8000…FFFF открываться дополнительный банк 32 Кб. Что и достигает лёгкой доработкой с ТМ2. То есть, я использую бит D5 для этого, а не бит D2 - вот вся разница.
-
- Doomed
- Posts: 541
- Joined: 10 Aug 2022 07:27
- Location: Crimea
Re: «РАДИО-86РК» - 512 Кб / 16 Мб
Ага, push/pop. Что значит циклов?Alikberov wrote: Логика требовалась для перехвата конкретных команд (PUSH/POP) или циклов?
-
- Doomed
- Posts: 364
- Joined: 14 Oct 2019 18:10
- Location: Tashkent
Re: «РАДИО-86РК» - 512 Кб / 16 Мб
Стр.11Mondx wrote:Ага, push/pop. Что значит циклов?Alikberov wrote: Логика требовалась для перехвата конкретных команд (PUSH/POP) или циклов?
Разряды ССМЦ имеют следующие функциональные назначения:
- ППР (Д0) - подтверждение прерывания, используется для управления выдачей на шину данных кода команды RST (разд.7);
- ЗПП (Д1) - запись в память и вывод, указывает на то, что в машинном цикле будет выполняться операция записи данных в память или в устройство вывода;
- СТЕК (Д2) - обращение к стеку, указывает, что в машинном цикле будет происходить запись в стек или чтение из стека, на адресной шине в этом машинном цикле находится содержимое УC (используется квазидиском ЮТ-88);
- ПОСТ (ДЗ) - подтверждение останова, указывает на то, что MП перешел в, состояние останова (по команде HLT);
- ЗПВВ (Д4) - вывод, указывает на то, что в машинном цикле будет происходить операция записи данных в устройство вывода;
- M1 (Д5) - выборка, указывает на то, что в машинном цикле будет происходить выборка первого байта команды из памяти (используется в режиме 64 Кб у меня);
- ЧТВВ (Д6) - ввод, указывает на то, что в машинном цикле будет происходить чтение данных в МП из устройства ввода;
- ЧТП (Д7) - чтение из памяти, указывает на то, что в машинном цикле будет происходить операция чтения из памяти;
-
- Doomed
- Posts: 541
- Joined: 10 Aug 2022 07:27
- Location: Crimea
Re: «РАДИО-86РК» - 512 Кб / 16 Мб
Ну а как пуш/поп поймаешь? В МАШИННОМ цикле М1 по данным взводишь триггер и вперёд, до следующего М1.
-
- Doomed
- Posts: 364
- Joined: 14 Oct 2019 18:10
- Location: Tashkent
Re: «РАДИО-86РК» - 512 Кб / 16 Мб
А как по Вашему ВК28/ВК38 вырабатывают сигналы IOWR/IORD? Ведь ВК28/ВК38 не декодирует коды инструкций IN/OUT - DB/D3, а просто фиксирует флаги D4 и D6 как IOWR и IORD в начале каждого машинного цикла (не только M1), которых у ВМ80 много.Mondx wrote:Ну а как пуш/поп поймаешь? В МАШИННОМ цикле М1 по данным взводишь триггер и вперёд, до следующего М1.
То есть, используя только бит D2 флага статуса, можно поймать именно цикл доступа к стеку (не M1) и подставить нужную страницу памяти. При этом будут работать не только PUSH/POP, но и CALL/RET, даже XTHL!
В своём варианте доработки я ничего не декодирую (JMP/CALL/RET/PCHL), а просто слежу за флагами. Соответственно, полноценный доступ к теневому стеку возможен только через флаг бита D2 машинного цикла, что проще в сотню раз - один ТМ2 со статусом "стек не стек".
И это возможно только на i8080/ВМ80.
-
- Doomed
- Posts: 541
- Joined: 10 Aug 2022 07:27
- Location: Crimea
Re: «РАДИО-86РК» - 512 Кб / 16 Мб
Так я ж не про 8080! С ним то всё понятно!
-
- Doomed
- Posts: 364
- Joined: 14 Oct 2019 18:10
- Location: Tashkent
Re: «РАДИО-86РК» - 512 Кб / 16 Мб
Ну, перехватывать коды x80-совместимых процессоров - это уже треш!Mondx wrote:Так я ж не про 8080! С ним то всё понятно!
Хотя, вот, инструкции IN/OUT я бы перехватил, чтобы закрыть пользовательскому коду доступ к УВВ и подменить их на прерывания или FF, что позволило бы полностью виртуализировать порты: Типа, вместо CALL F803 - просто IN 03.
Кстати, я до сих пор не нашёл способа перехвата этих кодов.
Так как нужно построить узел, который при кодах D3 и DB в цикле M1 начнёт на ШД процессора выдавать код FD до следующего цикла M1, чтобы процессор прочитал «FD FD FD» - «CALL* FDFD». Соответственно, в ПЗУ с адреса FDFD должен расположиться код эмуляции УВВ, определяющего по указателю PC в стеке, какая конкретно инструкция была: D3 или DB?
Вот тут компактно (как на ТМ2 выше) никак не получается…
-
- Maniac
- Posts: 310
- Joined: 10 Dec 2008 08:39
- Location: Стокгольм, Швеция
Re: «РАДИО-86РК» - 512 Кб / 16 Мб
Нельзя так делать. Все языки высокого уровня передают параметры в функцию через стек. Вот только для чтения их используются MOV - в функции параметры используются не в том порядке и многократно.Alikberov wrote:Практически стек - отдельный теневой банк в 65536 байтов.
С уважением, Сергей.
-
- Doomed
- Posts: 541
- Joined: 10 Aug 2022 07:27
- Location: Crimea
Re: «РАДИО-86РК» - 512 Кб / 16 Мб
Перед пересылкой сектора из стека, сначала запрещаются прерывания, выставляется разрешение, а уж только потом...aviator wrote: Нельзя так делать. Все языки высокого уровня передают параметры в функцию через стек.
-
- Maniac
- Posts: 310
- Joined: 10 Dec 2008 08:39
- Location: Стокгольм, Швеция
-
- Doomed
- Posts: 541
- Joined: 10 Aug 2022 07:27
- Location: Crimea
Re: «РАДИО-86РК» - 512 Кб / 16 Мб
Люто-бешено это насколько? Всё же считается и давно просчитано. Иначе бы не использовали пересылку через стек.
-
- Maniac
- Posts: 310
- Joined: 10 Dec 2008 08:39
- Location: Стокгольм, Швеция
Re: «РАДИО-86РК» - 512 Кб / 16 Мб
Если вы перехватываете опкоды инструкций PUSH/POP, чтобы перенести стек в физически другую память, то при входе в функцию вам нужно будет переместить фрагмент стека в основное ОЗУ, чтобы оно было доступно для кода функции, а потом ещё и обратно, так как функции могут быть с побочным эффектом. И для каждого вида calling convention, используемого в компиляторах, вам придётся делать свой вид обработки. Я уже не говорю о том, что программы написанные вручную на ассемблере чаще всего используют нестандартный подход, для скорости и уменьшения объёма. Вот как с ними быть?
Поэтому все разговоры о "стеке-теневом банке" приносят больше проблем, чем выгоды.
А вот выделить для каждой задачи свою банку стека - наоборот логично, и не принесёт никаких проблем.
Поэтому все разговоры о "стеке-теневом банке" приносят больше проблем, чем выгоды.
А вот выделить для каждой задачи свою банку стека - наоборот логично, и не принесёт никаких проблем.
С уважением, Сергей.
-
- Doomed
- Posts: 541
- Joined: 10 Aug 2022 07:27
- Location: Crimea
Re: «РАДИО-86РК» - 512 Кб / 16 Мб
Электронный диск используется в ОС, в секции BIOS. Там всё на ассемблере. У тебя абсолютно всё под контролем, никаких побочек. Откуда они возьмутся? Да, скорость обмена на первом месте, иначе бы делали по простому. А так, пишется один раз и забывается напрочь.