User Tag List

Страница 66 из 70 ПерваяПервая ... 626364656667686970 ПоследняяПоследняя
Показано с 651 по 660 из 699

Тема: SjASMPlus от z00m

  1. #651

    Регистрация
    28.08.2023
    Адрес
    г. Брест, Беларусь
    Сообщений
    142
    Спасибо Благодарностей отдано 
    15
    Спасибо Благодарностей получено 
    54
    Поблагодарили
    33 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Да, спасибо @Ped7g.

    P.S. как я понимаю, накрутить что-то подобное irp достаточно легко и с помощью DEFARRAY, там добавить локальные имена и всё, но можно и без этого. Синтаксис другой, менее удобный, но делать будет примерно то же самое, даже похожее макро можно набросать. А вот с irpc засада. Если я ничего не путаю, типа данных «массив байт» и, соответственно, выражения, имеющего такое значение нет.

    - - - Добавлено - - -

    Цитата Сообщение от M80 Посмотреть сообщение
    Спасибо Ped7g за ваше внимание.
    Я начал работать с M80 с конца 80-х и тогда других вариантов не было. А уже ближе к 2000-м начал подумывать об использовании чего нибудь посовременнее. Но, тогда уже было много наработок на M80 с его IRP/IRPC, и требовалось много изменений. Тем более, что основная заповедь гласит: "работает, не трожь!" И даже сейчас, с вашим SjASMPlus, видно что это не просто.
    Я тут заинтересовался, откуда есть пошли IRP[C] и при чём там макросы. Конечно, не настоящее исследование но, вдруг кому интересно:

    В общем, почитал документацию. В M80 всё оказалось логично, там REPT -- макро, поэтому оно ENDM и заканчивается. Сначала я подумал, что это у них там «как всегда», но потом что-то такое всплыло в памяти. Порылся в архиве и интернете (педивикия загажена сектой свидетелей святого x86, там ничего ценного не осталось, похоже). В общем, самое раннее, что я смог быстро найти -- 1975. Конечно, DEC. У них тоже IRP, IRPC и REPT, почему-то, макросами считаются. Для IRP? оно, наверное, некоторый смысл имеет. Но, для REPT оно не только меня смущало, но и авторов MACRO-11. Там для REPT есть ENDR, помимо допустимого ENDM.

    Вот придумали это всё в DEC или ещё откуда скопировали, я сходу найти не смог. Наверное, скопировали, пара ENDR|ENDM для REPT намекает. В IBM'овском Autocoder'е эта штука, вроде, называлась CHAIN и была очень примитивной. Интересно, что там было для PDP-5 или 8...

    Эти 2 пользователя(ей) поблагодарили Chwe за это полезное сообщение:

    Bedazzle(19.01.2025), M80(18.01.2025)

  2. #652

    Регистрация
    30.11.2015
    Адрес
    г. Самара
    Сообщений
    7,504
    Спасибо Благодарностей отдано 
    344
    Спасибо Благодарностей получено 
    712
    Поблагодарили
    594 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Chwe Посмотреть сообщение
    Вот придумали это всё в DEC или ещё откуда скопировали
    Тоже не скажу.
    Собственно, моё программирование для компов, а не для программируемых калькуляторов, началось именно с (аналога) PDP-11, там это было уже как данность.
    Ну и всё это было настолько развито, что с использованием макросов, условной копиляции и блоков повторения позволило - первоначально разработчикам из DEC - создать набор структурных операторов-макросов (IF, DO, WHILE, REPEAT и так далее), а мне позже допилить. Основной плюс - стало меньше необходиомсти в метках и структура программы смотрится прозрачней. Плюс скорость написания повысилась примерно на порядок. Плата за удобства - копмилируется медленней.
    Последний раз редактировалось Hunta; 18.01.2025 в 18:51.

  3. #653

    Регистрация
    06.05.2019
    Адрес
    г. Подольск
    Сообщений
    108
    Спасибо Благодарностей отдано 
    8
    Спасибо Благодарностей получено 
    18
    Поблагодарили
    13 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Код:
     MyMacros   MyVar, MyStructure
    
    ;-------------------------------------------
    MyMacros    MACROS     Name1, Name2
    
    Name1_Addr       EQU   $
    ; its work (result: MyVar_Addr)
    
    Name1.Addr       EQU   $
    ;not work (result: Name1.Addr)
    
    Name1_Addr       EQU   Name2.SomeAddr
    ; not work (Name2.SomeLabels not replace Name2)
          ENDM
    С чем связано, что переменная макроса не преобразуется, если стоит точка после неё? Использование @ не помогает.
    Последний раз редактировалось Biland; 16.03.2025 в 14:05.

  4. #654

    Регистрация
    30.01.2006
    Сообщений
    1,921
    Спасибо Благодарностей отдано 
    73
    Спасибо Благодарностей получено 
    119
    Поблагодарили
    80 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    точка недопустимый символ для имени, поэтому имя идет до точки, а дальше непонятный синтаксис
    ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
    ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet

  5. #655

    Регистрация
    31.01.2007
    Адрес
    Москва
    Сообщений
    810
    Спасибо Благодарностей отдано 
    11
    Спасибо Благодарностей получено 
    77
    Поблагодарили
    59 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Biland Посмотреть сообщение
    С чем связано, что переменная макроса не преобразуется, если стоит точка после неё? Использование @ не помогает.
    Не только точка, тут парсер не делает макроподстановку, считается что ты просто написал Name2.SomeAddr

    Цитата Сообщение от ZXMAK Посмотреть сообщение
    точка недопустимый символ для имени, поэтому имя идет до точки, а дальше непонятный синтаксис
    очень даже допустимый, внутренние метки по факту просто <имя процедуры>.<внутренняя метка> их можно задать, при желании, снаружи процедуры

  6. #656

    Регистрация
    10.05.2019
    Адрес
    Prague, Czech Republic
    Сообщений
    229
    Спасибо Благодарностей отдано 
    51
    Спасибо Благодарностей получено 
    103
    Поблагодарили
    77 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    You are another person asking about this: https://github.com/z00m128/sjasmplus/issues/257

    it's by design, macro arguments are similar to DEFINE, so they are substituted in raw text of line before parser starts parsing it as assembly, they are similar to C preprocessor stage. And the substitution is looking only for full name of macro argument/define, or for sub-word delimited by underscore `_`. Sub-words delimited by dot are not considered.

    I'm considering to add substitution operator `_` to concatenate two sides during preprocessing step, so `Name2 _ .SomeAddr` would be then possible (at least one side of `_` would have to be actual define or macro argument name, otherwise the `_` would be considered regular char, so `ld hl,_` would still work as before, looking for symbol `_`. But I haven't even started with such enhancement.



    Meanwhile there is new release, v1.21.0:
    https://github.com/z00m128/sjasmplus...es/tag/v1.21.0



    - - - Updated - - -

    Biland: but I'm a bit confused what do you need it for, I would expect such need to be rare and there is maybe some other way how to write your source to get desired result with reasonable simplicity, if you want to share bigger example of your problem and why you want macro like that, maybe I can propose some different way how to write the code with what sjasmplus offers (already now, without waiting for future enhancements).
    Последний раз редактировалось Ped7g; 17.03.2025 в 23:59.

  7. #657

    Регистрация
    06.05.2019
    Адрес
    г. Подольск
    Сообщений
    108
    Спасибо Благодарностей отдано 
    8
    Спасибо Благодарностей получено 
    18
    Поблагодарили
    13 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    В моём случае, я пытаюсь работать со структурами и макросами. Было бы удобнее использовать Object.X, Object.Y, Object.Size и так далее, чем Object_X, Object_Y, Object_Size. Но в моём случае, как я написал, я работаю со структурами и при присвоении [<label>] <struct_name> - я могу использовать смещения по имени структуры (<struct_name>.MyLabel). И хотел указать минимум для [<label>], например, Size, End, Start. Приходится делать после выполнения макроса [<label>].Size, [<label>].End, [<label>].Start. Хотя было бы удобнее в макросе.

    При создании переменных было бы лучше через точку. Вариант, где было бы наглядней визуально, как в языках высокого уровня:
    Код:
    SETVAR			MACRO NAME, NAMESIZE
    NAME				EQU	INITVAR
    			IF NAMESIZE >= 0
    NAME_Size			EQU 	NAMESIZE
    NAME_PEnd			EQU 	INITVAR +NAMESIZE	
    INITVAR=			INITVAR +NAMESIZE
    			ELSE
    NAME_Size			EQU	1
    INITVAR=			INITVAR +1
    			ENDIF
    NAME_CurAdr		EQU $
    			ENDM
    Ещё, вопрос. Если я, например, вызову макрос с одной переменной SETVAR MyVar, то компилятор будет ругаться. Внутри макроса другие компиляторы позволяют проверять не переданные параметры, через IFNB и IFB. Это вызывает проблемы при адаптации исходников для sjasm.

  8. #658

    Регистрация
    28.08.2023
    Адрес
    г. Брест, Беларусь
    Сообщений
    142
    Спасибо Благодарностей отдано 
    15
    Спасибо Благодарностей получено 
    54
    Поблагодарили
    33 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Вопрос, скорее, в качестве разминки для ума, так как я сам сходу могу придумать минимум два способа решения (lua и «чистый asm», навеянный дискуссией о IRPC). Но, интересно будет узнать другие решения, если они есть.

    Итак, задача – самостоятельно генерировать PLUS3DOS заголовок, ну, который 128 байт в начале файла для +3DOS. Понятно, что вопрос, по сути, сводится к «как посчитать контрольную сумму?» Lua – ответ очевидный, а вот какие ещё ваши доказательства варианты?

    P.S. свой вариант на «чистом» asm пока не привожу, там, скорее идея – работать оно, почему-то, работает, но не так, как я ожидал.

  9. #659

    Регистрация
    24.07.2018
    Адрес
    г. Москва
    Сообщений
    83
    Спасибо Благодарностей отдано 
    34
    Спасибо Благодарностей получено 
    49
    Поблагодарили
    34 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от zebest Посмотреть сообщение
    sub a,32
    Я тоже засел как-то с алгоритмом из-за того, что "SUB A,B" превратились этим ассемблером в два опкода - "SUB A" и затем "SUB B", что было ФАТАЛЬНО не тем, что мне нужно было. Главное, такие ошибки довольно трудно-отлавливаемые. Нахрена такие "фичи" добавлять, не понятно. Такие фичи должны быть включаемыми и по умолчанию выключенными, а не включенными и хрен знает как выключаемыми. Ну или они ХОТЯ БЫ должны быть корректно реализованы. В данном случае, по моему мнению, реализованы они некорректно, потому что мнемоникой предполагается синтаксис SUB [A,]B, и если конкретный ассемблер sjasm хочет как-то расширить синтаксис в этом месте, то должен учитывать необязательный неявный "A," вначале списка, а не тупо собирать кучу команд по списку регистров. Это мое мнение. Считаю, что здесь все же ошибка реализации. Вначале нужно удалить A из начала списка, затем уже реализовывать свои фантазии, и проблем ни у кого не возникло бы. И если кому-то нужно будет зачем-то получить ряд инструкций, начиная с регистра A (понятия не имею, зачем), то пусть пишет SUB A,A,B,C,D, и так далее, на здоровье, сколько угодно (т.е. все ноль раз), а не я вместе со всеми должен страдать, выискивая дизасмом, почему корректный алгоритм не работает. Ped7g пишет, что
    Цитата Сообщение от Ped7g Посмотреть сообщение
    (vs Zilog official syntax, which is ... unfortunate... in some cases).
    но вместо того, чтобы помочь мне, программисту, создал еще больше проблем. Да нормальный тут у Зилога синтаксис. В SUB, AND, OR, XOR, CP не указывается A, потому что нет одноименных инструкций, работающих не с A. А у ADD, ADC, SBC указывается A, потому что есть еще ADD|ADC|SBC rp,rp, и возникла бы неопределенность. Обязан ли я помнить такие моменты, что SBC надо писать с A, а SUB - без A? Не обязан. Тут скорее неправильное трактование этого официального синтаксиса автором ассемблера, который В ПЕРВУЮ ОЧЕРЕДЬ должен был ПОМОЧЬ программисту с написанием программы, либо убрав "A,", либо, в крайнем случае, подсказывая ему о таких моментах предупреждениями или ошибками. Уж точно не мешать своими "фичами", трактуя код как-то по-своему, как какой-то сумасшедший. Ну два возможных варианта, автор. Тут не предусмотрено варианта - наассемблировать какой-то херни. Своими такими вот "фичами" "помогать" ассемблер должен где-то в десятую очередь, и то, если такой запрос поступил. А у нас тут в этом месте происходит конкретное такое вредительство, и иначе это не назвать. И, главное, куча человек уже написали о проблемах в этом месте, все опытные, уже с 30+ опытом программирования, но нет, "я - художник, я так вижу". Браво.

    Решение проблемы двойными запятыми - костыльное, но да, работает. Добавил "OPT --syntax=abf", как рекомендует Ped7g, это работает. Но это костыль, потому что проблема, на мой взгляд, как я сказал, в реализации "фичи", а не в количестве запятых. Не понимаю, почему я должен добавлять какую-то хрень в код, чтобы наконец-таки получить чистый ассемблер. Ну окей, я свои личные проблемы решил добавлением директивы, но в ассемблере так и осталась некорректная реализация фичи. Ну это такова в целом философия автора, которая идет вразрез с моей философией. Я считаю, что база должна работать из коробки, а автор, очевидно, считает, что я вначале обязан использовать его выдуманные директивы, указать устройство, чтобы хотя бы что-то начало работать, например, зачем-то указать NOSLOT, чтобы ассемблировать по нулевому адресу, и что-то еще указывать, чтобы начать получать в итоге базовую базу, а не чьи-то фантазии на тему SUB A: SUB B.

    И чего еще мне не хватило - это добавления \x## (16-чное 2-разрядное число) последовательностей в строковых параметрах для указания управляющих символов. И это для Спектрума, где куча управляющих символов, всякие управляющие AT, INK, PAPER, и т.д. Это я не понял, почему было не добавить. Серьезно, никому в голову не пришло сделать?! Очевидная же штука, казалось бы. Но нет.

    В остальном, все супер, но я макросы не использовал, много в какие дебри не лез. ALIGN попользовал для выравнивания кода в паре мест - отлично подошло, DISP отлично работает. Какими-то другими изысками не пользовался. Половинками индексных регистров тоже, мне сподручнее было написать DEFB #FD и LD L,A, чем пользоваться фейками. В общем, мне вообще мало что нужно для счастья, так что я скорее всем доволен.
    Последний раз редактировалось cafedead; 10.05.2025 в 18:32.

  10. #660

    Регистрация
    31.01.2007
    Адрес
    Москва
    Сообщений
    810
    Спасибо Благодарностей отдано 
    11
    Спасибо Благодарностей получено 
    77
    Поблагодарили
    59 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от cafedead Посмотреть сообщение
    Обязан ли я помнить такие моменты, что SBC надо писать с A, а SUB - без A? Не обязан.
    Цитата Сообщение от cafedead Посмотреть сообщение
    я вначале обязан использовать его выдуманные директивы, указать устройство, чтобы хотя бы что-то начало работать
    Троля греть не хорошо, но ты реально мастер.

Страница 66 из 70 ПерваяПервая ... 626364656667686970 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. SjASMPlus Z80 кросс ассемблер
    от Aprisobal в разделе Программирование
    Ответов: 1663
    Последнее: 19.06.2021, 01:36
  2. Исходники TR-DOS для SjASMPlus
    от Keeper в разделе Программирование
    Ответов: 20
    Последнее: 11.02.2011, 11:57
  3. Запуск STS из .sna, сгенерированного sjasmplus.
    от siril в разделе Программирование
    Ответов: 7
    Последнее: 11.10.2010, 21:33
  4. Breakpoints в связке Sjasmplus+UnrealSpeccy
    от Kurles в разделе Программирование
    Ответов: 19
    Последнее: 26.01.2009, 12:36
  5. Disturbed COverMAnia ( music disk with z00m music collection)
    от kyv в разделе Музыка
    Ответов: 10
    Последнее: 27.03.2008, 10:01

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •