○ROMで遊んでみる
ROMは不揮発性でプログラムやデータの格納場所・・・・
と本などには書かれているが、現実感が沸かないですよね
実際にどのようにデータを取り出すのか見てみたいと思います
手元にあった、27C256を使ってみたいと思います
27C256
■端子の意味を調べると
Vと2文字の接尾語で表される端子は電源であり、トランジスタの端子に関係しているらしい
VssはFETなどのソース端子と説明されているサイトを発見
そこから推測するにVDDはFETのドレイン端子だと思われる
Vccはバイポーラトランジスタのコレクタ端子らしい
Vppはなにかわかんないけど、雑誌などの回路図から、プラス電極らしい。
CS:チップセレクト ONの時チップが動作する
OEがONの時内部の情報を出力する
雑誌などの回路図を見るとCSとCEが同じピン位置だから同じ意味っぽい。
O0〜O7はデータ
A0〜A14はアドレス
■回路の作成
A0〜A14に2進数でアドレスを渡すと、O0〜O7に2進数でデータが返ってくる感じですから
アドレス端子がふらつかないようにマイナスに吊ります
データ端子に発光ダイオードを付けます
▼実際に作成された回路
■ROMへの値の書き込み
ROMへ書き込むデータの作成はINTEL HEXファイルを手で作成・・・・
と思ったのですが、めんどくさそうだったのでZ80のアセンブラを使うことにしました
Z80アセンブラでデータを生成できる命令を探すと
文字列をメモリ上に書き込む命令DEFBを発見、早速書き始めます
▼ROMに適当な文字列 ABCDEFG abcdefg を書き込むため
Z80のアセンブラ
ORG 00H
DEFB "ABCDEFG abcdefg"
END
▼上のファイルをXA80でアセンブルしました
生成されたINTEL HEXファイル
ROMの先頭からAの文字コード0x41が書かれるということが確認できます
:0F00000041424344454647206162636465666739
:00000001FF
▼生成されたHEXファイルをライタでROMに書き込みます
ROMの中では次の表のようになるはずです
------------------------------------------------
ROMのアドレス | 書き込んだ値
------------------------------------------------
16進 2進表現 | 文字 16進 2進表現
------------------------------------------------
0x00 0000 | A 0x41 01000001
0x01 0001 | B 0x42 01000010
0x02 0010 | C 0x43 01000011
0x03 0011 | D 0x44 01000100
0x04 0100 | E 0x45 01000101
0x05 0101 | F 0x46 01000110
0x06 0110 | G 0x47 01000111
0x07 0111 | スペース 0x20 00100000
0x08 1000 | a 0x61 01100001
0x09 1001 | b 0x62 01100010
0x0A 1010 | c 0x63 01100011
0x0B 1011 | d 0x64 01100100
0x0C 1100 | e 0x65 01100101
0x0D 1101 | f 0x66 01100110
0x0E 1110 | g 0x67 01100111
------------------------------------------------
■回路に書き込まれたROMをセットして電源をセットします
ROMのアドレス端子を2進表現に従い端子をプラスでショートさせると
上記の表の2進数表現どうりにLEDが点灯しました。
▲トップページ
>
マイコンなど