User Tag List

Страница 42 из 70 ПерваяПервая ... 383940414243444546 ... ПоследняяПоследняя
Показано с 411 по 420 из 699

Тема: SjASMPlus от z00m

  1. #411

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

    По умолчанию

    So in recent weeks I was abusing sjasmplus script a lot (as a form of test/exercise of the scripting implementation, some of the experience went into improving it just before v1.18.0 release)...

    If you are serious about sjasmplus scripting, maybe you can pick up a trick or two from these:
    https://github.com/ped7g/adventofcode

  2. #412

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

    По умолчанию

    Код:
    	
    tmp_cnt = 0
    	dup 10
    
    		if ((tmp_cnt = 0) || (tmp_cnt = 5) || (tmp_cnt = 7) || (tmp_cnt = 8))
    			display tmp_cnt," skip"
    		else		
    			display tmp_cnt," ok"
    		endif
    tmp_cnt = tmp_cnt +1
    	edup
    	
    	display " "
    
    tmp_cnt = 0
    	dup 10
    
    		if ((tmp_cnt != 0) || (tmp_cnt != 5) || (tmp_cnt != 7) || (tmp_cnt != 8))
    			display tmp_cnt," ok"
    		else		
    			display tmp_cnt," skip"
    		endif
    tmp_cnt = tmp_cnt +1
    	edup
    
    	display " "
    
    tmp_cnt = 0
    	dup 10
    
    		if ((tmp_cnt =! 0) || (tmp_cnt =! 5) || (tmp_cnt =! 7) || (tmp_cnt =! 8))
    			display tmp_cnt," ok"
    		else		
    			display tmp_cnt," skip"
    		endif
    tmp_cnt = tmp_cnt +1
    	edup
    		
    	display " "
    
    tmp_cnt = 0
    	dup 10
    
    		if ((tmp_cnt <> 0) || (tmp_cnt <> 5) || (tmp_cnt <> 7) || (tmp_cnt <> 8))
    			display tmp_cnt," ok"
    		else		
    			display tmp_cnt," skip"
    		endif
    tmp_cnt = tmp_cnt +1
    	edup

    Код:
    > 0x0000 skip
    > 0x0001 ok
    > 0x0002 ok
    > 0x0003 ok
    > 0x0004 ok
    > 0x0005 skip
    > 0x0006 ok
    > 0x0007 skip
    > 0x0008 skip
    > 0x0009 ok
    >
    > 0x0000 ok
    > 0x0001 ok
    > 0x0002 ok
    > 0x0003 ok
    > 0x0004 ok
    > 0x0005 ok
    > 0x0006 ok
    > 0x0007 ok
    > 0x0008 ok
    > 0x0009 ok
    >
    > 0x0000 ok
    > 0x0001 skip
    > 0x0002 skip
    > 0x0003 skip
    > 0x0004 skip
    > 0x0005 skip
    > 0x0006 skip
    > 0x0007 skip
    > 0x0008 skip
    > 0x0009 skip
    >
    test.asm(52): error: Syntax error: > 0) || (tmp_cnt <> 5) || (tmp_cnt <> 7) || (
    tmp_cnt <> 8))
    test.asm(52): error: ')' expected
    почему не работает != ? o_O
    почему =! дает какой то результат?
    Последний раз редактировалось NEO SPECTRUMAN; 05.01.2021 в 03:33.

  3. #413

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

    По умолчанию

    Цитата Сообщение от NEO SPECTRUMAN Посмотреть сообщение
    почему не работает != ? o_O
    Looks all correct to me?

    The first part is doing "skip" when cnt is 0 or 5 or 7 or 8

    The second part is doing "ok" every time (first two "(cnt is not 0) or (cnt is not 5)" are enough to be always true for any cnt value)

    The third part "=!" is parsed as: "=" is equivalence operator, "!" is logical not, so 0 becomes -1, and non-zero values become 0
    That leads to "ok" when cnt is -1 or 0

    Fourth is just syntax error, the "<>" operator doesn't exist in sjasmplus.

    Did you want in second block negation of first block? Then: !(A || B) = (!A) && (!B)
    (note the "logical or" becomes "logical and" when whole expression is negated)
    Код:
    tmp_cnt = 0
    	dup 10
    		if ((tmp_cnt != 0) && (tmp_cnt != 5) && (tmp_cnt != 7) && (tmp_cnt != 8))
    			display tmp_cnt," ok"
    		else		
    			display tmp_cnt," skip"
    		endif
    tmp_cnt = tmp_cnt +1
    	edup

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

    NEO SPECTRUMAN(05.01.2021)

  4. #414

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

    По умолчанию

    Цитата Сообщение от Ped7g Посмотреть сообщение
    Looks all correct to me?
    значит у меня не правильное понимание || и(людское) &&
    и значит (|| людское and &&) != ((людское OR) людское and (людское AND))
    Последний раз редактировалось NEO SPECTRUMAN; 05.01.2021 в 14:55.

  5. #415

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

    По умолчанию

    logical or (T = true [-1 in sj], F = false [0 in sj]):
    F || F = F
    T || F = T
    F || T = T
    T || T = T

    logical and:
    F && F = F
    T && F = F
    F && T = F
    T && T = T

    logical not:
    !F = T
    !T = F

    And the general math rules for propagating logical not in complex expressions:
    !(A < B) <=> A >= B
    !(A == B) <=> A != B
    !(A || B) <=> !A && !B
    !(A && B) <=> !A || !B
    ...
    https://en.wikipedia.org/wiki/Negation#Distributivity

    sjamplus treats any non-zero value as true, and zero value as false, but when boolean-true is calculated, it is represented by ~0 (-1).
    value = 4 ; value = 4
    value = !4 ; value = 0
    value = !!4 ; value = -1 (true)

    ( "людское ponimanje" => no idea what you are talking about, the math way is the only way I think about logic, even when talking in human language ... but there are many people not able to correctly negate predicate ... for example they ask you if you like blue colour, and you say "no", they will think you hate blue (which is incorrect negation "!like" is not "hate"))
    Последний раз редактировалось Ped7g; 05.01.2021 в 18:25.

  6. #416

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

    По умолчанию

    Цитата Сообщение от Ped7g Посмотреть сообщение
    "людское ponimanje" => no idea what you are talking about,
    не знаю как у вас
    у нас когда люди говорят

    если (if)
    A не равно 1
    или (or)
    A не равно 5
    тогда (then)
    Ы = 7
    если нет (else)
    тогда Ы = 0


    это имеется в виду (и это правильно)

    Код:
    if A <> 1
      if A <> 5
      Ы = 7
      else
      Ы = 0
      endif
    else
    Ы = 0  
    endif
    и ожидаемый результат
    1 Ы=0
    2 Ы=7
    3 Ы=7
    4 Ы=7
    5 Ы=0

    такое никогда не имеют в виду

    Код:
    if A <> 1
    temp1 = 1
    else
    temp1 = 0
    endif
    
    if A <> 5
    temp2 = 1
    else
    temp2 = 0
    endif
    
    if temp1 = 1
      Ы = 7
      else
      if temp2 = 1
      Ы = 7
      else
      Ы = 0
      endif
    endif
    и такой рeзультат
    1 temp1=0 or temp2=1 = Ы=7
    2 temp1=1 or temp2=1 = Ы=7
    3 temp1=1 or temp2=1 = Ы=7
    4 temp1=1 or temp2=1 = Ы=7
    5 temp1=1 or temp2=0 = Ы=7
    совершенно неожиданный



    людскими словами описывается совершенно другой процесс
    а такой вариант правильный только с точки зрения машинной логики
    и людскими словами описать его намного сложней (это будет достаточно много слов)


    к вам претензий нет
    просто это не совсем очевидный аспект
    Последний раз редактировалось NEO SPECTRUMAN; 07.01.2021 в 00:26.

  7. #417

    Регистрация
    02.05.2015
    Адрес
    г. Таллин, Эстония
    Сообщений
    1,691
    Спасибо Благодарностей отдано 
    302
    Спасибо Благодарностей получено 
    223
    Поблагодарили
    159 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от NEO SPECTRUMAN Посмотреть сообщение
    это имеется в виду (и это правильно)

    Код:
    if A <> 1
    Ы = 7
    else
      if A <> 5
      Ы = 7
      else
      Ы = 0
      endif
    endif
    Кривой код
    else
    Ы = 0
    никогда не отработает
    Heavy on the disasm
    Eric and the disasm
    Mask 3: Venom strikes disasm
    Bard's disasm

  8. #418

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

    По умолчанию

    Цитата Сообщение от Bedazzle Посмотреть сообщение
    никогда не отработает
    пофиксил

    поэтому и нужон долбанный список условий по типу if a=1,5,6
    а не трехэтажные IF-ы
    в которых можно чего то просмотреть

    или нужны элементарные for и goto
    чтоб не городить огород из dup-ов и if-ов
    ТУПО пытаясь повторить их функционал

    додо знаю щас ТЫ начнешь мне расказывать что
    компилятор не должен это делать
    это должен делать cpp, линкер, хренкер прочая ересь
    и весь исходник должен состоят из батников
    а компилятор должен только заменять nop на $00 и ничего более
    и даже не должен делать переходы на метки вперед
    и все метки для переходов должны быть предварительно объявлены в начале исходника
    а то ж ведь компилятор еще не знает куда ему переходить когда код выглядит так
    jp l1
    l1
    Последний раз редактировалось NEO SPECTRUMAN; 07.01.2021 в 00:42.

  9. #419

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

    По умолчанию

    Цитата Сообщение от NEO SPECTRUMAN Посмотреть сообщение
    не знаю как у вас
    у нас когда люди говорят

    если (if)
    A не равно 1
    или (or)
    A не равно 5
    тогда (then)
    Ы = 7
    если нет (else)
    тогда Ы = 0
    yeah, we say "if not equal to 1 and not equal to 5". I guess some people could use "or" there, but they are just using the language wrong, or not understanding the logic expressions. (mind you, while I didn't finish my university studies, I made it far enough to have all exams from math basics, like logic evaluation, so for me it's easy to use the language correctly in logic constructs ... but from my experience with people who didn't study it, it's common they don't understand the rules correctly, and say the wrong thing, while they think something else - very common by non-math people, it's not easy to formulate the rule correctly in human language, even by intelligent people, if they are missing the formal math teaching).

    But I think your example is actually correct if read in certain way, like this: "if A not equal to (1 or 5), then B = 7, else B = 0" -> now this makes some sense also from math point of view, a bit like incomplete distribution of negation, so you end with something like "IF A != (1 || 5)", but if you expand it to simpler statements, it needs the || negation, so "IF A != 1 && A != 5"

    Any way, you can in sjasmplus source always try to pick the "simpler to read", so if you are more familiar with "1 or 5", then do the positive form and negate the final result, like this:
    Код:
      IF !(A == 1 || A == 5 || A == 7)
        ;; other values of A (not 1 or 5 or 7)
      ELSE
        ;; when A is 1 or 5 or 7
      ENDIF
      ;; notice the "!" at beginning of the expression
      ;; flipping the final result of the test

  10. #420

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

    По умолчанию

    Ped7g, а можно добавить режим
    чтоб при перезаписи выдавались предупреждения?

    чтоб такой код
    Код:
     org $C000
    xor a
    xor b
    xor c
    xor d
    
     org $C001
    xor e
    выдавал
    warning $C001 was overwriten


    ну и если не заводить отдельный массив для этого
    то хотя бы проверять на $00 перед записью

    nop-ов не так много в коде
    и лучше хоть какая то проверка чем никакой...

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

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

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

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

Ваши права

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