
Сообщение от
CityAceE
И, как я понял, на форуме нашлись люди, которые поняли, что что мне требовалось.
Оу, ну да, нашлись люди, которые поняли, это я один, такой тупой, непонятливый, все правильно. Но я вам объясняю, что вас понять... трудно, потому что формулируете плохо. Понять-то и я вас понял, но сколько времени на это ушло. У тех людей тоже ушло на это время, просто раньше меня вас прочитали. Сами посмотрите на свой макрос, который вы написали типа для примера. Сколько в нем лишнего мусора, уводящего от сути вопроса. Десять этажей ифов с кучей условий... Ну это банальное неуважение. Сами посмотрите, что вы в ожидании ответа из него написали. Я же не телепат, чтобы угадывать, где вы ошиблись, в макросе, или в описании ожиданий от него. Наверное, найдутся телепаты...
Актуально это для вас, или нет, теперь не важно, раз уж я уже начал с этим ковыряться, и уже нашел решение. Может кому-то будет интересно, будет похожая задача, и он не захочет писать тонну лишнего мусора. Определяем значения переменных:
Код:
B equ 0
C equ 1
D equ 2
E equ 3
H equ 4
L equ 5
A equ 7
b equ 0
c equ 1
d equ 2
e equ 3
h equ 4
l equ 5
a equ 7
BC equ 0
DE equ 1
HL equ 2
SP equ 3
AF equ 3
bc equ 0
de equ 1
hl equ 2
sp equ 3
af equ 3
ix equ #180
iy equ #280
IX equ #180
IY equ #280
Макрос:
Код:
macro ldrx dst,src
push af
push hl
push bc
.iyt equ src-$280 & $FFFF
.ixt equ src-$180 & $FFFF
if src & $200
ld hl,(rIY)
ld bc,.iyt
elseif src & $100
ld hl,(rIX)
ld bc,.ixt
endif
add hl,bc
ld dst,(hl)
pop bc
pop hl
pop af
endm
Вызов макроса с разными пограничными значениями:
Код:
ldrx c,(IX+1)
ldrx a,(IY+1)
ldrx d,(IX-1)
ldrx e,(IY-1)
ldrx h,(IX+127)
ldrx l,(IY+127)
ldrx b,(IX-128)
ldrx d,(IY-128)
rIX DEFW 0
rIY DEFW 0
Все работает. Пожалуйста, вызов - как вы и хотели, даже еще лучше, максимально аутентично. Тут вам и любые регистры на выходе, и сразу оба индексных регистра на входе... Про no_stack стоит забыть, потому что AF необходимо сохранять, сохраняется через стек, как ни крути. Можно добавить проверку на -128-+127 с выбросом ошибки, но мне лень и не надо, сами справитесь.
Можно и имена регистров для проверок использовать, ветвления ассемблирования с этим связанные добавить, но мне, как видите, даже не пригодилось для поставленной задачи. И вот как раз поэтому сложно понять, сложно... Не знаешь никогда, что у другого специалиста в голове, что там за поток, и куда этот поток стремится. Поэтому нужно хотя бы стараться понятным языком излагать свои хотелки, чтобы другие люди не тратили время на расшифровку послания.
- - - Добавлено - - -
Вот вроде такого:

