PDA

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



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

Titus
01.02.2012, 06:22
Все вокруг выкладывают свои наработки в плане эмуляции, даже недоделанные. Хочу и я поделиться неким наброском эмулятора УКНЦ, который написан, правда, еще в 2006 году. :v2_dizzy_coder:
Никакого сервиса в нем нет, и дописывать его не собираюсь, т.к. он писался чисто под меня, поиграть. :v2_dizzy_kids:
По сравнению с UKNCBTL, совместимости с реальной УКНЦ в нем меньше, т.к. многое недописно. Но тоже имеет место быть.


http://s018.radikal.ru/i509/1202/52/8bed572b36a9.png


Некоторые особенности:

GUI:
Работает только в оконном режиме. При запуске окно масштабируется под размер рабочего поля классического экрана УКНЦ. Экран внутри окна всегда центрируется так, чтобы центр экрана эмулятора был в центре окна, как бы окно не растягивали. Если есть желание наблюдать иконки дисководов, а так же работать в дополнительных графических режимах (КГД, КЦГД, УКНЦ-oversvan), то окно следует растянуть по размеру эмулируемого экрана, либо же просто максимизировать до размера рабочего стола.
В верхней части рамки окна расположен слайдметер, отображающий загрузку процессора. Желтым цветом отображается время, затраченное на эмуляцию и рендеренье экрана. Оранжевым цветом отображается время, затраченное на общение с системой, в основном это отрисовка экрана в окне средствами DirectDraw.
На иконках дисков можно наблюдать перемещение головок дисководов. Цвет головки означает текущее действие. Белый - бездействие, голубой - чтение, красный - запись.

Консольное окно:
Открывается за окном эмулятора исключительно для отладочных целей. Можно не обращать внимания

Командная строка:
Все параметры, а их только два - имя образа диска-A, и образа диска-B, прописываются друг за другом в командной строке эмулятора. Пример: EmuStudio C:\Disk1.dsk C:\Disk2.dsk

Поддерживаемые форматы образов:
Только стандартные двухсторонние 80-дорожечные диски по 800кб. Образ только читается, обратно не записывается.

Режим совместимости с КГД ДВК:
При обращении программы к регистрам КГД (Контроллера Графического Дисплея - 400x286 точек, Ч/Б), происходит переключение в режим графики КГД. При выходе из приложения, работающего в режиме КГД, режим КГД выключается. Клавишей 'F6' можно принудительно выключить режим КГД (допустим, при зависании приложения, использующего КГД), однако, если программа продолжает работать с регистрами КГД, этот режим будет немедленно включен обратно.

Режим соместимости с КЦГД ДВК:
Если программа отсылает терминалу ESC-последовательность ESC-X (обращение к КЦГД), то автоматически активизируется режим отображения КЦГД (Контроллер Цветного Графического Дисплея - 400x240 - 16 цветов, 800x240 - 4 цвета, 400x480 - 16 цветов (чересстрочный), 800x480 - 4 цвета (чересстрочный)). Так же, можно вручную переходить в режим КЦГД по клавише 'F6', и обратно в режим отображения УКНЦ по клавише 'F7'. Причем, перед запуском некоторых программ, использующих КЦГД, желательно перейти в этот режим вручную, иначе программы либо определят чипсет, как КГД, отказавшись работать, либо же может быть выведена не совсем правильная информация в текстовом виде, что не помешает, но смутит доверчивых пользователей. Кроме того, некоторые текстовые игры, написанные для ДВК, лучше выглядят, а иногда и правильней работают, в режиме терминала КЦГД.
В отличие от режима КГД, КЦГД - это отдельный компьютер, который стартует одновременно с УКНЦ, и работает в фоне, выводя на свой терминал все, что выводится на экран терминала УКНЦ. При переключении в режим КЦГД, мы просто начинаем видеть этот экран, который до этого всегда работал в фоне. При активном режиме УКНЦ, все, что отправляется на терминал, отправляется одновременно и терминалу ПП УКНЦ, и терминалу КЦГД, однако ведущим является ПП УКНЦ, и он же задает временные характеристики работы. В режиме активного КЦГД, информация отправляется только на терминал КЦГД, чтобы не засорять экран УКНЦ информацией, являющейся для КЦГД графической. В данном режиме задающим временные характеристики уже является терминал КЦГД. Замечу так же, что клавиатура всегда используется УКНЦ, что может вызвать (и даже вызывает) глюки программ, использующих в режиме КЦГД опрос клавиатуры собственный, не стадартный.

Режим УКНЦ-overscan:
Некоторые программы, а точнее всего одна - 'LAND' желтого цвета, использует невидимые строчки внизу экрана, которые не отображаются на реальном УКНЦ, однако поддержаны в эмуляторе в режиме overscan, который включен всегда.

Процессоры:
В эмуляторе одновременно работают три одинаковых процессора К1801ВМ2. Это CPU - центральный процессор, частота 8МГц, PPU - периферийный процессор, частота 8МГц (на реальной УКНЦ 6.25МГц), GPU - процессор чипсета КЦГД, частота неопределена, но значительно выше реальной.
Процессор эмулируется достаточно точно, однако некоторые системные команды, необходимые, например, для работы в отладчике, в нем не реализованы. Так же неправильно реализованы тайминги работы с памятью, ввиду того не было взято в расчет торможение медленной памятью. Да и документация на тот момент имелась далеко не вся. Словом, процессор работает точно, но не полно. И немного быстрее нормы.

Чипсет УКНЦ:
Реализованы не все регистры, нет ловушки, нет менеджмента памяти ОЗУ ПП и пр.

Клавиатура:
Реализована) Раскладка только ЯВЕРТЫ. При нажатии системных для Windows клавиш, таких, как ScrollLock, Alt и т.д., они будут выполнять свои системные функции, и включать свои светодиоды.
Соответствие некоторых клавиш:

АР2 - ESC
K1-K5 - F1-F5
ПОМ - PrintScreen
УСТ - Scroll Lock
ИСП - Pause
СБРОС - F11
СТОП - F12
: - * (дополнительная клавиатура)
@ - Home
АЛФ - CapsLock
НР - Shift
УПР - LCtrl
ФИКС - LAlt
ГРАФ - RAlt

~ - Циклическая смена палитры RGB, GRB, Black/White, Black/White TV - для режима УКНЦ, и
Циклическая смена палитры Blue/White, Monochrome, Black/White, Black/White TV - для режима КГД ДВК


Скорость работы:
Эмулятор написан на чистом Си (не Си++), в Visual Studio 2003. Работает быстро даже на не очень быстрых компьютерах.
Скорость эмуляции завышена из-за нескольких факторов:
1) Эмулятор заточен исключительно на синхронность работы с кадровой разверткой. Ввиду этого, например, при 70Гц развертке, скорость будет завышена на 40%.
2) Процессор ВМ2 работает быстрее реала, ввиду отсутствия торможения медленной памятью.
3) Процессор PPU работает на 8МГц вместо 6.25МГц (мало влияет, но все же)
4) Процессор GPU работает на гораздо большей частоте, чем в КЦГД, кроме того, последовательные каналы передачи данных между КЦГД и CPU работают мгновенно, что так же изрядно прибавляет скорости.

Для замедления эмуляции можно воспользоваться клавишами 'PageUp' и 'PageDown', что, соответственно добавит и убавит лишние кадры задержки после каждого показанного кадра.

Звук:
Отсутствует.


О прилагаемых программах:

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

Игры:
LAN4 - Игра 'Land' для контроллера CDR.
LAND - Игра 'Land' для контроллера КГД ДВК.
LANDD - Игра 'Land' для контроллера КЦГД ДВК (желательно перед запуском перейти в режим КЦГД, нажав 'F6', иначе текстовая рекламная информация будет выведена в испорченном виде)
LANDR - Игра 'Land' для режима КЦГД, другой вариант, монохромная, на русском.
LANDE - Игра 'Land' для режима УКНЦ-overscan.
SHERIF - Игра 'Sheriff' для режима КГД ДВК.
SHERI2 - Игра 'Try You Luck in the Castle' для режима КГД ДВК.
CAT - Игра 'Кот-рыболов' для режима КГД ДВК.
AFGAN - Игра 'Milithary Maraphon' для режима КГД ДВК.

Замечание: В играх типа 'Land' следует выбирать скорость работы самую медленную, например, '7'.

Системные программы:
@CLCDEM - Демонстрация математической программы 'Калькулятор' для КЦГД ДВК. Обязательно запускать в режиме КЦГД ('F6'), иначе не запустится драйвер дисплея SKEY, и программа зависнет.
@FGRDEM - Демонстрационная программа для исследования функций. Запускать так же только в режиме КЦГД.
GMAN - Мощный графический редактор 'G-Man' для режима КЦГД.

Для чайников:
Запускать эмулятор так:
Emustudio Disk_Games.dsk
Далее в меню стрелочка 'вниз', затем 'Enter'. Будет загружаться система. Затем она спросит дату. Опять нажать 'Enter'. Затем можно будет набирать имя программы и нажимать 'Enter'. Для выхода из программы 'Ctrl-C'. Если это не помогло, то повторить действия по запуску эмулятора заново.
Так же можно запустить эмулятор сам по себе, а диск в него кинуть Drag'n'drop'ом (диск A), или Drag'n'Drop + Ctrl (диск B).

p.s.: Эмулятор точно работает под WinXP. На других системах особо не проверял.
p.p.s.: К режиму КЦГД ДВК просьба не относиться серьезно, т.к. он написан чисто для посмотреть, что же это такое.

hobot
01.02.2012, 09:04
Ну вот это надо-же !!!:eek_std: скрывать такое от Хобота преступление !!!
Будет ли автор не против если я размещу информацию об эмуляторе в шапке этой темы на old-games.ru (http://www.old-games.ru/forum/showpost.php?p=828719&postcount=1) ?

Alex_K
01.02.2012, 12:19
Вот это да-а-а-а-а!!! Я в шоке! :eek_std:
Titus, наверное это скриншоты с Вашего эмулятора на http://uk-nc.narod.ru?

Titus
01.02.2012, 15:00
Вот это да-а-а-а-а!!! Я в шоке! :eek_std:
Titus, наверное это скриншоты с Вашего эмулятора на http://uk-nc.narod.ru?
Стыдно сказать, да)

---------- Post added at 14:56 ---------- Previous post was at 14:55 ----------


Может имеет смысл передать часть исходников по ДВК Patron-у?
По ДВК исходников нет. Вернее, там нет ДВК. Только небольшой набор регистров КЦГД и его память. Всю инфу брал из документации, которую мне наши уважаемые ДВК'шнки с форума же и дали)

---------- Post added at 15:00 ---------- Previous post was at 14:56 ----------


Ну вот это надо-же !!!:eek_std: скрывать такое от Хобота преступление !!!
Будет ли автор не против если я размещу информацию об эмуляторе в шапке этой темы на old-games.ru (http://www.old-games.ru/forum/showpost.php?p=828719&postcount=1) ?
Размещай чего хочешь)

hobot
01.02.2012, 15:51
Стыдно сказать, да)
Уже! ))) И вот например уже успел побаловаться новым эмулятором !


http://savepic.net/2487490.png


Неоценимо понравилась анимация дисководов ))
Очень полезно при подозрении на зависание ! ))
:rolleyes_std:

Titus
01.02.2012, 16:01
Уже! ))) И вот например уже успел побаловаться новым эмулятором!
Неоценимо понравилась анимация дисководов ))
Очень полезно при подозрении на зависание ! ))
:rolleyes_std:
Ввиду наличия сканлайнов, скриншоты лучше не масштабировать, иначе испортятся. Странно, что у тебя в Knight такая большая желта полоска. Как будто перегрузка процессора.

Дискетки делал специально, чтобы видеть, чего происходит. А то ведь попробуй напиши поддержку FDD по одной документации)

BYTEMAN
01.02.2012, 16:04
Titus, супер, круть!!!!) Скорее бы ты читалку кассет зарелизил :)

Titus
01.02.2012, 16:04
Titus, супер, круть!!!!) Скорее бы ты читалку кассет зарелизил :)
Какую читалку? Для Спектрума? Я ее забросил)

Alex_K
01.02.2012, 16:06
Дискетки делал специально, чтобы видеть, чего происходит. А то ведь попробуй напиши поддержку FDD по одной документации)

А эмулируются реальные регистры 177130/177132, или где-то идет перехват обращений к п/п дисковода?

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

Titus
01.02.2012, 16:09
А эмулируются реальные регистры 177130/177132, или где-то идет перехват обращений к п/п дисковода?

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

Конечно эмулируются.

Да, отладчик не работает. Какие-то я там команды не дописал, а какие уже не помню)

BYTEMAN
01.02.2012, 16:24
Какую читалку? Для Спектрума? Я ее забросил)
(((((((((((((((((((

Titus
01.02.2012, 16:29
(((((((((((((((((((
Не расстраивайся, пиши в тему про кассеты)

newart
01.02.2012, 16:37
Какую читалку? Для Спектрума? Я ее забросил)
У тебя творческая импотенция?

За 5 (15?) лет ни одного завершенного релиза или хотя бы бета версии. :(

Titus
01.02.2012, 16:41
У тебя творческая импотенция?
За 5 (15?) лет ни одного завершенного релиза или хотя бы бета версии. :(
Импотенция - это отсутствие влечения/возможностей.
А у меня скорее множество несерьезных связей и увлечений.
Пока интересно, занимаюсь. А законченные проэкты - это по работе.

Вот так вот не даешь недоделки - хороший. Дашь - сразу злодей, почему не закончил)

hobot
01.02.2012, 16:51
А у меня скорее множество несерьезных связей и увлечений.
Коварный злодей! )))

-------------------------

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

Titus
01.02.2012, 21:07
Добавил в эмуль возможность изменять задержку между кадрами по 'PageUp' и 'PageDown', что позволит произвольно тормознуть эмулятор на n кадров, после каждого показанного кадра.

newart
01.02.2012, 21:18
Добавил в эмуль возможность изменять задержку между кадрами по 'PageUp' и 'PageDown', что позволит произвольно тормознуть эмулятор на n кадров, после каждого показанного кадра.
Вот бы нашелся человек хороший, который скинул бы видео всех поделок для сабжа.
А то эмулятор ведь не всякий осилит.

Titus
01.02.2012, 21:25
Вот бы нашелся человек хороший, который скинул бы видео всех поделок для сабжа.
А то эмулятор ведь не всякий осилит.
Хотя бы базу игр со скриншотами. Это было бы полезно.

Чего ж ты в эмуляторе не осилил? Набрать имя программы в командной строке?

anasana
01.02.2012, 22:48
Кстати, а чем бы таким нам всем в эмуляторы добавить сохранение видео, - я бы тоже хотел сохранялку именно игрового процесса, а не только скрины, был посматривал на опенсорсные модули для ХР/7, так они все или с какими-то левыми кодеками дополнительными, или некрасивые, что-ли...

Shadow Maker
01.02.2012, 23:19
Да никто сейв стейты не осилит никак, куда уж тут про видео...

Titus
01.02.2012, 23:59
А то пультовый отладчик в ПП не работает, программа вылетает по ошибке при попытке просмотреть память.
Кстати, где почитать о командах пультового отладчика?

newart
02.02.2012, 00:09
Чего ж ты в эмуляторе не осилил? Набрать имя программы в командной строке?
Качать лень.
Искать игры тоже.

Titus
02.02.2012, 00:23
Качать лень.
Искать игры тоже.
Значит оно тебе и не нужно.

newart
02.02.2012, 03:20
Значит оно тебе и не нужно.
И да и нет.
Время такое. Глянул, пролистал, удалил, забыл.

проф
02.02.2012, 11:56
Что-то Никита Зимин не отметился тут пока... И Феликс тоже...

hobot
02.02.2012, 14:57
Вот бы нашелся человек хороший, который скинул бы видео всех поделок для сабжа.
А то эмулятор ведь не всякий осилит.
Я готовлю обзор EMUStudio на совместимость в теме на игровом форуме, в самое ближайшее время, с галереей картинок разумеется )))

---------- Post added at 14:55 ---------- Previous post was at 14:54 ----------

в процессе получится сборник 100% запускаемых под него игрушек ))) Который со временем будет расти )))

---------- Post added at 14:57 ---------- Previous post was at 14:55 ----------


Искать игры тоже.
Искать ничего не надо, цепляете второй дискетой вот эту (http://pdp-11.nsk.ru/~hobot_lmb/ukdwk_archive/ukncbtlwebcomplekt/best_GAMES_UKNC/bestgamesUKNC.dsk) и тупо пробуете с неё все игры подряд ! )))

hobot
02.02.2012, 20:13
Интересное рядом )))

http://savepic.net/2433035.png

http://savepic.net/2440203.png


Подробно об игре "скоро" в эксклюзивном материале на игровом форуме

Titus
02.02.2012, 22:25
Hobot, похоже, у тебя размер шрифта в оконной рамке нестандартный, из-за чего иконка 'УКНЦ' масштабируется замыливаясь.

---------- Post added at 22:25 ---------- Previous post was at 20:47 ----------

Обновил версию.
Теперь работает NEWTET, который зависал из-за неправильной обработки ACLO CPU. Игра так устроена, что программа PPU постоянно дает команду 'сбой питания' (ACLO 1->0) CPU, и таким образом им управляет)

Titus
03.02.2012, 04:40
Вопрос к знатокам УКНЦ на счет регистра октета точки.
В некоторых программах с заливкой, она заливается у меня на эмуляторе мимо. Стал выяснять почему, вырисовывается такая картина. Программа пишет байты в регистр октета точки в цикле записи. Тогда как в инструкции написано, что для того, чтобы было рисование по маске, в этот регистр надо производить чтение-модификацию-запись. Т.е. при чтении загружается регистр цвета фона, а при записи уже на этот фон накладывается новое изображение. Почему же тогда программы, просто записывающие байт в регистр октета точки преспокойно рисуют по старому фону?

hobot
03.02.2012, 08:00
Hobot, похоже, у тебя размер шрифта в оконной рамке нестандартный, из-за чего иконка 'УКНЦ' масштабируется замыливаясь.

Ну наверно ))) Я не поклонник "по умолчанию" хотя иногда это и правильно и безопаснее, ведь ребята когда продукт выпускают не зря там что-то прописывают заранее, а иногда и генерится автоматом при инсталляции, меня вот тут form просветил, выяснилось что я юзал RT1150sj всю дорогу на грани фола, а всё потому, что не понимал важность прописанной в мониторе команды (вот оно как!) )))


Обновил версию.
Теперь работает NEWTET
Это замечательная новость, особенно потому, что я ещё ничего про ваш эмулятор не запостил на old-games, а программа уже обросла двумя очень важными обновлениями, ещё сутки выждать и ИТОшные сборнички заработают? И wd-rom можно будет юзать? )))


http://savepic.net/2429978.png

http://savepic.net/2484253.png

:redface:

Alex_K
03.02.2012, 11:23
Вопрос к знатокам УКНЦ на счет регистра октета точки.
В некоторых программах с заливкой, она заливается у меня на эмуляторе мимо. Стал выяснять почему, вырисовывается такая картина. Программа пишет байты в регистр октета точки в цикле записи. Тогда как в инструкции написано, что для того, чтобы было рисование по маске, в этот регистр надо производить чтение-модификацию-запись. Т.е. при чтении загружается регистр цвета фона, а при записи уже на этот фон накладывается новое изображение. Почему же тогда программы, просто записывающие байт в регистр октета точки преспокойно рисуют по старому фону?

Заметили таки! Да, я тоже помучился, когда писал редактор шрифтов FNT. А все довольно просто. В инструкции все правильно сказано насчет чтения-модификации-записи. А вот в описании на процессор 1801ВМ2 очень существенный момент упустили (его нет и в техописании, которое выкладывали Вы). А этот тонкий момент состоит в том, что по записи в источник словные и байтовые команды отличаются. Команд этих всего три - MOV(B), CLR(B) и MFPS. В байтовом варианте при записи приемника DST, он сначала прочитывается из памяти (фиктивное чтение), а затем записывается. В словном варианте производится безусловная запись приемника без его предварительного чтения. Такие тонкости относятся к MOV и CLR. Команда MFPS имеет только байтовый вариант, поэтому здесь всегда производится чтение-модификация-запись для приемника.
Поэтому, если надо наложить по старому фону, то можно сделать так:


TST @#177024
MOV R0,@#177024

или более быстро и просто:


MOVB R0,@#177024

Особенности работы этих команд проверены и на других регистрах, в частности на регистре данных приемника канала 0 177562. Если в регистре 177560 устанавливался бит готовности 7, то после этого производилась запись в регистр 177562. Сама по себе запись в этот регистр бесполезна. При словной записи бит готовности в 177560 не сбрасывался, а при байтовой записи сбрасывался, что подтверждает то, что к регистру 177562 применялась операция чтения. Сразу оговорюсь, что 1801ВП1-120, где находятся эти регистры, сигнал записи байта WTBT не обрабатывает.

Команды MOVB по отношению к регистру 177024 применяется и в системном ПЗУ УКНЦ при обработке графических функций (это где-то в адресах 140000-152000).

В эмуляторе UKNCBTL это уже учтено, исходники свободны, смотрите.

P.S. Сразу отмечу, что EmuStudio некорректно работает с регистрами контроллера дисковода. При чтении зараз большого объема данных он не читается, выдает ошибку. Из-за этого при исполнении команды DIR/BAD/FIL выдается ошибка "Too many bad blocks", нельзя загрузить большие исполнимые файлы (не смог GOBLIN, не грузилась дискета с JEK-ом, не загрузить TurboBasic, не работает Writer).

hobot
03.02.2012, 13:17
не смог GOBLIN
EmuSoft - заточен на игры ))) Goblin - отлично работают, обе версии причём и та ,что
на дискете с EmuStudio, и та что на сборнике игрушек для UKNCBTL )))


http://savepic.net/2481170.png
http://savepic.net/2467858.png

И вот такая публикация получилась, прошу всех желающих ознакомится.
http://www.old-games.ru/forum/showpost.php?p=842869&postcount=5

Titus
03.02.2012, 15:04
EmuSoft - заточен на игры ))) Goblin - отлично работают, обе версии причём и та ,что
на дискете с EmuStudio, и та что на сборнике игрушек для UKNCBTL )))

И вот такая публикация получилась, прошу всех желающих ознакомится.
http://www.old-games.ru/forum/showpost.php?p=842869&postcount=5

Что ты сделал с цветами в Гоблине, и зачем промасштабировал скриншоты в статье? Они же все испортились из-за этого!

---------- Post added at 15:02 ---------- Previous post was at 15:01 ----------


А этот тонкий момент состоит в том, что по записи в источник словные и байтовые команды отличаются. Команд этих всего три - MOV(B), CLR(B) и MFPS. В байтовом варианте при записи источника, он сначала прочитывается из памяти (фиктивное чтение), а затем записывается.
Вот это да. А не может быть такого, что это железо конкретных регистров так реагирует на байтовую запись?

---------- Post added at 15:04 ---------- Previous post was at 15:02 ----------


P.S. Сразу отмечу, что EmuStudio некорректно работает с регистрами контроллера дисковода. При чтении зараз большого объема данных он не читается, выдает ошибку. Из-за этого при исполнении команды DIR/BAD/FIL выдается ошибка "Too many bad blocks", нельзя загрузить большие исполнимые файлы (не смог GOBLIN, не грузилась дискета с JEK-ом, не загрузить TurboBasic, не работает Writer).

Вполне возможно. Хотя Турбобейсик у меня грузится, но не с той дискеты, с которой он поставлялся. Когда загружаюсь с другой системной, грузится. Заметил разницу, что с той дискеты, на которой он поставлялся, когда грузится, головка дисковода двигается гораздо медленнее. Гоблин тоже работает у меня.

Alex_K
03.02.2012, 15:09
EmuSoft - заточен на игры ))) Goblin - отлично работают, обе версии причём и та ,что
на дискете с EmuStudio, и та что на сборнике игрушек для UKNCBTL ))
hobot, что значит - заточен под игры? Игры во время работы используют возможности аппаратуры компьютера, а значит эмулятор должен эмулировать эту аппаратуру.
И насчет GOBLIN - повнимательней почитайте мой пост. Там рассказывается о некорректной реализации регистров контроллера дисковода 177130/177132, из-за этого при запросе на чтения большого объема данных возникает ошибка. GOBLIN-а я не смог запустить по этой причине. Использовал диск GAME2.DSK. Может расположение по дорожкам влияет как-то, не знаю, вопрос к автору. Исходников нет, да и отладчика тоже, сказать сложно.

