User Tag List

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

Тема: SjASMPlus от z00m

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

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

    Регистрация
    13.01.2005
    Адрес
    г. Москва
    Сообщений
    5,215
    Записей в дневнике
    7
    Спасибо Благодарностей отдано 
    706
    Спасибо Благодарностей получено 
    1,648
    Поблагодарили
    573 сообщений
    Mentioned
    50 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Столкнулся с дурацкой ситуацией, которую пока не знаю как правильно решить. Прошу помощи!

    Я переделывал код Z80 в код i8080. Отсутствующие у i8080 заменял макросами. А чтобы не плодить огромную кучу похожих макросов я сделал универсальные макросы, которые принимают на вход имя регистра. Внутри макроса по имени переданного регистра я выполняю определённые действия. Но проблема в том, что я не нашёл как делать условия правильно, чтобы оно срабатывало с передаваемым именем.

    Пример:

    Код:
     macro instr reg1, reg2
     if reg1 == A
      ; some code
     if reg2 == H
      ; some code
     endm
    
    
     instr A, C
    Ни одно из условий не выполнится. Я пробовал и кавычки и много чего ещё. Чаще всего получаю ошибку на отсутствующую метку.

    В итоге после череды всевозможных проб и ошибок закостылил так:

    Код:
     macro instr reg1, reg2
     if reg1 == A
      ; some code
     if reg2 == H
      ; some code
     endm
    
    A:     db    "A"
    B:     db    "B"
    C:     db    "C"
    D:     db    "D"
    E:     db    "E"
    H:     db    "H"
    L:     db    "L"
    
     instr A, C
    Вот так работает, но в итоге имеем лишних 7 байт на константы. Причём в конец кода их перекинуть нельзя, так как они должны находится перед первым вызовом макроса.
    С уважением, Станислав.

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

  3. #2

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

    По умолчанию

    Цитата Сообщение от CityAceE Посмотреть сообщение
    Ни одно из условий не выполнится. Я пробовал и кавычки и много чего ещё. Чаще всего получаю ошибку на отсутствующую метку.
    Не знаю, как вы кавычки пробовали. Вот я попробовал:

    Код:
    	macro instr reg1, reg2
    	 if reg1 == "A"
    	  DISPLAY "A"
    	  ; some code
    	 if reg2 == "H"
    	  DISPLAY "H"
    	  ; some code
    	 endm
    
    	instr "A", "C"
    Все нормально выполняется. Первое условие выполнилось, второе - нет, все корректно. Хотя я у этого кросс-ассемблера заметил какую-то лажу в приоритетах операций. Иногда довольно странные скобки приходится ставить.

    Код:
    SjASMPlus Z80 Cross-Assembler v1.21.0 (https://github.com/z00m128/sjasmplus)
    Pass 1 complete (0 errors)
    Pass 2 complete (0 errors)
    > A
    macro.asm(11): error: [IF] No ENDIF
    macro.asm(15): ^ emitted from here
    macro.asm(11): error: [IF] No ENDIF
    macro.asm(15): ^ emitted from here
    Pass 3 complete
    Errors: 2, warnings: 0, compiled: 23 lines, work time: 0.000 seconds
    Ну и да, у вас второй иф вложен в первый, ENDIFов нет.

    Или вы хотели в instr именно без кавычек писать имена регистров?
    Последний раз редактировалось cafedead; 03.07.2025 в 23:11.

  4. #3

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

    По умолчанию

    Цитата Сообщение от cafedead Посмотреть сообщение
    Все нормально выполняется. Первое условие выполнилось, второе - нет, все корректно.
    Кавычки в параметрах макроса по лексике не подходили.

    Цитата Сообщение от cafedead Посмотреть сообщение
    Ну и да, у вас второй иф вложен в первый, ENDIFов нет.
    Видимо просто схематично изобразил условия, ENDIFы в ' ; some code'е спрятались ))

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

    Цитата Сообщение от CityAceE Посмотреть сообщение
    Ни одно из условий не выполнится. Я пробовал и кавычки и много чего ещё. Чаще всего получаю ошибку на отсутствующую метку.
    Ну ещё, если не юзать метки, то можно через lua решить вопрос, но телодвижений больше ))

  5. #4

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

    По умолчанию

    Цитата Сообщение от Dart Alver Посмотреть сообщение
    Кавычки в параметрах макроса по лексике не подходили.
    Ну вот я как раз и говорю о том, что у автора вопроса проблемы с формулированием целей и задачи. Чтобы его понять, приходится какое-то время вникать в его макрос, пытаться понять, что он там настроил, да и вообще, что у него в голове за поток сознания, а не просто прочитать комментарий, написанный нормальным языком, мол стоит задача такая-то такая-то, проблема такая-то такая-то.

    Посмотрел, что там у Интела с макросами, попробовал написать так же и тут, и это почти заработало, но, поскольку таких имен ни переменных, ни лейблов не существует, там специальный синтаксис для получения значений для сравнения таких вот псевдопеременных из имен регистров, и специальная директива для получения типа входящей переменной, чего в sjasm вроде бы нет. Не помешало бы добавить. Я немного взломал систему, если можно так выразиться, получилось вот так:

    Код:
    	macro load8 l8, h8
    	 display $h8
    	 display $l8
    	 ld l8, h8
    	 endm
    
    	macro load16 l16, h16
    	 display $h16
    	 display $l16
             if $h16 == $AF
               display "h16=AF"
             endif
             if $l16 == $BC
               display "l16=BC"
             endif
    	 push h16
    	 pop l16
    	endm
    
    	load8 B,C
    
    	load16 DE,AF
    Это почти работает, что-то можно сравнивать, но, понятное дело, только с теми регистрами и регистровыми парами, которые умещаются в 16-чную систему счисления. HL, SP, IX, IY, штрихи всякие в пролете. Но это чисто поржать, я не рекомендую так это использовать, т.к. явно тут вылезли какие-то недоработки в компиляторе, которые нужно устранить.

    Ну не знаю, может Ped7g прокомментирует, может быть там есть возможности, о которых мы не знаем.

    Upd: Хотя вот так все работает:
    Код:
    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
    
    	macro ld8 dst, src
    	 display "LD8"
    	 display src
    	 display dst
    	 if dst == H
    	  display "dst = reg H"
    	 endif
    	 ld dst,src
    	 ld a,b ; это проставит инструкцию с реальными регистрами A и B
    	endm
    
          	ld8 B,C
    	ld8 H,E
    Код:
    SjASMPlus Z80 Cross-Assembler v1.21.0 (https://github.com/z00m128/sjasmplus)
    Pass 1 complete (0 errors)
    Pass 2 complete (0 errors)
    > LD8
    > 0x0001
    > 0x0000
    > LD8
    > 0x0003
    > 0x0004
    > dst = reg H
    Pass 3 complete
    Errors: 0, warnings: 0, compiled: 208 lines, work time: 0.000 seconds
    И никаких костылей, или байтов в памяти.
    Последний раз редактировалось cafedead; 04.07.2025 в 17:08.

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

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

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

Ваши права

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