[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