Hatena::ブログ(Diary)

naruko の開発メモ

2017年05月15日

出展してきました

今回珍しくハードウェア設計が出来る方がいらっしゃったので基板の設計について話をさせていただきました(実際の所聞いてもらっただけかも知れませんが...).

UperGrafx の基板を最初に作ってからもう1年半経過しておりまして、久しぶりにそういう話ができて開発のやる気が戻った気がします.

frame buffer 部の回路

先週部品選定してて確認していたのでここに書きます.

f:id:na6ko:20170515024002p:image

概要

  • frame buffer は 0x40000 word, 16bit databus の高速 SRAM を使用する
  • 本回路はピン数削減のため, databus 16bit と制御線5本で構成される
  • 制御線のうち2本で汎用ロジックICを制御し,databus 16bit から frame buffer の address bus を生成する

address bus 生成

  • address bus は下位12bitを 74161 x3, 残りを 74574 で制御する
  • 74161 は load で 12bit を任意に設定可かつ, counter を利用しシーケンシャルアクセスが可能
  • 74574 の CLK と 74161 の LOAD を同じ線にしているので全部のaddressを load する場合は 74161 -> 74574 の順番に行なう
  • address bus の配線は SRAM のピン配置に無関係で配線しやすい線に接続する

data bus 制御

  • bytemask pin は GND 固定にして 16bit access 専用
  • increment による address 更新から data が出てくる時間は 74LV161A の伝搬遅延と CY7C1041DV33 の read cycle の max 加算で 13.6 + 10.0 -> 23.6 ns

反省点

  • 74574 ではなく 74821 にすると 74161 を1つ減らせて基板の必要な表面積を減らせる. 74821 には LCX があるが定番ではないのでやや高い.
  • 設計当時は SRAM は frame buffer としてのみの利用を想定していたため, instruction RAM 兼用とした場合の都合に配慮できなかった.
  • 74161 は現在の新規設計としては定番の汎用ロジックでないため、最速がシリーズが LV...A で停まっている. カウンタである都合や LCX などに比べると伝搬遅延が多い.
    • 定番で早いシリーズが用意されているのは NOT, NAND, AND, OR, XOR の単純なゲートやバスバッファ(244,541)やバストランシーバ(245)とDラッチ(374,574)などに絞られる
    • カウンタ(161)やシフトレジスタ(164)などはそんなに早くないのでピン数を減らしてもスピードや表面積のトレードオフになる
  • 利用頻度が高い address の更新は 74161 を利用することになるので、 read / write cycle は 23.6 ns より早くすることはできない.
  • つまり 74574 は 74LV161A の伝搬遅延より遅くない 74VHC574 でも構わない.

2017年04月21日

upergrafx開発近況

CD-ROM2 の基本機能は大まかに下記がありまして大体実装しました. 回路規模は EP2C5 の9割でぎりぎりでした.

  • CD ドライブ制御 (仮想対応も含む)
  • ADPCM
    • RAM 制御
    • 音声更新頻度制御
    • 音声再生機能
  • fadeout

ADPCM はソースを書いて実機動作 1 回目で音声がでたので油断しておりましたが結構難しいです. 音声再生は MSM5205 がやっていてこれのデコードはそんなに難しくありません. 問題はこの IC はメモリ制御機能がないため、各自の周辺回路に依存いたします.RAM 制御機能はCD-ROM2 独自の機能であり重要度が高いです. しかし動作は複雑で資料があまりありません. いくつかあるPCEのエミュレータのソースコードは源流は1つだけのようでコアの部分はみんな同じでよくわかりません....

fadeout と更新頻度制御は時間管理,クロック分周などの回路で構造は難しくありませんが、クロック近似のために精度を出すと桁数が増えるので回路規模が大きくなりがちです. fadeout は乗算器もあります.

ボイス機能はある程度実装したのでボイス再生完了待ちで停まるような部分はなくなり、わりと遊べるソフトも増えてきました. その一方で途中で止まってしまうソフトも結構多く、どう対応していくか悩んでおります.

2017年03月27日

upergrafx開発近況

下書きとしてここに書いてましたが清書しました → http://www.upergrafx.com/cdrom2_ja

CD-ROM2 向けの開発以外にやること - discimage 管理

これは PC 向けのソフト開発が必要で協力していただける方がいれば手伝って欲しいです.

  • 実 CD の image 作成のソフト開発
  • 実メモリカードの制御で効率よく転送する方法

両方とも有用な資料の提供など相談や質問に乗っていただける方がいれば作業時間を縮めることが出来ると思っています.

CD image に関しては dump (subchannel Q とか Audio Data のバイトオーダーとか TOC の取得方法), メモリーカードに関しては filesystem なしで書き込む方法です.

メモリーカードの filesystem は書込みはイメージが完全に連続した状態を保証することが必須で, fat16/fat32 互換で読み込みもできたら便利かなと考えています. 現状では msys2 から /dev/sd* を fopen() して書いているのですが明らかに書込みが遅かったり fflush() をいれないと書込みミスするけどどれくらいの頻度でいれていいのかわからないし、そもそも /dev/sd* がない OS なんだけど... とかそういうことになっております...

再生産の準備が終わりましたら UperGrafx 内部の CD-ROM2 互換機能以外にもこれらのPC用ソフトの準備も必要です. 新機能の提供の作業は全体的に見ますと終わりは全く見えていない状態です.

2017年01月14日

ゴルフっ子オープンのイベントを出した

