Comments (5)
from arduinofloppydiskreader.
Hi Rob,
Per #4, I'm looking at IBM PC-like 5.25" floppies. Although in my case most of them were actually written on an Amstrad CPC6128 with a 5.25" drive attached. The Amstrad CPC had its own disk formats, but due to the use of the NEC 765 disk controller (identical chip to the early IBM PCs) in practice the only real difference to read them back is the sector numbers being offset by some amount (different for each format, it was how it detected the format). Most of my floppies are actually in a "NigDos" (Amstrad extension ROM) double sided format -- 42 tracks, 10 sectors/track, 2 sides (out side A, then out side B), 512 byte sectors -- with yet more different sector numbers.
I read a bunch of them years ago (14+ years ago) under Linux by using the raw interface to the floppy controller via Linux, so I know the format is "fairly standard" (by "modern" floppy disc standards). But it's been at least half a dozen years since I've had a PC with a floppy drive attached.... so I've been looking around at other options other than trying to get a bunch of old PC parts to work again!
From what you've said it sounds like the more recent Arduino Duemilanove boards (like mine), with the AT Mega 328P should work as is, which encourages me to give it a try since it seems like I already have the parts I need on hand (other than spare time :-) )
I'll close this issue now as I have the answer I need. But when/if I try it and get it working I'll try to remember to add a "for the record" comment for later reader's benefit.
Ewen
from arduinofloppydiskreader.
FTR, I've started trying to make this work today. At least from Linux there are a few challenges in trying to make the Arduino Duemilanove on-board FT232RL work as the serial port of the floppy tools:
-
The RTS/CTS flow control lines of the FT232RL are not connected up at all AFAICT. So any attempt to use hardware flow control will cause no data to be transmitted/received, which means everything will be very quiet. At least the Linux tool I started with (usbamigafloppy explicitly tries to use RTS/CTS), so I had to work around that. (I think the Arduino firmware only tries to use RTS/CTS around write / write tests, so that side is probably mostly okay.)
-
On the default Arduino, the USB UART is shared between the BootLoader and the loaded application. When
DTR
is pulsed low, the Arduino will be reset and go into the bootloader. By default Linux will set DTR high/low aroundopen()
/close()
of the serial port, which I think means immediately after starting a program to talk to the Arduino over the serial port, it will be in the boot loader, rather than the application. I suspect the only real work around here is to out-wait the bootloader. (I'm trying to use a modified version of the Linux tool in the usbamigafloppy version, as a place to start, but I believe that's written assuming there will be no Arduino bootloader, as they're using the AVR processor directly.) -
Modem Manager wants to talk to all new USB serial ports, and send them
AT
commands, which I suspect will cause confusion at the Arduino end. I've worked around this with the usual approach of disabling Modem Manager. -
For interactive testing (eg,
kermit
), it is tricky to select a bps rate over115200
as the rest were not possible with traditional hard wired UARTs. Sometimes multiples of115200
are possible to select (eg,230400
), but those are difficult to program accurately on the ATMega328P side due to the clock divider's accuracy (eg, see ATMega328P DataSheet page 190 for the 16MHz rates/errors); and the 250k/500k/1M/2M rates supported on the ATMega328P are often not available in traditional serial tools :-(
So I've been able to confirm I can talk to the Arduino at 115200
bps from kermit
, and send "?
" to get the firmware version back, but I have not been able to confirm any higher transmission rates. I have a feeling if I could wait out the boot loader before sending commands, I could make the Linux tool work, and that might allow confirming higher transfer speeds also work.
In kermit
I need to do:
set line /dev/ttyUSB0
set speed 115200
set flow-control none
set carrier-watch off
c
to connect to the Arduino. Then sending "?
" should return a string with the version number in it.
Ewen
from arduinofloppydiskreader.
Based on some quick experimentation it does seem to work with a 2 second sleep()
between opening the serial port and trying to send the "?
" firmware enquiry. And it does seem to work at 2Mbps, with that 2 second delay and RTS/CTS disabled. (1 second seems to be almost but not quite long enough; the bootloader source shows the delay is a loop count, and for the Arduino Duemilanove ATMega328 -- "atmega328
" -- the loop count is set in the Makefile with MAX_TIME_COUNT=F_CPU>>4
, which seems to work out to 1M loops, and presumably takes "about" 1-2 seconds. But I have been unable to find an actual "wait this long" time documented anywhere useful.)
Ewen
from arduinofloppydiskreader.
from arduinofloppydiskreader.
Related Issues (19)
- Question-WD1793FDC compatible use? HOT 2
- Created Python scripts to read IBM/DOS/Commodore 1581 via ArduinoReader
- Visual Studio 2019
- Write errors in first sectors HOT 3
- Checksum errors while reading HOT 12
- Porting to RaspberryPi HOT 2
- It does not run under WindowsXP HOT 4
- Writting .d81 files HOT 1
- Broken access on Linux - firmware 1.8 HOT 4
- Inconsistent writing HOT 11
- BBC Micro - floppy drive HOT 16
- Linux capsimage segfault
- Baud rate not set correctly on macOS Ventura
- Linux compile does not work OOTB with latest desktop ubuntu
- Reading NEC 765-style (double density, MFM, "360KB") floppies HOT 17
- Writing doesn't work for me HOT 15
- Ported the sketch to work with Arduino Pro Micro (Atmega32U4, 5V, 16Mhz) HOT 4
- Sucessfully read ATARI ST DD Disks (720 MBytes, 820 mBytes, 930 MBytes ) HOT 13
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from arduinofloppydiskreader.