---------- Post added at 15:09 ---------- Previous post was at 15:04 ----------


Вот это да. А не может быть такого, что это железо конкретных регистров так реагирует на байтовую запись?
У меня тоже была такая мысль, но я проверил на других регистрах, ниже я описал, что проверял на 177560/177562. Так что так работают MOVB, CLRB, MFPS.
А по поводу байтовой записи в блок регистров 177010-177056, то там на байтовую запись реагирует только регистр данных планов 1 и 2 177014. Все остальные игнорируют этот сигнал и в неиспользуемый байт пишется ноль.

Titus
03.02.2012, 15:11
У меня тоже была такая мысль, но я проверил на других регистрах, ниже я описал, что проверял на 177560/177562. Так что так работают MOVB, CLRB, MFPS.
А по поводу байтовой записи в блок регистров 177010-177056, то там на байтовую запись реагирует только регистр данных планов 1 и 2 177014. Все остальные игнорируют этот сигнал и в неиспользуемый байт пишется ноль.
Это надо проверить, пока не буду обновлять.

Patron
03.02.2012, 15:12
А не может быть такого, что это железо конкретных регистров так реагирует на байтовую запись?Т.е. что процессор 1801ВМ2 не выполняет циклов DATIO в командах MOVB, CLRB и MFPS..

Проверить это довольно просто - запустить тест времянок для команд MOV, MOVB, BIS и BISB ( с адресацией типа MOV R0, @#ADDR ) и сравнить время выполнения каждой из команд.

Alex_K
03.02.2012, 15:14
Т.е. что процессор 1801ВМ2 не выполняет циклов DATIO в командах MOVB, CLRB и MFPS..
Почему не выполняет. Как раз для приемника в MOVB,CLRB,MFPS выполняется цикл DATIO, а для MOV и CLR - только DATO.

hobot
03.02.2012, 15:16
Что ты сделал с цветами в Гоблине, и зачем промасштабировал скриншоты в статье? Они же все испортились из-за этого!

1.C цветами не делал ничего, так выглядит, извиняйте эмулятор и игру писал не я, я просто нажал PrtScr.
2.Для зарегистрированных пользователей картинки выглядят совсем по другому (честно-честно) ))) - ничего не масштабировал (повторяю) моё участие печать экрана в файл, загрузка файла на хостинг, линк на картинку в форуме )))

И вот ни одного мнения об обзоре ! )))


hobot, что значит - заточен под игры?
по моему это очевидно ))) Titus, в шапке сам признался, что делал эмуль с целью в игрушки поиграть. Суть моего ответа была в том, что заявленная игра прекрасно работает и более того одна из её версий даётся вместе с EmuStudio - та в которой жизни вечные и уровни немного другие и классическая со сборника игр для UKNCBTL в шапке темы (на игровом форуме) - вот для чего делался проверенный на запуск сборник игр??? Что бы потом не было вопросов - у меня не работает игра, а со сборника работает ))) В обоих эмуляторах! )))

Patron
03.02.2012, 15:18
Почему не выполняет. Как раз для источника в MOVB,CLRB,MFPS выполняется цикл DATIO, а для MOV и CLR - только DATO.В смысле - для приёмника :)

Titus
03.02.2012, 15:21
Т.е. что процессор 1801ВМ2 не выполняет циклов DATIO в командах MOVB, CLRB и MFPS..

Проверить это довольно просто - запустить тест времянок для команд MOV, MOVB, BIS и BISB ( с адресацией типа MOV R0, @#ADDR ) и сравнить время выполнения каждой из команд.

Вот как раз это я и собирался сделать)

Alex_K
03.02.2012, 15:25
В смысле - для приёмника :)
Возможно перепутал. Тогда тоже скажу аббревиатурой - DST.
Пример: в R0 - 1000, в R1 - 2000.
По команде MOV @R0,@R1 сначала читается по адресу 1000, а затем производится запись по адресу 2000. По команде MOVB @R0,@R1 сначала производится чтение по адресу 1000, затем чтение по адресу 2000, а затем байтовая запись по адресу 2000.

Titus
03.02.2012, 15:27
Исходников нет, да и отладчика тоже, сказать сложно.

Дисковод писал очень давно, и совсем про него не помню. Хочешь, сам посмотри.


static struct { // Определить структуру, описывающую дисководы
UINT8 Track, // Номер трека (00..79, при over-позицировании > 79)
Side, // Сторона (0 - нижняя головка, 1 - верхняя головка)
Motor, // Мотор (00 - выключен, иначе включен)
PrevMotor, // Предыдущее состояние мотора (для иконок дискет)
Mode, // Режим (00 - нет чтения/записи, 01 - чтение, 02 - запись)
Ready; // Готовность данных (00 - нет данных, иначе есть данные)
UINT8 PosType, // Текущее положение на треке (00 - межсекторное пространство, иначе сектор)
Sector; // Текущий сектор (0..9)
UINT32 CurrPos; // Текущая позиция в словах внутри сектора (0..511) либо внутри межсекторного пространства (0..nnnn)
UINT8 *ImagePTR; // Указатель на образ диска (образ 819200 байт)
UINT16 ControlSp[50];// Массив для размещения текущей межсекторной служебной информации
} Floppy[4];

UINT16 FASTC PPU_RdW_FDD_STATE(void) { // Регистр состояния Floppy-диска

UINT16 State = 0;
UINT8 Numb = 3 - (PPU_FDD_STATE & 0x3); // Numb - номер дисковода (0..3)

if (Floppy[Numb].Track == 0) // Если трек = 0, то
State |= 0x0001; // устанавливаем бит TR0

State |= 0x0002; // Дисковод готов к работе (всегда)

// State |= 0x0004; // [T] Запись на диск запрещена

if (Floppy[Numb].Ready) // Если есть готовность данных
State |= 0x0080;
else { // Иначе, если нет готовности данных, то синхронизация
if (Floppy[Numb].PosType) { // Если находимся на секторе, то автоматом
// перепозицируемся на следующую за сектором
// первую синхропоследовательность $A1A1
// (синхро заголовка сектора)
Floppy[Numb].CurrPos = 20; // Позицируемся на первую $A1A1
Floppy[Numb].PosType = 0; // межсекторного пространства
if ((Floppy[Numb].Sector +=1) > 9) // Перейти к следующему сектору
Floppy[Numb].Sector = 0; // Если достигли сектора 10, то переход к сектору 0
Floppy[Numb].ControlSp[22] = (Floppy[Numb].Track << 8) | // Прописываем в служебное поле
Floppy[Numb].Side; // номер трека / головки
Floppy[Numb].ControlSp[23] = ((Floppy[Numb].Sector + 1) << 8) | // номер сектора / длина
2; //
}
else { // Если находимся на межсекторном пространстве
if (Floppy[Numb].ControlSp[Floppy[Numb].CurrPos] == 0xA1A1) { // Если достигли синхропоследовательности
Floppy[Numb].Ready = 1; // то устанавливаем готовность данных
State |= 0x0080;
}
else {
if ((Floppy[Numb].CurrPos += 1) > 41) { // Если достигли конца служебной области
Floppy[Numb].CurrPos = 0; // Позицируемся на начало
Floppy[Numb].PosType = 1; // сектора
}
}
}
}

State |= 0x4000; // [T] Контрольная сумма всегда правильная

return(State);

}

UINT16 FASTC PPU_RdW_FDD_DATA(void) { // Регистр данных Floppy-диска

UINT16 Value;
UINT8 Numb = 3 - (PPU_FDD_STATE & 0x3); // Numb - номер дисковода (0..3)

if (Floppy[Numb].PosType) { // Если находимся на секторе (сектор 512 байт)

Value = *(UINT16*)(Floppy[Numb].ImagePTR + // Слово данных
((Floppy[Numb].Track << 1) + Floppy[Numb].Side) * 5120 +
(Floppy[Numb].CurrPos << 1) +
Floppy[Numb].Sector * 512);

Value = (Value >> 8) | ((Value & 0x00FF) << 8); // Обмен байтов в слове

Floppy[Numb].Mode = 1; // Режим 'чтение' (для цветовой индикации)

if ((Floppy[Numb].CurrPos += 1) > 255) { // Если достигли конца сектора
Floppy[Numb].CurrPos = 0; // Позицируемся на начало
Floppy[Numb].PosType = 0; // межсекторного пространства
if ((Floppy[Numb].Sector +=1) > 9) // Перейти к следующему сектору
Floppy[Numb].Sector = 0; // Если достигли сектора 10, то переход к сектору 0
Floppy[Numb].ControlSp[22] = (Floppy[Numb].Track << 8) | // Прописываем в служебное поле
Floppy[Numb].Side; // номер трека / головки
Floppy[Numb].ControlSp[23] = ((Floppy[Numb].Sector + 1) << 8) | // номер сектора / длина
2; //
Floppy[Numb].Mode = 0; // Режим 'бездействие' (для цветовой индикации)
}

}
else { // Иначе находимся на межсекторном пространстве

Value = Floppy[Numb].ControlSp[Floppy[Numb].CurrPos]; // Слово данных

if ((Floppy[Numb].CurrPos += 1) > 41) { // Если достигли конца служебной области
Floppy[Numb].CurrPos = 0; // Позицируемся на начало
Floppy[Numb].PosType = 1; // сектора
}

}


void FASTC PPU_WrW_FDD_STATE(UINT16 Data) { // Регистр состояния Floppy-диска

UINT8 Numb;

if (Data & 0x400) { // Если активен бит выбора дисковода (REZ)

Numb = 3 - (Data & 0x3); // Numb - номер дисковода (0..3)

if ((!(PPU_FDD_STATE & 0x200)) && (Data & 0x200)) { // Если смена бита WM 0->1,
Floppy[Numb].Mode = 2; // то включаем режим записи
Floppy[Numb].CurrPos = -1; // Текущая позиция в секторе -1 (для пропуска
// первого синхрослова $FBA1
}

PPU_FDD_STATE = Data;

if (PPU_FDD_STATE & 0x10) // Если включен двигатель дисковода
Floppy[Numb].Motor = 1; // то Motor = 1, иначе Motor = 0
else Floppy[Numb].Motor = 0;

Floppy[Numb].Side = (PPU_FDD_STATE & 0x20) >> 5; // Выбор номера головки

if (PPU_FDD_STATE & 0x80) { // Если установлен бит шага (ST), то
PPU_FDD_STATE &= 0xFF7F; // Сбросить бит шага
Floppy[Numb].Mode = 0; // Режим 'перемещение' (для цветовой индикации)
if (PPU_FDD_STATE & 0x40) { // Если направление шага к центру, то
if (Floppy[Numb].Track < MaxTrack)
Floppy[Numb].Track += 1;
else printf("Wrong Track: %d\n", Floppy[Numb].Track + 1);
}
else { // Иначе направление от центра
if (Floppy[Numb].Track > 0)
Floppy[Numb].Track -= 1;
}
}

if (PPU_FDD_STATE & 0x100) { // Если установлен бит инициализации (GOR)
Floppy[Numb].Ready = 0; // Сбросить бит готовности данных
}

}

return;

}

void FASTC PPU_WrW_FDD_DATA(UINT16 Data) { // Регистр данных Floppy-диска

UINT8 Numb = 3 - (PPU_FDD_STATE & 0x3); // Numb - номер дисковода (0..3)

if (Floppy[Numb].Mode == 2) { // Если активен режим записи

if ((SINT32)Floppy[Numb].CurrPos >= 0) { // Если позиция внутри сектора >= 0

*(UINT16*)(Floppy[Numb].ImagePTR // Записать слово на образ
+ ((Floppy[Numb].Track << 1) + Floppy[Numb].Side) * 5120
+ (Floppy[Numb].CurrPos << 1)
+ Floppy[Numb].Sector * 512) = Data;

}

if ((Floppy[Numb].CurrPos += 1) > 255) { // Если достигли конца сектора
Floppy[Numb].CurrPos = 0; // Позицируемся на начало
Floppy[Numb].PosType = 0; // межсекторного пространства
if ((Floppy[Numb].Sector +=1) > 9) // Перейти к следующему сектору
Floppy[Numb].Sector = 0; // Если достигли сектора 10, то переход к сектору 0
Floppy[Numb].ControlSp[22] = (Floppy[Numb].Track << 8) | // Прописываем в служебное поле
Floppy[Numb].Side; // номер трека / головки
Floppy[Numb].ControlSp[23] = ((Floppy[Numb].Sector + 1) << 8) | // номер сектора / длина
2; //
Floppy[Numb].Mode = 0; // Режим 'бездействие'
}

}

return;

}

Alex_K
03.02.2012, 15:34
Проверить это довольно просто - запустить тест времянок для команд MOV, MOVB, BIS и BISB ( с адресацией типа MOV R0, @#ADDR ) и сравнить время выполнения каждой из команд.
Зачем такие сложности. Я проверял на регистрах каналов 0, 1, 2, а также на стыке С2. Там регистр данных приемника на запись не реагирует, выдает только RPLY. Готовность приемника можно сбросить только чтением его регистра данных. Так вот командами MOVB,CLRB и MTPS это удавалось делать.

Ну а время исполнения будет естественно больше из-за лишнего чтения.

---------- Post added at 15:34 ---------- Previous post was at 15:32 ----------


Дисковод писал очень давно, и совсем про него не помню. Хочешь, сам посмотри.
Спасибо! Гляну. Исходники в UKNCBTL я бы все-таки не рекомендовал использовать в качестве примера. Может там и получше, но есть еще чего дорабатывать.

Titus
03.02.2012, 15:36
http://savepic.net/2481170.png
http://savepic.net/2467858.png
Вот эти цвета от игры с какого образа?

Patron
03.02.2012, 15:43
Зачем такие сложности.Сравнение времянок - простой, наглядный и универсальный способ изучения эмулируемого процессора.

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

До сих пор ни один из обладателей тестового стенда процессоров ВМ - не поинтересовался это сделать.

А без этого невозможно установить связь длительности цикла шины с задержкой выборки адресуемой памяти.

Titus
03.02.2012, 15:44
ИТОшные сборнички заработают? И wd-rom можно будет юзать? )))
ИТОшные сборники, кстати, застревают именно на этапе загрузки. Может тоже дело в дисководе. Какое-нибудь нестандартное обращение.

---------- Post added at 15:44 ---------- Previous post was at 15:43 ----------


До сих пор ни один из обладателей тестового стенда процессоров ВМ - не поинтересовался это сделать.

А без этого невозможно установить связь длительности цикла шины с задержкой выборки адресуемой памяти.
Циклы должны быть хорошо описаны в техническом описании. Разве нет?

Patron
03.02.2012, 15:51
Циклы должны быть хорошо описаны в техническом описании. Разве нет?Раскладки циклов на такты нет ни в одном описании. Нужно подключить к шине логический анализатор, прогнать одну и ту же команду с разными типами памяти ( ОЗУ, ПЗУ, регистр устройства ) и сравнить растактовки основных сигналов шины.

Alex_K
03.02.2012, 15:53
Жаль, что сравнивая времянки - невозможно определить, как процессорные такты распределяются внутри отдельных циклов шины (для этого нужен логический анализатор).
Согласен. Поэтому я и стал исследовать это на других регистрах, благо их хватало. Смотрел, чтобы чип не обрабатывал WTBT, ну и чтобы регистры не реагировали на запись (как раз подходят регистры данных приемника). Таких в УКНЦ на шине ЦП нашлось аж целых четыре штуки. Результаты получились одинаковые.
Думаю, что если сравните команды по времени выполнения, то у MOVB должно быть более длительное время.

Titus
03.02.2012, 15:54
Еще на счет турбобейсика.
При старте с системы, что на том же диске, турбобейсик во время загрузки пишет что-то типа 'rror reading overlay'. Иногда даже без буквы 'E' даже. На этой системе стоит какой-то Virtual Memory Driver by Alpharog. Причем, когда буквы 'E' нету, видно, что в момент ошибки идет много записи в регистр управления адресным пространством ПП. А именно биты 1-3 (биты выбора кассеты ПЗУ!). И головка дисковода на этой дискете перемещается раза в 4 медленнее, чем на других.

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

hobot
03.02.2012, 15:59
Вот эти цвета от игры с какого образа?
я понял, игра со сборника игр для UKNCBTL просто загрузочная дискета другая была, там на старте палитра меняется, ВОТ(!). Titus - это все лишь картинки, не надо так нервничать ))) И повторюсь движок форума так устроен ( я сам недавно заметил ) что когда я захожу просто без рега - да выглядит страшновато, захожу под своим аккаунтом - всё просто сногшибенно красиво ! ))) Опять же не я придумал что бы было так )))
А вот планируется ли возможность режима ЧБ-монитора для УКНЦ игр? ну типа как по F6 - врубаются желтенькие буковки (КЦГД), может быть как то так сделать оттенки серого? Было бы классно для некоторых игр (ИМХО:KNIGHT и ИТО-сборники лучше гораздо глядятся в ЧБ)

Alex_K
03.02.2012, 15:59
Циклы должны быть хорошо описаны в техническом описании. Разве нет?
Сами циклы DATI, DATO, DATIO может и описаны, но не описаны какие конкретно циклы использует та или иная команда с конкретными методами адресации.
А по исследованию с помощью лог.анализатора есть один нюанс - предварительная выборка команды. Скажет так - память заполнена командами MOV R0,@R1. Осуществляется переход по JMP на эту последовательность. Если бы не было предвыборки, то вперемешку следовали бы циклы DATI (чтение команды) и DATO (запись результата). Здесь же сначала пройдут два DATI(чтение команды и опережающее чтение следующей команды), а затем DATO. Потом это устаканится.

Patron
03.02.2012, 16:07
один нюанс - предварительная выборка командыЭто не столь важно, когда интерес направлен "внутрь цикла". Ведь главные вопросы:

1. Какова минимальная продолжительность каждого цикла шины в тактах (когда задержка памяти меньше одного такта).

2. Как изменятся эти продолжительности при увеличении задержки памяти на один такт.

