PDA

Просмотр полной версии : Эмулятор УКНЦ - UKNCBTL



Страницы : 1 [2] 3 4 5

hobot
03.10.2011, 22:02
Спасибо за мат.часть - мне эта информация очень полезна(без шуток) =)


Кстати, а у Вас есть реальная УКНЦ?
Была, канула, открыт для вариантов-предложений =) Вернуть в коллекцию эту замечательную машинку было-бы совсем не плохо. Поэтому Пока только в эмуляторе (в двух (нет уже в трёх)) различных сборках =)

---------- Post added at 22:02 ---------- Previous post was at 21:49 ----------

А на реальной что проверять? Там другие эксперименты =)

Vamos
03.10.2011, 23:36
То что в эмуляции есть проблемы я писал вот в этом посте:
http://zx.pk.ru/showpost.php?p=302625&postcount=188
но видимо так никто и не разобрался в чем проблема, при том что с этими программами не глюки, а конкретная стабильная не исполняемость в эмуляторе.

Alex_K
04.10.2011, 00:12
То что в эмуляции есть проблемы я писал вот в этом посте:
http://zx.pk.ru/showpost.php?p=302625&postcount=188
но видимо так никто и не разобрался в чем проблема, при том что с этими программами не глюки, а конкретная стабильная не исполняемость в эмуляторе.
По поводу JEK-а я могу сказать, что там подвисает дисковод при чтении. Не устанавливается бит готовности в регистре 177130. Я эту проблему знаю, надо кардинально просматривать весь код, в каком месте он сбрасывается и при каких условиях. Но на это надо время и желание.
По поводу GD - там используется ловушка с адресами 176644 и 176646. Она естественно не реализована, т.к. в эмуляторе постепенно реализовывались только самые важные устройства. Лично я не думал, что где-то она используется, а однако же есть.

Не забывайте, что эмулятор все таки в состоянии бета. И долго в таком будет. Архитектура УКНЦ довольно сложная и до полноценной реализации еще все таки далеко.

Vamos
04.10.2011, 00:25
По поводу GD - там используется ловушка с адресами 176644 и 176646. Она естественно не реализована,

Ловушка в последней версии уже реализована (по моей просьбе), режим эмуляции КГД включается, а вот графические программы для КГД не работают.

На счет JEKа, не ожидал что проблема с эмуляцией контроллера FDD.

Titus
04.10.2011, 00:26
По поводу JEK-а я могу сказать, что там подвисает дисковод при чтении.
Странно, редактор, который по ссылке загрузился в эмуле, и даже рисует.

Vamos
04.10.2011, 00:29
Странно, редактор, который по ссылке загрузился в эмуле, и даже рисует.

Рисует не все цвета. Попробуй на реальной УКНЦ и увидишь разницу :)

Alex_K
04.10.2011, 00:31
Ловушка в последней версии уже реализована (по моей просьбе), режим эмуляции КГД включается, а вот графические программы для КГД не работают.
Интересно, а где Вы увидели ее реализацию. Там только сделано то, что не происходит TRAP4 при обращении к этим регистрам. А читается с них всегда ноль, а запись не обрабатывается. Так что реализации устройства еще нет.

На счет JEKа, не ожидал что проблема с эмуляцией контроллера FDD.
Кстати, а откуда у Вас JEK. У меня он тоже есть, достался с покупкой УКНЦ в Питере, году этак в 1989-1990.

Titus
04.10.2011, 00:32
Рисует не все цвета. Попробуй на реальной УКНЦ и увидишь разницу :)
И что, не рисует из-за дисковода?

Alex_K
04.10.2011, 00:37
Рисует не все цвета. Попробуй на реальной УКНЦ и увидишь разницу :)
Успевает прочитать только два плана, а при чтении третьего подвисает дисковод.

---------- Post added at 00:37 ---------- Previous post was at 00:33 ----------


И что, не рисует из-за дисковода?

В отладчике видно, что в области ПП проц крутится по адресам 134132/134134. Там команды TSTB @R4/BPL 134132. В регистре R4 находится 177130.

Vamos
04.10.2011, 00:41
На счет TRAP 4 не видел, драйвер просто не грузился. Да nzeemin просто добавил регистры в эмуляторе.


Кстати, а откуда у Вас JEK.
Я был знаком с одним из разработчиков(программист в) пакета KUARKO.

Alex_K
04.10.2011, 00:56
На счет TRAP 4 не видел, драйвер просто не грузился. Да nzeemin просто добавил регистры в эмуляторе.
При добавлении регистров как раз и не будет TRAP4 при обращении к этим регистрам, а значит драйвер GD.SYS инсталлируется в системе.

Я был знаком с одним из разработчиков(программист в) пакета KUARKO.
Во как!!! Круто они его написали. Фактически заменили все программы системного ПЗУ. На этом пакете как раз и отлаживалась работа с каналами К0,К1,К2.

Vamos
04.10.2011, 01:09
При добавлении регистров как раз и не будет TRAP4
TRAP 4 не было когда и регистров не было.


Во как!!! Круто они его написали.
Да они были круты, а я еще только учился. :)
Я был знаком с человеком который написал музыкальный редактор для этого пакета.
Последний раз я с ним общался лет 15 назад.
Только вот полность этого пакета программ я так и не увидел.
Вот список того что в пакете должно было быть:

copyright (C) * KUARKO * 1989

Ленинградское об_единение "СМЕНА"

Ленинград 1989





- 3 -


1. ВВЕДЕНИЕ.

Пакет прикладных и системных программ для микро-ЭВМ МС 0511
(УКНЦ) был создан для того, чтобы заметно облегчить и существенно
повысить эффективность работы на вышеупомянутом компьютере.

В состав пакета входят следующие программы:

- oперационная система : Написана с учетом особенностей МС 0511
реального времени и содержит принципиально новые драйверы
электронного диска - VU.SYS и НГМД -
MU.SYS,а также специально разработанные
для УКНЦ мониторы - RTUKSJ и RTUKFB.SYS

Перечень файлов, входящих в комплект
поставки операционной системы, приведен
в приложении.

- KUARKO.SAV : Принципиально новый системный модуль
для оптимизации и значительного ускоре-
ния работы периферийного процессора
микро-ЭВМ.

- GRAF.SAV : Принципиально новый модуль поддержки
графического дисплея.

- TSTU.SAV : Модуль поддержки команд терминала VT-52

- FREE.SAV : Программа выгрузки модуля 'KUARKO'.

- JEK.SAV : Графический цветной экранный редактор

- HCOP.SAV : Программа вывода твердой копии экрана
микро-ЭВМ на принтеры Epson, Robotron,
D-100M с использованием восьми градаций
яркости на бумаге.

- HARDCO.SAV : Программа вывода твердой копии экрана
микро-ЭВМ на принтер D-100.

- 2DSCIU.SAV : Пакет двумерной научной графики.

- SPLINE.SAV : Программа интерполяции массивов экспе-
риментальных точек методом сплайнов для
пакета двумерной научной графики.

- FDRV.OBJ, CDRV.OBJ : Библиотеки стандартных графических фун-
кций для языков 'C', FORTRAN, PASCAL.

- MUSIC.SAV : Музыкальный редактор.

- GAMES.DSK : Набор графических игровых программ.

- JEK.LST, 2DSCIU.LST, : Описания соответствующих системных и
KUARKO.LST, DRV.LST прикладных программ.

- ARRC.EXE : Программа чтения на ЭВМ типа IBM PC
текстовых файлов, записанных на микро-
ЭВМ типа ДВК и УКНЦ.

- Сервисные программы:

* D100.SAV : Программы установки режимов и парамет-
* D100M.SAV : ров печатающих устройств типа Robotron,
* ROB.SAV : Epson, D-100M, D-100 в режиме меню с
экрана микро-ЭВМ.

* ALICER.SAV : Программы печати шрифтом стандартной
* ALICED.SAV : пишущей машинки на принтерах типа Epson
Robotron, D-100M

* FONT01.SAV : Программа загрузки специального шрифта
для дисплея микро-ЭВМ.

Alex_K
04.10.2011, 18:48
TRAP 4 не было когда и регистров не было.
Было, просто не видно. При инсталляции драйвера (при загрузке системы или по команде INSTALL) проверяются параметры генерации монитора, наличие регистра (он прописан по смещению 0176 нулевого блока), исполняется подпрограмма проверки (если есть). Во время проверки регистра RT-11 переназначает вектор 4, поэтому TRAP TO 4 и не будет выводится на экран, просто драйвер не инсталлируется. А в драйвере GD.SYS по смещению 0176 прописано 176644.

Vamos
05.10.2011, 01:35
Список программ из пакета KUARKO которые я так и не нашел, может у кого есть, хотя я думаю что они так и не были реализованы.
RTUKFB.SYS
HCOP.SAV
SPLINE.SAV
ARRC.EXE
ROB.SAV

За то есть несколько версиий модуля KUARKO.SAV

Shadow Maker
05.10.2011, 01:52
А загрузки save state до сих пор не работают?

hobot
05.10.2011, 12:25
RTUKFB.SYS
HCOP.SAV
SPLINE.SAV
ARRC.EXE
ROB.SAV
предлагаю мою тему (http://zx.pk.ru/showthread.php?t=16861) поддержать с запросом на эти файлы ?

---------- Post added at 12:25 ---------- Previous post was at 12:23 ----------


save state
Зато когда заработают, вот будет кайф ! =)

Shadow Maker
05.10.2011, 15:04
Да там елки-палки, всего делов - восстановить регистры и заново запустить на исполнение, там это даже работать должно, но почему-то не работает, а nzeemin игнорит реквесты.

Titus
05.10.2011, 15:12
Да там елки-палки, всего делов - восстановить регистры и заново запустить на исполнение, там это даже работать должно, но почему-то не работает, а nzeemin игнорит реквесты.
Думаю, что не так все просто, ввиду того, что регистров очень много, и не все они досконально изучены. Даже если собрать их все, и засунуть в снапшот, скорее всего в следующей версии эмулятора это придется переделывать.

Shadow Maker
05.10.2011, 15:15
Ну просто работы в этом направлении даже не ведутся, и это удручает.

Titus
05.10.2011, 15:17
Ну просто работы в этом направлении даже не ведутся, и это удручает.
Может у них времени мало. И не охота его тратить на то, чтобы менять коней посередине переправы.

hobot
05.10.2011, 16:03
Тест от form'a в последней сборке эмулятора, скриншоты тут
http://zx.pk.ru/showpost.php?p=421056&postcount=139

Titus
05.10.2011, 16:28
Тест от form'a в последней сборке эмулятора, скриншоты тут
http://zx.pk.ru/showpost.php?p=421056&postcount=139
Этот тест для эмулятора УКНЦ почти не информативен, т.к.
1) Ошибки сдвига на 31 в ВМ2 нету
2) Порядок обработки регистров при одинаковых регистрах в источнике и автоинкременте выявляется общим тестом 791401
3) JMP Rx в ВМ2 трапается по #4
4) JMP (Rx)+ может быть и нужно
5) Обращение к нечетному адресу на УКНЦ выравнивается до четного. Если неправильно реализовать в эмуляторе, то все будет глючить, даже теста для этого не надо. Вылетят, например, такие игры, как LAND.
6) SWAB может быть и нужно
7) Не знаю

Но вообще можно запускать для интереса) Как и любой тест)

