Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Pembaca/Penulis Floppy Disk Arduino Amiga (V2.2)

Komponen dan persediaan

Arduino UNO
× 1
SparkFun Arduino Pro Mini 328 - 5V/16MHz
× 1
Resistor 1k ohm
× 1
Breadboard (generik)
× 1
Kabel jumper (generik)
× 1
Perincian Dasar FTDI SparkFun - 5V
× 1

Aplikasi dan layanan online

Arduino IDE

Tentang proyek ini

Proyek ini melanjutkan pekerjaan dari proyek pembaca disk saya sebelumnya di https://create.arduino.cc/projecthub/projects/485582/

Untuk informasi lebih lanjut, kunjungi http://amiga.robsmithdev.co.uk

  • Tujuan Saya: Untuk membuat cara sederhana, murah, dan open source untuk memulihkan dan menulis ulang data dari dan ke disket Amiga DD dari dalam Windows 10.
  • Solusi Saya: Sketsa Arduino + aplikasi Windows (yang dapat di-porting ke O/S lain ) yang benar-benar berfungsi!
  • Mengapa: Untuk menyimpan data dari disk ini untuk masa mendatang. Selain itu, PC biasa tidak dapat membaca/menulis disk Amiga karena cara penulisannya.

Menulis Data - Percobaan 1

Jadi setelah berhasil membaca disk, saya pikir jika Anda ingin menyimpan media fisik asli, Anda mungkin ingin menulis disk kembali. Saya pikir saya akan menyelesaikan ini secara terbalik, dimulai dengan perangkat lunak (yaitu:mengonversi file disk ADF menjadi data MFM untuk antarmuka untuk menulis entah bagaimana ).

Jadi saya mulai dengan menambahkan kelas untuk membaca disk ADF, dan mengkodekan semua sektor sebagai satu trek. Mengetahui saya berpotensi menguji data yang saya buat dengan memasukkannya kembali ke bagian decoding, saya mulai mengerjakan ini. Saat mengerjakan ini, saya memutuskan untuk mencoba mencari tahu apa yang salah dengan Amiga saya. Lagi pula, saya tidak dapat menguji disk apa pun yang saya buat jika saya tidak memiliki apa pun yang nyata untuk mengujinya.

Membongkar A500+ saya, saya perhatikan itu mengalami salah satu masalah paling umum, baterai jam bocor di mana-mana. Jadi saya melepas solder ini dari papan dan mulai membersihkan papan. Saat melakukannya, saya mengeluarkan seluruh mesin dan mulai membersihkan debu dan kotoran selama 20 tahun. Saya bahkan membongkar floppy drive untuk membersihkannya.

Saat membersihkannya, saya memutuskan sudah waktunya untuk menghilangkan warna kuningnya, jadi saya mengikuti informasi tentang Retr0brite dan mencobanya.

Saya kemudian memeriksa semua sambungan pada motherboard utama dan menemukan koneksi yang longgar oleh konektor daya, beberapa sentuhan dengan besi solder dan seperti baru. Saya menunggu sampai saya puas dengan proses Retr0brite sebelum memasang kembali komputer.

Sementara itu saya terus mengerjakan kode untuk menulis disk. Saya ingin membaca status baris proteksi tulis, tetapi tidak peduli apa yang saya atur, sepertinya tidak mengubah voltase. Jadi saya memisahkan drive dan mengikuti jejak dari sakelar kecil yang mendeteksi status proteksi tulis ke IC kecil. Pada titik ini saya menduga bahwa output mungkin hanya tersedia ketika Anda benar-benar ingin menulis data.

Setelah banyak eksperimen, saya menemukan bahwa Anda perlu menarik /WRITE_GATE pin LOW sebelum memutar drive untuk mengaktifkan penulisan. Pada titik ini Anda bisa mendapatkan status proteksi tulis. Saya juga memperhatikan bahwa saat /WRITE_GATE rendah, drive tidak mati seperti dulu sampai pin tersebut kembali ke status TINGGI default.

