MMIX treibt Apache

  May 9, 2006

Im Zuge der Info II Vorlesung habe ich das Experiment gemacht, MMIX über CGI mit Apache zum Laufen zu bekommen.

MMIX-Assembler Sourcedateien haben per Konvention die Endung .mms, was mich dazu führte einen neuen Handler und eine entsprechende Action in die httpd.conf einzutragen:

AddHandler mmix-handler .mms
Action mmix-handler /cgi-bin/mmix.pl

Ich hatte keine Möglichkeit gefunden einem Programm (also meiner Action-Anweisung) direkt ein Kommandozeilenparameter zu übergeben. Das störte mich zunächst etwas, der Umweg über ein kleines Script stellte sich dann allerdings sogar als vorteilhafter – weil flexibler – heraus.

#!C:/Programme/cygwin/bin/perl.exe
$len = length($ENV{“PATH_TRANSLATED”})-4;
$name = substr($ENV{“PATH_TRANSLATED”}, 0, $len);

system(“mmixal.exe”, $name . “.mms”);
system(“mmix.exe”, $name . “.mmo”, $ARGV[0]);

Ab hier ist es möglich, MMIX Assemblercode in einem Verzeichnis abzulegen und per Browser aufzurufen. Das Script sorgt dafür, dass der Code assembliert und mit dem MMIX Simulator ausgeführt wird.

Hier das Beispiel aus dem Bild oben:

       LOC Data_Segment
       GREG @

Header BYTE "Content-type: text/html",#a,#a,#0
Footer BYTE "

brought to you by MMIX ^^",#0

argv   IS   $1

       LOC  #100

Main   LDA  $255,Header
       TRAP 0,Fputs,StdOut

       CMPU $2,$0,#1
       BZ   $2,1F

       LDOU $255,argv,#8
       TRAP 0,Fputs,StdOut

1H     LDA  $255,Footer
       TRAP 0,Fputs,StdOut

       TRAP 0,Halt,0

Sinnvolle Anwendung: Wahrscheinlich nicht wirklich vorhanden :-) Student kann seinen Code per FTP oder Webinterface hochladen und dann ausprobieren, ohne die MMIX-Tools bei sich installieren zu müssen.

Contact

Alexander Gitter
contact at agitter net