サイログ。

~雑多な記事置き場~

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