hobot
07.10.2011, 18:57
Обновил образ дискеты со сборником игр для эмулятора,
что добавил описал "тут" (http://www.old-games.ru/forum/showpost.php?p=801585&postcount=31) - все игрушки из подборки архивов Арсения,
просто дошли ручки у меня, но вот про Knight из игропакета выдернутый
я реально не знал, у меня то когда-то честная дискета была с защитой там и всё такое.

Titus
07.10.2011, 20:15
Обновил образ дискеты со сборником игр для эмулятора,
что добавил описал "тут" (http://www.old-games.ru/forum/showpost.php?p=801585&postcount=31) - все игрушки из подборки архивов Арсения,
просто дошли ручки у меня, но вот про Knight из игропакета выдернутый
я реально не знал, у меня то когда-то честная дискета была с защитой там и всё такое.
А почему все скриншоты ты делаешь черно-белыми?

hobot
07.10.2011, 21:02
А почему все скриншоты ты делаешь черно-белыми?
Потому что это правильно ! =)

Titus
08.10.2011, 14:44
В каких случаях на УКНЦ вызываются следующие прерывания?

004 - кроме случаев адресации типа JMP Rx, JSR Rx
010 - кроме команд Float
014 - где используется отладка по T-разряду?
024 - для CPU инициируется 15-м разрядом регистра управления PPU, а для PPU чем?
160004 - Зависание в режиме HALT, в каких случаях на практике?
160174 - Двойное зависание, в каких случаях на практике?
160274 - Зависание при приеме адреса вектора прерывания, в каких случаях на практике?

Alex_K
08.10.2011, 16:18
В каких случаях на УКНЦ вызываются следующие прерывания?

004 - кроме случаев адресации типа JMP Rx, JSR Rx
Это зависание в режиме USER.

010 - кроме команд Float
FIS-команды работают через вектор 160010, а 010 - это прерывание по резервному коду

014 - где используется отладка по T-разряду?
Как где? В отладчиках естественно.

024 - для CPU инициируется 15-м разрядом регистра управления PPU, а для PPU чем?
Ничем. Но можно замкнуть ногу процессора ACLO на землю и получить прерывание по вектору 24.

160004 - Зависание в режиме HALT, в каких случаях на практике?
В пультовом отладчике при просмотре памяти.

160174 - Двойное зависание, в каких случаях на практике?
В криво написанной программе.

160274 - Зависание при приеме адреса вектора прерывания, в каких случаях на практике?
Аналогично предыдущему. Флаг разрешения прерывания надо очищать при запрещенных прерываниях.

Titus
08.10.2011, 17:52
Это зависание в режиме USER.
Имелось ввиду в каком случае происходит это зависание?

---------- Post added at 17:50 ---------- Previous post was at 17:50 ----------


Как где? В отладчиках естественно.
Что надо нажать, чтобы проверить это во встроенном отладчике?

---------- Post added at 17:52 ---------- Previous post was at 17:50 ----------


В пультовом отладчике при просмотре памяти.

В криво написанной программе.

Аналогично предыдущему. Флаг разрешения прерывания надо очищать при запрещенных прерываниях.

Почему может зависнуть при просмотре памяти?

Как криво должна быть написана, что куда не так должна записать?

Поточнее про флаг и зависание при приеме вектора, если можно.

hobot
08.10.2011, 17:56
Hа сайте по ссылке из соседней темы висел вот такой эмулятор УКНЦ от SOS, там виртуальный диск с Pascal\Fast в папках окружения реальных
.sav файлов несколько, а вот сам системный образ непонятно (видимо запакован где то в .ovl) - в общем практической ценности наверно особо не представляет, поскольку связи с внешним миром похоже не имеет.

Похож скорее на вещь в себе ( типа картриджа для Денди ).

http://www.onlinedisk.ru/file/747774/
:redface:

Alex_K
08.10.2011, 18:02
Имелось ввиду в каком случае происходит это зависание?

В каких и должно быть. При адресном обмене на шине QBUS после выставления процессором сигналов DIN или DOUT внешнее устройство или контроллер памяти должны записать/выставить данные и ответить сигналом RPLY. Вот если этого сигнала не будет (обычно в течение 64T), то тогда процессор прерывается по зависанию. В случае 1801ВМ2 будет зависеть от того в каком режиме работает процессор USER или HALT, то и вектор будет соответствующий. При прерывании устанавливается флажок обработки зависания в процессоре, и если при обработке зависания произойдет еще зависание, то тогда уже будет двойное зависание. В 1801ВМ2 флаг обработки зависания сбрасывается при успешном чтении кода команды.

---------- Post added at 18:02 ---------- Previous post was at 17:58 ----------


Что надо нажать, чтобы проверить это во встроенном отладчике?Если Вы про пультовый отладчик, то он работает по совершенно другому принципу. Используют отладчики в системе RT-11. Для примера на диске sysimage.dsk есть отладчик BUG.

Titus
08.10.2011, 18:02
При адресном обмене на шине QBUS после выставления процессором сигналов DIN или DOUT внешнее устройство или контроллер памяти должны записать/выставить данные и ответить сигналом RPLY. Вот если этого сигнала не будет (обычно в течение 64T), то тогда процессор прерывается по зависанию.
Это понятно из описания процессора. Я имел ввиду, в каких случаях это произойдет на УКНЦ? При условии отсутствия глюков железа.

Alex_K
08.10.2011, 18:07
Это понятно из описания процессора. Я имел ввиду, в каких случаях это произойдет на УКНЦ? При условии отсутствия глюков железа.
Если программа обращается к несуществующей памяти. Для примера - написана программа для УКНЦ, она обращается к каналу 2. Попытались запустить ее на ДВК, там канала 2 нет, соответственно прерывание по вектору 4. Обычно это прерывание используется, чтобы узнать объем памяти (не всегда было 56К), присутствие регистров внешних устройств на магистрали.

Titus
08.10.2011, 18:10
Понятно, значит обращение, скажем к памяти по адресу 160000 в режиме USER, должно вызвать зависание. А двойное зависание как устроить на УКНЦ?

Alex_K
08.10.2011, 18:19
Понятно, значит обращение, скажем к памяти по адресу 160000 в режиме USER, должно вызвать зависание. А двойное зависание как устроить на УКНЦ?
Правильно. А вот если перед этим в R6 загнать 170000, то тогда будет двойное зависание. Сперва произойдет зависание при обращении к 160000, ставится признак обработки зависания, соответственно текущие PC и SP должны положиться в стек, но при операции заноса в стек также происходит зависание. Но т.к. в данный момент происходит обработка зависания (стоит флаг), то уже произойдет двойное зависание.

Более сложный пример. SP будет нормальный, но по вектору 4 занесем 170000 (п/п обработки зависания находится в несуществующей памяти), в ячейке 6 должно быть 200 (запрет прерываний). При обращении к 160000 происходит зависание, ставится флаг обработки, сохраняются PC и SP в стеке (успешно). Из ячеек 4 и 6 читается вектор и начинает исполняться программа обработки прерывания. Т.к. еще не было успешного чтения кода команды, то флаг обработки прерывания не сброшен. Но чтение первой команды неуспешное, флаг стоит - в итоге двойное зависание.

Titus
08.10.2011, 18:57
А как зависнуть в режиме HALT, если в этом режиме все 64кб - это память?

Alex_K
08.10.2011, 19:00
А как зависнуть в режиме HALT, если в этом режиме все 64кб - это память?
Очень просто - надо прочесть память режима USER. Есть спецкоманды, которые работают только в HALT-режиме (коды от 10 до 37), среди этих команд есть и команды чтения/записи памяти USER-режима. Эти команды использует пультовый отладчик для просмотра памяти.

Titus
08.10.2011, 19:04
Очень просто - надо прочесть память режима USER. Есть спецкоманды, которые работают только в HALT-режиме (коды от 10 до 37), среди этих команд есть и команды чтения/записи памяти USER-режима. Эти команды использует пультовый отладчик для просмотра памяти.
Т.е. читаем память по адресу 160000 и опять получаем зависание? А двойное зависание получится так устроить, или уже нет?

Alex_K
08.10.2011, 19:09
Т.е. читаем память по адресу 160000 и опять получаем зависание? А двойное зависание получится так устроить, или уже нет? Все дело в том, что в режиме HALT PC и SP прерываемого процесса не сохраняются в стеке. Здесь только можно сделать так, чтобы вектор 160004 указывал на несуществующий адрес, но в режиме HALT в УКНЦ таких нет, так что - увы :(.

Patron
08.10.2011, 20:54
SP будет нормальный, но по вектору 4 занесем 170000 (п/п обработки зависания находится в несуществующей памяти), в ячейке 6 должно быть 200 (запрет прерываний). При обращении к 160000 происходит зависание, ставится флаг обработки, сохраняются PC и SP в стеке (успешно). Из ячеек 4 и 6 читается вектор и начинает исполняться программа обработки прерывания. Т.к. еще не было успешного чтения кода команды, то флаг обработки прерывания не сброшен. Но чтение первой команды неуспешное, флаг стоит - в итоге двойное зависание.У процессора 1801ВМ1 (если не ошибаюсь) в этом случае произойдёт циклический вход в обработчик зависания, который будет заносить PC и SP в стек до тех пор, пока указатель стека не вылезет из границ ОЗУ и только тогда произойдёт "нормальное" двойное зависание.

Допускаю, что и у 1801ВМ2 дела обстоят так же, но при тестировании этот тонкий момент не был должным образом отслежен.

Alex_K
08.10.2011, 21:10
У процессора 1801ВМ1 (если не ошибаюсь) в этом случае произойдёт циклический вход в обработчик зависания, который будет заносить PC и SP в стек до тех пор, пока указатель стека не вылезет из границ ОЗУ и только тогда произойдёт "нормальное" двойное зависание.

Допускаю, что и у 1801ВМ2 дела обстоят так же, но при тестировании этот тонкий момент не был должным образом отслежен.
Насчет 1801ВМ1 не скажу, нет его у меня. Если его и тестировать, то только на МС1201.01, на БК этот тонкий момент не проловишь. А вот у 1801ВМ2 дела обстоят именно так, все тестировалось на реальной машине, чтобы узнать когда формируется двойное зависание. В эмуляторе этот момент учтен.
Проверка простая. В ячейки 4 и 6 занести 170000 и 200 соответственно. С адреса 1000 занести команду TST @#160000 (коды 005737 и 160000). Запустить обязательно с помощью ИСП. В итоге двойное зависание, R6 равен 774 (если до этого он был 1000), R7 равен 170002.

Patron
08.10.2011, 21:23
у 1801ВМ2 дела обстоят именно так
Тогда это существенное отличие от ВМ1.

У 1801ВМ1 дела обстоят так:



? Patron - 14 февраля 23:51
А что насчёт поведения 1801ВМ1 при обработке прерывания зависания в USER-моде с несуществующим адресом в ячейке 04 ?
Если при этом не произойдёт переход в HALT-моду, то процессор войдёт в цикл бесконечного зависания.

? anonymous - 15 февраля 00:05
Да, пока указатель стека не затрет всю память и не перейдет через 0, после чего возникнет двойная ошибка шины с выходом в пульт, но данные в памяти ниже первоначального значения указателя стека будут утрачены.

? anonymous - 15 февраля 00:18
@4/002016 177000
000006/000000 340
@R6/000416 4
@1000/001000 5737
001002/001002 177000
001004/001004 0
@1000G
177002
@M000013
@R6/177774
@0/001004
000002/000340
000004/177000
@
Коды команды M:
х0 - переключатель пульт, инструкция HALT
х1 - ошибка передачи вектора
х2 - ошибка регенерации озу, в ДВК не реализовано
х3 - двойное зависание
х4 - ошибка микрокода процессора, в ДВК не реализовано

Alex_K
08.10.2011, 21:34
Тогда это существенное отличие от ВМ1.

У 1801ВМ1 дела обстоят так:
По всей видимости у 1801ВМ1 двойное зависание происходит только если возникло зависание во время обработки 4-го вектора, т.е. не удалось положить в стек PC и PS прерываемого процесса. Удалось положить - сбрасываем флаг зависания.

Patron
08.10.2011, 22:03
По всей видимости у 1801ВМ1 двойное зависание происходит только если возникло зависание во время обработки 4-го вектора, т.е. не удалось положить в стек PC и PS прерываемого процесса. Удалось положить - сбрасываем флаг зависания.Думаю, проверка номера вектора не входит в логику обработки двойного зависания ни в ВМ1, ни в ВМ2.

Судя по всему, в ВМ1 двойное зависание означает просто два таймаута шины подряд, а в ВМ2 использован более продвинутый алгоритм, дополнительно учитывающий последовательные зависания при выборке команд.

Alex_K
08.10.2011, 22:23
Думаю, проверка номера вектора не входит в логику обработки двойного зависания ни в ВМ1, ни в ВМ2.

Судя по всему, в ВМ1 двойное зависание означает просто два таймаута шины подряд, а в ВМ2 использован более продвинутый алгоритм, дополнительно учитывающий последовательные зависания при выборке команд.
А вот по всей видимости входит. Команды JMP Rx и JSR Rx также трапаются по 4-му вектору. Но алгоритм обработки на ситуацию двойного зависания другой.

Если в 4 и 6 занести 2000 и 200, в R6 - 170000. Сперва по адресу 1000 занесем команду TST @#160000. При исполнении R6 будет равен 167774. Т.е. при исполнении команды произошло зависание, произошло оно и при занесении параметров в стек. В итоге - двойное зависание. Кстати у ВМ2 указатель стека всегда уменьшается на 4. Если по адресу 1000 записать JMP R0 и исполнить, то будет двойное зависание и R6 уже будет равен 167770. Т.е. при исполнении команды произойдет прерывание по 4-му вектору, возникает зависание при заносе параметров в стек. Здесь снова прерывание по 4-му вектору, но при очередном занесении в стек - уже двойное зависание.
При этом между зависаниями было вполне успешное чтение 4-го вектора. Так что проще задействовать какой-нибудь триггер. Произошло зависание - установили. У ВМ2 прочли код команды успешно - сбросили.

Есть еще один тест - а если произошло зависание при чтении 4-го вектора? На МС1201.01 вроде можно отключать банки памяти, но если только плата запуститься с отключенным нулевым банком.

Patron
09.10.2011, 03:26
Если по адресу 1000 записать JMP R0 и исполнить, то будет двойное зависание и R6 уже будет равен 167770. Т.е. при исполнении команды произойдет прерывание по 4-му вектору, возникает зависание при заносе параметров в стек. Здесь снова прерывание по 4-му вектору, но при очередном занесении в стек - уже двойное зависание.
При этом между зависаниями было вполне успешное чтение 4-го вектора.И аппаратное прерывание, и прерывание по резервному коду, и любое командное прерывание (типа EMT, IOT и т.п.) даст при плохом стеке точно такой же эффект даже на ВМ1. Чтение вектора ни на первом, ни на втором шаге процессор выполнить не успевает.

Но похоже, что действительно у ВМ2 за формирование признака двойного зависания отвечает не контроллер шины (как у ВМ1), а блок прерываний. Ведь контроллер шины не может отличить циклы DATI при чтении ячеек 04 и 06 от таких же циклов чтения при выборке команды.


Есть еще один тест - а если произошло зависание при чтении 4-го вектора? На МС1201.01 вроде можно отключать банки памяти, но если только плата запустится с отключенным нулевым банком.Мне такой тест организовать пока не удалось. Было бы весьма интересно, если бы кто-то такое осуществил.

Alex_K
09.10.2011, 09:29
Но похоже, что действительно у ВМ2 за формирование признака двойного зависания отвечает не контроллер шины (как у ВМ1), а блок прерываний. Ведь контроллер шины не может отличить циклы DATI при чтении ячеек 04 и 06 от таких же циклов чтения при выборке команды.Тут уж сложно сказать, кто за что отвечает. Возможно в ВМ1 при обращении к шине имеется счетчик зависаний, и если два зависания подряд - то тогда двойное зависание. В ВМ2 это не так, при хорошем стеке двойное зависание может быть и при неуспешном чтении команды.
У ВМ2 есть еще особенность - при заносе в стек PC и PS указатель стека всегда уменьшается на 4, независимо от того, удалось занести параметры в стек или нет. Делал даже опыты со сначением R6, равным 160002. Естественно в 160000 занести не удалось, прерывание по зависанию. Но после успешного прерывания по вектору 4 указатель стека был равен 157772. Т.е. данные прерванного процесса по зависанию были успешно занесены в ячейки 157772 и 157774. Ячейка 157776 оставалась нетронутой. Как с этим обстоят дела на ВМ1?

Patron
09.10.2011, 14:05
Как с этим обстоят дела на ВМ1?Так же, при любой причине прерывания.


Interrupts Test #1

BIS #100,@#TTPS
MOV #160004,SP
>>> Trap to 004 <<<
SP/157774

MOV #160004,SP
IOT
>>> Trap to 004 <<<
SP/157774

MOV #160004,SP
MFPT
>>> Trap to 004 <<<
SP/157774

Program completed.


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

Исходник теста прилагается (http://zx.pk.ru/attachment.php?attachmentid=29822).

Если в конфигурации тестируемого компьютера нет порта терминала или его адрес отличается от используемого в тесте - нужно:

1. Изменить в исходнике константу TTPS (при отсутствии порта терминала - на адрес регистра статуса любого устройства, в котором после включения питания устанавливается бит готовности 0200 ):

;
; INTT1.MAC - Interrupts Test #1
;
;===============================================

.MCall .Exit

TTKS =: 0177560
TTKB =: 0177562
TTPS =: 0177564
TTPB =: 0177566




2. При отсутствии порта терминала - скорректировать подпрограмму StrOut ( вывод строки ASCIZ с адресом в R0 без использования прерываний ):

StrOut:
TstB @#TTPS ; Ждать готовности терминала.
BPl .-4.
MovB (R0)+,R1
BEq 1$
BMi 2$
MovB R1, @#TTPB ; Вывести байт.
Br StrOut
1$:
MovB #015,@#TTPB ; Вывести <CR>
TstB @#TTPS
BPl .-4.
MovB #012,@#TTPB ; Вывести <LF>
TstB @#TTPS
BPl .-4.
2$:
Return

Alex_K
09.10.2011, 14:33
Кстати, в начале теста любопытно, что при установке бита разрешения прерываний в регистре статуса любого готового устройства - прерывание происходит строго через одну команду при любом значении тактовой частоты процессора.
Да, да! Замечал такое. Из-за этого можно схватить зависание при приеме АВП. Тестировал, добился. Скриншот прилагается.

Titus
09.10.2011, 15:05
У ВМ2 есть еще особенность - при заносе в стек PC и PS указатель стека всегда уменьшается на 4, независимо от того, удалось занести параметры в стек или нет.
Это говорит о том, что прерывание происходит только в конце последовательности сохранения регистров в стек. Т.е. занесли первое слово, установился флажок зависания, потом занесли второе слово, и только в конце этой последовательности может произойти прерывание.

Alex_K
09.10.2011, 15:11
Это говорит о том, что прерывание происходит только в конце последовательности сохранения регистров в стек. Т.е. занесли первое слово, установился флажок зависания, потом занесли второе слово, и только в конце этой последовательности может произойти прерывание.
Titus, внимательно почитайте мой пост. Там говориться о том, что второе слово не заносится. Т.е. сначала SP=160002, уменьшается на 2, заносится в стек первое слово (в 160000). Здесь происходит зависание. Несмотря на это, SP еще уменьшается на 2, и хотя в 157776 уже можно занести, но второе слово не заносится в стек.

Titus
09.10.2011, 15:35
Titus, внимательно почитайте мой пост. Там говориться о том, что второе слово не заносится. Т.е. сначала SP=160002, уменьшается на 2, заносится в стек первое слово (в 160000). Здесь происходит зависание. Несмотря на это, SP еще уменьшается на 2, и хотя в 157776 уже можно занести, но второе слово не заносится в стек.
А... интересно.

Patron
09.10.2011, 15:37
Это говорит о том, что прерывание происходит только в конце последовательности сохранения регистров в стек. Т.е. занесли первое слово, установился флажок зависания, потом занесли второе слово, и только в конце этой последовательности может произойти прерывание.Чтобы точно определить, заказывает ли блок прерываний второй цикл DATO ( для записи в стек содержимого PC ) сразу после неудачи записи в стек содержимого PSW или просто уменьшает SP ещё на 2 - можно осуществить следующий тест:


Mov #160002,SP
CLR @#157776
MFPT

Если по завершении теста в ячейке 0157776 окажется записан не 0, а PC из первого прерывания - значит при входе в прерывание блок прерываний выполняет два последовательных цикла DATO без реакции на возможное зависание в первом из этих двух циклов.

Причём, если это окажется справедливо не только для ВМ2, но и для ВМ1 - то это будет означать, что два последовательных зависания при входе в прерывание с плохим стеком не формируют признака двойного зависания ( как если бы блок прерываний не заказывал второй цикл DATO и вместо попытки записи PC в стек после неудачи записи PSW - просто уменьшал SP ещё на 2).


Несмотря на это, SP еще уменьшается на 2, и хотя в 157776 уже можно занести, но второе слово не заносится в стек.Т.е. в предлагаемом тесте в ячейке 0157776 так и останется ноль..

Alex_K
09.10.2011, 15:44
Т.е. в предлагаемом тесте в ячейке 0157776 так и останется ноль..
Да, останется. Скриншот прилагается.

Patron
09.10.2011, 16:26
Да, останется.Иначе и быть не могло - ведь тогда контроллер шины ВМ1 не мог бы формировать признак двойного зависания.

Кстати, в моей модели ВМ1 релизация блока прерываний USER-моды выглядит так:

try
{
SP -= 2;
word wSP = SP;
SP -= 2;

CheckAddrWrite(wSP);
WORD( wSP &(~1) ) = PSW;

CheckAddrWrite(SP);
WORD( SP &(~1) ) = PC;
}
catch(int)
{
return TrapTo_4();
}

PC = WORD( wVector );
PSW = BYTE( wVector +2 );

Любопытно, что у 1801ВМ1 чтение нового значения PSW из вектора прерывания происходит с копированием младшего байта и обнулением старшего, что является очевидной ошибкой.

Из-за этого процессор 1801ВМ1 вываливается из HALT-моды каждый раз, когда срабатывает блок прерываний USER-моды. Поэтому в HALT-моде процессора 1801ВМ1 допустимы только два прерывания: HALT (после команды HALT или сигнала IRQ1) и ЗАВИСАНИЕ, тогда как и любое аппаратное прерывание, и T-Trap, и Tpap_To_010 (например, после MFPT), и Trap_To_04 (например, после JSR R0) и любое программное прерывание типа EMT, IOT и т.п. - моментально выносят ВМ1 из HALT-моды.

Alex_K
09.10.2011, 16:59
Иначе и быть не могло - ведь тогда контроллер шины ВМ1 не мог бы формировать признак двойного зависания.
Ну скриншоты с УКНЦ, там ВМ2.

---------- Post added at 16:59 ---------- Previous post was at 16:40 ----------


Любопытно, что у 1801ВМ1 чтение нового значения PSW из вектора прерывания происходит с копированием младшего байта и обнулением старшего, что является очевидной ошибкой.

Из-за этого процессор 1801ВМ1 вываливается из HALT-моды каждый раз, когда срабатывает блок прерываний USER-моды. Поэтому в HALT-моде процессора 1801ВМ1 допустимы только два прерывания: HALT (после команды HALT или сигнала IRQ1) и ЗАВИСАНИЕ, тогда как и любое аппаратное прерывание, и T-Trap, и Tpap_To_010 (например, после MFPT), и Trap_To_04 (например, после JSR R0) и любое программное прерывание типа EMT, IOT и т.п. - моментально выносят ВМ1 из HALT-моды.

Кстати в ВМ2 точно также. Так как процессор имеет полноценное разделение на режимы HALT и USER (в отличии от ВМ1), то каждый режим имеет свое адресное пространство. Соответственно вектора для каждого режима находятся в своем адресном пространстве. В ВМ2 также введены регистры копии счетчика команд (CPC) и состояния процессора (CPSW). Эти регистры-копии повторяют значения PC и PSW, только когда в PSW не установлены одновременно два бита - 7 (запрет прерываний) и 8 (HALT), изменяются CPC и CPSW при изменении PC и младшего байта PSW. При установке этих двух битов CPC и CPSW "замораживаются". Соответственно, если из HALT-режима возникает прерывание USER-режима, то процессор переключается в USER-режим сбросом бита 8 в PSW, т.к. этот бит находится в старшем байте, то CPSW не изменяется. Далее уже в стек ложаться CPSW и CPC (да, у ВМ2 так, в любом режиме), читается вектор USER-режима (здесь в PSW копируется только младший байт, бит 8 уже сброшен), ну и обрабатывается прерывание. Здесь есть одно но! Прерывание USER-режима должно происходить при разрешенных прерываниях (бит 7=0), иначе CPC и CPSW будут "замороженными" и возвратиться назад не удасться. Также из USER-режима возможен возврат в HALT-режим, если адрес возврата равен или больше 160000. При адресе >=160000 в PSW копируются все 9 бит, а иначе только 8, восьмой бит остается неизменным.

Alex_K
09.10.2011, 17:03
Когда-то я делал описание ВМ2, выложу еще раз.

Patron
09.10.2011, 17:06
Ну скриншоты с УКНЦ, там ВМ2.Это понятно. Просто для ВМ1 такой алгоритм - единственно возможный, тогда как для ВМ2 - лишь наиболее рациональный. Поэтому, из положительного результата теста ВМ2 автоматически следует, что и у ВМ1 - всё точно так же.

Alex_K
09.10.2011, 17:11
Это понятно. Просто для ВМ1 такой алгоритм - единственно возможный, тогда как для ВМ2 - лишь наиболее рациональный. Поэтому, из положительного результата теста ВМ2 автоматически следует, что и у ВМ1 - всё точно так же.
Это лучше проверить на реальной машине. Все-таки 1801ВМ1 переделывался из 1801ВЕ1 переписыванием микрокода, а 1801ВМ2 делался уже с нуля. Так что внутри они могут быть построены по разному.

Titus
09.10.2011, 17:16
Когда-то я делал описание ВМ2, выложу еще раз.
Монстр - такое описание составить.

А разве RSEL не имеет одинаковые коды 000020 и 000030? У тебя под 000030 значится неизвестная команда.

Alex_K
09.10.2011, 17:30
Монстр - такое описание составить.

А разве RSEL не имеет одинаковые коды 000020 и 000030? У тебя под 000030 значится неизвестная команда.
Все проверено на практике.
Кстати небольшое уточнение - CPSW изменяется только при изменении младшего байта PSW. Сам PSW состоит как бы из двух частей - младшего байта и отдельного бита 8. Просто это в этом описании не отразилось.

Patron
09.10.2011, 17:41
Кстати в ВМ2 точно также.
Думаю, что не совсем "точно" так же..

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

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

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

Alex_K
09.10.2011, 17:50
Думаю, что не совсем "точно" так же..

У процессора 1801ВМ1 работа и с аппаратными, и с программными прерываниями в HALT-моде полностью исключена.
Как это исключена? Неужто в HALT-режиме невозможно выполнить команду EMT?

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

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

Patron
09.10.2011, 18:22
Как это исключена? Неужто в 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
09.10.2011, 18:51
Процессор 1801ВМ1 в HALT-режиме отрабатывает прерывание зависания не по вектору 04, а по вектору SEL1+02.
В ВМ2 также обработка зависания зависит от того, в каком режиме находится процессор.

Команду 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
09.10.2011, 19:31
Как у ВМ1 в стеке сохраняется PSW - только младший байт или целиком весь?В стеке сохраняются все биты PSW.


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

hobot
10.10.2011, 20:57
Добавилось четыре игры из архива Арсения, описания и картинки из игрушек тут (http://www.old-games.ru/forum/showpost.php?p=801585&postcount=29).

Alex_K
10.10.2011, 21:54
Подправил в эмуляторе:
1. Теперь при отжатии клавиша дает скэн-код того алфавита, при котором была нажата. Должны прекратиться зависания клавиатуры в текстовых играх, которые активно переключают алфавит с помощью управляющих кодов РУС(14) и ЛАТ(15).
2. Реализована поддержка ловушки адреса. Вроде бы работает. Можно опробовать на диске GD.DSK, который выкладывал (http://zx.pk.ru/showpost.php?p=302625&postcount=188) 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
10.10.2011, 22:43
Подправил в эмуляторе:
1. Теперь при отжатии клавиша дает скэн-код того алфавита, при котором была нажата. Должны прекратиться зависания клавиатуры в текстовых играх, которые активно переключают алфавит с помощью управляющих кодов РУС(14) и ЛАТ(15).
2. Реализована поддержка ловушки адреса. Вроде бы работает. Можно опробовать на диске GD.DSK, который выкладывал Vamos. Надеюсь он будет очень рад.
Вот это прогресс!!! =) По поводу кнопок проверю прямо сейчас !!!

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

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

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

Alex_K
10.10.2011, 22:54
Нет, если в Патруле быстрого залипания я не дождался, то в "Косынке" (пасьянс)
пробел залип прямо сразу !!! Там постоянно идёт РУС\ЛАТ - видно по системной надписи !!!
Вы про PASQNS который? Да, заметил. Но причина здесь наверное в другом. Будем разбираться.

hobot
10.10.2011, 22:58
(!!!) Хэлп! У меня диск после загрузки просто вешает эмулятор,
потом отлипает, как-будто настоящий дисковод подвисает, вот скрин
А другово образа gd.dsk у меня нет, есть только другая сборка эмулятора:confused_std:



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

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

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

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

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

Там просто в STARTS.COM стоит команда ASSIGN MZ1 DK. Можно после загрузки дать DEA DK, или лучше грузиться с привода 1.

---------- Post added at 23:07 ---------- Previous post was at 23:05 ----------

Сам я при тестировании этот диск грузил с 1-го привода, потому и не заметил этого

hobot
10.10.2011, 23:35
Там просто в STARTS.COM стоит команда ASSIGN MZ1 DK. Можно после загрузки дать DEA DK, или лучше грузиться с привода 1.
Понял! Панику отменяю, истерику прекращаю:redface:

Alex_K
10.10.2011, 23:37
Понял почему виснет клава в PASQNS. Неправильно сделана работа с битом разрешения/запрета прерывания в регистре клавиатуры 177700. Но надо время, чтобы причесать.

hobot
10.10.2011, 23:42
Понял почему виснет клава в PASQNS
Там на этом сборнике игрушек для эмулятора, как раз осталось места для пары игр =)

Shadow Maker
10.10.2011, 23:55
Господа разработчики, поможите узерам с save state'ом пожалуста

hobot
11.10.2011, 01:13
В "проблемных" играх пока залипания не обнаруживается, погонял в "звёздный патруль", "сталкер" (*тот который с кирилицей), где регулярно залипали кнопочки, пасьянс отложил в сторонку, пока полёт нормальный =)

---- добавлено (* если бы не "комариная плешь" )

проф
11.10.2011, 15:32
hobot,
Я смотрю Патруль-то ПРАВИЛЬНЫЙ (или нет ?) Клингоны, а не семижопы...

hobot
11.10.2011, 19:46
Я смотрю Патруль-то ПРАВИЛЬНЫЙ (или нет ?) Клингоны, а не семижопы...
На дискете (см. пост с последним образом сборника игр) все версии Патруля какие обнаружились, возможно финальную надпись никто не коверкал, но СуперКлингов там есть на всех уровнях - это 100% :rolleyes_std:

И вот видео (смотрится не плохо!) (http://www.youtube.com/watch?v=VxSwe830y34)

Alex_K
14.10.2011, 23:33
Переделана работа с клавиатурой в эмуляторе. Теперь должно правильно обрабатывать работу с битом прерывания в регистре 177700. Так же сделана работа клавиатуры такой, как работает на реальной машине. Формируется матрица нажатых клавиш и она сканируется с периодом 64 мкс. В оригинальной УКНЦ не распознаются одновременные нажатия клавиш, которые стоят на одной линии Y, теперь в эмуляторе так же. Поэтому любители поиграть, хочу обратить ваше внимание, что стрелка вверх и стрелка вниз, стоят на одной линии Y, поэтому если хотите нажать стрелку вниз, то надо перед этим отжать стрелку вверх, и наоборот.

Vamos
15.10.2011, 01:53
Alex_K, спасибо огромное за регистр ловушку. Значит разработчик драйвера GD.SYS меня обманул, сказав что с этим драйвером будет работать любая программа для КГД.
У меня к Вам еще одна просьба, раз уж занимаетесь клавиатурой, можно сделать чтобы двоеточие и звездочка и другие символы были в соответствии с клавиатурой РС, а не как сейчас.

Alex_K
15.10.2011, 09:58
У меня к Вам еще одна просьба, раз уж занимаетесь клавиатурой, можно сделать чтобы двоеточие и звездочка и другие символы были в соответствии с клавиатурой РС, а не как сейчас.
Теоретически это можно, надо ввести 10 таблиц перекодировки. Но всё работать не будет. На советских клавиатурах следующие символы рассматривались как буквы: ([ { ] } \ | ^ ~ _). Т.е. один выдавался на верхнем регистре, другой на нижнем. Если этот набор ([ { ] } \ |) еще соответствует тому, что было на советских клавиатурах, то с этими символами (^ ~ _) уже ничего не получиться. Такая же история может произойти и с другими знаками.
Еще данный патч будет работать только, если используется обработка клавиатуры в системном ПЗУ (преобразование из скэн-кода в КОИ-8). Если какая-то программа перехватывает клавиатуру на магистрали ПП, то здесь увы, под всех не подстроишься. В качестве примера - TurboBASIC от Олега Герасимова. В нем используется свой обработчик, и если там переключаетесь на русский регистр, то раскладка становится не ЙЦУКЕН, а остается ЯВЕРТЫ.
Сейчас раскладка клавиатуры не очень, согласен. Лучше подработать текущую раскладку, а уж запомнить соответствие символов верхнего/нижнего регистров легко, благо есть виртуальная клавиатура.

---------- Post added at 09:58 ---------- Previous post was at 09:56 ----------

В дополнении к вышеописанному знаки @ и ` также рассматривались на советских клавиатурах как буквы.

Arseny
15.10.2011, 10:19
... Но всё работать не будет. ...
http://img-fotki.yandex.ru/get/5501/uknc.0/0_64346_af64489a_L (http://img-fotki.yandex.ru/get/5501/uknc.0/0_64346_af64489a_orig)

Как вариант :)

Titus
15.10.2011, 11:47
Как вариант :)
А увеличение по клику?
Лучше использовать radikal.ru или imageshack_.us

Vamos
15.10.2011, 12:49
Лучше подработать текущую раскладку
Об этом я и хотел попросить, в основном раздражает звездочка и двоеточие при работе в коммандной строке. Знак @ используется в комбинации для входа в пультовый режим ПП, тоже бы не помешал.


Как вариант
Это вроде не для эмулятора. Вариант УКНЦшную клаву через контроллер на эмулятор. Еще вариант виртуальную эмулятора на тачскрин.

Alex_K
15.10.2011, 13:06
Об этом я и хотел попросить, в основном раздражает звездочка и двоеточие при работе в коммандной строке. Знак @ используется в комбинации для входа в пультовый режим ПП, тоже бы не помешал.
Принимаются варианты.

Еще вариант виртуальную эмулятора на тачскрин.
Так вроде тачскрин как мышь работает, только вот клавиши мелковаты, сложно попасть. Надо тачскрин со стилусом ;).

Vamos
15.10.2011, 13:20
Так вроде тачскрин как мышь работает, только вот клавиши мелковаты, сложно попасть.
А если надо нажать комбинацию клавиш?

Arseny
15.10.2011, 13:35
А увеличение по клику?
Да, разумеется.

Лучше использовать radikal.ru или imageshack_.us
Чем лучше?

---------- Post added at 13:35 ---------- Previous post was at 13:33 ----------


Это вроде не для эмулятора.
А какая разница? Это вариант расположения (соответствия) букв УКНЦ на клавиатуре PS/2. Как раз с учетом того, что буквы не совпадают по регистрам и пр.

Alex_K
15.10.2011, 13:37
А если надо нажать комбинацию клавиш?
Мультитач полноценно поддерживается вроде бы начиная только с семерки, в XP такого нет, только в версии Tablet PC.

Titus
15.10.2011, 13:38
Да, разумеется.

Чем лучше?
Не знаю, как у других, но лично у меня, ни на мозиле, ни на эксплорере не увеличивается. Либо переходит в твою галлерею на яндексе, на фотку с какими-то диаграммами. Либо просто открывает эту же фотку в таком же разрешении.

Vamos
15.10.2011, 14:04
А какая разница? Это вариант расположения (соответствия) букв УКНЦ на клавиатуре PS/2.
Этот вариант клавиатуры можно подключить к РС и работать в эмуляторе?
Как вариант расположения (соответствия) букв УКНЦ на клавиатуре PS/2 - согласен.

Patron
15.10.2011, 14:14
Среди фоток я заметил скриншоты осцилографа с пределами временного разрешения, пригодными для анализа сигналов на шине процессора.

А есть ли возможность одновременно снимать осцилограммы с нескольких линий шины?

Alex_K
15.10.2011, 15:03
Этот вариант клавиатуры можно подключить к РС и работать в эмуляторе?
Как вариант расположения (соответствия) букв УКНЦ на клавиатуре PS/2 - согласен.
Вот такой вариант не очень хороший. Желательно, что бы знаки препинания были также как на клавиатуре УКНЦ. Плюс к этому системные клавиши (Alt, F10, флаг) использовать не рекомендуется.

Arseny
15.10.2011, 15:10
Не знаю, как у других, но лично у меня, ни на мозиле, ни на эксплорере не увеличивается. Либо переходит в твою галлерею на яндексе, на фотку с какими-то диаграммами. Либо просто открывает эту же фотку в таком же разрешении.
Так это я затупил :( Поправил.

---------- Post added at 15:05 ---------- Previous post was at 15:03 ----------


Этот вариант клавиатуры можно подключить к РС и работать в эмуляторе?
Как вариант расположения (соответствия) букв УКНЦ на клавиатуре PS/2 - согласен.
Нет, этот вариант клавиатуры можно подключить к УКНЦ и работать на ней. Просто я над расположением букв очень долго голову ломал - может результат кому-то еще пригодится.

---------- Post added at 15:07 ---------- Previous post was at 15:05 ----------


Среди фоток я заметил скриншоты осцилографа с пределами временного разрешения, пригодными для анализа сигналов на шине процессора.

А есть ли возможность одновременно снимать осцилограммы с нескольких линий шины?
Нет. Осцил одноканальный, USB версия. Есть 8 канальный логический анализатор (может быть еще на 16 каналов куплю).

---------- Post added at 15:10 ---------- Previous post was at 15:07 ----------


Вот такой вариант не очень хороший. Желательно, что бы знаки препинания были также как на клавиатуре УКНЦ.
Не понял - это как? На русском языке просто кнопок не хватит.

Плюс к этому системные клавиши (Alt, F10, флаг) использовать не рекомендуется.
Вот тут да - не подумал. На конвертере-то пофигу - там чисто скан коды обрабатываются на железном уровне.

Patron
15.10.2011, 15:29
Нет. Осцил одноканальный, USB версия. Есть 8 канальный логический анализатор (может быть еще на 16 каналов куплю).А какая у логического анализатора граничная частота, можно ли его использовать для анализа циклов шины 1801ВМ2 ?

Arseny
15.10.2011, 16:13
А какая у логического анализатора граничная частота, можно ли его использовать для анализа циклов шины 1801ВМ2 ?
http://6-lab.com/ru/logicupro.html

Patron
15.10.2011, 16:46
http://6-lab.com/ru/logicuplus.html24 МГц x 8 - этого должно быть вполне достаточно для исследования таймингов шины Q-Bus при работе с процессором 1801ВМ2.

Наиболее простое и весьма важное исследование - определение зависимости растактовки цикла DATI ( ВВОД ) от задержки памяти.

Для проведения исследования нужно зациклить команду JMP (R0) - код 0110 - в ОЗУ (занести), ПЗУ (найти) и регистре внешнего устройства (использовать регистр данных, возвращающий при чтении последнее записанное значение).

Поскольку при циклическом выполнении команды JMP (R0) - на шине проходят последовательные циклы DATI с периодичностью, равной времени выполнения команды в тактах процессора, то различия в растактовках этих циклов для разных типов памяти будут полностью определяться разницей в быстродействии памяти, что позволит выделить инвариантные и вариативные части цикла DATI, а также вывести обобщённую формулу зависимости продолжительности цикла DATI процессора 1801ВМ2 от тактовой частоты и задержки памяти.

hobot
15.10.2011, 21:18
этот вариант клавиатуры можно подключить к УКНЦ и работать на ней
Это да! Видел фотки переходника, наверно удобно, хотя (если честно) не понимаю
чем не устраивают родные кнопочки (ну да ладно - это не к теме!), про эмулятор-же:

Не забывайте пожалуйста при обсуждении раскладки о пользователях, которые
"ноутами" пользуются ( как я например ), вот символ @ у себя не нашёл из-за этого
приходится включать клавиатуру и при удвоенной высоте экрана, клавиатура всё равно
полностью не видна, а этот символ на ней внизу (!), приходится ещё и "нормал" режим
включать, что на рабочем разрешении 1280х800 довольно мелко, хотя некоторые программы ( графика ) лучше смотрится именно в таком режиме.

В общем я про то, что символ @ нужен на реальной клавиатуре, где нибудь в удобном месте и универсальном (он используется постоянно и везде!) в том плане, что-бы было всё равно но ноут-буке вы или на стандартной 101 клавиатуре :redface:

Alex_K, огромное спасибо за очередной fix ! И дело не в пасьянсе (в котором подтверждаю "пробел" больше не залипает), а в целом, за последний месяц - такой прогресс !!! :smile:

Вот для примера мой ноут (http://hi-tech-podarok.info/obzor/im_obzor/94789022_5.jpg) - кстати говоря не самый худший вариант
раскладки для рабочей лошадки, особенно когда привыкнешь !!!

Спасибо! :redface:

Vamos
16.10.2011, 12:02
Вот такой вариант не очень хороший. Желательно, что бы знаки препинания были также как на клавиатуре УКНЦ. Плюс к этому системные клавиши (Alt, F10, флаг) использовать не рекомендуется.
Не понял про знаки препинания. На РС клавиатуре (с русским алфавитом) есть все символы которые нужны включая (^ ~ _), задача в том чтобы пользователь работая в эмуляторе нажав на кнопку с нужным символом получил его на экране, а не занимался запоминанием и поиском на какой кнопке находится этот символ.
Переключение раскладок сделать через одну клавишу АЛФ-Alt и тогда будут доступны все символы.
По поводу служебных кнопок, логично было бы ФИКС-CAPSLOCK АЛФ-Alt, задействовать правый Shift, верхний ряд функциональных клавиш в варианте Арсения и остается только вопрос с клавишей ГРАФ.

Alex_K
16.10.2011, 12:16
Не понял про знаки препинания. На РС клавиатуре (с русским алфавитом) есть все символы которые нужны включая (^ ~ _), задача в том чтобы пользователь работая в эмуляторе нажав на кнопку с нужным символом получил его на экране, а не занимался запоминанием и поиском на какой кнопке находится этот символ.
Переключение раскладок сделать через одну клавишу АЛФ-Alt и тогда будут доступны все символы.
По поводу служебных кнопок, логично было бы ФИКС-CAPSLOCK АЛФ-Alt, задействовать правый Shift, верхний ряд функциональных клавиш в варианте Арсения и остается только вопрос с клавишей ГРАФ.

Про знаки препинания. В УКНЦ зафиксировать регистр знаков препинания невозможно. Поэтому этом набор {; 1 2 3 4 5 6 7 8 9 0 - / : , .} вводится только при отжатом НР (он же Shift). Соответственно {+ ! " # $ % & ' ( ) = ? * < >} только при нажатом НР. По советской терминологии следующие символы формально к знакам препинания не относились {@ ` [ { \ | ] } ^ ~ _}, т.к. в русском регистре им соответствовали соответствующие буквы русского алфавита {Ю Ш Э Щ Ч Ъ}. Соответственно правило НР к ним не применимо. На PC-шной раскладке символы @ и ^ нажимаются уже с Shift, а символ ` уже без Shift.

Ну и про Alt, F10 и флажок я уже писал выше - это системные клавиши, и не рекомендуются к употреблению.

Titus
16.10.2011, 12:54
F10 и флажок я уже писал выше - это системные клавиши, и не рекомендуются к употреблению.
F10 - чем системная?

Alex_K
16.10.2011, 13:03
F10 - чем системная?
Выход в меню, как по Alt. Так же при ее нажатии и отжатии генерируются сообщения WM_SYSKEYDOWN и WM_SYSKEYUP. Но в эмуляторе это не обрабатывается. Текущее состояние клавиш берется с помощью функции GetKeyBoardState. Так что формально их можно обрабатывать, но в процедуре обработки сообщений эти сообщения придется резать, чтобы не передавать в DefWindowProc.

Titus
16.10.2011, 13:11
Выход в меню, как по Alt. Так же при ее нажатии и отжатии генерируются сообщения WM_SYSKEYDOWN и WM_SYSKEYUP. Но в эмуляторе это не обрабатывается. Текущее состояние клавиш берется с помощью функции GetKeyBoardState. Так что формально их можно обрабатывать, но в процедуре обработки сообщений эти сообщения придется резать, чтобы не передавать в DefWindowProc.
О, я даже про F10 не знал. Про Alt - да. В принципе, можно Alt и F10 использовать по своему усмотрению, если отключать ихние системные функции. А вот клавишу 'Windows' вроде так использовать нельзя.

Alex_K
16.10.2011, 13:30
О, я даже про F10 не знал. Про Alt - да. В принципе, можно Alt и F10 использовать по своему усмотрению, если отключать ихние системные функции. А вот клавишу 'Windows' вроде так использовать нельзя.

http://msdn.microsoft.com/en-us/library/windows/desktop/ms646286(v=vs.85).aspx

Еще существуют всевозможные HOOK-и - http://msdn.microsoft.com/en-us/library/ms644959(v=VS.85).aspx

Но все это конечно усложняет программирование.

Titus
16.10.2011, 13:32
http://msdn.microsoft.com/en-us/library/windows/desktop/ms646286(v=vs.85).aspx

Еще существуют всевозможные HOOK-и - http://msdn.microsoft.com/en-us/library/ms644959(v=VS.85).aspx

Но все это конечно усложняет программирование.

Первое я читал. А хуки как к клавишам относятся?

Alex_K
16.10.2011, 13:40
Первое я читал. А хуки как к клавишам относятся?
Так ведь можно делать перехват клавиш с помощью WH_KEYBOARD_LL и WH_KEYBOARD. А далее по цепочке можно передать измененные данные или вообще не передавать. Теоретически можно перехватить и "флажок", на практике не пробовал. Только если использовать перехват для всех приложений, то функция перехвата должна быть в DLL. Но это все описано в msdn. Кстати "флажок" генерирует сообщения WM_KEYDOWN и WM_KEYUP, так что скорее всего он перехватывается explorer-ом с помощью HOOK-ов.

Titus
16.10.2011, 13:45
Но это все описано в msdn.
Если б msdn был легко читаем, то да, сиди, да листай)

Alex_K
16.10.2011, 13:48
Если б msdn был легко читаем, то да, сиди, да листай)
Согласен. Я когда-то изучал WinAPI16 в Windows 3.x. Книга была хорошей, все расписано и разжевано. В WinAPI32 примерно осталось так же, так что кое-что припоминается. А с нуля читать msdn сложновато.

Titus
16.10.2011, 13:55
Согласен. Я когда-то изучал WinAPI16 в Windows 3.x. Книга была хорошей, все расписано и разжевано. В WinAPI32 примерно осталось так же, так что кое-что припоминается. А с нуля читать msdn сложновато.
Хорошо бы какую-нить книжку для чайников. Чтобы основные понятия описаны, а за подробностями в MSDN. А то иногда приходится что-то программировать под винду, и на изучение особенностей уходит много времени, по скольку в этой среде я не варюсь, а затрагиваю лишь иногда.

Vamos
16.10.2011, 13:56
Хорошо, F10 можно пропустить т.е. F7 F8 F9 F11 F12, "флажок" не трогаем (клавиша ГРАФ), остается только Alt.
Извините я чего-то туплю, со знаками препинания в чем проблема? Они вроде и так работают только не все на своих местах.

Alex_K
16.10.2011, 14:07
Извините я чего-то туплю, со знаками препинания в чем проблема? Они вроде и так работают только не все на своих местах.
Как я писал выше, набор {; 1 2 3 4 5 6 7 8 9 0 - / : , .} обязательно должен быть в верхнем регистре, а набор {+ ! " #$ % & ' ( ) = ? * < >} в нижнем. Также в верхнем регистре должны быть {@ ^ _}, а в нижнем {` ~}. С набором {[ { ] } \ |} всё в порядке, на клавиатуре PC они соответствуют клавиатуре УКНЦ.
Это требование исходит из особенностей работы драйвера клавиатуры в системном ПЗУ УКНЦ. Так как раскладка переключается в зависимости от содержания ячеек 7214 (регистр, их пять: основной, НР, ГРАФ, УПР, ФИКС) и 22556 (РУС или ЛАТ) в ОЗУ ПП.

hobot
16.10.2011, 20:13
Alex_K, запустите для анализа ситуации (вам эта картина нового вряд-ли что сообщит, но наглядности прибавит!), вот этот стандартный тест (89-года) из комплекта ПО (http://zx.pk.ru/showpost.php?p=425249&postcount=66) УК-НЦшного. Там на 1-м экране пару ошибок, а второй экран (как я понял) целиком посвящён клавиатуре, так вот, даже при использовании экранной клавиатуры - картина странно выглядит, Но кнопка - "СТОП" работает.
Раскладка - сейчас мне лично очень нравиться - (!)не запоминать, а вспоминать приходится родную раскладку(!), только вот символ @ - прячется где-то не под рукой.:redface:

Vamos
16.10.2011, 20:57
Предлагаю вот такое сочетание клавиш


{ } |
[ ] \

! # $ % & * ( ) ? < > " ' = + ` ~
1 3 4 5 7 8 9 0 / , . : ; - _ @ 2 6

или последние три клавиши в таком сочетании

" '
2 6 и ~ ^ на F6

Alex_K
16.10.2011, 22:23
По поводу теста TUK:
1. Параллельный порт, сетевой адаптер и КНМЛ требуют заглушек, поэтому в эмуляторе и ошибки. Хотя текущая реализация КНМЛ и программируемого таймера не очень, сетевой адаптер вообще не реализован.
2. Ошибки обмена по ловушке. Тут в тесте прерывания не используются, используется формирование сигнала на линии ПОРТ. Используется какой-то регистр 177514, которого в стандартной УКНЦ нет. Может он есть в 1515ХМ2-003, не знаю.
Вот текст теста. Тест писался на Си, соответственно код такой, что чёрт ногу сломит:


MOV #176644,-10(R5)
MOV #176646,-12(R5)
MOV #177514,-14(R5)
MOV #160,-16(R5)
MOV #400,@-10(R5)
MOV -14(R5),@-12(R5)
MOV @-14(R5),-20(R5)

В эмуляторе реализовано только прерывание, линии ПОРТ и РЕЖ1 предназначены для тестовых целей в составе стенда. Поэтому в эмуляторе возникает прерывание 4 при обращении к регистру 177514.
Неплохо бы попробовать этот тест на реальной УКНЦ. Мне лень, надо дисководы подключать, записывать образ дискеты, если что, то попозже.
А так большая просьба к владельцам реальных УКНЦ - запустить этот тест. А к владельцам УКНЦ с 1515ХМ2-003 - посмотреть, не присутствуют ли какие-либо другие регистры на шине ЦП, например 177514.
3. По поводу клавиатуры. Разработчики молодцы !!! Учли, что регистр 177702 крутится как счетчик, останавливается он только при нажатии/отжатии клавиши. После прочтения кода продолжает дальше крутиться. Фрагмент кода в ОЗУ ЦП:


12470: MOV @-14(R5),-10(R5)
BEQ 12470
DEC @-14(R5)

А теперь код из ОЗУ ПП:


40004: TSTB @#177700
BPL 40004
TSTB @#177702
BMI 40004
MOV #0,@#177010
MOV @#177702,@#177014
RETURN

Подпрограмма в ПП ждет нажатия клавиши. Первое чтение регистра 177702 производится командой TSTB @#177702, соответственно счетчик продолжает дальше крутиться. Пока выполняются другие команды он успевает увеличится на единицу. Этот момент учитывается в программе, которая крутится в памяти ЦП, делается команда DEC @-14(R5).
На реальной машине программа в ОЗУ ПП выполняется медленно, а в эмуляторе ее быстродействие такое же, как в ЦП, поэтому в 177702 счетчик еще не успевает инкрементироваться и читает старый код клавиши.

Shadow Maker
16.10.2011, 22:32
А мой запрос специально игнорят?

Arseny
16.10.2011, 22:34
Vamos, чем твой вариант отличается от моего? Ты еще забыл русскую раскладку (где все менее тривиально). И еще - нажми в английской раскладке на вирт клаве УКНЦ НР+Ъ - где этот символ? И где символ НАДЧЕРКИВАНИЕ (руская Ч)?
Вот тебе раскладка УКНЦ по кнопкам - развлекайся:
http://img-fotki.yandex.ru/get/5815/14319580.2/0_7c362_30786c0d_L (http://img-fotki.yandex.ru/get/5815/14319580.2/0_7c362_30786c0d_orig)

Alex_K
16.10.2011, 22:37
А мой запрос специально игнорят?
Пока да, эмулятор еще не дошел до такой стадии, когда можно сохранять состояние, еще очень много чего не учтено.

А встречный вопрос - для чего сохранять состояние? Как я наверное догадываюсь - это какая-то игра?

Titus
16.10.2011, 22:52
Может он есть в 1515ХМ2-003, не знаю.

Чем отличаются машины с 003? Какой-то особый завод?

Vamos
16.10.2011, 22:59
Arseny, я предложил вариант наиболее близкий к РС, сейчас в эмуляторе алфавит в раскладке ЙЦУКЕ а знаки как на УКНЦ. Можно сделать всю раскладку как на УКНЦ и я куплю юсб клаву и обклею клавиши.

Arseny
16.10.2011, 23:11
Arseny, я предложил вариант наиболее близкий к РС, сейчас в эмуляторе алфавит в раскладке ЙЦУКЕ а знаки как на УКНЦ.Ты просто предложил вариант предложеный мной, вот я и спросил - в чем разница? Может я что-то упустил...

---------- Post added at 23:11 ---------- Previous post was at 23:09 ----------


Чем отличаются машины с 003? Какой-то особый завод?
ХМ2-003 - обновленная версия ХМ1-039. А УКНЦ ничем не отличались.

hobot
16.10.2011, 23:16
и я куплю юсб клаву и обклею клавиши.
Эгоист !!!:smile:

Vamos
16.10.2011, 23:31
Ты просто предложил вариант предложеный мной, вот я и спросил - в чем разница? Может я что-то упустил...
Извини если я нарушил твои авторские права. А разница хоть и не большая но есть.
Вопрос в другом, будет ли это реализовано в эмуляторе.

Alex_K
17.10.2011, 00:32
Изумительно прям таки!!! Сейчас опробовал в пультовом отладчике на реальной УКНЦ тест проверки ловушки адреса. И оказалось, что при работе в режиме сопровождения по линии ПОРТ (бит8=1, бит0=0 в регистре 176644), кроме сигнала ПОРТ выдается сигнал RPLY. Т.е. занесли в 176646 значение 177514, и после этого регистр 177514 появляется в адресном пространстве. Хотя не факт, может это в адаптере локальной сети ПОРТ замыкается на RPLY, надо схему смотреть, а адаптер снимать неохота.
Так что в тесте ничего не трапается по 4-му вектору. Однако.
hobot, еще раз ОГРОМНОЕ СПАСИБО за этот тест. Оказывается не всё в документации описывают.

hobot
17.10.2011, 00:43
Оказывается не всё в документации описывают.
form, в целом об отечественных доках не самого высокого мнения (например).
Тест взял с дискеты системной из стандартного ПО (http://zx.pk.ru/showpost.php?p=425249&postcount=66) которое прилагалось к компьютеру, возможно там ещё что-нибудь в этом роде есть, я их ещё внимательно не смотрел, вчера только удалось считать в образы. Данный тест помню ещё со школы, он то же был на дисках и его гоняли наши люди-паяльники, поскольку школьные машинки подвергались лютым экспериментам :redface:


Т.е. занесли в 176646 значение 177514, и после этого регистр 177514 появляется в адресном пространстве.
Разблокирование?:confused_std:(не совсем грамотный термин - суть описанного процесса похожа) А зачем разработчикам железа и вообще кому бы то ни было такие усложнения, фича, наворот?
Я не программист и не системщик, но страдаю от всего этого не меньше, как пользователь:confused_std:

Alex_K
17.10.2011, 00:59
form, в целом об отечественных доках не самого высокого мнения (например).
По данному вопросу я с form-ом согласен на 1000%. Сам всегда читал документацию и перепроверял на практике. Стандартное техническое описание к УКНЦ тоже страдает этой болезнью. Веселее, когда в одной главе описывают, что должно быть так, а в следующей про это уже по другому. А уж недосказанность во многих вопросах - это стандарт, прочтешь, а потом ещё и додумывать придется.

Разблокирование?:confused_std:(не совсем грамотный термин - суть описанного процесса похожа) А зачем разработчикам железа и вообще кому бы то ни было такие усложнения, фича, наворот?
Я не программист и не системщик, но страдаю от всего этого не меньше, как пользователь:confused_std:
Усложнения тут никакого нет. Сформировали сигнал ПОРТ, а заодно подали и на RPLY.

hobot
17.10.2011, 01:15
Сформировали сигнал ПОРТ, а заодно подали и на RPLY.
Установка\ задействование нужного(дополнительного) порта в процессе работы - гениально !!!
На системной дискете ещё вот такую мощную вещь обнаружил - редактирование
и установка палитры (cols.sav).

В прилагаемом мануале буду уточнять, есть ли вообще информация про утилиты в комплекте(???),
там ещё какая-то программа от МИЭТовских разраб, но что она делает, с ходу не понятно.

Arseny
17.10.2011, 22:39
Извини если я нарушил твои авторские права. А разница хоть и не большая но есть.Да не в авторских правах проблема, а в разнице вариантов. Даже так скажу - разница в лучшую сторону нужна. Я не считаю свой вариант идеальным, но он аккуратно сведен по раскладке УКНЦ и РС (извел кучу бумаги на распечатки и маркеров на отметки что куда переносится).

Вопрос в другом, будет ли это реализовано в эмуляторе.
Это частично и от нас зависит - если будет найден приемлемый, удобный и не слишком заморочный вариант, за который будут голосовать почти все пользователи эмулятора, то разработчики примут его к сведению и реализуют его в одной из будущих версий. Может быть ... :biggrin:
Зато если будет 10 вариантов, отличающихся на 1-2 буквы, которые каждый придумавший будет отстаивать с пеной у рта - разработчики просто оставят все как есть, т.к. им есть чем еще заняться.

Vamos
18.10.2011, 00:37
Зато если будет 10 вариантов, отличающихся на 1-2 буквы, которые каждый придумавший будет отстаивать с пеной у рта - разработчики просто оставят все как есть
Может подсонательно после фотки твоей клавы, может нет, Alex_K показал в чем сложность и после этого возникла эта комбинация. Я не собираюсь биться из-за каждой клавиши, мне не удобно на РС пользоваться текущим расположением * и : Если со * все просто то с : чуть хуже. Изменения твоего варианта раскладки в нескольких клавишах сделаны с учетом замечаний Alex_K.
И твоя клавиатура все таки для УКНЦ.

---------- Post added at 00:37 ---------- Previous post was at 00:13 ----------

Alex_K, вопрос, а сложно сделать вариант некоего терминального режима для клавиатуры. Сейчас, как я понимаю, эмулятор перехватывает и обрабатывает скэн коды, сделать так чтобы эмулятор получал уже код символа. Тогда и копья ломать не будем по поводу раскладки.

Alex_K
18.10.2011, 09:35
Alex_K, вопрос, а сложно сделать вариант некоего терминального режима для клавиатуры. Сейчас, как я понимаю, эмулятор перехватывает и обрабатывает скэн коды, сделать так чтобы эмулятор получал уже код символа. Тогда и копья ломать не будем по поводу раскладки.
Эмулятор эмулирует аппаратуру, а уже скэн-коды обрабатывает программа с ПЗУ. Эта программа обработки и формирует коды КОИ-8 для терминального режима. Так что вряд ли это возможно, всё-таки эмулятор это эмулятор, а не симулятор. Тут придется воткнуть в эмулятор всю логику драйвера клавиатуры. А если какой-то резидент перехватывает адреса подпрограмм обработки клавиатуры и канала 0, адрес точки входа в драйвер в диспетчере процессов?
Так что лучше иметь раскладку для передачи скэн-кодов. Таблиц надо всего семь (не десять, как я писал когда-то): основной регистр ЛАТ, основной регистр РУС, нижний регистр ЛАТ, нижний регистр РУС, ГРАФ-регистр (по раскладке лучше как РУС), УПР-регистр и ФИКС-регистр.
Можно сделать диалог настройки, тогда каждый будет настраивать по своему усмотрению, но в интерфейсе я не силен, тут надо просить Никиту. В этом случае можно будет отключать таблицы перекодировки, включать автоопределение по значениям в ячейках ОЗУ или на время ставить свою принудительно.

P.S. Есть еще проблема с клавишей Numpad Enter. Клавиатура опрашивается с помощью функции GetKeyboardState, там можно отличить левые и правые Shift-ы, Ctrl-и, Alt-ы, а вот отличить главный Enter от Numpad Enter нельзя. Придется наверное ставить хук, чтобы асинхронно перехватывать события по нажатиям и формировать отдельно флаги для Enter-ов.

Shadow Maker
18.10.2011, 09:35
Пока да, эмулятор еще не дошел до такой стадии, когда можно сохранять состояние, еще очень много чего не учтено.

А встречный вопрос - для чего сохранять состояние? Как я наверное догадываюсь - это какая-то игра?
Ну вообще потому что в любой длинной игре реально надоедает играть (ну там сидеть надо часа 4, куда столько), а концовку посмотреть хочется. И скажем в любом эмуляторе сохранения состояния всегда есть, даже если много чего не учтено.

Titus
18.10.2011, 12:45
P.S. Есть еще проблема с клавишей Numpad Enter. Клавиатура опрашивается с помощью функции GetKeyboardState, там можно отличить левые и правые Shift-ы, Ctrl-и, Alt-ы, а вот отличить главный Enter от Numpad Enter нельзя. Придется наверное ставить хук, чтобы асинхронно перехватывать события по нажатиям и формировать отдельно флаги для Enter-ов.
Я опрашиваю в своих эмуляторах клавиатуру через DirectInput, функция GetDeviceState(), и там прекрасно различаются оба Enter-а. Главный имеет код DIK_RETURN, а который на дополнительном нумпаде - DIK_NUMPADENTER.

Alex_K
18.10.2011, 12:56
Я опрашиваю в своих эмуляторах клавиатуру через DirectInput, функция GetDeviceState(), и там прекрасно различаются оба Enter-а. Главный имеет код DIK_RETURN, а который на дополнительном нумпаде - DIK_NUMPADENTER.
Так ведь это же надо DirectX использовать. Лучше пока без этих наворотов.

---------- Post added at 12:56 ---------- Previous post was at 12:54 ----------


Я опрашиваю в своих эмуляторах ...
Надеюсь свой эмулятор УКНЦ тоже пишите?

Titus
18.10.2011, 12:57
Так ведь это же надо DirectX использовать. Лучше пока без этих наворотов.
Ну, если у вас позицируется, как крсоссплатформенная, то может быть.
А так, если для PC, то там директикс по умолчанию. Кстати, как без директикса синхронизироваться с лучом, использовать что-то типа BitBlt, а так же иметь доступ к звуковому буферу с точностью до позиции текущего проигрываемого отсчета?

---------- Post added at 12:57 ---------- Previous post was at 12:56 ----------


Надеюсь свой эмулятор УКНЦ тоже пишите?
Да, ну легкотня) Вот спектрум - это сложнее)))

