フォト
2017年5月
  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      
無料ブログはココログ

« ココログでソースリストに行番号表示を試してみたのですが.. | トップページ | 2台のarduinoをI2Cバスで接続して通信を行う実験(2) »

2015年7月 5日 (日)

仮想アドレスの実アドレスを調べるプログラム

Ichiojamのファームウェアが更新されるたびに手作業で調べていたのですが、
C言語からプロラムカウンタ(PC)の値を読む方法が分かったので、調べるプロラムを作成しました。

現時点の最新版(1.0.2b2)では下記の通りになります。

01

プログラムから取得できるので、アドレスがバージョンにより異なる問題は、
プログラムで回避できそうです。

プログラムは下記の内容となります。

10 POKE #700,#78,#46,#80,#b2,#70,#47
20 POKE #710,#80,#20,#c0,#01,#05,#4b,#02,#68,#9a,#42,#04,#d0,#a0,#23,#04,#30
30 POKE #720,#db,#01,#98,#42,#f6,#d1,#80,#b2,#70,#47,#c0,#46,#55,#AA,#55,#AA
40 U=USR(#700,0)-4
50 S=USR(#710,0)-16
110 ?"MEMORY MAP"
125 ?"#000 CHR 0x0000";HEX$(S,4)
130 ?"#700 PCG 0x1000";HEX$(U,4)
140 ?"#800 VAL 0x1000";HEX$(U+#100,4)
150 ?"#900 VRM 0x1000";HEX$(U+#200,4)
160 ?"#C00 PRG 0x1000";HEX$(U+#500,4)

 

IchigoJam BASICだけでは無理なのでC言語で実装した下記のプログラムを呼び出しています。
10行から30行がコンパイルしたコード(マシン語)です。

#include "lpc_types.h"
uint16_t usr_asm(uint16_t c) {
	uint16_t* adr;
	asm (
			"mov %0,pc \n"
			:"=r"(adr)
			:
	);
	return (uint16_t)adr;
}

uint16_t usr_asm2(uint16_t c) {
	uint32_t* adr;
	for (adr=0x00004000; adr < 0x00005000; adr++) {
			if (*adr == 0xaa55aa55)
			break;
	}
	return (uint16_t)adr;
}

« ココログでソースリストに行番号表示を試してみたのですが.. | トップページ | 2台のarduinoをI2Cバスで接続して通信を行う実験(2) »

IchigoJam」カテゴリの記事

コメント

コメントを書く

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

トラックバック

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

この記事へのトラックバック一覧です: 仮想アドレスの実アドレスを調べるプログラム:

« ココログでソースリストに行番号表示を試してみたのですが.. | トップページ | 2台のarduinoをI2Cバスで接続して通信を行う実験(2) »