小夜ちゃんの出し方がわかったみたいですのでその命令周辺を調べました.

データの構造が専用のスクリプトデータになっているため命令をみながら詳細な条件を得ることは難しそうです. スクリプトデータの解析はどなたかやってくださいませんでしょうか...

イベントは無理矢理出すことが出来ましたのでパッチを作りました.

download → https://www.axfc.net/u/3764567

  • 打数がイベント番号になって、1打打つとイベントが強制に発生します.
  • イベント番号5,6,24番はゴルフが終わってしまいます.
  • 無理矢理出してる都合か画面表示の打数と内部の打数の値はずれますのでご注意ください.
  • 本来の条件でイベントが発生した場合はそちらが優先されます. (でないでしょうけど)

ソースは下記でプログラムがわかる方は参考にしてください.

	org	$f7ea
	jmp	new_f7ea

	org	$ff9b
new_f7ea:
	jsr	$f803
	bcs	force_event
	jmp	$f7ef
force_event:
	lda	$0615 ;shot count
	cmp	#5
	bne	n0
	lda	#7
	sta	$0615
n0:
	jmp	$f7f1

以下イベント番号の概要をお知らせします. 設定を無視して別の COM の相手とキャディが出てくる場合はイベントの発生条件になっているものと思われます.

絵は雑にキャプチャしましたので他の方に補完をお願いします.

0: プロにおこられる

f:id:na6ko:20170114021248p:image

1: ひとみにおこられる

f:id:na6ko:20170114021249p:image

2: じいさんがいじける

3: じいさんがつりをする

4: ちょーさんがくらぶを賭ける

f:id:na6ko:20170114021250p:image

5,6: 4の結果

ゴルフが強制的に終わるのででないようにしてます

7: ようかいスライスがでる→あしゅらが登場

f:id:na6ko:20170114021251p:image f:id:na6ko:20170114021252p:image f:id:na6ko:20170114021253p:image

8:うさぎがでる

f:id:na6ko:20170114021254p:image

9,10,11: ホールインワン

12: はしりタイがでる→小夜が登場

f:id:na6ko:20170114021255p:image f:id:na6ko:20170114021256p:image

13: ちえみが水着姿になる

14: 小夜が水着姿になる

f:id:na6ko:20170114021257p:image

15: おじさんにプロテストを薦められる

f:id:na6ko:20170114021258p:image

16: プロにおこられる

17,18: ひとみになすをもらう

f:id:na6ko:20170114021259p:image

19: 池から宝船が出る

f:id:na6ko:20170114021300p:image

20: 怖い人にクラブを取られる

21: 怖い人からクラブを取り返す

22: ホールインワンもどき

23以降: 別のイベント?

小夜かあしゅらを出した後に再ゲーム

f:id:na6ko:20170114043547p:image

パスワードを入れるかゲームを終了しやり直すと対戦相手として追加キャラが選べます.

upergrafx開発近況

ソースの書き直しと入念なテストは終わりました. 現在実機で動かすための準備をしております.

あまりにも書き直し期間が長くてつらくなっておりましたが、なんとかなりそうです.

2016年12月31日

開発近況

frame buffer の空き時間を作る

Video 機能の作り直しですが、大枠はできましてある程度シミュレーションが通っております. 一番の目的である frame buffer の占有時間を凝縮させて空いた時間は MCU に使わせる目的は達成できそうです.

frame buffer の video 側の占有率は 720p での 1frame あたりで下記となっております.

dotclock = master clock / div
div 占有率
2   47%
3   32%
4   27%

この値はシミュレーション上での結果で細かい条件は占有率が多めになるものを選んでおります. div = 2 の条件は使うソフトが限られているので切り替えをいれると MCU に割り当てられる時間は 1frame あたり大体 6 割強だと思って良さそうです.

今回の作り直しによって、現状の製品版では潜伏していたバグが見つかり、それらはきれいに対処できました.

両端に好きな画像を入れる

これも作ってある程度動いてるのですが、専用データを作る価値がなさそうではと思っております.

内部RAMの使用率を下げるために作成したら構造が異様に複雑になってデバッグにも苦労しましたし、そもそもこれは本当に必要な機能でもないです. 無駄に1週間ぐらい時間を浪費してしまいました...

上記の占有時間の計算はこの機能を停めての値ですからこの機能を有効にしたら占有率は上がります.

当面の予定

大枠ができましたので細かいシミュレーションでちゃんと絵を出せれば、実機で映像機能の確認となります.

去年と違いまして試行錯誤はないし、テストに使える計測データも多いのでじっくりテスト環境を作って進めて参ります.

映像機能の実装が終わってから、 MCU に frame buffer を割り当てるための設計とデバッグがあって、ソフトの構造を組み直して、そこから CD driver の開発再開となりまして... 先は長そうです...

日本電気の半導体データブックを買ってみた

PCE とは関係なくオークションで結構いい金額を出して買ってみました.

内容は当時の家電(VHS とか電話機とか)や自動販売機に入ってそうな部品の説明がかなり多いです.

英語版で手に入る pdf がなければ電子化したいところですがどうしましょう? と思ってます. 私が欲しい分野外でも需要はあり困ってる人には提供したいと思いますが、高級オーディオの目的だったらどうしましょう...

分野についての所感は後日に行うつもりです. ただオプトエレクトニクス(LED とかフォトカプラ)とロジックIC40xx,45xxシリーズは現在新規設計や保守をするには当時の日本電気の部品である必要はないでしょう.