2014/01/18
■ [z80][xlisp]自作Z80 CP/Mマシン(38)
引き続き XLISPのメモ。
一応動くようになり、簡単なプログラムを動かしていると if関数がおかしいことに気づきました、 例えば (if t 1 2) を評価させるとエラーになってしまいます。
付属のドキュメントを見ると if関数は (if <texpr> <expr1> [ <expr2> ]) で <txpr>は条件式、 <expr1>は真の時に評価で必須、 <expr2>は偽の時に評価で省略可となっています。
また、 (if t (1)(2)) のように引数をリストにするとエラーになりませんでした。
XLISP version 1.1 > (if t 1 2) error: bad argument type <- エラーになる (if t 1 2) > (if t (1)(2)) 1 <- こちらは1が返ってくる
LISPと言えば emacsなんで、 scratchで試してみると、、
(if t 1 2) 1 <- 1が返ってくる (if t (1)(2)) Lisp error: (invalid-function 1) <- こっちでエラーになる
やっぱりおかしいようです。
(環境は CP/M Z80 HI-TECH C ver3.09でコンパイル)
2014/01/16
■ [z80][xlisp]自作Z80 CP/Mマシン(37)
ブレッドボードZ80マイコンではTINY BASICを載せてTinyTrek(スタートレックのタイニー版)が動きました、古から自作マイコンでは定番ですね。
CP/Mが動き出せば TurboPascalや HI-TECH Cなどの本格的なものも数多く有りますが、今回は小型の LISPと FORTHで行こうと思います(笑。
ターゲットにするLISPですが、割とメジャー(本当か?)な LISP80ではなくて、C言語で書かれたPDS(パブリック・ドメインソ・フトウェア)の XLISP Ver1.1 です、 ソースは The Unofficial CP/M Web siteにありました。
xlisp.zip(オリジナルのソースです、CP/M80は AZTEC-C用に書かれています)
XLISP は David Betz(デビットベッツ)さんによりC言語で書かれ、最初の公開は1983年1月7日のようです。 Ver1.xは小規模なコンピュータ用のオブジェクト指向拡張 Lispで、2.xは Common Lispのサブセット、3.xは Schemeのスーパーセットだそうな、、Ver4.xや XLISP-PLUS、 XLISP-STATなんてのもあるらしい、、(汗
とりあえず HI-TECH C(Z80 ver3.09)でコンパイルが通るように修正して、シミュレータで動かしてみました。
$ ./cpm3 ####### ##### ### ##### ### # # # # # # # # # # ## ## # # # # # # # # # # # # ##### # # ##### ##### # # # # # # # # # # # # # # # # # # # # # # # ####### ##### ### ##### ### # # Release 1.17, Copyright (C) 1987-2008 by Udo Munk CPU speed is unlimited Booting... LDRBIOS3 V1.2 for Z80SIM, Copyright 1989-2007 by Udo Munk CP/M V3.0 Loader Copyright (C) 1998, Caldera Inc. BNKBIOS3 SPR FC00 0400 BNKBIOS3 SPR 9000 3000 RESBDOS3 SPR F600 0600 BNKBDOS3 SPR 6200 2E00 61K TPA BANKED BIOS3 V1.6 for Z80SIM, Copyright 1989-2007 by Udo Munk A>setdef [no display] Program Name Display - Off A>setdef [uk] Date format used - UK A>setdef a:,b:,i:,* Drive Search Path: 1st Drive - A: 2nd Drive - B: 3rd Drive - I: 4th Drive - Default A>setdef [order=(com,sub)] Search Order - COM, SUB A>setdef [temporary=a] Temporary Drive - A: A>hist History RSX active A>p: P>xlisp XLISP version 1.1 > (princ "hello world!\n") hello world! () >
XLISPの詳細は 紫藤のWiki - XLISP や XLISPの公式サイト(英文)、 wikipedia(英文)を参照。 書籍は CQ出版社発行の マイコンピュータ 1984 No.15に少しだけ載っています。