Кстати, я тут проверил от нечего делать. sjasm-то этот синтаксис всё ещё понимает. Ругается, но понимает.
В смысле, что значит всё ещё ? И почему это он не должен ругаться если ктото не читает инструкцию и использует команды языка вопреки его правилам и грамматики ? На такое вообще любой компилятор ругаться будет.
Какие в этом претензии к SjASMplus ?
Замени endm на endr , как положено в правилах, и не будет никакой ругни, всё замечательно компилируется.
Ну, а IRPC сделает?
Код:BXlt equ 0a5h DBS. MACRO str,stre IRPC x,<str> db '&x&' xor BXlt ENDM db '&stre&' or 128 xor BXlt ENDM 5D33 OpNum: DspStr 5D33 DF + rst 18h dbs. <operator:>,< > 5D34 CA + db 'o' xor BXlt 5D35 D5 + db 'p' xor BXlt 5D36 C0 + db 'e' xor BXlt 5D37 D7 + db 'r' xor BXlt 5D38 C4 + db 'a' xor BXlt 5D39 D1 + db 't' xor BXlt 5D3A CA + db 'o' xor BXlt 5D3B D7 + db 'r' xor BXlt 5D3C 9F + db ':' xor BXlt 5D3D 05 + db ' ' or 128 xor BXlt
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Насколько знаю IRP и IRPC готовых аналогов в SjASMplus нет, while есть, а этих не видел.
Если очень нужно чтото подобное, то можно как-то выкрутиться используя lua-скрипты, и даже более хитрую обработку строки провернуть, но это будет посложнее конечно, хотя и более универсально.
Но если честно я особо не припоминаю подобных функций и в других популярных у нас спектрумовских ассемблерах. И на практике даже и не знал что чтото такое зачемто нужно ))
Вообще в теме время от времени присутствует разработчик Ped7g, может быть если удастся обосновать необходимость данных фичь, то сможете уговорить их реализовать ))
Мне, если честно, более интересно было бы появление в SjASMplus возможности создания макросов с неопределённым количеством параметров, чтобы такой макрос можно было бы вызвать как вообще без параметра, так и с любым количеством.
Пусть это будет не macro , а например macro@ или macro$ или как-то по другому, параметры чтоб имели какое-то фиксированное название с порядковым номером, один со специальным именем (или нулевым номером) указывал номер последнего переданного, и их также можно было бы в lua перенаправить.
Вот тут можно было-бы неплохо развернуться. И тот же IRP например реализовать внешней библиотекой через lua, и много другого ))
Последний раз редактировалось Dart Alver; 16.01.2025 в 22:19.
sjasmplus doesn't have IRPC, you can get same machine code in some different way.
One of the options is to use virtual memory of DEVICE to post-process the string with xor like this:
which assembles as this listing shows (notice the memory at 5D34 written twice, first getting regular ASCII chars, second time being xor-ed):Код:BXlt equ 0a5h DEVICE ZXSPECTRUM48 ; switch virtual device memory mode on ORG $5D33 ; first do regular ASCII string OpNum: rst $18 ; the "C literal suffix means .str: DB "operator: "C ; to tag last byte with "or 128" ; now go over the ASCII string again and xor each byte: .length equ $ - .str ; length for dot-repeater ORG .str ; go back in virtual memory to start of str .(.length) DB {b $} ^ BXlt ; .length-many-times xor content of virtual memory SAVEBIN "temp.bin", OpNum, $-OpNum ; save resulting machine code
and hexa dump of saved binary file:Код:1 0000 BXlt equ 0a5h 2 0000 DEVICE ZXSPECTRUM48 ; switch virtual device memory mode on 3 0000 ORG $5D33 ; first do regular ASCII string 4 5D33 DF OpNum: rst $18 ; the "C literal suffix means 5 5D34 6F 70 65 72 .str: DB "operator: "C ; to tag last byte with "or 128" 5 5D38 61 74 6F 72 5 5D3C 3A A0 6 5D3E ; now go over the ASCII string again and xor each byte: 7 5D3E .length equ $ - .str ; length for dot-repeater 8 5D3E ORG .str ; go back in virtual memory to start of str 9 5D34 CA > DB {b $} ^ BXlt ; .length-many-times xor content of virtual memory 9 5D35 D5 > DB {b $} ^ BXlt 9 5D36 C0 > DB {b $} ^ BXlt 9 5D37 D7 > DB {b $} ^ BXlt 9 5D38 C4 > DB {b $} ^ BXlt 9 5D39 D1 > DB {b $} ^ BXlt 9 5D3A CA > DB {b $} ^ BXlt 9 5D3B D7 > DB {b $} ^ BXlt 9 5D3C 9F > DB {b $} ^ BXlt 9 5D3D 05 > DB {b $} ^ BXlt
There are for sure more possible ways, but not a simple way to replicate the exact syntax of your example, you need to convert that source for sjasmplus, sorry.Код:$ hd ~/zx/ped/scratch/temp.bin 00000000 df ca d5 c0 d7 c4 d1 ca d7 9f 05 |...........| 0000000b
Последний раз редактировалось Ped7g; 17.01.2025 в 01:46.
Bedazzle(17.01.2025)
Спасибо Ped7g за ваше внимание.
Я начал работать с M80 с конца 80-х и тогда других вариантов не было. А уже ближе к 2000-м начал подумывать об использовании чего нибудь посовременнее. Но, тогда уже было много наработок на M80 с его IRP/IRPC, и требовалось много изменений. Тем более, что основная заповедь гласит: "работает, не трожь!" И даже сейчас, с вашим SjASMPlus, видно что это не просто.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)