Здравствуйте, коллеги.
Я всё время программировал на Ассемблере на MAC/65, но он слишком для меня старорежимый, что-ли...
Ненавижу нумерацию строк и никак не могу запомнить команду ASM (кто там и за кем должен следовать...)
Когда я с вопросом о совершенном нативном ассемблере обратился к друзьям в AtariAge, мне ответил старина Конрад Кокожкевич Draco030 и написал, что ничего лучшего для Атари нет, кроме как MAE ассемблер Джона Харриса.
Я попробовал и оказалось, что это то, о чём я мечтал тыщу лет!
Преимущества:
- Продуманный интерфейс. (Я и впрямь видел такие славные программы!)
- Отсутствие нумерации строк
- Возможность работы как с Заглавными, так и со строчными буквами.
- Возможность программирования не только 6502, но и 65816 и пр.
- 3 режима текста: 40/64/80 колонок!
- С обиняками! совместим с MAC/65
Бяки тоже есть! Он лучше всего работает со 130XE.
Здесь спрашивали об ассемблерном доступе к устройствам...
...
Я покопался в текстах и на MAE могу предложить код вывода строки на экран (S
с помощью CIO (Central Input/Output)
Как работает CIO?
Прежде всего, этот модуль всегда загружен во включённой Атари!
Затем, именно он СТАНДАРТНО обеспечивает АВТОМАТИЧЕСКУЮ работу с устройствами.
И наконец, он по Атарьски жутко мобилен. Я имею ввиду то, что Вы и сами можете его полностью переписать! (Так работает Любой СпартаДОС)
Для того, чтобы заставить работать CIO нужно совсем немного.
Нужно:
1. Дать Ассемблеру знать о стандартных регистрах CIO.
2. Дать знать о стандартных коммандах.
3. Дать знтать о стандартных режимах этих комманд.
4. Внести инфо о передаваемых данных.
5. Передать управление CIO.
ВСЁ!
Фактически, - заполнить несколько таблиц и вызвать CIO.
Далее Атари работает сама!
Важная особенность MAE - Желание Автора выполнить выравнивание по длине комманд Ассемблера к оп-кодам процессора
Чтобы текст программы стал читаем. СПАСИБО ему!
Поясню: и те и другие предпочтительно имеют длину 3 знака!
Таким образом,
.ORG преобразуется к .or (Origin)
OUT(нет в MAC/65) преобразуется к .ou (Output to disk)
.BYTE преобразуется в .by (BYTE)
.DS преобразуется в .ds - Define Space
и так далее.
К сожалению, MAE-Руководство написано, хоть и исчерпывающе подробно, но бессистемно и читать его - сущее мучение.
ПРИМЕЧАНИЕ:
Совсем не обязательно заполнять ВСЕ комманды и ВСЕ режимы CIO!
Атари будет пользоваться теми, которые мы указали как СУЩЕСТВЕННЫЕ!
Итак, вот программа вывода текста на Экран:
Код:
; Drac030 Rules Demo!
.ou dr.com
; CIO Equates
IOCB .or $0340
ICHID .ds 1 ; Handler
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
; Atari Equates
CIOV = $e456
RUNAD = $02e0
; Atari Constants
CLS = $7D
EOL = $9b
; CIO Commands
GETREC = 5
PUTREC = 9
; Setup CIO
.or $2000
start ldx #0 ;IOCB 0
lda #PUTREC ;want output
sta ICCOM,x ;issue cmd
lda #<msg ;low byte of msg
sta ICBAL,x ; into icbal
lda #>msg ;high byte
sta ICBAH,x ; into icbah
lda #0 ;length of msg
sta ICBLH,x ; high byte
lda #$ff ;255 char length
sta ICBLL,x ; low byte
; Call CIO to print string
jsr CIOV ;call cio
rts ;exit to dos
; Our message
msg .by CLS,"Drac030 Rules!!!",EOL
; Setup run address
.or RUNAD
.wo start
.en