Все вокруг выкладывают свои наработки в плане эмуляции, даже недоделанные. Хочу и я поделиться неким наброском эмулятора УКНЦ, который написан, правда, еще в 2006 году.
Никакого сервиса в нем нет, и дописывать его не собираюсь, т.к. он писался чисто под меня, поиграть.
По сравнению с UKNCBTL, совместимости с реальной УКНЦ в нем меньше, т.к. многое недописно. Но тоже имеет место быть.
Некоторые особенности:
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.: К режиму КЦГД ДВК просьба не относиться серьезно, т.к. он написан чисто для посмотреть, что же это такое.