1ChipMSXのBIOSロード機能覚書 その22016年12月25日 23:17

1ChipMSXの起動時のBIOS読込機能、iplrom.vhdに埋め込まれたROMがその処理を担当しているんだけど、分らないなりにアセンブラを読んでみる。
で、忘れないように覚書。

前提
SDカードにアクセスする際はSPIモードとSDモードの2種類があるが、通常使われるのはSPIモード(SDモードはライセンス料がかかるらしい)
SPIモードでSDカードにアクセスするには初期化等の手順が必要。
SDカードとSDHCカードは初期化手順が異なる。
SDカードはCMD0→CMD1で取り敢えずアクセス可能になる?
SDHCカードはCMD0、CMD8、CMD58、ACMD41、CMD58、CMD9とコマンドを発行する、らしい。(→参考にしたページ

iplrom.vhdの中では
X"7E",X"CB",X"23",X"CB",X"12",X"CB",X"11",X"70",X"71",
X"72",X"73",X"36",X"00",X"36",X"95",X"7E",X"06",X"10",X"7E",X"FE",X"FF",X"3F",X"D0",X"10",X"F9",
X"37",X"C9",X"06",X"0A",X"3A",X"00",X"50",X"10",X"FB",X"01",X"00",X"40",X"59",X"51",X"CD",X"97",
X"FD",X"D8",X"E6",X"F7",X"FE",X"01",X"37",X"C0",X"06",X"77",X"CD",X"97",X"FD",X"E6",X"04",X"28",
X"07",X"06",X"41",X"CD",X"97",X"FD",X"18",X"05",X"06",X"69",X"CD",X"97",X"FD",X"D8",X"FE",X"01",
X"28",X"E6",X"B7",X"C8",X"37",X"C9"
このあたりがSDカードへのコマンド発行ルーチンと初期化コマンド発行部分みたい。

「MSX Z80逆アセンブラ」で逆アセンブルしてみた。
FD97 : 7E LD A,(HL)
FD98 : CB 23 SLA E
FD9A : CB 12 RL D
FD9C : CB 11 RL C
FD9E : 70 LD (HL),B
FD9F : 71 LD (HL),C
FDA0 : 72 LD (HL),D
FDA1 : 73 LD (HL),E
FDA2 : 36 00 LD (HL),#$00
FDA4 : 36 95 LD (HL),#$95
FDA6 : 7E LD A,(HL)
FDA7 : 06 10 LD B,#$10
FDA9 : 7E LD A,(HL)
FDAA : FE FF CP #$FF
FDAC : 3F CCF
FDAD : D0 RET NC
FDAE : 10 F9 DJNZ $FDA9
FDB0 : 37 SCF
FDB1 : C9 RET
FDB2 : 06 0A LD B,#$0A
FDB4 : 3A 00 50 LD A,($5000) ; BANK-4000
FDB7 : 10 FB DJNZ $FDB4
FDB9 : 01 00 40 LD BC,#$4000 CMD0
FDBC : 59 LD E,C
FDBD : 51 LD D,C
FDBE : CD 97 FD CALL $FD97
FDC1 : D8 RET C
FDC2 : E6 F7 AND #$F7
FDC4 : FE 01 CP #$01
FDC6 : 37 SCF
FDC7 : C0 RET NZ
FDC8 : 06 77 LD B,#$77 CMD55
FDCA : CD 97 FD CALL $FD97
FDCD : E6 04 AND #$04
FDCF : 28 07 JR Z,$FDD8
FDD1 : 06 41 LD B,#$41 CMD1
FDD3 : CD 97 FD CALL $FD97
FDD6 : 18 05 JR $FDDD
FDD8 : 06 69 LD B,#$69 CMD41
FDDA : CD 97 FD CALL $FD97
FDDD : D8 RET C
FDDE : FE 01 CP #$01
FDE0 : 28 E6 JR Z,$FDC8
FDE2 : B7 OR A
FDE3 : C8 RET Z
FDE4 : 37 SCF
FDE5 : C9 RET
※12/26:アドレス一部間違っていたので修正

で、実際に発行しているコマンドはCMD0、CMD55、CMD1、CMD41ということのようなので、SDカードは初期化できてもSDHCは初期化できないのではないかと想像。

OKEIさんから掲示板に頂いた「SDHCを挿入していると1ChipMSXが起動しない」という症状はこの辺が原因ではないだろうか?
Nextorは起動してしまえばSDHCアクセス可能とのことなので、NextorのSDカードドライバはSDHCを初期化できるコマンド発行していると思われる。

じゃあ、ここを直してSDHCを初期化できるようにすればSDHC挿入していてもとりあえず起動できるようになるのかな?

コメント

_ (未記入) ― 2016年12月26日 17:57

SDカードの初期化について、ゆうくんさんの考え方であっていると思います。2003/02/27版のMMC-PLD.MACという辻川さんのプログラムが家にありますが、↑とおなじです。当時はSDではなくMMCだったのですね。

NEXTORのSDドライバはBank 0Fh 6000h~、SD初期化ルーチンは6001hから、6343hあたりからCMDコマンド発行しています。

SDドライバの逆アセンブルリストが必要ならメールしてください。

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※投稿には管理者が設定した質問に答える必要があります。

名前:
メールアドレス:
URL:
次の質問に答えてください:
答えは「MSX」です。

コメント:

トラックバック

このエントリのトラックバックURL: http://miyako.asablo.jp/blog/2016/12/25/8292700/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。