Прокомментируйте участок кода.

Тема в разделе "WASM.BEGINNERS", создана пользователем Olia, 7 окт 2011.

  1. Olia

    Olia New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2011
    Сообщения:
    17
    Что делает каждая строчка?
    Инструкции древнего процессора.

    $C2F5:20 67 C9 JSR $C967 A:00 X:FF Y:00 S:FF P:NvUbdIzc // Вход в новую процедуру
    $C967:A5 86 LDA $0086 = #$00 A:00 X:FF Y:00 S:FD P:NvUbdIzc
    $C969:lol: 0 06 BNE $C971 A:00 X:FF Y:00 S:FD P:nvUbdIZc
    $C96B:A5 60 LDA $0060 = #$00 A:00 X:FF Y:00 S:FD P:nvUbdIZc
    $C96D:C9 01 CMP #$01 A:00 X:FF Y:00 S:FD P:nvUbdIZc
    $C96F:lol: 0 03 BNE $C974 A:00 X:FF Y:00 S:FD P:NvUbdIzc
    $C974:A5 51 LDA $0051 = #$00 A:00 X:FF Y:00 S:FD P:NvUbdIzc
    $C976:lol: 0 31 BNE $C9A9 A:00 X:FF Y:00 S:FD P:nvUbdIZc
    $C978:A5 1F LDA $001F = #$00 A:00 X:FF Y:00 S:FD P:nvUbdIZc
    $C97A:C9 03 CMP #$03 A:00 X:FF Y:00 S:FD P:nvUbdIZc
    $C97C:B0 2B BCS $C9A9 A:00 X:FF Y:00 S:FD P:NvUbdIzc
    $C97E:A5 1B LDA $001B = #$00 A:00 X:FF Y:00 S:FD P:NvUbdIzc
    $C980:lol: 0 5B BNE $C9DD A:00 X:FF Y:00 S:FD P:nvUbdIZc
    $C982:20 01 C6 JSR $C601 A:00 X:FF Y:00 S:FD P:nvUbdIZc
    $C601:A5 6A LDA $006A = #$00 A:00 X:FF Y:00 S:FB P:nvUbdIZc
    $C603:lol: 0 EC BNE $C5F1 A:00 X:FF Y:00 S:FB P:nvUbdIZc
    $C605:A5 6D LDA $006D = #$00 A:00 X:FF Y:00 S:FB P:nvUbdIZc
    $C607:F0 03 BEQ $C60C A:00 X:FF Y:00 S:FB P:nvUbdIZc
    $C60C:A5 12 LDA $0012 = #$00 A:00 X:FF Y:00 S:FB P:nvUbdIZc
    $C60E:60 RTS A:00 X:FF Y:00 S:FB P:nvUbdIZc
    $C985:29 C0 AND #$C0 A:00 X:FF Y:00 S:FD P:nvUbdIZc
    $C987:F0 20 BEQ $C9A9 A:00 X:FF Y:00 S:FD P:nvUbdIZc
    $C9A9:60 RTS A:00 X:FF Y:00 S:FD P:nvUbdIZc
     
  2. PSR1257II

    PSR1257II New Member

    Публикаций:
    0
    Регистрация:
    25 июн 2011
    Сообщения:
    228
    Это же вроде 8080/8085? Я не знаком с ним и некоторые команды - могу только предполагать что они делают. Похоже на какой-то анализ ячеек памяти ~0000...0080 (что там? Вектора прерываний? etc?).

    Ну и так далее. Прыжки на следующую инструкцию без видимой причины (возможно!) индицируют процедуру типа обработчега прерывания (задержка).

    Если вы дадите опейсания всех инструкций - можно попробовать далее.

    PS Немного гулга - дает типа такого:

    http://www.ffd2.com/fridge/io/diskio.s

    Оттуда я вижу что BNE (например) подразумевает валидную метку перехода. У вас же очень много левых меток. Вы уверены что правильно определили процессор?
     
  3. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    PSR1257II
    Код (Text):
    1. $C969:D0 06     BNE $C971        ; Branch? if not zero? to LC971??? (middle of instruction?)
    2. ...
    3. $C96F:D0 03     BNE $C974        ; Branch if not zero to next instruction??
    Это не середина и не следующая инструкция. Обратите внимание на размеры самих инструкций. Вам просто не всё показывают. Например:
    Код (Text):
    1. $C96F:D0 03
    2. $C974:A5 51
    Ну явно же видно, что кто-то зажилил три байта по адресу $C971.
     
  4. FatMoon

    FatMoon New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2002
    Сообщения:
    954
    Адрес:
    Russia
    Это Commodore64.

    jsr - jump saving return address (=call)
    lda - load accumulator with memory (=mov A, [mem])
    bne - branch on result not zero (=jnz short)
    cmp - compare memory and accumulator (= cmp A, [mem])
    bcs - branch on carry set (= jc short)
    beq - branch on result is zero (=jz short)
    rts - return from subroutine (=ret)

    Дизассемблировано неверно. Правильно

    ...
    C967: A5 86 lda [+86] ;относительная адресация: то есть читаем из C9EF
    ...

    А вот опкод C9 - это непосредственное сравнение, cmp A, число. Выпущена часть команд (это результат трассировки, похоже, а не дизассемблирование - того, где не прошли, не видим).

    и никаких предположений о том, что это, сделать нельзя. В целом сводится к тому, что если где-то там нули, то просто ret. А если не нули, то что-то вернуть в аккумуляторе. Но без выпущенных команд даже предполагать не о чем.

    PS: а не, сори. Все правильно, из нулевой страницы. Извиняюсь, все правильно дизассемблировано.

    PPS: а в нулевую страницу (0000-00FF) в коммодорах мапятся порты ввода-вывода, для большей эффективности. Так что это не просто "где-то там нули", а "прочитали нули из каких-то портов"

    PPPS: и команды lda устанавливают флаг ZF, если был загружен 0, или сбрасывают его иначе. То есть никаких задержек тут не предусматривалось, все так, как есть. lda [address] эквивалентно mov A, [address] & cmp A, 0
     
  5. Dmitry_Milk

    Dmitry_Milk Member

    Публикаций:
    0
    Регистрация:
    20 ноя 2007
    Сообщения:
    540
    Дизассемблировали Терминатора? :) Говорят (если не врут), что первый Терминатор работал как раз на проце MOS 6502.
     
  6. Olia

    Olia New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2011
    Сообщения:
    17
    Боюсь что терминатора тогда не было в проекте! =)
    Новый влив. FatMoon довольно четко все поясняет. Можете на примере показать как вы разбираете участок кода?
    Вот это судя по всему независимая процедура. Насколько я понимаю берет из массива данные, расшифровывает их
    и помещает в память на нулевой странице.
    Вот тут инфа есть по командам http://www.obelisk.demon.co.uk/6502/instructions.html

    00:lol: CC5:A5 20 LDA $0020 = #$01
    00:lol: CC7:F0 03 BEQ $DCCC
    00:lol: CC9:4C 5B DD JMP $DD5B
    00:lol: CCC:A5 29 LDA $0029 = #$1B
    00:lol: CCE:29 0F AND #$0F
    00:lol: CD0:lol: 0 E2 BNE $DCB4
    00:lol: CD2:C6 27 DEC $0027 = #$0C
    00:lol: CD4:lol: 0 DE BNE $DCB4
    00:lol: CD6:A4 28 LDY $0028 = #$06
    00:lol: CD8:C8 INY
    00:lol: CD9:B1 5B LDA ($5B),Y @ $DE2E = #$03
    00:lol: CDB:85 5A STA $005A = #$0A
    00:lol: CDD:88 DEY
    00:lol: CDE:E6 28 INC $0028 = #$06
    00:lol: CE0:E6 28 INC $0028 = #$06
    00:lol: CE2:B1 5B LDA ($5B),Y @ $DE2E = #$03
    00:lol: CE4:AA TAX
    00:lol: CE5:29 03 AND #$03
    00:lol: CE7:18 CLC
    00:lol: CE8:69 01 ADC #$01
    00:lol: CEA:85 20 STA $0020 = #$01
    00:lol: CEC:C9 02 CMP #$02
    00:lol: CEE:90 0D BCC $DCFD
    00:lol: CF0:A5 40 LDA $0040 = #$00
    00:lol: CF2:F0 06 BEQ $DCFA
    00:lol: CF4:A5 53 LDA $0053 = #$20
    00:lol: CF6:C9 07 CMP #$07
    00:lol: CF8:90 03 BCC $DCFD
    00:lol: CFA:20 60 C9 JSR $C960
    00:lol: CFD:8A TXA
    00:lol: CFE:4A LSR
    00:lol: CFF:4A LSR
    00:lol: D00:48 PHA
    00:lol: D01:29 03 AND #$03
    00:lol: D03:A8 TAY
    00:lol: D04:68 PLA
    00:lol: D05:4A LSR
    00:lol: D06:4A LSR
    00:lol: D07:29 07 AND #$07
    00:lol: D09:85 38 STA $0038 = #$05
    00:lol: D0B:A5 3F LDA $003F = #$00
    00:lol: D0D:4A LSR
    00:lol: D0E:4A LSR
    00:lol: D0F:4A LSR
    00:lol: D10:18 CLC
    00:lol: D11:65 38 ADC $0038 = #$05
    00:lol: D13:C9 08 CMP #$08
    00:lol: D15:90 02 BCC $DD19
    00:lol: D17:A9 07 LDA #$07
    00:lol: D19:AA TAX
    00:lol: D1A:29 03 AND #$03
    00:lol: D1C:85 26 STA $0026 = #$00
    00:lol: D1E:BD FA DD LDA $DDFA,X @ $DDFF = #$03
    00:lol: D21:85 27 STA $0027 = #$0C
    00:lol: D23:BD 0A DE LDA $DE0A,X @ $DE0F = #$03
    00:lol: D26:18 CLC
    00:lol: D27:65 40 ADC $0040 = #$00
    00:lol: D29:85 2C STA $002C = #$01
    00:lol: D2B:BD 02 DE LDA $DE02,X @ $DE07 = #$02
    00:lol: D2E:85 2A STA $002A = #$03
    00:lol: D30:BD 12 DE LDA $DE12,X @ $DE17 = #$02
    00:lol: D33:85 58 STA $0058 = #$00
    00:lol: D35:B9 22 DE LDA $DE22,Y @ $DE22 = #$01
    00:lol: D38:85 21 STA $0021 = #$30
    00:lol: D3A:85 22 STA $0022 = #$13
    00:lol: D3C:B9 1A DE LDA $DE1A,Y @ $DE1A = #$20
    00:lol: D3F:85 23 STA $0023 = #$38
    00:lol: D41:B9 1E DE LDA $DE1E,Y @ $DE1E = #$20
    00:lol: D44:85 24 STA $0024 = #$00
    00:lol: D46:B9 26 DE LDA $DE26,Y @ $DE26 = #$00
    00:lol: D49:85 56 STA $0056 = #$48
    00:lol: D4B:B9 2A DE LDA $DE2A,Y @ $DE2A = #$00
    00:lol: D4E:85 57 STA $0057 = #$00
    00:lol: D50:A5 28 LDA $0028 = #$06
    00:lol: D52:C9 10 CMP #$10
    00:lol: D54:lol: 0 04 BNE $DD5A
    00:lol: D56:A9 00 LDA #$00
    00:lol: D58:85 28 STA $0028 = #$06
    00:lol: D5A:60 RTS
     
  7. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Olia
    Может все-таки начнете с начала? Так вопросы не задают - вы запутали всех.
    Немного помедитировав стало понятно, что в 1-v посте не дизассемблер, а ТРАССА эмулятора или отладчика. Значит сомнения в правильности команд уже отпадают.
    Именно поэтому тут дырки в адресах и даже ПРЫЖКИ (это объяснение для меня и l_inc )
    Код (Text):
    1. $C982:20 01 C6  JSR $C601                  A:00 X:FF Y:00 S:FD P:nvUbdIZc
    2. $C601:A5 6A     LDA $006A = #$00           A:00 X:FF Y:00 S:FB P:nvUbdIZc
    Чтобы не мудрить с выделением процедур используйте IDA - она вам автоматом процедуры выделит.
    А вообще - JSR это вызов процедуры и конец это команда RTS. Правда этих RTS может быть несколько, тут надо команды перехода смотреть чтобы найти последнюю.
     
  8. Olia

    Olia New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2011
    Сообщения:
    17
    Нужно человеку которые изучает ассемблер(тема в разделе для новичков) пояснить участок кода из #6.
    Нужны комментарии к каждой строчке и в целом "абстрактный вывод" по работе этого участка. Я для себя картину примерно представляю, но
    может она не верна ? Как то так.
     
  9. FatMoon

    FatMoon New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2002
    Сообщения:
    954
    Адрес:
    Russia
    Участок кода из #1 - скорее всего определение нажатой клавиши, исходя из обилия чтений из - предположительно, портов ввода-вывода - и отсутствии записи в них.
    Участок кода из #6 - чего-то посложнее, или звук, или чтение с флоппи (если флоппи есть на коммодорах), так сразу и не понять.

    Не думаю, что изучение процедур такого рода "для новичков". По сути, это "драйвера" 8-битного компьютера. Если есть разметка 0й страницы, какие адреса каким портам и устройствам соответствуют - можно что-то точнее сказать.
     
  10. Olia

    Olia New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2011
    Сообщения:
    17
    Холодно. Там действительно есть порт ввода. Но это 1 байт всего. 10-ый байт чтоли( не суть) . Остальные байты(первые 256) могут быть использованы
    просто как рабочая ячейка памяти. FatMoon, а вы можете дать свой скайп?
     
  11. FatMoon

    FatMoon New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2002
    Сообщения:
    954
    Адрес:
    Russia
    нет, не обзавелся как-то скайпом.

    Где код с DD5B?
    Где код с DCB4?
    Где процедура C960?

    Ну вот этот фрагмент
    Код (Text):
    1. 00:DD09:85 38     STA $0038 = #$05
    2. 00:DD0B:A5 3F     LDA $003F = #$00
    3. 00:DD0D:4A        LSR
    4. 00:DD0E:4A        LSR
    5. 00:DD0F:4A        LSR
    6. 00:DD10:18        CLC
    7. 00:DD11:65 38     ADC $0038 = #$05
    8. 00:DD13:C9 08     CMP #$08
    9. 00:DD15:90 02     BCC $DD19
    10. 00:DD17:A9 07     LDA #$07
    11. 00:DD19:AA        TAX
    Чего-то с восьмеричной системой счисления. Типа (получить следующий разряд восьмиричного числа), (сложить восьмиричные цифры), (если получилось больше 8, значит будет 7 и 1 в переносе). Больше ничего не сказать наверняка :) надо хотя бы знать что в других ветках и что делается в процедуре.
     
  12. Olia

    Olia New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2011
    Сообщения:
    17
    00:lol: CB4:60 RTS // непонятно почему там RTS а скажем не в
    00:lol: D5A:60 RTS // или нам не принципиально где вызвать RTS ?
    имеется ввиду два BNE
    вот тут
    00:lol: CD0:lol: 0 E2 BNE $DCB4
    00:lol: CD2:C6 27 DEC $0027 = #$0C
    00:lol: CD4:lol: 0 DE BNE $DCB4

    00:lol: D5B:C6 22 DEC $0022 = #$25
    00:lol: D5D:lol: 0 FB BNE $DD5A
    00:lol: D5F:A5 21 LDA $0021 = #$50
    00:lol: D61:85 22 STA $0022 = #$25
    00:lol: D63:A0 00 LDY #$00
    00:lol: D65:A2 05 LDX #$05
    00:lol: D67:BD 24 02 LDA $0224,X @ $0229 = #$0D
    00:lol: D6A:F0 01 BEQ $DD6D
    00:lol: D6C:C8 INY
    00:lol: D6D:CA DEX
    00:lol: D6E:10 F7 BPL $DD67
    00:lol: D70:98 TYA
    00:lol: D71:38 SEC
    00:lol: D72:E5 53 SBC $0053 = #$20
    00:lol: D74:85 76 STA $0076 = #$E6
    00:lol: D76:B0 0A BCS $DD82
    00:lol: D78:A2 05 LDX #$05
    00:lol: D7A:BD 24 02 LDA $0224,X @ $0229 = #$0D
    00:lol: D7D:F0 08 BEQ $DD87
    00:lol: D7F:CA DEX
    00:lol: D80:10 F8 BPL $DD7A
    00:lol: D82:A9 01 LDA #$01
    00:lol: D84:85 22 STA $0022 = #$25
    00:lol: D86:60 RTS

    Уже многое прояснилось, просто как Вы успели заметить я в АСМе разбираюсь фактически 3 дня. Опыта ноль.
    Теперь понятно что мы прыгаем дальше по коду вначале и это логическое продолжение процедуры.
    Самое главое что я уже могу манипулировать работой программы "извне".

    В 1 байте шифруется фактически 3 параметра. А этот байт является частью "вшитой таблицы данных".
    Следующий байт кодирует другой параметр целиком...Самое главное что уже понятно за что отвечают эти параметры

    00:C960:A5 2F LDA $002F = #$02
    00:C962:lol: 0 02 BNE $C966
    00:C964:E6 2F INC $002F = #$02
    00:C966:60 RTS
     
  13. FatMoon

    FatMoon New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2002
    Сообщения:
    954
    Адрес:
    Russia
    Берете листок бумаги, благо на бумаге можно писать как угодно и где угодно, и стрелочки рисовать, и вставлять сноски и врезки, и потом переписать все это дело, и рисуете блок-схему, или алгоритм, или как вам хочется. Для ячеек пытаетесь придумать некие имена - предположительно это какие-то счетчики, или флаги (=0 или !=0), но не исключаем, что и порты. Доводите до полной расшифровки и пытаетесь понять что же это такое. В виде некоторого псевдокода, должно быть как-то так (на промежуточном шаге):

    if [20] = 0 then
    ..if ([29] AND #0F)=0 then
    ....[27]=[27]-1
    ....if [27]=0 then
    Код (Text):
    1. 00:DCD6:A4 28     LDY $0028 = #$06
    2. 00:DCD8:C8        INY
    3. 00:DCD9:B1 5B     LDA ($5B),Y @ $DE2E = #$03
    4. 00:DCDB:85 5A     STA $005A = #$0A
    5. 00:DCDD:88        DEY
    6. 00:DCDE:E6 28     INC $0028 = #$06
    7. 00:DCE0:E6 28     INC $0028 = #$06
    8. 00:DCE2:B1 5B     LDA ($5B),Y @ $DE2E = #$03
    9. 00:DCE4:AA        TAX
    10. 00:DCE5:29 03     AND #$03
    11. 00:DCE7:18        CLC
    12. 00:DCE8:69 01     ADC #$01
    13. 00:DCEA:85 20     STA $0020 = #$01
    14. 00:DCEC:C9 02     CMP #$02
    15. 00:DCEE:90 0D     BCC $DCFD
    16. 00:DCF0:A5 40     LDA $0040 = #$00
    17. 00:DCF2:F0 06     BEQ $DCFA
    18. 00:DCF4:A5 53     LDA $0053 = #$20
    19. 00:DCF6:C9 07     CMP #$07
    20. 00:DCF8:90 03     BCC $DCFD
    21. 00:DCFA:20 60 C9  JSR $C960
    22. 00:DCFD:8A        TXA
    23. 00:DCFE:4A        LSR
    24. 00:DCFF:4A        LSR
    25. 00:DD00:48        PHA
    26. 00:DD01:29 03     AND #$03
    27. 00:DD03:A8        TAY
    28. 00:DD04:68        PLA
    29. 00:DD05:4A        LSR
    30. 00:DD06:4A        LSR
    31. 00:DD07:29 07     AND #$07
    32. 00:DD09:85 38     STA $0038 = #$05
    33. 00:DD0B:A5 3F     LDA $003F = #$00
    34. 00:DD0D:4A        LSR
    35. 00:DD0E:4A        LSR
    36. 00:DD0F:4A        LSR
    37. 00:DD10:18        CLC
    38. 00:DD11:65 38     ADC $0038 = #$05
    39. 00:DD13:C9 08     CMP #$08
    40. 00:DD15:90 02     BCC $DD19
    41. 00:DD17:A9 07     LDA #$07
    42. 00:DD19:AA        TAX
    43. 00:DD1A:29 03     AND #$03
    44. 00:DD1C:85 26     STA $0026 = #$00
    45. 00:DD1E:BD FA DD  LDA $DDFA,X @ $DDFF = #$03
    46. 00:DD21:85 27     STA $0027 = #$0C
    47. 00:DD23:BD 0A DE  LDA $DE0A,X @ $DE0F = #$03
    48. 00:DD26:18        CLC
    49. 00:DD27:65 40     ADC $0040 = #$00
    50. 00:DD29:85 2C     STA $002C = #$01
    51. 00:DD2B:BD 02 DE  LDA $DE02,X @ $DE07 = #$02
    52. 00:DD2E:85 2A     STA $002A = #$03
    53. 00:DD30:BD 12 DE  LDA $DE12,X @ $DE17 = #$02
    54. 00:DD33:85 58     STA $0058 = #$00
    55. 00:DD35:B9 22 DE  LDA $DE22,Y @ $DE22 = #$01
    56. 00:DD38:85 21     STA $0021 = #$30
    57. 00:DD3A:85 22     STA $0022 = #$13
    58. 00:DD3C:B9 1A DE  LDA $DE1A,Y @ $DE1A = #$20
    59. 00:DD3F:85 23     STA $0023 = #$38
    60. 00:DD41:B9 1E DE  LDA $DE1E,Y @ $DE1E = #$20
    61. 00:DD44:85 24     STA $0024 = #$00
    62. 00:DD46:B9 26 DE  LDA $DE26,Y @ $DE26 = #$00
    63. 00:DD49:85 56     STA $0056 = #$48
    64. 00:DD4B:B9 2A DE  LDA $DE2A,Y @ $DE2A = #$00
    65. 00:DD4E:85 57     STA $0057 = #$00
    ......if [28]=10 then [28]=0
    ....end if
    ..end if
    else (ветка DD5B)
    ..[22]=[22]-1
    ..if [22]=0 then
    ....[22]=[21]
    ....Y=количество ненулевых байт в массиве 224..229
    ....[76]=Y-[53]-1
    ....if (массив 224..229 не содержит нулей) then [22]=1, и конец процедуры.
    ....if (Y-1)>=[53] then
    ......X=индекс первого нулевого байта в массиве 224..229 и пошли на DD87 (что там не знаю, код отсутствует)
    ....end if
    ..end if
    end if
    конец процедуры

    извиняюсь за стиль и недоделанность )) но в идеале выразить надо словами как-то так. Если нужно понимание как работает.
     
  14. Olia

    Olia New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2011
    Сообщения:
    17
    Какой смысл прыгать(из процедуры) в RTS за пределами процедуры?
     
  15. FatMoon

    FatMoon New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2002
    Сообщения:
    954
    Адрес:
    Russia
    потому что BNE использует не адрес, а однобайтовое смещение. То есть переход возможен на +127 или -128 байт от следующей за BNE команды.

    DD5A-DCD2 = 136. Прыгнуть сюда по относительному байтовому смещению нельзя, не достаем. А на DCB4 запросто (-30 байт). Где именно выполнится RTS, совершенно непринципиально.
     
  16. Olia

    Olia New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2011
    Сообщения:
    17
    Спасибо, это понятно.

    Вот еще загадочный участок.
    00:lol: BF1:AD 33 02 LDA $0233
    00:lol: BF4:4D 34 02 EOR $0234
    00:lol: BF7:4D 35 02 EOR $0235
    00:lol: BFA:45 1E EOR $001E
    00:lol: BFC:45 29 EOR $0029
    00:lol: BFE:29 03 AND #$03
    00:lol: C00:lol: 0 02 BNE $DC04
    Предположим, что существую некоторые объекты с координатами (Xn,Yn) . А по всем адресам $0233 $0234 $0235 $001E $0029 Yn - координата этих объектов( от 0 до 255) .
    Вопрос. В регистре А в результате что будет?? Какая логическая ассоциация ? Мозг не осиливает столько EOR-офф. Пфф....

    далее идет такой код
    00:lol: C02:A9 01 LDA #$01
    00:lol: C04:85 38 STA $0038
    00:lol: C06:0A ASL
    00:lol: C07:0A ASL
    00:lol: C08:65 38 ADC $0038
    00:lol: C0A:0A ASL
    00:lol: C0B:0A ASL
    00:lol: C0C:0A ASL
    00:lol: C0D:18 CLC
    00:lol: C0E:69 1B ADC #$1B
    00:lol: C10:9D A5 02 STA $02A5,X
     
  17. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Элементарно: после AND #$03 там будет XOR/EOR 2-х младших разрядов из всех этих ячеек. Никто за вас не будет две элементарные операции изучать
    Следующий кусок сдвигает эти 2 бита на 2 бита влево( содержимое 3, 2 или 1), предварительно сохранив в ячейку, потом восстанавливает/добавляет их(ADC) потом еще сдвиг на 3 и и плюсует $1B Что-то типа 8*(5*bits+3)+3

    Такие вещи надо смотреть на эмуляторе с отладчиком, но естественно на реальных данных. Или на отладочной плате с реальным процом и реальными данными.
    А в уме - да муторно, но когда-то без проблем народ все это делал без эмуляторов. По времени долго по началу.
     
  18. Olia

    Olia New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2011
    Сообщения:
    17
    Элементарно! Но, вопрос звучал иначе. Что это за прием такой взять стопятсот XOR от группы переменных?
    Для наглядности представим что это все переменные 1-о байтовые Y-координаты объектов.
    Есть идеи на этот счет? Нужно представить логическую связь в уме.
    Чего хотел добиться программист когда делал такую связку XOR над группой переменных?
     
  19. Dmitry_Milk

    Dmitry_Milk Member

    Публикаций:
    0
    Регистрация:
    20 ноя 2007
    Сообщения:
    540
    мож такая разновидность контрольной суммы, типа контроля четности.

    Откуда вообще данные? Что за машина? откуда знаете, что в младших адресах именно RAM, а не отображение внешних девайсов? Почему трасса, а не просто дамп/дизасм исполняемого кода?
     
  20. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Не надо выдумывать. Это явно не Y-координаты. Больше похоже на флаги, но тогда непонятна дальнейшая арифметика.
    Для ответа на этот вопрос надо отреверсить хотя бы 20-30% всего кода. Либо "плясать" от понятных вещей - например какие-то показания выводятся на индикатор, значит перед этим он вычисляется или хотя будем знать ячейку, где значения и поискать проги, которы с этой ячейкой работают. Где-то ТАК