Allgemeine Hex- und ASM-Fragen

geschrieben am 26.07.2013 0:31:38
( Link )
Wenn du den Doppelpunkt als Befehls-Trenner verwendest, dann müssen die Befehle hinter dem Doppelpunkt natürlich auch in derselben Zeile stehen und dürfen nicht einfach in die nächste Zeile verschoben werden. Die ganzen JMPs müssen also in dieselbe Zeile. Besonders das "BodyInside" kannst du da nicht so einfach in eine eigene Zeile schreiben, da das ohne das JMP überhaupt keinen Sinn ergibt. Befehl und Wert müssen immer direkt hintereinander in derselben Zeile stehen.
-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 30.07.2013 17:20:51
( Link )
Hey weiß jemand zufällig wie man die Tabelle $7F:837D benutzt um tiles auf Layer3 anzuzeigen?
oder hat jemand einen kommentirten Code der diese Tabelle nutzt?
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 -->
geschrieben am 07.08.2013 20:17:24
( Link )
Alter, irgend was ist an diesem Code schief.
Code
!Level_Low = $05
!Level_High = $01

header
lorom

org $00D663
autoclean JSL Mymain
NOP

freecode
Mymain: LDA $010B
CMP #!Level_Low
BNE Not_Changed
LDA $010C
CMP #!Level_High
BNE Not_Changed
LDA Modified,x
BRA Store
Not_Changed:
LDA Original,x
Store: STA $7D
RTL

Original:
db $B0,$B6,$AE,$B4,$AB,$B2,$A9,$B0
db $A6,$AE,$A4,$AB,$A1,$A9,$9F,$A6

Modified:
db $B6,$BC,$B4,$BA,$B2,$B8,$AF,$B6
db $AC,$B4,$AA,$B2,$A7,$AF,$A5,$AC


PS: Wieso ich beiden Bytes separat prüfe? Ganz einfach.
Code
	REP #$20
LDA $010B
CMP #!Level
BNE Not_Changed
SEP #$20

geht nicht (eigenständig geprüft und das war der Grund für das Problem).
Du kannst auch gerne zu mir MFG659 sagen (ich heiße übrigens in CreepTD wegen dem limitierten Platz wirklich MFG659)
Ich kann einige (ASM)-Codes fixen. <!-- s:) -->:)<!-- s:) -->
geschrieben am 07.08.2013 20:18:53
( Link )
Zitat von MarioFanGamer659:
PS: Wieso ich beiden Bytes separat prüfe? Ganz einfach.
Code
	REP #$20
LDA $010B
CMP #!Level
BNE Not_Changed
SEP #$20

geht nicht (eigenständig geprüft und das war der Grund für das Problem).

Schon mal mit CMP.w probiert? Vielleicht weiß der Assembler nicht, dass du einen 16-Bit-Wert nehmen willst.
geschrieben am 07.08.2013 20:27:53
( Link )
Zitat von WYE:
Zitat von MarioFanGamer659:
PS: Wieso ich beiden Bytes separat prüfe? Ganz einfach.
Code
 REP #$20
LDA $010B
CMP #!Level
BNE Not_Changed
SEP #$20

geht nicht (eigenständig geprüft und das war der Grund für das Problem).

Schon mal mit CMP.w probiert? Vielleicht weiß der Assembler nicht, dass du einen 16-Bit-Wert nehmen willst.

Nein! Ich habe ausdrücklich geschrieben:
Zitat
Code
 REP #$20
LDA $010B
CMP #!Level
BNE Not_Changed
SEP #$20

geht nicht (eigenständig geprüft und das war der Grund für das Problem).

Das Problem ist im ersten Code.
Du kannst auch gerne zu mir MFG659 sagen (ich heiße übrigens in CreepTD wegen dem limitierten Platz wirklich MFG659)
Ich kann einige (ASM)-Codes fixen. <!-- s:) -->:)<!-- s:) -->
geschrieben am 07.08.2013 21:00:05
( Link )
Wo bitte hast du explizit CMP.w geschrieben?

REP #$20 reicht für den Assembler nicht aus, um zu wissen, dass er 16-Bit-Zahlen benutzen soll. Er kann nur Vermutungen anstellen, und die macht er manchmal bis oft falsch. Hier, was soll der Assembler mit folgendem Code machen?

Code
LDA $010B
BNE label
REP #$20
label:
CMP #$0005

