Icalus Verilog を試した

すぐに使えたが、1画面のシミュレーションが遅く使い物にならないことがわかった。ModelSim の 1/16 ぐらいの速度。残念ながら今回の目的には不採用。Verilator にするのが一番のようだが、 SystemC を習得しないと使いこなせないのでちょっと保留。今回は 8…

SDRAM 接続メモ

memory control signal dqm[1] = ube dqm[0] = a0 dq[15:0] = ad[15:0] (メモリコントローラのインタフェースは ad から d だけにして、入力出力も別ける) refresh 64ms/4096times, 18.176ms/1163times on 64MHz, 6 clock/ 1 refresh, 6978 clock. 1line 0x1…

uPD70116 byte order

UBE と A0 が bytemask になる。比較用に68000の UDS, LDS も書いておく。 /UBE A0 Databus|UDS LDS Databus word |0 0 D15:0 |0 0 D15:0 byte even|1 0 D7:0 |0 1 D15:8 byte odd |0 1 D15:8 |1 0 D7:0 little endian と big endian の違いはこれでよかった…

キャラクタROMの容量減らし

lineview から出している画は、エミュレータから VRAM をダンプしてそれを作成中の互換回路に読み込ませて同じ画が出るか確認する。座標とか色を管理する VRAM のサイズはたいしたことがないのだが、キャラクタ ROM のサイズはそれと比較すると大きくて 1MB …

tile 修正

キャラクタROMのアドレスのMSBがつながってなかった。その関係でおかしくなってた。そんだけ。スプライトの座標とか変なキャラがあるわな...

sprite renderer

NSL

tile の場合は 1chip 分, 8dot 一気にラインバッファへ書き込みが出来るのだが、sprite の場合は 1dot 単位で attribute の color とキャラを書く必要がある。1dot ずつちまちま描画を行っても良いのだが、時間がかかるので1度に 2dot 書き込みを行う実装に…

sprite 実装完了

昨日の状態からキャラクタ ROM とパレット RAM をつないだらわりとうまくいったので、手直しをした。そのあと sprite 単体から tilemap をつけて一通り完了。video を一通り実装したので、今回の目的は達成できたのでおしまい。 sprite 仕様関連 キャラクタ …

sprite 関連

attribute から位置とサイズだけ取って出力してみた。1発とはいかないがわりと少ないリトライ回数で実装できている。attribute ダンプとかキャラクタROM抜き出しツールとかテスト環境のコーディングに時間がかかってる感じ。それが普通だと最近理解し始めた.…

tilemap renderer

NSL

