User Tag List

Страница 48 из 70 ПерваяПервая ... 444546474849505152 ... ПоследняяПоследняя
Показано с 471 по 480 из 699

Тема: SjASMPlus от z00m

  1. #471

    Регистрация
    06.05.2010
    Адрес
    Бердск, НСО
    Сообщений
    4,968
    Спасибо Благодарностей отдано 
    1,074
    Спасибо Благодарностей получено 
    1,173
    Поблагодарили
    914 сообщений
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Для этих макросов, вроде в Сжасме есть готовые директивы.

    Первый (DUPL), как я понял, просто заполняет LEN байт памяти байтом FILL.
    Для этого есть BLOCK <length>[,<fill byte>] (DEFS <length>[,<fill byte>]).

    Второе это старший/младший байты.
    В Сжасме они есть тоже.
    low low x low 8 bits of 16 bit value or lower part of register pair
    high high x high 8 bits of 16 bit value or higher part of register pair
    Личка заполнена! И чистить я ее не буду! Пользуйтесь адекватными средствами связи! Спасибо.

    Seamos realistas y hagamos lo imposible!

    Ernesto Che Guevara
    Переехал сюда: SteinBlume (ex ATM CP/M Explorer)
    http://era-cg.su

    Скрытый текст

    Speccy2010 r2 (Спасибо m.d. & xlat),
    Sinclair ZX Spectrum + (Спасибо stepmotor),
    ZX Evolution rev.C + 5'25 FDD Epson SD-700AA + NedoPC PAL-Coder (Спасибо m.d. & xlat)
    [свернуть]

  2. #472

    Регистрация
    18.07.2021
    Адрес
    г. Хмельницкий, Украина
    Сообщений
    105
    Спасибо Благодарностей отдано 
    12
    Спасибо Благодарностей получено 
    33
    Поблагодарили
    25 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Не могу понять, как правильно работать с IFUSED?

    DEVICE ZXSPECTRUM48

    ORG 0x8000


    main:
    <code>
    <code>
    <code>
    <code>
    <code>
    ret

    include "address.asm" ; здесь объявлен модуль coords
    include "out43.asm"
    include "sto_rec.asm"
    include "pause.asm"
    include "windows.asm"
    Главная программа.




    module coords

    ifused XxXxXxX

    XxXxXxX <code>
    <code>
    <code>
    <code>
    ret

    endif
    Файл address.asm, в котором объявлен модуль coords.




    module windows

    CLS <code>
    <code>
    <code>
    <code>
    <code>
    call coords.XxXxXxX
    ret
    Другой модуль, который ссылается на ссылку в модуле coords.




    Pass 3 complete
    Errors: 4, warnings: 0, compiled: 870 lines, work time: 0.015 seconds
    The terminal process "C:\Program Files\PowerShell\7\pwsh.exe -Command sjasmplus --sld=test.sld --fullpath test.asm" terminated with exit code: 1.

    Terminal will be reused by tasks, press any key to close it.

    > Executing task: sjasmplus --sld=test.sld --fullpath test.asm <

    SjASMPlus Z80 Cross-Assembler v1.18.2 (https://github.com/z00m128/sjasmplus)
    Pass 1 complete (0 errors)
    Pass 2 complete (0 errors)
    windows.asm(91): error: Label not found: windows.coords.XxXxXxX
    Результат...
    Что неправильно?

    upd
    "Known bug: when code is using label inside module "moduleX", like call labelY, only usage of moduleX.labelY label is noted. Then if you define "labelY" outside of module and hide it inside IFUSED labelY block, the call from module will be unable to find the routine.

    Workaround: you can use the global-label operator @: "call @labelY" to trigger usage of the global "labelY", or you can use the alternative IFUSED syntax "labelY: IFUSED" which does not only check condition, but also does define the label. Once the label is defined, the "call labelY" line inside module will find the global variant and mark it as "used" correctly."
    Оно?

    Вроде бы, оно...
    Но новая беда - если написать
    labelY: IFUSED
    то не работают временные метки.
    Последний раз редактировалось 0xDEAD; 19.08.2021 в 18:38.

    Этот пользователь поблагодарил 0xDEAD за это полезное сообщение:

    Ped7g(19.08.2021)

  3. #473

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

    По умолчанию

    Код:
    			module n1
    			call @m1.used1
    			endmodule
    			module m1
    			ifused used1
    used1
    			nop
    			jr	1F
    			nop
    1
    			ret
    			endif
    			endmodule
    Так работает, а с новым синтаксисом да, косяк.

  4. #474

    Регистрация
    18.07.2021
    Адрес
    г. Хмельницкий, Украина
    Сообщений
    105
    Спасибо Благодарностей отдано 
    12
    Спасибо Благодарностей получено 
    33
    Поблагодарили
    25 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Ну, у меня с @ не работает.

    Pass 1 complete (0 errors)
    Pass 2 complete (0 errors)
    address.asm(25): error: [JR] Target out of range (+598)
    address.asm(29): error: Local-labels flow differs in this pass (missing/new local label or final pass source difference)
    address.asm(33): error: Local label not found: 4F
    address.asm(36): error: Local-labels flow differs in this pass (missing/new local label or final pass source difference)
    out43.asm(28): error: [JR] Target out of range (+434)
    out43.asm(32): error: Local-labels flow differs in this pass (missing/new local label or final pass source difference)
    windows.asm(18): error: Local-labels flow differs in this pass (missing/new local label or final pass source difference)
    include data: name=font.fnt (768 bytes) Offset=0 Len=768
    Pass 3 complete
    Errors: 7, warnings: 0, compiled: 927 lines, work time: 0.031 seconds
    The terminal process "C:\Program Files\PowerShell\7\pwsh.exe -Command sjasmplus --sld=test.sld --fullpath test.asm" terminated with exit code: 1.

  5. #475

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

    По умолчанию

    Цитата Сообщение от 0xDEAD Посмотреть сообщение
    Ну, у меня с @ не работает.
    Не бывает у меня работает, у других нет. Значит ошибка в другом. Скорее всего ifused объявлен до использования, это в любом случае ошибка.

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

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

  6. #476

    Регистрация
    18.07.2021
    Адрес
    г. Хмельницкий, Украина
    Сообщений
    105
    Спасибо Благодарностей отдано 
    12
    Спасибо Благодарностей получено 
    33
    Поблагодарили
    25 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Подпрограммы, которые я хочу использовать с ifused у меня в include лежат, которые размещены после ret главной программы. К меткам, которые объявлены в том модуле, который я хочу пометить как ifused, в любом случае, обращение происходит раньше по тексту программы, если это имеется в виду.
    К тому же, непонятна связь между объявлением ifused и моментальной сразу же после этого потерей работоспособности временных меток.
    address.asm(33): error: Local label not found: 4F
    Цитата Сообщение от krt17 Посмотреть сообщение
    Хотя я проверял без инклюдов. В сиджасме они как выяснилось влияют не на совсем очевидные вещи.
    Интересно, на какие, например?
    Последний раз редактировалось 0xDEAD; 19.08.2021 в 22:06.

  7. #477

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

    По умолчанию

    Да это. Но то что вы написали в первом посту говорит о другом. Проверил с инклюдами, все в порядке.
    Сделайте минимальный синтетический тест, будет попонятнее.

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

    Цитата Сообщение от 0xDEAD Посмотреть сообщение
    Интересно, на какие, например?
    В старом обсуждении параллельной ветки был мой пример. Насколько я помню в этой ветке его вылечили, но помню я плохо, посему будем считать что проблем с инклюдом и ифюзед уже нет.

  8. #478

    Регистрация
    18.07.2021
    Адрес
    г. Хмельницкий, Украина
    Сообщений
    105
    Спасибо Благодарностей отдано 
    12
    Спасибо Благодарностей получено 
    33
    Поблагодарили
    25 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от krt17 Посмотреть сообщение
    будем считать что проблем с инклюдом и ифюзед уже нет
    В официальной документации к компилятору прямым текстом написано, что есть баг. С ifused. Про include, правда, там речь не идёт.

  9. #479

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

    По умолчанию

    Да написано. Прочитали? Предложено пара воркараундов, один работает, во втором проблема с временными метками.
    тест обеих случаев, Ped7g посмотрит разберется
    Код:
    			device	zxspectrum48
    			org	0x8000
    start
    			module	n1
    			call	@m1.used1
    			call m2.used2
    			jr	$
    			endmodule
    			module	m1
    			ifused	used1
    used1
    			nop
    			jr	1F
    			nop
    1
    			ret
    			endif
    			endmodule
    			module	m2
    used2:			ifused
    
    			nop
    			jr	2F
    			nop
    2
    			ret
    			endif
    			endmodule
    
    			savesna	"usedtest.sna", start
    Последний раз редактировалось krt17; 19.08.2021 в 22:27.

    Этот пользователь поблагодарил krt17 за это полезное сообщение:

    Ped7g(19.08.2021)

  10. #480

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

    По умолчанию

    the temporary number-labels may not work inside IFUSED, if the first pass doesn't already detect the label as used...

    I did rewrite temporary label implementation in v1.11.1 I think? As it was not working correctly when amount of lines did change between passes, but thinking about it (not 100% sure), maybe now they don't mind changing amount of lines, but require to form the same list across all passes, so if some of them are missing because of IFUSED in first pass was false, then true later, the total list is different, and it maybe fails because of that.

    If you have only few of them, consider to change them to local labels? Or include the libraries after the main code, when the IFUSED will already know in first pass, which routines are used?

    Of course it would be better to fix sjasmplus, but that may take some time, or somebody else doing it, right now I'm waiting for z00m to release 1.18.3, not planning to work on sjasmplus this +-year.

    Still, if you can produce some minimal failing example, it may help to target the bug easier.

    About calling from one module to other ... the `call @other_module.function` is IMO best way, as that's what the source is really doing. Without "@" the label `my_module.other_module.function` is first-priority and other variants are searched only if that fails. Which usually still works for almost anything, except IFUSED. But I don't consider this 100% bug on sjasmplus side, it's heuristic, if you don't specify full global name, and as any heuristic - it's not perfect. (and there's no 100% correct fix for it, whatever you do, you can create anti-example where the new method will fail, as the whole concept is ambiguous).

    ... or you can try to zip your project and send it to me to see if I can quickly patch it to assemble with latest version (would be probably quicker to patch your sources, than sjasmplus... ...and maybe not).

    - - - Updated - - -

    ah, you (krt17 - thank you) did produce the minimal example. And seems I remember it correctly, the heuristic guessing what label you want to call at `call m2.used2` fails as the `n1.m2.used2` is first-priority in first pass, then the `used2: ifused` in first pass is "false", which makes the "2" temporary label non-existent in first pass.

    You can fix such source either by being more explicit in the call using "@" to target the correct module `call @m2.used2`, or you can change the "2" temporary label to some local label. Using those number-labels inside IFUSED blocks is really bad idea since v1.11.1 ... and using them before is really bad idea too... Hmm... I guess it's just bad idea in any case. Use regular labels.

    edit2: but I guess the temporary labels stuff is more like bug... maybe it could accept changes to the temporary labels list between first and second pass, but I'm not sure if that is enough to resolve this. I will keep that example around and maybe check it later, what can be done about it. 0xDEAD: anyway, thank you for reporting your issue, and sorry I don't have some perfect fix for you.
    Последний раз редактировалось Ped7g; 19.08.2021 в 23:33.

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

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

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

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

Ваши права

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