| Разработка и ромхакинг > Ромхакинг и программирование |
| Ищу информацию и уроки |
| (1/1) |
| Cyb3rM4n:
Люди, поделитесь, пожалуйста, информацией и уроками по программированию под SNES. |
| gegmopo3:
http://en.wikibooks.org/wiki/Super_NES_Programming Вот я по этому раньше разбирал, остальное головой додумывать, и все будет ок=) |
| Ti_:
Есть кусок код с Снеса и есть Сеги, надо глянуть отличие есть тут или нет, кто знает: --- Код: ---$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:
Так кто нет, только в СНЕС еще есть "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_:
--- Цитата: gegmopo3 от 16 Май 2011, 05:40:00 ---Так кто нет, только в СНЕС еще есть "car_posby_Ztmp" Где ROL $0BC3 происходило тоже 5 раз. --- Конец цитаты --- $4e96 = $0BC3 $4e97 = $0BC4 $4e98 = $0BC5 $4e99 = $0BC6 ; так на Снес bc3/bc4 нужны как память для доп расчета, снес не может сделать asl.W ? ; на Сеге они не используются потом. |
| gegmopo3:
REP #$30 ;acc - 16 bit ASL $0BC3 - будет тебе сдвиг 16-битный. Мог бы кусок побольше скинуть, а то я не вижу, какой флаг у процессора 8 или 16 бит. Тогда так-то нет различий. |
| Ti_:
--- Цитата: gegmopo3 от 16 Май 2011, 13:03:30 ---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:
--- Код: ---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_:
--- Цитата ---Насчет "ext.w", что оно выполняет? Я просто сеговский асм как-то не очень знаю. --- Конец цитаты --- перевод из byte в word с учетом знака +-. |
| gegmopo3:
$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 =) |
| GManiac:
Только щас глянул код. Ужас. 5 строчек там и 17 строчек там (не считая RTS). Это при том, что на СНЕСЕ делали более сложные игры (как мне кажется). |
| Ti_:
--- Цитата: GManiac от 16 Май 2011, 17:43:27 ---Только щас глянул код. Ужас. 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:
А с этим кодом что надо? |
| GManiac:
1. Умножение Y = X * Y? 2. Так и не догнал. Если посмотреть на два JSR, то выходит, что там делается два сдвига вправо, и если после очередного сдвига получилось меньше $40 (или наоборот, вечно путаюсь в Bxx-сравнениях), прибавляется $80. А, стоп. Если прибавление делается в случае, когда A > $40, то это уже похоже на арифметический сдвиг (с сохранением знака). |
| Ti_:
--- Цитата: gegmopo3 от 17 Май 2011, 08:07:45 ---А с этим кодом что надо? --- Конец цитаты --- Нет, спасибо ничего. Для уроков полезно будет) --- Цитата: GManiac от 17 Май 2011, 10:03:21 ---1. Умножение Y = X * Y? 2. Так и не догнал.А, стоп. Если прибавление делается в случае, когда A > $40, то это уже похоже на арифметический сдвиг (с сохранением знака). --- Конец цитаты --- 1. да. :) 2. да, asr.w #2 |
| gegmopo3:
--- Цитата: GManiac ---1. Умножение Y = X * Y? --- Конец цитаты --- Можно еще --- Код: --- tya sta $4202 ;множимое txa sta $4203 ; множитель lda $2134 ; результат tay --- Конец кода --- |
| GManiac:
Эмм, а где там умножение? Это какие-то особые адреса? :) |
| gegmopo3:
Регистр $4202 умножается на регистр $4203, как бы фича процессора, которую выполняют эти регистры. Результат выводится с помощью регистра $2134. :) Блин,я в пьяном угаре даже обманул тебя) --- Код: --- sty $4202 ;множимое stx $4203 ; множитель ldy $2134 ; результат --- Конец кода --- |
| Навигация |
| Главная страница сообщений |