Amiga akan menulis seluruh lagu sekaligus. Sebuah trek dalam memori adalah 11*512 byte (5638 byte), namun, setelah pengkodean MFM dan memasukkan format AmigaDOS yang benar, trek bekerja sebagai 14848 byte. Yah, tidak ada cara yang dapat memuat memori 2k Arduino, atau 1k EEPROM-nya. Saya membutuhkan metode alternatif.

Saya memutuskan untuk mencoba mengirim data 1 byte pada satu waktu di utas prioritas tinggi dan menunggu byte respons dari Arduino sebelum mengirim yang berikutnya. Saya mengubah baud rate menjadi 2M untuk mengurangi jeda antar karakter. Ini berarti bahwa dibutuhkan sekitar 5,5 uSec untuk mengirim setiap karakter, dan 5,5 uSec untuk menerima satu kembali. Arduino perlu menulis 8 bit, pada 500khz, jadi itu akan membutuhkan byte baru setiap 16 uSec. Jadi harus ada waktu, dengan asumsi loop kode cukup ketat dan sistem operasi tidak menunda pengiriman dan penerimaan terlalu banyak.

Ini benar-benar kegagalan total. Seluruh siklus baca/tulis memakan waktu terlalu lama, jauh melampaui satu putaran disk. Sisi Arduino mungkin cukup cepat, tetapi OS-nya tidak cukup responsif. Membaca disk berfungsi karena OS (Windows dalam kasus saya) akan menyangga data yang masuk, tetapi menulis, Windows hanya akan mengirim semuanya sekaligus, tetapi karena kecepatan pengiriman saya jauh lebih cepat daripada yang dibutuhkan Arduino, data akan hilang. Inilah mengapa saya memutuskan proses pengakuan dua arah ini.

Menulis Data - Percobaan 2

Kontrol aliran perangkat lunak untuk aplikasi ini tidak cukup cepat. Saya memutuskan untuk menyelidiki kontrol aliran perangkat keras. Saya perhatikan di papan breakout FTDI ada pin CTS dan DTR. Ini singkatan dari Clear To Send dan Terminal Data Siap . Saya perhatikan bahwa saat papan breakout terhubung, papan Arduino menghubungkan CTS ke GND.

Saya juga tidak tahu ke arah mana pin ini sebenarnya, tetapi setelah beberapa percobaan, saya menemukan pin CTS dapat diberi sinyal dari Arduino dan digunakan oleh PC untuk mengontrol aliran. Biasanya ini dilakukan dengan menggunakan buffer melingkar, tetapi dalam kasus saya, saya tidak bisa mengizinkan ini, jadi saya cukup mengaturnya ke '1' ketika saya tidak menginginkan data, dan '0' saat saya menginginkannya.

Sekarang ini berarti saya hanya bisa meminta OS untuk mengirim byte secara massal sebagai satu potongan, dan berharap semuanya ditangani di tingkat kernel sehingga tidak akan terganggu.

Saya memiliki loop dalam yang menghasilkan setiap bit dari 8 bit, tetapi memutuskan bahwa mungkin lebih baik mengatur waktu untuk menguraikannya menjadi 8 set perintah.

Ini tidak berhasil. Jika saya mengizinkan kode untuk berjalan tanpa benar-benar menjalankan bagian penulisan disk, maka semua byte diterima dengan benar, tetapi dengan menjalankan kode, tidak dan byte yang diterima hilang.

Saya menduga bahwa mengubah status jalur CTX tidak langsung menghentikan aliran data dan komputer mungkin masih mengirim satu atau dua karakter. Mungkin pada saat saya memberi sinyal pada saluran CTX, itu sudah dalam proses pengiriman karakter berikutnya.

Menulis Data - Percobaan 3

Saya tidak ingin memiliki interupsi serial karena saya tidak ingin pengaturan waktu penulisan terdistorsi. Saya menyadari bahwa peralihan menulis setiap bit ke floppy drive akan ada sejumlah siklus CPU duduk di loop sementara berikutnya. Saya memutuskan untuk memeriksa antara setiap penulisan bit apakah byte lain telah diterima sejak CTX menjadi tinggi dan menyimpannya.

