2Atari1974
http://mixinc.net/atari/mae.htm - Это Инструкция одновременно для 02 и 816, что чудовищно!
Не умею загружать на форум вложения...
Даю ссылку на atr с тремя 40/64/80 режимами Е:
http://atariage.com/forums/index.php...tach_id=487399
- - - Добавлено - - -
Способ взаимодействия Атари с устройствами.
Я наверное неоднократно предпринимал попытки рассказать о том, что Атарьские инженеры - вообще говоря, гениальны! Чего стоит один Стив Возняк, который работал на Атари.
Не вдаваясь в холивары по поводу Атари, Эпл, и Амига, попробую рассказать о взаимодействии ВНЕШНИХ устройств с Атари.
Во первых, они - ВНЕШНИЕ, а значит, придётся иметь дело с Вводом/Выводом.
Во вторых, они - РАЗНЫЕ, а значит, обладают разными опциями, которые должен задать Именно Программист.
Гениальные Атарьские Инженегры ПРЕДУСМОТРЕЛИ эти особенности и спроектировали УНИВЕРСАЛЬНУЮ систему Централизованного Ввода/Вывода.
(Как им это удалось?..)
Идея была простой.
При I/O машинка должна знать/обрабатывать следующие вещи:
1. Как компу распознавать обращение к именно этому устройству? (по именам!)
2. Это устройство ввода, или это устройство вывода?
Затем, соответственно генерировать номер ошибки... (Если не срослось...)
3. Если устройств много, нужен порядковый номер.
4. Если устройство НЕ СТАНДАРТНОЕ, то нужны дополнительные опции его работы.
Ну, а задав эти вещи, можно запускать универсальную программу.
Итак, универсальная... А почему? Потому, что применяется и для своих Атарьских внутренних и внешних устройств! Ничего идеологического не нужно менять!
Это я к тому, что при включении Атари, хотите Вы или нет, ИСПОЛЬЗУЮТСЯ
1. Редактор
2. Возможность вывода на графику
3. Кассетник, Принтер, и пр.
По цифрам каналов ввода/вывода это 0, 6, 7.
(Ясно, что если чего-то нет, то не используется и можно их программировать... [Но при загрузке инициализируется всегда!]) Пардон, если нет картриджа, так как он главнее!
Кроме этого, AtariOS и Бейсик сами произвольно используют что-то из Ввода/Вывода!!! для внутренних нужд! (Это относится к опциям, а не к вводу/выводу, но они запросто могут переписать Ваши коды,если не убережётесь.)
Итак, Атари CIO. Централизованный Ввод/Вывод!
С точки зрения пользователя, работает так:
Если правильно задать инициализацию и передать управление правильному Вектору (Это такая фигня, которая содержит переходы на обработчики(handlers), то есть JMP <адрес>.), тогда всё произойдёт само собой и Вы в шоколаде.
Если нет, то Ваш обработчик ошибок (А Вы его написали?) выдаст ошибку ввода/вывода, которая легко распознаётся по номеру и всегда больше 127.
Это пгтому, что до 127 - это ошибки Бейсика, а после - ошибки устройств.
Как написать Инициализацию?
В Атари максимально может быть одновременно работающих устройств 8!
Программист решает, будет ли он работать с текстом или нет, будет ли он выводить графику, будет ли он работать только с дисководом...
В зависимости от этого, определяется количество и нумерация свободных устройств.
Откуда берёт данные программа Централизованная ввода/вывода?
Из Базы Данных
Как и любая База Данных, она строго структурированна и определена.
Блоков в ней 8 - по числу устройств, Записей в каждом блоке 16 (с избытком)
Начинается она в Атари с адреса $0340!
Называется IOCB (Input Output Control Block)
Поля в Базе всегда строго определены, для универсальности.
Ёрзать с устройствами можно, пользуясь ДОПОЛНИТЕЛЬНЫМИ полями, или, модификаторами.
Вот структура этой Базы данных:
; CIO Equates
IOCB .or $0340
ICHID .ds 1 ; Handler ID
ICDNO .ds 1 ; Number
ICCOM .ds 1 ; Command
ICSTA .ds 1 ; Status
ICBAL .ds 1 ; Lo BufAdr
ICBAH .ds 1 ; Hi BufAdr
ICPTL .ds 1 ; Lo PutAdr
ICPTH .ds 1 ; Hi PutAdr
ICBLL .ds 1 ; Lo BufLen
ICBLH .ds 1 ; Hi BufLen
ICAX1 .ds 1 ; Aux 1
ICAX2 .ds 1 ; Aux 2
ICAX3 .ds 1 ; Aux 3
ICAX4 .ds 1 ; Aux 4
ICAX5 .ds 1 ; Aux 5
ICAX6 .ds 1 ; Aux 6
Поясню, .or в MAE Assembler = Origin
.ds в MAE Assembler = Define Space, Size
Далее, для прикола...
Атарьские Гении поняли, что если длина блока Базы данных будет ровно 16 байт, то тогда программисту не нужно будет ничего считать!
То есть: Предполагая адресацию к полям, такую как
CMD ADDR,X
мы, для нулевого устройства имеем
LDX #$00
Для Первого
LDX #$10
Для Второго
LDX #$20
...
На сегодня - всё.
Удачи!




Ответить с цитированием