Разработка и ромхакинг > Ромхакинг
Ищу информацию и уроки
(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 ; результат
--- Конец кода ---
Навигация
Перейти к полной версии