Das REP #$20 kann auch übersprungen werden, wie du siehst, also ist es für den Assembler kein hinreichendes Kriterium, 16-Bit-Werte zu verwenden. Probier doch wirklich mal CMP.w aus.

Ach ja, und wenn du sagst "irgendwas ist schief", hilft das nicht gerade weiter. Die beste Vermutung, die ich anstellen kann, ist, dass der Code falsche Daten lädt? Das dürfte daran liegen, dass du das Data Bank Register nicht richtig eingestellt hast. Entweder du benutzt PHB : PHK : PLB, oder du machst es dir einfach und benutzt LDA.l. Siehst du, was Längenangaben für Probleme lösen können?
geschrieben am 08.08.2013 0:39:06
( Link )
entscheidet der Assambler überhaupt anhand des Prozessor flags das wäre doch unnötig komplizirt und außerdem wüsste er nicht den ausgangszustand der Flags...
zumindest xkas geht doch nur danach ob die zahl <=2 oder >2 ist
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 -->
geschrieben am 08.08.2013 2:18:21
( Link )
Zitat von mzünni:
entscheidet der Assambler überhaupt anhand des Prozessor flags das wäre doch unnötig komplizirt und außerdem wüsste er nicht den ausgangszustand der Flags...
zumindest xkas geht doch nur danach ob die zahl <=2 oder >2 ist


Das Problem ist hier eben gar nicht der Assembler, sondern der Compiler. xkas kann überhaupt nicht wissen, wo und wann welcher Code als 8-Bit und wo als 16-Bit ausgeführt wird. WEIL es eben von den Prozessor-Flags abhängig ist und es dem Prozessor aber eben möglich ist, jederzeit an jede beliebige Stelle der ROM zu springen und dort Code auszuführen. xkas kann deshalb nur Vermutungen anstellen, welcher Code wie interpretiert werden soll, und tut dies zwar meistens, aber eben nicht immer, richtig.

Klar, auf Anhieb mag das alles relativ kompliziert klingen. Es ist aber auch nicht grundlos, wie es ist. Vergiss nicht, dass die Assembler-Programmiersprache nur auf dem Papier existiert. Nach der Kompilierung hast du letztendlich nur reinen Maschinen-Code in Form von binären (=hexadezimalen) Zahlen. Das Problem ist, dass das SNES nur 256 Opcodes zur Verfügung hat. Klar, theoretisch wären mehr möglich, aber dann müsste man Opcodes auf eine Länge von 16-bit erweitern, was bedeuten würde, dass der doppelte ROM-Speicher für die Opcodes nötig wäre. Und kaum etwas war damals bei der Spiele-Entwicklung so wichtig, wie Speicherplatz zu sparen. Da man mit nur 256 Möglichkeiten aber sehr wenige Operationen darstellen kann, gibt es eben die Prozessor-Flags, die es einem ermöglichen, denselben Opcode je nach Kontext auf verschiedene Weisen zu interpretieren. Und deshalb ist dieses System nicht nur clever, sondern sogar notwendig.
-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.08.2013 6:49:04
( Link )
Alter, das hilft mir doch gar nicht weiter. Diesen Code
Code
!Level_Low = $05
!Level_High = $01

header
lorom

org $00D663
autoclean JSL Mymain
NOP

freecode
Mymain: LDA $010B
CMP #!Level_Low
BNE Not_Changed
LDA $010C
CMP #!Level_High
BNE Not_Changed
LDA Modified,x
BRA Store
Not_Changed:
LDA Original,x
Store: STA $7D
RTL

Original:
db $B0,$B6,$AE,$B4,$AB,$B2,$A9,$B0
db $A6,$AE,$A4,$AB,$A1,$A9,$9F,$A6

Modified:
db $B6,$BC,$B4,$BA,$B2,$B8,$AF,$B6
db $AC,$B4,$AA,$B2,$A7,$AF,$A5,$AC

habe ich gemeint. Nicht den hier:
Code
 REP #$20
LDA $010B
CMP #!Level
BNE Not_Changed
SEP #$20

Alter, wie dumm seit ihr denn.

PS: Beide Codes werden (logischerweise) mit Asar gepatcht.
Du kannst auch gerne zu mir MFG659 sagen (ich heiße übrigens in CreepTD wegen dem limitierten Platz wirklich MFG659)
Ich kann einige (ASM)-Codes fixen. <!-- s:) -->:)<!-- s:) -->
geschrieben am 08.08.2013 11:19:14
( Link )
Du korrigierst doch auch gerne Dinge, die eigentlich nebensächlich sind? Müsstest doch eigentlich resistent dagegen sein.

