User Tag List

Показано с 1 по 10 из 699

Тема: SjASMPlus от z00m

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    10.01.2010
    Адрес
    Смоленская обл.
    Сообщений
    556
    Спасибо Благодарностей отдано 
    187
    Спасибо Благодарностей получено 
    198
    Поблагодарили
    100 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Ped7g , а можете реализовать поддержку особых макросов с неопределённым количеством параметров, чтоб от ни одного до много-много ?

    Я тут подумал - в ZASM, в макрос можно передавать неопределённое количество параметров или не передавать вовсе, при этом доступ к ним осуществляется через =1 , =2 и т.д. Пример:

    NAME macro : ld hl,=1 : ld de,=2 :endm

    но там из-за многих ограничений эта фича преимуществ не даёт. А вот в SjASMplus с его Lua scripting , можно будет реализовывать довольно гибкие макросы, например реализовать какую-либо особую перекодировку строк символов в стиле записи в формате DEFB. Или что-то более сложное.

    У нас конечно знак '=' не подойдёт, да и чтобы не ломать проверки, этот макрос лучше оформлять отдельной командой . Например использовать слово 'macro$' или 'macro+' или что-то подобное.

    Типа :
    Код:
             macro$ <name>
                ....   
             endm
    Чтобы данный макрос можно было бы использовать как без параметров, так и с параметрами, количество которых не ограничено.
    Пусть например введённые параметры принимают имена по порядку p1 , p2 , ... , p10 , p11 , ... , p100 ... и так далее, а p0 , как в bash скриптах, показывает номер последнего параметра.
    А если две запятые идут друг за другом или через пробел, то значит параметр пустая строка (без кавычек)

    Lua функция sj.get_define("name", true) при отсутствии параметра в таком макросе пусть не орёт про ошибку, а выдаёт обычный nil

    Как смотрите на такое возможное дополнение ?
    Последний раз редактировалось Dart Alver; 18.06.2025 в 22:38. Причина: --

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2

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

    По умолчанию

    Цитата Сообщение от Dart Alver Посмотреть сообщение
    Ped7g , а можете реализовать поддержку особых макросов с неопределённым количеством параметров, чтоб от ни одного до много-много ?

    ...

    varargs for macro are mentioned few times in various issues, like: https://github.com/z00m128/sjasmplus/issues/150

    You are welcome to check current proposal/notes and add any new suggestion/syntax detail so it's not lost when finally somebody will want to work on it.
    (I'm currently working very little at hobby stuff, too busy with newborn, work and running/fitness, ZX dev time shrink to few hours per month right now)

    - - - Updated - - -

    Цитата Сообщение от CityAceE Посмотреть сообщение
    ...
    Вот так работает, но в итоге имеем лишних 7 байт на константы. Причём в конец кода их перекинуть нельзя, так как они должны находится перед первым вызовом макроса.
    There's no good native support for what you are trying to do.
    You can maybe hack it by doing DEFINE with numeric values, ie. DEFINE A 1 : DEFINE REG_A 1 : IF reg1 == REG_A ... but it will probably bite you badly in other ways because the defines like "A" are too short and generic. Other possible hack is to use lua script to check for value of macro argument reg1, that's less intrusive, but cumbersome.

    Mind you, sjasmplus has the i8080 support the other-way, ie. you can write i8080 code in Zilog syntax and the assembler will warn you when you use Z80-specific instruction by accident. sjasmplus has also support for "M" register as `(hl)` alias.

    You can add to source code:
    Код:
    ; use --i8080 switch to 8080 instructions only
      OPT --syntax=M   ; enable "M" register as (hl) alias
      LD A,B   ; MOV A,B
      LD A,M  ; MOV A,M
      LDIR ; error "Unrecognized instruction: LDIR"
    and assemble it with --i8080 switch to get results like this:
    Код:
    $ sjasmplus --i8080 --msg=lstlab -
    ; use --i8080 switch to 8080 instructions only
      OPT --syntax=M   ; enable "M" register as (hl) alias
      LD A,B   ; MOV A,B
      LD A,M  ; MOV A,M
      LDIR ; error "Unrecognized instruction: LDIR"
    # file opened: <stdin>
    1     0000              ; switch to 8080 instructions only
    2     0000                OPT --syntax=M
    3     0000 78             LD A,B   ; MOV A,B
    4     0001 7E             LD A,M  ; MOV A,M
    <stdin>(5): error: Unrecognized instruction: LDIR
    5     0002                LDIR ; error "Unrecognized instruction: LDIR"
    6     0002
    # file closed: <stdin>
    But to do it the other way, ie. to support original i8080 syntax, you should probably look for other assembler, sjasmplus is not a good choice for that.
    Последний раз редактировалось Ped7g; 08.07.2025 в 13:04.

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

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

Эту тему просматривают: 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

Ваши права

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