Patron
18.10.2011, 13:14
Я в своём эмуляторе терминала разбираю скан-коды клавиш:


case WM_SYSKEYDOWN:
{
word uScan = HIWORD(lParam);
uScan &= 0x1FF;



case WM_KEYDOWN:
{
word uScan = HIWORD(lParam);
uScan &= 0x1FF;


У главной клавиши <Enter> код 28, у <NumPadEnter> код 284.

Хук нужен только для передачи окну скан-кодов клавиш VK_LWIN, VK_RWIN, VK_APPS, VK_SNAPSHOT и VK_NUMLOCK и отмены (при необходимости) передачи этих кодов в драйвер клавиатуры Windows. Скан-коды всех остальных клавиш передаются через сообщения WM_KEYDOWN и WM_SYSKEYDOWN совершенно стандартно.

Alex_K
18.10.2011, 13:37
Я в своём эмуляторе терминала разбираю скан-коды клавиш:
case WM_SYSKEYDOWN:
case WM_KEYDOWN:
У главной клавиши <Enter> код 28, у <NumPadEnter> код 284.


Patron, в ранних версиях было также. Там в коде остались даже закомментированные места с использованием WM_KEYDOWN и WM_KEYUP. Но с УКНЦ тут есть некоторые моменты. Клавиатура передает как коды отжатия, так и нажатия, тем более скэн-коды, преобразование в КОИ-8 уже производится в драйвере клавиатуры в системном ПЗУ. Соответственно, если эмулятор получил по WM_KEYDOWN код клавиши, потом пропал фокус ввода, а клавишу отжали, то уже события WM_KEYUP не придет. Сама клавиша западёт в автоповтор в драйвере системного ПЗУ. А при использовании GetKeyboardState при получении фокуса клавиша не будет нажата и клавиатура в эмуляторе уже получит код отжатия.
Так же в УКНЦ клавиатура работает в режиме опроса, по 64 мкс на каждую клавишу, всего 128 клавиш. Получил таблицу, установил виртуальную матрицу в УКНЦ, и особо думать не надо.
Если же эмулировать 15ИЭ-00-013, то да, здесь я согласен - использовать WM_KEYDOWN значительно удобнее. Т.к. 15ИЭ-00-013 всё-таки терминал, то и проблема удобной раскладки решается легко.

Titus
18.10.2011, 14:02
А при использовании GetKeyboardState при получении фокуса клавиша не будет нажата и клавиатура в эмуляторе уже получит код отжатия.

В чем проблема? Если окно потеряло фокус, всем клавишам дается команда 'отжать'.

Alex_K
18.10.2011, 14:03
В чем проблема? Если окно потеряло фокус, всем клавишам дается команда 'отжать'.
А если осталась нажатая?

Titus
18.10.2011, 14:06
А если осталась нажатая?
Как вы себе представляете потерю фокуса с нажатой клавишей?
Держу клавишу, и нажимаю мышкой на другое окно? В любом случае, плохого ничего не будет, если клавиша отожмется, хотя она осталась нажатой на самом деле.

Patron
18.10.2011, 14:21
А если осталась нажатая?Если при потере фокуса эмулятор эмулирует отжатие всех клавиш - это совершенно логично и абсолютно безопасно ( побочных эффектов быть не может ).

Alex_K
18.10.2011, 15:44
Как вы себе представляете потерю фокуса с нажатой клавишей?
Держу клавишу, и нажимаю мышкой на другое окно? В любом случае, плохого ничего не будет, если клавиша отожмется, хотя она осталась нажатой на самом деле.
Всякое может быть, какое-нибудь pop-up окно выскочет.

Если при потере фокуса эмулятор эмулирует отжатие всех клавиш - это совершенно логично и абсолютно безопасно ( побочных эффектов быть не может ).
Спасибо всем за советы! Но пока пусть останется, как есть. Эмулировать отжатие клавиш сейчас довольно просто - надо только очистить матрицу клавиш, соответственно вслед за этим придут все кода отжатия, которые нужны.

Titus
18.10.2011, 16:23
Всякое может быть, какое-нибудь pop-up окно выскочет.

Спасибо всем за советы! Но пока пусть останется, как есть. Эмулировать отжатие клавиш сейчас довольно просто - надо только очистить матрицу клавиш, соответственно вслед за этим придут все кода отжатия, которые нужны.
Вообще странно, всегда делают, что программа реагирует на клавиши только если окно в фокусе. И само собой очевидно, что надо их всех отпускать при потери оного.

Patron
18.10.2011, 16:46
пока пусть останется, как есть.Если нужно отличать нажатие <Enter> и <NumPadEnter> - это можно сделать, анализируя скан-коды.

В Windows невозможно различить нажатие <Enter> и <NumPadEnter>, используя только GetKeyboardState().

Если анализировать входящие скан-коды и вести собственную таблицу, аналогичную таблице GetKeyboardState(), но только для единственной клавиши <NumPadEnter> - то потеря фокуса ввода (и обнуление флага нажатия <NumPadEnter>) не представляет большой проблемы, поскольку <NumPadEnter> генерит автоповтор, а значит при возврате фокуса с нажатой клавишей <NumPadEnter> - программа немедленно о этом узнает и установит соответствующий флаг в таблице нажатых клавиш ( напомню, что в обсуждаемом случае таблица нажатых клавиш состоит из единственной ячейки, учитывающей состояние клавиши <NumPadEnter> ).

Alex_K
18.10.2011, 21:27
Сделал различие <Enter> и <NumpadEnter> через WM_KEYDOWN и WM_KEYUP. С хуками довольно много мороки, они должны быть в DLL. Вроде работает. Но Windows довольно странно это обрабатывает. Нажмем <Enter> и не отжимая ее жмем <NumpadEnter>. Держим обе клавиши. Эмулятор соответственно получает последовательно коды 0153 и 0166. Отжимаем <Enter>, получаем код 0213. Снова нажимаем <Enter>, соответственно получаем код 0153. А вот дальше самое интересное: отжимаем <Enter>, <NumpadEnter> у нас так и нажат, получаем последовательно коды 0213 и 0206, словно отжали обе клавиши, хотя <NumpadEnter> до сих пор нажат. Функция GetKeyboardState в позиции <Enter>-а говорит, что ни один <Enter> не нажат, хотя <NumpadEnter> так и остается в нажатом состоянии.

Коды клавиатуры можно посмотреть в программе SCAN.SAV на диске sysimage.dsk.

P.S. Интересно всё-таки, а чем руководствовалась Microsoft, когда через GetKeyboardState сделала различие Shift-ов, Ctrl-ей и Alt-ов, а вот Enter-ов не удосужилась.

БОЛЬШОЕ СПАСИБО всем за консультации и помощь !!!

hobot
18.10.2011, 21:55
Сама клавиша западёт в автоповтор в драйвере системного ПЗУ
Нет - только не это, снова :eek_std:

Спасибо всем за советы! Но пока пусть останется, как есть.
Да, по крайней мере так можно спокойно и в системе работать и в игрушки играть!:redface:

Patron
18.10.2011, 22:16
С хуками довольно много мороки, они должны быть в DLL.Относительно хуков есть два замечания:

1. Чаще всего хуки вообще не нужны - достаточно обрабатывать *KEYDOWN и *KEYUP.

2. Хуки не должны быть в DLL.

Только что специально проверил - хук, установленный обычной программой, перехватывает все нажатия клавиш в Windows Vista пока программа запущена, вне зависимости от текущего активного приложения и положения фокуса ввода.

Строчка установки хука в программе выглядит так:


HHOOK g_hHookKbdLL = NULL; // hook handle

if( !g_hHookKbdLL )
{
g_hHookKbdLL = SetWindowsHookEx(
WH_KEYBOARD_LL,
MyTaskKeyHookLL,
ghInstance,
0
);
}

Alex_K
19.10.2011, 01:35
Размапил все клавиши, собственно они все есть. Пока только две таблицы - РУС и ЛАТ. Задействовал основное поле, теперь оба Shift-а одинаковые, АЛФ - это контекстное меню, LeftCtrl -УПР, RightCtrl - ГРАФ, CapsLock - ФИКС. С буквами и цифрами вроде и так ясно. Теперь другие клавиши, если есть различие в таблицах, то сперва ЛАТ, затем РУС:


<`~> - <;+>
<-_> - <-=>
<=+> - <^~> <,<>
<\|> - <\|> <.>>
<;:> - <:*> <Жж>
<'"> - <@`> <Ээ>
<,<> - <,<> <Бб>
<.>> - <.>> <Юю>
</?> - </?>
<Home> - <_> <:*>
<Insert> - СБРОС
<PageUp> - СТОП
<Delete> - ПОМ
<End> - УСТ
<PageDown> - ИСП

Vamos
19.10.2011, 03:25
АЛФ - это контекстное меню
У меня при нажатии на эту клавишу даже щелчка нет.

Вообще интересный вариант. Только для ноутбуков без расширенной клавиатуры клавиши СБРОС, СТОП, ПОМ, УСТ и ИСП - ?
А вот эти символы & ( ) надо было как на РС сделать.

Alex_K
19.10.2011, 10:10
У меня при нажатии на эту клавишу даже щелчка нет.
Странно. У меня как на десктопе (XP), так и на нетбуке (семёрка), работает.

Вообще интересный вариант. Только для ноутбуков без расширенной клавиатуры клавиши СБРОС, СТОП, ПОМ, УСТ и ИСП - ?
А вот эти символы & ( ) надо было как на РС сделать.
У меня на нетбуке они (Home, End, ...) есть. Неудобно конечно, но есть идея запараллелить на F6-F12 (без F10). А по поводу & ( ) - написал же, что реализовано только две раскладки -РУС и ЛАТ, нет пока раскладок нижнего регистра. Кстати, а что же в таком случае подставлять на Shift+6? Символы ":" и "^" нельзя - они вводятся на верхнем регистре.

Titus
19.10.2011, 12:05
АЛФ - это контекстное меню
Может Alt?

Vamos
19.10.2011, 12:40
Странно. У меня как на десктопе (XP), так и на нетбуке (семёрка), работает.
У меня не работает даже на виртуальной эмулятора, кликаю кнопкой мыши и тишина.


Неудобно конечно, но есть идея запараллелить на F6-F12 (без F10)
Может вот так:
ПОМ - F7
УСТ - F8
ИСП - F9
СБРОС - F11
СТОП -F12
К1...К5 - F1...F5


А по поводу & ( ) - написал же, что реализовано только две раскладки -РУС и ЛАТ, нет пока раскладок нижнего регистра.
Алфавит в нижнем регистре работает, символы !#$% тоже на месте, нужно только сдвинуть на одну клавишу в право символы &*().
И сделать еще только одну инверсную таблицу для символов у которых регистр отличается от РС, вот сейчас ":" работает наоборот.


Кстати, а что же в таком случае подставлять на Shift+6? Символы ":" и "^" нельзя - они вводятся на верхнем регистре.
Можно ничего не подставлять или символ надчеркивания который в РС отсутствует он как раз в нижнем регистре.


Может Alt?
С этим все согласны кроме Alex_K.

Titus
19.10.2011, 12:44
С этим все согласны кроме Alex_K.
Я имел ввиду, может вы ошиблись? Не Алф, a Alt имелось ввиду выше? Ведь на PC-клавиатуре такой клавиши нет.

Vamos
19.10.2011, 12:51
Ведь на PC-клавиатуре такой клавиши нет.
Есть, я тоже сначала не понял, потом нашел, но не работает у меня на ноуте в эмуляторе, в винде работает. Клавиша при нажатии которой выпадает контекстное меню активного окна.

Titus
19.10.2011, 13:23
Есть, я тоже сначала не понял, потом нашел, но не работает у меня на ноуте в эмуляторе, в винде работает. Клавиша при нажатии которой выпадает контекстное меню активного окна.
Что-то вы меня запутали. Можно фотку клавиатуры с такой клавишей?

Alex_K
19.10.2011, 15:08
Что-то вы меня запутали. Можно фотку клавиатуры с такой клавишей?
Так сойдет?

Titus
19.10.2011, 15:37
Я вас понял) Надо было написать 'Контекстное меню - это АЛФ', а не наоборот)

Alex_K
19.10.2011, 15:54
... но не работает у меня на ноуте в эмуляторе, в винде работает.
А в каком эмуляторе - Wine или VMWare ?

---------- Post added at 15:54 ---------- Previous post was at 15:53 ----------


Я вас понял) Надо было написать 'Контекстное меню - это АЛФ', а не наоборот)
Ну ночь уже на дворе была... Спросонья мог и напутать.

hobot
19.10.2011, 18:32
Только для ноутбуков без расширенной клавиатуры клавиши СБРОС, СТОП, ПОМ, УСТ и ИСП - ?
ДКЛ - всё равно есть, её не может не быть.
Текущий вариант надо пробовать, ещё времени не было, спасибо.
:redface:

Alex_K
19.10.2011, 19:50
Запараллелил клавиши ПОМ, УСТ, ИСП, СБРОС, СТОП. Теперь так:


ПОМ - F6 или Delete
УСТ - F7 или End
ИСП - F8 или PageDown
СБРОС - F9 или Insert
СТОП - F11 или PageUp
<_>(ЛАТ) <:*>(РУС) - F12 или Home

Осталось как-то прикрутить ДКЛ к мини-клавиатурам.

Убрал в эмуляции флопа проверку на выключение мотора, теперь дискеты все время вращаются, но подвисания пока нет. Код там надо перетряхнуть, бывают моменты, что запись не проходит.

