Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Does someone already use that serial mass storage (named 'uDRIVE-uSD-G1') ?

50 views
Skip to first unread message

Peter Dassow

unread,
Aug 12, 2010, 2:23:31 PM8/12/10
to
Does someone already use that serial mass storage device (named
'uDRIVE-uSD-G1') from 4D systems ?
For a description of that tiny device, take a look at
http://www.z80.eu/blog/index.php?entry=entry100812-195924
It should work with any vintage computer which has a serial interface.

Regards
Peter

John Crane

unread,
Aug 12, 2010, 3:14:41 PM8/12/10
to

"Peter Dassow" <z8...@arcor.de> wrote in message
news:4c643c27$0$6769$9b4e...@newsspool3.arcor-online.net...


The voltage levels are wrong for RS-232 compatibility, but with a little
tinkering, it looks like it could work. Since most old machines can't do a
bazillion baud, it won't be as fast as a parallel S-100 solid-state drive
card, but then the old files aren't that big anyway.

-John


Peter Dassow

unread,
Aug 12, 2010, 5:18:22 PM8/12/10
to
John Crane wrote:
>> For a description of that tiny device, take a look at
>> http://www.z80.eu/blog/index.php?entry=entry100812-195924
>> It should work with any vintage computer which has a serial interface.
>
> The voltage levels are wrong for RS-232 compatibility, but with a little
> tinkering, it looks like it could work. Since most old machines can't do a
> bazillion baud, it won't be as fast as a parallel S-100 solid-state drive
> card, but then the old files aren't that big anyway.
>
Think about using a MAX232, that's not really difficult.

Regards
Peter

s100guy

unread,
Aug 12, 2010, 7:02:54 PM8/12/10
to
On Aug 12, 11:23 am, Peter Dassow <z8...@arcor.de> wrote:
> Does someone already use that serial mass storage device (named
> 'uDRIVE-uSD-G1') from 4D systems ?
> For a description of that tiny device, take a look athttp://www.z80.eu/blog/index.php?entry=entry100812-195924

> It should work with any vintage computer which has a serial interface.
>
> Regards
>   Peter

Yes, Peter, I have a uDRIVE socket on my 10 MHz Z80 SBC. There are 2
serial ports on the SBC (supported by SIO or DART). One is the
console, and the other has a uDRIVE socket on it, but the traces also
go to a DB-9 for XMODEM to another computer. The uDRIVE works quite
well, although it only supports micro-SD cards smaller than 1GB. Has
4D systems updated it for HC SD yet? The space isn't the problem (1
GB is infinity for Z80 systems), but the smaller capacity micro-SD
cards aren't as readily available anymore.

Roger

James Moxham (Dr_Acula)

unread,
Aug 13, 2010, 9:59:26 AM8/13/10
to
I can post a huge assembly program if you like that has all the udrive
interface; erase, read, write, dir

It would need the uart ports changed to your machine. Below is a bit
of the code - the write routine. Please let me know if you would like
the full listing.

; ************************************************
; UWRITE sends a file in fcb to the udrive
; declare local variables
RECORDCOUNT: DW 0,0 ; number of records
SIZESTRING: DB 'NNNN$' ; 4 bytes
UERRSTRING: DB 13,10,'ERROR - RUN USTART.COM TO RESET$'
BLOCKCOUNT: DB 0 ; 4 lots of 32 bytes in udrive per 128 byte recored
DMACOUNT: DW 0,0 ; dma counter
RECORDSTRING: DB 'RECORDS$'
BYTESTRING: DB 'BYTES$'


UWRITE:
CALL CONCLEAR ; clear the uart buffer ? not needed
CALL GET_COMMAND_STRING ; user passes the filename
CALL SPLIT_COMMAND ; returns filename and fileext
CALL FILENAME_TO_FCB ; put filename and extension string to fcb
CALL FILE_SIZE ; uses fcb, returns de records
LD (RECORDCOUNT),DE ; store it for later

; CALL PRINT_DE
; LD DE,RECORDSTRING
; CALL WRITE_STRING_CR ; print number of records

LD DE,(RECORDCOUNT) ; number of records
LD BC,128 ; get records
CALL MUL16 ; BC*DE=DEHL number of bytes
LD IX,SIZESTRING
LD (IX+0),D ; store 4 size bytes
LD (IX+1),E
LD (IX+2),H
LD (IX+3),L
; CALL PRINT_HL
; LD DE,BYTESTRING
; CALL WRITE_STRING_CR