Teori saya adalah bahwa ketika Anda menaikkan CTX, komputer mungkin sudah di tengah-tengah mentransmisikan byte berikutnya dan karena Anda tidak dapat menghentikannya di tengah-tengah, maka itu akan menjadi setengahnya setelah yang ini. Ini berarti saya hanya perlu memeriksa satu byte tambahan selama loop dan menggunakannya jika ditemukan daripada melihat port serial lagi.

Jadi ini sepertinya berhasil, dan Arduino menyelesaikan penulisan tanpa kehilangan data apa pun dari komputer. Satu-satunya pertanyaan sekarang adalah:apakah itu benar-benar menulis data apa pun, dan jika demikian, apakah ada yang valid?

Pada titik ini saya hanya mengkodekan satu trek, jadi saya memutuskan untuk menjalankan seluruh algoritme untuk mengkodekan semua 80 trek. Sesuatu yang aneh sedang terjadi. Kepala drive tidak bergerak sama sekali. Itu masih terjadi saat membaca, tetapi tidak saat menulis.

Saya menemukan bahwa untuk menggerakkan kepala drive maju mundur Anda harus terlebih dahulu menaikkan pin /WRITE GATE, saya menduga ini diperlukan untuk mengubah permukaan juga. Setelah saya menambahkan kode untuk melakukan ini, kepala drive bergerak seperti yang diharapkan. Ini memang masuk akal dan akan mencegah penulisan trek yang tidak disengaja saat menggerakkan kepala.

Jadi pada titik ini saya menulis gambar disk yang telah saya buat sebelumnya, dan kemudian mencoba membacanya kembali. Tidak ada yang bisa dideteksi! Entah data yang saya tulis tidak valid, atau cara saya menulisnya yang salah.

Saya memutuskan untuk memasukkan data sektor MFM yang disandikan yang saya buat ke dalam algoritme penguraian kode sektor saya yang digunakan oleh pembaca untuk memvalidasi bahwa apa yang saya hasilkan benar dan valid, dan memang demikian. Jelas ada yang salah dengan cara saya menulis data ke disk.

Menulis Data - Percobaan 4

Karena tidak ada data yang dibaca dengan benar, saya memutuskan untuk mencoba beberapa pendekatan berbeda. Saya tidak yakin apakah pin /WRITE DATA harus berdenyut (dan jika demikian, berapa lama), beralih atau hanya disetel ke nilai data mentah. Implementasi saya saat ini berdenyut pin. Saya belum dapat menemukan informasi apa pun secara online tentang bagaimana pin tulis secara fisik seharusnya dimanipulasi saat menulis.

Kepala baca akan mengirimkan pulsa setiap kali ada pembalikan fluks. Saya memutuskan untuk mengubah implementasi sehingga MENULIS DATA hanya diatur ke nilai bit. Itu juga tidak berhasil. Jadi saya mengubah kode untuk mengaktifkan status pin saat ini. Masih belum beruntung.

Jelas salah satu dari pendekatan ini pasti yang benar. Jadi saya memutuskan untuk mengeluarkan osiloskop terpercaya lagi untuk melihat apa yang sedang terjadi. Saya memutuskan untuk menulis pola MFM 0xAA ke setiap byte di trek secara terus menerus. 0xAA dalam biner adalah B10101010, jadi ini akan memberi saya gelombang persegi sempurna yang dapat saya pantau untuk frekuensi yang diperlukan.

Jika tidak melihat gelombang persegi yang sempurna pada frekuensi yang diinginkan, maka saya tahu pasti ada semacam masalah waktu.

Saya menghubungkan ruang lingkup, tetapi terkejut melihat waktunya adalah sempurna. Namun, menjadi lingkup lama saya tidak bisa melihat lebih dari beberapa pulsa. Lingkupnya memiliki mode "mag" x10 yang luar biasa ini. Saat ditekan, itu meningkatkan basis waktu sebesar 10, tetapi yang lebih penting memungkinkan Anda untuk menggulir semua data seperti pada lingkup digital modern.