JEK нормально загрузил картинку. Вот только в какой палитре она должна быть?
Еще кстати у картинки верх какой-то попорченный. На реальной машине так же?

Vamos
20.10.2011, 00:48
Вот только в какой палитре она должна быть?
Еще кстати у картинки верх какой-то попорченный. На реальной машине так же?
На реальной машине вот так

Vamos
20.10.2011, 01:41
А в каком эмуляторе - Wine или VMWare ?
В WinXP, ноут Dell.

---------- Post added at 01:12 ---------- Previous post was at 00:52 ----------


JEK нормально загрузил картинку.
По прежнему застревает на второй заливке, желтый фон.:confused:

---------- Post added at 01:41 ---------- Previous post was at 01:12 ----------

Понял почему клавиша АЛФ не работала, в соседней ветке http://zx.pk.ru/showpost.php?p=426276&postcount=83
загрузился с другой дискеты и все.
В ручном тесте раскладок выявилось: в режиме РУС при нажатии "Ъ" срабатывает "забой", "ъ" только в нижнем регистре.

Alex_K
20.10.2011, 09:56
По прежнему застревает на второй заливке, желтый фон.:confused:Здесь уже при чтении с дисковода не подвисает. Уже где-то некорректно передает информацию. Задачка однако. Посидеть здесь придется долго, чтобы проанализировать и понять.

