Автор Тема: Ищу информацию и уроки  (Прочитано 4596 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Cyb3rM4n

  • Пользователь
  • Сообщений: 755
  • Пол: Мужской
  • Админ с /1cc/
    • ВКонтакте
    • Просмотр профиля
Ищу информацию и уроки
« : 13 Март 2011, 17:50:01 »
Люди, поделитесь, пожалуйста, информацией и уроками по программированию под SNES.

Оффлайн gegmopo3

  • Пользователь
  • Сообщений: 196
  • Пол: Мужской
  • sk8
    • Просмотр профиля
Re: Ищу информацию и уроки
« Ответ #1 : 13 Март 2011, 19:01:44 »
http://en.wikibooks.org/wiki/Super_NES_Programming

Вот я по этому раньше разбирал, остальное головой додумывать, и все будет ок=)

Оффлайн Ti_

  • Пользователь
  • Сообщений: 3265
  • Пол: Мужской
    • ВКонтакте
    • Youtube
    • Просмотр профиля
Re: Ищу информацию и уроки
« Ответ #2 : 15 Май 2011, 16:44:00 »
Есть кусок код с Снеса и есть Сеги, надо глянуть отличие есть тут или нет, кто знает:

$80/9B0F A9 FF       LDA #$FF                A:1D18 X:0001 Y:0000 P:envMXdizc
$80/9B11 8D C6 0B    STA $0BC6  [$80:0BC6]   A:1D18 X:0001 Y:0000 P:envMXdizc ; move.b  #$FF,car_posby_Ztmp+1-mm(a4)

.....

$80/9B46 20 53 9D    JSR $9D53  [$80:9D53]   A:1D18 X:0001 Y:0000 P:envMXdizc  ; bsr.w   jumping_phys_sub2

.....



$80/9D53 9C C3 0B    STZ $0BC3  [$80:0BC3]   A:1D1C X:0002 Y:0000 P:envMXdizC
$80/9D56 AD BB 0B    LDA $0BBB  [$80:0BBB]   A:1D1C X:0002 Y:0000 P:envMXdizC   car_updown_tm2
$80/9D59 8D C4 0B    STA $0BC4  [$80:0BC4]   A:1D1C X:0002 Y:0000 P:envMXdizC
$80/9D5C 10 03       BPL $03    [$9D61]      A:1D1C X:0002 Y:0000 P:envMXdizC
$80/9D5E CE C3 0B    DEC $0BC3  [$80:0BC3]   A:1D1C X:0002 Y:0000 P:envMXdizC
$80/9D61 A0 05       LDY #$05                A:1D1C X:0002 Y:0000 P:envMXdizC
$80/9D63 0E C4 0B    ASL $0BC4  [$80:0BC4]   A:1D1C X:0002 Y:0000 P:envMXdizC
$80/9D66 2E C3 0B    ROL $0BC3  [$80:0BC3]   A:1D1C X:0002 Y:0000 P:envMXdizC
$80/9D69 88          DEY                     A:1D1C X:0002 Y:0000 P:envMXdizC
$80/9D6A D0 F7       BNE $F7    [$9D63]      A:1D1C X:0002 Y:0000 P:envMXdizC
$80/9D6C AD C6 0B    LDA $0BC6  [$80:0BC6]   A:1D1C X:0002 Y:0000 P:envMXdizC car_posby_Ztmp+1
$80/9D6F 18          CLC                     A:1D1C X:0002 Y:0000 P:envMXdizC
$80/9D70 6D C4 0B    ADC $0BC4  [$80:0BC4]   A:1D1C X:0002 Y:0000 P:envMXdizC
$80/9D73 8D C6 0B    STA $0BC6  [$80:0BC6]   A:1D1C X:0002 Y:0000 P:envMXdizC   car_posby_Ztmp+1
$80/9D76 AD C5 0B    LDA $0BC5  [$80:0BC5]   A:1D1C X:0002 Y:0000 P:envMXdizC
$80/9D79 6D C3 0B    ADC $0BC3  [$80:0BC3]   A:1D1C X:0002 Y:0000 P:envMXdizC
$80/9D7C 8D C5 0B    STA $0BC5  [$80:0BC5]   A:1D1C X:0002 Y:0000 P:envMXdizC car_posby_Ztmp
$80/9D7F 60          RTS                     A:1D1C X:0002 Y:0000 P:envMXdizC