video_tilemap.nsl は結構長いのではしょってはっつける。 module tilemap_renderer{ reg offset_x[9] = 9'd0; reg llayer = 0; //0:tilemap#0 1:tilemap#2 wire scroll_y[3]; reg vram_aa[22]; reg vram_ce; reg lb_latchh; reg flip_x; reg priority[2]; r…

video_main

NSL

video_main モジュールは下記のサブモジュールを管理する、ビデオ処理の中枢である。 video_timing: 座標の生成, 同期信号の生成, ライン内カウンタ tilemap_renderer: VRAM からデータを取得し、ラインバッファへ処理を送る tilemap_linebuffer: tilemap_re…

某ハード互換 HDL を書き始める

主流のプロジェクトをやろうにも迷走してるので、切り換えと息抜きを兼ねてやってみる。なので、今回だけ書いて終わりかもしれない。 main CPU memory map と RAM の配置 memory address assignment - SRAM 00000h-3ffffh CPU ROM SRAM 40000h-43fffh CPU RA…

68000 と Interrupt Acknowledge Cycle

tv80 (Z80) でいくら割り込みをかけても音がなってくれなかったのは M1 と IORQ から発生される Interrupt Acknowledge Cycle を無視していたということが判明してから、その重要性をしった。恥ずかしい。68000 でのその関係性を調査しつつ、 TG68 で調査し…

68020 とメモリのつなぎ方

Twitter で Ki さんが 68000 と PCM 音源を使った CPU ボードを設計するとのことで冗談で 68000 より小さいから 68EC020 にしろといったところ本当に EC020 を検討し始めた。ちゃんと読んでなかった 68020 のつなぎ方の記事を読んでたら自分もおもしろくなっ…

MMC/SDC 関連

ある程度しっかりした文章を作りかけて、放置してしまったので雑多に箇条書きにしてごまかす。SD カードの write コマンド関連: CMD24: WRITE_BLOCK は遅くて実用的ではない CMD25: WRITE_MULTIPLE_BLOCK だけを使う(open-ended)と処理時間は CMD24 とほぼ同…

はません 反省会

837 名前:どうですか解説の名無しさん 投稿日:2012/04/22(日) 20:29:10.49 ID:GuvG4xM6 [29/34] ラスト村田873 名前:どうですか解説の名無しさん 投稿日:2012/04/22(日) 20:30:42.60 id:XReQzQPX 最下位脱出かかってるから覗いてみたが、おまえらケデブ…

うーん

ハードが山を越えたのに、ソフトがやることが多いし、優先度の高い不具合が直らず詰まってしまった...

シフトレジスタのほう

state も表示するようにして、こんな感じにとれるようになった。 word アクセスをすれば 16bit 取ってくるということもできるんだが、メモリウェイトの時間は2倍になるし、74LVX4245 が余分にいるので今回は 8bit アクセス固定にした。いちおうミラーアドレ…

MC68000 read/write cycle

SD カードを SPI モードでつなぐが、シリアルの clock や data を 1bit ずつソフトでやるのは時間がかかるので自動的に 8bit のデータを取れるようにする回路を作った。(以前も作ったので作り直し)シミュレーション上ではうまくいくのにちゃんと動かないので…

キャラクタの回転

8x8 dot の文字を回転する処理を動的にやる場合に必要で、1bit ずつ rotate や and をやりまくってたんだが、書籍「ハッカーのたのしみ」に使えそうなのを見つけたので記載。 begin a = 0b1111_1110 a, b が F の文字のキャラを 32bit ずつ持ったもの。a が…

d16(An) の記述方法

C

bitswap (データバスのビットを不規則に交換する)をソフトでやらせると必然的に命令が大量のものになり、10MHz の CPU にやらせるのは現実的ではないと判断した。そこでハードウェアで代替処理をやらせる。 moveq #1,%d1 and.l %d2,%d1 moveq #15,%d0 lsl.l …

V1 ColdFire IP core

前述の m68k 関連のソースで ColdFire の記述がでてくるので検索してみた。Cyclone III 限定だが "$0 licensing fee and $0 royalty for the core" で使えるようになっている。 http://www.altera.co.jp/devices/processor/freescale/coldfire-v1/m-fre-cold…

m68k-*-gcc 関連

最新の gcc のクロスコンパイラを作ろうかと思ったが、やはり面倒そうなのであきらめた。2点ほどおもしろそうなところがあったので記載する。 GO google が作ったプログラミング言語。登場時は割と話題に上がったがそれっきりというのが私の認識。gcc のサポ…

ぷち fatfs を PC 上で試してみる

C

組み込み機器用のミドルウェアであるぷち fatfs (以下、pff) は移植性の高いソースとなっており、 fat のディスクイメージを用意すれば PC 上でも簡単に動作を確認することができます。 PC 上で動かす利点 一見遠回りする感がありますが、ターゲット上でのデ…

RAM テストソース

C

static bool ram_fill(uint32_t *ram, int size, uint32_t d) { uint32_t *r = ram; int s = size; while(s != 0){ *r++ = d; *r++ = d; *r++ = d; *r++ = d; s -= 4; } while(size != 0){ int result; result = *ram++ == d; result &= *ram++ == d; result…

SRAMコントローラ

nsl

コネクタのピンが足りないので、データバス16bitとアドレスバス16bitを1つの線で共有する方式にした。これは元から CPU がその方式だったことが大きい。 declare ohram_controller{ input cpu_a[21]; input cpu_select, cpu_rw; input cpu_d[16]; output cpu…

電子回路の CAD 部品

仕事で使ってる CAD がすごい年代物で操作性が悪すぎる。それでもそれを使えと言うんで、データファイルをみたら単純なテキストファイルでプロットしていることがわかった。だったらパラメータを元に自動生成した方が早いんじゃないのということでプログラム…

PSコントローラ関連

シミュレーションではちゃんと動くが、実機につないでロジックアナライザで解析したらなんか微妙だったので結局 Verilog で書き直した。今までの作り直しということもあるが、概ね1時間ぐらいできてしまったので、生産性は今のところは Verilog のほうが高い…

8086 コードが出せるコンパイラその2

Open Watcom ロングファイル名が使用可能 za99 オプションをつけたら途中変数宣言が使えた! リンカを調べると、リンカスクリプトがないみたいで、.exe とか .com を作るのみっぽい リンカが微妙なんだが、 .com を適当に動かせば何とかなる気はしてきた。な…

8086 コードが出せるコンパイラ

uPD70116 をつけるボードが完成しつつあるので、今後のことも考えて 8086 からSDカードを読めるようにしておかなければならない。ということで 2011 年なのにセグメントに悩ませる時代遅れの C コンパイラを探すことになった。 LSI-C86 試食版 DOS 時代から…

Deadfox

ファミコンのゲーム。小学生の頃、ファミコンを持ってないぼくはおもちゃ屋の店頭でタダで遊べるからとよくやりに行ったゲームだ(当時はパクリなんて知らなかった)。なんか急に3,4面のBGM,アクトレイザーで言うところのマラーナっぽいやつが聞きたくなったの…