Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 25

Thema: [Wire-Tutorial] ZCPU

  1. #1
    Avatar von Scarecrow
    Registriert seit
    15.12.2005
    Ort
    Nordrhein-Westfalen

    Standard [Wire-Tutorial] ZCPU

    Vorwort:

    Das Tutorial habe ich mal irgendwann irgendwo geschrieben, es ist also lange her, aber ich denke, es passt hier trotzdem gut rein!

    Let's get the show on the road...

    Also, Jungs und Mädels, für das ZCPU Tutorial braucht ihr die Wiremod - SVN Version, die man sich nur über das SVN-System saugen kann:

    http://www.wiremod.com/index.php?showtopic=4
    Da wird alles beschrieben. Habt ihr dieses Update, solltet ihr diese Liste immer im Hintergrund haben, wenn ihr etwas nicht wisst:

    http://www.wiremod.com/index.php?showtopic=152

    So, jetzt zum Tutorial:

    Der ZCPU ist eine Einheit, die ihr mithilfe der leicht Assembler-orientierten Scriptsprache programmieren könnt. Keine Sorge, die Sprache ist so einfach, dass ihr innerhalb von Sekunden ein gutes Script haben könnt. Jedoch gibt es einiges zu beachten, aber dazu später. Beginnen wir mit dem Leichten, den wichtigsten Funktionen:

    Code:
    mov X,Y           X = Y                                
    sub X,Y           X = X - Y
    add X,Y           X = X + Y
    mul X,Y           X = X * Y
    div X,Y           X = X / Y
    jmp X             Springt zu Label X
    cmp X,Y           CMPR = X - Y 
    
    (CMPR ist eine vordefinierte Variable zum Vergleichen)
    (Zu cmp gehören noch weitere Dinge)
    mov, sub, add, mul und div erklären sich von Selbst. Ein Beispiel wäre mov eax,50; was in eax, einer vordefinierten Variable, die ihr benutzen könnt, 50 speichert. Andere Variablen müssen mit #<varablenamen> aufgegriffen werden.

    jmp springt zu einem Label, dass durch <labelname>: gekennzeichnet ist. Z.B:

    Code:
    startloop:
      mov eax,50;
      jmp startloop;
    Würde also, nachdem EAX der Wert 50 zugewiesen wurde, wieder zum Anfang springen und dieses wiederholen.

    cmp ist zum Vergleichen eines Wertes da. Vergleiche bestehen immer aus der Differenz zweier Zahlen (größer oder kleiner, gleich oder ungleich). Dieses wird ermöglicht, in dem cmp zwei Werte zugewiesen werden, die dann subrahiert werden. Das Ergebnis, die Differenz, wird in der festgelegten Variable cmpr gespeichert. Mit den Funktionen

    Code:
    JNE/JNZ X = Jump on not egual (!=)             
    JG/JNLE X = Jump on greater than (>)
    JGE/JNL X = Jump on greater or equal (>=)
    JL/JNGE X = Jump on less than (<)
    JLE/JNG X = Jump on less or equal (<=)     
    JE/JZ X    = Jump on equal (==)
    wird dann zu einem bestimmten Label gesprungen, wenn cmpr die Anforderungen erfüllt. In der Liste steht alles, was ihr braucht
    Also:

    Code:
    startloop:
      mov eax,50;
      cmp eax,50;
      je startloop;
    Bedeutet, dass zuerst EAX 50 zugewiesen wird. Mit cmp wird der Vergleich, die Differenz von eax und 50, in cmpr gespeichert und mit je wird "gejumpt", wenn das Ergebnis von cmpr gleich 0 ist, denn dass bedeutet, dass eax - 50 = 0 ist, was automatisch heist, dass eax auch 50 sein muss. Übrigens: je steht für "jump on equivalent" o.ä.

    Aber was bringt euch das, wenn ihr nur mit Zahlen rechnen könnt und nichts danach passiert? Dafür gibt es 2 Möglichkeiten, diese umzusetzen:

    Fast In/Outputs: Neuerdings kann man CPUs direkt mit bestimmten Schnittstellen verbinden, da dieses selbst für mich neu ist, könnt ihr noch warten

    8 In/Outports: Die alte Methode - 8 Ports nach Draußen und 8 Ports nach Innen. Die bespreche ich jetzt:

    Stellt euch vor, ihr habt ein explosives Fass, dass explodiert, wenn man ihm den Wert 1 zuweist und stellt euch vor, dass ihr ein kleines System mit Rangern aufgebaut habt, dass ebenfalls 1 ausgibt, wenn man durchgeht.
    Ein CPU würde das Ganze so auffassen:

    Code:
    // Damit kann man COmments machen
    // port0 ist das Fass
    // Aber gleichzeitig der Ranger
    // Am Anfang stehen ALLOC für Variablen, die definiert werden
    // Und CODE; für das Script
    CODE;
    loop:
      mov eax,port0;
      cmp eax,0;
      je loop;
      mov port0,1;
      jmp loop;
    Nochmal vorab: Wenn ihr port0 einen Wert zuweist, dann ist das nicht port0, von dem ihr einen Wert bekommen könnt. Es gibt also insgesamt 16 Ports!

    So das Script überprüft, ob von port0 ausgehend, also vom Ranger, ein Signal ausgeht. Ist es 0, springt es zum Anfang zurück. Falls nicht, wird dem anderen port0, also dem Fass, dem Output, der Wert 1 zugewiesen und das Fass explodiert.

    Ok, jetzt machen wir mal ein Script, dass man auch gut beobachten kann:

    Code:
    CODE;
    cube:
    mov port0,2;
    mov port0,4;
    mov port0,6;
    mov port0,8;
    mov port0,10;
    mov port0,12;
    mov port0,14;
    mov port0,16;
    mov port0,18;
    mov port1,2;
    mov port1,4;
    mov port1,6;
    mov port1,8;
    mov port1,10;
    mov port1,12;
    mov port1,14;
    mov port1,16;
    mov port1,18;
    mov port0,16;
    mov port0,14;
    mov port0,12;
    mov port0,10;
    mov port0,8;
    mov port0,6;
    mov port0,4;
    mov port0,2;
    mov port0,0;
    mov port1,16;
    mov port1,14;
    mov port1,12;
    mov port1,10;
    mov port1,8;
    mov port1,6;
    mov port1,4;
    mov port1,2;
    mov port1,0;
    jmp cube;
    So, damit wird ein Laser betrieben. Speichert das Script zunächst unter garrysmod\data\CPUchip\<name>.txt
    Dann geht in Garrys mod und wählt den CPU Chip aus. Ladet das Script hinein (schreibt den Namen eures Scripts mit der .txt Endung) und plaziert den CPU irgendwo auf der Map, z.B. auf einer Platte. Klickt doppelt auf den CPU, damit das Script kompiliert wird (der Log in der Console). Jetzt braucht ihr noch die Ports. Spawnt dazu ein Data Port und verbindet das I/OBUS vom CPU mit irgendeinem Port des Data Ports (nur ein mal!). Jetzt macht ihr euch noch einen Togglebutton und verbindet ihn mit clk vom CPU Chip und ein Constant mit dem Wert 20 (für Laser gut geeignet) verbindet ihr mit der Frequency des CPU Chips.

    Dann setzt ihr noch einen Laseremitter irgendwo hin, verbindet X mit port0, Y mit port1 und active verbindet ihr ebenfalls mit dem Togglebutton.

    Jetzt schaltet euer Gerät ein und habt Spaß
    Welches ist die Höchstgeschwindigkeit einer unbeladenen Schwalbe?

  2. Folgende 10 Benutzer sagen Danke zu Scarecrow für den nützlichen Beitrag:


  3. #2

    Standard AW: [Wire-Tutorial] ZCPU

    • Schönes Layot
    • Schöne Rechtschreibung
    • Für alle normalen Menschen verständlich.



    Klick here -> Bløg :D

  4. Folgender Benutzer sagt Danke zu A.I. für den nützlichen Beitrag:


  5. #3

    Standard AW: [Wire-Tutorial] ZCPU

    Aha, das ist ja mal interessant zu wissen
    Allerdings ist es anfangs nicht ganz soo einfach, ist ja schließlich komplett was neues (also der Assembler Stil)

  6. #4
    Avatar von Scarecrow
    Registriert seit
    15.12.2005
    Ort
    Nordrhein-Westfalen

    Standard AW: [Wire-Tutorial] ZCPU

    Assembler ist halt sehr maschinennah. Man könnte glatt sagen, dass der die ZCPU die realste Einheit von Wire ist, weil man mit diesem Grundwissen gut in Assembler einsteigen kann. Auf der Originalseite von Wire gehen 'se aber noch nen Schritt weiter: Sie arbeiten mit dem Stack und bauen so Funktionen, aber man sollte erst einmal das hier beherrschen
    Welches ist die Höchstgeschwindigkeit einer unbeladenen Schwalbe?

  7. #5
    Andrey
    Avatar von Andrey

    Standard AW: [Wire-Tutorial] ZCPU

    Argh. D:

    Das wollte ich machen!

    Naja, ich hätte es wahrscheinlich nicht so gut hinbekommen wie du jetzt.

  8. #6
    Avatar von Scarecrow
    Registriert seit
    15.12.2005
    Ort
    Nordrhein-Westfalen

    Standard AW: [Wire-Tutorial] ZCPU

    Zitat Zitat von Andrey Beitrag anzeigen
    Argh. D:

    Das wollte ich machen!

    Naja, ich hätte es wahrscheinlich nicht so gut hinbekommen wie du jetzt.
    Das Tutorial ist auch schon alt, sonst hätte ich zeitlich gesehen keine Chance gegen deine Tutorial-Welle
    Welches ist die Höchstgeschwindigkeit einer unbeladenen Schwalbe?

  9. Folgender Benutzer sagt Danke zu Scarecrow für den nützlichen Beitrag:


  10. #7
    Andrey
    Avatar von Andrey

    Standard AW: [Wire-Tutorial] ZCPU

    Hallo? Pinned das mal jemand an?

  11. #8
    Avatar von Scarecrow
    Registriert seit
    15.12.2005
    Ort
    Nordrhein-Westfalen

    Standard AW: [Wire-Tutorial] ZCPU

    Zitat Zitat von Andrey Beitrag anzeigen
    Hallo? Pinned das mal jemand an?
    Wäre ich dafür
    Welches ist die Höchstgeschwindigkeit einer unbeladenen Schwalbe?

  12. #9

    Standard AW: [Wire-Tutorial] ZCPU

    Oh, muss ich wohl übersehen haben, sorry

  13. #10
    Avatar von Mr Jack
    Registriert seit
    12.04.2008
    Ort
    Berlin

    Standard AW: [Wire-Tutorial] ZCPU

    Würd ja mal verstehen aber das ist wieklich zu viel für mich .
    Aber gut das du das Hochgeladen hast.
    Zitat Zitat von wichsbeutel Beitrag anzeigen
    ich habe gern sex mit wänden
    Zitat von baleck Ich spiele schon länger mit meinen Game-Boy Pocket Garrysmod 38.
    Zitat von BennyG
    Und zum Update,ich glaub Garry hat gerade mein Radar Addon kaputt gemacht

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •