ForCyはじめました。
リカージョンさんところから出している「ForCy」という評価ボードを以前、頂いたのですが、ようやく腰を落ち着けていじることができたので、その報告です。
この「ForCy」というのは、マイコン内部にコンパイラが入っている面白いボードで、ソースプログラムを「ハイパーターミナル」や「TeraTerm」から送ると、マイコン内部でコンパイルされて実行できるというスグレモノ。いざ初めて見ると、ハマってしまいました。
ForCyのプログラミングは、スタックマシンをイメージした、やや低レベルな(機械寄りという意味ね)言語を使用します(Forthとかに近いかも)。
たとえば、「1+1」や「2*3+4」はこんな感じ。
1 1 + 2 3 * 4 +
他に、「4+5の値を変数a,bに代入」するときは、
4 5 + dup =a =b
と記述します。
繰り返し、たとえば「"10"を10個表示する」ときは、
10 0 { 10 %d ++ } for ..
と記述します。
で、今は、ForCy付属の8マトリクスLEDを自由に光らせようと悪戦苦闘するのですが、どうしてもプログラムが異常終了する。しまいに頭が混乱してきました。
いかにソースコードを晒しておきます。教えてえらい人。
0xff 0x24 =sfr 0xf0 0x27 =sfr 0xfa 0x2a =sfr :port ;l ;cnt 0x0c 0x28 =sfr 0xf0 0x2b =sfr 0xff 0x25 =sfr :scan1 0x09 0x28 =sfr 0xf0 0x2b =sfr 0xff 0x25 =sfr :scan2 0x03 0x28 =sfr 0xf0 0x2b =sfr 0xff 0x25 =sfr :scan3 0x07 0x28 =sfr 0xe0 0x2b =sfr 0xff 0x25 =sfr :scan4 cnt 1 + =cnt cnt 300 == { l ++ dup =l 6 == { 0 =l } if . l { scan1 scan2 scan3 scan4 scan3 scan2 } of 0 =cnt } if =cnt :scan port 0 =l 0 =cnt { scan } interrupt @c . :main