А что это вообще такое - графический курсор?
Вид для печати
Для экрана пользователя меняется через ячейку 22746. Содержимое этой ячейки копируется младший байт первого слова регистра управления отображением. Т.е. значение этой ячейки можно поменять в пультовом отладчике ПП и выйти потом в экран пользователя. Там все увидите.
Можно проделать и на реальной машине и в UKNCBTL.
Соответственно в УКНЦ стандартно используются только три младших бита, отвечающие за цвет курсора, а остальные биты (тип курсора, адрес граф.курсора, интенсивность цвета) не используются - нулевые.
Адрес позиции в октете соблюдается, но курсор символьный (т.е. шириной в 8 точек, а не в 1).
---------- Post added at 02:28 ---------- Previous post was at 02:27 ----------
Правда позицию в октете точно не проверял.
---------- Post added at 02:29 ---------- Previous post was at 02:28 ----------
Спать надо. Утро ночи мудренее будет.
Вспомнил. УКНЦ тоже делались разные насчет управления яркостью. Стандартно экран с повышенной яркостью, а курсор с нормальной, поэтому курсор и видно на белом фоне на цветном мониторе. Но в разных партиях УКНЦ для управления яркостью ставили или прямую логику или инверсную. Поэтому в некоторых партиях экран был нормальной яркости, а курсор повышенной.
При очистке экрана с помощью управляющего кода 12 (УПР+L) п/п обработки сначала засвечивает весь экран цветом фона нормальной яркости через регистр управления цветом, потом очищает видеопамять, а затем ложит в регистр управления цветом нормальные значения. Так вот на нормальных УКНЦ экран становится менее ярким при очистке, а на инверсных УКНЦ он вспыхивает. В UKNCBTL естественно реализована прямая логика, поэтому при очистке экран там тухнет.
Небольшой апдейтик видеорежимов.
Сделал третий масштаб 1.25. Судя по всему это как раз то, что должно быть на реале.
Этот режим столь же чувствителен к линейной гамме, как и режим 1.333. Однако, из-за более узкой точки он даже еще более капризен.Скрытый текст
Итак, список режимов масштабирования по X:
Настроить гамму можно по изображению типа 'шахматная доска', например, как в игре 'Кот-рыболов'. Необходимо добиться максимального снижения вертикального муара.Код:1.0 640 точек. Самая высокая четкость.
1.25 800 точек. Очень чувствителен к линейной гамме.
Четкость самая низкая.
Идентичен реальному масштабу.
1.333 853 точки. Чувствителен к линейной гамме.
Четкость средняя.
Требует больше вычислительных затрат
из-за рассчетов некратным степени двойки.
1.5 960 точек. Малочувствителен к линейной гамме.
Четкость высокая.
Скрытый текст
Для телевизионного изображения, имеющего в полукадре 288 строк - "квадратным стандартом" считается 720х576 - именно такой размер имеют (в частности) кадры стандартного DVD-видео.
Квадратный стандарт - 768х576, т.к. соотношение сторон экрана 4:3. Именно в таком стандарте у меня захватываются скриншоты с ТВ-тюнера Beholder. Хотя можно хватать и 720х576. На самом деле для аналогового сигнала никакого кол-ва точек по горизонтали не существует, на сколько разделили, столько и получили. Вот кол-во видимых линий в стандарте PAL/SECAM действительно составляет 576 строк для полного кадра.
Не надо путать цифровые пиксельные стандарты, которые задаются в точках, с аналоговыми видеостандартами. Число линий в стандартной PAL-развертке 320, у УКНЦ видимых 288. Так же, горизонтальное разрешение определяется не мифическими 'стандартными' пикселами типа 720 в ширину, а исключительно параметром Pixel Clock, которое у всех машин разное. Это может быть и 256 (NES), и 320 (Spectrum), и 384 (Специалист), и 400/800 (ДВК), и 640 (УКНЦ) видимых пикселей в ширину.
И в конце концов, соотношение сторон зависит и от настроек конкретного монитора.
Лично я привык к изображению приближенному к соотношению 1:1.25.
Имелось в виду "при отображении на матрицу с квадратными точками".
Очевидно, что если оцифровать телевизионный кадр с разрешением 1440 точек в строке - то при отображении на матрицу с квадратными точками такой кадр будет растянут по горизонтали с коэффициентом x2.
Кстати, как у УКНЦ выводится изображение - один полукадр в оба поля (50 раз в секунду) или один полукадр в одно поле (25 раз в секунду) ?
В первом случае - чётные строки будут дублировать нечётные, а во втором - чётные строки будут пустыми.
Обычный телевизор, как и PAL-монитор, выводит 50 раз в секунду 50 полей. Причем, у каждое поле может быть, как смещено на 1/2 строчки вниз, тогда это будет нечетное поле, или не смещено. Бытовые компьютеры, работающие в PAL-стандарте без интерливинга, все поля выдают без смещения, таким образом и получается 50 раз в секунду 50 одинаковых полей.
---------- Post added at 17:03 ---------- Previous post was at 17:00 ----------
Вру, какой нафиг интерливинг) Интерлейс)
Гениально! Т.е. смещение поля задаётся в сигнале ( похоже, что я не знал этого даже тогда, когда по проектному заданию проектировал свой первый телевизор :).
Но поскольку "толщина" электронного пучка в сигнале задаваться не может, то при выводе такого изображения на обычный телевизор оно будет чересстрочным с частотой 50 Гц.
А какой смысл выводить полукадры без сдвига по вертикали на обычный телевизор, у которого постоянная послесвечения люминфора рассчитана на 25 Гц.
Ведь таким образом мы ничего не приобретаем, кроме "решётчатого" чересстрочного изображения..
Век живи, век учись)
Изображение можно считать чересстрочным с большой натяжкой. Есть кинескоп, по которому рисует лучик. У луча определенная толщина (а в этот параметр входит и зона свечения люминофора), и к слову сказать, для большинства стандартных телевизоров тех годов, 'толщина луча' толще, чем двойное расстояние между строками. Таким образом, мы и видим так называемые сканлайны - черные полосочки между строк. И они, соответственно, в большинстве случаев тоньше, чем строчки с изображением.
Если бы изображение с бытовых компьютеров выводилось тоже в режиме интерлейса, мы бы наблюдали неприятное мерцание с частотой 25Гц.
---------- Post added at 17:20 ---------- Previous post was at 17:18 ----------
Мы получаем немерцающее изображение и немного упрощенный формирователь видеосигнала.
Да и послесвечение не такое уж большое, вполне позволяет обновлять экран с частотой 50Гц. Посмотри спектрумовские демки, где это сплошь и рядом. Да что там, плавный рулон на УКНЦ посмотри на телевизоре или PAL-мониторе.
Это сейчас все производители кинескопов давно перешли на 50-герцовый (а то и 100-герцовый) люминфор, из-за чего на картинку телевизоров "старого образца" с новыми кинескопами смотреть уже невозможно.
Советские же кинескопы делались с "нормальным советским люминфором", который даже после выключения телевизора сохранял картинку секунды две :)
100-герцовые телевизоры - это уже LCD.
Кстати, смотреть 50-герцовое изображение на 100-герцовом телевизоре, у которого нет motion-smooth'инга, т.е. достраивания промежуточных кадров - для глаз напряжно, т.к. при движении остается размытый след на один кадр. Это типичный артефакт обновления изображения с частотой 1/2 от частоты развертки.
100 герц прогрессив (когда каждая точка экрана обновляется 100 раз в секунду) стал стандартом люминфора компьютерных мониторов уже давным-давно. Даже мой убогий телек 10-летней давности - поддерживает режим 100 Гц прогрессив. Весьма похоже, что сейчас медленный люминфор для 50 герц интерлейс (когда каждая точка экрана обновляется 25 раз в секунду) уже вообще не производят.
Ну ладно вклинюсь в академический спор уже по теме EmuStudio.
Про графический курсор.
Не сделано, также неправильно сделан текстовый курсор.
В младшем байте первого слова регистра управления отображением программируется тип и цвет курсора. Биты с 7 по 5 задают позицию графического курсора слева в октете, бит 4 - тип курсора (0 - символьный, все восемь точек засвечены цветом курсора, 1 - графический, только одна точка в октете засвечена цветом курсора), биты с 3 по 0 - яркость и цвет курсора.
Так вот, в EmuStudio не поддерживается графический курсор, а если позиция графического курсора отличается от нулевой, то смещается текстовый курсор на заданное кол-во точек, чего не должно быть.
На рисунках пример со смещением 4. Первый рисунок - текстовый курсор в EmuStudio, на втором рисунке - графический курсор в UKNCBTL.
Координаты курсора и позиция графического курсора в октете - это разные вещи.
В режимах 320, 160 и 80 точек текстовый курсор сделан правильно (за исключением смещения в октете). В широких режимах увеличивается ширина и графического курсора (так же как и текстового).
Координаты графического курсора - это номер знакоместа (как и в текстовом), а потом смещение в октете. В широких режимах номер знакоместа делится на ширину, т.е. в режиме 320 точек номер 0 и 1 - это одно и то же.
Что будет, если в широких режимах задать позицию текстового курсора некратной знакоместу? Будет ли он стоять на знакоместе со смещением?
Нет не будет. В режиме 320 не учитывается младший бит позиции, в 160 соответственно 2 младших бита, в 80 - три младших бита. При этом начало курсора рассчитывается исходя из ширины 80 знакомест. Ну соответственно ширина курсора также увеличивается.
Titus, в вашем эмуляторе текстовый курсор сделан правильно, за исключением смещения в октете. Для текстового курсора оно не употребляется, только для графического.
Посмотри вот этот вариантик.
Вообще, конечно, энтузиазма что-то доделывать, когда весь известный софт работает, нету)
С видом курсора все в полном порядке.
Есть небольшие замечания по черно-белому режиму. Он использует только восемь градаций яркости сигналов RGB, бит интенсивности здесь не используется.
---------- Post added at 18:55 ---------- Previous post was at 18:51 ----------
Ничего, hobot, как всегда чего-нибудь найдет.
Хоть игры и не используют T-бит и HALT-режим, но неплохо бы их допилить.
Сделать запись на диск, она хоть и есть в процессе работы, но как выходишь из эмулятора, то все теряешь. В играх это важно, не только таблицы рекордов, но и текущее состояние (например DOCKER).
---------- Post added at 19:02 ---------- Previous post was at 18:55 ----------
А что это столь важно. Кассета ПЗУ только одна - с Бейсиком. Хотя нет, я ошибаюсь, если реализовать поддержку жесткого диска, то да, интерфейс кассеты ПЗУ нужен.
А вот зачем магнитофон в эмуляторе, когда есть поддержка дисковода, ну и винчестера.
Ну это бы неплохо. Для игрового процесса важно. С винча быстрее грузится, да и игр дофига можно затолкать.
Пользуйтесь FAR-ом. Два-три раза <Ctrl+Enter> вместе со стрелками, ну и <Enter> в конце. Все просто.
Абсолютно согласен. Тоже весьма надеюсь.
Запись не сделал намеренно, чтобы не портились диски, если программа чего-то там затрет не то.
А так, все это уже мелочи. И так целый месяц потратил на допилки)
Так можно запись сделать немоментальную, а после выхода чтобы спрашивало, куда сохранить диск (типа как в unreal speccy)