> SCSItoIDE 1.00 : 6"Copy data from SCSI drive to IDE drive"'38,"=") (-"IDE base address must be set to &FC50"' 2: <2size%=(--2048)&FF00: ctrl% 31,mem% size%-1 F8ide_Assm:?IDEcommand=&08:?IDEstatus<128:ide_Init P+"Enter source Acorn SCSI drive: "scsi% Z("Enter destination IDE drive: "ide% dFscsi_id:"SCSI drive size: &";~scsi_tot%;" - ";scsi_tot%4096;"M" nBide_id:"IDE drive size: &";~ide_tot%;" - ";ide_tot%4096;"M" xAide_tot%&200000:ide_max%=&200000 7"IDE drive size will be set to ";ide_tot%4096;"M" "Press RETURN to start"A$ >ptr%=0:len%=scsi_tot%-ptr%:len%*256>size%:len%=size%256 :13;"Reading &";~ptr%;:SCSI_Rd(mem%,len%,ptr%,scsi%) 813;"Writing &";~ptr%;:IDE_Wr(mem%,len%,ptr%,ide%) #ptr%=ptr%+len%:ptr%>=scsi_tot% "13;"Amending drive size"10; OIDE_Rd(mem%,2,0,dev%):mem%!252=ide_max% : Change disk size ptr%=mem%?&1FE Rptr%:mem%!(&100+ptr%-3)=ide_max%-mem%!(ptr%-3) : Add to free space LA%=0:ptr%=&000 &0FE:A%=A%+mem%?ptr%::mem%?&0FF=A%: Recalc. checksum LA%=1:ptr%=&100 &1FE:A%=A%+mem%?ptr%::mem%?&1FF=A%: Recalc. checksum IDE_Wr(mem%,2,0,dev%) 13;"Finished"20  ": ,: 6&scsi_id:scsi_Rd(mem%,2,0,scsi%) @!ide_tot%=mem%!252 &FFFFFF: J: T-scsi_Rd(mem%,len%,lau%,dev%):scsi(8): ^.scsi_Wr(mem%,len%,lau%,dev%):scsi(10): h: r0scsi(action%):?X%=0:X%!1=mem%:X%?5=action% |IX%?6=((lau%&FF0000)65536)(dev%*32):X%?7=(lau%&FF00)256:X%?8=lau% %X%?9=len%:X%!10=0:A%=&72:&FFF1: : : #ide_Rd(mem%,len%,lau%,dev%): v!addr%=mem%:sec%?2=lau%:sec%?1=(lau%&FF00)256:sec%?0=((lau%&FF0000)65536)(dev%*64):?num%=1:num%?1=sz%:A%=rd% 3mem%=mem%+256:len%=len%-1:lau%=lau%+1:len%<1: : #ide_Wr(mem%,len%,lau%,dev%): v!addr%=mem%:sec%?2=lau%:sec%?1=(lau%&FF00)256:sec%?0=((lau%&FF0000)65536)(dev%*64):?num%=1:num%?1=sz%:A%=wr% 3mem%=mem%+256:len%=len%-1:lau%=lau%+1:len%<1: : ide_id: A% / A%=0 255 4:mem%!A%=0:mem%!(A%+256)=0: +!addr%=mem%:Y%=dev%*16:num%?1=sz%: id% :big%=:mem%?&3A=0:big%=:mem%?&3A=mem%?&39:mem%?&39=0 mem%?&101+mem%?&136+mem%?&139=0:mem%?&136=mem%?&3A:mem%?&139=mem%?&36:tot%=(256*mem%?&136+mem%?&36)*mem%?&37*mem%?&38:mem%?&101=(tot%((mem%?3)*(mem%?6)))256 &3tot%=(256*mem%?&136+mem%?&36)*mem%?&37*mem%?&38 0 :: Dide_Init:ideSize(64,3): Nide_Size(spt%,hds%) X"?IDEcount=spt%:?IDEsector=spt% b9?IDEhead=hds%:?IDEcommand=&91: Initialise parameters l v: ide_Assm 7mc%=mc%:mc%=0:mc% 511:addr%=&80:sec%=&85:num%=&88 ?IDEbase=&FC50: *** IDE interface address links changed *** OIDEdata=IDEbase+0:IDEerror=IDEbase+1:IDEcount=IDEbase+2:IDEsector=IDEbase+3 TIDEcylinder=IDEbase+4:IDEhead=IDEbase+6:IDEstatus=IDEbase+7:IDEcommand=IDEbase+7  P=0 1 P%=mc%:[OPT P*2 .id% LDA &FF:BMI idescape LDA IDEstatus:BMI id% %TYA: #16:STA IDEhead :\ Device -LDA #&EC :STA IDEcommand :\ &EC=Identify LDY #0:LDX #1:STX num% CLC:JMP TransferLoop  .idescape RTS  : *.WaitForData 4&LDA IDEstatus: #8:BEQ WaitForData >LDA IDEstatus:RTS H: R.WaitNotBusy \6PHP:JSR L806F :\ Get IDE status f; #&80:BNE WaitNotBusy+1:PLP :\ Wait for IDE not busy pBIT &CC:RTS z:  .L806F PHP:LDA IDEstatus:STA &8D %LDA IDEstatus:CMP &8D:BNE L806F+1  PLP:RTS : ..rd%:LDA #&08:STA &84:CLC:BCC CommandStart ..wr%:LDA #&0A:STA &84:SEC:BCS CommandStart : ;.CommandStart :\ C=R/W, &8E/F=>block 4LDA #&7F:STA &8E:LDA #0:STA &8F :\ &8E/F=>block PHP:JSR SetGeometry:PLP .CommandLoop LDX #2:.Twice BJSR SetSector:LDY #0 :\ Set sector, count, command .TransferLoop )JSR WaitForData: #&21:BNE TransError $\.TransferLoop .%BIT &CD:\BVS TransTube:BCC IORead 8 .IOWrite B7LDA (&80),Y:STA IDEdata:LDA num%+1:BEQ TransferByte L:INC &81:LDA (&80),Y:STA &FC48:DEC &81:BRA TransferByte V .IORead `7LDA IDEdata:STA (&80),Y:LDA num%+1:BEQ TransferByte j:INC &81:LDA &FC48:STA (&80),Y:DEC &81:BRA TransferByte t: ~.TransferByte :LDA IDEstatus: #8:BEQ TransError :\ Run out of data ?INY:BNE TransferLoop:\INC &81 :\ Loop for 256 bytes 8LDA IDEstatus: #&21:BNE TransError :\ Error occured DEX:BNE Twice =INC &87:BNE TransCount :\ Increment sector "INC &86:BNE TransCount:INC &85 .TransCount ADEC &88:BNE CommandLoop :\ Loop for all sectors &20 or CC->&30 ISTA IDEcommand:PLP:RTS :\ Set command &08 or &0A :  .SetDrive JROL A:ROL A:ROL A: #&13:STA IDEhead:RTS :\ Set device + sector b6-b7 : ]: