Здравствуйте, Шинни!
Рад, что Вы не устали ещё от ассемблера.
Дело в том, что идея макропрограммирования - сама собой, принципиально, маленько ущербна.
Все макросы АБСОЛЮТНО зависят от ПРОГРАММИСТА, который рожал их парсинг!
Макросы на Лиспе - это не то, что макросы на Си, а макросы на ассемблере наличиствуют в количестве штук, равном макроассемблерам.
Просто, нет ОБЩЕГО понимания того, что есть макрос.
Принципиально, дело в том, что 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





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