ROMをメモリーブロックに移す

pp.256ff.

これまでROM (プログラムメモリー)は、15ビット×16本だけをLEで実装していたが、今度は15ビット×256本のROMをメモリーブロック上に作る。手順はROM: 1-PORTの使いかた -に示した。初期化データである.mifファイルを生成するためのアセンブラのようなものは、ここで作った。

下のようにfetch.vhdをROM: 1-PORTに置き換える。これで256ステップまでプログラムが組めるようになった。
f:id:ti-nspire:20210130091020p:plain:w700

コンパイルした結果、ちょうど15ビット×256本=3840ビットだけメモリーが消費された。
f:id:ti-nspire:20210130090831p:plain:w500

1~300の総和 = 45150 (0b 1011 0000 0101 1110)を計算してみる。

_[0] = ldh(REG0, 0) #レジスタ0 (総和の初期値)をクリアする。
_[1] = ldl(REG0, 0)

_[2] = ldh(REG1, 0) # レジスタ1に1 (増分)をセットする。
_[3] = ldl(REG1, 1)

_[4] = ldh(REG2, 0) # レジスタ2 (足す数の初期値)をクリアする。
_[5] = ldl(REG2, 0)

_[6] = ldh(REG3, 300 >> 8)     # レジスタ3に300 (ループ回数)をセットする。
_[7] = ldl(REG3, 300 & 0x00FF)

_[8] = add(REG2, REG1) # 足す数をインクリメントして、
_[9] = add(REG0, REG2) # それをここまでの総和に加算して、
_[10] = st(REG0, 64) # ここまでの総和をOUTポートに出力して、
_[11] = cmp(REG2, REG3) # 足す数==ループ回数であるなら、
_[12] = je(14) # ループを抜けるが、
_[13] = jmp(8) # そうでなければ加算を繰り返す。
_[14] = hlt() 

f:id:ti-nspire:20210130094959j:plain:w500