Понял почему клавиша АЛФ не работала, в соседней ветке http://zx.pk.ru/showpost.php?p=426276&postcount=83
загрузился с другой дискеты и все.
В ручном тесте раскладок выявилось: в режиме РУС при нажатии "Ъ" срабатывает "забой", "ъ" только в нижнем регистре.
Так и должно быть. Система RT-11 обычно обрезает старший бит. Код символа "Ъ" равен 255, после обрезки - 127, а это код клавиши "Забой".

Titus
20.10.2011, 11:51
Это у вас на картинке эмулятор КЦГД? Или же это просто картинка с ДВК?

Alex_K
20.10.2011, 11:57
Это у вас на картинке эмулятор КЦГД? Или же это просто картинка с ДВК?
Естественно картинка. А вот откуда она, может сказать Vamos. Это на диске JEK.dsk.

Titus
20.10.2011, 12:12
Естественно картинка. А вот откуда она, может сказать Vamos. Это на диске JEK.dsk.
Жаль, что под КЦГД игрушек не было. Во всяком чего-то не всплывают.

Vamos
20.10.2011, 12:43
Естественно картинка. А вот откуда она, может сказать Vamos. Это на диске JEK.dsk.
Еще эта картинка есть на обложке журнала МПСиС №3 за 1988, реклама возможностей КЦГД и статья.
Диск этот от разработчиков пакета KUARKO.


Жаль, что под КЦГД игрушек не было. Во всяком чего-то не всплывают.
Наверное они у меня есть. Это уже где-то обсуждалось, игрушки писались под КЦГД, как и редактор JEK, а потом под УКНЦ.
Жаль что нет эмулятора ДВК-3(4) с КЦГД и КГД, очень много софта на эти машины.

Alex_K
20.10.2011, 12:46
Жаль, что под КЦГД игрушек не было. Во всяком чего-то не всплывают.
Есть. Надо осмотреть архивы, там точно был LAND под КЦГД.
С цветными играми сложнее. Обычно везде были машины с черно-белым монитором.

Titus
20.10.2011, 13:29
Наверное они у меня есть. Это уже где-то обсуждалось, игрушки писались под КЦГД, как и редактор JEK, а потом под УКНЦ.
Ну так выкладывайте же скорей!

---------- Post added at 13:29 ---------- Previous post was at 13:28 ----------


Есть. Надо осмотреть архивы, там точно был LAND под КЦГД.
С цветными играми сложнее. Обычно везде были машины с черно-белым монитором.
Посмотрите, интересно очень.

Vamos
20.10.2011, 13:42
Titus, А на чем их смотреть(проверить)? может они не под КЦГД?
Вот будет эмулятор ДВК с КЦГД и КГД+КСМ тогда и выкладывать можно.

Titus
20.10.2011, 13:46
Titus, А на чем их смотреть(проверить)? может они не под КЦГД?
Вот будет эмулятор ДВК с КЦГД и КГД+КСМ тогда и выкладывать можно.
Выкладывать можно, и нужно.
В них можно покопаться.

Patron
20.10.2011, 16:17
Вот будет эмулятор ДВК с КЦГД и КГД+КСМ тогда и выкладывать можно.Я сейчас как раз занимаюсь разработкой такого эмулятора, но по ходу возник довольно существенный вопрос.

Разработка осуществляется на базе универсального модульного API эмуляции, разрабатываемого параллельно. Для передачи потоковых данных в этом API используются потоки. С байтовым потоком, который используется для подключения эмулятора терминала к эмулятору последовательного порта, всё просто - в канале данных потока передаются байты.

Но если использовать тот же принцип для передачи видеокадров через "поток видео", то передавать уже нужно что-то вроде указателя на объект "видео кадр".

Т.е. модуль эмуляции КСМ будет создавать объекты "видео кадр", заполнять их своими данными и затем передавать через поток дальше ( на вход модуля эмуляции КГД или модуля эмуляции видео-монитора ).

Отсюда вопрос - какие данные должен содержать объект "видео кадр", чтобы любая программа, понимающая формат "поток видео" могла воспроизводить на экране хост-машины абсолютно точный аналог изображения, формирующегося в оригинале на экране эмулируемого видео-монитора.

Похоже, что основной блок данных видео кадра - это массив цветовых значений RGB точек растра, с заголовком, содержащем сведения о числе строк и столбцов. Частота кадров скорее всего передаваться не должна. С какой скоростью "фабрика кадров" будет их создавать - такая частота кадров и будет.

Яркость, контрастность, линейность, заметность обратного хода луча - полностью определяются настройками эмулятора видео-монитора, поэтому передаваться в кадре не должны.

Получается, что формат данных потока видео (т.е. "кадров видео") - это массив 32-битовых значений цвета точек растра с указанием размерности массива.

Этого достаточно?

Нужно ли для максмально точного воспроизведения видео-потока передавать в объектах "видео кадр" что-то ещё ?

Doronetty
20.10.2011, 16:56
неужели наконец-то появится долгожданный эмулятор ДВК?!
P.S: Ведь я смотрю и реальщиков-то много, и познания у всех более чем позволяют сделать полноценный эмуль, а пока его не было...

Patron
20.10.2011, 17:27
неужели наконец-то появится долгожданный эмулятор ДВК?!Появится точно, но не слишком скоро.

Нет смысла писать новые модули эмуляции, пока не разработан достаточно качественный универсальный модульный API эмуляции.

Вот написал я в тестовых целях (с текущей версией модульного API) несколько модулей для эмуляции ДВК-1 и теперь всё это перестаёт работать при каждом принципиальном изменении API (т.е. почти каждый день). Поэтому почти ежедневно приходится заново отлаживать все уже написанные модули эмуляции ( процессор 1801ВМ1, плата МС1201.00, плата DL11-W, псевдо-контроллер DSK, универсальный терминал ).

hobot
20.10.2011, 17:35
очень много софта на эти машины.
А можно подробнее этот момент осветить?


Появится точно, но не слишком скоро.

То есть отдельную тему - Эмулятор ДВК - пока рано создавать?

Patron
20.10.2011, 17:43
То есть отдельную тему - Эмулятор ДВК - пока рано создавать?Можно создать тему про универсальный модульный API эмуляции, но только в том случае, если среди участников есть желающие такую тему обсуждать.

Вот захочет кто-то ответить на мой вопрос, какие данные должны передаваться в объекте "кадр видео" для максимально точной эмуляции работы видео-контроллеров - тогда можно для этого и тему создать.

hobot
20.10.2011, 18:09
Наверное они у меня есть.
Вот этот архив мне прислал anasana, за что ему огромная благодарность! Я пока особо не копался ( разгребаю УК-НЦшный завальчик)
Но с его-же слов там должно быть что-то под КЦГД, в том числе и Land (или какой-то иной вариант на тему Lode Runner-а )
http://www.onlinedisk.ru/file/755228/

Alex_K, по поводу операции copy в эмуляторе - на всех этапах эта команда не всегда выполнялась корректно, вы и сами знаете, я просто озвучу свои наблюдения, система в эмуляторе ведёт себя так, словно операция завершилась успешно, но на самом деле на втором диске (куда копируем) копируемый файл не всегда появляется, то есть после завершения операции, по
команде DIR - каталог без изменений остаётся. Хорошо-бы конечно все дисковые операции внимательно прочесать, но могу сказать что INI/VO, DEL, SQ/NOQ - ни разу сбоев не давали например.

-------- добавлено ! --------------
Alex_K, благодарность за два обновления за 1-одни сутки (ночное и вечернее) и по поводу новой раскладки, я вот на ноуте своём сейчас
эмулятор гоняю, очень удобно - главное косвенно\непосредственный @
теперь удобный, остальное вроде тоже довольно удобно.

Titus
20.10.2011, 21:25
Получается, что формат данных потока видео (т.е. "кадров видео") - это массив 32-битовых значений цвета точек растра с указанием размерности массива.
А частота кадров? Должна быть какая-то синхронизация по этому вопросу?

Patron
20.10.2011, 22:15
А частота кадров? Должна быть какая-то синхронизация по этому вопросу?Реальный сигнал видео не заносит в поле кадра сведений о частоте кадров и (насколько я понимаю) является последовательностью независимых отдельных сигналов отдельных кадров, поэтому наличие информации о частоте кадров в "эмулируемом сигнале видео" избыточно и (на мой взгляд) контрпродуктивно.

Titus
20.10.2011, 22:43
Реальный сигнал видео не заносит в поле кадра сведений о частоте кадров и (насколько я понимаю) является последовательностью независимых отдельных сигналов отдельных кадров, поэтому наличие информации о частоте кадров в "эмулируемом сигнале видео" избыточно и (на мой взгляд) контрпродуктивно.
Не знаю, какая система у вас, но если кадровая частота монитора не совпадает (или не кратна) частоте обновления экрана, появляются артефакты, размазывание изображения и/или 'попадание под лучик'.

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


Вот этот архив мне прислал anasana, за что ему огромная благодарность! Я пока особо не копался ( разгребаю УК-НЦшный завальчик)
Но с его-же слов там должно быть что-то под КЦГД, в том числе и Land (или какой-то иной вариант на тему Lode Runner-а )
Файлов много, но чета игр особо не нашел.

Patron
20.10.2011, 23:04
Не знаю, какая система у вас, но если кадровая частота монитора не совпадает (или не кратна) частоте обновления экрана, появляются артефакты, размазывание изображения и/или 'попадание под лучик'.Получение эмулированного потока кадров видео мало чем отличается от получения реального потока реальных кадров видео. После получения каждого очередного кадра открываются "временные ворота", в которые должен успеть попасть следующий кадр. У реального видеомонитора ширина таких ворот определяется (насколько я понимаю) качеством схемы автоподстройки частоты кадров. Если следующий кадр не успевает прийти за указанный промежуток времени - у монитора происходит сбой кадровой развёртки. Для сколь угодно точной эмуляции таких процессов не требуется отдельная информация о среднем количестве приходящих каждую секунду кадров.

Однако, в моей версии универсального API эмуляции - каждый поток имеет отдельный канал передачи команд. Так, например, эмулятор терминала иногда отправляет эмулятору последовательного порта команды "ReportBaudRate" и "ChangeBaudRate". Поэтому, если некоторые передатчики потока видео смогут адекватно отреагировать на команды типа "Report_FPS" и "Change_FPS" - удобство использования потока видео, возможно, повысится.

Но это не принципиальный момент. Принципиальный же момент в том, что наличие в отдельном кадре потока видео информации о частоте кадров (на мой взгляд) - совершенно излишне.

Titus
20.10.2011, 23:28
Вам виднее. Я так понял, что эта ваша система состоит из всяческих терминалов, как, например, я видел в СМ1420 на УПК в школе. Когда где-то стоит комп, а у учеников 20 терминалов, и главный комп обрабатывает их по очереди. При таком подходе конечно дикие задержки между нажатой клавишей, реакцией программы, и получением ответа в виде изменения видео или аудио.

Patron
20.10.2011, 23:41
Вам виднее. Я так понял, что эта ваша система состоит из всяческих терминалов, как, например, я видел в СМ1420 на УПК в школе.Когда Вы говорите про результаты несовпадения частоты обновления экрана с частотой кадров, то это относится к процессам, происходящим ДО контроллера видео, я же говорю о процессах происходящих ПОСЛЕ контроллера видео.

Проще говоря - у компьютера есть разъём "видео" и у монитора есть разъём "видео", а соединяются эти разъёмы мониторным кабелем. Так вот речь и идёт о том, каким должен быть формат данных, передаваемых по "виртуальному мониторному кабелю" при его эмуляции.

Ведь, эмулятор видеоконтроллера может написать один человек, а эмулятор видеомонитора - другой человек. Каким же должен быть набор данных, которые эмулятор видеоконтроллера должен передавать эмулятору видеомонитора, для максимально адекватной эмуляции передачи видеосигнала..

Это и интересно обсудить.

Titus
20.10.2011, 23:51
Проще говоря - у компьютера есть разъём "видео" и у монитора есть разъём "видео", а соединяются эти разъёмы мониторным кабелем. Так вот речь и идёт о том, каким должен быть формат данных, передаваемых по "виртуальному мониторному кабелю" при его эмуляции.

Ведь, эмулятор видеоконтроллера может написать один человек, а эмулятор видеомонитора - другой человек. Каким же должен быть набор данных, которые эмулятор видеоконтроллера должен передавать эмулятору видеомонитора, для максимально адекватной эмуляции передачи видеосигнала..

Это и интересно обсудить.
Ну тогда все же склоняюсь к тому, что компьютер сообщал монитору о кадровой частоте, а не только о разрешении. Т.е. все, что идет в обычном видеосигнале, то и в эмулируемом 'кабеле'.

hobot
21.10.2011, 00:23
Ведь, эмулятор видеоконтроллера может написать один человек, а эмулятор видеомонитора - другой человек
Мнение не профессора, что если никакой отсебятины не пытаться навернуть, тупо "в ноль" сигнал той железки эмулятор которой пишется? Такой подход логичен на мой взгляд, либо я не совсем понял о чём речь (эх.уже пора в отдельную тему с вашим API переезжать!!! А люди подтянутся - тема то интересная, просто тему по УКНЦ эмулятору загрузим сильно если в её рамках продолжать), все посты от первого вашего вопроса можно ведь в новую тему перекинуть - вот будет радости!!!:wink:


Файлов много, но чета игр особо не нашел.
Я так или иначе выкладываю все что присылается и не имело повторов в архиве Арсения например, который софт собирать начал задолго до меня и обсуждалось создание общего архива ( я тут нашёл первые разговоры на эту тему) несколько лет
назад. Только вот из большинства, кто заявил "вот у меня вроде есть там где-то что-то" - реальные файлы, архивы или образы - присылают далеко не все. Это в общем очередной призыв выкладывать и делится ко всем!!!
:rolleyes_std:
Спасибо.

