Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
msx:msx2_programming_technique:msx2_programming_technique [2023-02-04 22:23] GreyWolf [Инструментарий] |
msx:msx2_programming_technique:msx2_programming_technique [2023-02-04 23:28] (текущий) GreyWolf [Видеопроцессор (VDP) MSX-VIDEO] |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
====== 📖 MSX2: Техника программирования ====== | ====== 📖 MSX2: Техника программирования ====== | ||
+ | FIXME | ||
Олег Шамшура 1989-1990 | Олег Шамшура 1989-1990 | ||
Строка 5: | Строка 6: | ||
{{:msx:msx2_programming_technique:oleg_shamshura-msx2doc.zip|Исходные файлы}} | {{:msx:msx2_programming_technique:oleg_shamshura-msx2doc.zip|Исходные файлы}} | ||
- | Любой микропроцессор (в том числе Z80, на котором строится компьютер MSX/MSX2), имеет достаточно развитую систему команд, предписывающих ему то или иное действие. К числу таких команд обычно относятся: сложение, вычитание, условные и безусловные переходы, работа с памятью, логические операции над битами и пр. Фактически, команда - это определенный числовой код, который активизирует соответствующие счетно-логические схемы микропроцессора. | + | Любой микропроцессор (в том числе Z80, на котором строится компьютер MSX/MSX2), имеет достаточно развитую систему команд, предписывающих ему то или иное действие. К числу таких команд обычно относятся: сложение, вычитание, условные и безусловные переходы, работа с памятью, логические операции над битами и пр. Фактически, команда — это определенный числовой код, который активизирует соответствующие счетно-логические схемы микропроцессора. |
Последовательность таких кодов, совместно с числовыми и символьными операндами, образует программу. Несмотря на примитивный характер команд, с их помощью можно построить алгоритм любой сложности (например, интерпретатор языка BASIC). | Последовательность таких кодов, совместно с числовыми и символьными операндами, образует программу. Несмотря на примитивный характер команд, с их помощью можно построить алгоритм любой сложности (например, интерпретатор языка BASIC). | ||
Строка 16: | Строка 17: | ||
Таким образом, процесс разбивается на несколько последовательных этапов: | Таким образом, процесс разбивается на несколько последовательных этапов: | ||
* исходный текст набирается в любом экранном РЕДАКТОРЕ; | * исходный текст набирается в любом экранном РЕДАКТОРЕ; | ||
- | * затем АССЕМБЛЕР превращает его в готовую к исполнению программу или промежуточный REL-файл (это зависит от версии ассемблера). Во втором случае REL-файлы, имеющие отношение к одному проекту, сцепляются воедино при помощи КОМПОНОВЩИКА. (Такой подход удобен при создании крупных проектов, содержащих десятки тысяч команд: он позволяет разрабатывать программу по частям, не затрагивая уже завершенных фрагментов). В процессе ассемблирования/компоновки выявляются грубые синтаксические ошибки; | + | * затем АССЕМБЛЕР превращает его в готовую к исполнению программу или промежуточный REL–файл (это зависит от версии ассемблера). Во втором случае REL–файлы, имеющие отношение к одному проекту, сцепляются воедино при помощи КОМПОНОВЩИКА. (Такой подход удобен при создании крупных проектов, содержащих десятки тысяч команд: он позволяет разрабатывать программу по частям, не затрагивая уже завершенных фрагментов). В процессе ассемблирования/компоновки выявляются грубые синтаксические ошибки; |
* полученная программа тестируется в ОТЛАДЧИКЕ или непосредственно, и при необходимости весь процесс повторяется. | * полученная программа тестируется в ОТЛАДЧИКЕ или непосредственно, и при необходимости весь процесс повторяется. | ||
- | В отличие от MSX-BASIC-интерпретатора, который "видит" ошибки только в том операторе, который исполняется в текущий момент, ассемблер обрабатывает весь текст программы целиком, | + | В отличие от [[msx:basic:]]–интерпретатора, который "видит" ошибки только в том операторе, который исполняется в текущий момент, ассемблер обрабатывает весь текст программы целиком, |
включая и те ветви алгоритма, которые, возможно, никогда не будут пройдены микропроцессором. Поэтому исходный текст должен быть закончен хотя бы формально: всем переходам должны соответствовать метки, незавершенные подпрограммы следует заменить "заглушками", все константы нужно задать и т.д. | включая и те ветви алгоритма, которые, возможно, никогда не будут пройдены микропроцессором. Поэтому исходный текст должен быть закончен хотя бы формально: всем переходам должны соответствовать метки, незавершенные подпрограммы следует заменить "заглушками", все константы нужно задать и т.д. | ||
Строка 33: | Строка 34: | ||
Несколько замечаний по этому поводу. | Несколько замечаний по этому поводу. | ||
- | Во-первых, Вам потребуется Дисковая Операционная Система, которая должна облегчить Вам работу с дисковыми файлами, а также обеспечить переносимость программ с одной модели ЭВМ | + | Во—первых, Вам потребуется Дисковая Операционная Система, которая должна облегчить Вам работу с дисковыми файлами, а также обеспечить переносимость программ с одной модели ЭВМ |
на другую. | на другую. | ||
Строка 46: | Строка 47: | ||
Файлы ''MSXDOS.SYS'' и ''COMMAND.COM'' находятся на одноименном диске, входящем в комплект Вашего компьютера. | Файлы ''MSXDOS.SYS'' и ''COMMAND.COM'' находятся на одноименном диске, входящем в комплект Вашего компьютера. | ||
- | Теперь об ассемблере и других инструментах. | + | Теперь об ассемблере и других инструментах. |
Чтобы постичь основы, достаточно приобрести пакет [[msx:duad:duad|]], который содержит в себе все необходимое. | Чтобы постичь основы, достаточно приобрести пакет [[msx:duad:duad|]], который содержит в себе все необходимое. | ||
Строка 54: | Строка 55: | ||
|GEN80.COM|[[hisoft_devpac:hisoft_devpac#GEN80|быстрый ассемблер]]| | |GEN80.COM|[[hisoft_devpac:hisoft_devpac#GEN80|быстрый ассемблер]]| | ||
|MON80.COM|экранный отладчик| | |MON80.COM|экранный отладчик| | ||
- | Достоинства пакета — очень высокая скорость ассемблера [[hisoft_devpac:hisoft_devpac#GEN80|GEN80]]| и вразумительная диагностика ошибок. | + | Достоинства пакета — очень высокая скорость ассемблера [[hisoft_devpac:hisoft_devpac#GEN80|GEN80]] и вразумительная диагностика ошибок. |
Профессиональный набор инструментов, по всеобщему признанию, включает в себя (как минимум): | Профессиональный набор инструментов, по всеобщему признанию, включает в себя (как минимум): | ||
Строка 68: | Строка 69: | ||
====== MSX-DOS: минимальные сведения ====== | ====== MSX-DOS: минимальные сведения ====== | ||
- | <code> | + | Любая работа начинается с запуска DOS: для этого достаточно вставить диск с файлами ''MSXDOS.SYS'' и ''COMMAND.COM'' в дисковод "А" и включить питание компьютера. |
- | Любая работа начинается с запуска DOS: для этого доста- | + | |
- | точно вставить диск с файлами MSXDOS.SYS и COMMAND.COM в | + | |
- | дисковод "А" и включить питание компьютера. | + | |
- | Первым с диска считывается файл MSXDOS.SYS, который ре- | + | |
- | организует память компьютера, предоставляя в Ваше распоряже- | + | |
- | ние 64K ОЗУ. Затем загружается файл COMMAND.COM, который бу- | + | |
- | дет принимать с клавиатуры команды DOS, разбирать их и обра- | + | |
- | щаться к MSX-DOS, зашитой в постоянную память компьютера. | + | |
- | Индикатором успешного запуска системы служит "приглаше- | + | |
- | ние" А>. Буква перед угловой скобкой обозначает текущий дис- | + | |
- | ковод. | + | |
- | В большинстве современных дисковых операционных систем, | + | Первым с диска считывается файл ''MSXDOS.SYS'', который реорганизует память компьютера, предоставляя в Ваше распоряжение 64K ОЗУ. Затем загружается файл ''COMMAND.COM'', который будет принимать с клавиатуры команды DOS, разбирать их и обращаться к [[msx:dos:|]], зашитой в постоянную память компьютера. |
- | как и в MSX-DOS, имя файла имеет следующий вид: код дисково- | + | |
- | да (латинская буква с двоеточием), собственно имя (до 8 сим- | + | |
- | волов максимум), точка и расширение (до 3 символов). | + | |
- | В имя и расширение можно включать символы-джокеры "*" и | + | |
- | "?". Звездочка "*" обозначает любую группу символов, а "?" - | + | |
- | любой одиночный символ. Их используют, если нужно одним име- | + | |
- | нем охватить несколько файлов одновременно. | + | |
- | Иногда некоторые элементы имени можно пропускать. | + | |
- | Примеры: | + | Индикатором успешного запуска системы служит "приглашение" ''А>''. Буква перед угловой скобкой обозначает текущий дисковод. |
- | *.* - все файлы текущего дисковода | + | |
- | PROG.1 - файл PROG.1 текущего дисковода | + | |
- | B:PROG.1 - файл PROG.1 дисковода B: | + | |
- | C:PROG.* - все файлы с именем PROG дисковода C: | + | |
- | *.TXT - все файлы текущего дисковода с расширением TXT | + | |
- | ???.* - все файлы, имя которых содержит 3 символа | + | |
- | Файлами могут быть: программы, массивы данных, дисковые | + | В большинстве современных дисковых операционных систем, как и в [[msx:dos:|]], имя файла имеет следующий вид: код дисковода (латинская буква с двоеточием), собственно имя (до 8 символов максимум), точка и расширение (до 3 символов). |
- | подкаталоги или обычные тексты. | + | |
- | Формат программного файла продиктован особенностями той | + | В имя и расширение можно включать символы-джокеры "*" и "?". Звездочка "*" обозначает любую группу символов, а "?" — любой одиночный символ. Их используют, если нужно одним именем охватить несколько файлов одновременно. |
- | операционной системы, в которой создавалась программа. Обыч- | + | |
- | но такой файл содержит либо последовательность команд микро- | + | Иногда некоторые элементы имени можно пропускать. |
- | процессора, либо условные коды высокоуровневых операторов. | + | |
- | Структура файла данных полностью зависит от построившей | + | Примеры: |
- | его программы: блоки данных могут разделяться условными бай- | + | |''*.*''|все файлы текущего дисковода| |
- | тами-ограничителями (например, запятой ","), или иметь зара- | + | |''PROG.1''|файл ''PROG.1'' текущего дисковода| |
- | нее известную длину (тогда необходимость в разграничении от- | + | |''B:PROG.1''|файл ''PROG.1'' дисковода ''B:''| |
- | падает). Наиболее изощренные программы могут работать с фай- | + | |''C:PROG.*''|все файлы с именем PROG дисковода ''C:''| |
- | лом как с нерегулярной цепочкой битов. | + | |''*.TXT''|все файлы текущего дисковода с расширением ''TXT''| |
- | В файле может также храниться подкаталог диска, который | + | |''???.*''|все файлы, имя которых содержит 3 символа| |
- | организуется наряду с основным каталогом для удобной класси- | + | |
- | фикации файлов. MSX-DOS, из соображений совместимости, имеет | + | Файлами могут быть: программы, массивы данных, дисковые подкаталоги или обычные тексты. |
- | кое-какие рудиментарные возможности для организации подката- | + | |
- | логов, хотя они и остаются невостребованными. Структура под- | + | Формат программного файла продиктован особенностями той операционной системы, в которой создавалась программа. Обычно такой файл содержит либо последовательность команд микропроцессора, либо условные коды высокоуровневых операторов. |
- | каталога полностью повторяет структуру основного (корневого) | + | |
+ | Структура файла данных полностью зависит от построившей его программы: блоки данных могут разделяться условными байтами–ограничителями (например, запятой ","), или иметь заранее известную длину (тогда необходимость в разграничении отпадает). Наиболее изощренные программы могут работать с файлом как с нерегулярной цепочкой битов. | ||
+ | |||
+ | В файле может также храниться подкаталог диска, который организуется наряду с основным каталогом для удобной классификации файлов. [[msx:dos:#v1|]], из соображений совместимости, имеет | ||
+ | кое-какие рудиментарные возможности для организации подкаталогов, хотя они и остаются невостребованными. Структура подкаталога полностью повторяет структуру основного (корневого) | ||
каталога. | каталога. | ||
- | Наконец, файл может содержать какой-либо текст. Строки | ||
- | текста хранятся в своем естественном виде; каждая строка за- | ||
- | канчивается байтами 13 и 10, которые названы "возврат карет- | ||
- | ки" и "подача строки" соответственно. | ||
- | Признаком окончания текстового файла служит код CTRL Z, | ||
- | или, как это принято обозначать, ^Z, десятичное значение ко- | ||
- | торого равно 26. | ||
- | MSX-DOS способна исполнять три вида команд: внутренние, | + | Наконец, файл может содержать какой-либо текст. Строки текста хранятся в своем естественном виде; каждая строка заканчивается байтами 13 и 10, которые названы "возврат каретки" и "подача строки" соответственно. |
- | внешние и пакетные. | + | |
- | ВНУТРЕННИЕ команды содержатся непосредственно в файле | + | Признаком окончания текстового файла служит код <key>CTRL Z</key>, или, как это принято обозначать, ''^Z'', десятичное значение которого равно 26. |
- | COMMAND.COM, поэтому исполняются немедленно. Самые основные | + | |
- | внутренние команды: | + | |
- | DIR - просмотреть оглавление диска | + | [[msx:dos:#v1|]] способна исполнять три вида команд: внутренние, внешние и пакетные. |
- | TYPE - распечатать содержимое файла | + | |
- | COPY - скопировать файл | + | |
- | FORMAT - отформатировать диск | + | |
- | BASIC - передать управление BASIC-интерпретатору | + | |
- | (для возврата в DOS наберите _SYSTEM) | + | |
- | DEL - уничтожить файл | + | |
- | B: - считать текущим дисковод B: | + | |
- | A: - считать текущим дисковод А: | + | |
- | Параметры команд разделяются пробелом. | + | ВНУТРЕННИЕ команды содержатся непосредственно в файле ''COMMAND.COM'', поэтому исполняются немедленно. Самые основные внутренние команды: |
- | Действие любой команды можно приостановить клавишей ^S, | + | |''DIR''|просмотреть оглавление диска| |
- | прервать клавишей ^C. Подачей кода ^P можно включить эхо-пе- | + | |''TYPE''|распечатать содержимое файла| |
- | чать на принтер, ^N - выключить. | + | |''COPY''|скопировать файл| |
+ | |''FORMAT''|отформатировать диск| | ||
+ | |''%%BASIC%%''|передать управление [[msx:basic:|]] (для возврата в DOS наберите ''_SYSTEM'')| | ||
+ | |''DEL''|уничтожить файл| | ||
+ | |''B:''|считать текущим дисковод ''B:''| | ||
+ | |''A:''|считать текущим дисковод ''А:''| | ||
- | Примеры: | + | Параметры команд разделяются пробелом. |
- | DIR | + | |
- | DIR *.REL | + | |
- | TYPE PROG.TXT | + | |
- | COPY B:PROG.1 C: - с B: на C: | + | |
- | COPY B:PROG.* - с B: на текущий (несколько файлов) | + | |
- | COPY *.TXT B:*.DOC - с текущего на B: (смена расширения) | + | |
- | ПРИМЕЧАНИЕ. COPY может сцепить несколько файлов в один, | + | Действие любой команды можно приостановить клавишей <key>CTRL s</key>, прервать клавишей <key>CTRL c</key>. Подачей кода ''^P'' можно включить эхо-печать на принтер, ''^N'' — выключить. |
- | если между их именами указан знак '+'. Для правильной сцепки | + | |
- | текстовых файлов необходимо после каждого имени ставить ключ | + | |
- | /A. Прочие файлы должны сцепляться по ключу /B. (Ключ управ- | + | |
- | ляет интерпретацией кода ^Z). | + | |
- | Некоторые имена файлов зарезервированы и имеют неизмен- | + | Примеры: |
- | ное значение, даже если попытаться снабдить их расширениями | + | ''DIR'' |
- | или кодами дискодов: | + | ''DIR *.REL'' |
+ | ''TYPE PROG.TXT'' | ||
+ | |''COPY B:PROG.1 C:''|с ''B:'' на ''C:''| | ||
+ | |''COPY B:PROG.*''|с ''B:'' на текущий (несколько файлов)| | ||
+ | |''COPY *.TXT B:*.DOC''|с текущего на ''B:'' (смена расширения)| | ||
- | CON - консоль (клавиатура при вводе, экран при выводе) | + | ПРИМЕЧАНИЕ. ''COPY'' может сцепить несколько файлов в один, если между их именами указан знак '+'. Для правильной сцепки текстовых файлов необходимо после каждого имени ставить ключ ''/A''. Прочие файлы должны сцепляться по ключу ''/B''. (Ключ управляет интерпретацией кода ''^Z''). |
- | LST и PRN - принтер (только вывод) | + | |
- | AUX и NUL - несуществующее устройство (всегда возвраща- | + | |
- | ет признак конца файла, удобно при отладке) | + | |
- | Это означает, что в среде MSX-DOS с дисплеем, принтером | + | Некоторые имена файлов зарезервированы и имеют неизменное значение, даже если попытаться снабдить их расширениями или кодами дисководов: |
- | или клавиатурой можно работать, как с обычным файлом: | + | |''CON''|консоль (клавиатура при вводе, экран при выводе)| |
+ | |''LST'' и ''PRN''|принтер (только вывод)| | ||
+ | |''AUX'' и ''NUL''|несуществующее устройство (всегда возвращает признак конца файла, удобно при отладке)| | ||
- | COPY PROG.TXT PRN - распечатать файл PROG.TXT на принтере | + | Это означает, что в среде [[msx:dos:#v1|]] с дисплеем, принтером или клавиатурой можно работать, как с обычным файлом: |
+ | \\ ''COPY PROG.TXT PRN'' — распечатать файл ''PROG.TXT'' на принтере | ||
- | Можно, например, набирать тексты безo всяких редакторов | + | Можно, например, набирать тексты безо всяких редакторов (после каждой строки нажимайте клавишу RETURN): |
- | (после каждой строки нажимайте клавишу RETURN): | + | |
- | COPY CON A.BAT - копировать с клавиатуры в файл A.BAT | + | |''COPY CON A.BAT''|копировать с клавиатуры в файл ''A.BAT''| |
- | DIR - собственно текст | + | |''DIR''|собственно текст| |
- | ^Z - признак конца текстового файла CTRL Z | + | |''^Z''|признак конца текстового файла <key>CTRL Z</key>| |
- | Под ВНЕШНЕЙ командой MSX-DOS понимается любой файл, ко- | + | Под ВНЕШНЕЙ командой [[msx:dos:#v1|]] понимается любой файл, который имеет расширение ''COM''. Вызов внешней команды аналогичен запуску внутренней: нужно набрать имя файла (без ".COM") и через пробел перечислить параметры. Вызванная команда загружается с диска в память и получает управление, черпая параметры из специальной области. По окончании работы управление |
- | торый имеет расширение COM. Вызов внешней команды аналогичен | + | возвращается ''MSXDOS.SYS''. |
- | запуску внутренней: нужно набрать имя файла (без ".COM") и | + | |
- | через пробел перечислить параметры. Вызванная команда загру- | + | |
- | жается с диска в память и получает управление, черпая пара- | + | |
- | метры из специальной области. По окончании работы управление | + | |
- | возвращается MSXDOS.SYS. | + | |
- | Осталось познакомиться с ПАКЕТНЫМИ командами - наиболее | + | Осталось познакомиться с ПАКЕТНЫМИ командами — наиболее приятной сервисной возможностью DOS. Пакетная команда — это обычный текстовый файл, в каждой строке которого указана некоторая внутренняя, внешняя или пакетная команда. Основным отличием такого файла является расширение ''BAT''. |
- | приятной сервисной возможностью DOS. Пакетная команда - это | + | |
- | обычный текстовый файл, в каждой строке которого указана не- | + | Пакетная команда представляет собой своеобразную "программу", которая экономит Ваши усилия при многократном вызове одной и той же последовательности команд. Пример BAT–файла, |
- | которая внутренняя, внешняя или пакетная команда. Основыным | + | содержащего единственную команду ''DIR'', приведен выше. |
- | отличием такого файла является расширение BAT. | + | |
- | Пакетная команда представляет собой своеобразную "прог- | + | Возможности пакетных команд обогащаются наличием команд ''REM'' (вывод комментария) и ''PAUSE'' (приостановка исполнения). |
- | рамму", которая экономит Ваши усилия при многократном вызове | + | |
- | одной и той же последовательности команд. Пример BAT-файла, | + | |
- | содержащего единственную команду DIR, приведен выше. | + | |
- | Возможности пакетных команд обогащаются наличием команд | + | |
- | REM (вывод комментария) и PAUSE (приостановка исполнения). | + | |
- | Естественно, в пакетные команды тоже можно передавать | + | |
- | параметры. Положение первого параметра отмечается в файле | + | |
- | значком %1, второго - %2, ..., девятого - %9. Имя самого | + | |
- | BAT-файла соответствует значку %0. | + | |
- | </code> | + | |
+ | Естественно, в пакетные команды тоже можно передавать параметры. Положение первого параметра отмечается в файле значком ''%1'', второго — ''%2'', ..., девятого — ''%9''. Имя самого | ||
+ | BAT—файла соответствует значку ''%0''. | ||
====== Ассемблеры: минимальные сведения ====== | ====== Ассемблеры: минимальные сведения ====== | ||
Строка 472: | Строка 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), результат коррекции оказывается непредсказуемым. |
====== Многоразрядная арифметика ====== | ====== Многоразрядная арифметика ====== | ||
- | <code> | + | Чтобы облегчить обработку многоразрядных чисел, введено понятие БИТА ПЕРЕНОСА. Бит переноса устанавливается в 1, если в процессе вычислений требуется перенести единицу в следующий байт, или "занять" ее там. |
- | Чтобы облегчить обработку многоразрядных чисел, введено | + | |
- | понятие БИТА ПЕРЕНОСА. Бит переноса устанавливается в 1, ес- | + | Наличие команд сложения и вычитания, которые учитывают текущее состояние бита переноса, позволяет вести вычисление байт за байтом, оперируя величинами любой разрядности. |
- | ли в процессе вычислений требуется перенести единицу в сле- | + | |
- | дующий байт, или "занять" ее там. | + | |
- | Наличие команд сложения и вычитания, которые учитывают | + | |
- | текущее состояние бита переноса, позволяет вести вычисление | + | |
- | байт за байтом, оперируя величинами любой разрядности. | + | |
- | </code> | + | |
====== Микропроцессор Z80 ====== | ====== Микропроцессор Z80 ====== | ||
Строка 2130: | Строка 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 | ||
Строка 2174: | Строка 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) ====== | ||
Строка 3553: | Строка 3434: | ||
====== Системная область MSX2 ====== | ====== Системная область MSX2 ====== | ||
- | <code> | + | Системная область располагается в третьей странице RAM, начиная с адреса F380h и содержит обширный набор переменных, которые используются BIOS и [[msx:basic:|]]–интерпретатором. Многие из этих переменных Вам уже хорошо известны. |
- | Системная область располагается в третьей странице RAM, | + | |
- | начиная с адреса F380h и содержит обширный набор переменных, | + | |
- | которые используются BIOS и BASIC-интерпретатором. Многие из | + | |
- | этих переменных Вам уже хорошо известны. | + | |
- | Перед системной областью, в этой же странице, размещены | + | |
- | рабочее пространство DOS и аппаратный стек, размеры которых | + | |
- | могут изменяться, поэтому предельный адрес пользовательского | + | |
- | пространства нужно уточнять с помощью ячейки 0006h. | + | |
- | Программист должен следить, чтобы системная страница не | + | |
- | отключилась в результате некорректного обращения со слотами | + | |
- | или мэппером, иначе это приведет к зависанию компьютера. | + | |
- | </code> | + | |
- | ====== Заключение для пользователей MSX ====== | + | Перед системной областью, в этой же странице, размещены рабочее пространство DOS и аппаратный стек, размеры которых могут изменяться, поэтому предельный адрес пользовательского пространства нужно уточнять с помощью ячейки 0006h. |
- | <code> | + | Программист должен следить, чтобы системная страница не отключилась в результате некорректного обращения со слотами или мэппером, иначе это приведет к зависанию компьютера. |
- | Весь изложенный в нашей беседе материал можно с успехом | + | |
- | применить к программированию компьютеров серии MSX, если из | + | |
- | предыдущего повествования исключить следующие моменты: | + | |
- | - процедуры, находящиеся в SUB-ROM; | + | ====== Заключение для пользователей MSX ====== |
- | - рассуждения, касающиеся мэппера и его регистров; | + | |
- | - режимы бит-мэп и текстовый SCREEN 0:WIDTH 80; | + | |
- | - режим спрайтов 2; | + | |
- | - все, что связано со страницами видеопамяти; | + | |
- | - операции, использующие регистры VDP, начиная с 9-го; | + | |
- | Кроме того, для обращения к VRAM следует использовать | + | Весь изложенный в нашей беседе материал можно с успехом применить к программированию компьютеров серии MSX, если из предыдущего повествования исключить следующие моменты: |
- | другие подпрограммы BIOS (с теми же аргументами): | + | * процедуры, находящиеся в SUB-ROM; |
+ | * рассуждения, касающиеся мэппера и его регистров; | ||
+ | * режимы битмэп и текстовый SCREEN 0:WIDTH 80; | ||
+ | * режим спрайтов 2; | ||
+ | * все, что связано со страницами видеопамяти; | ||
+ | * операции, использующие регистры VDP, начиная с 9-го; | ||
- | 004Ah - чтение байта из VRAM | + | Кроме того, для обращения к VRAM следует использовать другие подпрограммы BIOS (с теми же аргументами): |
- | 004Dh - запись байта во VRAM | + | |004Ah|чтение байта из VRAM| |
- | 0050h - подготовка к чтению серии байтов | + | |004Dh|запись байта во VRAM| |
- | 0053h - подготовка к записи серии байтов | + | |0050h|подготовка к чтению серии байтов| |
- | 0056h - заполнение VRAM константой | + | |0053h|подготовка к записи серии байтов| |
- | </code> | + | |0056h|заполнение VRAM константой| |
{{tag>MSX Doc Assembler Oleg_Shamshura}} | {{tag>MSX Doc Assembler Oleg_Shamshura}} |