Alex_K
03.02.2012, 16:08
Еще на счет турбобейсика.
При старте с системы, что на том же диске, турбобейсик во время загрузки пишет что-то типа 'rror reading overlay'. Иногда даже без буквы 'E' даже. На этой системе стоит какой-то Virtual Memory Driver by Alpharog. Причем, когда буквы 'E' нету, видно, что в момент ошибки идет много записи в регистр управления адресным пространством ПП. А именно биты 1-3 (биты выбора кассеты ПЗУ!). И головка дисковода на этой дискете перемещается раза в 4 медленнее, чем на других.

Тогда как при старте с другой системы, но при запуске этого же турбобейсика, с этой же дискеты, все грузится прекрасно. Значит от положения на диске и размера глюк не зависит.
Virtual Memory Driver by Alpharog - это мой драйвер виртуального диска. Никакого отношения он к регистру 177054 не имеет. Активируется он только командой SET VM ON, но никаких резидентов в ПП не оставляет.

А по поводу обращения к кассете ПЗУ. Да к ней идет всегда обращение, если по каналу 2 пришел левый пакет. Так что имеет смысл посмотреть работу каналов в режиме прерываний, может у Вас пропускаются какие-то данные или идет что-то лишнее. Еще может зависеть от драйвера MZ.

В UKNCBTL ведь работает. Я там с каналами помучился, немного нестандартно работают каналы 1 и 2, а также 0 со стороны ПП.

Titus
03.02.2012, 16:12
Еще может зависеть от драйвера MZ.

В UKNCBTL ведь работает. Я там с каналами помучился, немного нестандартно работают каналы 1 и 2, а также 0 со стороны ПП.

Что такое MZ?

Как нестандартно работают? Иначе, чем описано в документации?

---------- Post added at 16:12 ---------- Previous post was at 16:11 ----------


А вот планируется ли возможность режима ЧБ-монитора для УКНЦ игр? ну типа как по F6 - врубаются желтенькие буковки (КЦГД), может быть как то так сделать оттенки серого? Было бы классно для некоторых игр (ИМХО:KNIGHT и ИТО-сборники лучше гораздо глядятся в ЧБ)
Знаю я тебя) Чтобы потом опять заполонить обзоры черно-белыми скриншотами под предлогом 'так лучше смотрится' )))

Alex_K
03.02.2012, 16:16
Что такое MZ?

Как нестандартно работают? Иначе, чем описано в документации?
:confused: MZ - драйвер дисковода в RT-11 на УКНЦ, точнее MZ.SYS. Версий всяких дофига. Работает естественно через канал 2, передавая блок параметров. Описано все в книге "Работа с внешними устройствами", здесь же где-то и выкладывалось.

---------- Post added at 16:16 ---------- Previous post was at 16:14 ----------


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

Titus
03.02.2012, 16:54
Да, некоторых тонкостей не описано, а связаны эти тонкости с выставлением и снятием сигнала VIRQ - запроса на прерывание.
А подробнее?

hobot
03.02.2012, 17:14
Описано все в книге "Работа с внешними устройствами"
Наверное библиотека то же у нас вроде как общедоступная ))) (видимо надо побольше агрессии в продвижении архива и его содержимого)
http://pdp-11.nsk.ru/~hobot_lmb/ukdwk_archive/biblioteka/uknc_rsvu.djvu

---------- Post added at 17:14 ---------- Previous post was at 17:12 ----------


Знаю я тебя) Чтобы потом опять заполонить обзоры черно-белыми скриншотами под предлогом 'так лучше смотрится' )))
Ну тут ещё момент и поиграть самому в чб режиме иногда приятно бывает,а каждый
раз гонять монстра UKNCBTL для этого - расточительство )))

Alex_K
03.02.2012, 17:30
А подробнее?
Объяснять долго. Но как-нибудь постараюсь. У устройств с битами готовности (ГТ) и разрешения прерывания (РП), запрос на прерывание возникает тогда, когда предыдущее состояние (БГ .AND. РП = 0), а новое (БГ .AND. РП = 1), т.е. такое возможно когда установлен бит РП и устройство готово к приему/передаче информации, или устройство уже готово, а программа установила бит РП.
Соответственно запрос на прерывание можно снять тремя способами:
1. Снять бит готовности, т.е. прочесть/записать регистр данных, после этого бит ГТ станет равен нулю.
2. Очистить бит РП. Думаю без вопросов.
Эти два предыдущих способа обычно делаются при запрещенных прерываниях.
3. Ну и третий способ - удовлетворить запрос на прерывание, в этом случае устройство должно передать вектор.

А вот с третьим способом тонкости и начинаются. Представим себе, что запрос удовлетворили, прерывание произошло, начала исполняться п/п обработки прерывания. Пока биты ГТ и РП стоят в состоянии один, даже если разрешить прерывание, то устройство его требовать не будет, т.к. не был зафиксирован переход (БГ .AND. РП = 0). А вот теперь самое интересное - не будем читать/писать регистр данных, тем самым не трогаем бит ГТ, просто разрешим прерывания и перебросим бит РП (сначала в 0, затем в 1). Если это канал 0 со стороны ЦП или стык2 (1801ВП1-065), то будет зафиксировано изменение с (БГ .AND. РП = 0) на (БГ .AND. РП = 1), и будет снова затребовано прерывание. Если же это канал 0 со стороны ПП или каналы 1 или 2, то запроса увы не затребуется, несмотря на переход с (БГ .AND. РП = 0) на (БГ .AND. РП = 1). В этом случае правило перехода с (БГ .AND. РП = 0) на (БГ .AND. РП = 1) будет выполнено, если был прочитан/записан регистр данных (и соответственно сброшен бит ГТ).

Может слишком мудрено объяснил, но вот такие пироги...

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

Второй раз я столкнулся с этих, когда причесывал каналы 0, 1, 2 в UKNCBTL. Не грузилась дискета с редактором JEK от группы KUARKO. У них там в ОЗУ ПП грузился резидент KUARKO.SAV, который заменял почти все вызовы в системном ПЗУ своими. Во тоже пришлось помучиться.

---------- Post added at 17:30 ---------- Previous post was at 17:27 ----------


... монстра UKNCBTL для этого - расточительство )))
Вот исправит Titus все ошибки в своем эмуляторе, понавешает эмуляцию всяких устройств и превратиться EmuStudio во второй UKNCBTL.

Titus
03.02.2012, 17:43
Может слишком мудрено объяснил, но вот такие пироги...
А есть программы кроме jеk, чтобы проверить так у меня или нет реализовано?

Alex_K
03.02.2012, 17:59
А есть программы кроме jеk, чтобы проверить так у меня или нет реализовано?
Я все это исследовал в пультовом отладчике, поэтому программ у меня нет. Пультовый отладчик мне нравится, придумал, быстро реализовал, посмотрел.

Есть еще дискета с ФОДОС ТМ (FTMON). Так вот тест 691404 на EmuStudio не проходит (а этот тест связан с прерываниями).

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

Судя по номеру теста, не работает прерывание по T-разряду

Patron
03.02.2012, 18:06
Может слишком мудрено объяснилИначе говоря - (во втором случае) запрос прерывания возникает при переходе сигнала готовности из 0 в 1 и передаётся на шину или сразу (если установлен бит разрешения прерываний), или после его установки.

Т.е. имеет место некий "двуступенчатый триггер", передёргивание второй ступени которого (т.е. бита разрешения прерываний) не может вызвать повторное прерывание.

Так?

Alex_K
03.02.2012, 18:16
Иначе говоря - (во втором случае) запрос прерывания возникает при переходе сигнала готовности из 0 в 1 и передаётся на шину или сразу (если установлен бит разрешения прерываний), или после его установки.

Т.е. имеет место некий "двуступенчатый триггер", передёргивание второй ступени которого (т.е. бита разрешения прерываний) не может вызвать повторное прерывание.

Так?
Передергивание РП не может вызвать повторное прерывание, только если запрос на предыдущее прерывание был удовлетворен (был передан вектор) и не был прочитан/записан регистр данных. Если же программно запретить прерывания, то бит РП дергать можно сколько угодно (т.к. при запрещенных прерываниях само прерывание не происходит, нет передачи вектора). Если после этих передергиваний оставить РП в 1, и разрешить прерывания, то оно произойдет.

У меня смутное подозрение, что так работал и канал 0 со стороны ЦП. Но после того как сделали испытательную версию УКНЦ, на ней по всей видимости не смогли загрузить RT-11 (ну или ФОДОС), работа канала 0 со стороны ЦП была переделана. Интересно почему не сделали работу всех каналов одинаковой?

Patron
03.02.2012, 18:31
Передергивание РП не может вызвать повторное прерывание, только если запрос на предыдущее прерывание был удовлетворен (был передан вектор) и не был прочитан/записан регистр данных. Если же программно запретить прерывания, то бит РП дергать можно сколько угодно (т.к. при запрещенных прерываниях само прерывание не происходит, нет передачи вектора). Если после этих передергиваний оставить РП в 1, и разрешить прерывания, то оно произойдет.Об том и речь.

Похоже, что признак прерывания сначала попадает из бита готовности ГТ в "промежуточный бит" ПБ.

Правила при этом таковы:

1. Если ГТ устанавливается - ПБ устанавливается.
2. Если ГТ сбрасывается - ПБ сбрасывается.
3. Запрос прерывания выдаётся по AND ПБ и РП, при этом ПБ сбрасывается.

Alex_K
03.02.2012, 18:34
Правила при этом таковы:

Правила уже описаны в UKNCBTL. Вроде работает. Есть правда один тест графики TESTGR из Турбо-Бейсика, так там при выводе главного меню один символ пропадает, из-за чего, пока не выяснял, хотя переполнения буфера вроде нет (есть такая проблемка в УКНЦ).

Titus
03.02.2012, 18:34
Судя по номеру теста, не работает прерывание по T-разряду
У меня прерывания по T-разряду и нереализованы)

hobot
03.02.2012, 18:52
Вот исправит Titus все ошибки в своем эмуляторе, понавешает эмуляцию всяких устройств и превратиться EmuStudio во второй UKNCBTL.
Мне как пользователю теперь уже обоих эмуляторов в UKNCBTL нравится ценится возможность (при условии использования харда) компиляции своих исходников и общая функциональность, EmuStudio это ведь не совсем УКНЦ - это гибрид(уникальная разработка где в УКНЦ впаяли ДВКашные видео-контроллеры)я всего три для играюсь, НО(!) именно играюсь, причём уникально могу погонять родного КОТА и прочие ДВКашки ))) ИМХО:это ли не заточенность на игры? ))) И главное для меня (!) как для пользователя, что-бы как можно скорее в обоих эмуляторах НОРМАЛЬНО заработали флоппики и клавиатура ))) Я думаю всем от этого хорошо будет, а если Titus подвесит туда wd-rom + хард - так это на пользу только (как и ЧБ режим по F7 например ).

Alex_K
03.02.2012, 19:05
... что-бы как можно скорее в обоих эмуляторах НОРМАЛЬНО заработали флоппики и клавиатура ))) ...
Ну есть небольшая беда (а может и большая) с контроллером флоппи. Ну а с клавиатурой-то чего, вроде почти все размапили, работает, не подвисает.

BYTEMAN
03.02.2012, 19:27
Короче, теперь, после того, как сделали КНГМД и КНЖМД, надо переносить в ПЛИСину КГЦ и КЦГД, и делать картридж-расширялку для реальной УКНЦ :)

---------- Post added at 18:27 ---------- Previous post was at 18:25 ----------


КГЦ
КГД, очепятка.

hobot
03.02.2012, 19:32
Короче, теперь, после того, как сделали КНГМД и КНЖМД, надо переносить в ПЛИСину КГЦ и КЦГД, и делать картридж-расширялку для реальной УКНЦ
Если бы в реале была такая могучая МИКРО-ЭВМ УКНЦ МС0511(КГД,КЦГД) - это была бы мощь ))) Вот только организация режима работы (на уровне приложения) то есть программно или механически - тумблером каким-нибудь ?

---------- Post added at 19:32 ---------- Previous post was at 19:31 ----------

в идеале это надо делать на одном кристале год то уже 2012 на дворе поди )))

BYTEMAN
03.02.2012, 19:36
Не, УКНЦ должна оставаться такой, как она есть. А вот перевести КГД и КЦГД в плиску и сделать как расширялку - получилась бы просто мегамашина :) ДВК нынче редкость, а УКНЦ есть у многих. И не надо будет в итоге искать ДВК, т.к. все её возможности будет делать УКНЦ :)

hobot
03.02.2012, 19:41
И не надо будет в итоге искать ДВК, т.к. все её возможности будет делать УКНЦ Искать или таскать ))) Шутка - а не станет ли тогда УКНЦ стоить столько же сколько (пусть и убитая) ДВКашка? То есть неоправданно заоблачно?
Думаю что проект "одного кристала" вполне в духе времени всё ж, посмотрите на буржуев, они все свои раритеты по такому принципу воскрешают "примерно".

BYTEMAN
03.02.2012, 19:45
Я ДВК вживую (в сборе) не видел, попадались как-то плата процессора от ДВК-3 и КСМ, но я от них быстро избавился. Да и ДВК сейчас стоит немалых денех. Очень немалых. Настолько немалых, что (лично мне) ДВК сейчас неподъёмна (я сужу по молоточным ценам, да и недавно один знакомый тоже ДВК поднял по цене подержанного ноутбука).


Шутка - а не станет ли тогда УКНЦ стоить столько же сколько (пусть и убитая) ДВКашка?
УКНЦ и останется УКНЦ, а вот то, что в неё будет втыкаться....

---------- Post added at 18:45 ---------- Previous post was at 18:45 ----------


Думаю что проект "одного кристала" вполне в духе времени всё ж, посмотрите на буржуев, они все свои раритеты по такому принципу воскрешают "примерно".
А вот такое уже нах :( Будет тот же эмулятор. Аппаратный. Не интересТно.

Alex_K
03.02.2012, 19:48
Думаю что проект "одного кристала" вполне в духе времени всё ж, посмотрите на буржуев, они все свои раритеты по такому принципу воскрешают "примерно".

Есть уже один проект (http://bk0010.org/forum/?id=6393), правда возрождают супер-пупер БК-0010/11М.

BYTEMAN
03.02.2012, 21:45
Есть уже один проект, правда возрождают супер-пупер БК-0010/11М.
ИМХО, мне УКНЦ намного больше БК нравится... БК убога, не в обиду тем, кто почитает этот комп...

hobot
03.02.2012, 22:00
возрождают супер-пупер
а не надо супер пупер - надо правильную отечественную pdp11 на одном кристале забабахать, там и бк и укнц и видеоконтроллерам ДВКашным - всем места хватит, даже если не по самой последней технологии ( в плане микрометров? нанокилометров? "смайл"), этот супер ВМ-2012 чип на правильное гнездо сажается к нему тупо подрубается нормальная клава монитор современный а ПО стандартное пашет, это не эмуляция - это возрождение ! ))) и занимать он место не будет столько сколько квантовское и сэмзовское железо и позволит ещё очень долго играть в "кота рыболова" ))))))))))))))))))))))))))))))))))) не заботясь о пузырях, дохлых-полудохлых комплектующих и прочего редкостного железа (ух тема ушла далеко- от темы) , а оригинальные 80-90 машинки никто не отменяет, просто без
паяльника там трудновато )))

Titus
03.02.2012, 22:58
Правила уже описаны в UKNCBTL. Вроде работает. Есть правда один тест графики TESTGR из Турбо-Бейсика, так там при выводе главного меню один символ пропадает, из-за чего, пока не выяснял, хотя переполнения буфера вроде нет (есть такая проблемка в УКНЦ).
У меня буквы там не пропадают)

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


Судя по номеру теста, не работает прерывание по T-разряду
Этот вроде никаким софтом не используется.

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


И главное для меня (!) как для пользователя, что-бы как можно скорее в обоих эмуляторах НОРМАЛЬНО заработали флоппики и клавиатура )))
Где это клавиатура ненормально в EmuStudio работает?

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


Не, УКНЦ должна оставаться такой, как она есть. А вот перевести КГД и КЦГД в плиску и сделать как расширялку - получилась бы просто мегамашина :) ДВК нынче редкость, а УКНЦ есть у многих. И не надо будет в итоге искать ДВК, т.к. все её возможности будет делать УКНЦ :)
Сделать эти режимы 'втыкаемыми' в реальную УКНЦ сложновато, я думаю. КГД при работе отключает часть регистров УКНЦ, подставляя свои. КЦГД попроще, просто сидит на канале терминала.

Alex_K
03.02.2012, 23:07
У меня буквы там не пропадают)
А это еще неизвестно, ведь программы в ТурбоБейсике не запустить, там еще подстановка памяти через регистр 177054 не работает, там же весь экран твердыми знаками заполнен.

Этот вроде никаким софтом не используется.
Бит T используется в отладчиках. Пример - отладчик BUG с диска sysimage.dsk. В играх да, это по всей видимости не надо.

Titus
03.02.2012, 23:10
А это еще неизвестно, ведь программы в ТурбоБейсике не запустить, там еще подстановка памяти через регистр 177054 не работает, там же весь экран твердыми знаками заполнен.
Это я уже исправил)

Alex_K
03.02.2012, 23:25
Это я уже исправил)
А в какой версии? В 0.03а не работает.

Titus
04.02.2012, 00:28
А в какой версии? В 0.03а не работает.
В следующей. Просто не выложил, чего по каждому чиху выкладывать.

Titus
04.02.2012, 01:06
Попробуй в 0.03b. Там есть маппинг памяти PPU, а так же исправлена ошибка отсутсвия поддержки FPU-инструкций, из-за чего бейсик тоже вешался.

Titus
04.02.2012, 03:38
А все довольно просто. В инструкции все правильно сказано насчет чтения-модификации-записи. А вот в описании на процессор 1801ВМ2 очень существенный момент упустили (его нет и в техописании, которое выкладывали Вы). А этот тонкий момент состоит в том, что по записи в источник словные и байтовые команды отличаются. Команд этих всего три - MOV(B), CLR(B) и MFPS.

Провел кое-какие исследования на реале. Оказалось, что вы совершенно правы:

Сравнение времени выполнения байтовых и словных команд на CPU и PPU:

Мнемоника-1 CPU PPU Циклы Мнемоника-2 CPU PPU Циклы
------------------------------------------------------------------------------

MOV Rn,(Rn) 33.13 36 W MOVB Rn,(Rn) 40.62 52 RMW

CMP Rn,(Rn) 27.90 40 R CMPB Rn,(Rn) 27.90 40 R
BIT Rn,(Rn) 27.90 40 R BITB Rn,(Rn) 27.90 40 R
BIC Rn,(Rn) 40.62 56 RMW BICB Rn,(Rn) 40.62 52 RMW
BIS Rn,(Rn) 40.62 56 RMW BISB Rn,(Rn) 40.62 52 RMW

XOR Rn,(Rn) 40.62 56 RMW
ADD Rn,(Rn) 40.62 56 RMW
SUB Rn,(Rn) 40.62 56 RMW

CLR (Rn) 33.13 36 W CLRB (Rn) 40.62 52 RMW
COM (Rn) 40.62 56 RMW COMB (Rn) 40.62 52 RMW
INC (Rn) 40.62 56 RMW INCB (Rn) 40.62 52 RMW
DEC (Rn) 40.62 56 RMW DECB (Rn) 40.62 52 RMW
NEG (Rn) 40.62 56 RMW NEGB (Rn) 40.62 52 RMW
TST (Rn) 27.90 40 R TSTB (Rn) 27.90 40 R
ROL (Rn) 40.62 56 RMW ROLB (Rn) 40.62 52 RMW
ROR (Rn) 40.62 56 RMW RORB (Rn) 40.62 52 RMW
ASR (Rn) 40.62 56 RMW ASRB (Rn) 40.62 52 RMW
ASL (Rn) 40.62 56 RMW ASLB (Rn) 40.62 52 RMW
ADC (Rn) 40.62 56 RMW ADCB (Rn) 40.62 52 RMW

MFPS (Rn) 40.62 52 RMW
SWAB (Rn) 40.62 56 RMW
SXT (Rn) 33.13 36 W

Итого мы имеем результат - в нашем процессоре как класс отсутствуют циклы байтовой записи в память. Вместо них идут циклы RMW. Кстати, если вы заметили, цикл RMW PPU для словных и байтовых команд отличается на 4 такта из-за того, что ОЗУ PPU 8-битное, и слова записываются в два приема по 8 бит.

Alex_K
04.02.2012, 10:48
Попробуй в 0.03b. Там есть маппинг памяти PPU, а так же исправлена ошибка отсутсвия поддержки FPU-инструкций, из-за чего бейсик тоже вешался.
Уже значительно лучше, но символ в слове "Circle" также пропадает. Да и во время прохождения теста довольно много ошибок.

Кстати по поводу пропадающего символа. В UKNCBTL он стал пропадать после того, как была причесана обработка прерываний. Раньше фактически было так - обработано прерывание, затем команда. Потом стало так, как должен обрабатывать процессор - сначала все незамаскированные запросы на прерывание, а затем, когда не осталось запросов - уже команда.

В УКНЦ при выводе на экран (канал 0) есть ошибка, связанная с переполнением буфера. Может возникать ситуация, когда производится обработка очереди (полной) и возникает запрос на прерывание канала 0. Я этот момент уже описывал. Ярко он проявился на программе от Patron по подсчету CPS, проявление было как на реальной машине, так и на эмуляторе.