Ada yang tidak beres di sini. Sepertinya setiap 12 bit atau lebih saya berakhir dengan periode hanya "tinggi" .

Entah data yang saya kirim entah bagaimana tidak valid, atau ada sesuatu yang menyebabkan jeda dalam proses penulisan setiap 12 bit atau lebih. 12 adalah angka yang aneh mengingat hanya ada 8 bit dalam satu byte.

Setelah memikirkan hal ini, saya bertanya-tanya apakah saya kembali dengan masalah kontrol aliran. Cara saya mendesain perulangan adalah dengan mengambil byte ekstra liar yang diterima setelah kami menunggunya. Tapi itu tidak cukup cerdas untuk mencegah menunggu setiap byte lainnya. Saya punya dua pilihan, pindahkan sesuatu menjadi interupsi, atau menambal loop.

Saya memutuskan untuk mencoba memperbaiki cara kerja loop terlebih dahulu. Masalahnya adalah sebagai akibat dari penundaan yang disebabkan oleh menunggu byte berikutnya dari komputer. Jika kita menurunkan CTX dan menunggu satu byte, saat kita menaikkan CTX lagi, byte lain sudah dalam perjalanan.

Saya mengubah loop sehingga ketika byte kedua yang diterima telah digunakan, Arduino sesaat menarik CTS rendah dan kemudian tinggi lagi untuk memungkinkan karakter lain dikirim. Ini berarti pada loop berikutnya kita sudah menerima byte berikutnya sehingga tidak perlu menunggu.

Pengujian ini menghasilkan gelombang persegi yang sempurna:

Ini berarti semua pengaturan waktu untuk menulis trek sudah sempurna, hanya sampai sebenarnya data yang sedang ditulis. Saya memutuskan untuk membiarkan ini berjalan untuk beberapa trek dan sisi, dan kemudian membacanya kembali untuk melihat apakah itu ditulis dengan benar. Saya menyetel pin /WRITE_DATA ke nilai bit yang sesuai dari data yang diterima.

Saat membaca data kembali, sepertinya tidak ada yang dikodekan, tetapi kemudian saya melompat ke sisi lain disk. Benar saja ada pola saya. Saya tidak tahu mengapa itu hanya ditulis ke satu sisi disk.

Setelah beberapa pemikiran, saya mulai bertanya-tanya apakah pin /WRITE GATE tidak benar-benar berfungsi seperti yang saya kira. Terjadi bahwa dengan menarik pin rendah mungkin memungkinkan menghapus kepala pada drive. Jika ini masalahnya, maka saya hanya harus melakukan ini ketika saya benar-benar menulis atau saya mungkin akan berakhir dengan kebisingan pada disk saat berputar dan terhapus.

Saya mengubah semua kode sehingga /WRITE GATE hanya digunakan saat pertama kali memulai drive, dan kemudian hanya secara harfiah selama loop tulis. Itu berhasil! Saya sekarang sedang menulis data ke kedua sisi disk!

Jadi saya mencoba lagi dengan gambar disk ADF asli dan membiarkannya selesai. Saya kemudian menggunakan bagian pembaca untuk melihat apakah saya bisa membacanya kembali. Itu berhasil! Tapi untuk beberapa alasan butuh beberapa waktu untuk membaca disk ini kembali. Saya tidak mendapatkan kesalahan MFM, tetapi saya kesulitan menemukan semua sektor.

Ada dua kemungkinan bagi saya untuk melihat sekarang:pertama, apakah data benar-benar ditulis cukup tepat waktu; dan kedua, apakah disk benar-benar berfungsi di Amiga asli?

Terlalu bersemangat dengan gagasan bahwa saya mungkin benar-benar menulis disk, saya mem-boot sekarang berfungsi A500+ dan masukkan disk. Beberapa saat kemudian, disk mulai boot dan kemudian menampilkan pesan kesalahan checksum yang terkenal. Jadi saya menulis sesuatu valid, tetapi tidak konsisten.