Und eine potentielle Lösung hab ich im letzten Absatz ja schon angegeben.
geschrieben am 08.08.2013 11:36:41
( Link )
Funktioniert aber trotzdem nicht :
Code
!Level = $0105

header
lorom

org $00D663
autoclean JSL Mymain
NOP

freecode
Mymain: REP #$20
LDA.w $010B
CMP.w #!Level
BNE Not_Changed
SEP #$20
LDA Modified,x
BRA Store
Not_Changed:
SEP #$20
LDA Original,x
Store: STA $7D
RTL

Original:
db $B0,$B6,$AE,$B4,$AB,$B2,$A9,$B0
db $A6,$AE,$A4,$AB,$A1,$A9,$9F,$A6

Modified:
db $B6,$BC,$B4,$BA,$B2,$B8,$AF,$B6
db $AC,$B4,$AA,$B2,$A7,$AF,$A5,$AC
Du kannst auch gerne zu mir MFG659 sagen (ich heiße übrigens in CreepTD wegen dem limitierten Platz wirklich MFG659)
Ich kann einige (ASM)-Codes fixen. <!-- s:) -->:)<!-- s:) -->
geschrieben am 08.08.2013 11:58:20
( Link )
Zitat von WYE:
Ach ja, und wenn du sagst "irgendwas ist schief", hilft das nicht gerade weiter. Die beste Vermutung, die ich anstellen kann, ist, dass der Code falsche Daten lädt? Das dürfte daran liegen, dass du das Data Bank Register nicht richtig eingestellt hast. Entweder du benutzt PHB : PHK : PLB, oder du machst es dir einfach und benutzt LDA.l. Siehst du, was Längenangaben für Probleme lösen können?
geschrieben am 08.08.2013 12:49:05
zuletzt bearbeitet von MarioFanGamer am 10.08.2013 6:14:53.
( Link )
[edit]Ach,[/edit] Vergiss/Vergessen Sie es.
Du kannst auch gerne zu mir MFG659 sagen (ich heiße übrigens in CreepTD wegen dem limitierten Platz wirklich MFG659)
Ich kann einige (ASM)-Codes fixen. <!-- s:) -->:)<!-- s:) -->
geschrieben am 08.08.2013 20:07:06
( Link )
Zitat von MarioFanGamer659:
Alter, wie dumm seit ihr denn.


Sorry, aber das muss ich mir echt nicht anhören. WYE mag damit vielleicht kein Problem haben, aber ich lasse mich sicherlich nicht beleidigen, weil ich versuche, jemandem zu helfen. Das ist deine erste Verwarnung und eine Sperrung für 24 Stunden!
-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 09.08.2013 21:23:15
( Link )
Zitat von Der, der mich gesperrt hatte:
Zitat von MarioFanGamer659:
Alter, wie dumm seit ihr denn.


Sorry, aber das muss ich mir echt nicht anhören. WYE mag damit vielleicht kein Problem haben, aber ich lasse mich sicherlich nicht beleidigen, weil ich versuche, jemandem zu helfen. Das ist deine erste Verwarnung und eine Sperrung für 24 Stunden!

Also dass mit dem "dumm meinen" ist nicht wirklich ernst gemeint sondern weil die ganze zeit über den zweiten statt den ersten Code geredet wurde (sprich man sollte nicht alles wörtlich nehmen und bei mir ist es in dem Fall nicht wirklich beleidigend). 'tschuldigung, habe nicht auf die Wortwahl geachtet. (Warum habe ich nicht "dämlich" geschrieben? )

Noch was:

Zitat von Der, der mich gesperrt hatte:
Das Problem ist hier eben gar nicht der Assembler, sondern der Compiler. xkas kann überhaupt nicht wissen, wo und wann welcher Code als 8-Bit und wo als 16-Bit ausgeführt wird. WEIL es eben von den Prozessor-Flags abhängig ist und es dem Prozessor aber eben möglich ist, jederzeit an jede beliebige Stelle der ROM zu springen und dort Code auszuführen. xkas kann deshalb nur Vermutungen anstellen, welcher Code wie interpretiert werden soll, und tut dies zwar meistens, aber eben nicht immer, richtig.

