Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
msx:msx2_programming_technique:msx2_programming_technique [2023-02-04 23:08] GreyWolf [MSX-DOS: минимальные сведения] |
msx:msx2_programming_technique:msx2_programming_technique [2023-02-04 23:28] (текущий) GreyWolf [Видеопроцессор (VDP) MSX-VIDEO] |
||
---|---|---|---|
Строка 419: | Строка 419: | ||
- | ====== BCD - aрифметика ====== | + | ====== BCD–aрифметика ====== |
- | <code> | + | |
- | Неистребимая приверженность человечества к десятичной | + | Неистребимая приверженность человечества к десятичной системе счисления породила странный гибрид — BCD–арифметику, которая почти полностью аналогична шестнадцатиричной, но за |
- | системе счисления породила странный гибрид - BCD-арифметику, | + | |
- | которая почти полностью аналогична шестнадцатиричной, но за | + | |
малым исключением: в ней наложен запрет на цифры А,B,...,F. | малым исключением: в ней наложен запрет на цифры А,B,...,F. | ||
- | Так, например, операция 88h + 04h дает вместо 8Ch число | ||
- | 92h. Сложение же чисел 99h и 01h приводит к результату 100h, | ||
- | от которого остается 00h плюс все прежние выкладки. | ||
- | Микропроцессор умеет оперировать BCD-числами; для этого | ||
- | в системе команд предусмотрена десятичная коррекция резуль- | ||
- | тата, которая должна выполняться вслед за сложением и вычи- | ||
- | танием (операции уменьшения и увеличения на 1 коррекции НЕ | ||
- | поддаются!): | ||
- | 1) 88h + 04h -> 8Ch - обычное сложение | + | Так, например, операция 88h + 04h дает вместо 8Ch число 92h. Сложение же чисел 99h и 01h приводит к результату 100h, от которого остается 00h плюс все прежние выкладки. |
- | 2) 8Ch -> 92h - десятичная коррекция | + | |
- | Следует понимать, что коррекция отнюдь не выполняет пе- | + | Микропроцессор умеет оперировать BCD—числами; для этого в системе команд предусмотрена десятичная коррекция результата, которая должна выполняться вслед за сложением и вычитанием (операции уменьшения и увеличения на 1 коррекции НЕ поддаются!): |
- | ревода из 16-ричной системы в десятичную. Если операнды со- | + | |88h + 04h -> 8Ch|обычное сложение| |
- | держат "запрещенные" цифры (A...F), результат коррекции ока- | + | |8Ch -> 92h|десятичная коррекция| |
- | зывается непредсказуемым. | + | |
- | </code> | + | Следует понимать, что коррекция отнюдь не выполняет перевода из 16—ричной системы в десятичную. Если операнды содержат "запрещенные" цифры (A...F), результат коррекции оказывается непредсказуемым. |
====== Многоразрядная арифметика ====== | ====== Многоразрядная арифметика ====== | ||
Строка 2071: | Строка 2058: | ||
====== BIOS ====== | ====== BIOS ====== | ||
- | <code> | ||
- | В каждый без исключения компьютер MSX2 встроено большое | ||
- | количество подпрограмм со стандартными правилами вызова, за- | ||
- | готовленных практически на любой случай жизни: | ||
- | - опрос мануальных устройств (клавиатуры, мыши, трекбо- | ||
- | ла, джойстика, светового пера, тач-панели и пр.); | ||
- | - работа с графикой (смена режимов экрана, точечно-век- | ||
- | торная и растровая графика, регулировка палитры, прямой дос- | ||
- | туп к VDP, спрайты, скоростные пересылки фрагментов, гашение | ||
- | дисплея и пр.); | ||
- | - ввод и вывод строк, управление координатами и стилем | ||
- | курсора; | ||
- | - музыкально-шумовые эффекты, битовый ввод-вывод звука, | ||
- | прямой доступ к AUDIO; | ||
- | - математический пакет (разбор выражений, арифметика с | ||
- | плавающей точкой, тригонометрия); | ||
- | - обслуживание слотов, принтера, видеотайзера, таймера; | ||
- | Этот набор носит сокращенное название BIOS и размещает- | + | В каждый без исключения компьютер MSX2 встроено большое количество подпрограмм со стандартными правилами вызова, заготовленных практически на любой случай жизни: |
- | ся в двух ROM, именуемых MAIN-ROM (есть и у MSX, и у MSX2) и | + | * опрос мануальных устройств (клавиатуры, мыши, трекбола, джойстика, светового пера, тач-панели и пр.); |
- | SUB-ROM (только у MSX2). Каждая ROM имеет стандартный список | + | * работа с графикой (смена режимов экрана, точечно-векторная и растровая графика, регулировка палитры, прямой доступ к VDP, спрайты, скоростные пересылки фрагментов, гашение |
- | входных точек, к которым и производится обращение. | + | * дисплея и пр.); |
- | BIOS составляет основу всей "философии MSX": если Ваша | + | * ввод и вывод строк, управление координатами и стилем курсора; |
- | программа все свои операции проводит строго через BIOS, она | + | * музыкально-шумовые эффекты, битовый ввод–вывод звука, прямой доступ к AUDIO; |
- | полностью застрахована от коллизий, связанных с переходом на | + | * математический пакет (разбор выражений, арифметика с плавающей точкой, тригонометрия); |
- | другую модель компьютера или непредвиденным изменением его | + | * обслуживание слотов, принтера, видеотайзера, таймера; |
- | конфигурации. | + | |
- | Доступ к входным точкам MAIN-ROM и SUB-ROM открывается, | + | Этот набор носит сокращенное название BIOS и размещается в двух ROM, именуемых [[msx:bios#main|MAIN-ROM]] (есть и у MSX, и у MSX2) и [[msx:bios#sub|SUB-ROM]] (только у MSX2). Каждая ROM имеет стандартный список входных точек, к которым и производится обращение. |
- | благодаря межслотовым процедурам. Требуемый номер слота для | + | |
- | MAIN-ROM содержится по адресу FCC1h, для SUB-ROM - по адресу | + | |
- | FAF8h, поэтому корректный вызов точки BIOS выглядит так: | + | |
+ | BIOS составляет основу всей "философии MSX": если Ваша программа все свои операции проводит строго через BIOS, она полностью застрахована от коллизий, связанных с переходом на | ||
+ | другую модель компьютера или непредвиденным изменением его конфигурации. | ||
+ | |||
+ | Доступ к входным точкам [[msx:bios#main|MAIN-ROM]] и [[msx:bios#sub|SUB-ROM]] открывается,благодаря межслотовым процедурам. Требуемый номер слота для [[msx:bios#main|MAIN-ROM]] содержится по адресу FCC1h, для [[msx:bios#sub|SUB-ROM]] — по адресу | ||
+ | FAF8h, поэтому корректный вызов точки BIOS выглядит так: | ||
+ | <code> | ||
; вызов подпрограммы из MAIN-ROM | ; вызов подпрограммы из MAIN-ROM | ||
Строка 2115: | Строка 2087: | ||
ld iy,(0FAF7h) | ld iy,(0FAF7h) | ||
call 001Ch | call 001Ch | ||
- | |||
- | Кстати, машины MSX не имеют SUB-ROM, поэтому в их ячей- | ||
- | ке FAF8h содержится 0, что позволяет отличать их от MSX2. | ||
- | |||
- | Важно отчетливо осознавать, что стандартом закреплены | ||
- | только адреса входных точек, правила их вызова и выполняемые | ||
- | ими действия, в то время как расположение и содержание самих | ||
- | подпрограмм имеет право изменяться от машины к машине: в том | ||
- | и заключается миссия BIOS, чтобы компенсировать аппаратные | ||
- | различия компьютеров программным путем. | ||
- | Попутно заметим, что интерпретатор языка BASIC не явля- | ||
- | ется частью BIOS (как и любая другая программа, содержащаяся | ||
- | во внешнем или резидентном катридже), поэтому любые адреса и | ||
- | процедуры в теле BASIC-ROM имеют право радикально изменяться | ||
- | вместе с моделью компьютера. | ||
</code> | </code> | ||
+ | Кстати, машины MSX не имеют SUB-ROM, поэтому в их ячейке FAF8h содержится 0, что позволяет отличать их от MSX2. | ||
+ | Важно отчетливо осознавать, что стандартом закреплены только адреса входных точек, правила их вызова и выполняемые ими действия, в то время как расположение и содержание самих | ||
+ | подпрограмм имеет право изменяться от машины к машине: в том и заключается миссия BIOS, чтобы компенсировать аппаратные различия компьютеров программным путем. | ||
+ | |||
+ | Попутно заметим, что интерпретатор языка [[msx:basic:|]] не является частью BIOS (как и любая другая программа, содержащаяся во внешнем или резидентном катридже), поэтому любые адреса и процедуры в теле BASIC-ROM имеют право радикально изменяться вместе с моделью компьютера. | ||
====== Видеопроцессор (VDP) MSX-VIDEO ====== | ====== Видеопроцессор (VDP) MSX-VIDEO ====== | ||
- | <code> | + | |
- | Рассуждая о графических возможностях машин MSX2, трудно | + | Рассуждая о графических возможностях машин MSX2, трудно воздержаться от восхищенных эпитетов в адрес видеопроцессора (VDP) [[msx:yamaha_v9938:yamaha_v9938|V9938]] MSX-VIDEO, благодаря которому компьютеры MSX2 не уступили в мультипликационной графике мощным 16/32-разрядным |
- | воздержаться от восхищенных эпитетов в адрес видеопроцессора | + | |
- | (VDP) V9938 MSX-VIDEO, благодаря которому компьютеры MSX2 не | + | |
- | уступили в мультипликационной графике мощным 16/32-разрядным | + | |
персональным машинам. | персональным машинам. | ||
- | MSX-VIDEO - это не просто графический адаптер, задача | ||
- | которого сводится только лишь к отображению памяти на экран. | ||
- | Это независимый процессор, самостоятельно выполняющий массу | ||
- | специфических операций, для обстоятельного изучения которых | ||
- | нужен отдельный разговор. Попытаемся хотя бы перечислить их. | ||
- | MSX-VIDEO синтезирует экранное изображение на основе | + | MSX-VIDEO — это не просто графический адаптер, задача которого сводится только лишь к отображению памяти на экран. |
- | данных, находящихся в отдельной видеопамяти (VRAM), выдавая | + | Это независимый процессор, самостоятельно выполняющий массу специфических операций, для обстоятельного изучения которых нужен отдельный разговор. Попытаемся хотя бы перечислить их. |
- | на разъемы сигнал RGB и композитный телесигнал в стандарте | + | |
- | PAL или NTSC. Он имеет 2 текстовых и 8 графических режимов, | + | |
- | близких по характеристикам к адаптерам CGA, EGA и VGA. Его | + | |
- | цветовая палитра содержит 512 градаций, причем на экране мо- | + | |
- | гут сосуществовать 256 цветов. Благодаря режиму interlace, | + | |
- | максимальная дискретность достигает 512 x 424. | + | |
- | MSX-VIDEO умеет самостоятельно рисовать точки, отрезки, | + | |
- | прямоугольники и переносить фрагменты изображений, выполняя | + | |
- | разнообразные операции над цветами. Исключительно компактная | + | |
- | знакоместная графика позволяет упаковать в RAM изображение, | + | |
- | превосходящее площадь экрана в сотни раз, а в сочетании со | + | |
- | спрайтами обеспечивает высокоскоростную мультипликацию. | + | |
- | VDP может изменять цвет рамки экрана, гасить и включать | + | |
- | экран, плавно скроллировать его в вертикальном направлении, | + | |
- | генерировать прерывания в заданной строке развертки, мерцать | + | |
- | символами, автоматически переключать страницы VRAM, смещать | + | |
- | изображение относительно экранных границ, регистрировать на- | + | |
- | ложение спрайтов, переходить в монохромный режим, изменять | + | |
- | частоту развертки, оцифровывать внешний сигнал, смешивать с | + | |
- | ним свой сигнал и многое другое. | + | |
- | Поскольку VDP имеет 39 внутренних управляющих регистров | + | MSX-VIDEO синтезирует экранное изображение на основе данных, находящихся в отдельной видеопамяти (VRAM), выдавая на разъемы сигнал RGB и композитный телесигнал в стандарте |
- | (со сложным битовым форматом), целесообразно оставить заботу | + | PAL или NTSC. Он имеет 2 текстовых и 8 графических режимов, близких по характеристикам к адаптерам CGA, EGA и VGA. Его цветовая палитра содержит 512 градаций, причем на экране мо- |
- | обо всех тонкостях управления VDP процедурам BIOS и заняться | + | гут сосуществовать 256 цветов. Благодаря режиму interlace, максимальная дискретность достигает 512×424. |
+ | |||
+ | MSX-VIDEO умеет самостоятельно рисовать точки, отрезки, прямоугольники и переносить фрагменты изображений, выполняя разнообразные операции над цветами. Исключительно компактная | ||
+ | знакоместная графика позволяет упаковать в RAM изображение, превосходящее площадь экрана в сотни раз, а в сочетании со спрайтами обеспечивает высокоскоростную мультипликацию. | ||
+ | |||
+ | VDP может изменять цвет рамки экрана, гасить и включать экран, плавно скроллировать его в вертикальном направлении, генерировать прерывания в заданной строке развертки, мерцать символами, автоматически переключать страницы VRAM, смещать изображение относительно экранных границ, регистрировать наложение спрайтов, переходить в монохромный режим, изменять частоту развертки, оцифровывать внешний сигнал, смешивать с ним свой сигнал и многое другое. | ||
+ | |||
+ | Поскольку VDP имеет 39 внутренних управляющих регистров (со сложным битовым форматом), целесообразно оставить заботу обо всех тонкостях управления VDP процедурам BIOS и заняться | ||
более общими принципами графики MSX2. | более общими принципами графики MSX2. | ||
- | </code> | ||
====== Структура видеопамяти (VRAM) ====== | ====== Структура видеопамяти (VRAM) ====== |