Titus
04.02.2012, 15:07
Уже значительно лучше, но символ в слове "Circle" также пропадает. Да и во время прохождения теста довольно много ошибок.

Может у тебя турбобейсик не такой? У меня ниче не пропадает)


http://s017.radikal.ru/i401/1202/ec/09be639dcc81.png

Alex_K
04.02.2012, 15:27
Может у тебя турбобейсик не такой? У меня ниче не пропадает)
Так же пропадает, правда не всегда, так 50 на 50. Попробуй выполни какой-нибудь короткий тест, например Colors Demo, и выйди после этого в меню нажатием любой клавиши.

Titus
04.02.2012, 15:34
Так же пропадает, правда не всегда, так 50 на 50. Попробуй выполни какой-нибудь короткий тест, например Colors Demo, и выйди после этого в меню нажатием любой клавиши.

А, да. Может не 50/50, но за несколько раз один раз выпала. Причем одна и та же буква. На UKNCBTL та же выпадает? Интересно, значит у нас у боих неправильно что-то эмулируется)

Patron
04.02.2012, 15:36
Потом стало так, как должен обрабатывать процессор - сначала все незамаскированные запросы на прерывание, а затем, когда не осталось запросов - уже команда.У реальной обработки прерываний есть ещё один небольшой аспект - запрос прерывания начинает обслуживаться строго через одну команду после его выставления.

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

Alex_K
04.02.2012, 15:49
У реальной обработки прерываний есть ещё один небольшой аспект - запрос прерывания начинает обслуживаться строго через одну команду после его выставления.

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

Но вопрос про задержку поставлен совершенно правильно. В UKNCBTL такой задержки нет. Если по каналу 0 что-то передается для ПП, то после записи со стороны ЦП, со стороны ПП сразу же возникает запрос на прерывание, а не должно, действительно, только при исполнении следующей команды. Аналогично, если байт был прочитан со стороны ПП, то со стороны ЦП требование для записи очередного байта должно возникнуть не сразу.
Тут скорее всего такое дело, что процессор читает регистр запросов на прерывания во время исполнения команды. Поэтому установка бита разрешения прерывания вызовет прерывание не после этой команды, а после следующей. Из-за этого и советуют бит разрешения прерывания очищать при запрещенных прерываниях, чтобы не возникало ситуации ошибки приема адреса вектора прерывания.

Titus
04.02.2012, 18:41
Обновил версию до 0.04a.
Изменения такие относительно 0.03a:
Сделан маппинг памяти PPU, поддержка FPU-инструкций, исправлены циклы Write->RMW для байтовых команд (спасибо Alex_K), сделана смена палитры RGB->GRB->Black/White по клавише '~', клавиша АР2 перенесена с '~' на 'ESC'.

Теперь работает Турбобейсик, корректно работает графика в 'спрайтовом режиме' и заливка там, где она не работала.
Однако КЦГД стал ругаться в консоли при нажатии '<--', когда стирать в строке уже нечего. Появилось это после изменения циклов байтовых команд с W на RMW. КЦГД так же работает, но просто ругается.

---------- Post added at 18:41 ---------- Previous post was at 18:31 ----------


Однако КЦГД стал ругаться в консоли при нажатии '<--', когда стирать в строке уже нечего. Появилось это после изменения циклов байтовых команд с W на RMW. КЦГД так же работает, но просто ругается.
Понятно, теперь он читает регистр, в который раньше только писал. Ниче страшного)

Alex_K
04.02.2012, 18:57
Обновил версию до 0.04a.
Значительно лучше, даже буковка почти перестала пропадать.

Однако КЦГД стал ругаться в консоли при нажатии '<--', когда стирать в строке уже нечего. Появилось это после изменения циклов байтовых команд с W на RMW. КЦГД так же работает, но просто ругается.
Понятно, теперь он читает регистр, в который раньше только писал. Ниче страшного)
Даже могу сказать почему. Ругаться будет и после нажатия неправильной комбинации, которую не поддерживает SL. Просто SL в этом случае выдает звуковой сигнал управляющим кодом 7, а КЦГД сам пищать не умеет, он просто дает клавиатуре МС7004 команду подать звуковой сигнал. Общение с клавиатурой сделано через 1801ВП1-065. У неё регистры данных и читаются и пишутся в обоих направлениях с выдачей RPLY, просто в приемнике запись уходит в никуда, а в передатчике по чтению читается адрес вектора прерывания приемника.

Titus
04.02.2012, 19:09
Значительно лучше, даже буковка почти перестала пропадать.
Что самое интересное, я это не трогал)
Она и раньше один раз из 5 или 10 пропадала только)

Alex_K
04.02.2012, 19:37
Что самое интересное, я это не трогал)
Она и раньше один раз из 5 или 10 пропадала только)
Да-а-а!!! Вот такая вот загадка. Неплохо было бы на реале подергать, если выпадет, то так в принципе и надо.

hobot
04.02.2012, 20:05
Что самое интересное, я это не трогал)
Она и раньше один раз из 5 или 10 пропадала только)
И Так, ES0.04a: заработала ещё одна игра POCKER.SAV - графич. кости со сборника игр для UKNCBTL - раньше вис с чёрным экраном !!!

Titus, предлагаю поправленный вариант дискеты прилагаемой к EmuStudio.

Состав дискеты.


Image : ESGames.dsk

Format : DSK
Size : 800 Kb

Volume ID: ES_GAMES
Owner : ES0.04a

File Blocks Date Bytes
---------- ------ ----------- ----------
SWAP .SYS 27 17-Jun-1997 13'824
RT11SJ.SYS 68 17-Jun-1997 34'816
ME .SYS 2 17-Jun-1997 1'024
TT .SYS 2 17-Jun-1997 1'024
MZ .SYS 4 17-Jun-1997 2'048
LD .SYS 8 17-Jun-1997 4'096
LP .SYS 11 17-Jun-1997 5'632
NC .SYS 29 17-Jun-1997 14'848
SL .SYS 10 19-Jan-1988 5'120
STARTS.COM 1 17-Jun-1997 512
SETGEN.SAV 29 17-Jun-1997 14'848
DIR .SAV 19 17-Jun-1997 9'728
LAND .SAV 30 18-Oct-1987 15'360
LANDD .SAV 9 30-Nov-1989 4'608
GMAN .SAV 52 04-Dec-1989 26'624
MEDRIV.SAV 7 17-Jun-1997 3'584
DF .SAV 10 17-Jun-1997 5'120
SKEY .SAV 34 12-Nov-2011 17'408
CLCDEM.SAV 93 27-May-2009 47'616
FGRDEM.SAV 61 27-May-2009 31'232
KEY .SAV 34 12-Nov-2011 17'408
CAT .SAV 52 07-Dec-1988 26'624
SHERIF.SAV 24 14-May-1987 12'288
SHERI2.SAV 24 26-Dec-1988 12'288
LANDE .SAV 49 17-Jun-1997 25'088
RDWR .SAV 2 17-Jun-1997 1'024
SPEED .SAV 3 17-Jun-1997 1'536
TSGD .SAV 5 17-Jun-1997 2'560
DMP .SAV 2 17-Jun-1997 1'024
FONTUK.SAV 5 17-Jun-1997 2'560
SPD .SAV 20 17-Jun-1997 10'240
PIP .SAV 29 10-Mar-1983 14'848
GRAPH .MAK 17 27-May-2009 8'704
FGRDEM.COM 1 27-May-2009 512
SHRIFT.001 1 27-May-2009 512
SHRIFT.MAK 1 27-May-2009 512
CLCDEM.COM 1 27-May-2009 512
GRAFIK.001 1 27-May-2009 512
GRAFIK.002 1 27-May-2009 512
GRAFIK.MAK 1 27-May-2009 512
GMAN .LST 58 20-Mar-1990 29'696
GRES .BIN 9 04-Dec-1989 4'608
BANK .FNT 68 17-Jun-1997 34'816
DUP .SAV 45 29-Feb-1984 23'040
UCL .SAV 2 31-Dec-1999 1'024
< UNUSED > 625 320'000
---------- ------ ----------- ----------
45 Files, 961 Blocks
625 Free blocks

Список изменений

Ничего(из игр и программ) не удалено.
Поправил команды загрузки системы, убрал от туда обращение
к отсутствующему на диске SC.SAV - что-бы в конце загрузки
не ругался. Добавил системные PIP.SAV,DUP.SAV,UCL.SAV ;-)
Заменил версию драйвера SL.SYS и настроил в ней две очень
удобных команды
; = Dir/Fu/Vo/Bl в режиме < auto
? = Run в режиме < auto
Добавил в стартовые команды (самой последней) показать
все .SAV на системном диске.


-----------------------------------------------------------
!!! Обновил образ дискеты - запрос даты на загрузке выключен !!!
(и почему я его сразу не отключил ?)

:redface:

http://savepic.net/2489430.png

Titus
05.02.2012, 03:43
Интересно теперь собрать список программ, которые НЕ работаю или работают глючно. Преимущественно интересуют меня игры, но и вообще программы.

ZEman
05.02.2012, 08:18
Titus, планируется ли добавление какого-нибудь интерфейса в эмулятор, ну хоть самого простого ?
а то вводить команды через консоль это ужас какой-то.

Titus
05.02.2012, 15:27
Titus, планируется ли добавление какого-нибудь интерфейса в эмулятор, ну хоть самого простого ?
а то вводить команды через консоль это ужас какой-то.
Честно сказать - нет. Во всяком случае пока.

hobot
05.02.2012, 18:11
Titus, планируется ли добавление какого-нибудь интерфейса в эмулятор
Нужно три кнопки добавить "запустить ДВКашного Кота", "запустить УКНЦшного Кота" и "Утопить Кота" )))))))))))))))

Titus, а планируется ли добавление ЧБ-режима для УКНЦигр?
Да и ДВКашный Digger - графическая классическая игра,под монохромный или цветной контроллер на двк была? на дискете (которая к эмулятору) место для него точно есть ))))
:redface:

про проблемы с запуском игр и программ в ES для этого и открытое тестирование запущено, так ведь? Будем в этой теме
отписываться ))) Пока вижу что с ИТО-сборниками вопрос так и не решился, зато пара игр УКНЦшных заработало в 4 альфе (NEWTET и POCKER).

Titus
05.02.2012, 19:24
Titus, а планируется ли добавление ЧБ-режима для УКНЦигр?
Да и ДВКашный Digger - графическая классическая игра,под монохромный или цветной контроллер на двк была? на дискете (которая к эмулятору) место для него точно есть ))))
Если ты будешь внимательно читать посты в этой теме, то заметишь, что ч/б режим уже есть. А заодно и еще найдешь неотвеченные вопросы, которые заданы были тебе)

Конечно Диггер был.

hobot
05.02.2012, 20:29
RGB->GRB->Black/White по клавише '~',
Ага увидел, действительно проглядел !

Ну это совсем другое дело (вот оно предсказанные чб скриншоты)
http://savepic.net/2458499.png

А по поводу клавиш на большой машине с полно размерной клавиатурой всё норм(проверил) , дело в том, что на ноуте у меня проблемы с ДКЛ у всех
эмуляторов (модульный эмулятор Patrona, UKNCBTL и вот в список добавился EmuStudio), просто не хотел расстраивать тебя раньше времени )))

Titus
05.02.2012, 20:46
А по поводу клавиш на большой машине с полно размерной клавиатурой всё норм(проверил) , дело в том, что на ноуте у меня проблемы с ДКЛ у всех
эмуляторов (модульный эмулятор Patrona, UKNCBTL и вот в список добавился EmuStudio), просто не хотел расстраивать тебя раньше времени )))
Что за проблема?

hobot
06.02.2012, 01:45
Что за проблема?
я пока не готов именно по EmuStudio конструктивно ответить, надо ещё раз перепроверить.

Titus
07.02.2012, 04:32
Позапускал эмулятор у друзей на LCD мониках и еще раз утвердился во мнении, что все LCD моники портят плавную попиксельную анимацию. А именно, если включить плавный рулон в системе, и сделать, например, DIR, то при движении изображения вверх, буквы будут немного смазываться и терять яркость. Этот вопрос уже поднимался в теме про Dizzy-AGE игры с плавным скроллингом. На CRT мониторах (и телевизорах) все идеально.

p.s.: Если у кого-то из владельцев LCD-моников такого эффекта нет, отпишитесь.

Patron
07.02.2012, 12:27
при движении изображения вверх, буквы будут немного смазываться и терять яркостьЭто особенности технологии матриц TFT. Параметр "время переключения точки". Чем больше это время - тем дольше точка "помнит" своё состояние. Визуально проявляется в снижении контраста динамичных изображений, снижении контраста и резкости движущихся изображений и появлении "шлейфов".

ZEman
07.02.2012, 13:19
используйте мониторы с IPS матрицей и будет вам щастье.
у меня Dell 2007WFP с S-IPS матрицей картинка идеальная, косяков нет, ЭЛТ и TуFTа-мониторы курят в сторонке.

Titus
07.02.2012, 14:25
используйте мониторы с IPS матрицей и будет вам щастье.
у меня Dell 2007WFP с S-IPS матрицей картинка идеальная, косяков нет, ЭЛТ и TуFTа-мониторы курят в сторонке.
Сними на видео плавный скроллинг на своем мониторе.

hobot
07.02.2012, 14:31
Если у кого-то из владельцев LCD-моников такого эффекта нет, отпишитесь.
у меня на 12" матрице на буке этот эффект минимален, поскольку матрица высокой четкости и заточена для HD видео - и актион видео игр, углы обзора для современных TFT стандартны, поэтому предлагаю забить поскольку Patron, абсолютно правильно написал, так-же возможно что моник у ваших знакомых древний.

ZEman, не стоит начинать холи-вары про типы матриц и очевидные вещи писать, лучше цену на свою матрицу напишите )))


Titus, если захочешь матрицу себе бери только IPS (http://ru.wikipedia.org/wiki/%D0%96%D0%9A-%D0%B4%D0%B8%D1%81%D0%BF%D0%BB%D0%B5%D0%B9#IPS.2C_ .D0.B8.D0.BB.D0.B8_SFT_.28Super_Fine_TFT.29) и желательно от разработчика технологии (NEC).

Titus
07.02.2012, 14:36
Это особенности технологии матриц TFT. Параметр "время переключения точки". Чем больше это время - тем дольше точка "помнит" своё состояние. Визуально проявляется в снижении контраста динамичных изображений, снижении контраста и резкости движущихся изображений и появлении "шлейфов".
Мне кажется, тут несколько иной эффект. Основную роль в потере яркости движущегося изображения играет не послесвечение точки, а недосвечение новой зажженной точки. Т.е., например, точка сместилась с позиции 100 на позицию 101. При этом в позиции 100 она выключается, а в 101 включается. Выключается она быстрее, чем успевает разгореться новая. Отсюда и потеря яркости.

---------- Post added at 14:36 ---------- Previous post was at 14:35 ----------


если захочешь матрицу себе бери только IPS (http://ru.wikipedia.org/wiki/%D0%96%D0%9A-%D0%B4%D0%B8%D1%81%D0%BF%D0%BB%D0%B5%D0%B9#IPS.2C_ .D0.B8.D0.BB.D0.B8_SFT_.28Super_Fine_TFT.29) и желательно от разработчика технологии (NEC).
Я не хочу себе LCD по нескольким причинам, в том числе по описанной выше. Когда кто-то мне покажет матрицу, где при движении так же плавно, как на CRT, тогда одной причиной станет меньше)

Patron
07.02.2012, 14:44
Выключается она быстрее, чем успевает разгореться новая. Отсюда и потеря яркости.Так и есть :)

Время переключения точки = время включения точки + время выключения точки. При этом время включения больше, чем время выключения.

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

Titus
07.02.2012, 14:55
Для борьбы с этим недостатком некоторые матрицы имеют режим "овердрайв", при котором яркость включающейся точки сначала "разгоняется" сильнее чем надо, а затем уменьшается до целевого значения - так (в итоге) получается быстрее, чем асимптотически выходить на требуемую яркость.


Вот надо на такой матрице посмотреть.

---------- Post added at 14:55 ---------- Previous post was at 14:49 ----------


Время переключения точки = время включения точки + время выключения точки.
Это неправильное тождество) включение и выключение происходит одновременно, а не друг за другом)

Patron
07.02.2012, 14:56
Вот надо на такой матрице посмотреть.На медленных матрицах попиксельный рулон настолько ужасен, что в Windows его приходится отключать:

Свойства обозревателя - Дополнительно - Обзор - Использовать плавную прокрутку - НЕТ

Titus
08.02.2012, 05:16
Чего-то никто из ДВК'шников не отписался о возможностях работы в режиме КЦГД.:v2_unsur:

Titus
09.02.2012, 05:45
Небольшое обновление.
В список палитр УКНЦ добавлена еще одна. Теперь их 4:

RGB,
GRB,
Black/White
Black/White TV (засветленный уровень черного, как в старых телевизорах и мониторах)

Так же добавлена возможность переключать палитры режима КГД ДВК:

Blue
Monochrome (цвета срисованы с фотки настоящего монохромного монитора)
Black/White
Black/White TV

Кроме того, из консоли убрана лишняя информация о записи в КЦГД-регистры, возникшая из-за изменений в прошлой версии.

Далее, в оконном (не полноэкранном) режиме, окно теперь принимает размеры текущего эмулируемого графического режима (УКНЦ, КГД, КЦГД).

А так же, сделана загрузка по умолчанию диска с именем System.dsk (если не указано иное имя), на тот случай, если кому-то лениво набирать каждый раз в консоли имя диска.

И еще в комплекте теперь подправленный диск от hobot'а, в который я добавил 4 новых игрушки от ДВК - LAND2, MOTO, PIFPAF, FIGHT. Что самое интересное, игрушка FIGHT оказалась под КЦГД ДВК! Теперь это вторая игрушка под этот экзотический режим. Правда, управляться не хочет, но показывает.

http://s018.radikal.ru/i500/1202/9d/28a60aa5ccae.png

Titus
10.02.2012, 01:01
Похоже, я и hobot - единственные пользователи эмулятора)

hobot
10.02.2012, 01:16
я и 11 Titus ))))))

anasana
10.02.2012, 14:25
Похоже, я и hobot - единственные пользователи эмулятора)
Очень думаю, что это не совсем так ;)

hobot
10.02.2012, 22:17
Titus, такой момент, УКНЦшный Digger.sav нормально работает, а ДВКашный
виснет? А хотелось-бы именно ДВКашный стартануть )))
http://savepic.net/2447173.png

Titus
10.02.2012, 22:23
Titus, такой момент, УКНЦшный Digger.sav нормально работает, а ДВКашный
виснет? А хотелось-бы именно ДВКашный стартануть )))
http://savepic.net/2447173.png
Фиг поймет, чего он виснет. Пока не разбирался. И не только он. Еще то ли садовник виснет, то ли какая-то еще.

hobot
10.02.2012, 22:27
Еще то ли садовник виснет, то ли какая-то еще.
Там видно что он честно пытается стартануть, эмулятор автоматом включает режим
КГД и всё ))) Тишина ))) Играем значит в УКНЦшный пока что )))

Titus
10.02.2012, 23:23
Зато я примерно понял, почему не загружаются некоторые диски, например, ITO.
Судя по всему, в загрузчике есть некий счечтик неудавшихся попыток поиска маркера заголовка сектора, при каждом промахе он уменьшаяется, уменьшается пока не кончится. Предполагаю так, что если файл длинный, то в течение его загрузки этих промахов больше, и он не догружается до конца, выдавая ошибку 104 (как раз ошибка синхронизации).
Другой вопрос, почему он промахивается... Это надо посмотреть.

Mad Killer/PG
10.02.2012, 23:31
Titus, не один ты с hobot, ой не один:)

Alex_K
10.02.2012, 23:43
Судя по всему, в загрузчике есть некий счечтик неудавшихся попыток поиска маркера заголовка сектора, при каждом промахе он уменьшаяется, уменьшается пока не кончится. Предполагаю так, что если файл длинный, то в течение его загрузки этих промахов больше, и он не догружается до конца, выдавая ошибку 104 (как раз ошибка синхронизации).
Другой вопрос, почему он промахивается... Это надо посмотреть.
А чтобы не промахивалось при переходе на дорожку надо в памяти строить ее "сырой" образ со всеми межсекторными промежутками, синхрозонами, маркерами. Тогда с ней легче работать. Ну и помнить, что маркер это не только байт 0xA1, а байт с пропущенным синхроимпульсом, поэтому при поиске маркера байты 0xA1 в зоне данных пропускаются, а находятся только в заголовке. Также диск надо крутить, т.е. переходить на следующее слово каждые 64 мкс.

