アドレスが出ていないのはCS4#の配線ミスでした。隣りのCS5#につないでいた。
つなぎ直してちゃんと動きました。
プログラム側で必要なのは、A0-A19をI/Oポートのレジスタで出力にしておくこと と、エリア4-7はBSC_CSCRでCS#の出力をすること。エリア0-3はI/Oポートで出 力を設定する。
H8とSRAM(M68AF127BM55)の配線について。
増設したSRAMのテストプログラムは...
モード5(1MBモード)で起動するとバス幅8bitなのでBSC_ABWCRの設定はなくても いい。BSC_ASZTCRの設定もデフォルトの3ステートでよければそのままでもいい。
1列の連結ソケットが手に入ればよかったのだけど、探せなかったので二列の端を 切って使っています。
これはCS5につないで合計256KB増設しました。


ここでこのままがつがつ進めていきたいところだけど、グッと押さえて開発機 を開発するまでの環境を整備。例によって廃棄PCケースから切り出した鉄板で ケースを作りました。ここまでやっておかないとターンアラウンドタイムにイ ライラすることになる。プラプラした接点が外れてハンダ付けなんてことにも なるし。

ちょっと変わったケースの展開なのは、ひっくり返すとそのまま基盤のハンダ 付け作業ができるように、こうしてみました。
VccとGNDはCPUボードを囲むように最初からスズメッキ線で配線しておくべきだっ た。プルダウンとかプルアップの時にとても使う。

この開発機についているおびただしい量のスイッチは、断腸の思いでこれから 取り外しました。

コナミの必殺技コマンダーをHORIのジョイスティックに組みこんで、プログラム用のスイッチや同時押しボタンを付けたもの。これで、龍虎の拳の超必殺技もボタン一発!という「テクの無さはマシンでカバー」という僕のモットーを具現化した ジョイスティック。
せっかく作ったし...と、捨てずに残しておいたのだけど、もう使うこともない しね。
ちょっと名残り惜しいので写真に残しておきます。

