© by Dolphin_Soft Vladivostok 2018–2022
Написан на MSX X-BASIC.
Программа предназначена для редактирования экранных шрифтов, разрешением 8×16 пикселей. Эти шрифты могут использоваться во всех текстовых режимах или тайловых режимах:
Программа при старте включает режим черезстрочной развёртки, и инициализирует прерывание луча развёртки, в котором производится считывание чётности выводимого кадра, и в соответствии ей переключается адрес знакогенератора.
Тем самым достигается возможность реалтаймового отображения редактируемого шрифта, и его изменение «на лету».
При редактировании, возможно искажение символов до такой степени, что интерфейс программы становится нечитаемым. Для того чтобы этого избежать, была создана возможность использования «Системного шрифта», который загружается на этапе запуска, и реализована возможность переключения между редактируемым шрифтом и системным.
Так как при операциях дискового ввода/вывода, невозможна работа прерываний, программа при старте копирует штатный шрифт (8×8) в теневую страницу, и при выполнении дискового ввода/вывода, переключается кратковременно на него.
Эта возможность не была предусмотрена на этапе разработки программы, поэтому изначально, адреса банков для редактирования были выбраны штатные для режима SCREEN0, 80 символов в строке (адрес знакогенератора 0x1000).
Таким образом, проблема была устранена.
Сразу после завершения операции чтения/записи шрифта, программа вновь инициализирует прерывание отображения, и включает режим отображения шрифтов 6х16.
При старте программы, выполняются инициализации, загрузка системного шрифта, перемещение таблицы цветов (области блинка), и выполняется вывод интерфейса.
Редактируемый шрифт при этом, берётся штатный (8×8), и выполняется его копия в Банк1 из Банк0, тем самым достигается конвертирование стандартного шрифта 8×8, в удвоенный — 8×16.
Все дальнейшие операции с программой эти действия не выполняют.
Используемая видеопамять распределена следующим образом:
0x0000–0x07FF | Экранная область |
0x0800–0x0FFF | Теневая страница (при старте в ней создаётся справка по клавишам) |
0x1000–0x17FF | Банк №0 редактируемого шрифта (чётные строки) |
0x1800–0x1FFF | Банк №1 редактируемого шрифта (нечётные строки) |
0x2000–0x27FF | Банк №0 системного шрифта (чётные строки) |
0x2800–0x2FFF | Банк №1 системного шрифта (нечётные строки) |
0x3000–0x37FF | Банк стандартного шрифта (8×8) для операций ввода/вывода |
0x3800–0xBFFF | Неиспользуемая область видеопамяти |
0xC000–0xC0FF | Таблица цветов (знакоместа областей блинка) |
0xC100–0xC112 | Служебная область флагов и буфер копирования символа |
При сохранении редактируемого шрифта, создаётся бинарный файл font.fnt
, в который копируется область видео–буфера, лежащая по адресам:
0x1000 – 0x1FFF, размером 4кб.
Полученный файл представляет собой два банка шрифта, в первой половине файла находятся чётные строки, во второй соответственно нечётные.
Файл можно преобразовать для использования на других платформах.
Перед сохранением редактируемого шрифта, в нем автоматически стирается карта символа с кодом 0, так как этот служебный символ используются программой в качестве курсора линзы символа. Второй служебный символ с кодом 255, может быть изменён, и все изменения будут сохранены. Это свойство использует шрифт cp1251, в котором символ с кодом 255, содержит русскую букву «я». ВНИМАНИЕ: Если включено отображение редактируемого шрифта, то при переключении вида курсора, этот символ будет уничтожен, битовой картой курсора, выбранной для соответствующего режима его отображения!
При загрузке символа, эти же коды карт автоматически заполняются картами курсора линзы символа, которые так же могут быть изменены программой, при переключении режимов отображения (2D/3D).
Так же, при загрузке шрифта, автоматически выбирается для отображения, вновь загруженный шрифт. Это сделано для удобства и устранения путаницы.
В интерфейсе программы, это отображается строкой: System Font, за которой следует адрес в видеопамяти (назначение адресов указано выше в таблице).
Интерфейс программы очень прост и информативен.
Вверхней части находится тайтл, в котором содержится названия, номер версии, и правообладатель (я — Dolphin_Soft) :)
В центре экрана находится табличка адресов редактируемого фонта, текущий адрес отображаемого шрифта (системный), под которым находится информация о текущем символе редактирования (его код в hex и dec виде, а так же сам символ) Под таблицей адресов, распологается карта шрифта, с выделенным в ней символом, который выбран в качестве редактируемого.
В правой части находится «Линза символа» — область для редактирования, в которой можно выполнять перемещения курсора, клавишами управления.
Строки линзы тонированны разным цветом, показывая, в каком банке шрифта, находится
редактируемая строка.
При нажатии клавиши «Пробел», происходит инверсия текущего блока (точки символа).
«Курсор линзы», автоматически инвертируется в зависимости от блока под ним.
Это сделано ввиду ограничений текстового видеорежима. Для облегчения поиска местоположения курсора в линзе, нажатие клавиши Shift, заставляет его мигать.
Используя клавиши управления курсором, при зажатой клавише Shift, можно выбирать редактируемый символ в карте шрифта. Так же можно перемещаться между редактируемыми символами, используя клавиши < и > (больше/меньше).
Возможно «безотрывное» редактирование, то есть неотпуская клавишу Пробел, перемещая курсор клавишами управления, блоки автоматически инвертируются по траектории его движения.
Внизу экрана находится панграма, отображающая все буквы шрифта, в кодировке MSX.
Под ней располагаются «Ключи» — клавиши управления, более развёрнутую справку по которым, можно получить, удерживая клавишу — H:
Shift | Save Font.fnt | Сохранение редактируемого шрифта |
L | Load Font.fnt | Загрузка редактируемого шрифта |
B | System Font Adr. | Переключает вид между шрифтами «редактируемый» ↔ «системный» |
Ctrl | Copy Bank 0 → 1 | Выполняет копирование банка 0 в банк 1 |
R | Load BIOS char | Перечитывает карту символа из ПЗУ, с копированием в банк 1 |
F | Fill ( white ) | Заполняет все блоки линзы |
< | To previous char | Переход к предыдущему коду символа |
> | To next char | Переход к следующему коду символа |
3 | View in 2D or 3D | Переключает форму курсора «плоский» ↔ «псевдо 3D» |
DEL | Clear blocks | Очищает все блоки линзы |
SPACE | Invert block | Инвертирует текущий блок линзы |
SHIFT | Seek mode | При нажатии, курсор линзы становится мигающим, и в этом режиме, можно производить произвольное перемещение по таблице символов фонта, используя клавиши управления курсором |
CTRL | Roll mode | Удерживая клавишу CTRL, можно производить прокрутку редактируемого символа, для центровки в поле битовой карты |
ESC | Exit Program | Выход из программы |
CTRL+Ins | Copy | Копировать карту символа в буфер обмена |
SHIFT+Ins | Paste | Копировать карту символа из буфера обмена в линзу |
При нажатии клавиши 3, происходит переключение вида блоков линзы, из «плоского», в «псевдо 3D» и обратно.
Текущий редактируемый символ, можно вернуть в состояние стандартного вида, путём загрузки его из системного ППЗУ. При этом происходит его копирование в оба банка (0 и 1).
Вызов этой функции возможен через нажатие клавиши R
Клавишами F и DEL, можно соответственно заполнить все блоки линзы, или очистить.
Комбинациями клавиш CTRL+INS, SHIFT+INS, можно копировать и вставлять карту редактируемого символа в буфер обмена и обратно.
Удерживая клавишу CTRL, и используя клавиши управления курсором, можно «прокручивать» редактируемый символ в редактируемом поле, для корректировки его положения.
Клавишей B, переключается отображение шрифта на экране, между «Системным» и «Редактируемым».
Клавишами Shift и L, производятся сохранение и загрузка редактируемого шрифта, соответственно.
Загрузка и сохранение не подразумевают задания имени шрифта.
Используется имя файла — font.fnt