Deutsches ASM Tutorial (Abgebrochen)

geschrieben am 03.04.2012 18:44:33
( Link )
Zitat von Suffer:
lieg ich richtig, das wenn ich z.b 1 0 0 1 das die 0er nicht mitgerechnet werden? also quasi: 1 0 0 1 = 1 + 0 + 0 + 8 = 9 ?


So ist es. 0 mit einer Zahl multipliziert gibt nunmal immer 0. Also
(1 * 2^3) + (0 * 2^2) + (0 * 2^1) + (1 * 2^0) =
(1 * 8) + (0 * 4) + (0 * 2) + (1 * 1) = 9
-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 03.04.2012 18:46:11
( Link )
achso jetzt versteh ich das, ich wusste nicht, dass man bei einer neuen Reihe, neu anfängt zu Zählen ^^

ok danke schön :]
geschrieben am 03.04.2012 21:52:14
( Link )
Zitat von RPG Hacker:
erstelle einen Block der euren Münzcounter um 1 erhöht


bin ich jetzt zu doof oder was?

LDA #$01
STA $7E0DBF

bzw.

LDA $7E0DBF
CLC
ADC #$01

klappt das? weil wenn ich den block als *.asm speicher und mittels BTSD einfügen möcht klappt das irgendwie nicht ;/ entweder bin ich zu doof
um nen simplen coinblock zu schreiben, oder ich hab bei der insertion was falsch gemacht :[
geschrieben am 03.04.2012 21:57:25
( Link )
Zitat von Suffer:
LDA #$01
STA $7E0DBF


Setzt die Münzen genau auf 1 anstatt sie um 1 zu erhöhen.

Zitat von Suffer:
LDA $7E0DBF
CLC
ADC #$01


Lädt die Münzen in den Akkumulator und addiert 1 hinzu, speichert das Ergebnis aber nicht (sodass es wieder verloren geht).

Was du brauchst ist eine Kombination aus beiden Varianten.
-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.04.2012 14:20:11
( Link )
nur so als tipp schau dir ram adresse $7E:13CC an
ansonsten müsstest du ja auch beachten das es nicht mehr als 99 coins sein müssen du müsstest mario das 1up geben etc.

und wenn du etwas nur um 1 ehöhen willst empfehle ich INC $0DBF geht einfach schneller ^^
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 05.04.2012 9:47:45
( Link )
Ich mit meinen nicht vorhandenen ASM-Kenntnissen, wollte es jetzt auch mal probieren.
Angespornt durch Suffer

Also meine Lösung für erstelle einen Block der euren Münzcounter um 1 erhöht
Ist wahrscheinlich falsch, aber falls es jemand nicht lesen will im Spoiler anzeigen
LDA #$01
STA $7E13CC
geschrieben am 05.04.2012 11:53:24
( Link )
ich würde einfach:
INC $13CC
Das ist das kürzeste und sollte am besten funktioniren...
falls man mehrere münzen auf einmal einsammelt etc. so werden alle gezählt es sei denn es sind mehr als 256
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 05.04.2012 11:58:18
( Link )
Beide Methoden funktionieren, aber bei kooooopas Methode wird der Wert überschrieben, der sich in $13CC befindet. Sollten also bereits Münzen zum Erhöhen in dieser Adresse gespeichert sein, gehen die verloren. Allerdings ist das ein ziemlich seltener (wenn nicht sogar unmöglicher) Fall, je nachdem, wie das Spiel aufgebaut ist. Aber ja, INC $13CC ist für diese Aufgabe definitiv die einfachste Methode.
-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 05.04.2012 14:18:11
( Link )
Hab wieder was probiert, aber dieses mal bin ich extrem unsicher. Ich weiß nicht mal ob hier hierdrin überhaupt erkennt, was ich mir gedacht habe.
Es soll der Block sein, der einem ab 30 und mehr Münzen eine Feder gibt und dann die Münzen auf 0 setzt.

Fall andere die Aufgabe noch lösen wollen anzeigen
Code
LDA $7E0DB6            ; Lade Marios Münzen
CMP #$30 ; Vergleich mit 30 Münzen
BCC Nicht CapeMario ; kleiner 30 Münzen nicht zu Capemario machen
LDA $19 ; Andernfalls: Lade das Powerup
LDA #$02 ; Mario Cape geben
STA $19 ; Speichern
LDA $0 ; Lade 0 Münzen
STA $7E0DB6 ; Mach Marios Münzen zu 0
geschrieben am 05.04.2012 15:04:12
( Link )
Fall andere die Aufgabe noch lösen wollen anzeigen
Code
LDA $7E0DB6            ; Lade Marios Münzen

Hier solltest du wirklich eher $0DBF nehmen. $0DB6 enthält wirklich nur Marios Münzen und die Adresse ist auch nur für die Overworld gedacht. Heißt: Im Zweispieler würde der Block mit Luigi nicht funktionieren. $0DBF hingegen gilt immer für den aktuellen Spieler.

Code
LDA $19                ; Andernfalls: Lade das Powerup 
LDA #$02 ; Mario Cape geben


Das erste LDA tut in diesem Fall überhaupt gar nichts (denn der Wert im Akkumulator wird mit dem zweiten LDA ja sofort wieder überschrieben) und ist auch gar nicht nötig. Das kannst du einfach weglassen.

Code
LDA $0                 ; Lade 0 Münzen


Hier hast du zweierlei Fehler gemacht. Zum einen hast du "#" vergessen, sodass hier eine Adresse geladen wird anstatt die konstante Zahl 0. Zum anderen solltest du bei Hex-Zahlen wirklich immer alle Stellen angeben. Also
8-Bit-Zahl -> #$00
16-Bit-Zahl -> #$0000
Nur eine einzige Stelle anzugeben kann beim Kompiler zu Fehlern führen, da er nicht weiß, ob die Zahl als 8-Bit- oder als 16-Bit-Zahl gemeint ist.
-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 05.04.2012 15:18:51
( Link )
Das heißt das hier ist korrekt?

Fall andere die Aufgabe noch lösen wollen anzeigen
Code
LDA $7E0DBF            ; Lade Münzen
CMP #$30 ; Vergleich mit 30 Münzen
BCC Nicht CapeMario ; kleiner 30 Münzen nicht zu Capemario machen
LDA #$02 ; Andernfalls Mario Cape geben
STA $19 ; Speichern
LDA $#00 ; Lade 0 Münzen
STA $7E0DBF ; Mach Marios Münzen zu 0
geschrieben am 05.04.2012 15:41:39
( Link )
Noch eine generelle sache anzumerken:
Du willst das ganze möglichst kurz und das es möglichst wenig rechen schritte verbraucht...
(ist heutzutage zwar nicht mehr so wichtig aber naja )
Spoiler anzeigen
Code
LDA $0DBF            ; Lade Münzen
CMP #$30 ; Vergleich mit 30 Münzen
BCC Nicht CapeMario ; kleiner 30 Münzen nicht zu Capemario machen
LDA #$02 ; Andernfalls Mario Cape geben
STA $19 ; Speichern
STZ $0DBF ; Mach Marios Münzen zu 0

Und neben bei noch anzumerken was ist wenn der player von anfang an wenn er das level betritt schon mehr als 30 Münzen hat?
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 05.04.2012 16:05:26
( Link )
Ja, so sollte es funktionieren.

Zitat von mzünni:
Und neben bei noch anzumerken was ist wenn der player von anfang an wenn er das level betritt schon mehr als 30 Münzen hat?


Das ist ja egal. Darum ging es in der Aufgabe ja nicht.
-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 05.04.2012 17:27:13
( Link )
Ich mal wieder: Erstellt einen Custom Block, der eure Münzen so lange um 1 erhöht, bis ihr genau 50 (dezimal) habt. Beachtet dabei, dass die Münzen nicht über 99 (dezimal) gehen dürfen).

