labunix's blog

labunixのラボUnix

Wheezy+openjava-1.6-jreで「CASL II シミュレータ」を試す

■Wheezy+openjava-1.6-jreで「CASL II シミュレータ」を試す
 仮想マシンやchroot環境等のホストOSから隔離された環境で。

 CASLIIシミュレータをダウンロードする前にお読みください(IPA)
 http://www.jitec.jp/1_20casl2/casl2dl_001.html

■要件のJava SDK 1.4.2_06とはレトロでちょっとw。。。
 zip内は基本的にWindows用に書かれている。

$ zipinfo javaCASL2_2.0.zip 
Archive:  javaCASL2_2.0.zip
Zip file size: 103376 bytes, number of entries: 18
-rw-a--     2.2 ntf     2738 bx defX 05-Jul-27 10:57 readme.txt
-rw-a--     2.2 ntf    23711 bx defX 05-May-26 21:58 run.jar
-rwxa--     2.2 ntf       48 bx stor 04-Dec-26 16:47 TestProgram/CASL2.bat
-rw-a--     2.2 ntf      775 bx defX 00-May-01 16:24 TestProgram/count1.cas
-rw-a--     2.2 ntf      956 bx defX 05-May-27 10:43 TestProgram/ExplanatoryNote.txt
-rw-a--     2.2 ntf      203 bx defX 00-May-01 11:29 TestProgram/extern.cas
-rw-a--     2.2 ntf      182 bx defX 00-May-04 21:42 TestProgram/gsub1.cas
-rw-a--     2.2 ntf      162 bx defX 00-May-04 21:43 TestProgram/gsub11.cas
-rw-a--     2.2 ntf      159 bx defX 00-May-01 11:31 TestProgram/gsub2.cas
-rwxa--     2.2 ntf      108 bx defX 04-Dec-26 21:56 TestProgram/Javas.bat
-rwxa--     2.2 ntf       46 bx stor 04-Dec-26 22:10 TestProgram/RUN.bat
-rw-a--     2.2 ntf      659 bx defX 00-May-20 11:22 TestProgram/sample1.cas
-rw-a--     2.2 ntf      597 bx defX 00-May-20 11:32 TestProgram/sample2.cas
-rw-a--     2.2 ntf      531 bx defX 00-May-05 21:49 TestProgram/sample3.cas
-rw-a--     2.2 ntf      725 bx defX 01-Apr-21 17:43 TestProgram/sample4.cas
-rw-a--     2.2 ntf      175 bx defX 05-Mar-23 11:22 TestProgram/smain.cas
-rw-a--     2.2 ntf    22909 bx defX 05-May-26 21:57 casl2.jar
-rw-a--     2.2 ntf    74741 bx defX 05-Jul-04 15:35 Readme.pdf
18 files, 129425 bytes uncompressed, 100820 bytes compressed:  22.1%

■特にディレクトリを作ってくれないようなので、それに合わせて展開。

$ test -d CASL2 || mkdir CASL2 && cd CASL2 && \
  unzip ../javaCASL2_2.0.zip && cd ..
Archive:  ../javaCASL2_2.0.zip
  inflating: readme.txt              
  inflating: run.jar                 
 extracting: TestProgram/CASL2.bat   
  inflating: TestProgram/count1.cas  
  inflating: TestProgram/ExplanatoryNote.txt  
  inflating: TestProgram/extern.cas  
  inflating: TestProgram/gsub1.cas   
  inflating: TestProgram/gsub11.cas  
  inflating: TestProgram/gsub2.cas   
  inflating: TestProgram/Javas.bat   
 extracting: TestProgram/RUN.bat     
  inflating: TestProgram/sample1.cas  
  inflating: TestProgram/sample2.cas  
  inflating: TestProgram/sample3.cas  
  inflating: TestProgram/sample4.cas  
  inflating: TestProgram/smain.cas   
  inflating: casl2.jar               
  inflating: Readme.pdf              

