Я смутно вспоминаю, как мы вредничали LUT-ом, делая наверное черный на черном. Хорошо, что спастись из такой ситуации было нетрудно.
Вид для печати
Как известно, в Корвете есть две половинки символов знакогенератора:
Вложение 67389
Символы из первой половинки вывести в бейсике очень легко:
PRINT CHR$(код от 32 до 255)
Вопрос: можно ли как-то из бейсика переключиться на вторую половину знакогенератора? Может есть какие-нибудь управляющие символы или может возможно записать через POKE бит по какому-нибудь хитрому адресу для переключения?
Из стандартных управляющих символов мне известны:
Цитата:
Сообщение от «Знакомьтесь: персональная ЭВМ Корвет», страница 152
В Бейсике 2.0 есть штатные средства:
PRINTCHR$(27);"0" - основной знакогенератор
PRINTCHR$(27);"1" - альтернативный знакогенератор
В Бейсике 1.1 можно использовать POKE (в 2.0 они тоже сработают)
POKE&HFB3A,PEEK(&HFB3A)AND251 - основной знакогенератор
POKE&HFB3A,PEEK(&HFB3A)OR4 - альтернативный знакогенератор
Круто! Большое спасибо! Давно хотел сделать тест знакогенератора на бейсике, но не знал как переключать знакогенератор.
Тогда еще вопрос. Заметил, что PRINT CHR$(код) не умеет выводить символы ниже 32. Нашел другой способ их вывода - писать через POKE напрямую в память АЦЗУ код символа.
Например: POKE &HFC00,2 - выведет смайлик c кодом 2 в верхний левый угол.
Адреса методом тыка нашел следующие: от &HFC00 (64512) - верхний левый угол экрана до &HFFFF (65535) - правый нижний.
Может быть существует какой-нибудь штатный способ их отрисовки (символов ниже 32)?
Ни в дисковом, ни в пзу-шном Бейсике 2.0 такой способ почему-то не заработал.
Этим способом получилось. Очень интересно, как вы его нашли? Как нашли адрес в памяти и почему к нему применяются именно эти логические операции? Они накладывают какую-то определенную битовую маску? Действительно очень интересно.
Могу только привести скриншоты из emu
Вложение 67398Вложение 67399Вложение 67400Вложение 67401
Есть техническая информация, например здесь. В данном случае нужно смотреть регистр VIREG, а конкретный бит можно понять по маске FONT1.
Как в графическом режиме вывести текст в нужном месте экрана? Не через LOCATE. То есть, не в определенном знакоместе, а привязать его к определенной точке экрана. Через LOCATE получается слишком дискретно, по высоте с шагом в 16 точек, а мне нужно 12. У Корвета слишком мало строк, всего 16, в то время, как у Суры - 24.На Суре я писал что-то вроде PRESET (120,50):PRINT"текст", и текст начинался от точки 120,50. Здесь это не проходит, текст всё равно выводится от левого края и по высоте с шагом 16 точек.
Короче, я делаю игру "Морской бой", вернее, адаптирую c Q-Basic (в котором я написал её ещё в 90-х). Два игровых поля - корабли противника и свои, между полями нужно написать цифры 1-9, 0, как на картинке:
Вложение 70422
B Q-Basic'e клетки имеют размер 16х16 точек, на Суре - 8х8. А на Корвете приходится делать их 16х12, чтобы они были квадратными. А шаг текста по высоте 16 точек, цифры "убегают" вниз. Вроде, можно написать PRINT AT(координаты), но я не помню синтаксиса. В книге про Корвет я такого не нашёл.
Писать свою процедуру вывода строк без использования АЦЗУ.
Я решил легко выйти из положения. Просто нарисовать цифры операторами LINE. Пусть они будут квадратными или как на почтовом индексе. А потом я обнаружил оператор DRAW. Вместо нескольких LINE можно использовать один DRAW. Но Бейсик ругается: Ошибка синтаксиса. Я пишу правильно, как в книжке про Корвет. Даже буква в букву из примера, например, DRAW"E30R340F30",7. Ну что ему опять не нравится???