Здравствуйте, Шинни!

Рад, что Вы не устали ещё от ассемблера.

Дело в том, что идея макропрограммирования - сама собой, принципиально, маленько ущербна.

Все макросы АБСОЛЮТНО зависят от ПРОГРАММИСТА, который рожал их парсинг!

Макросы на Лиспе - это не то, что макросы на Си, а макросы на ассемблере наличиствуют в количестве штук, равном макроассемблерам.

Просто, нет ОБЩЕГО понимания того, что есть макрос.
Принципиально, дело в том, что MADS - кроссассемблер.
Это важно, так как он работает в нативном режиме на машине в миллион раз более мощной, чем Атари.

Но, ведь, существует разница и в родных Макроассемблерах Атари!
Например Макроассемблер Ассемблера MAC/65 намного более мощный, чем Макроассемблер МАЕ.
Однако, есть большие затруднения в том, чтобы программисту ассемблера понять, по какому пути ему идти!!!
Должен признать, я принципиально, не знаю ни одного программиста на MAC/65, который работал бы с макросами.
Их просто понять никто не может. А дебаггировать тем более.

Да, это - по сути, и не важно.
Джон Харрис выбрал путь прямой подстановки!!!

Разумеется, прямая подстановка не используется в кроссассемблерах, так как парсинг кода позволяет получать описания ошибок даже ещё при макроассемблировании (в PC), что в МАЕ недоступно.

Вот Вам пример ЭЛЕГАНТНОГО макрокода в MAC/65.
В нём НИЧЕГО не вычисляется во время исполнения кода!!! Всё вычисления заданы в макросе, а значит, проводятся при первом проходе ассемблера.

Код просто проходит по изменяемым адресам в Программном Счётчике и в результате получаем ВОЛШЕБСТВО!
Код:
2470 ;-----------------------------
2480 ; MACRO #2 "NEWPAGE"
2490 ; Этот макрос устанавливает программныё счётчик
2500 ; на следующую чётную страниуц.
2510 ; EXAMPLE:
2520 ;  (Пусть PC сейчас установлен на $4322)
2530 ;      NEWPAGE
2540 ;  (По выполнении станет $4400)
2550 ;
2560 ;Follow:          *=$4322
2570     .MACRO NEWPAGE 
2580     *=  *&$FF00 ; *=$4300
2590     *=  */$0100 ; *=$0043
2600     *=  *&$FF   ; *=$43
2610     *=  *+1     ; *=$44
2620     *=  **$0100 ; *=$4400
2630     .ENDM 
2640 ;Follow:          *=$4400
2650 ;
Напомню:
&FF00 - в разрядах, где FF - всё остаётся, где 00 - стирается.
/0100 - получаем точное число страниц с недостатком. В МЛАДШЕМ байте.
&$FF - всё, что было - остаётся, но в старшем байте ничего.
*+1 - Число страниц увеличивается на 1.
**$0100 - и при умножении на 256, становится старшим байтом!!!

Как бы это лучше объяснить...
Просто, САМ Ассемблер всё считает, а Результат ВОЛШЕБНО появляется в виде числа в коде.

Также можно определить 1кб-отступ для нового шрифта(он обязан начинаться на границе 1кб), отступы для PM-графики и так далее...

Этот макрос ОЧЕНЬ нужен!

Уже двое суток не могу перевести его в МАЕ...
Базарная документация и нет примеров.
(В доках Харрис хотел описать ВСЁ СРАЗУ для 6502 и 65816.
Так как 65816 сложнее, 6502 затерялся! А так, всё понятно... Кто ищет - тот найдёт.)

Проблема здесь не в том, что я не понимаю Атари.
Проблема в том, что я не понимаю Харриса (Его Дзена описания Макросов.)
Так, на то он - Босс!
ez