Allgemeine Hex- und ASM-Fragen

geschrieben am 01.05.2013 13:44:45
( Link )
hey mal wieder ne Frage welche stelle sollte ich am besten hijacken um
die OAM positon aller tiles zu maipulieren...
(benutzte levelasm-Tool daher kann ich die werte dort nicht manipulieren)
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 01.05.2013 13:47:13
( Link )
Aus einem meiner Patches:

Code
org $00A2E6                      ;    Der Aufruf der Hauptroutine erfolgt so nah am Ende
autoclean JML StatusBarMain ; des Frames wie möglich, damit ihre Sprite-Teile
; von nichts mehr überschrieben werden.
geschrieben am 15.05.2013 15:43:06
zuletzt bearbeitet von kooooopa am 15.05.2013 16:44:59.
( Link )
Also reicht es mit 3 zu vergleichen? Also so: (und natürlich den Timer zu ändern)
Muss ich aber nicht irgendwie sagen, dass ich die 3.Stelle (die hunderter vergleichen will?) oder reicht es weil dass ja quasi schon die hunderter sind und wenn ich die Zehner will vergleich ich mit 0F32?
Code
;Act like 130
db $42

JMP Mario : JMP Mario : JMP Mario : JMP Return : JMP Return : JMP Return : JMP Return : JMP Mario : JMP Mario : JMP Mario

Mario:
LDA $0F31 ;Adresse des Timers
CMP #$3 ;Timer gleich/größer 300
BCS GenugZeit
LDA #$44 ;\
STA $14AB ; | Beendet das Bonusspiel
; | Block auf smwc
LDA #$02 ; | von Reallink
STA $9C ; |
JSL $00BEB0 ;/

GenugZeit:
LDY #$00 ;\ Act like BLOCK 025
LDA #$25 ;/
STA $1693
RTL

Return:
RTL
geschrieben am 15.05.2013 16:13:54
( Link )
Dein Fehler besteht aus drei Schritten.

1. Der Timer-RAM beginnt nicht bei $0731, sondern bei $0F31.

2. Du vergleichst mit einem Wert über #$FF, ohne im 16-Bit-Modus zu sein.

3. So funktioniert der Timer-RAM nicht mal. Er besteht aus drei Adressen, und jede davon enthält nur eine Dezimalstelle des Timer-Wertes. Wenn du also auf Werte über 300 überprüfen willst, musst du überprüfen, ob die erste Stelle größer gleich 3 ist.
geschrieben am 15.05.2013 16:45:58
( Link )
Hab ausversehen den alten Post editiert, statt nen neuen zu schreiben, also hier noch mal

Zitat von kooooopa:
Also reicht es mit 3 zu vergleichen? Also so: (und natürlich den Timer zu ändern)
Muss ich aber nicht irgendwie sagen, dass ich die 3.Stelle (die hunderter vergleichen will?) oder reicht es weil dass ja quasi schon die hunderter sind und wenn ich die Zehner will vergleich ich mit 0F32?
Code
;Act like 130
db $42

JMP Mario : JMP Mario : JMP Mario : JMP Return : JMP Return : JMP Return : JMP Return : JMP Mario : JMP Mario : JMP Mario

Mario:
LDA $0F31 ;Adresse des Timers
CMP #$3 ;Timer gleich/größer 300
BCS GenugZeit
LDA #$44 ;\
STA $14AB ; | Beendet das Bonusspiel
; | Block auf smwc
LDA #$02 ; | von Reallink
STA $9C ; |
JSL $00BEB0 ;/

GenugZeit:
LDY #$00 ;\ Act like BLOCK 025
LDA #$25 ;/
STA $1693
RTL

Return:
RTL
geschrieben am 15.05.2013 18:09:36
( Link )
Zitat von kooooopa:

Muss ich aber nicht irgendwie sagen, dass ich die 3.Stelle (die hunderter vergleichen will?) oder reicht es weil dass ja quasi schon die hunderter sind und wenn ich die Zehner will vergleich ich mit 0F32?

So ist es - ja, der Code sollte jetzt gehen.

Ich würde übrigens der 3 in CMP #$3 eine Null voranstellen, aber auch so sollte der Assembler damit umgehen können.
geschrieben am 15.05.2013 20:14:40
( Link )
Danke WYE. Jetzt hätte ich nur noch eine Strukturfrage. Die Abfrage nach 300, 200 und 100 funktioniert 1A.
Nun möchte ich aber auch 250, 150 und 50 Abfragen. Gibt es eine Möglichkeit das kürzer zu machen als hier in meinem Schema beschrieben? (Beispiel für 250)