siehe lezte Posts anzeigen
Code
LDA $7E0DBF        ; Lade Münzen
CMP #$50 ; Vergleich mit 50 Münzen
BCS Zuviel ; Mehr als 49 Münzen
STZ $0DBF          ; Mach Marios Münzen zu 0
STA $7E0DBF ; Speichern
LDA #$13CC ; Weniger als 50 Münzen, erhöhe die Münzen um 1
STA $7E0DBF ; Speichern
geschrieben am 05.04.2012 17:42:10
( Link )
dann hat der spiler aber immer 1 münze denn wenn du es jedesmal auf 0 setzt und 1 dazu adirst hast du danach 1 da das kleiner als 50 ist wird es beim nächsten mal wieder auf 0 gestezt etc.
und das
STA $7E0DBF ; Speichern
in der 3 letzten zeile ist überflüssig ...

Spoiler anzeigen
Code
LDA $0DBF        ; Lade Münzen
CMP #$31 ; Vergleich mit 50 Münzen
BCS Zuviel ; Mehr als 49 Münzen
INC $13CC ; Weniger als 50 Münzen, erhöhe die Münzen um 1
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 05.04.2012 18:01:51
( Link )
Kommentare anzeigen
Code
LDA $7E0DBF        ; Lade Münzen

Übrigens: Bei Adressen unter $7E8000 (?) kannst du das Bank-Byte ($7E) weglassen, bei Adressen unter $0100 sogar die beiden führenden Nullen.

Code
CMP #$50           ; Vergleich mit 50 Münzen

Hier vergleichst du mit 80 (was in hex 50 ist). Entweder #$32 oder #50 ohne Dollarzeichen.

Code
BCS Zuviel         ; Mehr als 49 Münzen

Und wo ist das "Zuviel"-Label? So weiß ja der Code gar nicht, wo er hinspringen soll.

Code
STZ $0DBF          ; Mach Marios Münzen zu 0
STA $7E0DBF ; Speichern

Was versprichst du dir hiervon? Du setzt $0DBF auf 0 und gleich danach machst du diese Aktion wieder rückgängig (in A ist immer noch der originale Wert von $0DBF).

Code
LDA #$13CC         ; Weniger als 50 Münzen, erhöhe die Münzen um 1

DIe Zahl 13CC zu laden bringt hier gar nichts (und wäre in dieser Syntax nur im 16-Bit-A-Modus sinnvoll). Immer zwischen $ und #$ unterscheiden.
geschrieben am 05.04.2012 18:04:07
( Link )
Nein ich mein das so, dass das Rote immer passiert und dann das Blaue oder das Grüne.

siehe lezte Posts anzeigen
LDA $7E0DBF
CMP #$50

BCS Zuviel
STZ $0DBF         
STA $7E0DBF

LDA #$13CC
STA $7E0DBF
geschrieben am 05.04.2012 18:10:03
( Link )
dann schreib das ganze bitte mal als korrekten asm code den so wird es nur noch unübersichtlicher in meinen augen... und funktioniren würd es so auch aber naja...
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 05.04.2012 18:39:53
( Link )
Zitat
korrekten asm code

Ja, den kenne ich nicht. Ist das so nicht schon korrekt?
Wie sollte es den richtig aussehen?
geschrieben am 05.04.2012 19:20:20
( Link )
Wie willst du denn zwischen dem Blauen und dem Grünen trennen? Da muss noch ein Label rein.

Ansonsten kann ich nur meine Kommantare von eben wiederholen.