Patron
21.10.2011, 00:24
Ну тогда все же склоняюсь к тому, что компьютер сообщал монитору о кадровой частоте, а не только о разрешении. Т.е. все, что идет в обычном видеосигнале, то и в эмулируемом 'кабеле'.Народная мудрость гласит: В большинстве телевизоров кадры показываются с той же частотой, с какой они передаются. Возможно в это трудно поверить, но обычный аналоговый видеосигнал не передаёт В КАДРАХ информацию о частоте кадров. И именно поэтому формат данных эмулированного видеокадра не должен (по моему мнению) содержать информацию о частоте кадров. Такую информацию приёмник эмулируемого потока видео может запрашивать у передатчика по каналу команд, но наличие информации о частоте кадров в каждом кадре (на мой взгляд) совершенно излишне.

Titus
21.10.2011, 00:48
Народная мудрость гласит: В большинстве телевизоров кадры показываются с той же частотой, с какой они передаются. Возможно в это трудно поверить, но обычный аналоговый видеосигнал не передаёт В КАДРАХ информацию о частоте кадров.
Не поверите - я это знаю)
То, что хорошо для реального монитора, не совсем рентабельно для монитора виртуального. Делайте, в общем, как знаете, я только рассказал свое видение)

Patron
21.10.2011, 11:13
То, что хорошо для реального монитора, не совсем рентабельно для монитора виртуального.Уговорили :)
Поместим в заголовок кадра значение FPS, 32-разрядный порядковый номер кадра, признак дублирования кадра с предыдущим номером (тело дублирующего кадра обязано присутствовать), количество точек растра по горизонтали и количество точек растра по вертикали. После заголовка расположим тело кадра в виде массива 32-разрядных значений RGB точек растра.

anasana
21.10.2011, 15:40
Файлов много, но чета игр особо не нашел.
Это только всё что было на MY дисках я легко прочел... LAND и другое под КЦГД хранится на дискетах формата МХ у одного чела, на вынос их не отдаёт, я забрал на пробу пару дисков из его комплекта и пробовал у себя прочесть, но пока ничего не получилось.

nzeemin
22.10.2011, 11:21
Коллеги, спасибо огромное за вашу работу!
Сам я, к сожалению, сейчас сижу на проекте который оставляет крайне мало свободного времени, поэтому пришлось отложить работу по эмулятору.

Сегодня появилось немного времени, выкладываю для вас сборку, сделанную по изменениям Алексея за 3-18 октября -- фикс ASH/ASHC, порты ловушки, работа с клавиатурой.

Alex_K
22.10.2011, 11:29
Сегодня появилось немного времени, выкладываю для вас сборку, сделанную по изменениям Алексея за 3-18 октября -- фикс ASH/ASHC, порты ловушки, работа с клавиатурой.

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

nzeemin
22.10.2011, 11:38
Никита, забыл сбросить последний коммит с ремаппингом клавиатуры. Большая просьба, пересобери.

Сделал, в сообщении выше обновил.

Alex_K
22.10.2011, 11:48
Сделал, в сообщении выше обновил.
http://ukncbtl.googlecode.com/files/UKNCBTL-beta21-exe.zip
В этой сборке нет ещё ремаппинга клавиатуры. Я коммит r300 сбросил в 11:26, а EXE-шник от 11:04.

ZEman
22.10.2011, 11:54
бог любит троицу :D

hobot
23.10.2011, 01:52
Alex_K, скачал, запустил, вроде всё хорошо по кнопочкам:redface: Разве нет?

Alex_K
23.10.2011, 09:43
Alex_K, скачал, запустил, вроде всё хорошо по кнопочкам:redface: Разве нет?
Перекачал сейчас уже с помощью Opera, всё нормально. А Google Chrome оказывается хранит это в кэше, ну и соответственно подставляет всё время старую версию.

Titus
23.10.2011, 14:22
Alex_K, скачал, запустил, вроде всё хорошо по кнопочкам:redface: Разве нет?
Что за программа на скриншоте, где клавиатура?

nzeemin
23.10.2011, 14:46
Когда-то давно уже было пожелание сделать регулировку громкости звука -- добавил слайдер в диалоге настроек.
И ещё сюда вошёл небольшой фикс клавиатуры от Алексея.

Alex_K
23.10.2011, 15:53
Когда-то давно уже было пожелание сделать регулировку громкости звука -- добавил слайдер в диалоге настроек.
И ещё сюда вошёл небольшой фикс клавиатуры от Алексея.
Никита, за регулятор громкости ОГРОМНОЕ СПАСИБО. А то мой старый добрый усилитель ВЕГА 50У-122С уж очень громко звучал.

А небольшие фиксы касались ловушки адреса (режим выдачи сигнала в линию ПОРТ, ещё даже фикс был в 21 бете), а фикс клавиатуры - по последним исследованиям на реальной машине. Не работал толком тест клавиатуры в программе TUK.SAV, которую выкладывал hobot. Сначала я высказал предположение, что это из-за того, что периферийный процессор довольно быстро работает, и счетчик в клавиатуре не успевает инкрементироваться. Но по тестам на железе все оказалось не так, при чтении с регистра данных 177702, если в регистре статуса 177700 был установлен бит готовности, счетчик инкрементируется сразу же после чтения с регистра данных 177702. Пример: нажали ВВОД, счетчик встал на коде 0153, если сразу же два раза прочесть регистр данных клавиатуры, то при первом чтении прочтется 0153 (как и должно быть), а при втором - уже 0154. Ниже три кода для исследования: первый ждет нажатия клавиши, второй - отжатия, третий начинает работать сразу при нажатии или отжатии. Заполняется память в ОЗУ ПП с адреса 24000 значениями регистра данных клавиатуры, всего 022000 слов.


23700 004737 104054 CALL @#104054
23704 005037 177700 CLR @#177700
23710 012700 024000 MOV #24000,R0
23714 012701 022000 MOV #22000,R1
23720 105737 177700 TSTB @#177700
23724 100375 BPL 23720
23726 105737 177702 TSTB @#177702
23732 100772 BMI 23720
23734 013720 177702 MOV @#177702,(R0)+
23740 077103 SOB R1,23734
23742 012737 000100 177700 MOV #100,@#177700
23750 000000 HALT

23700 004737 104054 CALL @#104054
23704 005037 177700 CLR @#177700
23710 012700 024000 MOV #24000,R0
23714 012701 022000 MOV #22000,R1
23720 105737 177700 TSTB @#177700
23724 100375 BPL 23720
23726 105737 177702 TSTB @#177702
23732 100372 BPL 23720
23734 013720 177702 MOV @#177702,(R0)+
23740 077103 SOB R1,23734
23742 012737 000100 177700 MOV #100,@#177700
23750 000000 HALT

23700 004737 104054 CALL @#104054
23704 005037 177700 CLR @#177700
23710 012700 024000 MOV #24000,R0
23714 012701 022000 MOV #22000,R1
23720 105737 177700 TSTB @#177700
23724 100375 BPL 23720
23726 013720 177702 MOV @#177702,(R0)+
23732 077103 SOB R1,23726
23734 012737 000100 177700 MOV #100,@#177700
23742 000000 HALT

Напомню, что код в ПП запускать надо ПРОБЕЛОМ, ИСП портит регистры, а пошаговая отладка там не работает.

hobot
24.10.2011, 22:50
nzeemin,
Alex_K, пожалуйста не отодвигайте совсем на потом операции дисковые, некорректно работает довольно много команд, если бы не независимые утилиты,
проблематично было-бы средствами одного эмулятора с образами работать.
Например атрибут P снять при необходимости - унпроте только пишет что выполнился, про копирование вы знаете, а главное догадываетесь в чём причина этого.
Спасибо!


Что за программа на скриншоте, где клавиатура?
На харде покопайся - название точное не помню, там она есть точно.
И где-то рядышком программа часиков.

Alex_K
24.10.2011, 23:00
nzeemin,
Alex_K, пожалуйста не отодвигайте совсем на потом операции дисковые, некорректно работает довольно много команд, если бы не независимые утилиты,
проблематично было-бы средствами одного эмулятора с образами работать.
Например атрибут P снять при необходимости - унпроте только пишет что выполнился, про копирование вы знаете, а главное догадываетесь в чём причина этого.
Спасибо!
hobot, не беспокойтесь по этому поводу. Я уже распечатал Floppy.cpp. Надо посидеть, проанализировать, где что не так. Так что будет, но немного попозже. Всё-таки 1801ВП1-128 посложнее будет, чем клавиатура и ловушка, официальной информации по ней почти нет (та что есть, практически ни о чём), приходится делать опыты на реальной машине и анализировать различные прошивки (драйвер дисковода в СПЗУ УКНЦ, 255 прошивка КМД ДВК и т.д. и т.п.).

hobot
26.10.2011, 07:00
Я уже распечатал Floppy.cpp. Надо посидеть, проанализировать, где что не так.
Тогда ещё немного инф. из опыта работы с образами дискет в UKNCBTL, очень коротко :
1. Проблемы возникают когда операции (любые) происходят между контроллерами (!!!)
Я говорю вот о чём - система допустим в дисководе 0 или 1, дискета с играми так-же в одном из них, а вот исходная дискета в 2 или 3. Надеюсь я описал суть.
2. Причем все эти вещи происходят незаметно для RT11, она рапортует всё ОК. Такие дела, вообще заметил что 0 и 1 дисководы заслуживают большего доверия, 2 и 3 изначально как-то не так работали, к сожалению более конкретных примеров пока не могу привести, но при случае обязательно добавлю информации.
:redface:

nzeemin
05.11.2011, 01:54
http://zx.pk.ru/showpost.php?p=431955&postcount=72

P.S. Что-то мне подумалось что загрузку выбором SAV-файла можно и прямо в эмулятор встроить -- разбор заголовка, проверки, загрузка файла прямо в память эмулятора, установка SP и PC. Стоит заняться?

Vamos
05.11.2011, 02:31
Стоит заняться?
Лучше СА сделать на СОМ, тогда хотя бы можно будет на двух эмуляторах(компьютерах) сеть сорганизовать.

Alex_K
05.11.2011, 02:53
P.S. Что-то мне подумалось что загрузку выбором SAV-файла можно и прямо в эмулятор встроить -- разбор заголовка, проверки, загрузка файла прямо в память эмулятора, установка SP и PC. Стоит заняться?
Я думаю не надо. Работать это будет толком только для автономных программ. Сам процесс загрузки SAV-файла не такой простой. Сначала считывается нулевой блок, определяется оверлейный файл или нет, с нулевого блока переносится информация в ОЗУ в соответствии с битами в JSW и битовой картой защиты памяти в RMON (ячейки 0-476). После этого дочитывается информация с первого блока и далее. В зависимости от настроек сохраняется KMON и USR. Банально может не хватить памяти для загрузки (если загружено много драйверов и USR стоит NOSWAP), можно при загрузке запортить KMON, а RT-11 об этом не будет знать.
Для БК это было оправдано, т.к. с ленты медленно читается, а тут все-таки читается с дисковода или винчестера, есть операционная система.

nzeemin
05.11.2011, 20:07
Новость скорее инфраструктурная, внутри-проектная.

В сырцы UKNCBTL добавил проект src\UKNCBTL.TB -- это тот же эмулятор но без интерфейса, к которому написан ряд методов для тестирования, таких как "нажать эту кнопку", "набрать такой текст", "снять скриншот и сравнить с файлом" итп. Это позволяет написать ряд тестов, позволяющих быстро и без ручных движений провести регрессионное тестирование -- убедиться в том что после очередных изменений не возникло ошибок в том что уже работало.

Пока написано четыре теста: загрузка/меню/самотестирование, Бейсик из картриджа ПЗУ, тесты FTMON, игрушки. Всего сейчас проверяется 16 скриншотов.
Постепенно буду дополнять другими тестами и улучшать существующие.

http://ukncbtl.googlecode.com/svn-history/r319/trunk/src/UKNCBTL.TB/data/test03_2.bmp

nzeemin
11.11.2011, 23:20
Сегодня можно сказать праздник -- Titus выложил Техническое описание на КМ1801ВМ2: http://zx.pk.ru/showpost.php?p=434162&postcount=1
Так что в ближайшее время будет видимо ряд правок в коде процессора.
Кстати тут сильно пригодится только что сделанный Test Bench.

nzeemin
12.11.2011, 12:02
Добавил "полуторный" режим экрана -- 640 x 432.

http://img-fotki.yandex.ru/get/5313/7448436.7/0_63b7f_c136e29_L

http://ukncbtl.googlecode.com/files/UKNCBTL-beta24-exe.zip

Shadow Maker
12.11.2011, 16:14
Я наверное уже надоел, но нельзя ли починить сейв стейты?

nzeemin
12.11.2011, 23:00
Я наверное уже надоел, но нельзя ли починить сейв стейты?

Над этим тоже потихоньку работаю, но до конца ещё далеко.

Vamos
13.11.2011, 02:20
Добавил "полуторный" режим экрана -- 640 x 432.
Вот здесь http://uk-nc.narod.ru/ скрины как должно быть на мониторе (прогрессивная развертка), в эмуляторе Double Height это как на телевизоре (через строчная развертка), в WinAPI есть функция которая позволяет делать размер окна мышью (в каком-то эмуляторе БК было). Мне такой выбор видится правильным. Сейчас получается 2 варианта экрана из 3 "не правильные".

nzeemin
15.11.2011, 20:04
Вот здесь http://uk-nc.narod.ru/ скрины как должно быть на мониторе (прогрессивная развертка), в эмуляторе Double Height это как на телевизоре (через строчная развертка), в WinAPI есть функция которая позволяет делать размер окна мышью (в каком-то эмуляторе БК было). Мне такой выбор видится правильным. Сейчас получается 2 варианта экрана из 3 "не правильные".

Для меня лично -- новый режим выглядит наиболее "аутентично", поскольку на УКНЦ я работал с его родными серыми ч/б мониторами: http://rk86.com/frolov/uknc-3.jpg -- вот так это и выглядело, и качество изображение как раз такое и было.

Vamos
15.11.2011, 20:57
Для меня лично -- новый режим выглядит наиболее "аутентично", поскольку на УКНЦ я работал с его родными серыми ч/б мониторами: http://rk86.com/frolov/uknc-3.jpg -- вот так это и выглядело, и качество изображение как раз такое и было.
У меня тоже был ч/б монитор (такой как на фото) и строчки там не сливались, а были промежутки, как на ссылке которую я дал. На этой фото у монитора не отрегулирован правильно размер по вертикали и ракурс не позволяет увидеть то о чем разговор.

nzeemin
15.11.2011, 21:49
В принципе, относительно несложно получить ещё разрешения:
- 960 x 576 -- увеличение 1,5 x 2 -- можно сделать черезполосицу чтобы получить изображение "как на мониторе"
- 960 x 720 -- увеличение 1,5 x 2,5
- 1280 x 864 -- увеличение 2 x 3

Vamos
15.11.2011, 22:48
В принципе, относительно несложно получить ещё разрешения
Мое мнение, что не нужно делать много вариантов, достаточно трех, два из которых будут "аутентичные" и один настраиваемый пользователем по своему вкусу (как в эмуляторе БК Калмыкова Юрия).

---------- Post added at 21:48 ---------- Previous post was at 21:35 ----------

Нужно в вариант Normal Height добавить пустые(черные) строки и назвать это "монитор" или "прогрессив", а вариант Double Height назвать "ТВ" или "через строчная".

nzeemin
18.11.2011, 08:50
Обновил код Qt-версии, выложил версию собранную под Ubuntu 11.10:
http://ukncbtl.googlecode.com/files/QtUkncBtl-beta24-linux.tar.gz

http://img-fotki.yandex.ru/get/5820/7448436.7/0_64180_f756089e_L.jpg

nzeemin
19.11.2011, 21:47
http://img-fotki.yandex.ru/get/5821/7448436.7/0_6413f_c2ab0f22_L.jpg (http://img-fotki.yandex.ru/get/5821/7448436.7/0_6413f_c2ab0f22_orig)

http://ukncbtl.googlecode.com/files/QtUkncBtl-beta24-mac64.zip
Qt-версия UKNCBTL для Mac OS X 10.6.
Собрана на Qt Creator 2.3.1 (Qt 4.7.4) под Mac OS X 10.6.6.

Qt-версия по возможностям пока сильно отстаёт от основной Win32-версии, хотя и использует то же самое ядро эмуляции.
Но ситуация у меня сейчас такова что по-видимому Qt-версии сейчас получат приоритет в развитии.

Vamos
19.11.2011, 22:25
Qt-версия по возможностям пока сильно отстаёт от основной Win32-версии, хотя и использует то же самое ядро эмуляции.
???

Titus
19.11.2011, 23:28
Qt-версия по возможностям пока сильно отстаёт от основной Win32-версии, хотя и использует то же самое ядро эмуляции.
Но ситуация у меня сейчас такова что по-видимому Qt-версии сейчас получат приоритет в развитии.
А вот интересно, кто-нибудь вообще ее тут использует? Похоже, что все юзают только Win-версию.

Doronetty
20.11.2011, 19:00
А вот интересно, кто-нибудь вообще ее тут использует? Похоже, что все юзают только Win-версию.
Я тоже так думаю! :v2_thumb:

esl
20.11.2011, 19:58
А я за мултиплатформ
Вот только с радостью пустил на маке

hobot
21.11.2011, 02:17
А вот интересно, кто-нибудь вообще ее тут использует? Похоже, что все юзают только Win-версию.
А вот задарят тебя МАКИНТОШ-переносной крутой какой-нибудь и-мак, как ты без родного УКНЦ будешь ? ))) ИМХО:
Win-версия приоритетная, поскольку у большинства пользователей Виндоус и сейчас и в ближайшей перспективе будет, да и компьютер под виндоус всегда за 3 копейки (условно) можно собрать\купить ))) И бац - запустить на нём "Звёздный патруль!" !!! )))
Но это очень правильно "мультиплатформ" конечно.