Code
Abfrage 1: Ist der Hunderter größer als 2
Antwort zu Abfrage 1: JA --> Mario durchlassen
Antwort zu Abfrage 1: NEIN --> Gehe zu Abfrage 2

Abfrag 2: Ist der Hunderter kleiner als 2
Antwort zu Abfrag 2: JA --> Bonusspiel beenden
Antwort zu Abfrage 2: NEIN --> Hunderter ist 2 --> gehe zu Abfrage 3

Abfrage 3: Ist der Zehner größer/gleich 5
Antwort zu Abfrage 3: JA --> Mario durchlassen
Antwort zu Abfrage 3: NEIN --> Bonusspiel beenden

Geht das kürzer?
geschrieben am 15.05.2013 20:54:03
( Link )
Code
LDA $0F31
ASL
ASL
ASL
ASL
ORA $0F32
CMP #$25
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 16.05.2013 18:45:02
( Link )
So, endlich muss ich auch mal was fragen:
Ich habe folgendes Problem:
Mein Sprite verschwindet (optisch) vom Screen, wenn die x-Position davon >= x90 ist.
Video (Oben links in der Statusbar ist Debug Zeug, die Rote Zahl ist Y-Position und die weiße Zahl ist X-Position):
http://w4mp3.bplaced.net/Media/video.php?videoid=1 (braucht einen HTML5 fähigen Browser)
Code (nur die Graphics-Routine):
Code

Graphics:
JSR GET_DRAW_INFO ;Ist nicht mit drin, existiert aber :P

LDA $0FBD ;X-Pos Temp RAM
ASL
ASL
ASL
ASL ;insgesammt also *16
CLC
ADC $00
STA $0300,y ;/ Draw the X position of the sprite

LDA $0FBC ;Y-Pos Temp RAM
ASL
ASL
ASL
ASL ;insgessamt also *16
CLC
ADC $01
STA $0301,y ;/ Draw the Y position of the sprite


LDA #$7E ;\
STA $0302,y ;/ Tile to draw.

draw

LDA #$3E
ORA $64
STA $0303,y ; Write the YXPPCCCT property byte of the sprite

LDY #$00 ; Y ends with the tile size .. 00 means it's 8x8
LDA #$00 ; A -> number of tiles drawn - 1.
; I drew only 1 tile so I put in 1-1 = 00.

JSL $01B7B3 ; Call the routine that draws the sprite.
RTS

GET_DRAW_INFO:
;GET_DRAW_CODE
...
;/GET_DRAW_CODE

Zusätzliches:
X-Pos Temp RAM Wertebereich: x00-x0C
Y-Pos Temp RAM Wertebereich: x00-x05
Tutorials: ExAnimation | YouTube: W4mp3 | Twitter: https://twitter.com/SMWW4mp3
geschrieben am 16.05.2013 19:40:29
( Link )
JSL $01B7B3 ; Call the routine that draws the sprite.
Diese Routine verursacht das Problem... sie soll eigentlich nur verhindern das OAM tiles die Ofscreen sein müsten nicht am anderen bildschirmrand gezeichnet werden aber die überprüfung ist nun ja nicht besonders toll für das was du vorhast... denn sie löscht alles was mehr als 80pixel vom sprite entfernt ist in irgendeiner richtung also hast du 2 möglichkeiten
1. positionier das sprite in der mitte vom screen
2.Benutze das für jedes tile das du zeichnen willst
Code
PHY
TYA
LSR
LSR
TAY
LDA #$02
STA $0460,y ;00:8x8 size 02:16x16 size
PLY



hab aber auch noch ne frage bezüglich OAM...
man kann (wenn ich mich nicht irre) die größe der OAM tiles verändern
standart ist ja 8x8 und 16x16 ich hätte aber gerne 16x16 und
und wenn das geht ist es auch möglich das ganze per HDMA zu machen?
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 16.05.2013 19:49:31
( Link )
Das erste hat funktioniert, ich musste nur das ADC $00 in ADC #$10 ändern und den Sprite in die Mitte schieben, funktioniert wunderbar. Danke
Code
LDA $0FBD			;\X-Pos Temp RAM
ASL
ASL
ASL
ASL
CLC
ADC #$10
STA $0300,y ;/ Draw the X position of the sprite
Tutorials: ExAnimation | YouTube: W4mp3 | Twitter: https://twitter.com/SMWW4mp3
geschrieben am 17.05.2013 17:48:36
( Link )
hey leute hab nen kleines problem was OAM und die emulatoren angeht :/
SNES9X:

