Wednesday, 6 February 2008

Burn Dreamcast CDR from Linux

Dreamcast Linux

From DougMcIntosh

Jump to: navigation, search



Burning Dreamcast Discs From Linux

In my case ubuntu linux, Dapper Drake, with command line tools and a bog standard cd rewriter.

Introduction And Credits : Please Read

First off I stole most of this page. From | here. I followed his instructions almost exactly and only had to change one tiny command. I have nicked his entire page, cut it down a bit and shown which command to change.

It boils down to the fact the the shiny new versions of cdrecord do not need the scsi emulation layer any more. You can simply use the command option dev=/dev/hdc, or whatever the device for your cd rewriter is. I did it with the dreamfrodo example he gives. It worked first time. I did have the wrong kind of disk images in the games folder though. But it did boot up to a Commodore 64 screen.

Right here is the stolen bit.

The Nicked And Edited Introduction to burning Dreamcast Discs From Linux

A great weight has been lifted from my soul: I can finally burn a Dreamcast CD-R using Linux!

Now, for those of you still here, I'll ask you to recall one or two previous posts in which I had been using DCFactory and SelfBoot in Windows to burn emulator discs for my Dreamcast. I had had trouble burning anything useful under Linux. In fact, the procedure I'd found online didn't work at all, and I ended up with a collection of well over a dozen coasters for my efforts.

Here's the directory set up for my examples below:

You can create the IP.BIN file by using the makeip.tar.gz program. The 1ST_READ.BIN file can be scrambled, so it is bootable ?, by the scramble utility. Bot can be downloaded from here.

Both need to be compiled using gcc. If I get round to it I will host compiled versions of both files here. But if you are reading this you can probably do it yourself.

/* Cut Out Section Abouty Things That Do Not Work*/

Now, I was stuck here for ages. I tried different burners. I tried different CD-R media. I tried standing on my head and sacrificing small animals to long forgotten gods. Later I came to my senses and even tried emailing the folks that wrote web pages explaining how to do this stuff back in 2001 and 2002. All to no avail.

It appears that something has changed. I think that something is cdrecord.

The key, as was theorized in this forum thread I started, is that the Dreamcast expects a sector size of 2048 bytes. However, the flag given to cdrecord above (in the last command) is -xa1, about which the man page says: "The data size is a multiple of 2056 bytes." Whoops. To get 2048 bytes, you use -xa, not -xa1, and fixing that one option fixes the whole problem. So, instead we use the following set of commands, a set that DOES WORK for me.
   dd if=/dev/zero bs=2352 count=300 of=audio.raw
cdrecord dev=/dev/hdc -multi -audio audio.raw

Only takes a couple of seconds.
   cdrecord dev=/dev/hdc -msinfo

Use the results here in the -C option in the line below.
   mkisofs -l -r -C 0,11702 -G IP.BIN -o tmp.iso cdimage/

Make sure you are in the /dreamfrodo directory. Or whereever you need to be.
   cdrecord dev=/dev/hdc -multi -xa tmp.iso

Other guides suggest using -xal as an option. This was only correct for old version of cd record I believe. My big change here is making the dev option point to /dev/hdc. Check your etc fstab and put in the device line for your own setup.

I hope that this helps someone out in the future. I know I'm happy. Thank you, Jeremy Nethercutt, for helping me out on the DC Emulation message boards...hopefully you've helped get a critical piece of information out to all the other folks struggling with this issue.

An Actual Example

Burning superfamicast

A Little Bash Script

I decided as I was doing a batch of dreamcast disk making I needed a slightly more automatic process. I rejigged the directory structure of some of the downloaded files for dreamcast and made this bash script.

Just been trying to burn ScummVM recently and was having some problems. I tried setting a speed value, but also changed some files at the same time, as apparently burning at more than 8x speed is not very likely to work. I added -speed=4 to the cdrecord lines and then everything worked fine.

  dd  if=/dev/zero bs=2352 count=300 of=audio.raw
cdrecord dev=/dev/hdc -multi -audio audio.raw
cdrecord dev=/dev/hdc -msinfo
mkisofs -l -r -C 0,11702 -G ip.bin -o tmp.iso cdimage/
cdrecord dev=/dev/hdc -speed=4 -multi -xa tmp.iso

Change /dev/hdc to what fstab tells you your cdrom is. On Ubuntu you may have to use

to get the right permissions.

It's very brute force but works when you make a directory structure like the following. Directory Structure

  douglas@cinebook:~/Software/dreamcast$ ls -R dreamsnes/
dreamsnes/: cdimage changes ip.bin licence readme

0gdtex.pvr 1dsnes.sh4 changes gfx licence locale readme roms sound

apply.zvr cloudsw.zvr help.zvr ltarrow.zvr pumpkin.zvr
bl_back.zvr controll.zvr ihi_warn.zvr menubutt.zvr rtarrow.zvr
bl_ring.zvr ctrlicon.zvr ihi.zvr n_cancel.zvr valissa.zvr
cancel.zvr default.fnt logo.zvr pike.zvr vmu.zvr

charnego.txt german.txt polish.txt spanish.txt
finnish.txt italiano.txt portuguese.txt swedish.txt
french.txt japanese.txt romana.txt



Then running the script from within the dreamsnes directory worked perfectly. Obviously depends on your cdrom drive being /dev/hdc

No comments:

Post a Comment