ScienceSource.info
ScienceSource.info
SiS
11:59
Allgemeines
:: Home
:: Disclaimer
Artikel
:: Physik
:: Astrophysik
:: Mathematik
:: Informatik
Community
:: Foren
:: Chat
Sonstiges
:: Quiz
:: Partner
:: Kontakt
Funktionen
:: Forum-Login
:: Login
:: Suchen

Info
Viel Spaß im Forum!



Home Forengruppe Kontakt Suchen
ScienceSource.info / Artikel / Informatik

Memory Array Redcode Simulator

Beim "Memory Array Redcode Simulator" handelt es sich um ein kleines Spiel, kurz MARS genannt.

Im wesentlichen gibt es 8000 Speicherplätze, und 2 Programme, so wie das übergeordnete Programm MARS. Die 2 Programme kämpfen gegeneinander ("Krieg der Kerne").
Beim Spielablauf wird abwechselnd jeweils eine Anweisung der beiden Programme ausgefuehrt. Ein Programm hat verloren, wenn sein Programmcounter auf einen nicht ausfuehrbaren Befehl (DAT-Anweisung) zeigt.
Die Programme werden in einer einfachen Assembler-Sprache, dem sogenannten "Redcode" geschrieben. Nach dem Loeschen des Speichers mit DAT 0 Anweisungen hat dieses Programm zunaechst die Aufgabe die beiden Kampfprogramme an zufaellige Adressen in dem 8000 Programmzeilen umfassenden Speicher auszusetzen, wobei der minimale Abstand der beiden Programme 1000 Schritte umfasst. Es stehen fuer jeden Spieler maximal 32000 Ausfuehrungszyklen zur Verfuegung. Sollten beide Programme nach dieser Zeit noch lauffaehig sein, endet das Spiel unentschieden.

Befehlstabelle nach ICWS88
Anweisung Kürzel Argument A Argument B
Data Anweisung DAT - direkt
Verschiebe MOV #,@,<,direkt @,<,direkt
Addiere ADD #,@,<,direkt @,<,direkt
Subtrahiere SUB #,@,<,direkt @,<,direkt
Springe JMP @,<,direkt -
Springe wenn Null JMZ @,<,direkt @,<,direkt
Springe wenn nicht Null JMN @,<,direkt @,<,direkt
Vermindere und springe wenn nicht Null DJN @,<,direkt @,<,direkt
Vergleiche CMP #,@,<,direkt @,<,direkt
Überspringe wenn kleiner SLT #,@,<,direkt @,<,direkt
Spalte auf SPL @,<,direkt -

Adressierungsarten:
zahl: direkt; Bsp.: MOV quelle ziel, kopiert den Inhalt der Adresse quelle zur Adresse ziel.
#zahl: unmittelbar; Bsp.: MOV #3 ziel, fuellt den Inhalt der Adresse ziel mit der Zahl 3.
@zahl: indirekt; Bsp.: MOV #3 @ziel fuellt den Inhalt der in der Adresse ziel angegebenen Adresse mit der Zahl 3.
<zahl: dekrementiernd & indirekt; Bsp.: Mov #3 <ziel, zunaechst wird an der Zieladresse der Wert um 1 erniedrigt. Dann wird ein Mov #3 @ziel durchgeführt.

Ein paar Beispielprogramme:
KNIRPS:
KNIRPS MOV KNIRPS 1 
KNIRPS ist das kuerzeste Kampfprogramm ueberhaupt. Es besteht nur aus einer Programmzeile und kopiert sich bei jeder Ausfuehrung um ein Feld weiter.

GNOM:
GNOM   DAT -1000  
LOOP   ADD #-12 GNOM
       MOV #0 @GNOM
       JMP LOOP 
GNOM belegt den ganzen Speicher in Viererabstaenden mit DAT 0-Bomben, wobei es selbst gerade nicht getroffen wird.

MICE:
DATA   DAT 0
START  MOV #12 DATA
LOOP   MOV @DATA <POINT
       DJN LOOP DATA
       ADD #0 POINT
       SPL @POINT
       ADD #654 POINT
       JMZ START DATA
POINT  DAT 834 
MICE enthaelt die SPL (Split)-Anweisung und macht nichts anderes als sich staendig zu verdoppeln.
Version 3.2      © 2001-2008 Harald Wolfsgruber