○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が点灯しました。




▲トップページ > マイコンなど