Titus
11.02.2012, 00:11
Ну и помнить, что маркер это не только байт 0xA1, а байт с пропущенным синхроимпульсом, поэтому при поиске маркера байты 0xA1 в зоне данных пропускаются, а находятся только в заголовке. Также диск надо крутить, т.е. переходить на следующее слово каждые 64 мкс.
У меня сырой образ MFM не строится в памяти, как ты видел по исходникам. В связи с этим A1А1 могут попасться и внутри сектора. Думаю, что именно это и дает ложную синхронизацию. Кроме того, в загрузчике сделано так, что если при поиске маркеа заголовка найден маекер данных, то по таймеру пропускается один сектор. А у меня эти задержки не учитываются, и за время отсутствия обращения к диску, диск НЕ прокручивается, а стоит на месте. В результате программа думает, что она уже стоит на пробеле идущем, после блока данных, и начинает с ним синхронизироваться. А его-то и нету. Она опять сбивается и снова ищет пробел, исчерпывая счетчик.
Хотя, по-хорошему, если сделать настоящий сырой образ MFM в памяти, то будет работать по-любому все)

---------- Post added 11.02.2012 at 00:11 ---------- Previous post was 10.02.2012 at 23:58 ----------

Интересно, что когда сам что-то делаешь и выкладываешь готовое, все скачивают втихмолку. А когда начинаешь публично обсуждать проблемы, сразу появляется оживление. Похоже, народу не столь важно получить что-то рабочее, сколь поучавствовать в процессе)

Alex_K
11.02.2012, 00:17
У меня сырой образ MFM не строится в памяти, как ты видел по исходникам. В связи с этим A1А1 могут попасться и внутри сектора.
....................................
Хотя, по-хорошему, если сделать настоящий сырой образ MFM в памяти, то будет работать по-любому все)
Да, правильнее строить в памяти "сырой" образ, легче с ним работать. А насчет того, что будет работать все, это зависит от того как правильно эмулируется контроллер. И самое главное помнить, что все состояния зависят от состояния контроллера, а не дисководов. Т.е., если контроллер нашел маркер и перешел в режим чтения данных, то он будет так в нем и оставаться, если даже переключать дисководы (т.е. с одного привода на другой). Единственно от присоединенного дисковода зависят только индексное отверстие и дорожка 0.

И не надо образ MFM. MFM это совершенно другое, для эмуляции контроллера это не надо, достаточно только "сырого" образа с двоичными данными.

Titus
11.02.2012, 00:19
И не надо образ MFM. MFM это совершенно другое, для эмуляции контроллера это не надо, достаточно только "сырого" образа с двоичными данными.
В сыром двоичном образе (не MFM) нет информации A1 с неправильным синхробитом.
Кстати, в сырой MFM-образ можно подсунуть любую дискету с защитой. Хотя, на УКНЦ вроде таких не было.

Alex_K
11.02.2012, 00:21
Интересно, что когда сам что-то делаешь и выкладываешь готовое, все скачивают втихмолку. А когда начинаешь публично обсуждать проблемы, сразу появляется оживление. Похоже, народу не столь важно получить что-то рабочее, сколь поучавствовать в процессе)
Естественно, делать то самому лень, надо время, усилия. А тут насоветовал, кто-то сделал, получилось, и можно воспользоваться результатами чужого труда.
Но если честно, то программирование, все-таки творческая вещь, когда нет желания, то и делать не хочется. Появилось - можно многое сделать. Сейчас у меня такого желания нет, потому и советую, что знаю.

Titus
11.02.2012, 00:23
Естественно, делать то самому лень, надо время, усилия. А тут насоветовал, кто-то сделал, получилось, и можно воспользоваться результатами чужого труда.
Но если честно, то программирование, все-таки творческая вещь, когда нет желания, то и делать не хочется. Появилось - можно многое сделать. Сейчас у меня такого желания нет, потому и советую, что знаю.

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

Alex_K
11.02.2012, 00:24
В сыром двоичном образе (не MFM) нет информации A1 с неправильным синхробитом.
Под MFM я представляю представление информации в том виде, как она записывается контроллером и дисководом на диск, т.е. каждый двоичный бит состоит из двух MFM-битов, т.е. "1" - это 01, "0" после "1" - 00, "0" после "0" - 10. Естественно в данном случае желательно иметь два массива - собственно данные и данные с пропусками синхроимпульсов. Так оно и сделано в UKNCBTL.

Titus
11.02.2012, 00:26
Под MFM я представляю представление информации в том виде, как она записывается контроллером и дисководом на диск, т.е. каждый двоичный бит состоит из двух MFM-битов, т.е. "1" - это 01, "0" после "1" - 00, "0" после "0" - 10. Естественно в данном случае желательно иметь два массива - собственно данные и данные с пропусками синхроимпульсов. Так оно и сделано в UKNCBTL.
О, как. А я думал, там FDD вообще не эмулируется, только перехватывается)

Alex_K
11.02.2012, 00:28
Кстати, в сырой MFM-образ можно подсунуть любую дискету с защитой. Хотя, на УКНЦ вроде таких не было.
Если делать реальный MFM, то тут надо эмулировать внутреннюю работу 1801ВП1-128. Я по большей части представляю как она работает внутри. Но программирование ее работы на языке высокого уровня не очень приятное занятие, т.к. в ней идет работа все-таки с потоком последовательных битов. В случае ее эмуляции данные надо обрабатывать каждые 2 мкс.

hobot
11.02.2012, 00:29
Titus, тут вот есть предложение приложенного Кота взять на перевоспитание )))
Кот немного странный = размер меньше чем у того который у тебя для КГД, но и не УКНЦшный, по косвенным данным это переделка ДВКашного для БК0011 ??? Но переделка с Кота под КЦГД (???) Может на досуге посмотришь что там с ним?

Alex_K
11.02.2012, 00:33
О, как. А я думал, там FDD вообще не эмулируется, только перехватывается)
Если про UKNCBTL, то это наверное первый эмулятор где более-менее точно съэмулировали 1801ВП1-128. Феликс сначала сделал ее только на чтение, а уже потом Никита с моей помощью причесал ее работу и сделал запись.
Но все равно еще не все так хорошо, огрехи есть, бывает подвисает во время чтения (кстати помогает передернуть дискету), бывает не записывает (но здесь может некорректно срабатывать п/п перевода "сырых" данных обратно в dsk-образ).

Titus
11.02.2012, 00:35
В случае ее эмуляции данные надо обрабатывать каждые 2 мкс.
Это очень нерентабельно, эмулировать железяку с дискретностью ее собственных циклов. Эмулировать нужно от точки взаимодействия до точки.

---------- Post added at 00:35 ---------- Previous post was at 00:34 ----------


Если про UKNCBTL, то это наверное первый эмулятор где более-менее точно съэмулировали 1801ВП1-128. Феликс сначала сделал ее только на чтение, а уже потом Никита с моей помощью причесал ее работу и сделал запись.
Но все равно еще не все так хорошо, огрехи есть, бывает подвисает во время чтения (кстати помогает передернуть дискету), бывает не записывает (но здесь может некорректно срабатывать п/п перевода "сырых" данных обратно в dsk-образ).
У меня пишет и читает хорошо без случайных сбоев. Единственное, пока что с синхронизацей проблемки.

hobot
11.02.2012, 00:37
но здесь может некорректно срабатывать п/п перевода "сырых" данных обратно в dsk-образ
Из личного опыта чаще всего происходит такой сбой - RT11 в текущей сессии пишет например что всё норм, и файл изменился и всё такое, перезапускаешь или выключаешь ukncbtl. смотришь содержимое образа плагином (например), а там ничего не поменялось. Повторно делаешь всё норм.

Titus
11.02.2012, 00:39
Titus, тут вот есть предложение приложенного Кота взять на перевоспитание )))
Кот немного странный = размер меньше чем у того который у тебя для КГД, но и не УКНЦшный, по косвенным данным это переделка ДВКашного для БК0011 ??? Но переделка с Кота под КЦГД (???) Может на досуге посмотришь что там с ним?
Сам файл почти один в один напоминает файл CAT.SAV для КГД, только немного данные со смещением. При запуске вываливается в Trap 4. Пытается писать что-то в неизвестный регистр 177716.

Alex_K
11.02.2012, 00:42
Пытается писать что-то в неизвестный регистр 177716.
Ну как это неизвестный? Для 1801ВМ1 это даже очень известный регистр - SEL1. А в БК в нем много чего сделано.

Titus
11.02.2012, 00:43
Ну как это неизвестный? Для 1801ВМ1 это даже очень известный регистр - SEL1. А в БК в нем много чего сделано.
Мне неизвестный)
Значит использует некую особенность ВМ1, которой нет на ВМ2. Есть дока на этот регистр подробная?
Кстати, может поэтому не идут некоторые ДВК'шные игрушки, т.к. используют этот регистр, т.к. считают, что процессор ВМ1.

hobot
11.02.2012, 00:45
Сам файл почти один в один напоминает файл CAT.SAV для КГД, только немного данные со смещением. При запуске вываливается в Trap 4. Пытается писать что-то в неизвестный регистр 177716.
И размер меньше !!! Вот нашёл где я его брал


Диск с основными играми написанными для RT-11 (ДВК, БК c ОС-БК11). KING, MANAGER, PACMAN, TETRIS, PATRUL (тот где клингонов надо убивать ;-)
а также STALKER, PENTIS11 (для БК11М), Кот-Рыболов (игра адаптированная с ДВК-шного КЦГД под БК11М) и еще много всего. Образ загружаемый - с ОС БК11. Минимальный набор интерсерверовских утилит. Игры записаны на логическом диске LD0: (=DK); Мапить в эмуляторе данный образ следует только на привод A:

Самый нижний образ (img) на этой страничке
http://bk.pictures2.com/gamezz.htm

Titus
11.02.2012, 00:47
И размер меньше !!! Вот нашёл где я его брал
Получается, что она вообще под БК?

hobot
11.02.2012, 00:50
Получается, что она вообще под БК?
Так я же сказал - на перевоспитание ))) Если его с КЦГД перепинали может можно обратно поправить?

Titus
11.02.2012, 00:51
Так я же сказал - на перевоспитание ))) Если его с КЦГД перепинали может можно обратно поправить?
Подозреваю, что они ошиблись в описании, и игра с КГД, а не с КЦГД. Под КЦГД вообще пока только две игрушки я знаю, кроме левых Land'ов.

Alex_K
11.02.2012, 00:54
Так я же сказал - на перевоспитание ))) Если его с КЦГД перепинали может можно обратно поправить?
Строение видеопамяти КЦГД и БК очень резко отличается. Тем более игра для КЦГД грузится в плату КЦГД, а в БК один процессор, да и видеопамять находится в основном адресном пространстве. Так что если сделано для БК, то вряд ли ее переделаешь для чего-то другого.
Вот игры для КГД легко переделывались для УКНЦ, т.к. принцип доступа к видеопамяти почти общий.

hobot
11.02.2012, 01:31
Строение видеопамяти КЦГД и БК очень резко отличается
Штука ещё в том, что я БК0011 в глаза не видел, а эмулятор с FDD что-то не получилось у меня, что бы картинку с этого кота увидеть (((

Titus
11.02.2012, 05:27
Наконец-то нашел глюк дисковода. :v2_dizzy_tired2:
Оказывается, что при переходе с трека на трек, это новое значение трека и стороны НЕ прописывалось в маркере заголовка. Из-за этого при каждом переходе на следующий трек, дисковод ездил головкой на нулевой трек и обратно! Помимо глюков с загрузкой некоторых программ, это еще давало дикие тормоза. А я-то смотрю, чего это RT-11 так часто ездит на нулевой трек, небось с каталогом все время сверяется)
В общем, теперь все грузится в 100500 раз быстрее, а так же загружаются игры от ITO (на радость hobot'у), а так же turbobasic с родного диска, ну, и, наверное еще что-то, что не грузилось.

Теперь на счет ITO-игр. Вот уж настоящие монстры. Сразу выявилось обращение по чтению к источнику-0 (проявление RMW-цикла при байтовом доступе). Мелочевка, но встретилась только у них.
А вот какой-то непонятный регистр 177324, что это такое? Подозреваю, что джойстик или что-то типа того. Совершенно недокументированный. Пришлось его прописать в список регистров, чтобы консоль не ругалась многоэтажными строчками.

И еще, половина ITO-игр используют окно ПЗУ (устанавливают бит ноль в регистре управления памятью). Очевидно, у них там RAM-диск. Попробовал сэмулировать так, как описано в доках - все равно не заработали. Так что теперь вся надежда на спасателя - Alex K. :v2_dizzy_help:

p.s.: Замечу, что игрушки от ITO сделаны на совесть. В большинстве своем быстрые, плавные. Арканоид вообще порадовал, совершенно фреймовый плавнючий арканоид. :v2_dizzy_kids:

Alex_K
11.02.2012, 16:13
Наконец-то нашел глюк дисковода. :v2_dizzy_tired2:
Оказывается, что при переходе с трека на трек, это новое значение трека и стороны НЕ прописывалось в маркере заголовка. Из-за этого при каждом переходе на следующий трек, дисковод ездил головкой на нулевой трек и обратно! Помимо глюков с загрузкой некоторых программ, это еще давало дикие тормоза. А я-то смотрю, чего это RT-11 так часто ездит на нулевой трек, небось с каталогом все время сверяется)
В общем, теперь все грузится в 100500 раз быстрее, а так же загружаются игры от ITO (на радость hobot'у), а так же turbobasic с родного диска, ну, и, наверное еще что-то, что не грузилось.
У меня наконец-то загрузился редактор WRITER, тоже от ITO. Заработал так же пультовый отладчик в ПП, но не все так хорошо, об этом ниже.


А вот какой-то непонятный регистр 177324, что это такое? Подозреваю, что джойстик или что-то типа того. Совершенно недокументированный. Пришлось его прописать в список регистров, чтобы консоль не ругалась многоэтажными строчками.
Насчет джойстика абсолютно верная догадка. Но при отсутствующих регистрах должно возникать прерывание TRAP4, а вот в пультовом отладчике его нет, все регистры страницы ввода/вывода смотрятся, а такого быть не должно.

И еще, половина ITO-игр используют окно ПЗУ (устанавливают бит ноль в регистре управления памятью). Очевидно, у них там RAM-диск. Попробовал сэмулировать так, как описано в доках - все равно не заработали. Так что теперь вся надежда на спасателя - Alex K. :v2_dizzy_help:
Собственно здесь все просто. Пусть у нас кассеты ПЗУ не воткнуто, воткнут только дисковод. В этом случае будет так:
1. Сброшены бит 0 (подключение ПЗУ по адресам 100000-117777) и бит 4 (подключение ОЗУ по адресам 100000-117777). В этом случае и при чтении и при записи будет происходить прерывание TRAP4, т.к. в данном варианте в "окне" ничего нет.
2. Установлен бит 0 (подключение ПЗУ по адресам 100000-117777) и сброшен бит 4 (подключение ОЗУ по адресам 100000-117777). В этом случае в "окно" подключено только ПЗУ, поэтому при чтении будут читаться данные из ПЗУ, а при записи будет возникать прерывание TRAP4.
3. Сброшен бит 0 (подключение ПЗУ по адресам 100000-117777) и установлен бит 4 (подключение ОЗУ по адресам 100000-117777). В этом варианте в "окно" подключено часть ОЗУ плана 0 по адресам 100000-117777. Соответственно и чтение и запись будут идти из ОЗУ.
4. Установлены бит 0 (подключение ПЗУ по адресам 100000-117777) и бит 4 (подключение ОЗУ по адресам 100000-117777). В этом случае в "окно" подключены одновременно и ОЗУ и ПЗУ. Запись будет происходить только в ОЗУ, т.к. ПЗУ на запись не реагирует. А вот чтение будет идти и из ПЗУ и из ОЗУ, но т.к. ОЗУ медленное, то обычно прочитывается логическое ИЛИ между содержимым ПЗУ и младшим байтом ОЗУ, а в качестве старшего байта ОЗУ выступает старший байт предыдущего чтения из ОЗУ.

Titus
11.02.2012, 16:21
У меня наконец-то загрузился редактор WRITER, тоже от ITO. Заработал так же пультовый отладчик в ПП, но не все так хорошо, об этом ниже.
Странно, пультовой отладчик я вроде не трогал.
Можно ссылку на редактор WRITER?

---------- Post added at 16:16 ---------- Previous post was at 16:15 ----------


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

---------- Post added at 16:21 ---------- Previous post was at 16:16 ----------


Собственно здесь все просто. Пусть у нас кассеты ПЗУ не воткнуто, воткнут только дисковод. В этом случае будет так:
1. Сброшены бит 0 (подключение ПЗУ по адресам 100000-117777) и бит 4 (подключение ОЗУ по адресам 100000-117777). В этом случае и при чтении и при записи будет происходить прерывание TRAP4, т.к. в данном варианте в "окне" ничего нет.
Точно не перепутал полярность бита 0?
У меня, если он сброшен, то в окне ПЗУ. И по документаци тоже самое должно быть.

Alex_K
11.02.2012, 16:33
Точно не перепутал полярность бита 0?
У меня, если он сброшен, то в окне ПЗУ. И по документаци тоже самое должно быть.
По документации - лог.1 - СПЗУ включено. Вот чего недосказано в документации, так это то, что при включении питания этот бит ставится в 1, так же должен ставится в 1 по сигналу INIT (команда RESET).
Но установку по INIT на практике я опыты не ставил.

Titus
11.02.2012, 16:40
По документации - лог.1 - СПЗУ включено. Вот чего недосказано в документации, так это то, что при включении питания этот бит ставится в 1, так же должен ставится в 1 по сигналу INIT (команда RESET).
Но установку по INIT на практике я опыты не ставил.
Вот так так!
У меня открыта документация и там написано:
РАЗРЯД ВКЛЮЧЕНИЯ СИСТЕМНОГО ПЗУ В "ОКНО". ЛОГ.1 - СПЗУ - ОТКЛЮЧЕНО.

Кроме того, не работают именно те игры, в которых этот разряд устанавливается. С чего бы им не работать, если разряд устанавливается в состояние по умолчанию?

hobot
11.02.2012, 16:46
игры от ITO (на радость hobot'у)
Да, Арканоид там и правда замечательный, но как я понял проблемы с игрушками с этих сборников не полность решены ещё?
Conan виснет на попытке загрузки второго игрового экрана, Lode Runner (классический практически как на Яблоке) - вовсе не запустился, зато с первого сборника работает бессмертный Knight ! (Кто хочет честную надо запускать stay-alone версию). На втором диске СУПЕР-ПАКМАН и АРКАНОИД работают, а РОАД-ФАЙТЕР нет (хотя и не потеря в целом - игра слишком уж устарела).
Видно что в момент повисания уже и обращения к дисководу нет, я не спец, но думаю такими совместными усилиями - темпами - всё со временем будет норм.

---------- Post added at 16:46 ---------- Previous post was at 16:44 ----------


Замечу, что игрушки от ITO сделаны на совесть
Это порты с MSX кажется (по крайней мере Knight)

Titus
11.02.2012, 16:46
Conan виснет на попытке загрузки второго игрового экрана, Lode Runner (классический практически как на Яблоке) - вовсе не запустился, зато с первого сборника работает бессмертный Knight ! (Кто хочет честную надо запускать stay-alone версию). На втором диске СУПЕР-ПАКМАН и АРКАНОИД работают, а РОАД-ФАЙТЕР нет (хотя и не потеря в целом - игра слишком уж устарела).
Видно что в момент повисания уже и обращения к дисководу нет, я не спец, но думаю такими совместными усилиями - темпами - всё со временем будет норм.
В конане я не доходил до второго уровня. А что в консоли при этом пишется? Вообще, в него сложно играть, управление очень корявое, на мой вкус.
Три игры не идут из-за отсутствия правильной поддержки окна ПЗУ, как я понял. Сейчас как раз разбираемся.

hobot
11.02.2012, 16:48
Да и ещё - это ведь ломанные версии - на не ломаных был счётчик на возможность делать копии и на количество запусков - что то такое там было.

Alex_K
11.02.2012, 16:48
Вот так так!
У меня открыта документация и там написано:
РАЗРЯД ВКЛЮЧЕНИЯ СИСТЕМНОГО ПЗУ В "ОКНО". ЛОГ.1 - СПЗУ - ОТКЛЮЧЕНО.

Кроме того, не работают именно те игры, в которых этот разряд устанавливается. С чего бы им не работать, если разряд устанавливается в состояние по умолчанию?
Вот из документации. Я только не согласен насчет RIN (сброс по INIT), но это надо пробовать на практике.

hobot
11.02.2012, 16:59
В конане я не доходил до второго уровня. А что в консоли при этом пишется? Вообще, в него сложно играть, управление очень корявое, на мой вкус.
Три игры не идут из-за отсутствия правильной поддержки окна ПЗУ, как я понял. Сейчас как раз разбираемся.
Просто это уникальная и единственная "бродилка" на УКНЦ, ты ведь что-то портировать человека-яйцо со спектрума не торопишься ? ))))))))))))))
вот снимок экрана и консоли

http://savepic.net/2471787.png
штука в том, что уровни в Conan сразу на весь экран рисуются "как лампочка" загораются - отсюда делаю вывод рисуются на второй странице заранее, потом на неё переключается изображение (ну примерно так), так вот тут может с этим проблема - такой снежок "синий" у меня появился при перетаскивании окна мышью,
хотя он мог мелькать "только очень быстро" и при нормальной работе игры. Один раз
Conan надо до конца пройти - что бы дракона увидеть - победить, уникальная игрушка же ))) У тебя получилось хотя бы летучую мышь убить? Там каждый уровень разный, при повторном нажатии в одну сторону чел. разгоняется, шифт прыжок, пробел топор метнуть )))

