参考
いろいろ注意
- 過去ログを見よ!!!
- いろいろおかしいが、これを直接使う訳では、ないので[よし]
- このペースだと、ややヒット
結果
=================================
=================================
*[a]ddress input/outupt start address
[i]nput input dump (stop ctrl + z)
[l]ist output dump
[n]ew reset ram clear
*[r]eset run execution (no ram clear)
[s]ave save eeprom
[g]et load eeprom
[b]ye exit system
=>i
!!input
input text
1 2 3 4 5 6 7 8 9
[1 2 3 4 5 6 7 8 9]
=================================
=================================
*[a]ddress input/outupt start address
[i]nput input dump (stop ctrl + z)
[l]ist output dump
[n]ew reset ram clear
*[r]eset run execution (no ram clear)
[s]ave save eeprom
[g]et load eeprom
[b]ye exit system
=>l
!!list
input binary
add +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
0000 01 02 03 04 05 06 07 08 09 09 0A 0B 0C 0D 0E 0F
0010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0070 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0080 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0090 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00A0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00B0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00D0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00E0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
=================================
=================================
*[a]ddress input/outupt start address
[i]nput input dump (stop ctrl + z)
[l]ist output dump
[n]ew reset ram clear
*[r]eset run execution (no ram clear)
[s]ave save eeprom
[g]et load eeprom
[b]ye exit system
=>
プログラム
//Z80_monitor_menu09
//インクルド
#include <Arduino.h>
#include <EEPROM.h>
//定義
//メモリーエリアの確保
unsigned char RAM[256] = {0xff,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
char str1[256 + 1] = {
"01 02 0A\n"
"FF"
};
//定義 メニュー用
char menu1[] = {"\n"
"=================================\n"
"=================================\n"
"*[a]ddress input/outupt start address\n"
"[i]nput input dump (stop ctrl + z)\n"
"[l]ist output dump\n"
"[n]ew reset ram clear\n"
"*[r]eset run execution (no ram clear)\n"
"[s]ave save eeprom\n"
"[g]et load eeprom\n"
"[b]ye exit system\n"
"=>"
};
//char menu1[] = ">"; //debug
//0 1 2 3 4 5 6 7 8 9 A B C D E F
char t[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //00
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //10
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //20
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0, //30
0, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, //40
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //50
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //60
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //70
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //80
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //90
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //A0
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //B0
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //C0
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //D0
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //E0
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 //F0
};
int dump_in(unsigned char *p, unsigned char *d) {
// Your code here!
int i = 0; //カウンター 入力文字
int l = 0; //カウンター 出力バイナリ
int a; //一時領域
int g; //一時領域
while (1) { //無限ループ
//読み飛ばし
//構造化プログラミング先読み
a = p[i]; //読み出し
while ((t[a] == 0) && (a != '0') && (a != 0)) {
i++;
a = p[i]; //読み出し
} //while
if (a == 0) break; //終端文字の時は、ループを抜ける
//-------------------------------------
//16進の間
//構造化プログラミング先読み
a = p[i]; //読み出し
g = 0;
while ( ((t[a] != 0) || (a == '0')) && (a != 0)) {
g = (g << 4) + t[a];
i++;
a = p[i]; //読み出し
} //while
d[l] = g;
l++;
if (a == 0) break; //終端文字の時は、ループを抜ける
} //while 0
return (l);
} //dump_in
void dump_out(unsigned char *dump1, int num) {
// Your code here!
char *b = "0123456789ABCDEF"; //16進の変換テーブル
int k = 0; //アドレスのカウンター
//ヘッターの表示
Serial.println("add +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F");
if (num == 0) return;
for (int i = 0; i < (((num - 1) / 16) + 1); i++) { //行のループ
//アドレスの表示
Serial.print(b[k >> 12 ]); //上位4ビットを表示
Serial.print(b[k >> 8 & 0x0f]); //12ビット目から4ビット
Serial.print(b[k >> 4 & 0x0f]); //8ビット目から4ビット
Serial.print(b[k & 0x0f]); //下位4ビットを表示
Serial.print(' ');
for (int j = 0; j < 16; j++) { //列のループ
//データの表示
int a = dump1[k++];
Serial.print(b[a >> 4 ]); //上位4ビットを表示
Serial.print(b[a & 0x0f]); //下位4ビットを表示
Serial.print(' ');
} //for j
Serial.println(); //改行
} //for i
} //dump_out
//初期化
void setup() {
//シリアルポートの初期化
Serial.begin(9600);
Serial.print(menu1); //メニューの表示
} //setup
//メインループ
void loop() {
if (Serial.available() > 0) { // 受信したデータが存在する
char ch1 = Serial.read(); // 受信データを読み込む
Serial.println(ch1); // 受信データを送りかえす
if (ch1 == 'a') { //add
Serial.println("!!add"); //debug
} else if (ch1 == 'i') { //input
Serial.println("!!input"); //debug
Serial.println();
Serial.println("input text"); //debug
int i = 0;
while (1) { //無限ループ
if (Serial.available() > 0) { // 受信したデータが存在する
char ch = Serial.read(); // 受信データを読み込む
if (ch == 26) { //STOP
str1[i] = 0;
break;
}
str1[i++] = ch;
Serial.print(ch); // 受信データを送りかえす
} //endif
} //while
//16進テキストをバイナリーに変換
//unsigned char p[]="01-02-0A";
Serial.println(); //debug
Serial.print('['); //debug
Serial.print(str1); //gebug
Serial.print(']'); //debug
Serial.println(); //debug
int num = dump_in(str1,RAM);
} else if (ch1 == 'l') { //list
Serial.println("!!list"); //debug
Serial.println();
Serial.println("input binary"); //debug
dump_out(RAM,256);
} else if (ch1 == 'n') { //new
Serial.println("!!new"); //debug
str1[0] = 0; //文字列の初期化(クリアー)
} else if (ch1 == 'r') { //run
Serial.println("!!run"); //debug
} else if (ch1 == 's') { //save
Serial.println("!!save"); //debug
int i = 0;
while (str1[i] != 0) {
EEPROM.write(i, str1[i]); //EEPROMへの書き込み
i++;
} //while
EEPROM.write(i, 0); //EEPROMへの書き込み
} else if (ch1 == 'g') { // get
Serial.println("!!load"); //debug
char ch;
int i = 0;
do {
ch = EEPROM.read(i); //EEPROMからの読み込み
//ch = 0; //debug
str1[i] = ch;
i++;
} while (ch != 0); //while
} else if (ch1 == 'b') { //bye
Serial.println("!!bye"); //debug
while (1) {}; //無限ループ
} //endif
Serial.print(menu1); //メニューの表示
} //endif
} //loop