Макросы у MADS отличаются немного. Хотелось бы узнать о них, потому что не нашел описания, я в них путаюсь иногда.
Макросы у MADS отличаются немного. Хотелось бы узнать о них, потому что не нашел описания, я в них путаюсь иногда.
Здравствуйте, Шинни!
Рад, что Вы не устали ещё от ассемблера.
Дело в том, что идея макропрограммирования - сама собой, принципиально, маленько ущербна.
Все макросы АБСОЛЮТНО зависят от ПРОГРАММИСТА, который рожал их парсинг!
Макросы на Лиспе - это не то, что макросы на Си, а макросы на ассемблере наличиствуют в количестве штук, равном макроассемблерам.
Просто, нет ОБЩЕГО понимания того, что есть макрос.
Принципиально, дело в том, что 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
MAC и PC - это всего лишь периферия для Атари...
130XE|XC12|CA2001|XF551|IDEPlus2.0|SIO2SD|SIO2IDE| RAM576XE+Covoх|SIO2PC|MAXFLASH8|MAXFLASH1|The Ultimate Cartridge|
хм. я видел выравнивание при использовании z80:
(adres+$FF)/256
к тому же директива align 256 выравнивает код по "правильному" адресу.
Макросы мне не нравились, потому что есть масса ассемблеров и каждый использует макросы по-своему или не использует вообще.
в журнале Analog я встретил интересное применение:
это по-нашему xDКод:*=$2000 AUDF1=$D200 AUDC1=$D201 AUDCTL=$D208 SKCTL=$D20F .MACRO SOUND ; voice,pitch,dist,vol;,dur lda #%2 sta AUDF1+2*%1 lda #[[%3 * 16] | %4] ;lda #[[%3 shl 4] or %4] sta AUDC1+2*%1 .ENDM lda #0 sta AUDCTL lda #3 sta SKCTL SOUND 0,121,10,8 jmp *
Ещё одно видео залил с программкой вывода директории
https://youtu.be/65dlc4G_CNY
ez
MAC и PC - это всего лишь периферия для Атари...
130XE|XC12|CA2001|XF551|IDEPlus2.0|SIO2SD|SIO2IDE| RAM576XE+Covoх|SIO2PC|MAXFLASH8|MAXFLASH1|The Ultimate Cartridge|
перечитываю ветку, мало по мальски проясняется, давайте продолжать ?
ATARI 65XE|130XE|XEGS|4-XC12|(2-TURBO2000)|SIO2SD
В общем страсти по АСМ у меня кипят, время 5:30 Мск идти на работу, а я по видеоурокам перегоняю из mac65 в mae )))
нашёл hello world под mac65
переделал его в mae05 .OPT OBJ
10 *= $0600
0100 ; CIO
0110 ICHID = $0340 ;IOCB 0 S:
0120 ICCOM = $0342 ;IOCB Command
0130 ICBAL = $0344 ;Xfer Buffer Adr
0140 ICBAH = $0345
0150 ICPTL = $0346 ;PutByte Adr
0160 ICPTH = $0347
0170 ICBLL = $0348 ;Buffer Len
0180 ICBLH = $0349
0190 CIOV = $E456 ; CIO Vector
0500 ; Setup CIO Call
0510 LDX #0 ;IOCB 0
0520 LDA #9 ;Put Cmd Val
0530 STA ICCOM,X ;Set it as the cmd
0540 LDA #HELLO&255 ;Str low byte
0550 STA ICBAL,X
0560 LDA #HELLO/256 ;Str high byte
0570 STA ICBAH,X
0580 LDA #0 ;Str Len low byte
0590 STA ICBLL,X
0600 LDA #$FF ;Str Len high byte
0610 STA ICBLH,X
0620 ; Call CIO
0630 JSR CIOV
0640 RTS
1000 HELLO .BYTE "Hello World!",$9B
как я понял:; hello world !
.ou hello.com
.or $0600
; CIO
ICHID = $0340 ;IOCB 0 S:
ICCOM = $0342 ;IOCB Command
ICBAL = $0344 ;Xfer Buffer Adr
ICBAH = $0345
ICPTL = $0346 ;PutByte Adr
ICPTH = $0347
ICBLL = $0348 ;Buffer Len
ICBLH = $0349
CIOV = $E456 ; CIO Vector
; Setup CIO Call
LDX #0 ;IOCB 0
LDA #9 ;Put Cmd Val
STA ICCOM,X ;Set it as the cmd
LDA #HELLO&255 ;Str low byte
STA ICBAL,X
LDA #HELLO/256 ;Str high byte
STA ICBAH,X
LDA #0 ;Str Len low byte
STA ICBLL,X
LDA #$FF ;Str Len high byte
STA ICBLH,X
; Call CIO
JSR CIOV
RTS
HELLO .BYTE "Hello World!",$9B
.or $0600
.en
строчка в начале .ou filename.com, обязательна для компиляции файла в исполняемый.
так же как и в конце
.or $0600
.en
обязательны к запуску.
Заработало. Но что там в программе я так до конца не понимаю.
Куча кода вместо:
10 PRINT "HELLO WORLD !!!"
Последний раз редактировалось atariki; 27.02.2017 в 05:40.
ATARI 65XE|130XE|XEGS|4-XC12|(2-TURBO2000)|SIO2SD
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
label :20 как заменить чтобы работало ? в мае этот ярлык не прокатывает.
ATARI 65XE|130XE|XEGS|4-XC12|(2-TURBO2000)|SIO2SD
Привет всем Атаристам-Восьмибитникам!
Метки в МАЕ Ассемблере начинаются с буквы, или символов @, _, или ?.
? - означает, что метка локальная, то есть видна только в данном блоке.
Они не должны содержать пробелоа и в тексте метки могут содержать цифры и знак точки.
Длина метки может быть до 15 символов.
Обычно я заканчиваю файл следующей конструкцией:
Директива .SBYTE в МАЕ Ассемблере заменена на трёхсимвольную .sb .Код:; ==================== ; Setup Run Address .or RUNAD .wo start ; .en
Залил ещё видео: https://youtu.be/gUt6qpD1xi0
ez
MAC и PC - это всего лишь периферия для Атари...
130XE|XC12|CA2001|XF551|IDEPlus2.0|SIO2SD|SIO2IDE| RAM576XE+Covoх|SIO2PC|MAXFLASH8|MAXFLASH1|The Ultimate Cartridge|
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)