ROM:0000DB52 jumping_phys_sub2:                      ; CODE XREF: JUMPING_PHYS+94p
ROM:0000DB52                 move.b  car_updown_tm2-mm(a4),d0 ;       $4e8e(a4)
ROM:0000DB56                 ext.w   d0
ROM:0000DB58                 asl.w   #5,d0 ; * 32
ROM:0000DB5A                 move.w  d0,car_posbyZ_nu-mm(a4) ;        $4e96(a4) (not used)
ROM:0000DB5E                 add.w   d0,car_posby_Ztmp-mm(a4) ;       $4e98(a4) byte
ROM:0000DB62                 rts                                  ;   $4e99(a4)=car_posby_Ztmp+1

Оффлайн gegmopo3

  • Пользователь
  • Сообщений: 196
  • Пол: Мужской
  • sk8
    • Просмотр профиля
Re: Ищу информацию и уроки
« Ответ #3 : 16 Май 2011, 05:40:00 »
Так кто нет, только в СНЕС еще есть "car_posby_Ztmp"

$80/9D76 AD C5 0B    LDA $0BC5  [$80:0BC5]
$80/9D79 6D C3 0B    ADC $0BC3  [$80:0BC3]
$80/9D7C 8D C5 0B    STA $0BC5  [$80:0BC5]

Где ROL $0BC3 происходило тоже 5 раз.

Оффлайн Ti_

  • Пользователь
  • Сообщений: 3265
  • Пол: Мужской
    • ВКонтакте
    • Youtube
    • Просмотр профиля
Re: Ищу информацию и уроки
« Ответ #4 : 16 Май 2011, 11:49:48 »
Так кто нет, только в СНЕС еще есть "car_posby_Ztmp"
Где ROL $0BC3 происходило тоже 5 раз.
$4e96 = $0BC3
$4e97 = $0BC4
$4e98 = $0BC5
$4e99 = $0BC6
; так на Снес bc3/bc4 нужны как память для доп расчета, снес не может сделать asl.W  ?   ; на Сеге они не используются потом.

Оффлайн gegmopo3

  • Пользователь
  • Сообщений: 196
  • Пол: Мужской
  • sk8
    • Просмотр профиля
Re: Ищу информацию и уроки
« Ответ #5 : 16 Май 2011, 13:03:30 »
REP #$30 ;acc - 16 bit
ASL $0BC3 - будет тебе сдвиг 16-битный.
Мог бы кусок побольше скинуть, а то я не вижу, какой флаг у процессора 8 или 16 бит.

Тогда так-то нет различий.

Оффлайн Ti_

  • Пользователь
  • Сообщений: 3265
  • Пол: Мужской
    • ВКонтакте
    • Youtube
    • Просмотр профиля
Re: Ищу информацию и уроки
« Ответ #6 : 16 Май 2011, 13:41:53 »
REP #$30 ;acc - 16 bit
ASL $0BC3 - будет тебе сдвиг 16-битный.
Спасибо, может так и сделать тогда на Снес,  а потом обратно надо в 8? И ext.w как сделать.
И там уже видно будет есть или нет.-
то есть эта строчка на smd роли не играет : move.w  d0,car_posbyZ_nu-mm(a4) ;        $4e96(a4) (not used), и на снес туда не записывать.

Оффлайн gegmopo3

  • Пользователь
  • Сообщений: 196
  • Пол: Мужской
  • sk8
    • Просмотр профиля
Re: Ищу информацию и уроки
« Ответ #7 : 16 Май 2011, 14:25:48 »

org $809D56
  LDA $0BBB 
  STA $0BC4
  BPL positive

  DEC $0BC3 
positive:
  rep #$20 ; (  чтобы Y и Х был 8-бит, а ACC - 16-бит)
  LDY #$05
cycle:
  ASL $0BC3 
  DEY                 
  BNE cycle

  LDA $0BC5 
  CLC             
  ADC $0BC3 
  STA $0BC5
  SEP #$30 ;(Асс, X, Y 8-бит)
  RTS               
     