ZSNES:

ich möchte aber das es in beiden emulatoren so aussieht wie in zsnes aber ich weiß nicht welchen fehler ich gemacht haben könnte :/
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 17.05.2013 19:42:49
( Link )
Dafür wäre es erstmal wichtig zu erfahren, was du überhaupt gemacht hast.
-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 17.05.2013 20:07:18
( Link )
ich schalte per HDMA bei allen außer der letzten zeile 2101 auf #$83 (die letzte zeile nicht damit ich den wert nicht extra reseten muss beim level laden etc.) und dann lege ich 64x64 OAM tiles über den ganzen screen
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 18.05.2013 13:51:33
( Link )
Hallo.
Ich hab folgendes Problem:
Ich habe der Piranha Plant die ExGFX von der Upside Down-Variante gegeben. Logischerweise ist die Vine jetzt aber rot statt grün. Mit Tweaker kann man ja nur die Palette von beiden umstellen. Wie kann ich den Kopf jetzt rot und die ine grün machen?
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 18.05.2013 14:32:28
( Link )
Zitat von mzünni:
ich schalte per HDMA bei allen außer der letzten zeile 2101 auf #$83 (die letzte zeile nicht damit ich den wert nicht extra reseten muss beim level laden etc.) und dann lege ich 64x64 OAM tiles über den ganzen screen


Kann gut sein, dass das per HDM überhaupt nicht geht bzw. man das nicht machen darf. ZSNES ist ja ein eher inakkurater Emulator, deswegen funktionieren darin viele Dinge, die eigentlich nicht funktionieren würden. Deswegen solltest du es mal in BSNES probieren. Falls es darin auch nicht geht, dann ist es definitiv ein Emulationsfehler von ZSNES und man kann das eigentlich gar nicht über HDMA machen.
-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 22.05.2013 18:48:57
( Link )
Sobald ein Sprite oder Mario diesen Block von oben oder unten berührt, soll der ON/OFF Status geändert werden. Allerdings funktioniert das irgendwie nur bei Mario.
Hier die Codes (sind nicht von mir):
Code

;set_to_off.asm

db $42

JMP MarioBelow : JMP MarioAbove : JMP MarioSide : JMP SpriteH : JMP SpriteV : JMP Fireball : JMP Cape : JMP MarioCorner : JMP MarioHead : JMP MarioBody

MarioCorner:
MarioAbove:
LDA $7D
BPL activate ; pressable if mario's speed is going down
RTL
activate:
LDA $14AF ;depends on on/off status
BNE return ;if the switch is already off don't do anything
INC
STA $14AF ;set switch to off
LDA #$0B
STA $1DF9 ;sound number
LDA #$20
STA $1887 ;earthquake effect

solid:
LDY #$01
LDA #$30
STA $1693


MarioHead:
MarioBody:
return:
RTL

MarioBelow:
MarioSide:
Fireball:
Cape:
SpriteH:
SpriteV:
LDA $14AF
BEQ solid
RTL


Code

;set_to_on.asm
db $42

JMP MarioBelow : JMP MarioAbove : JMP MarioSide : JMP SpriteH : JMP SpriteV : JMP Fireball : JMP Cape : JMP MarioCorner : JMP MarioHead : JMP MarioBody

MarioCorner:
MarioAbove:
LDA $7D
BPL activate
RTL
activate:
LDA $14AF ;if the switch is already on don't do anything
BEQ return
STZ $14AF ;set the on/off switch to on
LDA #$0B
STA $1DF9 ;sound number
LDA #$20
STA $1887 ;earthquake effect

solid:
LDY #$01
LDA #$30
STA $1693


MarioHead:
MarioBody:
return:
RTL

MarioBelow:
MarioSide:
Fireball:
Cape:
SpriteH:
SpriteV:
LDA $14AF
BNE solid
RTL


Könnt ihr mir helfen?
geschrieben am 27.05.2013 17:18:41
( Link )
Mal ne Frage zu HDMA und dem TransferSize
Ich möchte pro scanline in 4 aufeinander folgenden Register ein Byte schreiben
welchen TransfereMode brauche ich dafür?
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 24.06.2013 20:16:19
( Link )
hi
weiß irgendwer welche Adresse man hijacken könnte um daten von RAM in SRAM zu sichern wenn der spieler ein level schafft ?
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 24.06.2013 20:21:51
( Link )
Wie wäre es mit irgendeiner Level -> Overworld Transition?
-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.