$ find CASL2/ -type f -print
CASL2/Readme.pdf
CASL2/casl2.jar
CASL2/TestProgram/sample3.cas
CASL2/TestProgram/RUN.bat
CASL2/TestProgram/extern.cas
CASL2/TestProgram/gsub2.cas
CASL2/TestProgram/gsub1.cas
CASL2/TestProgram/smain.cas
CASL2/TestProgram/gsub11.cas
CASL2/TestProgram/sample4.cas
CASL2/TestProgram/CASL2.bat
CASL2/TestProgram/ExplanatoryNote.txt
CASL2/TestProgram/Javas.bat
CASL2/TestProgram/count1.cas
CASL2/TestProgram/sample1.cas
CASL2/TestProgram/sample2.cas
CASL2/run.jar
CASL2/readme.txt

■シフトJISなので、お好きな方法で変換。
 例えばlvが無いならnkfとか。。。

$ nkf -g CASL2/readme.txt 
Shift_JIS

$ lv -s CASL2/readme.txt > CASL2/readme_utf8.txt || \
  nkf -Lu -d CASL2/readme.txt > CASL2/readme_utf8.txt 

■説明通りにやるなら以下より1.4を。

 Oracle Java Archive
 http://www.oracle.com/technetwork/java/archive-139210.html

■今回は、jre1.6を導入。

$ sudo apt-get install -y openjdk-6-jre

■DISPLAY環境変数が要るんだと。標準出力なのに。。。

$ java -jar ~/CASL2/run.jar hello.obj
COMETⅡ Emulator -V2.00(2005/05/27)- ( Date : 2013/8/19 )
Exception in thread "main" java.awt.HeadlessException: 
No X11 DISPLAY variable was set, but this program performed an operation which requires it.
	at java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:173)
	at java.awt.Window.<init>(Window.java:546)
	at java.awt.Frame.<init>(Frame.java:419)
	at Dcosmos.<init>(Dcosmos.java:26)
	at RUN.main(RUN.java:39)

$ ssh -X test-debian
$ echo $DISPLAY
localhost:10.0

$ java -jar ~/CASL2/casl2.jar hello.cas 
$ java -jar ~/CASL2/run.jar hello.obj
COMETⅡ Emulator -V2.00(2005/05/27)- ( Date : 2013/8/19 )
Hello World

END COMETⅡ Emulator.

■jarのパスを間違えると以下のようなエラーが出る。

$ java -jar run.jar hello.obj
Unable to access jarfile run.jar

■文字列と文字数を渡せば良いということで。

$ cat hello.cas
MAIN    START
	OUT	BUF,LEN
	RET
BUF	DC	'Hello World'
LEN	DC	12
	END	

$ WORD="Hello New World"; \
  cat hello.cas | \
  sed s/"Hello World"/"$WORD"/ | \
  sed s/"12"/`echo -n "$WORD" | wc -c`/ > new.cas

$ java -jar casl2.jar new.cas >/dev/null 2>&1 && \
  java -jar run.jar new.obj 2>&1 | grep -v "COMET.*Emulator"
Hello New World

■余談。。。

$ cat hello.obj
NAME:MAIN
STARTadr:0000R
SIZE:0010
0000:FF02
0001:0004R
0002:000FR
0003:8100
0004:0048
0005:0065
0006:006C
0007:006C
0008:006F
0009:0020
000A:0057
000B:006F
000C:0072
000D:006C
000E:0064
000F:000C
END

■前回のスクリプトでどこが文字列か分かる。

 10進数<=>ASCII<=>16進数変換(bash+awk)
 http://labunix.hateblo.jp/entry/20130813/1376399226

$ for n in H e l l o \  W o r l d;do \
    echo $(printf "%03d" \""$n" ) | awk '{printf "%03d,%c,0x%x\n",$1,$1,$1}'; \
  done;echo
072,H,0x48
101,e,0x65
108,l,0x6c
108,l,0x6c
111,o,0x6f
032, ,0x20
087,W,0x57
111,o,0x6f
114,r,0x72
108,l,0x6c
100,d,0x64