Насчет "ext.w", что оно выполняет? Я просто сеговский асм как-то не очень знаю.

Оффлайн Ti_

  • Пользователь
  • Сообщений: 3265
  • Пол: Мужской
    • ВКонтакте
    • Youtube
    • Просмотр профиля
Re: Ищу информацию и уроки
« Ответ #8 : 16 Май 2011, 16:10:16 »
Цитата
Насчет "ext.w", что оно выполняет? Я просто сеговский асм как-то не очень знаю.
перевод из byte в word с учетом знака +-.

Оффлайн gegmopo3

  • Пользователь
  • Сообщений: 196
  • Пол: Мужской
  • sk8
    • Просмотр профиля
Re: Ищу информацию и уроки
« Ответ #9 : 16 Май 2011, 16:30:55 »
$80/9D53 9C C3 0B    STZ $0BC3  обнуляем $bc3
                              LDA $0BBB
$80/9D59 8D C4 0B    STA $0BC4  [$80:0BC4]   A:1D1C X:0002 Y:0000 P:envMXdizC
$80/9D5C 10 03       BPL $03    [$9D61]    
( т.к. у нас 8-бит идет, если $BC4<=$7F, то прыгаем по адресу [$9D61], если нет, то будет $BC3=$FF, то есть word будет отрицательным)
DEC $0BC3

Это тот же самый ext.w =)
« Последнее редактирование: 16 Май 2011, 17:22:48 от gegmopo3 »

Оффлайн GManiac

  • Пользователь
  • Сообщений: 1284
    • Просмотр профиля
Re: Ищу информацию и уроки
« Ответ #10 : 16 Май 2011, 17:43:27 »
Только щас глянул код. Ужас. 5 строчек там и 17 строчек там (не считая RTS). Это при том, что на СНЕСЕ делали более сложные игры (как мне кажется).

Оффлайн Ti_

  • Пользователь
  • Сообщений: 3265
  • Пол: Мужской
    • ВКонтакте
    • Youtube
    • Просмотр профиля
Re: Ищу информацию и уроки
« Ответ #11 : 16 Май 2011, 23:12:45 »
Только щас глянул код. Ужас. 5 строчек там и 17 строчек там (не считая RTS). Это при том, что на СНЕСЕ делали более сложные игры (как мне кажется).
хах)) это не первое что я увидел, есть еще такое: (угадайте что это, на сеге 1строчка)
$80/9DC8 8E BC 0B    STX $0BBC  [$80:0BBC]   A:1E00 X:00EE Y:0000 P:envMXdiZc
$80/9DCB 8E BF 0B    STX $0BBF  [$80:0BBF]   A:1E00 X:00EE Y:0000 P:envMXdiZc
$80/9DCE 8C BD 0B    STY $0BBD  [$80:0BBD]   A:1E00 X:00EE Y:0000 P:envMXdiZc
$80/9DD1 A9 00       LDA #$00                A:1E00 X:00EE Y:0000 P:envMXdiZc
$80/9DD3 A2 08       LDX #$08                A:1E00 X:00EE Y:0000 P:envMXdiZc
$80/9DD5 0A          ASL A                   A:1E00 X:00EE Y:0000 P:envMXdiZc
$80/9DD6 0E BF 0B    ASL $0BBF  [$80:0BBF]   A:1E00 X:00EE Y:0000 P:envMXdiZc
$80/9DD9 90 04       BCC $04    [$9DDF]      A:1E00 X:00EE Y:0000 P:envMXdiZc
$80/9DDB 18          CLC                     A:1E00 X:00EE Y:0000 P:envMXdiZc
$80/9DDC 6D BD 0B    ADC $0BBD  [$80:0BBD]   A:1E00 X:00EE Y:0000 P:envMXdiZc
$80/9DDF CA          DEX                     A:1E00 X:00EE Y:0000 P:envMXdiZc
$80/9DE0 D0 F3       BNE $F3    [$9DD5]      A:1E00 X:00EE Y:0000 P:envMXdiZc
$80/9DE2 AE BC 0B    LDX $0BBC  [$80:0BBC]   A:1E00 X:00EE Y:0000 P:envMXdiZc
$80/9DE5 AC BD 0B    LDY $0BBD  [$80:0BBD]   A:1E00 X:00EE Y:0000 P:envMXdiZc
$80/9DE8 60          RTS                     A:1E00 X:00EE Y:0000 P:envMXdiZc

