SSブログ
English Version

PIC24FJ64GAでGAME言語 ^^ [PIC]

 以前、CASIO製ポケットコンピュータ FX-890用に作ったGAME言語 をPIC24FJ上で動かしてみました(PIC24FJ64GAの「GA」はGAMEのGA?w)
 ポケコン版ではポケコン内蔵のBASIC用エディタを利用していたので今回エディタ機能の追加とポケコンのCPUがインテル86系でセグメント対応処理があったのでこの部分を変更しました。もともとC言語でスクラッチで作成したものなので簡単に移植できると思っていましたが、想像以上に時間がかかってしまいました(この土日の二日間^^;;)。

 上記のリンクで書いているようにポケコン版では

【実行速度】

 同包の素数を求めるプログラム SAMPLE1.BAS SAMPLE1.G で500以下の素数を求め
た時の実行速度は

  +-------------------------------+
  |   環  境   |  実行時間      |  速度比  |
  +-------------------------------+
  |内蔵のベーシック  | 2分56秒(176秒)|  1.00 |
  |G-CODE       | 1分50秒(110秒)|  1.60 |
  |G-CODE(コンパイル後)|   17秒      | 10.40 |
  +-------------------------------+

 で、コンパイルするとFXに内蔵のベーシックの約10倍程度の速度になります。

でしたが、今回のPIC24FJ版ではインタープリッタ上の動作で 約4秒で終了し、ポケコンでのコンパイル後のものより更に4倍速い速度でした ^^

 GAME言語に関する情報は上記のリンクやインターネット上の情報(思ったより少ないですね)を参照してください。

 今回のPIC24FJ64GA版では
  1. PCとのシリアル通信にはUSARTを使用し、19200bps、8bit、パリティ無しで接続するようにしました。
    • RP8:RX(受信) 17番ピン
    • RP9:TX(送信) 18番ピン
  2. 受信側は割込みで処理しているのでGAMEソースをteratermからペーストできます(PIC上のエディタでも編集できますがPIC内のRAM上で処理しているので電源を切ると消えます)
  3. ポケコン版では削除した下記のコマンドを復活させました
    コマンド操作内容
    ==$xxxx ソース保存RAMエリアの変更(xxxxはヘキサ表現で0x1000以上)
    == ソース保存エリア変更後のソースエンド変数(&)のアップデート
    ??== ソース保存RAMエリアの確認
    &=0 ソースクリア(BASICでのnewコマンド相当)・・確かこの操作だったはず
    ??=* 使用可能RAMエリアの上限の確認
    *=$xxxx 使用可能RAMエリアの上限の変更
    dddd/ dddd行以降のリストを表示(0で全リスト表示)
    ※画面に出力中にスペースキー押下で一時停止、コントロールCで中断、入力中にコントロールXで全入力をキャンセルします
    ★2015/08/17追記 「List from」コマンドを「dddd-」から「dddd/」に変更(オリジナルのGAME言語に合わせた)

 下記はGAME言語立上げ後に添付している素数を求めるGAME言語プログラムのロード(teratermでコピペ)、list表示及び実行操作のサンプルです(水色文字が入力部です)
 最後のダンプはメモリ上のソースの状態です(オリジナルのGEME言語にはありませんでしたが行先頭に行のバイト数情報を追加しています)

GAME interpretor in PIC24FJ64GA Ver 0.01 2015/07/19 by Skyriver   
:1' sosuu
:10 "Input Max:" M=?
:20 C=0 ;=M>1 I=2 !=1000
:30 I=3,M
:40  J=2,I-1
:50   ;=%(I/J)=0 J=I+1
:60  @=J+1
:70  ;=J=I !=1000
:80 @=I+2
:90 /"Answer is " ?=C $=7
:100  #=-1
:1000 C=C+1 /"No" ?(3)=C ":" ?(5)=I
:1020 ]
:0
    1' sosuu
   10 "Input Max:" M=?
   20 C=0 ;=M>1 I=2 !=1000
   30 I=3,M
   40  J=2,I-1
   50   ;=%(I/J)=0 J=I+1
   60  @=J+1
   70  ;=J=I !=1000
   80 @=I+2
   90 /"Answer is " ?=C $=7
  100  #=-1
 1000 C=C+1 /"No" ?(3)=C ":" ?(5)=I
 1020 ]

:#=1
Input Max:500
No  1:    2
No  2:    3
No  3:    5

 途中省略

No 94:  491
No 95:  499
Answer is 95
:/"source dump" a== i=0,7 / ??=a " :" j=0,15 " " ?$=a:0) a=a+1 @=j+1 @=i+1  

source dump
1000 : 0B 01 00 27 20 73 6F 73 75 75 00 15 0A 00 20 22
1010 : 49 6E 70 75 74 20 4D 61 78 3A 22 20 4D 3D 3F 00
1020 : 19 14 00 20 43 3D 30 20 3B 3D 4D 3E 31 20 49 3D
1030 : 32 20 21 3D 31 30 30 30 00 0A 1E 00 20 49 3D 33
1040 : 2C 4D 00 0D 28 00 20 20 4A 3D 32 2C 49 2D 31 00
1050 : 17 32 00 20 20 20 3B 3D 25 28 49 2F 4A 29 3D 30
1060 : 20 4A 3D 49 2B 31 00 0B 3C 00 20 20 40 3D 4A 2B
1070 : 31 00 12 46 00 20 20 3B 3D 4A 3D 49 20 21 3D 31
:

PIC24FJ版GAME言語(HEXファイル)とサンプルの素数プログラムは下記のリンクからどうぞ
  • PIC24FJGAME_001.zip

★2015/07/25 これからもアップデート予定ですが、メモリ配列で奇数番地からwordアクセスでリセットするので対策版にアップデート
★2015/07/26 最新版はその3からダウンロードして下さい。

★追記 2015/09/21 回路図例を追記
 回路は下記のようなごく一般的な接続です(内部クロックを使用)
 シリアル接続は RP8:RX(受信)17番ピン、 RP9:TX(送信)18番ピン になります。
 シリアルモード : 19200bps、8bit、パリティ無し、Stopビット:1

PIC24FJ64GA002 回路例

[ 前へ ] 連載記事 [ 次へ ]
nice!(0)  コメント(0)  トラックバック(10) 
共通テーマ:趣味・カルチャー

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 10