1
0

More than 3 years have passed since last update.

Ichigojam BASICでQuine

Last updated at Posted at 2021-01-30

はじめに

Ichigojam BASIC のテキストの格納方法を確認するついでに Quine しました。

コード

10 P=#C00
20 N=PEEK(P)+PEEK(P+1)<<8:Q=P+PEEK(P+2)+4:IFN?N;" ";ELSEEND
30 C=PEEK(P+3):P=P+1:IFC?CHR$(C);:GOTO30ELSE?:P=Q:GOTO20
実行結果
10 P=#C00
20 N=PEEK(P)+PEEK(P+1)<<8:Q=P+PEEK(P+2)+4:IFN?N;" ";ELSEEND
30 C=PEEK(P+3):P=P+1:IFC?CHR$(C);:GOTO30ELSE?:P=Q:GOTO20

Ichigojam webで実行

解説

Ichigojam BASIC のプログラムテキストは PEEK 関数で参照できる #C00 番地から格納されます。
行単位で格納され、行の先頭は常に 2の倍数アドレスに整列されます。行の先頭に

行番号の下位 8bit, 行番号の上位 8bit

が格納されており、行番号の値が 0 だとプログラムテキストの終了マークとなるようです。
行番号の値が 1以上だった場合行番号の後に

行のバイト数-4

が格納され、続いて行の内容がベタで格納されるようです。
行の最後に 0x00 が格納され、次の行の先頭は 2の倍数アドレスに整列されるので必要に応じて更に 0x00 が格納されるようです。

おわりに

おわりです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0