Сообщение от
CityAceE
В общем, отвечаю сам себе, вдруг ещё кому-нибудь пригодится.
1. Создал листинг с помощью ключа --lst
2. Загрузил его в Excel и там разбил на колонки.
3. Удалил следующие строки, удовлетворяющие следующим условиям по двум колонкам:
Пустой код && >
Код ~ && >
Не пустой код && Пустой текст
Хотел пошутить, но не буду. Мне вряд ли пригодится. Я даже не понимаю, о чем идет речь, какой-то шифр, а расшифровки нет. И я вряд ли стану ковыряться в Экселе для решения подобных задач. Ну это уже перебор, как по мне. Очевидно, есть другие менее топорные способы:
Файл lst:
Код:
# file opened: macro.asm
1 0000 DEVICE ZXSPECTRUM48
2 0000
3 0000 ORG 32768
4 8000
5 8000 OPT listmc
208 8000 41 { ld B,C
208 8001 78 { ld a,b
208 8002 78 { LD A,B
209 8003 63 { ld H,E
209 8004 78 { ld a,b
209 8005 78 { LD A,B
211 8006 F5 { push af
211 8007 E5 { push hl
211 8008 C5 { push bc
211 8009 2A 76 80 { ld hl,(rIX)
211 800C 01 01 00 { ld bc,.ixt
211 800F 09 { add hl,bc
211 8010 4E { ld c,(hl)
211 8011 C1 { pop bc
211 8012 E1 { pop hl
211 8013 F1 { pop af
212 8014 F5 { push af
212 8015 E5 { push hl
212 8016 C5 { push bc
212 8017 2A 78 80 { ld hl,(rIY)
212 801A 01 01 00 { ld bc,.iyt
212 801D 09 { add hl,bc
212 801E 7E { ld a,(hl)
212 801F C1 { pop bc
212 8020 E1 { pop hl
212 8021 F1 { pop af
213 8022 F5 { push af
213 8023 E5 { push hl
213 8024 C5 { push bc
213 8025 2A 76 80 { ld hl,(rIX)
213 8028 01 FF FF { ld bc,.ixt
213 802B 09 { add hl,bc
213 802C 56 { ld d,(hl)
213 802D C1 { pop bc
213 802E E1 { pop hl
213 802F F1 { pop af
214 8030 F5 { push af
214 8031 E5 { push hl
214 8032 C5 { push bc
214 8033 2A 78 80 { ld hl,(rIY)
214 8036 01 FF FF { ld bc,.iyt
214 8039 09 { add hl,bc
214 803A 5E { ld e,(hl)
214 803B C1 { pop bc
214 803C E1 { pop hl
214 803D F1 { pop af
215 803E F5 { push af
215 803F E5 { push hl
215 8040 C5 { push bc
215 8041 2A 76 80 { ld hl,(rIX)
215 8044 01 7F 00 { ld bc,.ixt
215 8047 09 { add hl,bc
215 8048 66 { ld h,(hl)
215 8049 C1 { pop bc
215 804A E1 { pop hl
215 804B F1 { pop af
216 804C F5 { push af
216 804D E5 { push hl
216 804E C5 { push bc
216 804F 2A 78 80 { ld hl,(rIY)
216 8052 01 7F 00 { ld bc,.iyt
216 8055 09 { add hl,bc
216 8056 6E { ld l,(hl)
216 8057 C1 { pop bc
216 8058 E1 { pop hl
216 8059 F1 { pop af
217 805A F5 { push af
217 805B E5 { push hl
217 805C C5 { push bc
217 805D 2A 76 80 { ld hl,(rIX)
217 8060 01 80 FF { ld bc,.ixt
217 8063 09 { add hl,bc
217 8064 46 { ld b,(hl)
217 8065 C1 { pop bc
217 8066 E1 { pop hl
217 8067 F1 { pop af
218 8068 F5 { push af
218 8069 E5 { push hl
218 806A C5 { push bc
218 806B 2A 78 80 { ld hl,(rIY)
218 806E 01 80 FF { ld bc,.iyt
218 8071 09 { add hl,bc
218 8072 56 { ld d,(hl)
218 8073 C1 { pop bc
218 8074 E1 { pop hl
218 8075 F1 { pop af
221 8076 00 00 {rIX DEFW 0
222 8078 00 00 {rIY DEFW 0
# file closed: macro.asm
Ну тут я, кстати, соглашусь, что не мешало бы настроечку иметь, чтобы метки заменялись на реальные значения, а не тупо копировался код из исходника.