Titus
11.02.2012, 17:43
Вот из документации. Я только не согласен насчет RIN (сброс по INIT), но это надо пробовать на практике.
Точно, блин)
У меня в доке буква В потеряла палочку, и смотрелась, как ОКЛЮЧЕНО, что бегло читалось, как отключено. Значит по ресету надо ставить в 1.
Тогда еще страннее, что игры, устанавливающие 0x0001 в этот регистр не работают. Правда, у меня пока trap 4 не отрабатывается при чтении отсутствующих кусков памяти. Может из-за этого?

---------- Post added at 17:05 ---------- Previous post was at 17:01 ----------


вот снимок экрана и консоли
Видишь, тоже повисает при изменении адресного пространства PPU на 0x0001, как в других ITO-игрушках.

---------- Post added at 17:09 ---------- Previous post was at 17:05 ----------


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

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

Ну что там с WRITER'ом от ITO? Выкладывайте, пожалуйста)

---------- Post added at 17:43 ---------- Previous post was at 17:11 ----------

Кстати, на счет игрушек под КГД - Digger и Garden. Они работают, только не переключается на них изображение. Надо поразбираться.

hobot
11.02.2012, 17:51
не получается нажимать одновременно
Одновременно не нужно ))) Влево(допустим) два раза - он разогнался, и прыжок
будет в лево с ускорением, то есть, если ты его в одну сторону разогнал он не остановится пока ты управлением не попросишь его - он так и будет мчаться )))
Есть ещё читерское место (не помню точно, кажется на третьем игровом экране),
там топорик (они же как бумеранги) кидаешь и поворачиваешься к нему спиной,
и когда он ловится счётчик топоров увеличивается не на 1, а на 2 - так что кризис
с оружием там не грозит )))



Ну что там с WRITER'ом от ITO? Выкладывайте, пожалуйста)
У меня Writer в СТОП вылетает, не запустился (((

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


Они работают, только не переключается на них изображение
А принудительно ? В консоле пишет про КГД что включен !!!

Alex_K
11.02.2012, 18:17
Редактор WRITER, голый без документов. Клавиша <СБРОС> - это как <Esc> на PC. Краткая документация - в режиме редактирования нажать Ctrl+P (УПР+П).

hobot
11.02.2012, 18:37
Редактор WRITER, голый без документов. Клавиша <СБРОС> - это как <Esc> на PC. Краткая документация - в режиме редактирования нажать Ctrl+P (УПР+П).
пришпилю к архиву, с автозапуском удобнее и запускается !!!
А вот с этой (http://pdp-11.org.ru/~hobot_lmb/ukdwk_archive/ukncbtlwebcomplekt/POLYSS.CIR.WRITER/DISK16.DSK) болванки почему то нет??? В архив к ней-же скину и добавлю в описание текст из сообщения )))

---------- Post added at 18:37 ---------- Previous post was at 18:30 ----------

там! )))

Titus
11.02.2012, 18:44
А принудительно ? В консоле пишет про КГД что включен !!!
Улучшил детектирование КГД. Теперь работают и остальные игры, которые не запускались - AFGAN (WERT по УКНЦ'шному), DIGER, GARDEN.

Ситуация с КГД такова:
Активность КГД определяется по записи в регистр 176644 (KGD_ADR - регистр адреса экрана КГД). Но в УКНЦ на этом месте находится регистр управления ловушкой. Приходится им жертвовать, тем более, что он вообще практически нигде не используется.
Так вот, при первом обращении к этому регистру, из адресного пространства УКНЦ исключаются следующие регистры:

176640 (PL12_ADR) - регистр адреса планов 1 и 2,
176642 (PL12_DATA) - регистр данных планов 1 и 2,
176644 (не реализован) - регистр управления ловушкой,
176646 (не реализован) - регистр ловушка

которые заменяются на регистры КГД:

176640 (KGD_CON) - регистр управления,
176642 (KGD_DATA) - регистр данных
176644 (KGD_ADR) - регистр адреса
176646 (не реализован) - служебный регистр, недоступный программно

Как видно, мы теряем ловушку, которая в системе не используется, и регистр адреса и данных планов 1 и 2, которые так же штатно в системе не используются. Таким образом можно вполне корректно переключаться в режим регистров КГД без вреда системе.

Обратный выход в режим УКНЦ происходит по EMT 350, что означает корректный выход в систему из запущенного приложения. Либо же можно выйти нажав F9, но это в аварийных случаях. Делать это в процессе работы КГД-приложения не желательно, т.к, произойдет сбой передачи данных в регистры КГД, и, напротив, может уйти мусор в регистры УКНЦ, испортив память.

p.s.: Да, забыл сказать, из-за чего не работало.
Некоторые программы сначала пишут в регистр KGD_CON, а потом уже в регистр KGD_ADR, из-за чего информация, записанная в KGD_CON уходит в регистр адреса планов УКНЦ PL12_ADR, т.е. теряется.
Теперь при переключении в режим КГД, информация из PL12_ADR переписывается в KGD_CON, и таким образом восстанавливается.

hobot
11.02.2012, 18:53
Улучшил детектирование КГД. Теперь работают и остальные игры, которые не запускались - AFGAN (WERT по УКНЦ'шному), DIGER, GARDEN.

Да ! А кто такой "МИША и Ко" ? ))) Может он под КЦГД что-нибудь делал позже ? )))

---------- Post added at 18:53 ---------- Previous post was at 18:52 ----------

И вот странно - почему все эти надписи "потерялись" при переделке для УКНЦ???

Titus
11.02.2012, 18:55
Кстати, в на дисках с Writer'ом, система с медленным перемещением головки, от этого грузится все медленно. Это как-то регулироваться должно, потому что в системе с играми, головка перемещается в несколько раз быстрее.

---------- Post added at 18:55 ---------- Previous post was at 18:54 ----------

И еще, так и остался открытым вопрос, почему ITO-шные игры зависают именно после записи 0x0001 в регистр управления памятью, хотя при этом регистр не изменяется, т.к. он по умолчанию содержит именно 0x0001.

Alex_K
11.02.2012, 19:05
Кстати, в на дисках с Writer'ом, система с медленным перемещением головки, от этого грузится все медленно. Это как-то регулироваться должно, потому что в системе с играми, головка перемещается в несколько раз быстрее.
А потому что в эмуляторе не реализована перемычка на контроллере дисковода, ее состояние читается из регистра 177704, бит 12. При равенстве единице время перемещения головок настраивается под дисководы МС-5305/5311/5313, а иначе под НГМД-6022. Еще это время можно менять, записав в определенные ячейки памяти ПП другие значения.

Titus
11.02.2012, 19:17
А потому что в эмуляторе не реализована перемычка на контроллере дисковода, ее состояние читается из регистра 177704, бит 12. При равенстве единице время перемещения головок настраивается под дисководы МС-5305/5311/5313, а иначе под НГМД-6022. Еще это время можно менять, записав в определенные ячейки памяти ПП другие значения.

В доках написано, что этот регистр 'резерв'. Есть про него подробности?

Вот хорошо бы перенести те файлы инициализации, которые устанавливают скорость перемещения головки быструю из системы с играми в другие системы.

Alex_K
11.02.2012, 19:37
В доках написано, что этот регистр 'резерв'. Есть про него подробности?
Ну документации везде верить нельзя. Многое там не описано или написано неверно. Верить можно только реальной машине.
А сам регистр работает в двух режимах - в режиме входов (бит 8 регистра 177700 равен 0) и режим выходов (бит 8 регистра 177700 равен 1). Классически при работе в режиме входов к нему подключены линии Y клавиатуры. По линиям X в режиме опроса идет бегущий ноль, от X0 до X7, соответственно через нажатые клавиши он попадает на линии Y, там будет читаться единица с соответствующего бита. Сама клавиатура подключена только к линиям с Y4 (только СТОП) по Y15. На линию Y3 выводится перемычка контроллера дисковода. Линии с Y0 по Y2 не используются. Линия Y0 выведена на бит 15, Y1 - 14, ну и Y15 - 0.
Пример: на линии X3 - бегущий ноль, нажаты клавиши ГРАФ и R, значит будут установлены в единицу биты 9 (Y6) и 3 (Y12).

Вот хорошо бы перенести те файлы инициализации, которые устанавливают скорость перемещения головки быструю из системы с играми в другие системы.
А зачем переносить? Реализовать перемычку, а системное ПЗУ при старте само инициализирует нужные ячейки.

Titus
11.02.2012, 19:41
И какого же назначения этот регистр? Ты описал влияние на какую-то перемычку (где она на плате установлена), и оказывается он еще связан с регистрами клавиатуры. Значит биты 0-7 - это данные, 8 - направление, 12 - состояние перемычки. Все?

Где-нибудь этот регистр для опроса клавиатуры используется?

Может еще есть какие-то регистры, не описанные в документации?

Alex_K
11.02.2012, 19:51
И какого же назначения этот регистр? Ты описал влияние на какую-то перемычку (где она на плате установлена), и оказывается он еще связан с регистрами клавиатуры. Значит биты 0-7 - это данные, 8 - направление, 12 - состояние перемычки. Все?
Регистр 177700: состояние клавиатуры;
бит 6 - разрешение прерывания;
бит 7 - готовность клавиатуры;
бит 8 - режим регистра 177704, 0 - на чтение линий Y, 1 - на вывод на линии Y.
Регистр 177702: данные клавиатуры;
биты с 0 по 3 - код по линии Y;
биты с 4 по 6 - код по X, при отжатии всегда равен нулю;
бит 7 - клавиша нажата (0), отжата (1).
Регистр 177704: линии Y
бит 0 - линия Y15;
......
бит 15 - линия Y0.
Частным случаем является линия Y3 (бит 12) - перемычка контроллера дисковода.

---------- Post added at 19:50 ---------- Previous post was at 19:49 ----------


Где-нибудь этот регистр для опроса клавиатуры используется?
В системном ПЗУ только для чтения состояния перемычки контроллера дисковода при старте.

---------- Post added at 19:51 ---------- Previous post was at 19:50 ----------


Может еще есть какие-то регистры, не описанные в документации?
Естественно чего нибудь и есть, сразу так всего и не вспомнишь.

hobot
12.02.2012, 00:16
ASPcorp.
Сильно подозреваю, что EmuStudio единственный на сегодняшний день эмулятор позволяющий запустить и поиграть именно в оригинальные версии этих игр (под КГД для ДВК) (!)

1 - А сколько этих игр вообще 5 или 6 ? Получается всё таки 6(!)
2 - Все оригиналы на системной дискете с эмулятором? Вроде все )))

Авторы вот этих строк утверждают, что всего их было пять (!)



*** GARDEN ***

=== САД ===

Эта игра - одно из пяти творений ASPcorp. , ставших классикой
советских компьютепных игр.


=== LAND ===

Эта игра - одно из пяти творений ASPcorp. ,ставших клас-
сикой советских компьютерных игр.

=== NEW SHERIFF ===

Эта игра - одно из пяти творений ASPcorp. , ставших классикой со-
ветских компьютерных игр.

=== PIFPAF ===

Эта игра - одно из пяти произведений ASPcorp. ,ставших классикой
советских компьютерных игр.

*** WERT ***

или

*** MILITARY MARATHON ***

или

=== ВОЕННЫЙ МАРАФОН ===


Эта игра - одно из пяти творений ASPcorp. , ставших классикой
советских компьютерных игр.


Можно попробовать их сосчитать, Titus пожалуйста поправь если
я ошибся:
1 - LAND (на системном диске есть оригинальная версия для КГД ДВК)
2 - SHERIF (так-же присутствует на диске с эмулятором)
3 - PIFPAF (то же есть там)
4 - GARDEN (есть после последнего обновления)
5 - AFGAN (игра про вертолёт есть на диске)

А как быть с CASTLE ??? Считать её переделкой Шерифа? Или записать
с Шерифом в одну позицию, на диске с эмулятором она лежит как SHERI2
Не смотря на почти 100% схожесть по сюжету, заставки у игр разные и
мешочки-враги изображены по разному, до конца дойти не хватает терпения, но возможно и ГЛАВНЫЙ ВРАГ на крыше то же другой???
Тогда игра пойдёт отдельной строкой
6 - SHERI2(CASTLE)

Благодаря данному эмулятору появилась возможность поиграть и собралась "рабочая" коллекция оригинальных версий этих игрушек. Ура!!! (три раза)
:redface:

Titus
12.02.2012, 03:34
Я тоже не знаю, разделять Шерифа и Castle на две разные игры, или же как просто разные подверсии одной и той же. Все же больше склоняюсь к двум разным.

Land'ов было очень много на ДВК, версий 5, не меньше. С разными лабиринтами и т.д. Так же был отдельно редактор уровней, который позволял сделать свою игру. Только не помню, редактор был под ДВК или УКНЦ.
Так же существует версия Land'а под КЦГД многоцветная, а так же несколько версий переделок под КЦГД простым сжатием по вертикали, т.к. КЦГД имеет меньшее разрешение по высоте, из-за чего графика в игре стала смотреться менее красивой. Все эти версии должны быть в твоем архиве, т.к. я тоже их качал у наших ДВК'шников.

Land точно был портирован на УКНЦ, БК, Специалист. Причем на УКНЦ тоже ходит много версий, с разными уровнями, разными глюками, и даже разной компоновкой экрана.
Cat точно был портирован на УКНЦ, БК.
PifPaf на УКНЦ и БК.
Wert - портирован на УКНЦ двумя разными версиями как минимум.
Шерифы, Кастле и Гарден тоже портированы.
Причем в архивах есть Гарден с битыми уровнями, и шериф с битыми уровнями.

Еще под КГД есть такие графические игры, как Moto - гонки на мотоцикле по псевдо-3D дороге; Chess - графические шахматы, причем используют и текстовый экран КСМ тоже; Digger; Кот-рыболов - не менее двух версий; Графический питон. Больше пока не припомню.

---------- Post added at 03:34 ---------- Previous post was at 03:29 ----------


Авторы вот этих строк утверждают, что всего их было пять
Хорошо бы послушать самого легендарного ASP Corp'а, ведь именно в его игры мы заигрывались в школе, т.к. они были почти единственные на УКНЦ)

Alex_K
12.02.2012, 11:06
А как быть с CASTLE ??? Считать её переделкой Шерифа? Или записать
с Шерифом в одну позицию, на диске с эмулятором она лежит как SHERI2
Не смотря на почти 100% схожесть по сюжету, заставки у игр разные и
мешочки-враги изображены по разному, до конца дойти не хватает терпения, но возможно и ГЛАВНЫЙ ВРАГ на крыше то же другой???

;)

ZEman
12.02.2012, 11:14
Titus, можно попросить сделать вас так что если в папке эмулятора находятся 2 диска (один "System.dsk" и второй "System2.dsk") то диск system автоматически помещался в первый дисковод, а диск system2 соответсвенно во второй дисковод.

и ещё хочется узнать будет ли когда-нибудь в вашем эмуляторе добавлен звук ?

Patron
12.02.2012, 12:01
Titus, можно попросить сделать вас так что если в папке эмулятора находятся 2 диска (один "System.dsk" и второй "System2.dsk") то диск system автоматически помещался в первый дисковод, а диск system2 соответсвенно во второй дисковод.На мой взгляд гораздо логичнее, чтобы образы, подставляемые в дисководы по умолчанию - совпадали по имени с именами приводов в операционной системе.

Типа, MY0.dsk ; MY1.dsk и т.п.

Arseny
12.02.2012, 13:29
Land'ов было очень много на ДВК, версий 5, не меньше. С разными лабиринтами и т.д. Так же был отдельно редактор уровней, который позволял сделать свою игру. Только не помню, редактор был под ДВК или УКНЦ.

Редактор уровней ... Я таких слов-то не знал в 90-м году, что не помешало мне распечатать DUMP игры Digger, разобрать как задается уровень и сделать свой вариант игры ;-) Все новые уровни рисовались сначала на бумаге :-) Кстати, в диггере есть хитрый элемент - он выглядит как обычный грунт, но если сверху на него падает мешок с золотом, то этот участок пробивается и мешок падает дальше. Я так целые ловушки конструировал для сбрасывания золота на преследующих злыдней ;-)

Alex_K
12.02.2012, 14:16
... Так же был отдельно редактор уровней, который позволял сделать свою игру. Только не помню, редактор был под ДВК или УКНЦ. ....
Когда-то я писал редактор уровней для LAND, а также загрузчик уровней.
Эти файлы есть на диске GAME2.DSK, здесь выкладывался.
Редактор LND.SAV - позволяет создавать, редактировать и распечатывать (печать сделана только под Robotron) уровни. Уровни хранятся в файлах с расширением .LND. В одном файле - 15 уровней. Также редактор позволяет перетаскивать уровни из .SAV-файлов, поддерживает только игры с 11-ю и 15-ю уровнями.
Загрузчик LLAND.SAV представляет собой обычный LAND с поддержкой 15 уровней, к которому добавлена командная строка для ввода имени файла, ну и загрузчик, который их грузит и запускает собственно LAND.
К великому сожалению исходники потерялись, хотя у LLAND как таковых исходников не было, написал загрузчик, перевел вручную в машинный код и набил в DESS-е.

Titus
12.02.2012, 15:28
Выкладывайте Диггер и Land с редактором, пожалуйста)

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


Titus, можно попросить сделать вас так что если в папке эмулятора находятся 2 диска (один "System.dsk" и второй "System2.dsk") то диск system автоматически помещался в первый дисковод, а диск system2 соответсвенно во второй дисковод.

и ещё хочется узнать будет ли когда-нибудь в вашем эмуляторе добавлен звук ?

Да можно и так. Или, например, как предложил Patron MZ0.dsk, MZ1.dsk. Или же System.dsk и Work.dsk. Или System.dsk и Games.dsk )

А вот со звуком проблемы. Ввиду того, что эмулятор заточен прежде всего под синхронную работу с кадровой разверткой, которая для него является времязадающей, появляются сложности синхронизации между звуковой картой и кадровой разверткой. Т.е., например, частота семплирования выбирается 48000кГц, а частота кадров 60.00Гц. Вроде все понятно, что за один кадр будет выведено 800 отсчетов. Но это только в теории. На практике же звуковая карточка и видеокарточка могут тактироваться от совершенно разных генераторов, и ни о какой гарантированной синхронности их работы речи быть не может, а стало быть звук или уедет вперед, или отстанет. Некоторые системы синхронизации я придумал, но они слишком сложные для реализации, много надо переписывать)

Так же, пока что не нашел внятного ответа на вопрос, как заставлять процесс засыпать до прихода VBlank. Сейчас это делается извращенным способом, отьедающим 20-30 процентов быстродействия компьютера. Т.е. эмулятор засыпает, и каждую миллисекунду просыпается и смотрит, а не близко ли луч уже к низу экрана? Если близко, то берет процессор в свои руки, и тщательно следит, пока не достигли VBlank'а. Так не годится.

Alex_K
12.02.2012, 15:37
Выкладывайте Диггер и Land с редактором, пожалуйста)
Если редактор LAND, то здесь (http://pdp-11.org.ru/~hobot_lmb/ukdwk_archive/ukncbtlwebcomplekt/ARS/arsUKNC/GAME2.DSK). Кстати некоторые файлы .LND там битые, хреново дискетка считалась, но их можно восстановить из оригинальных LAND-ов.

Titus
12.02.2012, 15:43
;)
Судя по рисунку русалки, в игру надо играть на светлом фоне, а не на темном.

http://s018.radikal.ru/i512/1202/19/d2f9b3033bb4.png

http://s017.radikal.ru/i414/1202/8c/7dd6a249ebf2.png

---------- Post added at 15:43 ---------- Previous post was at 15:41 ----------


Если редактор LAND, то здесь (http://pdp-11.org.ru/~hobot_lmb/ukdwk_archive/ukncbtlwebcomplekt/ARS/arsUKNC/GAME2.DSK). Кстати некоторые файлы .LND там битые, хреново дискетка считалась, но их можно восстановить из оригинальных LAND-ов.
Может просто считать нормально дискету?
И из каких оригинальных и как их восстановить?

Alex_K
12.02.2012, 15:49
Может просто считать нормально дискету?
И из каких оригинальных и как их восстановить?
Да уж пробовал дискету читать и на УКНЦ и на PC, не читаются некоторые сектора, даже переделанный ukdsk не поможет. Но у меня есть копии дискет еще с НГМД-6022, т.е. 40-дорожечные, надо внимательно поглядеть.
А оригинальные - это LAND*.SAV. LND позволяет перетаскивать из .SAV-файлов в .LND-файлы. Достаточно запустить LND.SAV и в ответ на промптер "LND> " просто нажать <Enter>, выведется краткий хелпинг.

hobot
12.02.2012, 16:15
Русалка? ))) Это бонус, а второй мужик кто? )))
Это финал Castle если не ошибаюсь? Я смутно помню в шляпе мужика злого в финале Sherifa - могу и ошибаться конечно.
Alex_K, есть ваш редактор на многих образах, он по школам разбежался в своё время как и (пример) недопиленный Зеленоградцами АРКАНОИД (!). Уточните тогда в каком примерно году - разрабатывалось и видимо для УКНЦ-only ? А описания - инструкции к нему нет?