Saya memutuskan bahwa kecuali saya dapat membaca kembali data dengan kecepatan yang jauh lebih akurat, menulis disk tidak ada gunanya.

Membaca Data (lagi)

Saya ingin meningkatkan kualitas membaca karena saya tidak senang dengan implementasi saat ini. Implementasi saat ini tidak memungkinkan fleksibilitas yang cukup untuk pulsa tiba pada waktu yang sedikit aneh. Saya membutuhkan pendekatan baru.

Pertama, saya memutuskan untuk menyinkronkan pembacaan ke pulsa /INDEX. Ini tidak diperlukan oleh Amiga tetapi mungkin berguna nanti bagi saya untuk menguji, menulis, dan membaca.

Beberapa orang dalam komentar pada paruh pertama proyek ini menyarankan agar saya mencatat waktu antar pulsa daripada metode yang telah saya terapkan. Satu-satunya masalah dengan ini adalah mendapatkan data ini ke PC dengan cukup cepat. Jika saya mengirim satu byte untuk setiap bit, maka saya dapat dengan mudah melebihi baud maksimum 2M.

Saya memutuskan bahwa hal terbaik yang harus dilakukan adalah mencoba sedikit memahami data. Jadi saya memutuskan untuk membiarkan penghitung yang awalnya saya gunakan untuk menjalankan bebas, hingga 255. Saya kemudian meletakkan kode dalam lingkaran menunggu pulsa dan titik ini melihat berapa banyak waktu telah berlalu.

Dalam situasi ideal, nilai minimum serendah mungkin adalah 32 (sesuai dengan 2 uSec). Dengan MFM Anda hanya dapat memiliki maksimum tiga 0 berturut-turut, jadi nilai maksimum yang harus dicapai adalah 128. Ini berarti ada maksimum 4 kemungkinan kombinasi berturut-turut.

Saya mengambil sampel beberapa disk untuk melihat di mana sebagian besar frekuensi ini berada, dan hasilnya dapat dilihat di bawah:

Melihat ini, saya menemukan sebagian besar poin di sekitar penghitung 52, 89 dan 120. Namun, ini agak spesifik untuk drive saya dan karenanya bukan pedoman yang baik. Setelah beberapa percobaan, saya menggunakan rumus berikut:value =(COUNTER - 16) / 32 . Ketika terpotong antara 0 dan 3 ini memberi saya output yang saya butuhkan. Setiap 4 ini dan saya bisa menulis satu byte.

Terpikir oleh saya bahwa karena Anda tidak dapat memiliki dua '1 bersama-sama dalam aliran bit yang disandikan MFM, saya dapat dengan aman menganggap apa pun untuk nilai pertama tidak valid dan dapat diperlakukan sebagai urutan '01' lainnya. Bagian selanjutnya adalah membongkar data ini setelah diterima oleh PC dan mengubahnya kembali menjadi data MFM. Ini sederhana, karena 00 tidak mungkin terjadi, 01 berarti tulis '01', 10 berarti tulis '001' dan 11 berarti tulis '0001'. Saya mencoba ini dan yang mengejutkan saya, hasil saya 100% berhasil. Saya mencoba dengan beberapa disk lagi, 100%! Sekarang saya memiliki pembaca disk yang sangat andal.

Dengan pendekatan baru ini yang jauh lebih toleran pada data dari disk, saya tidak lagi memerlukan analisis fase apa pun atau banyak percobaan ulang. Sebagian besar disk saya sekarang terbaca dengan sempurna. Beberapa membutuhkan beberapa percobaan ulang tetapi sampai di sana pada akhirnya. Bagian terakhir adalah menganalisis data secara statistik dan melihat apakah data tersebut dapat diperbaiki, namun, 99% dari waktu data buruk yang masuk benar-benar tidak dapat dikenali dan hanya sedikit membantu.

Menulis Data - Percobaan 5

Sekarang saya dapat memverifikasi apa yang telah saya tulis dengan akurasi tinggi, itu berarti menguji penulis akan jauh lebih mudah.

