Allgemeine Hex- und ASM-Fragen

geschrieben am 02.09.2012 18:58:30
( Link )
Und wie verändere ich demnach den RAM?
geschrieben am 02.09.2012 19:33:57
( Link )
Genau dafür musst du ASM lernen!
-Das quadratische Rad neu erfinden-
Mit das quadratische Rad neu erfinden (englisch Reinventing the square wheel) bezeichnet man die Bereitstellung einer schlechten Lösung, wenn eine gute Lösung bereits existiert.

-Slowsort-
Slowsort (von engl. slow: langsam) ist ein langsamer, rekursiver Sortieralgorithmus, der nach dem Prinzip Vervielfache und kapituliere (engl. Multiply and surrender, eine Parodie auf Teile und herrsche) arbeitet.

geschrieben am 02.09.2012 19:39:28
( Link )
Hab ich ja auch vor.
Um die Frage anders zu stellen:
Hat man denn ebenfalls freie Adressen im RAM?
Ich mein, laut der RAM Map ist doch schon alles besetzt oder sehe ich das falsch?
geschrieben am 02.09.2012 19:46:02
( Link )
Wenn du die RAM Map genauer durchsuchst, findest du auch viele Adressen mit dem Eintrag "Empty", also RAM-Adressen, die im Spiel nicht benutzt werden. Die kannst du natürlich so verwenden, wie du willst.
-Das quadratische Rad neu erfinden-
Mit das quadratische Rad neu erfinden (englisch Reinventing the square wheel) bezeichnet man die Bereitstellung einer schlechten Lösung, wenn eine gute Lösung bereits existiert.

-Slowsort-
Slowsort (von engl. slow: langsam) ist ein langsamer, rekursiver Sortieralgorithmus, der nach dem Prinzip Vervielfache und kapituliere (engl. Multiply and surrender, eine Parodie auf Teile und herrsche) arbeitet.

geschrieben am 02.09.2012 19:48:01
( Link )
wär aber natürlich besser wenn ich ganz einfach freie Adressen hinzufüge, oder geht das nicht? :O
(ich komm mir gerade vor wie der größte N00b )
geschrieben am 02.09.2012 19:59:20
( Link )
RAM ist RAM, größer wird der nicht (mal abgesehen von SRAM). Hinzufügen kannst du da nichts, aber es sind so viele Adressen unbenutzt, die gehen dir so schnell nicht aus.
geschrieben am 02.09.2012 20:01:19
( Link )
Zitat von Wischmop:
wär aber natürlich besser wenn ich ganz einfach freie Adressen hinzufüge, oder geht das nicht? :O


Nein, geht nicht. Das SNES hat 128 kb RAM und mit denen musst du auskommen. Naja, es wäre vielleicht höchstens noch möglich, zusätzlichen RAM in eine Cartridge einzubauen, aber ich glaube, dass sowas noch nie gemacht wurde und weiß auch nicht, ob das einwandfrei funktionieren würde. Da das letztendlich auch von keinen Emulatoren unterstützt wird (einfach weil es sowas noch nicht gibt) sind die 128 kb (+ evtl noch der SRAM auf der Cartridge, was, glaube ich, bis zu 64 kb sein können) wirklich alles, womit du arbeiten kannst.
-Das quadratische Rad neu erfinden-
Mit das quadratische Rad neu erfinden (englisch Reinventing the square wheel) bezeichnet man die Bereitstellung einer schlechten Lösung, wenn eine gute Lösung bereits existiert.

-Slowsort-
Slowsort (von engl. slow: langsam) ist ein langsamer, rekursiver Sortieralgorithmus, der nach dem Prinzip Vervielfache und kapituliere (engl. Multiply and surrender, eine Parodie auf Teile und herrsche) arbeitet.