Titus, я покопаюсь сегодня найду - была дискета с нормально считанными передлками Land и + редактор, но только для УКНЦ там всё.
Вот эту версию предлагаю на system.dsk добавить - уровни стандартные, выглядит мнохромом, но в консоли видно в каком режиме идёт, подписан Автором и на русском )))

консоль когда игра стартанула
http://savepic.net/2432640.png
заставка после первой (рус!!!)
http://savepic.net/2425472.png
уровни не правленые, но файл весит больше,
около 60-блоков по RT-шному )))
http://savepic.net/2437760.png

Единственный момент, на скринах может и не видно,
верхняя строка исчезает почему-то, посмотришь?

hobot
12.02.2012, 16:20
росто нажать <Enter>, выведется краткий хелпинг.
увидел !!! надо не битую найти есть была же я помню !!! )))

Titus
12.02.2012, 16:26
Единственный момент, на скринах может и не видно,
верхняя строка исчезает почему-то, посмотришь?
Так это под КЦГД Land, о которых я и говорил. В КЦГД экран меньше по вертикали, и из-за этого заставка смасштабированна, а в игре просто не влезают все строчки. Это так и должно быть. В хламничке она есть?

Alex_K
12.02.2012, 16:33
Русалка? ))) Это бонус, а второй мужик кто? )))
Это финал Castle если не ошибаюсь? Я смутно помню в шляпе мужика злого в финале Sherifa - могу и ошибаться конечно.
В Sheriff-е вместо русалки американский флаг развевается, дойду - выложу скриншот. Хотя дойти до конца в этих играх - максимум 10 минут.

Alex_K, есть ваш редактор на многих образах, он по школам разбежался в своё время как и (пример) недопиленный Зеленоградцами АРКАНОИД (!). Уточните тогда в каком примерно году - разрабатывалось и видимо для УКНЦ-only ? А описания - инструкции к нему нет?
Какие школы? Я уже учился в институте, у меня был личный УКНЦ с дисководами и принтером. Живу я в поселке в Ленобласти, контактировал по УКНЦ только с Лугой, там был центр творчества юных, там же и чинили УКНЦ (мне пару раз на контроллере дисковода 1801ВП1-128 перепаивали). Так что от меня в принципе никуда разбежаться не могло. А году писал в 1993, там же при запуске указано.
Краткая помощь в редакторе есть при запуске. При запуске можно указать имя файла, он сразу откроется или создастся (если его нет). Если имя файла не указано, то выведется промтер "LND>". Нажав <Enter>, можно получить краткую помощь по командной строке. Выход с командной строки в RT-11 - УПР+Ц.
В самом редакторе тоже помощь есть. Не описаны некоторые быстрые клавиши:
3/# - поставить кирпичную непробиваемую стенку;
H/Х - поставить сундук;
M/М - поставить пробиваемый пол (через который падаешь сверху);
-(минус) - поставить пробиваемую целую стенку;
=(равно) - поставить пробиваемую пробитую стенку;
8/( - левая часть двери;
9/) - правая часть двери;
[ - левая часть лестницы;
] - правая часть лестницы;
{ | } ~ - разные части биомассы;
_(подчеркивание) - разместить биомассу от курсора до первого препятствия.

Биомасса, а я думал, что это огонь. Наверно навеяло из фильма "Через тернии к звездам".

Titus
12.02.2012, 16:46
Биомасса, а я думал, что это огонь. Наверно навеяло из фильма "Через тернии к звездам".
А я думал, что это вода)

Alex_K
12.02.2012, 16:48
А я думал, что это вода)
Тогда правильнее - кислота.

hobot
12.02.2012, 17:02
В Sheriff-е вместо русалки американский флаг развевается, дойду - выложу скриншот. Хотя дойти до конца в этих играх - максимум 10 минут.
это спорный вопрос ))) я не могу в них играть в принципе, если честно как и во все поделки ASPcorp - кроме PIFPAF ))) Но в коллекционном плане меня все игры и софт интересуют для УКНЦ и ДВК ))) Единственный уровень, который сам прошёл в LAND - это вот крест на скриншоте который, остальные нет!!! Всегда был более "правильный" Lode Runner под рукой, сначало на БК0010

http://savepic.net/2462341.png
http://savepic.net/2450053.png

ИМХО: Там и редактор тебе сразу и идеальный геймплей и возможность уровни сохранить так-же была, а потом и на УКНЦ в 90-х то же уже был Lode Runner ))) (см. ITO90) (!)



у меня был личный УКНЦ с дисководами
Значит писали для себя ? Возможно я и ошибся (ложная память) )))


В хламничке она есть?
я прилепил к сообщению именно потому, что возможно и есть ))) а возможно и нет))) надо уточнять, но если ты добавишь на system.dsk к эмулятору - хуже не будет, верно? +1 игра ASPcorp на дискету к EmuStudio, почему нет? )))

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


Тогда правильнее - кислота.
в детстве называли это "лавой"

---------- Post added at 17:02 ---------- Previous post was at 16:59 ----------

Тут я видимо "Америку не открою", но посмотрите сами - все проекты от ASPcorp просто идеально можно было реализовать на игровых автоматах, ну учитывая реалии тех дней, но вот не сложилось почему-то )))

Titus
12.02.2012, 17:08
это спорный вопрос ))) я не могу в них играть в принципе, если честно как и во все поделки ASPcorp - кроме PIFPAF ))) Но в коллекционном плане меня все игры и софт интересуют для УКНЦ и ДВК ))) Единственный уровень, который сам прошёл в LAND - это вот крест на скриншоте который, остальные нет!!!
Шериф действительно трудноватый (для меня), а в Land прекрасно можно играть (на должной скорости), очень качественная игра, еще в школе заигрывались. Из-за него и написал эмулятор) Вернее, сначала искал, нет ли Land'а под другие компы, оказалось, что есть, но не с теми уровнями. Пришлось тогда написать эмулятор УКНЦ и поиграть в оригинал. В Garden, кстати, тоже при желании можно поиграть, ничего так играется. В Wert играть можно, но как-то однобразновато. Но тоже из моих школьных любимых игр.

Alex_K
12.02.2012, 17:23
Ну в ASP-шные игры на ноутбуке без ДКЛ-клавиатуры играть действительно не очень просто. А Sheriff оказался чуточку посложнее Castle.

Titus
12.02.2012, 21:16
Собственно здесь все просто. Пусть у нас кассеты ПЗУ не воткнуто, воткнут только дисковод. В этом случае будет так:
Сделал все так, как ты сказал, теперь есть TRAP'ы при отсутствия доступа ПЗУ или ОЗУ на чтение или запись, но все равно с ITO'шными игрушками, которые начинаются с записи 0x0001 в регистр управления памятью, ничего не изменилось. Видимо, причина не в этом.
Турбобейсик проверил - работает.
Какие еще программы используют маппинг памяти PPU? Особенно интересуют те, которые отключают ПЗУ в окне.

hobot
12.02.2012, 21:45
Alex_K, может вам поможет момент с опытом в UKNCBTL где ITO подвисали в стартовом меню вплоть до версии 1.9 июль 2010, а вот в следующей уже заработали ?
Потом целая серия улучшений последовала, но работоспособность этих сборников начилась именно с 2.0 беты ??? )))

Titus
12.02.2012, 22:42
Alex_K, может вам поможет момент с опытом в UKNCBTL где ITO подвисали в стартовом меню вплоть до версии 1.9 июль 2010, а вот в следующей уже заработали ?
Потом целая серия улучшений последовала, но работоспособность этих сборников начилась именно с 2.0 беты ??? )))
Нет, мне кажется, что подвисание к меню не относится к данному глку. Это глюк конкретно тех игр, которые химичат с маппингом памяти. Остальные игры из этого пакета работают хорошо.

Alex_K
12.02.2012, 22:48
Глюк довольно сложно выловить без внутреннего отладчика, надо знать где крутится программа, что делает или пытается сделать. А так только догадки.
Как я понимаю это с диска ITO90? Там действительно используется RAM-диск от Олега Ховайко. Может где неправильно реализовали?

Titus
12.02.2012, 22:55
Как я понимаю это с диска ITO90? Там действительно используется RAM-диск от Олега Ховайко. Может где неправильно реализовали?
Да, скорее всего дело с ним.
Т.к. все игры, которые виснут, пишут 0x0001 в регистр управления памяти, и делают это с адреса 125526. Т.е. явно используют какой-то одинаковый драйвер, скорее всего именно RAM-диска.

Alex_K
12.02.2012, 23:00
Да, скорее всего дело с ним.
Т.к. все игры, которые виснут, пишут 0x0001 в регистр управления памяти, и делают это с адреса 125526. Т.е. явно используют какой-то одинаковый драйвер, скорее всего именно RAM-диска.
Тут пока сложно сказать. Если пишут только 1, то включается системное ПЗУ в "окне", а также отключается на запись память, т.е. при записи в адреса 100000-176777 должен быть TRAP4.
Хотя дело может быть совсем в другом. Кроме как записи делается что-то еще, например работа с каналами 0, 1, 2. Как я уже писал у них чуть-чуть различается работа в режиме прерываний. Но это все только предположения. Если hobot, говорил, что с какого-то момента диски стали работать, то в svn можно глянуть какие были исправления, но только если это была та самая ошибка.

Titus
12.02.2012, 23:04
Тут пока сложно сказать. Если пишут только 1, то включается системное ПЗУ в "окне", а также отключается на запись память, т.е. при записи в адреса 100000-176777 должен быть TRAP4.
Хотя дело может быть совсем в другом. Кроме как записи делается что-то еще, например работа с каналами 0, 1, 2. Как я уже писал у них чуть-чуть различается работа в режиме прерываний. Но это все только предположения. Если hobot, говорил, что с какого-то момента диски стали работать, то в svn можно глянуть какие были исправления, но только если это была та самая ошибка.
Понять бы, как работает этот драйвер RAM-диска, было бы яснее.

Alex_K
12.02.2012, 23:47
Проверил диск ITO90 в UKNCBTL от 21.03.2010. Все работает и грузится. Так что я пока в догадках.

---------- Post added at 23:47 ---------- Previous post was at 23:17 ----------


Т.к. все игры, которые виснут, пишут 0x0001 в регистр управления памяти, и делают это с адреса 125526.
Ох, не заметил сразу. Да по этому адресу находится драйвер кассеты ПЗУ в системном ПЗУ. Что-то у Вас с каналом 2, раз при загрузке с дискеты все время в кассету ПЗУ лезут, да не должно быть такого.

И кстати на диске ITO90 есть только следующие команды, работающие с регистром 177054: BIS #400,@#177054 и BIC #400,@#177054. Т.е. они включают/выключают сетевой таймер в канале ПП.

Titus
12.02.2012, 23:51
Ох, не заметил сразу. Да по этому адресу находится драйвер кассеты ПЗУ в системном ПЗУ. Что-то у Вас с каналом 2, раз при загрузке с дискеты все время в кассету ПЗУ лезут, да не должно быть такого.
Странно, значит почему-то он вываливается в этот драйвер кассеты ПЗУ. Буду искать, почему.

Alex_K
12.02.2012, 23:51
Загрузил LODE RUNNER с ITO90. Ни разу не залез в драйвер кассеты ПЗУ.

Titus
12.02.2012, 23:56
Вообще, CPU зависает в цикле по адресу 157220, ожидая 65535*7 итераций появления нуля по адресу в R3 = 157346.
После того, как ноль так и не установлен, в PPU как раз идет вываливание в этот драйвер кассеты ПЗУ. После этого цикл ожидания нуля в 157346 повторяется снова, и так до бесконечности.

Проверил, существует ли этот цикл в играх, которые запускаются. Оказалось, что да, но исчерпывая счетчик, у них вываливания ППУ в драйвер кассеты не происходит.

Alex_K
12.02.2012, 23:56
Странно, значит почему-то он вываливается в этот драйвер кассеты ПЗУ. Буду искать, почему.
Советую поставить хук на драйвер канала 2, чтобы проследить какие блоки параметров передаются, т.е. адреса ОЗУ и содержимое блока.
В каком месте ставить хук можно посмотреть по листингам ПЗУ, там в комментариях вся работа расписана.

Titus
12.02.2012, 23:59
Советую поставить хук на драйвер канала 2, чтобы проследить какие блоки параметров передаются, т.е. адреса ОЗУ и содержимое блока.
В каком месте ставить хук можно посмотреть по листингам ПЗУ, там в комментариях вся работа расписана.
Что это нам даст?

Alex_K
13.02.2012, 00:04
Что это нам даст?
Там по этим адресам крутится драйвер, работающий с каналом 2. Может что-то некорректно передается, а так будешь знать откуда блок и что в нем. Если всякая ерунда лезет, то может быть некорректно сделана работа с каналом 2.

Titus
13.02.2012, 00:09
Там по этим адресам крутится драйвер, работающий с каналом 2. Может что-то некорректно передается, а так будешь знать откуда блок и что в нем. Если всякая ерунда лезет, то может быть некорректно сделана работа с каналом 2.
Странно, что это на всех программах работает корректно, а тут вдруг нет.

Alex_K
13.02.2012, 00:13
Странно, что это на всех программах работает корректно, а тут вдруг нет.
В том драйвере передается адрес блока, равный 157346. Работа идет с дисководом.

Titus
13.02.2012, 00:20
В том драйвере передается адрес блока, равный 157346. Работа идет с дисководом.
Т.е. программа в памяти CPU в этом месте ожидает, что ей PPU передаст адрес блока /загруженного с дисковода?/, а PPU ей его не передает?

Alex_K
13.02.2012, 00:29
Т.е. программа в памяти CPU в этом месте ожидает, что ей PPU передаст адрес блока /загруженного с дисковода?/, а PPU ей его не передает?
В этом месте программа в ЦП строит блок параметров для работы с дисководом и передает через канал 2 адрес ентого блока ПП. А он (ПП то есть) уже считывает по этому адресу блок себе, разбирает его и выполняет соответствующее задание. Потом в младший байт первого слова блока передается ответ.
Все описано в книге "Работа с внешними устройствами", да и листинги ПЗУ помогут.

Titus
13.02.2012, 01:48
Все описано в книге "Работа с внешними устройствами", да и листинги ПЗУ помогут.
Мне бы ссылку на то, и на это)
Судя по всему, это совсем стандартный драйвер. Тогда еще страннее, что именно в этих играх он глючит.

---------- Post added at 01:48 ---------- Previous post was at 00:32 ----------

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


Packet to source-2: 0801, 8002, 0402, 0400, 6100
Loading OKAY!
Команда чтения, сторона 1, сектор 4, трек 2, адрес ЦП 0x400, загружать 0x6100 слово
Меню загружено успешно

Переходим к загрузке игры Lode Runner:

Packet to source-2: 0801, 8002, 041D, 0400, 6100
Loading OKAY!
Команда чтения, сторона 1, сектор 4, трек 29, адрес ЦП 0x400, загружать 0x6100 слово.
Игра загружена успешно

Write 0001 at ADRSP_CON at location PC = 0xAB56
Первое ругательство драйвера кассеты ПЗУ

Packet to source-2: 0801, 8002, 0402, 0400, 6100
Loading error! Response 0x01, instead 0x00
Как видно, попытка грузить опять меню, но загрузка не проходит,
т.к. PPU уже не отвечает правильным образом.

Write 0001 at ADRSP_CON at location PC = 0xAB56
Packet to source-2: 0801, 8002, 0402, 0400, 6100

И так по кругу.

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

Titus
13.02.2012, 04:00
Примерно добрался до туда, где зависает.
Значит загружается Lode Runner корректно, затем делает всякие свои действия, а потом хочет загрузить еще фрагмент уже самостоятельно. Подготавливает корректный блок данных для загрузки с дисковода, и оптравляет его в канал-2 функцией с адресом 27064. Все данные корректно считываются программой обработчиком прерываний в PPU (а именно, адрес массива и заглушка 0xFF, вторая 0xFF не считывается, чтобы канал-2 побыл пока занятым для CPU). Значит все считывается в буфер 23200, устанавливается флаг на 7062, сигнализирующий о том, что считали данные в буфер, а затем программа ППУ возвращается к тому месту, где была прервана.
Но если в тех случаях, когда все грузилось нормально, основная программа была примерно такая:
174206 4770 165150 JSR @-$12630(R0)
--> переход на 111144, где чуть дальше проверяется 7062, и идет всякая обработка,

то в случае с Lode Runner'ом, после
174206 4770 165150 JSR @-$12630(R0)
--> переход на 125030, где какая-то другая программа, которая совсем не хочет проверять 7062, и программа успешно повисает.

Вот пока до куда примерно я дошел.

Alex_K
13.02.2012, 11:14
Titus, еще раз БОЛЬШАЯ ПРОСЬБА писать все адреса и данные в восьмеричной форме, листинги ПЗУ все в восьмеричных адресах, а то переводить приходится.
Сами листинги находятся здесь (http://felixl.com/Uknc_ROM_disasm). В шестой части по адресу 175762 находится обработчик прерываний от канала 2. В ячейке 23200 содержится принятый адрес, а в 23202 - счетчик принятых байтов. После того как принят четвертый байт, устанавливается флаг вызова в ячейке 7062. А далее уже диспетчер процессов вызывает обработчик массива параметров канала 2 по адресу 125030.
Обработчик массива параметров преобразует адрес для загрузки в регистр адреса планов и читает из массива параметров байт со смещением 2 (смещение 1 в формате адреса планов). Биты с 7 по 3 содержат код устройства. Если он больше 3, то идем на кассету ПЗУ, а если это дисковод (код 0), а контроллер отсутствует (7044 меньше нуля), то также на кассету ПЗУ.
Так что сниффер надо ставить на адрес 125030, и уже смотреть, что в ячейке 23200, это и есть адрес массива параметров.

Еще все дело в том, что драйвер на диске ITO90 не ждет чтения четвертого байта драйвером канала 2. Он просто ложит в байт ошибки единицу и ждет очищения этого байта, если он не очистился, то ошибка.

---------- Post added at 11:14 ---------- Previous post was at 11:04 ----------

А судя по всему где-то происходит сбой в подсчете принятых байтов, в 23200 оказывается "левый" адрес, читается совершенно другое, естественно прочитанный код устройства не укладывается в рамки 0-3, ну и обращаемся к кассете ПЗУ. Так что надо капитально проверить работу канала 2, как в режиме опроса флагов, так и прерываний.

Titus
13.02.2012, 14:53
Alex K, ты немножко невнимательно читаешь то, что я написал.

Драйвер загрузчика игр ITO90 действительно не ждет четвертого байта. Но этот драйвер работает нормально. А вот уже драйвер загрузчика ВНУТРИ самих игр (в частности Lode Runner'а), работает иначе. Он ждет четвертый байт.

Далее, сбой счетчиков байтов происходит, но он происходит не из-за сбоев работы канала-2, т.к. это все проверено, канал-2 действительно правильно получает все байты адреса и правильно складывает их в буфер. А вот уже сам диспетчер НЕ вызывается, и обработчик массива по адресу 125030 тоже. Или же вызывается как-то криво. Из-за этого и происходит сбой счетчика байтов, после чего все окривевает.

p.s.: Я уж и так стараюсь все переводить в восьмеричный вид, когда выкладываю на форум. А у меня все в шестнадцатиричном, т.к. восьмиричную систему я не воспринимаю)

---------- Post added at 14:53 ---------- Previous post was at 14:22 ----------

Кажется нашел глюк, буду проверять)

Titus
13.02.2012, 17:13
Фух, наконец-то нашел глюк и исправил.
Все было связано с битами разрешения прерываний PPU от приемников 0,1,2. Они и так там хитрые, из-за чего одно время не работала игра Saper. Оказалось, что не учел одну особенность, и это вылезло в играх от ITO. Теперь, надеюсь, все будет работать, и другие программы не окривеют. Если кто знает программы, критично относящиеся к правильности устройства каналов 0,1,2 - сообщите.

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

Плюс ко всему прочему, теперь второй диск тоже грузится по умолчанию под именем Work.dsk (по просьбе трудящихся).

Смотрите обновленную версию в первом посте.

Alex_K
13.02.2012, 19:14
Titus, сорри, но я внимательно читаю. И расписал алгоритм работы драйвера канала 2, из-за чего это может происходить. Пришлось так анализировать, т.к. встроенного отладчика нет, исходники недоступны, поэтому я и расписал ситуацию, из-за чего вызывается драйвер кассеты ПЗУ.
Очень рад, что ошибка нашлась. А поподробнее можно узнать, если это не секрет.
Диск с JEK-ом от группы KUARKO не грузится. Там в ПП загружается модуль KUARKO.SAV, который фактически заменяет собой системное ПЗУ. Ну и на этапе загрузки подвисает. Там кстати текущим диском назначается MZ1, поэтому лучше грузить с первого привода, или после успешной загрузки с нулевого дать команду DEA DK.

Titus
13.02.2012, 19:24
Очень рад, что ошибка нашлась. А поподробнее можно узнать, если это не секрет.
Диск с JEK-ом от группы KUARKO не грузится. Там в ПП загружается модуль KUARKO.SAV, который фактически заменяет собой системное ПЗУ. Ну и на этапе загрузки подвисает. Там кстати текущим диском назначается MZ1, поэтому лучше грузить с первого привода, или после успешной загрузки с нулевого дать команду DEA DK.

