[Coco] OS-9 Raw copying disks - Or how to fool your OS-9
Christopher Smith
csmith at wolfram.com
Mon Sep 16 12:52:22 EDT 2013
Interesting, though you'd think there would be a less manual way to go about it. :)
Chris
----- Original Message -----
> From: "Luis Antoniosi (CoCoDemus)" <retrocanada76 at gmail.com>
> To: "CoCoList for Color Computer Enthusiasts" <coco at maltedmedia.com>
> Sent: Sunday, September 15, 2013 12:43:20 AM
> Subject: [Coco] OS-9 Raw copying disks - Or how to fool your OS-9
>
> Hi,
>
> I managed to make my OS-9 to copy raw dragon 40 track disks (like the
> FLEX
> boot disk, Dragon DOS disk, RSDOs disks or any other coco/dragon
> 256-sector
> byte disk) from floppy to DW and vice-versa. But I had to fool the
> OS-9
> otherwise it will close the disk path as soon it reads or writes an
> alien
> LSN0.
>
> So I came up with this idea:
>
> When transferring a disk from floppy to DW I ask the user to put a
> valid
> OS-9 formatted disk with the same geometry and I read both LSN0s
> while
> KEEPING BOTH PATHS OPENED.
>
> Then I ask the user to switch the disks and OS-9 now will happily
> read all
> remaining sectors from 1 to the end of the alien disk. After that I
> close
> the the path and reopen it and read the source LSN0 and write to the
> target
> disk.
>
> Note that the disk change is only required for the source disk and
> not for
> the target. The target disk must be pre-formatted in OS-9 for the
> same
> geometry. If the source is a /Xn drive you need to change the valid
> OS-9
> image on the server. You can use the toolshed to create an empty one.
>
> I copied a floppy disk like FLEX and any other using OS-9, syntax:
>
> from floppy 1 to dw x1:
>
> RAWCOPY /D0@ /X1@
>
> and to copy back:
>
> RAWCOPY /X1@ /D0@
>
> So I don't need an old PC with internal floppy to transfer disks and
> making
> it on coco is more fun :)
>
>
> The code, it works for level 1 and 2:
>
>
> ***
>
> nam Rawcopy
> ttl Rawcopy utility
>
> use defsfile
> tylg set Prgrm+Objct
> atrv set ReEnt+rev
> rev set $03
> edition set 1
> mod eom,name,tylg,atrv,start,size
> org 0
>
> srcpath rmb 1
> dstpath rmb 1
>
> argc rmb 2 ; number of args
> args rmb 256 ; 128 max args
> readbuf rmb 256
> size equ .
>
> stdin equ 0
> stdout equ 1
> stderr equ 2
>
> name fcs /Rawcopy/
> fcb edition
>
> start lbsr _getargs
>
> leax SourceMsg,pcr
> ldy #1024
> lda #1
> os9 I$WritLn
> leax readbuf,u
> ldy #1
> lda #1
> os9 I$Read
>
> ldx args,u
> lda #READ.
> os9 I$Open
> lbcs _error
> sta <srcpath
>
> ldx args+2,u
> lda #UPDAT.
> os9 I$Open
> lbcs _error
> sta <dstpath
>
> lda <srcpath
> ldy #256
> leax readbuf,u
> os9 I$Read
> lbcs _error
>
> lda <dstpath
> leax readbuf,u
> os9 I$Read
> lbcs _error
> leax SwitchMsg,pcr
> ldy #1024
> lda #1
> os9 I$WritLn
> leax readbuf,u
> ldy #1
> lda #1
> os9 I$Read
> _loop lda <srcpath
> ldy #256
> leax readbuf,u
> os9 I$Read
> bcs _end
> lda <dstpath
> leax readbuf,u
> os9 I$Write
> bcs _end
> bra _loop
> _end
> lda <srcpath
> os9 I$Close
> lda <dstpath
> os9 I$Close
>
> ldx args,u
> lda #READ.
> os9 I$Open
> lbcs _error
> sta <srcpath
>
> ldx args+2,u
> lda #UPDAT.
> os9 I$Open
> lbcs _error
> sta <dstpath
>
> lda <srcpath
> ldy #256
> leax readbuf,u
> os9 I$Read
> bcs _close
> lda <dstpath
> leax readbuf,u
> os9 I$Write
> _close lda <srcpath
> os9 I$Close
> lda <dstpath
> os9 I$Close
> ldd #0
> os9 F$Exit
>
> _error clra
> os9 F$Exit
>
>
> _getargs clr argc,u
> clr argc+1,u
> leay args,u
> _pre tstb ; check arg string
> beq _noargs
> decb
> lda ,x+
> cmpa #13 ; linefeed ?
> beq _endargs
> cmpa #32 ; space delimiter ?
> beq _pre
> leax -1,x
> stx ,y++
> leax 1,x
> inc argc+1,u ; inc arg count
> _arg tstb
> beq _endargs ; has ended ?
> decb
> lda ,x+
> cmpa #13 ; linefeed ?
> beq _endargs
> cmpa #32 ; space delimiter ?
> bne _arg
> _endline leax -1,x
> clr ,x+ ; set null termination
> bra _pre
> _endargs clr -1,x
> _noargs rts
>
>
> SourceMsg fcc "RAWCOPY "
> fcc " "
> fcc "Copy raw disks from and to files"
> fcc " "
> fcc "If source is a raw floppy as "
> fcc "/D0@ put a valid OS-9 disk with "
> fcc "the same disk geometry first and"
> fcc "press any key..."
> fcc " "
> fcb C$CR,C$LF
> SwitchMsg fcc "Now insert the source disk and "
> fcc "press any key..."
> fcc " "
> fcb C$CR,C$LF
> emod
> eom equ *
> end
> ***
>
> --
> Long live the CoCo
>
> --
> Coco mailing list
> Coco at maltedmedia.com
> http://five.pairlist.net/mailman/listinfo/coco
>
--
Christopher Smith
Systems Engineer, Wolfram Research
More information about the Coco
mailing list