フォト
2017年3月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
無料ブログはココログ

« IchigoJamでFizzBuzz | トップページ | IchigoJamでDVR8830を使ったロボットカー制御(2) »

2015年6月12日 (金)

IchigoJamの仮想アドレスの実アドレス

2016/03/31 追記
  この記事の内容は古いです。ファームウェアV1.1.β11以降では、USR関数の呼び出しで、
  マシン語プログラム側で実アドレスが取得可能となり、バージョンによる依存が無くなりました。

  => 関連記事:IchigoJamのマシン語呼び出しの機能追加の確認(ファームウェアV1.1β11)
      
IchigoJamでは、PEEK、POKE命令で、
VRAM、変数領域、プログラム領域、フォントデータ領域のアクセスが出来ます。
その領域のアドレスは仮想的なアドレスですが公開されています。

さらに、USR関数というマシン語(アセンブラコード)の呼び出しが出来る関数も利用できます。
ここでマシン語とはCPUが直接処理できる命令のことを言います。
このマシン語からVRAM、変数領域、プログラム領域、フォントデータ領域をアクセスする場合、
仮想アドレスではなく、実アドレスが必要となります。

この実アドレスをちょっと調べて見ました。次のような感じになります。
ただし、これはバージョン 1.0.0b16 の場合です。他のバージョンでは異なる可能性があります。
仮想アドレス                  用途                         実アドレス
#000-#6FF    キャラクターパターン #00-#DF (読取専用) 0x0000488c - 0x00004F8B
#700-#7FF    キャラクターパターン #E0-#FF            0x10000190 - 0x1000028F
#800-#8FF    変数[0]-[100]、A-Z                      0x10000290 - 0x1000038F   
#900-#BFF    画面(VRAM) 32x24                        0x10000390 - 0x1000048F
#C00-#FFF    プログラム領域             0x10000690 - 0x10000A8F

2015/06/19 追記
V1.0.1の実アドレスは次のようになります。
仮想アドレス                  用途                         実アドレス
#000-#6FF    キャラクターパターン #00-#DF (読取専用) 0x0000496c - 0x0000506B
#700-#7FF    キャラクターパターン #E0-#FF            0x10000188 - 0x10000287
#800-#8FF    変数[0]-[100]、A-Z                      0x10000288 - 0x10000387   
#900-#BFF    画面(VRAM) 32x24                        0x10000388 - 0x10000487
#C00-#FFF    プログラム領域             0x10000688 - 0x10000A87

実際にこの実アドレスをアクセスするマシン語(アセンブラコード)プログラムを作成し、
IchigoJamにて実行してみました。

注意:下記は1.0.0b16用です。
1 CLS
10 POKE #700,#0f,#4b,#c0,#00,#c0,#18,#0f,#4b
20 POKE #708,#0f,#4a,#1b,#88,#12,#88,#5b,#01
30 POKE #710,#9b,#18,#0e,#4a,#30,#b5,#9c,#18
40 POKE #718,#0d,#4a,#9a,#18,#00,#23,#80,#21
50 POKE #720,#19,#41,#05,#78,#29,#40,#00,#d0
60 POKE #728,#01,#21,#e1,#54,#01,#33,#08,#2b
70 POKE #730,#f5,#d1,#20,#34,#01,#30,#94,#42
80 POKE #738,#f0,#d1,#00,#20,#30,#bd,#c0,#46
90 POKE #740,#8c,#48,#00,#00,#92,#02,#00,#10
100 POKE #748,#90,#02,#00,#10,#90,#03,#00,#10
110 POKE #750,#90,#04,#00,#10 
120 [0]=0:[1]=0
130 FOR I=0 TO 255
140 U=USR(#700,I)
150 [0]=(I MOD 4)*8
160 [1]=(I/4 MOD 3)*8
170 IF I MOD 12=11 WAIT 5
180 NEXT
190 GOTO 120

注意:下記は1.0.1用です。 
1 CLS
10 POKE #700,#0f,#4b,#c0,#00,#c0,#18,#0f,#4b
20 POKE #708,#0f,#4a,#1b,#88,#12,#88,#5b,#01
30 POKE #710,#9b,#18,#0e,#4a,#30,#b5,#9c,#18
40 POKE #718,#0d,#4a,#9a,#18,#00,#23,#80,#21
50 POKE #720,#19,#41,#05,#78,#29,#40,#00,#d0
60 POKE #728,#01,#21,#e1,#54,#01,#33,#08,#2b
70 POKE #730,#f5,#d1,#20,#34,#01,#30,#94,#42
80 POKE #738,#f0,#d1,#00,#20,#30,#bd,#c0,#46
90 POKE #740,#6c,#49,#00,#00,#8a,#02,#00,#10
100 POKE #748,#88,#02,#00,#10,#88,#03,#00,#10
110 POKE #750,#88,#04,#00,#10
120 [0]=0:[1]=0
130 FOR I=0 TO 255
140 U=USR(#700,I)
150 [0]=(I MOD 4)*8
160 [1]=(I/4 MOD 3)*8
170 IF I MOD 12=11 WAIT 5
180 NEXT
190 GOTO 120

実行結果は次のような感じです。


マシン語からはIcigoJamの変数[0]、[1]の参照、VRAMへの書き込み、フォントデータ
の読み込みを行っています。

IcigoJamでUSR関数を使ってマシン語を実行すると高速な処理が行えます。


« IchigoJamでFizzBuzz | トップページ | IchigoJamでDVR8830を使ったロボットカー制御(2) »

IchigoJam」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/571408/61732717

この記事へのトラックバック一覧です: IchigoJamの仮想アドレスの実アドレス:

« IchigoJamでFizzBuzz | トップページ | IchigoJamでDVR8830を使ったロボットカー制御(2) »