geschrieben am 02.09.2012 20:04:47
( Link )
Okay.
Dann werd ich mal anfangen... D:
geeignete Adressen sind jetzt ausgesucht
geschrieben am 03.09.2012 9:28:11
( Link )
Sorry für Doppelpost...
Aber, um ASM (bzw. das was ich vorhabe) zu verwenden muss ich ebenfalls die ROM verändern.
Ich hab vor dass HP und MP am Spielstart (Also beim Klick auf einen leeren Speicherslot) initialisiert werden.
Hab mir also folgendes in der ROM Map rausgesucht:
Zitat
02035 $00:9E35 2 bytes ASM Set powerups at game start. ($19 = #$00, small Mario.)

Wäre es also möglich, hier eine Subroutine reinzuhauen die dann die Werte initialisiert?
Hab hier ein Dokument das heißt "Hex2ASM", kann ich das verwenden um da ne Subroutine reinzuhauen?
Oder denk ich mal wieder viel zu kompliziert? ^^"

€dit: In den meisten Tutorials ist immer von Blöcken die Rede, ich will aber keine Blöcke einfügen.
Und das Grundprinzip von ASM hab ich mittlerweile verstanden...
geschrieben am 03.09.2012 11:00:41
( Link )
Was du brauchst sind Asar oder xkas (empfehle ersteres). Das verwandelt ASM ind HEX-Code und fügt ihn in die ROM ein. Außerdem solltest du ein Routine Hijacking Tutorial (oder wie auch immer das heißt) lesen. Ich ahne nämlich fürchterliches!
-Das quadratische Rad neu erfinden-
Mit das quadratische Rad neu erfinden (englisch Reinventing the square wheel) bezeichnet man die Bereitstellung einer schlechten Lösung, wenn eine gute Lösung bereits existiert.

-Slowsort-
Slowsort (von engl. slow: langsam) ist ein langsamer, rekursiver Sortieralgorithmus, der nach dem Prinzip Vervielfache und kapituliere (engl. Multiply and surrender, eine Parodie auf Teile und herrsche) arbeitet.

geschrieben am 04.09.2012 13:06:01
( Link )
Sooo, ich hab mich mal dran versucht...
Code
header
lorom
;-----------------------------------------------------------------------
org $009E35 ;Routine for Powerups at Gamestart
JSL Initialization ;
NOP #1;
org $235010 ;Freespace


;-----------------------------------------------------------------------
Initialization: ;Routine which gives HP and MP Start Values
LDA $#50 ;\Current HP
STA $7E0F42 ;/
LDA $#50 ;\Maximum HP
STA $7E0F3A ;/
LDA $#10 ;\Current MP
STA $7E0DA1 ;/
LDA $#10 ;\Maximum MP
STA $7E0D9C ;/
RTL
;------------------------------------------------------------------------

Und im Routine Hacking Tut steht folgendes:
Zitat
Before writing our custom code, we need to restore that overwritten code. If we don't put it back, then that code won't be executed! That means the coins won't be stored to the status bar! Always put the hacked code into your routine!

The code I need to put back is STA $0F14 and STX $0F13, so I'll put it at the beginning of the routine:

org $008F7E
JSL CustomCode
NOP #2 ; <- 2 NOPs -> Get rid of extra bytes
org $168000 ; Any free space area in the ROM
CustomCode: ; <- New routine
STA $0F14 ;/ Put hacked code back.
STX $0F13 ;\

In der all.log steht aber sowas:

Code
CODE_009E35:        64 19         STZ RAM_MarioPowerUp      
CODE_009E37: 9C C2 0D STZ.W $0DC2


Das verwirrt mich gerade am meisten.
(Das Spiel stürzt an der richtigen Stelle, also beim Klicken auf 1 Player Game, ab.)

Bitte sagt mir mal ob das jetzt ein Komplett Fail ist oder ob da was richtiges bei ist...
geschrieben am 04.09.2012 13:57:14
( Link )
Dass sich der Code überhaupt einfügen lässt, verwirrt mich gerade. Die Schreibweise ist nämlich falsch - #$50 und so weiter sollte es heißen, nicht $#50.

Was genau irritiert dich am Code-Überschreiben? Du hast mit deinem Hijack den Code "STZ $19 STZ $0DC2" überschrieben, also musst du den in deiner neuen Routine an einer passenden Stelle unterberingen, damit er überhaupt ausgeführt wird. Falls du dich am "RAM_MarioPowerup" störst: das ist nur der Name, den all.log für $19 benutzt, mehr hat das nicht zu sagen.
geschrieben am 04.09.2012 14:13:01
( Link )
Oh, hab da wohl was verwechselt...
Also muss ich lediglich
Code
STZ $19 
STZ $0DC2

einfügen?
Dann sähe das ganze so aus:
Zitat
header
lorom
;-----------------------------------------------------------------------
org $009E35 ;Routine for Powerups at Gamestart
JSL Initialization ;
NOP #1;
org $235010 ;Freespace


;-----------------------------------------------------------------------
Initialization: ;Replace with Routine which gives HP and MP Start Values
STZ $19 ;\Restore Hacked Bytes
STZ $0DC2 ;/
LDA #50 ;\Current HP
STA $7E0F42 ;/
LDA #50 ;\Maximum HP
STA $7E0F3A ;/
LDA #10 ;\Current MP
STA $7E0DA1 ;/
LDA #10 ;\Maximum MP
STA $7E0D9C ;/

RTL
;------------------------------------------------------------------------
geschrieben am 04.09.2012 14:56:34
( Link )
Ja, das sieht besser aus.

Hey, warte mal... $235010? Das ist keine ROM-Adresse, die gehen nämlich immer von $xx8000 bis $xxFFFF. Daran wird der Crash wohl gelegen haben.
(Übrigens, das NOP #1 kannst du einfach durch ein NOP ersetzen. Bezweifle aber, dass das was ausmacht.)
geschrieben am 04.09.2012 15:28:24
( Link )
Und es funktioniert tatsächlich.

Vielen Dank für eure Hilfe
Jetz weiß ich wie ich Werte verändern kann und eigene Routinen einbauen kann.

Noch ne Frage:
Ich lese immer wieder in Tutorials "db", was genau bedeutet das?
geschrieben am 04.09.2012 15:58:16
( Link )
Das ist einfach nur eine Byte-Tabelle, in die Hex-Werte geschriebe und 1 zu 1 in die ROM eingefügt werden. "dw" stecht entsprechend für eine Word- und "dl" für eine Long-Tabelle.
-Das quadratische Rad neu erfinden-
Mit das quadratische Rad neu erfinden (englisch Reinventing the square wheel) bezeichnet man die Bereitstellung einer schlechten Lösung, wenn eine gute Lösung bereits existiert.

-Slowsort-
Slowsort (von engl. slow: langsam) ist ein langsamer, rekursiver Sortieralgorithmus, der nach dem Prinzip Vervielfache und kapituliere (engl. Multiply and surrender, eine Parodie auf Teile und herrsche) arbeitet.

geschrieben am 08.09.2012 10:36:10
( Link )
Soo,
also ich hab nun meine Werte und würde sie jetzt gerne in die StatusBar einbauen.
Hab dazu diesen Thread gefunden.
Wie funktioniert das also, wenn die HP in der oberen Zeile neben "Mario" und MP genau darunter stehen soll? (Sternenpunkte und Yoshi Coins sollen also weg)
geschrieben am 08.09.2012 12:50:59
( Link )
Das HP und MP würde ich schon vorher auf die Statusbar setzen (entweder mit SMW Status Bar Editor oder Status Effect) Mit beiden kannst du die Yoshi Coins entfernen, die Sternenpunkte kannst du mit [Xkas/Asar] Disable Bonus Stars, v. 1.1 entfernen. Die Werte von HP und MP musst du dann per ASM updaten. Achja, vielleicht sollte ich noch erwähnen, dass du nicht einfach LDA !HP-RAM : STA !Statusbar machen sollst, da dann andere Tiles angezeigt werden und nicht der Wert selbst. Es gibt eine Routine für Hex -> Dezimal bei $00974C, du kannst da JSL $00974C machen. Dann ist der einer Wert bei A und der zehner Wert bei X. Ich kopier mal die Routine die ich hab ( = mit richtiger RAM-Adresse ersetzen):
Code
LDA 
PHX ;X auf Stack machen
JSL $00974C ;Hex -> Dez Routine
STA +1 ;Schreibe Einer
STX ;Schreibe Zehner
PLX ;X vom Stack ziehen

Um die richtige RAM-Adresse für zu bekommen musst du beim Statusbar Diagramm einfach die Adresse übernehmen, also z.B. $0F00 wenn du was über dem roten Bonusstern was schreiben möchtest.
[/langer Post]
Tutorials: ExAnimation | YouTube: W4mp3 | Twitter: https://twitter.com/SMWW4mp3
geschrieben am 08.09.2012 14:08:42
( Link )
Funktioniert das dann auch mit Werten mit Hundertern?
Sry dass ich diese dummen Fragen stelle D:
geschrieben am 08.09.2012 15:59:59
( Link )
für hunderter brauchst du eine andere hex to dec rotine...
(weiß nicht ob/wo sie in smw ist aber es gibt eine in der code libary)
WAS, WIE, WO???? Ne, Ne ich bin nicht die Signatur ...
Ich putze hier nur.

Mein Hack:
<!-- m --><a class="postlink" href="http://www.youtube.com/user/conankun88#p/a/u/0/8vdcyGylrg0">http://www.youtube.com/user/conankun88# ... vdcyGylrg0</a><!-- m -->