LD IX,SIZESTRING
CALL PRINT_COPY_TIME

LD DE,STRING1
CALL STRINGS_CLEAR ; clear the string
LD DE,FILENAME
LD HL,STRING1
CALL STRINGS_COPY ; filename to string1
LD A,'.'
LD DE,STRING1
CALL STRINGS_ADD_CHAR ; add the .
LD BC,STRING1
LD DE,FILEEXT
LD HL,STRING2
CALL STRINGS_CONCAT ; answer in string2

CALL PORT_3 ; talk to udrive
LD E,40H
CALL WRITE_CONSOLE ; write @t packetsize filename 0 size wait packet1
wait packet2
LD E,74H
CALL WRITE_CONSOLE
LD E,32 ; 32 bytes per packet
CALL WRITE_CONSOLE
LD DE,STRING2
CALL WRITE_STRING ; filename myfile.ext
LD E,0
CALL WRITE_CONSOLE ; 0 at end
LD DE,SIZESTRING ; 4 bytes
CALL WRITE_STRING ; send them out
CALL OPEN_FILE ; open the file at the fcb

; note that up until here we have been printing via the fdos commands
through cp/m
; from now on use local conin and conout as bypasses lcd display and
keyboard checks so is faster
CALL CONIN_TIMEOUT
CP 15 ; error if NAK. Ok if times out or ACK
JP Z,U_WRITE_ERR
UWRITE1:
CALL READ_SEQ ; get 128 bytes from drive A file 0=success 1=fail eg
eof
CP 1 ; is it the eof?
JP Z,UWRITE4
LD A,4 ; count down from 4 for 32x4=128
LD (BLOCKCOUNT),A ; store it
LD HL,80H ; setup dma counter
LD (DMACOUNT),HL
UWRITE2: ; send out 32 bytes
LD B,32 ; 32 bytes
UWRITE3:
LD HL,(DMACOUNT) ; get the counter
LD A,(HL) ; get the byte
LD E,A ; ready to send out
PUSH BC ; store the counter
; CALL WRITE_CONSOLE ; send it (fast local with conout, write_console
has lcd etc)
CALL CONOUT ; CONOUT needs a delay, ? how short (1ms is working)
LD A,1 ; 1ms delay maybe it can go faster
CALL DELAY_MILLISECOND ; sdelay is too fast though.
; CALL SDELAY
POP BC
LD HL,(DMACOUNT) ; get the counter
INC HL ; add one
LD (DMACOUNT),HL ; store it
DJNZ UWRITE3 ; loop until counter =0
CALL CONIN_TIMEOUT ; get ack
CP 15 ; error if NAK. Ok if times out or ACK
JP Z,U_WRITE_ERR
LD A,(BLOCKCOUNT) ; 1 of 4 blocks to send
DEC A
LD (BLOCKCOUNT),A ; store it
CP 0 ; zero?
JP NZ UWRITE2 ; no, so do 4 x
; is this the last record?
LD DE,(RECORDCOUNT)
DEC DE
LD (RECORDCOUNT),DE
JP UWRITE1 ; get the next record

UWRITE4: ; finish up
CALL CLOSE_FILE
CALL PORT_0 ; back to console
CALL CONIN_TIMEOUT ; collect the final ^F if there is one
RET
U_WRITE_ERR:
CALL PORT_0
LD DE,UERRSTRING
CALL WRITE_STRING_CR
CALL CLOSE_FILE
RET

Steven Hirsch

unread,
Aug 13, 2010, 5:03:27 PM8/13/10
to
On 08/13/2010 09:59 AM, James Moxham (Dr_Acula) wrote:
> I can post a huge assembly program if you like that has all the udrive
> interface; erase, read, write, dir
>
> It would need the uart ports changed to your machine. Below is a bit
> of the code - the write routine. Please let me know if you would like
> the full listing.

Would you mind mailing me the full listing as an attachment?

Thanks!

James Moxham (Dr_Acula)

unread,
Aug 14, 2010, 1:49:24 AM8/14/10
to

Sent via email just now. Cheers, James

Peter Dassow

unread,
Aug 15, 2010, 5:58:07 AM8/15/10
to

That's what I would like also to get ;-)
Do you have more sources or at least some binaries for me ?
Thx in advance, too.

Regards
Peter

0 new messages