A320基本メモ

人は使わない記憶は重要であっても忘れてしまうので記録を残すんですね。
頭で覚えておくっていうのはこの情報量が多い社会では通用しないのかもしれません苦笑

というわけで、A320に関するメモです。

基本スペック
dingoo A320
CPU:jz4740(MIPS互換)
RAM:32MB

jz4740はCPUにROMとしてIPLを内蔵している。
NANDやNORにあるSPL読み出しモードと、
USBモードがあって、RESET時の入力状態で選択できる。

A320が選べるのはB+RESETのUSBモードと、
NAND読み出しモード。

USBモードはUSBからのコマンド待機状態になり、
usb bootやusbtoolから初期化コードなどを送ってプログラムを実行することができる。
スポンサーサイト

HuSICを解析

プログラムというのは長い間触っていなければ忘れてしまいます。
そして思い出すためにソースコードを読む必要があるのですが、
コメントが残っていない、変数名が理解しづらいソース
(セキュリティの為に難読化されています…冗談ですが)ってのには参ります。
まあ、昔は漢字コードを書くとコンパイラがエラーを吐いたり、
変数名に短いものを使う必要があったり、
コメントを残さない方がかっこいいという文化とか、
いろいろな制限があったりするので仕方のないことです(酷い言い訳)

そんな訳で、少し解析してみました。


・PCEとHESの違い
PCEはまずヘッダがないベタなイメージとヘッダのあるイメージに分かれます。
(ヘッダの認識方法はファイルサイズを0x2000で割って512バイトの余りが有る無し…でしたっけ?)
ファミコンとは異なり、CHR ROMとPRG ROMが分離されていないことと、
バンク切り替えが本体側に標準機能として搭載されていた(ような…PCEはアドレス線が多かったですよね?)ので、シンプルな構造のイメージにできていたのだと思います。

HESにはヘッダがあります。先頭にあるHESMと書かれているIDによって認識しています。
ヘッダには初期化プログラムのエントリーポイント、各バンクの初期状態、
データサイズ、データ先頭アドレスがあります。予約は将来的拡張のための予備領域です。


HuSICスタートアップコード(sup_hes.asm)より引用

;-----------[HES HEADER]-------------------------
.org $E000

db "HESM",$00,$00
dw _hes_init
db $ff,$f8,$01,$02,$00,$05,$00,$00
db "DATA"
dw ((_nb_bank%8)*$2000)-$20 ; size low
dw (_nb_bank-1)/8 ; size high
dw $0020 ; addr low
dw $0000 ; addr high

dw $0000 ; Reserve
dw $0000


.org $E020
_hes_init:



このヘッダがあることによって、HESは必要なバンクだけを抜きとり、
ドライバだけを生かした曲データのみの再生ができるようになります。

DATAの次のsizeの値はdd ( 32ビット = 4バイトの整数 )が利用できないため、
編み出された苦肉の策です(笑)

この忘却の彼方にある計算式が正しければ、ここに入る数値は
「このヘッダを除いたデータ領域のサイズ」です。

その次の値も同じくddが使えなかったためで、「ロードアドレス(物理アドレス)」
となっています。
(http://www.proc.org.tohoku.ac.jp/befis/download/nezplug/hesspec.txtより)
物理アドレスはいわゆるバンク切り替えレジスタを使わないでのアドレスであって、
通常のROMイメージが配置される物理アドレスは0x000000からファイルサイズまでに
なっています。

・リセットベクタ

リセットベクタはPCエンジンのイメージを実行した場合に利用されます。
プログラムの開始位置をリセットベクタといいます。
Z80あたりだとアドレス0x0000へと読み出していたと思うのですが、
ファミコンの6502やHuC6280などはメモリの後ろの方に
リセットベクタへのアドレスがあり、それを読み出してその位置を実行しています。

-----
HuCスタートアップコードより引用

.if !(CDROM)
.org $FFF6

.dw _irq2
.dw _irq1
.dw _timer
.dw _nmi
.dw _reset
.endif ; !(CDROM)



一方、HESとして再生するにはヘッダを追加する必要があります。

HuSICが生成するHESをHESとして再生であればこのヘッダが優先的に実行されます。

リセット後、一番最初に読み出されるバンク0x00 = ROMイメージの先頭にあるバンクは、
0xe000 - 0xffff に配置されるため、HESとして読み出すこともできるように
0xe000からの部分を利用して書き換えています。

・そして初期化へ
後は初期化コードが実行されます。
hes向けの初期化コードも現在のものでは、基本的にはROMイメージとして
実行されるものと変わりないはずです。

MDX Player for Android 20110301

http://clogging.web.fc2.com/android/mdxplay_20110301.apk

変更点
・横画面への対応
・エラー発生時のメッセージの追加
・ファイル一覧の表示を変更

プロフィール

Author:BouKiCHi
ABOUT ME
MAIL:alf_byncyou at hotmail.com

WEB:http://clogging.web.fc2.com/
TWITTER:@bkc_alf

月別アーカイブ

FC2カウンター

ブロとも申請フォーム

ブログ内検索