プログラム側で必要なのは、A0-A19をI/Oポートのレジスタで出力にしておくこと と、エリア4-7はBSC_CSCRでCS#の出力をすること。エリア0-3はI/Oポートで出 力を設定する。
H8とSRAM(M68AF127BM55)の配線について。
- E2->CS, E1#->CS#, W#->WE#, G#->OE#。
- CS#(E1)とCS(E2)はANDでつながっているので、CSはVcc5Vに7Kでプルアップ 固定、CS#をH8のCS#に直結する。
- 8bitアクセスなのでHWRとWE#(W#)を直結。SRAMのDQ0-DQ7をH8のD8-D15に直結。
- H8のRD#とOE#(G#)を直結。
- アドレスラインはSRAMのA0-A16をH8のA0-A16に直結
- H8側からのCS#もプルアップしてSRAMに接続。バスステートコントローラの参考例でプルアップしてる。端子的には最大2mA。5V、1mAで5KΩ、ここは7KΩにしておきました。(E2のプルアップも)
増設したSRAMのテストプログラムは...
モード5(1MBモード)で起動するとバス幅8bitなのでBSC_ABWCRの設定はなくても いい。BSC_ASZTCRの設定もデフォルトの3ステートでよければそのままでもいい。
void check_ram (uint32_t, uint32_t);
#define BSC_ABWCR ((volatile uint8_t *)0xfffec)
#define BSC_ASTCR ((volatile uint8_t *)0xfffed)
#define BSC_WCR ((volatile uint8_t *)0xfffee)
#define BSC_WCER ((volatile uint8_t *)0xfffef)
#define BSC_BRCR ((volatile uint8_t *)0xffff3)
#define BSC_CSCR ((volatile uint8_t *)0xfff5f)
#define ADDR1M_AREA4_START 0x80000
#define ADDR1M_AREA5_START 0xa0000
#define ADDR1M_AREA_SIZE 0x20000
void
extram_area_init (int area)
{
uint8_t r = 1 << area;
*BSC_CSCR |= r; // enable CS#
*BSC_ABWCR |= r; // 8bit access (data bus: D8-D15)
*BSC_ASTCR &= ~r; // 2-state access (can't insert wait-state)
}
void
extram_init ()
{
#define MDCR (volatile uint8_t *)0xffff1
extram_area_init (4);
extram_area_init (5);
// Set address line (A0-A19) output.
P1->DDR = 0xff;
P2->DDR = 0xff;
P5->DDR = 0xff;
delay (100000);
SCI_PRINTF ("hello world. mode=%x\n", *MDCR);
check_ram (ADDR1M_AREA4_START, ADDR1M_AREA_SIZE);
check_ram (ADDR1M_AREA5_START, ADDR1M_AREA_SIZE);
while (/*CONSTCOND*/1)
asm volatile ("sleep");
}
int
rand ()
{
static int r = 1;
r = r * 1103515245 + 12345;
return r & 0x7fffffff;
}
int
__mulsi3 (uint a, uint b)
{
int r = 0;
while (a)
{
if (a & 1)
r += b;
a >>= 1;
b <<= 1;
}
return r;
}
void
check_ram (uint32_t start, uint32_t size)
{
uint32_t end = start + size;
uint8_t *page;
int i, chunk, x;
uint32_t s;
SCI_PRINTF ("Checking RAM...0x%x size %dKB\n", start, size/1024);
for (chunk = size; chunk > 2; chunk >>= 1)
{
SCI_PRINTF ("test chunk %d...", chunk);
for (s = start; s < end; s += chunk)
{
page = (uint8_t *)s;
x = rand ();
for (i = 0; i < chunk; i += 4)
*(volatile int *)(page + i) = (x ^ i);
for (i = 0; i < chunk; i += 4)
if (*(volatile int *)(page + i) != (x ^ i))
goto bad;
x = rand ();
for (i = 0; i < chunk; i += 4)
*(volatile int *)(page + i) = (x ^ i);
for (i = 0; i < chunk; i += 4)
if (*(volatile int *)(page + i) != (x ^ i))
goto bad;
}
SCI_PRINTF ("OK\n");
}
SCI_PRINTF ("success.\n");
return;
bad:
SCI_PRINTF ("failed.\n");
return;
}
もう一つSRAMモジュールを作りました。連結ソケットを使って亀の子にできるようにしてあります。CS#だけパターンカットして別配線に。それ以外のラインは共有できるので、亀の子していけばさらに増設できます。
1列の連結ソケットが手に入ればよかったのだけど、探せなかったので二列の端を 切って使っています。
これはCS5につないで合計256KB増設しました。


ここでこのままがつがつ進めていきたいところだけど、グッと押さえて開発機 を開発するまでの環境を整備。例によって廃棄PCケースから切り出した鉄板で ケースを作りました。ここまでやっておかないとターンアラウンドタイムにイ ライラすることになる。プラプラした接点が外れてハンダ付けなんてことにも なるし。

ちょっと変わったケースの展開なのは、ひっくり返すとそのまま基盤のハンダ 付け作業ができるように、こうしてみました。
VccとGNDはCPUボードを囲むように最初からスズメッキ線で配線しておくべきだっ た。プルダウンとかプルアップの時にとても使う。

この開発機についているおびただしい量のスイッチは、断腸の思いでこれから 取り外しました。

コナミの必殺技コマンダーをHORIのジョイスティックに組みこんで、プログラム用のスイッチや同時押しボタンを付けたもの。これで、龍虎の拳の超必殺技もボタン一発!という「テクの無さはマシンでカバー」という僕のモットーを具現化した ジョイスティック。
せっかく作ったし...と、捨てずに残しておいたのだけど、もう使うこともない しね。
ちょっと名残り惜しいので写真に残しておきます。

