Speccy - наш выбор!

Speccy - наш выбор! (http://zx-pk.ru/index.php)
-   Эмуляторы отечественных компьютеров (http://zx-pk.ru/forumdisplay.php?f=61)
-   -   Эмулятор УКНЦ (http://zx-pk.ru/showthread.php?t=6257)

Patron 9th October 2011 18:41

Quote:

Originally Posted by Alex_K (Post 422632)
Кстати в ВМ2 точно также.

Думаю, что не совсем "точно" так же..

У процессора 1801ВМ1 работа и с аппаратными, и с программными прерываниями в HALT-моде полностью исключена.

Наверное, это и не ошибка - ведь ВМ1 при переходе в HALT-моду не переключает младшие страницы памяти, из-за чего находящиеся там вектора не годятся для использования в HALT-моде.

Тогда как у ВМ2 (насколько я понимаю) - работа с аппаратными и программными прерываниями в HALT-моде вполне возможна.

Alex_K 9th October 2011 18:50

Quote:

Originally Posted by Patron (Post 422651)
Думаю, что не совсем "точно" так же..

У процессора 1801ВМ1 работа и с аппаратными, и с программными прерываниями в HALT-моде полностью исключена.

Как это исключена? Неужто в HALT-режиме невозможно выполнить команду EMT?
Quote:

Originally Posted by Patron (Post 422651)
Наверное, это и не ошибка - ведь ВМ1 при переходе в HALT-моду не переключает младшие страницы памяти, из-за чего находящиеся там вектора не годятся для использования в HALT-моде.

Тогда как у ВМ2 (насколько я понимаю) - работа с аппаратными и программными прерываниями в HALT-моде вполне возможна.

Какое переключение? У ВМ1 независимо от режима одно адресное пространство. Действительно при переходе в HALT процессор устанавливает бит 3 в регистре 177716, но это уже особенности архитектуры компьютера.

Patron 9th October 2011 19:22

Quote:

Originally Posted by Alex_K (Post 422656)
Как это исключена? Неужто в HALT-режиме невозможно выполнить команду EMT?

Какое переключение? У ВМ1 независимо от режима одно адресное пространство. Действительно при переходе в HALT процессор устанавливает бит 3 в регистре 177716, но это уже особенности архитектуры компьютера.

Процессор 1801ВМ1 в HALT-режиме отрабатывает прерывание зависания не по вектору 04, а по вектору SEL1+02.

Это единственное (если не ошибаюсь) отличие поведения процессора 1801ВМ1 в HALT-режиме от поведения в USER-режиме.

Команду EMT можно выполнить в HALT-режиме, но её нельзя использовать в коде, который должен РАБОТАТЬ в HALT-режиме, поскольку запуск блока прерываний, вызванный командой EMT, немедленно переключит процессор в USER-режим.

Вот почему работа и с аппаратными, и с программными прерываниями в HALT-режиме процессора 1801ВМ1 полностью исключена.

Alex_K 9th October 2011 19:51

Quote:

Originally Posted by Patron (Post 422673)
Процессор 1801ВМ1 в HALT-режиме отрабатывает прерывание зависания не по вектору 04, а по вектору SEL1+02.

В ВМ2 также обработка зависания зависит от того, в каком режиме находится процессор.
Quote:

Originally Posted by Patron (Post 422673)
Команду EMT можно выполнить в HALT-режиме, но её нельзя использовать в коде, который должен РАБОТАТЬ в HALT-режиме, поскольку запуск блока прерываний, вызванный командой EMT, немедленно переключит процессор в USER-режим.

Вот почему работа и с аппаратными, и с программными прерываниями в HALT-режиме процессора 1801ВМ1 полностью исключена.

А вот здесь давайте внимательно рассмотрим эту ситуацию. Я опишу как все это работает на ВМ2 и задам Вам вопросы по поводу ВМ1.
Начнем. 1. Процессор работает в HALT-режиме (бит 8 PSW установлен). Разрешим прерывания сбросом бита 7 для того, чтобы изменялись CPC и CPSW. Насколько я понимаю HALT-режим у ВМ1 устанавливается установкой бита 10 в PSW, он же вроде запрещает одновременно и аппаратные прерывания. Наш процесс будет выполняться в адресах старше 160000.
2. Выполняем команду EMT. Так как у ВМ2 это прерывание USER-режима, то процессор вываливается в режим USER, сохраняет в стеке CPC и CPSW, читает в PC и PSW значение вектора 30(так как это вектор USER-режима, то в PSW записывается только младший байт) и запускает процесс на исполнение. Соответственно сохраненный в стеке CPSW содержит установленный бит 8 (режим HALT).
Вопрос:Как у ВМ1 в стеке сохраняется PSW - только младший байт или целиком весь?
3. Процесс по EMT выполнился, выходим по RTI. Так как точка возврата больше 160000, то в PSW копируются все 9 битов и мы снова в режиме HALT.
Вопрос:Как у ВМ1 по командам RTI/RTT происходит установка PSW - всего целиком или только младшего байта?

Вся соль ситуации еще состоит в том, что у ВМ2 всего один регистр R6, он общий, независимо от режима. Т.е. не так как у ВМ3. Соответственно в архитектуре должно быть предусмотрено общее пространство ОЗУ для USER/HALT или при работе в HALT не надо трогать R6. Либо если тронули, то возвратить обратно, если возможна ситуация переключения в USER.

Patron 9th October 2011 20:31

Quote:

Как у ВМ1 в стеке сохраняется PSW - только младший байт или целиком весь?
В стеке сохраняются все биты PSW.

Quote:

Как у ВМ1 по командам RTI/RTT происходит установка PSW - всего целиком или только младшего байта?
При установке PSW по команде RTI/RTT - старший байт PSW обнуляется, а младший копируется из стека.

hobot 10th October 2011 21:57

+4 игрушки на сборник для эмулятора
 
1 Attachment(s)
Добавилось четыре игры из архива Арсения, описания и картинки из игрушек тут.

Alex_K 10th October 2011 22:54

2 Attachment(s)
Подправил в эмуляторе:
1. Теперь при отжатии клавиша дает скэн-код того алфавита, при котором была нажата. Должны прекратиться зависания клавиатуры в текстовых играх, которые активно переключают алфавит с помощью управляющих кодов РУС(14) и ЛАТ(15).
2. Реализована поддержка ловушки адреса. Вроде бы работает. Можно опробовать на диске GD.DSK, который выкладывал Vamos. Надеюсь он будет очень рад.

На диске GD.DSK стоит посмотреть две демонстрашки - очень красиво.
Грузимся с диска GD.DSK. Там есть два логических диска TST1.DSK и TST2.DSK. Автоматом при загрузке они не монтируются. Поэтому введем две команды:
MOUNT LD0 TST1
MOUNT LD1 TST2
После загрузим драйвер GD командой: SET GD ON.
Для первой демонстрашки введем:
ASS LD0 DK
RU TST1
В пакете научной графики запускаем демонстрацию командой: @DEM1
После демонстрашки выход в RT-11 команда: EXIT.
Соответственно для второй демонстрашки:
ASS LD1 DK
RU TST2
@DEM2
EXIT

hobot 10th October 2011 23:43

1 Attachment(s)
Quote:

Originally Posted by Alex_K (Post 423278)
Подправил в эмуляторе:
1. Теперь при отжатии клавиша дает скэн-код того алфавита, при котором была нажата. Должны прекратиться зависания клавиатуры в текстовых играх, которые активно переключают алфавит с помощью управляющих кодов РУС(14) и ЛАТ(15).
2. Реализована поддержка ловушки адреса. Вроде бы работает. Можно опробовать на диске GD.DSK, который выкладывал Vamos. Надеюсь он будет очень рад.

Вот это прогресс!!! =) По поводу кнопок проверю прямо сейчас !!!

---------- Post added at 22:43 ---------- Previous post was at 22:34 ----------

(!!!) Нет, если в Патруле быстрого залипания я не дождался, то в "Косынке" (пасьянс)
пробел залип прямо сразу !!! Там постоянно идёт РУС\ЛАТ - видно по системной надписи !!!
В любом случае погоняю подробнее игрушки в сегодняшней сборке (там где на русский регистр идёт переключение)
и если из всех игр останется только Пасьянс - может быть дело уже в самой игре. Посмотрим.

(!!!) Хэлп! У меня диск после загрузки просто вешает эмулятор,
потом отлипает, как-будто настоящий дисковод подвисает, вот скрин

Alex_K 10th October 2011 23:54

Quote:

Originally Posted by hobot (Post 423321)
Нет, если в Патруле быстрого залипания я не дождался, то в "Косынке" (пасьянс)
пробел залип прямо сразу !!! Там постоянно идёт РУС\ЛАТ - видно по системной надписи !!!

Вы про PASQNS который? Да, заметил. Но причина здесь наверное в другом. Будем разбираться.

hobot 10th October 2011 23:58

3 Attachment(s)
Quote:

Originally Posted by hobot (Post 423321)
(!!!) Хэлп! У меня диск после загрузки просто вешает эмулятор,
потом отлипает, как-будто настоящий дисковод подвисает, вот скрин

А другово образа gd.dsk у меня нет, есть только другая сборка эмулятора:confused_std:


Quote:

Originally Posted by Alex_K (Post 423334)
Вы про PASQNS который? Да, заметил. Но причина здесь наверное в другом. Будем разбираться.

меня на ты очень даже можно, так проще ведь? Да возможно я не дождался в патруле и сталкере (там где рус\лат) и ещё где-то было постоянно, но если повторится этот глюк я погоняю сегодня игрушки и отпишу.

Образ GD.DSK переткнул в дисковод 1 и вроде заработало. Так и должно быть? Почему в 0 дисководе не читается, или только у меня так?

(*Первая картинка когда дискета в 0 дисководе,
вторая и третья - запустился при загрузке в дисководе 1)

Красиво, да! Надо-бы видео сделать :wink:


All times are GMT +4. The time now is 02:54.

Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.