Saya mulai menganalisis kode untuk melihat apa yang salah. Saya menulis urutan 0x55 ke seluruh trek dan kemudian membacanya kembali. Dari waktu ke waktu, ada sedikit pergeseran dalam data yang kembali, yang berarti ada semacam masalah pengaturan waktu dalam penulisan.

Ternyata ini sebagian karena cara saya menangani port serial, dan sebagian lagi karena penggunaan timer. Saya sedang menunggu timer mencapai nilai 32, menulis bit, dan kemudian mengatur ulang. Saya mengubahnya sehingga saya tidak perlu mengubah nilai penghitung waktu.

Saya akan menulis bit pertama ketika penghitung mencapai 16, selanjutnya ketika mencapai 48 (16+32), dan berikutnya ketika mencapai 80 (16+32+32) dan seterusnya. Timer2 yang hanya 8-bit berguling kembali ke nol setelah bit ke-8, persis ketika kita membutuhkannya. Ini berarti bahwa selama kita menulis bit pada nilai timer yang diperlukan, kita akan berada tepat pada 500kbps.

Saya juga melihat bagaimana saya membaca data dari port serial. Ini sedang dibaca di antara setiap bit, tetapi ini juga harus sesingkat mungkin. Setelah sedikit bereksperimen, saya mencapai blok kerja terpendek.

Setelah memodifikasi kode Windows untuk mendukung verifikasi, saya sekarang siap untuk mencoba lagi. Kali ini saya tahu bahwa jika disk diverifikasi dengan benar, maka itu akan berfungsi dengan baik di Amiga.

Jadi saya mencoba menulis disk lain. Dengan verifikasi butuh waktu lebih lama. Dengan algoritme baru, sekitar 95% trek lolos verifikasi pada putaran pertama, dengan hanya 5% sisanya yang harus ditulis ulang sekali lagi. Saya senang dengan ini dan memasukkan disk ke dalam Amiga. Ini bekerja dengan sempurna!

Menulis Data - Percobaan 6

Setelah beberapa umpan balik dari beberapa orang yang telah menggunakan ini, jelas bahwa bahkan dengan verifikasi pada drive tidak selalu menghasilkan disk yang dapat dibaca sepenuhnya. Perangkat lunak dapat membacanya kembali dengan sempurna, tetapi komputer Amiga akan melaporkan beberapa kesalahan checksum di sana-sini.

Saya melihat kode lagi, bertanya-tanya apakah itu masalah waktu dan melihat apakah itu dapat dibuat untuk digerakkan oleh interupsi, tetapi sayangnya dengan sedikit waktu antara setiap bit, tidak ada cukup waktu dengan interupsi untuk mencapai ini dengan mempertahankan register yang Anda modifikasi, dll.

Saya kemudian melihat kembali kode penulisan. Ada kemungkinan kecil bahwa setelah satu byte penuh telah ditulis, kode dapat mengulang kembali untuk mulai menulis byte berikutnya sebelum pengatur waktu meluap kembali ke 0, memungkinkan bit pertama ditulis lebih awal.

Saya menambahkan loop kecil untuk memastikan ini tidak terjadi yang mudah-mudahan akan memperbaikinya untuk siapa pun yang mengalami masalah ini.

Menulis Data - Percobaan 7

Setelah mendapatkan banyak laporan tentang kesalahan checksum untuk disk tertulis, saya mulai menyelidiki. Saya pikir pada awalnya saya harus melihat data MFM dari disk tetapi masalahnya sebenarnya jauh lebih sederhana

Melihat XCopy Pro untuk melihat kesalahan checksum, itu melaporkan kode 4 dan 6 yang berarti kesalahan checksum di header sektor dan area data. Jika itu hanya area data, maka saya akan berasumsi bahwa itu murni ada hubungannya dengan menulis beberapa bit terakhir dari trek, tapi ternyata tidak.

