User Tag List

Страница 39 из 70 ПерваяПервая ... 353637383940414243 ... ПоследняяПоследняя
Показано с 381 по 390 из 699

Тема: SjASMPlus от z00m

  1. #381

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

    По умолчанию

    Цитата Сообщение от NEO SPECTRUMAN Посмотреть сообщение
    делать макросами не получится так как вокруг сплошная LUA
    dare you elaborate? This seems to me ok:
    Код:
        MACRO callNoSp returnReg?, procedureAdr?
            ld  returnReg?,.returnAfterJp
            jp  procedureAdr?
    .returnAfterJp:
        ENDM
    
        DUP 100
            callNoSp ix,someProcedure
        EDUP
    
    someProcedure:
        push bc
        jp (ix)
    Where exactly Lua kills this approach?

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

    NEO SPECTRUMAN(11.11.2020)

  2. #382

    Регистрация
    22.05.2011
    Адрес
    г. Дзержинск, Украина
    Сообщений
    6,829
    Спасибо Благодарностей отдано 
    483
    Спасибо Благодарностей получено 
    663
    Поблагодарили
    513 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Ped7g Посмотреть сообщение
    Where exactly Lua kills this approach?
    странно на вид работает о_О

    когда последний раз проверял макросы
    по моему или неправильно находилась длина процедур и часть их потом затиралась
    или jp вели на другие адреса

    конечно еще нужно проверить в реальном коде

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

    Цитата Сообщение от Ped7g Посмотреть сообщение
    DUP 100 callNoSp ix,someProcedure EDUP
    хотя это не выход из положения
    мне нужна именно временная метка
    так как

    Код:
    				tamp_left_allocate_macro
    callNoSp ix,someProcedure
    				end_tamp_left_allocate_macro
    
    				tamp_right_allocate_macro
    callNoSp ix,someProcedure
    				end_tamp_right_allocate_macro
    
    			tamp_left_allocate_macro
                 jp $
    				end_tamp_left_allocate_macro
    скомпилируется как

    Код:
    $8000        ld hl,$8006
                    jp  procedure
    $8006     jp $8006
    
    $C300        ld hl,$C306
                    jp  procedure
    когда нужно

    Код:
    				tamp_left_allocate_macro
            ld hl,temp
            jp procedure
    				end_tamp_left_allocate_macro
    
    				tamp_right_allocate_macro
    temp
            ld hl,temp
            jp procedure
    				end_tamp_right_allocate_macro
    
    			tamp_left_allocate_macro
    temp
                 jp $
    				end_tamp_left_allocate_macro
    Код:
    $8000        ld hl,$С300
                    jp  procedure
    
    $8006     jp $8006
    
    $C300        ld hl,$8006
                    jp  procedure

    память может быть сильно фрагментированной
    и такая конструкция работать не будет
    Код:
    dup 100
    				tamp_left_allocate_macro
    callNoSp ix,someProcedure
    				end_tamp_left_allocate_macro
    edup
    - - - Добавлено - - -

    наглядный пример
    Код:
    				org_allocate_macro $C010
    	di : halt
    				end_org_allocate_macro
    
    				org_allocate_macro $C021
    	di : halt
    				end_org_allocate_macro
    		
    				
        DUP 100
    				tamp_left_allocate_macro
            callNoSp ix,someProcedure
    				end_tamp_left_allocate_macro
        EDUP


    так же невозможно организовать выход из такой процедуры
    так как последний ix должен вести на выход
    Последний раз редактировалось NEO SPECTRUMAN; 11.11.2020 в 18:00.

  3. #383

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

    По умолчанию

    Цитата Сообщение от NEO SPECTRUMAN Посмотреть сообщение
    так же невозможно организовать выход из такой процедуры
    так как последний ix должен вести на выход
    That screenshot: so you did want "C019 ld ix,C023" to make "C00B" procedure return AFTER the "di:halt", right?
    And the final "C046 ld ix,C04D" should be "ld ix,someExit"?

    well, the second part is easy, just: ".100 callNoSp ix,proc" turns to ".99 callNoSp ix,proc" + "ld ix,exit : jp proc"

    but the first part is changing the task completely, so you don't want to IX="after `jp proc`", but you need IX="ahead of next code block".

    If I understand you correctly now.

  4. #384

    Регистрация
    22.05.2011
    Адрес
    г. Дзержинск, Украина
    Сообщений
    6,829
    Спасибо Благодарностей отдано 
    483
    Спасибо Благодарностей получено 
    663
    Поблагодарили
    513 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Ped7g Посмотреть сообщение
    but you need IX="ahead of next code block".
    да
    и этот кодовый блок может быть где угодно в памяти

  5. #385

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

    По умолчанию

    Цитата Сообщение от NEO SPECTRUMAN Посмотреть сообщение
    и этот кодовый блок может быть где угодно в памяти
    what about this:
    Код:
        ; helper macro to make __COUNTER__ sub-word substitution possible (hiding it in macro arg)
        ; ("FollowingCode___COUNTER__" would not substitute, but "FollowingCode_suffix?" does)
        MACRO nextFollowingCodeLabel suffix?
            IFDEF FollowingCodeLabel
    FollowingCodeLabel:
                UNDEFINE FollowingCodeLabel
            ENDIF
            DEFINE FollowingCodeLabel FollowingCode_suffix?
        ENDM
    
        MACRO tamp_left_allocate_macro
            ; ... some allocation done and final ORG
    nextOrg=(nextOrg+$6789)&$FFFF               ; for fun jump around memory (not real "allocate")
            ORG nextOrg                         ; where next code block should land
            ; mark this new code-block with "FollowingCodeLabel" label, and advance it for next code-block
            nextFollowingCodeLabel __COUNTER__
            ; ... other preamble shared code ...
        ENDM
    
        MACRO end_tamp_left_allocate_macro
            ; ...
        ENDM
    
        MACRO callNoSp returnReg?, procedureAdr?
            ld  returnReg?,FollowingCodeLabel
            jp  procedureAdr?
        ENDM
    
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        ; the memory location of code blocks is not important (could jump back and forth)
        ;
        ; the source code order of blocks is important - "FollowingCodeLabel:" is relative
        ; to where in source you currently are.
        ;
        ; And "tamp_left_allocate_macro" will advance it
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    
    nextOrg = $1234
        DUP 100
            tamp_left_allocate_macro
                nop
                callNoSp ix,someProcedure
            end_tamp_left_allocate_macro
        EDUP
    
        ; one manual block outside of DUP ...
        nextFollowingCodeLabel __COUNTER__  ; define label for this block and advance it
            daa             ; manual block code
            callNoSp ix,someProcedure
    
        ; exit-block manually added, just defining last FollowingCodeLabel label
    FollowingCodeLabel:     ; create one more "next code block" label for exit-block
            ; ... exit code (after last block)
            di
            halt
    
    someProcedure:
            ; ...
            jp ix
    (took me couple of minutes of thinking to avoid Lua ... but in the end the extra helper macro did the trick )

  6. #386

    Регистрация
    22.05.2011
    Адрес
    г. Дзержинск, Украина
    Сообщений
    6,829
    Спасибо Благодарностей отдано 
    483
    Спасибо Благодарностей получено 
    663
    Поблагодарили
    513 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Ped7g Посмотреть сообщение
    tamp_left_allocate_macro
    это внешние макросы про которые мы ничего не знаем и которые мы не трогаем

    это примерно как совет полезть редактировать C:\MinGW\include\stdio.h
    Последний раз редактировалось NEO SPECTRUMAN; 16.11.2020 в 12:24.

  7. #387

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

    По умолчанию

    (I don't see how that matters for that example, just extract the functionality and add it in the form valid for your use case - I can't produce your code, if you don't share it first, if you will re-read history of this topic, you keep coming with new bits of info after every response posting you working example fitting your previous rules - stops being fun after like third try, that you can't explain yourself clearly in the first post .. so you have like one try left)

  8. #388

    Регистрация
    22.05.2011
    Адрес
    г. Дзержинск, Украина
    Сообщений
    6,829
    Спасибо Благодарностей отдано 
    483
    Спасибо Благодарностей получено 
    663
    Поблагодарили
    513 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Ped7g Посмотреть сообщение
    I can't produce your code,
    я написал 60+ уникальных меток руками
    до того как написать тут о том что временные метки в sjasm не работают как нужно

    хотя я периодически сталкиваюсь с этой проблемой и хотелось бы иметь решение
    но то что предложено выше
    больше похоже на убегание от проблем чем на их решение
    Последний раз редактировалось NEO SPECTRUMAN; 16.11.2020 в 13:17.

  9. #389

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

    По умолчанию

    yep. I have no plans to extend temporary digit-labels to work with all instructions, the current design of making them valid only with `jr/jp/call` is fine by me (I think I understand *why* Sjoerd Mastijn designed it like that... even current sjasm 0.42 has still the same design of "reusable labels") (while checking sjasm docs, I see somewhat adjusted rules for regular labels, this looks interesting, the "!" prefix would be nice to add into sjasmplus - not related to your issue, just taking note for myself).

    There are two issues about extending temporary/reusable labels:

    1) I don't have vision of clearly-better solution, when I gave it some short thought, I see only more mess and confusion

    2) I have lot of other stuff to do on sjasmplus (SLD export and warnings-system improvements, then release), but little time for it

    And for me the proposed solution in my last answer with code looks good, like valid solution, feels to me much more solid than some temporary label hack.

    (of course anyone else can redesign the feature and ask me (and other contributors) if we like the new design, and implement a patch and create pull request... it's open project and I would feel bad to just reject it)

    If I will have nothing else to do on sjasmplus and feel bored, I will certainly revisit any remaining suggestions and try to pick some good ones.

    With regard to your current issue, I provided you working solution. I don't see what more you want, sorry.
    Последний раз редактировалось Ped7g; 16.11.2020 в 13:40.

  10. #390

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

    По умолчанию

    https://github.com/z00m128/sjasmplus...es/tag/v1.18.0

    - some new/improved directives: WHILE<->ENDW, ELSEIF, DEFINE+, DISPLAY
    - abs operator
    - new warning system (with systematic suppression scheme)
    - some bugfixes/implementation rewritten
    - and more tiny details...

    ... I have a feeling this may be default setup of some guys here (but you may try first without and see if it's relevant)
    Код:
      ; ... in source ...
      OPT -Wno-rdlow -Wno-out0 -Wno-trdext -Wno-trdext3
    Anyway, if you see some new warning with "warning[some_id]" form, then `-Wno-some_id` will switch it off completely, and line comment "; some_id-ok" will suppress it for particular line.

    Have fun.

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

    Evgeny Muchkin(16.12.2020), NEO SPECTRUMAN(12.12.2020)

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

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

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

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

Ваши права

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