Und was ist mit Asar? Ich hatte auch noch die Befehle "autoclean" und "freecode" benutzt (und die kann man nur mit Asar benutzen).

Und statt
Code
!Level_Low = $05
!Level_High = $01

header
lorom

org $00D663
autoclean JSL Mymain
NOP

freecode
Mymain: LDA $010B
CMP #!Level_Low
BNE Not_Changed
LDA $010C
CMP #!Level_High
BNE Not_Changed
LDA Modified,x
BRA Store
Not_Changed:
LDA Original,x
Store: STA $7D
RTL

Original:
db $B0,$B6,$AE,$B4,$AB,$B2,$A9,$B0
db $A6,$AE,$A4,$AB,$A1,$A9,$9F,$A6

Modified:
db $B6,$BC,$B4,$BA,$B2,$B8,$AF,$B6
db $AC,$B4,$AA,$B2,$A7,$AF,$A5,$AC

zu verbessern, verbesserte ihr das:
Code
!Level = $0105

header
lorom

org $00D663
autoclean JSL Mymain
NOP

freecode
Mymain: REP #$20
LDA $010B
CMP #!Level
BNE Not_Changed
SEP #$20
LDA Modified,x
BRA Store
Not_Changed:
SEP #$20
LDA Original,x
Store: STA $7D
RTL

Original:
db $B0,$B6,$AE,$B4,$AB,$B2,$A9,$B0
db $A6,$AE,$A4,$AB,$A1,$A9,$9F,$A6

Modified:
db $B6,$BC,$B4,$BA,$B2,$B8,$AF,$B6
db $AC,$B4,$AA,$B2,$A7,$AF,$A5,$AC

Und das war nicht der Code den ich meinte (und fals jemand schreibt: "Warum hattest du es nicht geschrieben?". Ich habe es extra geschrieben und ihr hattet nicht darauf geachtet. ). Könntest du mir eine zweite Chance geben? Und ich habe beim VVR-Thrad vergessen zu schreiben, dass ich autistisch bin (dummer, DUMMER Manuel) (und somit mein Gehirn anders arbeitet als bei mir den meisten von euch) . (Und ich lüge gar nicht. Ich könnte dir meinen behinderten Ausweis per Photo zeigen. )

Edit: Immerhin bist du und WYE ein bisschen lustig. *Zwinker-Smiley*
Du kannst auch gerne zu mir MFG659 sagen (ich heiße übrigens in CreepTD wegen dem limitierten Platz wirklich MFG659)
Ich kann einige (ASM)-Codes fixen. <!-- s:) -->:)<!-- s:) -->
geschrieben am 09.08.2013 21:38:52
( Link )
Zitat von MarioFanGamer659:
(Warum habe ich nicht "dämlich" geschrieben? )


Das macht keinen wirklichen Unterschied. Das ist beides in der Regel beleidigend. Versuche einfach, ganz darauf zu verzichten. Wir brauchen hier keinen zweiten Robju!
Für Roby: Nicht böse sein, wir lieben dich trotzdem!!1
Manchmal jedenfalls.


Zitat von MarioFanGamer659:
Und was ist mit Asar? Ich hatte auch noch die Befehle "autoclean" und "freecode" benutzt (und die kann man nur mit Asar benutzen).


Mit Asar kenne ich mich nicht so aus, aber da wird es genau so sein, wie in xkas. Es gibt einfach Dinge, die Compiler generell nicht wissen und höchstens annehmen können.

Zitat von MarioFanGamer659:
Und das war nicht der Code den ich meinte (und fals jemand schreibt: "Warum hattest du es nicht geschrieben?". Ich habe es extra geschrieben und ihr hattet nicht darauf geachtet. ).


Es kann nunmal nicht jeder immer alles lesen. Auch (oder gerade) ein Admin nicht. Ich habe nur die letzten paar Posts in diesem Thread gelesen, da ist mir einiges entgangen. Sowas kommt nunmal vor. Das ist dann noch lange kein Grund, jemanden zu beleidigen. Insbesondere nicht, wenn man nur versucht, zu helfen.
Außerdem war insbesondere meine Antwort beispielsweise auch an mzünni gerichtet, nicht an dich. Er hat eine Frage gestellt und ich habe darauf geantwortet.

Zitat von MarioFanGamer659:
Könntest du mir eine zweite Chance geben?


