Я работал с M80 довольно много. Подобных защит от пионеров, однако, не делал. Макросами пользовался, но мало. Например, такими:
Использовал для загрузки или сохранения регистровой пары по смещению от индексных регистров, например:Код:GETHL MACRO ADR,OFS LD L,(ADR+OFS) LD H,(ADR+OFS+1) ENDM PUTHL MACRO ADR,OFS LD (ADR+OFS),L LD (ADR+OFS+1),H ENDM
Более активно пользовался макросами на PIC-8-bit процессорах:Код:GETHL IX,4 PUTHL IY, 8
Для реализации привычных "команд" условного перехода, которых у этих процессоров не было. Аналогично реализовал "команду" DJNZ.Код:JNZ MACRO LOC ;2/3 BTFSS STATUS,Z GOTO LOC ENDM DJNZ MACRO ADR,LOC ;2/3 DECFSZ ADR,F GOTO LOC ENDM
Основная "сила" M80 для меня была не в макросах, а в наличии компоновщика и возможности собирать программу из нескольких исходных файлов. Остальные ассемблеры на Спектруме тех времен этого не могли. Там или весь проект должен был содержаться в одном исходном файле, или приходилось создавать связи между модулями вручную, с помощью EQU.
Главным недостатком M80 была его тормознутость, а также тормознутость компоновщика. Реально сожрало много времени моей жизни. Даже Паскаль (Turbo Pascal 3.0 на CP/M) быстрее компилировал.
Тормознутость M80 и компоновщика во многом обусловлена форматом объектных (.REL)-файлов. Там применяется битовый поток, поэтому для создания или считывания .REL-файла приходится выполнять много сдвиговых операций. Я даже как-то раскопал формат REL-файлов и начал делать свой объектный формат без битовых сдвигов, и компоновщик для него. Незавершенный проект.




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