灼くぞCDに!

ハードの準備は整った。後はソフトだけだ。CD-Rを灼かねばならない。

う〜む。実は私はCD-R(W)ドライブを今まで持っていなかった。友人の結婚式に 出た時に撮影したデジカメ画像を編集してSpecial CD-ROMを作る際も、自分の マシンで編集作業→ペンコンに全部を収めて持っていき、灼いて貰う→校正作 業→ペンコンに…迂遠に過ぎる…。

既にNGP-DCケーブルのように安からぬ出費をしてしまっている。仕方無い。バッ クアップ等のためにも必要性は感じていたし、近所のCompMartの閉店セールで (まぁなんとか納得できる範囲内の)安価なドライブも見つけたし。

後々も使いでのありそうな、Marcus氏のserial-slaveでも灼いてみよう。

  1. 初めてのCD-R(W)
  2. 灼く
  3. うまく灼けたか?

1. 初めてのCD-R(W)

さて、まずはCD-R(W)ドライブをinstallしなければ。買ってきたドライブはこ のようなものだ。ATAPI Rx8/RWx4で、ライティングソフトも付いていて2001年6月8日 現在8,982円なら…納得しなければなるまい。

R/RWメディアとEasyCD Creater4附属 装着した姿

こいつを今までのATAPI CD-ROMとリプレースする形でPrimary Slaveに接続する。 FreeBSD 4.2-RELEASEでは次のように認識した。

acd0: CD-RW  at ata1-slave using PIO4
PIO4?そういえば、ATAPIに対してDMAを許可するOptionを付けてなかった。 LINTより。

# ATA_ENABLE_ATAPI_DMA:	enable DMA on ATAPI device, since many ATAPI devices
#			claim to support DMA but doesn't actually work, this
#			is not enabled as default.

options 	ATA_ENABLE_ATAPI_DMA
取り敢えずATA_ENABLE_ATAPI_DMAしてみる。何か不具合があったら戻せば良い さ…。(010615 追記: 4.3-RELEASEになったらこのoptionは消えていた。その 代わり、/boot/loader.conf.localでhw.ata.atapi_dma=1。追記と言えば…今 日、SofMap厚木店にI・O DATAの12x/4x/32x BurnProofなATAPI CD-RWが!何と いうことだ…9,800円…危ないところだった…もし同価格だったら悔やんでも 悔やみきれなかった筈だ。約1,300円。う〜む。) で、

acd0: CD-RW  at ata0-slave using UDMA33
こうなった。

が、UDMA33である種のCDROMをmountしようとすると、

ata0-slave: too many segments in DMA table

などと言って失敗することが判明した。PIO4でいいや…。(追記:010716) ライティングソフトは標準のburncdを、ISO9660イメージ作成はmkisofs…手元 に4.2-RELEASEのパッケージが無いな…少し古いかもしれないが、 mkisofs-1.12.1をpkg_add。これでCD-R(W)する準備は完了。


2. 灼く

それでは一気に行く。例によって、%は一般ユーザ、#はrootでの作業を示す。

frodo% dd if=/dev/zero of=audio.raw bs=2352 count=300
300+0 records in
300+0 records out
705600 bytes transferred in 0.061231 secs (11523571 bytes/sec)
frodo% ll audio.raw
-rw-rw-r--   1 m-arai  m-arai  705600 Jun  9 03:21 audio.raw
frodo# burncd -e -s 8 -f /dev/acd0c audio audio.raw fixate
next writeable LBA 0
written this track 689 KB (100%) total 689 KB
fixating CD, please wait..
よそで例示されているように、4秒の無音ファイルを作り、オーディオトラッ クとして灼き込んだ。8倍速で全く問題無し。-eを付けてあるのは、何故か一旦 イジェクトしないと、

cdcontrol: getting toc header: Input/output error

なんてことになるからだ。

灼き上がりはこのようになる。

frodo# cdcontrol -f /dev/acd0c info
Starting track = 1, ending track = 1, TOC size = 18 bytes
track     start  duration   block  length   type
-------------------------------------------------
    1   0:02.00   0:06.02       0     302  audio
  170   0:06.02         -     302       -      -
