Dreamcast シリアルãƒãƒ¼ãƒˆã‚¢ãƒ€ãƒ—ター (1.5Mbps)
The original article, written by jj1odm, is available at http://jj1odm.sizious.com/
RS-232C ã®è¦æ ¼ã®ã¾ã¾ã§ã¯ 230.4kbps 辺りã¾ã§ã§ã™ãŒã€ãれ以上ã®é€šä¿¡ã‚¹ãƒ”ードã§ã¯ãƒã‚¸ãƒƒã‚¯ãƒ¬ãƒ™ãƒ«ã§è¡Œãªã„ã¾ã™ã€‚ 本æ¥ãªã‚‰å·®å‹•åž‹ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ã‚’使用ã—ãŸã„ã¨ã“ã‚ã§ã™ãŒ FT232BM Dreamcast é–“ã®è·é›¢ã‚’çŸãã™ã‚‹äº‹ã‚’å‰æ㧠ãƒã‚¸ãƒƒã‚¯ãƒ¬ãƒ™ãƒ«ã®ã¾ã¾ä½¿ç”¨ã—ã¾ã™ã€‚
FT232BM ã®ä¿¡å·ã¯ 5V ç³» ãªã®ã§ Dreamcast ã® 3.3V ç³» ã¨æŽ¥ç¶šã™ã‚‹ãŸã‚レベル変æ›ã¨ãƒãƒƒãƒ•ã‚¡ãƒ¼ã‚’å…¼ã㦠VHC244 を使用ã—ã¾ã—ãŸã€‚ 回路図ä¸ãƒ‰ãƒªãƒ¼ãƒ ã‚ャストã®ãƒªã‚»ãƒƒãƒˆä¿¡å·ãŒã‚¢ã‚¯ãƒ†ã‚£ãƒ–ã®é–“ãƒãƒƒãƒ•ã‚¡ãƒ¼ã‚’フãƒãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã—ã¦ã„ã¾ã™ãŒã€ãã®ç†ç”±ã¯ ã“ã¡ã‚‰ ã‚’å‚照。
物ç†çš„ã«ã¯ã“れ㧠OK ã§ã™ãŒã€å•é¡Œã¯ FT232BM 㨠Dreamcast ã®é€šä¿¡ã‚¹ãƒ”ードã®è¨å®šã§ã™ã€‚
Dreamcast ã¯æœ€å¤§ 1.56Mbpsã€FT232BM ã¯æœ€å¤§ 3Mbps ã§ã™ãŒæ®‹å¿µãªäº‹ã«äº’ã„ã«èª¤å·®ã»ã¼ã‚¼ãƒã§è¨å®šã§ãる最大ã®ãƒœãƒ¼ãƒ¬ãƒ¼ãƒˆã¯ã‹ãªã‚Šä½Žã„ 57600bps ã¨ã„ã†å€¤ã«ãªã‚Šã¾ã™ã€‚但ã—誤差ãŒã‚ã£ã¦ã‚‚ã¨ã‚Šã‚ãˆãšé€šä¿¡ãŒå‡ºæ¥ã‚‹ 500Kbps ãŒã„ã¡ã‚ˆã†ã®æœ€å¤§ãƒœãƒ¼ãƒ¬ãƒ¼ãƒˆã¨ã„ã†äº‹ã«ãªã‚Šã¾ã™ã€‚
(Dreamcast ã®å ´åˆã¯ 50MHz ã‹ã‚‰ 50MHz / (32 * bps) - 1 ã®è¨ˆç®—å¼ã§ã€FT232BM ã®å ´åˆã¯åŸºæœ¬çš„ã« 3MHz ã‹ã‚‰ã®åˆ†å‘¨æ¯”ã§ã™ãŒå†…部的ã«ã¯ 48MHz をベースã«ç›®çš„ã®ãƒœãƒ¼ãƒ¬ãƒ¼ãƒˆã«å¯¾ã™ã‚‹åˆ†å‘¨æ¯”を算出ã™ã‚‹ãŸã‚互ã„ã«èª¤å·®ã‚¼ãƒã§ã‚¹ãƒ”ードをåˆã‚ã›ã‚‹ã®ãŒé›£ã—ããªã‚Šã¾ã™ã€‚)
ãã“㧠外部ボーレート端å ã®ç™»å ´ã§ã™ã€‚
外部ボーレート端å㯠DC シリアルãƒãƒ¼ãƒˆã® 2番ピン ã«ã‚ã‚Šã¾ã™ã€‚(外部ボーレート端å発見ã«é–¢ã—ã¦ã¯ ã“ã¡ã‚‰ ã‚’å‚照)
使ã„æ–¹ã¯ä½¿ç”¨ã—ãŸã„ ボーレートã®16å€ ã®ã‚¯ãƒãƒƒã‚¯ã‚’供給ã™ã‚‹ã ã‘ã§ã™ã€‚
ソフトウエア上ã®è¨å®šã¯ SCI インターフェース㮠SCSCR2 レジスタ㮠CKE1 (bit 1) ビットを ON ã«ã™ã‚‹ã ã‘ã§ã™ãŒã€ä»¥ä¸‹ã«å¤–部ボーレート使用時 ã® SCI インターフェースåˆæœŸåŒ–ルーãƒãƒ³ã®ã‚µãƒ³ãƒ—ルを示ã—ã¾ã™ã€‚ scif_init() 関数ã®å¼•æ•°ã¯ä½¿ç”¨ã—ãŸã„ボーレート値㧠0 以外ã®å€¤ã§ã¯å†…部 ボーレートã®è¨å®š ã«ãªã‚Šã€0 ã®æ™‚ã¯å¤–部ボーレート ã«åˆæœŸåŒ–ã—ã¾ã™ã€‚
// ---- example scif_init() -----
void scif_init(int bps)
{
int i;
*SCSCR2 = bps ? 0x0 : 0x02; //////// clear TE and RE bits / if (bps == 0) CKE1 on (bit 1)
*SCFCR2 = 0x6;
*SCSMR2 = 0x0;
if (bps) *SCBRR2 = (50 * 1000000) / (32 * bps) - 1; //////// if (bps != 0) set internal baudrate
for (i = 0; i < 100000; i++);
*SCFCR2 = 12;
*SCFCR2 = 0x8;
*SCSPTR2 = 0;
*SCFSR2 = 0x60;
*SCLSR2 = 0;
*SCSCR2 = bps ? 0x30 : 0x32; //////// set TE and RE bits / if (bps == 0) CKE1 on (bit 1)
for (i = 0; i < 100000; i++);
}
// sci init and set external baudrate
scif_init(0);
今回 FT232BM ã®ãƒ™ãƒ¼ã‚¹å›žè·¯ã«ã¯ 1.5Mpbs x 16 = 24Mhz ã®ã‚¯ãƒãƒƒã‚¯ã‚’内蔵ã•ã›ã¦ã„ã¾ã™ã€‚
ãªãœ 2Mbps : 32MHz ã‚ã‚‹ã„ã¯æœ€å¤§ã® 3Mbps : 48MHz ã«ã—ãªã‹ã£ãŸã‹ã¨ã„ã†ã¨å®Ÿéš›ã«è©¦ã—ã¦ã¿ãŸçµæžœã‚±ãƒ¼ãƒ–ルã®å½±éŸ¿ã‚‚ã‚ã‚Šã¾ã™ãŒ DC本体ã®ãƒžã‚¶ãƒ¼ãƒœãƒ¼ãƒ‰å†…ã®ãƒ‘ターンãŒã‹ãªã‚Šé•·ã„è·é›¢ã‚’引ã回ã—ã¦ã„ã‚‹ã®ã¨ EMI 対ç–ã®éƒ¨å“ã®å½±éŸ¿ã§ 24MHz ãŒé™ç•Œã§ã—ãŸã€‚
(普通ã¯æ•°10メガã®ã‚¯ãƒãƒƒã‚¯ã‚’ãƒã‚¸ãƒƒã‚¯ä¿¡å·ã®ã¾ã¾å¤–部ã‹ã‚‰ã‚±ãƒ¼ãƒ–ルã§ä¾›çµ¦ã™ã‚‹ã¨ã„ã†äº‹ã¯ã—ã¾ã›ã‚“。本æ¥ãªã‚‰ DC 本体ã«æ載ã™ã¹ãã§ã™ã。)
æらã SH4 ã® SCI インターフェース自体㯠3Mbps (48MHz) ã§ã‚‚動作ã™ã‚‹ã®ã§ã¯ãªã„ã‹ã¨æ€ã‚ã‚Œã¾ã™ã€‚