Вот еще чуть попроще:


$80/9D24 20 4B 9D    JSR $9D4B  [$80:9D4B]   A:1E00 X:00EE Y:0000 P:envMXdiZc
$80/9D27 20 4B 9D    JSR $9D4B  [$80:9D4B]   A:1E00 X:00EE Y:0000 P:envMXdiZc


$80/9D4B 4A          LSR A                   A:1E00 X:00EE Y:0000 P:envMXdiZc
$80/9D4C C9 40       CMP #$40                A:1E00 X:00EE Y:0000 P:envMXdiZc
$80/9D4E 90 02       BCC $02    [$9D52]      A:1E00 X:00EE Y:0000 P:envMXdiZc
$80/9D50 49 80       EOR #$80                A:1E00 X:00EE Y:0000 P:envMXdiZc
$80/9D52 60          RTS                     A:1E00 X:00EE Y:0000 P:envMXdiZc

Оффлайн gegmopo3

  • Пользователь
  • Сообщений: 196
  • Пол: Мужской
  • sk8
    • Просмотр профиля
Re: Ищу информацию и уроки
« Ответ #12 : 17 Май 2011, 08:07:45 »
А с этим кодом что надо?

Оффлайн GManiac

  • Пользователь
  • Сообщений: 1284
    • Просмотр профиля
Re: Ищу информацию и уроки
« Ответ #13 : 17 Май 2011, 10:03:21 »
1. Умножение Y = X * Y?
2. Так и не догнал. Если посмотреть на два JSR, то выходит, что там делается два сдвига вправо, и если после очередного сдвига получилось меньше $40 (или наоборот, вечно путаюсь в Bxx-сравнениях), прибавляется $80.
А, стоп. Если прибавление делается в случае, когда A > $40, то это уже похоже на арифметический сдвиг (с сохранением знака).

Оффлайн Ti_

  • Пользователь
  • Сообщений: 3265
  • Пол: Мужской
    • ВКонтакте
    • Youtube
    • Просмотр профиля
Re: Ищу информацию и уроки
« Ответ #14 : 17 Май 2011, 11:48:36 »
А с этим кодом что надо?
Нет, спасибо ничего.  Для уроков полезно будет)
1. Умножение Y = X * Y?
2. Так и не догнал.А, стоп. Если прибавление делается в случае, когда A > $40, то это уже похоже на арифметический сдвиг (с сохранением знака).
1. да. :)
2. да, asr.w #2

Оффлайн gegmopo3

  • Пользователь
  • Сообщений: 196
  • Пол: Мужской
  • sk8
    • Просмотр профиля
Re: Ищу информацию и уроки
« Ответ #15 : 17 Май 2011, 18:22:48 »
Цитата: GManiac
1. Умножение Y = X * Y?
Можно еще
  tya
  sta $4202 ;множимое
  txa
  sta $4203 ; множитель
  lda $2134 ; результат
  tay

Оффлайн GManiac

  • Пользователь
  • Сообщений: 1284
    • Просмотр профиля
Re: Ищу информацию и уроки
« Ответ #16 : 17 Май 2011, 21:18:24 »
Эмм, а где там умножение? Это какие-то особые адреса? :)

Оффлайн gegmopo3

  • Пользователь
  • Сообщений: 196
  • Пол: Мужской
  • sk8
    • Просмотр профиля
Re: Ищу информацию и уроки
« Ответ #17 : 17 Май 2011, 21:58:37 »
Регистр $4202 умножается на регистр $4203, как бы фича процессора, которую выполняют эти регистры.
Результат выводится с помощью регистра $2134.  :)

Блин,я в пьяном угаре даже обманул тебя)

  sty $4202 ;множимое
  stx $4203 ; множитель
  ldy $2134 ; результат
 
« Последнее редактирование: 18 Май 2011, 00:54:03 от gegmopo3 »