frodo# burncd -f /dev/acd0c msinfo
0, 11702
ちゃんと灼けているようだ。しかし、例に倣って4秒の無音(同サイズ)を使っ ているのに、「0,11702」だ。細かい事は気にすまい。

お次はISOイメージの作成。serial-slaveはIP.BINだけだ。折角CD-Rを灼くの に、スカスカでは勿体無い。ついでにバックアップしたいデータも入れてしまお う。

frodo% ls
data/           READ_ME.TXT
frodo% cat READ_ME.TXT
Serial port upload bootstrap program by marcus.
Use at your own risk.
ただ、ISOイメージのルートに"READ_ME.TXT"は必須だ。無いと、IP.BINの Bootstrapに処理が移行しないで途中で終ってしまう。これは serial-slaveのパッケージに含まれたやつで無くても良く、ただファイルとし て存在しさえすれば良い筈である。ROMのboot処理が、IP.BIN内で指定された ファイルの読み込みを必要としているだけで、しかも実際にはここで読み込ま れるREAD_ME.TXTにジャンプすることはないのだから。

frodo% mkisofs -l -C 0,11702 -o ~/tmp/image.iso .
mkisofs: Warning: -C specified without -M: old session data will not be merged.
 88.39% done, estimate finish Sat Jun  9 13:15:12 2001
Total extents actually written = 5270
Total translation table size: 0
Total rockridge attributes bytes: 0
Total directory bytes: 94208
Path table size(bytes): 590
Max brk space used 57404
16972 extents written (33 Mb)
ISOイメージファイルが出来た。後はこれにGENERIC BOOT IMAGEとしてIP.BIN を入れ込む。その為に短いプログラムを書いたの で使う。ddでやれるのに何故わざわざそんなものを?それは…HDD貧乏だから。 74minメディア1杯分くらいなら置けるけど、2杯分を置く磁性面のスペースが 無いのだ…今回は小さいからddでも可なのだけど、テストの意味も兼ねて。まぁ こんな程度のモンにテストも何もないが。

frodo% cd ~/tmp
frodo% ls
IP.BIN     bisogb.c    image.iso
frodo% gcc -o bisogb.c bisogb.c
frodo% ./bisogb image.iso IP.BIN 
Brand ISO Image with Generic Boot Image
'IP.BIN'->'image.iso' Success!
後は灼くだけ。

frodo# burncd -e -s 8 -f /dev/acd0c XAmode1 image.iso fixate
next writeable LBA 11702
writing from file image.iso size 10540 KB
written this track 10540 KB (100%) total 10540 KB
fixating CD, please wait..
frodo# cdcontrol -f /dev/acd0c info
Starting track = 1, ending track = 2, TOC size = 26 bytes
track     start  duration   block  length   type
-------------------------------------------------
    1   0:02.00   2:38.02       0   11702  audio
    2   2:38.02   1:12.22   11702    5272   data
  170   3:48.24         -   16974       -      -

3. うまく灼けたか?

さて、おそるおそるCD-RをDreamCastにセット。そして電源ON!

serial-slave 起動画面
イケてるみたいだ!

そこで、作ったケーブルでPCのいわゆるCOM2に接 続し、/etc/remoteに

cuaa1e|cua1e:dv=/dev/cuaa1:br#57600:pa=none:
なるエントリを書いておいてtipしてみよう。おっと、改行の代わりにCTRL-Jを 使うのを忘れずに。

frodo% tip cuaa1e
connected
>>>>>V103
>>>>>>>>>>>V103
~
[EOT]
動いてる動いてる。ケーブルも正常である証が立てられた。

勿論、モトローラS形式のファイル転送もちゃんと出来る。「~C」さらに「cat srec-filename」だ。試しにDreamripでもロードしてみるか。

~CLocal command? cat dreamrip.srec
>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
…(中略)…
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>OK
please set 115k and hit 'o','k'
問題無し。

そういえば、構築した開発環境で正しく実行形式の生成が出来ていることも確 かめられるようになった訳だ。Marcus氏のサンプルをmake/実行してみよう。

tatest.srec 立方体がぐるぐる mapletest.srec デバイスリスト表示

もう遊び倒すだけ。