Saya mulai melihat kode penulisan dan padding yang saya miliki di sekitar setiap trek, bertanya-tanya apakah saya kadang-kadang menimpa awal trek, jadi saya secara besar-besaran mengurangi padding pasca-track dari 256 byte menjadi 8. Yang mengejutkan saya, verifikasi saya kemudian mengeluarkan banyak kesalahan.

Ini membuat saya bertanya-tanya apakah masalah sebenarnya adalah saya tidak menulis cukup data. Saya mulai menambahkan perintah Track Erase ke Arduino yang akan menulis pola 0xAA ke seluruh track dan kemudian menulis track saya setelahnya. Yang mengejutkan saya, XCopy memberikan acungan jempol 100%. Jadi mudah-mudahan itu menyelesaikan masalah itu.

Diagnostik

Saya mendapat banyak umpan balik dari orang-orang yang telah berhasil membuat proyek ini, baik yang berfungsi penuh maupun yang tidak berfungsi. Saya memutuskan untuk membuat modul diagnostik ke dalam kode untuk membantu siapa saja yang tidak bisa menjalankannya.

Opsi diagnostik terdiri dari beberapa perintah tambahan untuk diproses Arduino serta seluruh rangkaian peristiwa yang dijalankan untuk memastikan semuanya terhubung dengan benar.

Jadi Apa Selanjutnya?

Seluruh proyek gratis dan open source di bawah GNU General Public License V3. Jika kita ingin memiliki harapan untuk melestarikan Amiga, maka kita tidak boleh saling merobek demi hak istimewa. Dan selain itu, saya ingin memberikan kembali ke platform terbaik yang pernah saya kerjakan. Saya juga berharap orang-orang akan mengembangkan ini dan melangkah lebih jauh dan terus berbagi.

Solusi penulisan saat ini bukanlah pilihan pada Arduino UNO kecuali Anda menggunakan papan breakout FTDI/serial terpisah, jadi tugas saya selanjutnya adalah membuatnya berfungsi (mungkin menggunakan IC 23K256 untuk buffer trek sebelum menulisnya ke disk).

Saya masih ingin melihat format lain. File ADF bagus, tetapi hanya berfungsi untuk disk berformat AmigaDOS. Ada banyak judul dengan perlindungan salinan khusus dan format sektor non-standar yang tidak dapat didukung oleh format ini. Saya telah menerima beberapa informasi yang sangat berguna tentang ini tetapi saat ini tidak memiliki banyak disk untuk diuji.

Menurut Wikipedia, ada format file disk lain, format FDI. Format universal, yang didokumentasikan dengan baik. Keuntungan dari format ini adalah mencoba menyimpan data trek sedekat mungkin dengan aslinya sehingga diharapkan dapat memperbaiki masalah di atas!

Saya juga menemukan Software Preservation Society, khususnya CAPS (secara resmi Classic Amiga Preservation Society ) dan format IPF-nya. Setelah sedikit membaca, saya sangat kecewa; semuanya tertutup, dan rasanya seperti mereka hanya menggunakan format ini untuk menjual perangkat keras pembaca disk mereka.

Jadi fokus saya akan pada format FDI. Satu-satunya perhatian saya di sini adalah dengan integritas data. Tidak akan ada checksum untuk saya periksa untuk melihat apakah pembacaan itu valid, tapi saya punya beberapa ide untuk menyelesaikannya!

Kode

Sketsa dan Sumber Aplikasi Windows
Arduino Sketch, dan contoh kode sumber aplikasi Windowshttps://github.com/RobSmithDev/ArduinoFloppyDiskReader

Skema

Sirkuit untuk Arduino Pro Mini Sirkuit untuk Arduino UNO

Proses manufaktur

  1. Animasi
  2. Floppy Disk
  3. Giroskop Menyenangkan dengan NeoPixel Ring
  4. Arduino Spybot
  5. FlickMote
  6. TV Buatan Sendiri B-Gone
  7. Pengontrol Game Arduino
  8. Kostum Cloud
  9. Jam Master
  10. Pembaca Floppy Disk Arduino Amiga (V1)