Die hast du ja bereits, das war ja nur eine Verwarnung, also alles gut. Und solange du dich von jetzt an zurückhälst, ist ja auch alles in Ordnung und du brauchst keine weiteren Verwarnungen zu befürchten. Aber versuche bitte auch ein wenig, dir die Kritik anderer Leute zu Herzen zu nehmen. Das ist ein gut gemeinter Rat.
-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 09.08.2013 21:41:23
( Link )
Na ja, wenn du sagst, dass CMP #!Level im 16-Bit-Mode nicht geht, und ich weiß, dass das nicht so ist, dann lasse ich das nicht auf mir sitzen. Dass daraus eine größere Diskussion entstanden ist, das hat sich nun mal so ergeben.
Und deine eigentliche Frage hab ich ja beantwortet, wie gesagt.

Na ja, hat's denn nun geklappt?
geschrieben am 09.08.2013 23:37:28
( Link )
du darfst im nicht mit #!Level verleichen dann vergleichst du mit der adresse an der !Level in der rom stehst du musst einfach nur CMP !Level schreiben
schreib trotzdem mal in den code direkt #$0105 statt #!Level
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 -->
geschrieben am 14.08.2013 0:49:07
( Link )
Moin!
Ich hab mir (mal wieder) einen simplen, aber unbrauchbaren Block zusammengebastelt, der nicht funktioniert.
Plan: Wenn Mario klein ist, soll er groß werden. Wenn er nicht klein ist, soll er zu Luigi werden.
Realität: Wenn Mario klein ist, wird er zu Luigi (auch klein). Wenn Mario groß ist, passiert nix!
Hier der Code:
Code
db $42
JMP MarioBelow : JMP MarioAbove : JMP MarioSide : JMP SpriteV : JMP SpriteH : JMP MarioCape : JMP MarioFireBall : JMP TopCorner : JMP HeadInside : JMP BodyInside
MarioAbove:
MarioBelow:
MarioSide: LDA $19
CMP #$00
BEQ klein
BNE sonst
RTL
klein:
LDA #$01
STA $19
RTL
sonst:
LDA #$01
STA $0DB3
RTL
SpriteV:
SpriteH:
MarioCape:
MarioFireBall:
TopCorner:
HeadInside:
BodyInside:
RTL

Mit dem BNE hatte ich schon immer Probleme und wusste nicht wieso. Hoffe mir kann jemand helfen
Zitat von Robju am 22.11.2013:
ICH BRING EUCH ALLE UM!!
Zitat von Dominik am 07.08.2013:
Fick dich Rob, ich wusste dass das kommt!

anzeigen
MFG: Wieso binn ich als Ideot genannt?Das ist net nett.
Robbinn, ideot, Satzstellung, Grammatik.
MFGSchonn gut, schon gut, das mit "binn" und "Idoet" ist ein Typo.
RobDas e und i sind 4 tasten voneinander entfernt.
MFGschnelle Finger?
Rob Nein.
MFG *facepalm*
Rob Wenn man Idiot schreibt kommt man nichtmal in die Nähe eines "e" s
MFG Doch, warum hat man denn sonst zwei Finger?
Rob Das hat mir der ANzahl der Finger nichts zu tun.
MFG Ich meine Hände.
Bro ich hab 3 stück
Rob Hat auch kit der Anzahl der Händer nichts zu tun
MFG Und es hat mit der Anzahl der Hände zu tun.
Rob Nein.
MFG Ich schreibe doch mit beiden.
Rob YOU ARE AN IDIOT, AH HAHAHAHAHA HAAAAHAAA HAHAHAHAAAAA!

DIE KONFI
DIE andere KONFI
JJJAAAAAAAH
geschrieben am 14.08.2013 1:02:09
( Link )
Probier mal:
Code
db $42
JMP MarioBelow : JMP MarioAbove : JMP MarioSide : JMP SpriteV : JMP SpriteH : JMP MarioCape : JMP MarioFireBall : JMP TopCorner : JMP HeadInside : JMP BodyInside
MarioAbove:
MarioBelow:
MarioSide:
LDA $19
BNE sonst
LDA #$01
STA $19
RTL
sonst:
LDA #$01
STA $0DB3
SpriteV:
SpriteH:
MarioCape:
MarioFireBall:
TopCorner:
HeadInside:
BodyInside:
RTL