Titus
21.11.2011, 03:29
А вот задарят тебя МАКИНТОШ-переносной крутой какой-нибудь и-мак, как ты без родного УКНЦ будешь ? ))) ИМХО:
Win-версия приоритетная, поскольку у большинства пользователей Виндоус и сейчас и в ближайшей перспективе будет, да и компьютер под виндоус всегда за 3 копейки (условно) можно собрать\купить ))) И бац - запустить на нём "Звёздный патруль!" !!! )))
Но это очень правильно "мультиплатформ" конечно.

Мне он нафиг не нужен. А даже если и будет, то на него винду тоже можно поставить. Под виндой софта в разы больше, зачем же себя ограничивать мак осью.

esl
21.11.2011, 12:51
Мне он нафиг не нужен. А даже если и будет, то на него винду тоже можно поставить. Под виндой софта в разы больше, зачем же себя ограничивать мак осью.

не холивара ради ;)
у меня уже 2 года дома нет винды,
стоит Хакинтош.
назад переходить - желания нет, вообще
на работе - много разных виндов, основаня 7, и XP, 2000,2003 etc.

но опять же, смотря какой софт, ежили чего надо, ставим в виртуалку,
в современных условия оно не тормозит
даже в Trackmania играюсь иногда в виртуалке ;)

для меня одно отсутвие антивируса жрущего ресурсы - стоит дорогого.
да и интерфейс на мой вкус гораздо красивее/продуманнее/удобнее
и юникс оно, со всеми его плюсами.

а после общения с MacBook Pro я на виндовые нубуки смотреть не могу :(
ну совсем, ониж в сравнении уродливы и страшны, единственный плюс - дешево.
по этому до сих пор без ноута и сижу ;(, на макбук жаба давит, а обычный в руки брать нет желания

открыл крышку - и оно СРАЗУ готов к работе (ну вайфаю пару лишних секунд)
в отличии от виндовых :(

Titus
21.11.2011, 13:40
не холивара ради ;)
у меня уже 2 года дома нет винды,
стоит Хакинтош.
назад переходить - желания нет, вообще
на работе - много разных виндов, основаня 7, и XP, 2000,2003 etc.

но опять же, смотря какой софт, ежили чего надо, ставим в виртуалку,
в современных условия оно не тормозит
даже в Trackmania играюсь иногда в виртуалке ;)

для меня одно отсутвие антивируса жрущего ресурсы - стоит дорогого.
да и интерфейс на мой вкус гораздо красивее/продуманнее/удобнее
и юникс оно, со всеми его плюсами.
Тоже не в холиваре будет сказано.
Пробовал пользоваться виртуалкой VMWare на ПЦ в некоторых случаях - так вот 'вроде бы' все работает так же, но все равно скорость где-то теряется, где-то что-то подглючивает, да и не удобно это. Вроде можно, но не так удобно, как использовать нативный софт для платформы. А пока что эта платформа в подавляющем случае ПЦ.

Что касается резидентных антивирусов, то у меня такового НЕТ, и не было) И что интересно, комп вирусами не болеет. А почему? Может настроен правильно) И бяки не запускаю? В общем, антивирусы - это отдельная песня и отдельная индустрия по выкачиванию денег из населения.

Короче, все дело вкуса.
Но пока что эмули пишут все же больше под ПЦ.

esl
21.11.2011, 13:54
Пробовал пользоваться виртуалкой VMWare на ПЦ в некоторых случаях - так вот 'вроде бы' все работает так же, но все равно скорость где-то теряется, где-то что-то подглючивает, да и не удобно это. Вроде можно, но не так удобно, как использовать нативный софт для платформы.

тут очень важно чтоб проц был новый, с поддержкой виртуализации, без поддержки - притормаживает, с - не заметно разницы.

Patron
21.11.2011, 14:43
Пробовал пользоваться виртуалкой VMWare на ПЦ в некоторых случаях - так вот 'вроде бы' все работает так же, но все равно скорость где-то теряется, где-то что-то подглючивает, да и не удобно это.

тут очень важно чтоб проц был новый, с поддержкой виртуализации, без поддержки - притормаживает, с - не заметно разницы.Только что проверил как идёт под виртуальной машиной мой недоделанный эмулятор ДВК:

1) На хост-машине БЕЗ поддержки виртуализации под Vista 64: 15.2 MIPS

2) На виртульной машине Oracle VM VirtualBox под XP: 14.2 MIPS

...

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

Titus
21.11.2011, 15:55
Только что проверил как идёт под виртуальной машиной мой недоделанный эмулятор ДВК:

1) На хост-машине БЕЗ поддержки виртуализации под Vista 64: 15.2 MIPS

2) На виртульной машине Oracle VM VirtualBox под XP: 14.2 MIPS
А чего только 15 мипсов? Что за машина?

Patron
21.11.2011, 16:34
А чего только 15 мипсов? Что за машина?Pentium E5300 2.80 GHz

15 мипсов ( что соответствует процессору 1801ВМ1, работающему на частоте ~ 450 МГц ) даёт "академическое" ядро с последовательным разборщиком команд типа:


if( nWord <= 016 )
{
switch( nWord )
{
// HALT
case 00:
sprintf(str,"\r%06o: HALT\n", Last_PC );
DebugOut.Send(str);

HALT_TrapToRomOffset( 02 ); continue;

// WAIT
case 01:
{
bWait = true;
dword uTC = GetTickCount();
if( uTC - dwLastWaitReportTC > 100 )
{
dwLastWaitReportTC = uTC;
sprintf(str,"\r%06o: WAIT\r", Last_PC );
DebugOut.Send(str);
}
return;
}


// RTI
case 02:
{
CheckAddrRead(SP);
PC = WORD( SP &(~1) );
SP += 2;

word wOldPSW = PSW;

CheckAddrRead(SP);
PSW = BYTE( SP &(~1) );
SP += 2;

if( PSW & T || wOldPSW & T )
{
nTraps++;
nT_bit_Flag = 1;
}

dwCurrentStepsLatencyNS += 5*uCPU_CycleNS;
continue;
}

// BPT
case 03:
TrapTo(014);

dwCurrentStepsLatencyNS += 8*uCPU_CycleNS;
continue;

// IOT
case 04:
TrapTo(020);

dwCurrentStepsLatencyNS += 8*uCPU_CycleNS;
continue;

// RESET
case 05:
sprintf(str,"\r%06o: RESET\r", Last_PC );
DebugOut.Send(str);

InitTrapsClearing();
Init();

dwCurrentStepsLatencyNS += 720*uCPU_CycleNS;
continue;


Я специально не оптимизирую ядро, чтобы после его опубликования устроить соревнование ядер эмуляторов архитектуры "PDP-11 16bit". Думаю, что оптимизированное ядро сможет выдавать где-то 100 MIPS, что будет соответствовать процессору 1801ВМ1, работающему на частоте ~ 3 ГГц.

Titus
21.11.2011, 17:50
Ой, глючу) Я-то прочитал 15фпс)

Doronetty
22.11.2011, 12:40
Только что проверил как идёт под виртуальной машиной мой недоделанный эмулятор ДВК:

Неужели наконец-то эмулятор ДВК?! Какой ДВК эмулируется? И когда ждать релиза?

Patron
22.11.2011, 13:50
Неужели наконец-то эмулятор ДВК?! Какой ДВК эмулируется? И когда ждать релиза?Эмулируется всё, что угодно, но только в теории, поскольку эмулятор существует главным образом в виде универсального API эмуляции, позволяющего (также только в теории) осуществлять абстрактную, дискретную и аналоговую эмуляцию любых электронных устройств в любых количествах и комбинациях (например - эмулировать два разных компьютера одновременно или эмулировать компьютерный класс КУВТ), а также аудио-визуальную 2D и 3D симуляцию их функционирования :)

Модули абстрактной эмуляции процессора 1801ВМ1, платы МС1201, контроллера DL11-W и универсального терминала я написал для тестирования API. Для нормальной работы нужны также модули абстрактной эмуляции контроллеров PC, LP, DX, RK, MX, MY, MT и всех остальных, которые нужно будет написать после релиза API.

Релиз предварительной версии API абстрактной эмуляции состоится, возможно, через несколько месяцев.

В принципе - ничто не мешает добавить в модуль PDP-11 эмулятора SIMH (как и в модули эмуляции любой другой архитектуры из комплекта SIMH) интерфейс API абстрактной эмуляции, чтобы использовать этот мощный модуль наравне с другими, но это может потребовать дополнительных модификаций API, поэтому не вполне ясно, лучше ли заниматься этим до или после предварительного релиза API.

hobot
22.11.2011, 22:20
Под виндой софта в разы больше, зачем же себя ограничивать мак осью.
1.Виндоуз - Не родная среда для маков (хотя сегодня уже "интел" маки)!
2.Если свалится станет нужен поскольку он по своему замечательный )))
3.Не ограничивать, а разнообразие - поработать поизучать другую "мощную" ОС )))


Но ситуация у меня сейчас такова что по-видимому Qt-версии сейчас получат приоритет в развитии.
Это же разработчик заявил, остаётся только смирится ))) Возможно Alex_K виндоус версию поддержит по возможности )))

Patron, это очень хорошие и интересные новости по поводу возможно скорого релиза API

nzeemin
04.12.2011, 22:12
А вот интересно, кто-нибудь вообще ее тут использует? Похоже, что все юзают только Win-версию.

Доля Mac + Linux уже сейчас составляет около 8% (http://www.netmarketshare.com/operating-system-market-share.aspx?qprid=8&qpcustomd=0). Среди гиков приверженцев Линукса заметно больше чем 1.31%. В общем, эти люди время от времени напоминают мне что Qt-версии тоже востребованы.

Кроме того, Qt предоставляет некоторые интересные возможности которых трудно достичь в Windows-версии. В частности, к приложению достаточно легко прикрутить возможность исполнения пользовательских скриптов на QtScript (это тот же JavaScript по сути). В Qt-BKBTL я это сейчас прикручиваю, затем в Qt-UKNCBTL перенесу.

hobot
13.12.2011, 18:05
Забил до отказа дискету сборника игр для эмулятора )))
Обновилась страничка эмулятора на Dimouse.ru
http://dimouse.ru/norka/computers/ukncdwk/ukncbtl.html

Titus
21.02.2012, 04:22
Случайно заметил, что эмулятор от 23.10.2011 работает почти в два раза быстрее, чем от 02.10.2011. Интересно, почему?

Titus
22.02.2012, 03:31
А заодно заметил, что когда быстро набираешь буквы в версии от 23.10.2011, не все буквы иногда набираются.

hobot
22.02.2012, 04:41
от 23.10.2011
а последняя бета под win32 ? ты не её пользуешь? почему ?

Titus
22.02.2012, 04:49
а последняя бета под win32 ? ты не её пользуешь? почему ?
Ссылку.

hobot
22.02.2012, 05:33
Ссылку.
ссылка (http://zx.pk.ru/showpost.php?p=434489&postcount=455) )))

hobot
27.02.2012, 17:05
На случай если у кого-то в настройках стоит "не показывать подписи" прямую ссылку на тему эмуляторов на игровом форуме.
>>> эмуляторы УКНЦ и ДВК <<< (http://www.old-games.ru/forum/showpost.php?p=828719&postcount=1)
>>> УКНЦ и архив программ <<< (http://www.old-games.ru/forum/showpost.php?p=400383&postcount=1)

Titus
29.02.2012, 15:30
Случайно заметил, что эмулятор от 23.10.2011 работает почти в два раза быстрее, чем от 02.10.2011. Интересно, почему?
А еще случайно заметил, что если включить звук, то эмулятор начинает работать очень медленно, примерно 25 кадров в секунду.

Alex_K
29.02.2012, 16:56
А еще случайно заметил, что если включить звук, то эмулятор начинает работать очень медленно, примерно 25 кадров в секунду.
Так уже писали где-то, что синхронизируется он по звуковой карте. А 25 кадров, так авторы сделали, хотя при включенном звуке скорость 1:1. А при выключенном максимальная, сколько потянет компьютер.

hobot
06.03.2012, 16:31
nzeemin,
Alex_K, UKNCBTL планируется ли победить все глюки связанные с флоппиками в эмуляторе - раз и навсегда ??? Окончательно ??? ))) Вот было бы замечательно !
Спасибо!

hobot
15.03.2012, 05:46
Alex_K, просьба при случае поглядите пришпиленный образ диска, он не стандартного размера, но странность(и интерес) его в том, что при загрузке с него эмулятор впадает в "бешенство" ))) Словно и не правили и не патчили ничего, снова по 4 5 символов на одно нажатие, одним словом загрузка с этой дискеты убивает (разгоняет) эмулятор ??? (дискета из архива тов. oldskool)

Alex_K
15.03.2012, 11:40
Alex_K, просьба при случае поглядите пришпиленный образ диска, он не стандартного размера, но странность(и интерес) его в том, что при загрузке с него эмулятор впадает в "бешенство" ))) Словно и не правили и не патчили ничего, снова по 4 5 символов на одно нажатие, одним словом загрузка с этой дискеты убивает (разгоняет) эмулятор ??? (дискета из архива тов. oldskool)
Да, в эмуляторе некорректно реализован программируемый таймер в плане прерываний. А настраивает его так драйвер MZ.SYS, кстати монстр еще тот, цельных 19 блоков, ужас!!! Чего там можно так написать?

Titus
15.03.2012, 12:01
А у меня в EmuStudio этот диск вообще не грузится) И это не из за большого размера.

hobot
15.03.2012, 20:45
Да, в эмуляторе некорректно реализован программируемый таймер в плане прерываний. А настраивает его так драйвер MZ.SYS, кстати монстр еще тот, цельных 19 блоков, ужас!!! Чего там можно так написать?
этот MZ в последнем посте софта для УКНЦ ))) MZ.SYS версии 2.х который вот пожалуйста изучайте ))) Только исходников там нет, если верить описанию драйвер
вроде как можно считать "продвинутым" )))))))))

---------- Post added at 20:45 ---------- Previous post was at 20:44 ----------


А у меня в EmuStudio этот диск вообще не грузится) И это не из за большого размера.
да я кстати только собирался в "соседнем" эмуляторе попробовать, вчера(сегодня) уже спать сильно хотелось )))

hobot
13.04.2012, 07:34
Перед запуском оболочки WIND необходимо запустить эмулятор VT200(VT200.SAV) инструкции к обеим программам есть на прилепленном образе.

Image : wind_vt200_UKNC.dsk

Format : DSK
Size : 800 Kb

Volume ID: WIND_VT200
Owner : UKNCBTL

File Blocks Date Bytes
---------- ------ ----------- ----------
WIND .DEM 1 15-Jul-1991 512
WIND .EXT 2 26-Jun-1991 1'024
WIND .HLP 3 12-Apr-1991 1'536
WIND .SAV 21 12-Jul-1991 10'752
WIND .BAK 1 28-Sep-1991 512
WIND .COM 1 28-Sep-1991 512
WIND .LST 50 12-Oct-1992 25'600
HELP .ME 1 28-Sep-1991 512
PUSK .SAV 7 15-Nov-1991 3'584
VT200 .HLP 4 06-Apr-1993 2'048
VT200 .SAV 34 23-May-1993 17'408
< UNUSED > 1461 748'032
---------- ------ ----------- ----------
11 Files, 125 Blocks
1461 Free blocks

http://savepic.net/2691713.png
Первый запусK

http://savepic.net/2734720.png
Удалось поймать заставку "смайл"

http://savepic.net/2729600.png
Поэкспериментировал, похоже, я подружился с WIND, системные
надписи в верхней строке стали отображаться корректно.

hobot
15.04.2012, 10:04
вот вам целых аж 16 дисков и все с именами и расширениями
http://depositfiles.com/files/9l43mxxmg
наткнулся на такое сообщение, а что там было на этих 16 дисках?
можно перевыложить? или просто на словах описать содержание?

shattered
10.05.2012, 15:48
nzeemin,
Alex_K, UKNCBTL планируется ли победить все глюки связанные с флоппиками в эмуляторе - раз и навсегда ??? Окончательно ??? ))) Вот было бы замечательно !
Спасибо!

это вот такие глюки имеются в виду? версия b24, загрузка с sysimage.dsk, далее попытки скопировать что-то с одного флопика на другой -- copy/verify сообщает, что все в норме, но файл может не появиться на новом месте.

P.S. squeeze почти заполненного диска порушил его (половина файлов исчезла). ухожу на e11 :-(

nzeemin
24.05.2012, 23:29
это вот такие глюки имеются в виду? версия b24, загрузка с sysimage.dsk, далее попытки скопировать что-то с одного флопика на другой -- copy/verify сообщает, что все в норме, но файл может не появиться на новом месте.

P.S. squeeze почти заполненного диска порушил его (половина файлов исчезла). ухожу на e11 :-(

Спасибо за хорошо повторяемый кейс, смог на нём отловить.
Пояснения тут: http://code.google.com/p/ukncbtl/issues/detail?id=40
В аттаче версия с фиксом.

Vamos
25.05.2012, 00:43
В JEK.SAV картинка по прежнему застревает на третьей заливке.
Скорость вывода на экран стала не реально большой, раза в три.
Duble Intrlaced это хорошо, еще бы оставить Duble без Intrlaced.