Не секрет. При обновлении регистра состояния приемников 177066, при каждой записи анализировалось, что если И бит разрешения прерывания, И бит готовности канала установлены, то устанавливался запрос на прерывание. Это неверно, т.к. при любой записи в этот регистр происходил повторный взвод запроса на прерывание, если оба бита были в 1. Теперь сделал все тоже самое, но запрос на прерывание устанавливается только если при записи в конкретные биты разрешения прерывания был переход 0->1. Если же было 1->1, то запрос прерывания заново не устанавливается.


А jek не использует ловушку? У меня она не реализована.

Alex_K
13.02.2012, 19:30
Теперь сделал все тоже самое, но запрос на прерывание устанавливается только если при записи в конкретные биты разрешения прерывания был переход 0->1. Если же было 1->1, то запрос прерывания заново не устанавливается.
Это верно только для канала 0 со стороны ЦП. А для каналов 1 и 2 и 0 со стороны ПП немного по другому, я это описывал. UKNCBTL так же подвисал. В исходниках можно глянуть алгоритм работы.

А jek не использует ловушку? У меня она не реализована.
Нет, не использует, насчет этого можете не беспокоится. С ловушкой работает драйвер GD, который выкладывал Vamos, JEK кстати тоже от него. У меня тоже есть JEK, дискета сделана чуть по другому, но зависает также.

Titus
13.02.2012, 19:36
Это верно только для канала 0 со стороны ЦП. А для каналов 1 и 2 и 0 со стороны ПП немного по другому, я это описывал. UKNCBTL так же подвисал. В исходниках можно глянуть алгоритм работы.

Если у меня не верно, почему тогда все работает?

JEK - это что за программа?
При запуске спрашивает ввод чего-то.


---------- Post added at 19:36 ---------- Previous post was at 19:34 ----------

Что такое DEA? Я знаю только ASS.

Alex_K
13.02.2012, 19:44
Если у меня не верно, почему тогда все работает?
Просто на эти особенности натыкается модуль KUARKO. Эта особенность возникает, если произошло прерывание от канала, а байт данных не был прочитан/записан.

JEK - это что за программа?
Графический редактор.

Что такое DEA? Я знаю только ASS.
DEA - сокращенно от DEASSIGN. ASSIGN назначает логическое имя, DEASSIGN отменяет его. Соответственно DEASSIGN DK возвращает DK равное SY.

Titus
13.02.2012, 19:46
Просто на эти особенности натыкается модуль KUARKO. Эта особенность возникает, если произошло прерывание от канала, а байт данных не был прочитан/записан.
Посмотрю тогда.
Интересно, зачем сделали разный алгоритм работы каналов.

Alex_K
13.02.2012, 19:56
Посмотрю тогда.
Интересно, зачем сделали разный алгоритм работы каналов.
Я думаю первоначально алгоритм работы каналов был везде одинаковый. Но с таким алгоритмом RT-11 точно работать не будет (имеется ввиду регистры терминала). Потом видно и переделали. Но вот почему не для всех каналов - для меня большой вопрос. Потому что последовательный порт на 1801ВП1-065 работает нормально, т.к. логически и надо, когда идет переход с 0->1.

Titus
13.02.2012, 23:05
Пытался посмотреть в UKNCBTL Road Fighter с диска ITO91, т.к. у меня там в игре присутствует мерцающий байтик, хотел сравнить так же в UKNCBTL или нет. В итоге вообще не смог внятно запустить эту игру. Максимум доходит до заставки, а то и до нее не доходит, повисает. Эмуль от 2.10.2011. Кстати, у меня она тоже через раз запускается, виснет на заставке.

Короче, выяснил такую закономерность. В версии UKNCBTL от 2.10.2011 до заставки вообще не доходит, а в версии от 28 июля 2010 работает как и у меня, через раз запускаясь, и мерцающий байт в самой игре на дороге присутствует.

Alex_K
13.02.2012, 23:26
Да запускается все в UKNCBTL, может правда иногда дисковод подвиснуть, но передергиваешь дискету и все нормально.
А что это за мерцающий байт?

Titus
13.02.2012, 23:29
Да запускается все в UKNCBTL, может правда иногда дисковод подвиснуть, но передергиваешь дискету и все нормально.
А что это за мерцающий байт?
В версии от 2 октября 2011 не запускается у меня.

Сделай черно-белый режим, в нем лучше видно. Ехай по дороге, и увидишь его, он будет померцивать.

Alex_K
13.02.2012, 23:34
В версии от 2 октября 2011 не запускается у меня.
Есть более поздние версии. Кстати в EmuStudio тоже иногда на заставке виснет.

Сделай черно-белый режим, в нем лучше видно. Ехай по дороге, и увидишь его, он будет померцивать.
Да, такое и заметишь не сразу. Интересно, а как на реале?

Titus
13.02.2012, 23:36
Есть более поздние версии. Кстати в EmuStudio тоже иногда на заставке виснет.

Да, такое и заметишь не сразу. Интересно, а как на реале?

Да, у меня тоже через раз на заставке виснет.

На реале не смотрел.

Alex_K
13.02.2012, 23:43
Кстати, раз такой эффект в обоих эмуляторах, то я думаю, что нормально. Ведь изображение в этой игре не двигают, на УКНЦ это слишком муторно и медленно. Перелопачивают скорее всего таблицу описания видеострок, ну где-то чего-то не учли ...

Mad Killer/PG
14.02.2012, 00:05
Titus, будет ли поддержка винта реального ?
Понимаю,что прошу слишком много но вдруг у автора будет возвышенное вдохновение и не чем будет заняться - мячты;)

Titus
14.02.2012, 00:06
Titus, будет ли поддержка винта реального ?
Понимаю,что прошу слишком много но вдруг у автора будет возвышенное вдохновение и не чем будет заняться - мячты;)
Реального? Это в виде железки или образа?

hobot
14.02.2012, 00:14
У меня тоже есть JEK, дискета сделана чуть по другому, но зависает также.
Может всё таки стоит сделать образ (считать её) для архива ?

Titus
14.02.2012, 00:19
Hobot, не нашел еще игр, которые глючат в эмуляторе?

Alex_K
14.02.2012, 00:19
Может всё таки стоит сделать образ (считать её) для архива ?
А зачем? Есть же уже в архиве диски U1.DSK и U2.DSK.

Mad Killer/PG
14.02.2012, 00:25
Реального? Это в виде железки или образа?

Обе позиции в опросе не участвуют;)?

Titus
14.02.2012, 00:33
Обе позиции в опросе не участвуют;)?
Лично мне железный хард вообще не нужен для подключения к эмулятору. Софтварный тоже пока особо не зачем, есть же дискетки.

hobot
14.02.2012, 00:51
U1.DSK и U2.DSK
Тогда к ним нужно подробное описание, у меня в UKNCBTL с ними ничего не получается + они читаются через раз, глюк с загрузкой - это раз, второй момент
как редактор запускать? И иметь "немного другую" копию в архиве, почему нет? )))


Hobot, не нашел еще игр, которые глючат в эмуляторе?
Пока нет, но отпишу если попадутся, с Таблицей рекордов в некоторых игрушках(ИТО) - это глюк такой "ломаной" версии игропакетов (скорее всего), то есть когда делал gif файлы
http://savepic.net/2291933.gif
http://savepic.net/2292957.gif
- нужны были кадры разных стадий игр, тогда и обнаружилось что у некоторых игр вылетает "Стоп" при попытке отобразить Таблицу, а у некоторых всё норм, титры также не у всех игр удалось посмотреть, поэтому эти моменты и не вошли в анимацию. Я тут копаюсь в "странных" образах - которые эмулируют КЦГД для УКНЦ и тут есть ссылка на игры под КЦГД - вот этот момент и изучаю сейчас, самих файлов с этими играми в образах нет, только в тексте описание. LANDR - я гляжу добавился это хорошо )))
Сейчас версию EmuStudio в архиве обновлю - только я ITO диск там уберу из архива, поскольку если добавлять ИМХО:надо оба, а так они же есть в хламнике - легко ищутся теперь )))
--------------------------------------------------

Другой момент честных версий нет, вот это плохо.(!) Но (наверное) честные не считаешь и работать будут только на реале и сетевых версий то же нет, а ведь реальные дискеты у кого-то должны быть? :confused_std:

Titus
14.02.2012, 00:56
тогда и обнаружилось что у некоторых игр вылетает "Стоп" при попытке отобразить Таблицу, а у некоторых всё норм, титры также не у всех игр удалось посмотреть, поэтому эти моменты и не вошли в анимацию.

Я тут копаюсь в "странных" образах - которые эмулируют КЦГД для УКНЦ и тут есть ссылка на игры под КЦГД - вот этот момент и изучаю сейчас, самих файлов с этими играми в образах нет, только в тексте описание.

Да, у меня тоже какая-то игра вылетела в стоп после игры.

Сомневаюсь, что можно эмулировать КЦГД для УКНЦ. У КЦГД в ширину до 800 точек, например. И цветов больше.

hobot
14.02.2012, 01:16
Сомневаюсь, что можно эмулировать КЦГД для УКНЦ. У КЦГД в ширину до 800 точек, например. И цветов больше.
http://zx.pk.ru/showpost.php?p=447211&postcount=201
Я ничего не утверждаю, я похожий образ нашёл в другом источнике, с другой документацией и другими описаниями - вот и читаю сам пытаюсь понять как это
всё должно было работать по замыслу "гениев-создателей" )))

---------- Post added at 01:16 ---------- Previous post was at 01:15 ----------

Понимаю так - хотели полностью заменить ( и в живой сетке наверное ) УКНЦшкой ДВКа машины !!! Дешево и сердито !!! )))

Titus
14.02.2012, 01:17
Я ничего не утверждаю, я похожий образ нашёл в другом источнике, с другой документацией и другими описаниями - вот и читаю сам пытаюсь понять как это
всё должно было работать по замыслу "гениев-создателей"
Выкладывай)

hobot
14.02.2012, 01:23
Выкладывай)
Давно уже в сети и тебе очень давно я просил(рекомендовал) к изучению раздел HD1 из этого архива (http://pdp-11.org.ru/~hobot_lmb/EMULATORS/E11/E11.rar)
где ИМХО:очень много по теме данной интересного, но тогда я ещё
не знал про твой эмулятор и про его способности(видео-гибрида), теперь это ещё интересней стало.

Titus
14.02.2012, 01:25
Кстати, этот эмулятор VT200 на моем эмуле не запускается)

hobot
14.02.2012, 01:31
Кстати, этот эмулятор VT200 на моем эмуле не запускается)
почему и попал под пристальное внимание архивариуса )))))))))))))))))))))))

---------- Post added at 01:31 ---------- Previous post was at 01:30 ----------

Но hd1 из архива (который в хламнике) интереснее в разы !!!!!! Там похоже сам дистрибутив всей этой поделки )))

Titus
14.02.2012, 06:15
Если же это канал 0 со стороны ПП или каналы 1 или 2, то запроса увы не затребуется, несмотря на переход с (БГ .AND. РП = 0) на (БГ .AND. РП = 1). В этом случае правило перехода с (БГ .AND. РП = 0) на (БГ .AND. РП = 1) будет выполнено, если был прочитан/записан регистр данных (и соответственно сброшен бит ГТ).

Вот это место поподробней расписать можно?

Сейчас у меня сделано так:
Со стороны ПП:
Приемники 0, 1, 2:

Запрос на прерывание снимается при:
1. Чтении регистра данных приемника
2. При сбросе РП в 0.
3. При совершении прерывания
4. (наверно неправильно, но пока есть) при сбросе бита БГ в регистре 177066

Запрос на прерывание устанавливается при:
1. Записи в регистр данных со стороны ЦП в источник при РП = 1.
2. При переходе РП 0->1, и уже установленном БГ = 1.
3. (наверное неправильно, но пока есть) при записи в регистр 177066 в бит БГ 0->1 при установленном РП.

Источники 0, 1:

Запрос на прерывание снимается при:
1. При совершении прерывания

Запрос на прерывание устанавливается при:
1. Чтении регистра данных приемника со стороны ЦП, при РП = 1.
2. (наверное неверно) Если при записи в 177076 (БГ .AND. РП) = 1. (БГ можно писать!)

Со стороны ЦП:
Источники 0, 1, 2:

Запрос на прерывание снимается при:
1. При совершении прерывания

Запрос на прерывание устанавливается при:
1. Чтении регистра данных приемника со стороны ПП, при РП = 1.
2. При записи в регистр состояния источника РП = 1, при установленнном БГ = 1.

Приемники 0, 1:

Запрос на прерывание снимается при:
1. При совершении прерывания

Запрос на прерывание устанавливается при:
1. Записи в регистр данных источника со стороны ПП при установленном РП = 1.
2. При записи в регистр состояния приемника РП = 1, при установленнном БГ = 1.

Titus
15.02.2012, 17:04
Пока никто не отвечает, задам еще несколько вопросов.

1. Что делает 6-й разряд в регистре 177066? Написано 'разрешение прерывания по команде RESET на магистрали ЦП'. Что это означает? Какое прерывание, где, зачем?

2. 2-й разряд в регистре 177076. "Выключение регистров канала-0 из адресного пространства ЦП". Как это работает и зачем это нужно?

Alex_K
15.02.2012, 18:54
Пока никто не отвечает, задам еще несколько вопросов.
Да уж в этой теме ранее вопрос поднимался, я описывал принцип. В каком-то другом топике тоже. Неохота десять раз одно и тоже писать. Есть исходники UKNCBTL, там же все посмотреть можно (файл Board.cpp).
Плюс к тому же рабочая неделя началась, уже времени на общение меньше.

1. Что делает 6-й разряд в регистре 177066? Написано 'разрешение прерывания по команде RESET на магистрали ЦП'. Что это означает? Какое прерывание, где, зачем?
Программа в ЦП дает команду RESET, процессор по этой команде на шину выставляет INIT. Так вот этот INIT идет соответственно и на 1801ВП1-120. Регистры со стороны ЦП сбрасываются, а со стороны ПП возникает запрос на прерывание при установленном 6-м разряде 177066.

2. 2-й разряд в регистре 177076. "Выключение регистров канала-0 из адресного пространства ЦП". Как это работает и зачем это нужно?
Это значит, что при обращении к адресам 177560-177567 происходит TRAP4, т.е. регистры исчезают из адресного пространства ЦП. Но в UKNCBTL это пока не сделано, есть тонкий вопрос: если для приемника разрешили прерывание, в ПП запретили эти регистры, а со стороны ПП в источник канала 0 записали значение. Возникнет ли прерывание?

---------- Post added at 18:54 ---------- Previous post was at 18:52 ----------

Еще вдобавок: биты готовности можно только читать, писать их нельзя.

Patron
15.02.2012, 19:22
Насколько я понимаю - чтение и запись регистра данных влияют на установку прерывания через сигнал готовности.

Поэтому, есть смысл полностью забыть про чтение/запись регистра данных и говорить только про состояние сигнала (бита) готовности.

В портах "в стиле ДВК" запрос прерывания устанавливается при установке логического произведения (операция AND) битов БГ и РП в 1 и сбрасывается при обнулении этого произведения (а также при передаче вектора и при сбросе шины сигналом INIT).

В портах "в стиле УКНЦ" (насклько я понял) бит готовности влияет на формирование запроса прерывания не напрямую, а через "промежуточный бит" ПБ.

Правила при этом таковы:

1. Если БГ устанавливается - ПБ устанавливается.
2. Если БГ сбрасывается - ПБ сбрасывается.
3. Запрос прерывания выдаётся по AND ПБ и РП.
4. При передаче вектора ПБ сбрасывается.

Вся хитрость (и единственное отличие) здесь в том, что после передачи вектора - бит ПБ сбрасывается.

Поэтому, даже если бит БГ остался равен 1 - новый запрос прерывания станет возможен только тогда, когда бит ПБ будет установлен в 1 (а для этого бит БГ должен "передёрнуться" 1-0-1).

form
16.02.2012, 07:15
Насколько я понимаю - чтение и запись регистра данных влияют на установку прерывания через сигнал готовности.

Кстати о прерываниях. В другой теме - не помню в которой, написал здесь - помнится недавно говорилось, что при разрешении прерывания в 177564, оно будет лупить пока не запретить. Ради интереса проверил: ни на одном из имеющихся в моем распоряжении DL-подобных устройств прерывание не повторяется - то есть происходит одно прерывание и все. Следующее не происходит если не было записи в 177566.

Patron
16.02.2012, 10:12
прерывание не повторяется - то есть происходит одно прерывание и все. Следующее не происходит если не было записи в 177566."Внеочередное" прерывание произойдёт, если выполнить последовательность команд:


BiC #100, @#177564
BiS #100, @#177564

Ни одна из этих команд не пишет в 177566.

form
16.02.2012, 10:19
"Внеочередное" прерывание произойдёт, если выполнить последовательность команд:


BiC #100, @#177564
BiS #100, @#177564

Ни одна из этих команд не пишет в 177566.

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

---------- Post added at 13:19 ---------- Previous post was at 13:18 ----------

А, sorry, это я невнимательно прочитал :)
Если запретить, а потом снова разрешить - этого понятно хватит.

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

Кстати вместо


BiC #100, @#177564

проще делать


CLR @#177564

за одним исключением это даст тот же эффект, но вероятность потребности в исключении маловероятна :)

Patron
16.02.2012, 11:26
Если запретить, а потом снова разрешить - этого понятно хватит. Просто где-то утверждалось что как прерывание разрешено, так оно и будет возникать само собой до бесконечности.Вряд ли кто-то стал бы утверждать столь странные вещи :)

Утверждалось, что порты УКНЦ (в отличие от "нормальных") никак не реагируют на "передёргивание" бита 0100, даже если бит 0200 установлен в 1, при условии, что одно прерывание "по этому поводу" уже было.

form
16.02.2012, 11:28
Вряд ли кто-то стал бы утверждать столь странные вещи :)

Утверждалось, что порты УКНЦ (в отличие от "нормальных") никак не реагируют на "передёргивание" бита 0100, даже если бит 0200 установлен в 1, при условии, что одно прерывание "по этому поводу" уже было.

Могу ошибиться, но мне почему-то запомнилось, что кто-то говорил про такое.
Впрочем было это давно, искать лень :)

Кстати насчет нормальных - могу проверить вечером влияет или нет.
Хотя если твой CPS так работает - можно считать проверенным - лень было смотреть что там внутри :)

Patron
16.02.2012, 11:34
Хотя если твой CPS так работает - можно считать проверенным - лень было смотреть что там внутриИменно так.

Мало того - так работает вывод на экран в RT-11. Когда в буфере вывода кончаются символы - выполняется команда BIC #100,@#TTPS.

При попадании в буфер вывода каждого (?) нового символа выполняется BIS #100,@#TTPS.

Таким образом управление передаётся на подпрограмму вывода очередного символа в регистр данных терминала единообразно - через прерывание готовности терминала.

form
16.02.2012, 12:01
Когда в буфере вывода кончаются символы - выполняется команда BIC #100,@#TTPS.

Ну, положим, так работают вообще все нормальные драйвера - когда от устройства не ожидается активности, его прерывания выключают :)

Но это никак не относится к описанному так как в данном случае кроме снятия прерываний, RT-11 еще и пишет в @TTPB символ :)

Patron
16.02.2012, 12:25
кроме снятия прерываний, RT-11 еще и пишет в @TTPB символ :)Не пишет.

После записи последнего символа из буфера вывода в TTPB - происходит прерывание TTPINT. Подпрограмма обработки TTPINT видит, что выводить больше нечего и очищает бит разрешения прерываний в TTPS.

После записи нового символа в буфер вывода - подпрограмма обработки EMT устанавливает бит разрешения прерываний в TTPS и происходит новое прерывание TTPINT, хотя в регистр TTPB ( с прошлого прерывания TTPINT ) никаких записей не производилось.

form
16.02.2012, 12:38
После записи нового символа в буфер вывода - подпрограмма обработки EMT устанавливает бит разрешения прерываний в TTPS

Программа обработки EMT вообще не пишет ничего на экран.
Это делается в подпрограмме обработки прерываний.

Patron
16.02.2012, 12:59
Программа обработки EMT вообще не пишет ничего на экран. Это делается в подпрограмме обработки прерываний.Но подпрограмма обработки прерывания TTPINT (после опустошения буфера вывода) пишет на экран только после второго прерывания TTPINT подряд. Никаких записей в регистр данных терминала между этими двумя прерываниями не происходит.

form
16.02.2012, 13:04
Но подпрограмма обработки прерывания TTPINT (после опустошения буфера вывода) пишет на экран только после второго прерывания TTPINT подряд. Никаких записей в регистр данных терминала между этими двумя прерываниями не происходит.

Что она пишет после опустошения буфера? :)

---------- Post added at 16:04 ---------- Previous post was at 16:00 ----------

А насчет снятия прерываний через одно прерывание после окончания - подтверждаю.

Patron
16.02.2012, 13:11
Что она пишет после опустошения буфера?Ничего (если буфер вывода пуст). Об том и речь - не пишет. До получения второго прерывания подряд. После первого (если буфер вывода пуст) - очищает разрешение прерываний. После второго - проверяет буфер вывода на наличие байтов и если таковые есть - выводит (иначе - опять очищает разрешение прерываний).