Elektroda.pl
Elektroda.pl
X
PLC Fatek
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

AVR X-Copy Final Step ;) Amiga Floppy Disk Reader

Mundi1970 12 Paź 2011 15:03 19736 29
  • AVR X-Copy Final Step ;) Amiga Floppy Disk Reader

    Witam, chciałbym przestawić efekt mojej pracy. Pewnego razu przy porządkach natknąłem się na mnóstwo moich starych dyskietek do komputera Amiga. I tu zrodził się pomysł :) "a może da się to jeszcze jakoś odczytać?". Efektem tego pomysłu jest to urządzenie - AVR X-Copy Final Step ;) (X-Copy - bardzo znany wśród amigowców, program do kopiowania dyskietek). Zadaniem urządzenia jest wykonanie kopii dyskietki, wynik zapisywany jest jako obraz dyskietki na karcie SD. Obraz dyskietki jest zapisywany w formacie ADF, można go wykorzystać w emulatorze Amigi UAE. Oprócz pliku ADF zapisywane są jeszcze dwa pliki, LOG plik tekstowy z historią zdarzeń i SFV (Simple File Verification) - plik tekstowy z sumą kontrolną CRC32.

    Jako baza do wykonania projektu posłużyło mi Arduino MEGA z mikrokontrolerem ATmega 1280. Urządzenie jest wykonane w formie dodatkowych płytek (shieldów).

    AVR X-Copy Final Step ;) Amiga Floppy Disk Reader

    AVR X-Copy Final Step ;) Amiga Floppy Disk Reader

    AVR X-Copy Final Step ;) Amiga Floppy Disk Reader

    Są to pierwsze dwustronne płytki, jakie wykonałem - pewnie niektórzy zauważą, że jedna z płytek jest lekko podtrawiona ;) Tu się okazało, że moja drukarka wcale nie drukuje w kolorze czarnym :D

    Do odczytu dyskietek posłużyła mi standardowa stacja dyskietek 3,5 cala (testowałem na NEC FD1231H i SAMSUNG SFD-321B). Oprogramowanie napisane jest w BASCOM'ie :) plus wstawki asemblera. Po kompilacji wsad ma 20,5kB. Kod źródłowy, wsad i schematy są w archiwum, schematy są rysowane przez początkującego hobbystę, więc proszę o wyrozumiałość :)

    Na razie wykonałem kopię około 80 dyskietek, z czego 3 nie mogłem całkowicie odczytać.


    Link




    Source, HEX, bin i PCB:


    Fajne!
  • Semicon
  • #2 12 Paź 2011 17:03
    tronics
    Poziom 36  

    Projekt bardzo ciekawy, nic tylko zrobić teraz w drugą stronę tj. z obrazu na SD do amigi i zrobić konkurencję do HxC Floppy Emulatora :)

  • #3 12 Paź 2011 19:18
    Father
    Poziom 26  

    tronics napisał:
    Projekt bardzo ciekawy, nic tylko zrobić teraz w drugą stronę tj. z obrazu na SD do amigi i zrobić konkurencję do HxC Floppy Emulatora :)

    Pracuję nad tym :wink:

  • #4 12 Paź 2011 19:22
    BraciaMrok
    Poziom 14  

    Bardzo fajne, jeżeli ktoś ma od tego dyskietki xD Tak z ciekawości, ile kopiuje się jedna dyskietka ?

    PS. Na DIY jest zakaz dawania prowizji na pliki...

  • #6 12 Paź 2011 19:48
    Siles
    Poziom 17  

    Fajny projekt :) Choć jest tego typu projektów multum na mikroprocesorze "PIC" ale mimo tego ....
    Do Autora ! PIĘKNA ROBOTA...

    A co do kolegi "BraciaMrok" nie bądź skąpy... w końcu i Autora postu też kosztowało to CZAS...
    Wiec na przyszłość radził bym zmienić podejście...

    Pozdrawiam Siles

  • #7 12 Paź 2011 20:24
    Mundi1970
    Poziom 24  

    BraciaMrok napisał:
    Bardzo fajne, jeżeli ktoś ma od tego dyskietki xD Tak z ciekawości, ile kopiuje się jedna dyskietka ?


    Dyskietek posiadam dużo :D. Czas kopiowania jednej dyskietki to około 90s.
    Nie wspomniałem w opisie że urządzenie odczytuje tylko standardowe dyskietki (DD 880KB 11 sektorów na ścieżkę). Nie są obsługiwane dyskietki HD które też były dostępne na Amigę. Chciałbym zrobić jeszcze obsługę niestandardowego formatu, jak uda mi się znaleźć gdzieś opis. Diskspare.device zapisywał 13 sektorów na ścieżkę i obsługiwał dodatkowo 4 ścieżki więcej (2 na stronę).

  • #8 13 Paź 2011 08:14
    22053
    Użytkownik usunął konto  
  • Semicon
  • #9 13 Paź 2011 08:32
    rafcio363
    Poziom 30  

    Projekt ciekawy, chociaż mało przydatny (pomijając już Amigowców) bo wszystkie adf-y od dawna wiszą w sieci.

  • #10 13 Paź 2011 09:37
    Mundi1970
    Poziom 24  

    R-MIK napisał:
    Twoje urządzenie przeprowadza test pamięci ram, jakim algorytmem?

    Test pamięci został jeszcze z fazy projektu i testów na płytce. Na początku wykorzystywałem zły zatrzask 74ALS573 i było dużo błędów. Następnie 74HC573 i to już działało choć nie jest zalecany powyżej 4Mhz, teraz jest już z 74AHC573.
    A "algorytm" :) podzielony na 5 części zapis i odczyt losowych danych, wartości $55, $AA, $FF i 0.
    rafcio363 napisał:
    Projekt ciekawy, chociaż mało przydatny (pomijając już Amigowców) bo wszystkie adf-y od dawna wiszą w sieci.

    Tak? Jakoś nie mogę znaleźć swoich source z pierwszym scrollem i wektorówką ;) lub "SUPER" obrazków w rozdzielczości 640x512 renderowanych w Imagine przez 2 lub więcej dni :D. Jak się człowiekowi znudzi "mrygać" diodami, robi coś innego :D.

  • #11 13 Paź 2011 09:44
    22053
    Użytkownik usunął konto  
  • #12 13 Paź 2011 12:27
    Mundi1970
    Poziom 24  

    R-MIK napisał:
    (...) Zrób test algorytmem march Link, w ten sposób wykryjesz błędy na magistrali danych jak i adresowej, łącznie z określenie który bit magistrali jest uszkodzony.

    Czyli jak dobrze zrozumiałem MATS+ March to ma być tak:

    1. Zapisuje w całej pamięci 0
    2. odczytuje komórkę pamięci wynikiem ma być 0 jeżeli ok to zapisuje w komórce 1 jeżeli wynik nie pozytywny to błąd
    3. powtarzam punkt 2 na wszystkich komórkach pamięci
    4. odczytuje komórkę pamięci wynikiem ma być 1 jeżeli ok to zapisuje w komórce 0 jeżeli wynik nie pozytywny to błąd
    5. powtarzam punkt 4 na wszystkich komórkach pamięci

    Powyższe punkty powtarzam 8 razy (każdy bit w bajcie zapalam osobno)

  • #13 13 Paź 2011 12:37
    22053
    Użytkownik usunął konto  
  • #14 14 Paź 2011 11:43
    leniuk
    Poziom 13  

    Ale czy wyjście danych ze stacji dyskietek nie wymaga filtrów do detekcji logicznego 0 i 1?

  • #15 14 Paź 2011 15:23
    Mundi1970
    Poziom 24  

    leniuk napisał:
    Ale czy wyjście danych ze stacji dyskietek nie wymaga filtrów do detekcji logicznego 0 i 1?

    Jeżeli chodzi o układ 74HC14, to nawet nie próbowałem. Wyłapuje sygnał od zbocza opadającego do następnego zbocza opadającego. Do określenia długości sygnału wykorzystuje timera0. W zależności od długości sygnału wstawiam bity 10, 100 lub 1000. czasy dla Ta (bity 10) to 4us, Tb (bity 100) to 6us i Tc (bity 1000) to 8us. W ustawieniach można ustawić dość pokaźne marginesy błędu :). Czas Ta np. 3.5us jeżeli sygnał będzie krótszy to błędu, jeżeli większy to bity 10, Ta i Tb granica pomiędzy bitami 10 i 100 np. 4,5us jeżeli sygnał krótszy to bity 10 jeżeli większy to bity 100. Tak samo dla Tb i Tc granica pomiędzy bitami 100 i 1000 np. 6,3us jeżeli sygnał krótszy to bity 100 jeżeli większy to bity 1000. I samo Tc np. 8,2us czyli jeżeli większy to błąd, jeżeli mniejszy to bity 1000. Jak na razie to mi się sprawdza :) wykonano 130 obrazów dyskietek bez błędu, 6 nie da się całkowicie odczytać. Na upartego ten układ można jeszcze zamontować, zrobić dodatkowy "Upgrade Kit" :) i zamontować na złączu w miejscu gdzie podpina się stacje dyskietek. Przy okazji można złącze od stacji przygotować na taśmę skrosowaną :).

  • #16 16 Paź 2011 12:37
    236759
    Użytkownik usunął konto  
  • #17 17 Paź 2011 22:28
    Ture11
    Poziom 34  

    Witam. Chciałem powiedzieć, że układ jest bardzo pomysłowy i cieszę się, że ktoś dostrzega urok starych programów i gierek, które już dawno wyszły z użycia. Chciałem jednak zapytać, jak wygląda sprawa z danymi z głowicy? Kolega napisał:

    pandy napisał:

    nie wymaga - na plycie napedu jest uklad ktory analogowo obrabia sygnal z glowicy odczytu i zamienia na postac cyfrowa.


    Kiedyś próbowałem sprzężyć Atmegę ze stacją dyskietek, wychodziło ruszanie głowicą i silnikiem, ale na elektrodzie dowiedziałem się, że dane z głowicy są przetwarzane dopiero na płycie głównej, więc sobie darowałem... Jak jest na prawdę? Myślę, że autor musiał przejść przez ten etap... Mógłbym więc prosić o podpowiedź?

  • #18 18 Paź 2011 09:06
    236759
    Użytkownik usunął konto  
  • #19 18 Paź 2011 14:59
    Mundi1970
    Poziom 24  

    Dziękuje koledze pandy :).

    Ture11 napisał:
    Kiedyś próbowałem sprzężyć Atmegę ze stacją dyskietek, wychodziło ruszanie głowicą i silnikiem, ale na elektrodzie dowiedziałem się, że dane z głowicy są przetwarzane dopiero na płycie głównej, więc sobie darowałem... Jak jest na prawdę? Myślę, że autor musiał przejść przez ten etap... Mógłbym więc prosić o podpowiedź?

    Po uruchomieniu silnika i sprawdzeniu sygnału Ready, na wyjściu Read_data dane już "lecą" :)
    AVR X-Copy Final Step ;) Amiga Floppy Disk Reader
    Czyli trzeba odczytać dane MFM i następnie je zdekodować. Jeden sektor w formacie Amiga-DOS ma 512 bajty, ale w rzeczywistości na dyskietce zajmuje 1088 bajty. Gdzie 1024 bajty to dane przed zdekodowaniem, a reszta to nagłówek sektora z sumami kontrolnymi i informacjami o sektorze. Ja odczytuje nie jeden sektor tylko całą ścieżkę (11*1088 bajty). Czyli jak widzimy na rysunku przy dyskietce DD musimy wyłapywać sygnał (od zbocz opadającego do następnego zbocza opadającego) o długości 4us, 6us, 8us i przypisać im odpowiednie bity. Poniżej rozpisałem jakie bity przypisujemy sygnałom.
    Code:

          Dyskietka DD     Dyskietka HD   odpowiada bitom

    Ta    4us                   2us                10

    Tb    6us                   3us                100

    Tc    8us                   4us                1000   


    Moja procedura nie nadaję się do odczytu dyskietki HD, jak widzimy Ta wynosi 2us (+ jeszcze jakiś margines błędu i będzie 1,5us), co daje poniżej 32 cykli przy 16Mhz. Jest po prostu za wolna :(. Nie mówię że dyskietki HD nie da się odczytać na 8 bitowym AVR , tylko że do problemu trzeba podejść inaczej ;).

    Kiedy zaczynamy czytać dane? W wypadku pecetowych dyskietek sprawa jest uproszczona, napęd podaje sygnał Index. Występuje on co około 200ms +- 3ms (tyle trwa jeden obrót dyskietki). Po wystąpieniu tego sygnału można zacząć czytać. Niestety Amiga nie wykorzystywała tego sygnału, każdy sektor ma taki nagłówek $AAAAAAAA44894489 (co ciekawe nie zawsze pierwsze $A musi mieć taką wartość).





    Code:
    ' Tak zakodowany jest początek sektora $AAAAAAA44894489 "magic word":
    
    '
    '  A |  A |  A |  A |  A |  A |  A | A |   4   |    4   |   8  |    9   |   4   |    4   |   8  |    9
    ' 10 | 10 | 10 | 10 | 10 | 10 | 10 | 10 0 | 100 0 | 100 | 1000 | 100 | 1 0 | 100 0 | 100 | 1000 | 100 | 1 .....
    '
    '  1    2    3    4    5    6   7      8      9      10    11     12    13     14     15    16     17


    Ja wyszukuje $AA44894489 (7-17) i zaczynam odczyt reszty danych sektora, po odczytaniu odpowiedniej ilości danych , wyszukuje ponownie początek nagłówka i tak 11 razy (1 ścieżka = 11 sektorów). Jeżeli wystąpi mi jakiś błąd (sygnał poza zakresem) podczas odczytywania danych, wyszukuje od razu następny nagłówek. Ciągiem odczytuje niecałe 12kb. Po odczytaniu danych ścieżki sprawdzam sumy kontrolne nagłówka i danych, jeżeli są prawidłowe dekoduje sektor. Jeżeli któryś sektor ma błąd, odczytuje kilkakrotnie ponownie ścieżkę.

    Tu jest opisane jak zdekodować dane z Amigi. Nie nadaję się to do rozkodowania sektora w formacie MS-DOS, z tego co pamiętam dwa sąsiadujące bity tworzą jeden bit danych:

    Code:
       user's data bit      MFM coded bits
    
       ---------------      --------------
               1                    01
               0                    10
               0                    00


    I chyba tyle, dopiszę coś jak mi się przypomni ;).

  • #20 18 Paź 2011 16:17
    236759
    Użytkownik usunął konto  
  • #21 18 Paź 2011 16:26
    22053
    Użytkownik usunął konto  
  • #22 18 Paź 2011 18:13
    236759
    Użytkownik usunął konto  
  • #23 19 Paź 2011 08:52
    22053
    Użytkownik usunął konto  
  • #24 19 Paź 2011 13:43
    236759
    Użytkownik usunął konto  
  • #25 03 Paź 2012 12:18
    Alectronic
    Poziom 2  

    I've build it and only had some trouble with finding the right fuses of the Arduino Atmega 2560 board.
    Also there was a little bug on line 45 in the Author's BASCOM-Avr program that kept it from going.
    [just remove the &H; before Dim Ram(&H8000;) to get it working !].

    Thomasz Sadzikowski !! Man you did a hell of a job to make this fine piece of hardware on an Arduino Board !
    The only thing it still can't do is of course read protected discs, for instance Nibbled ones. But furthermore it works great !

    I translated everything from the original Polish version to a correct English BASCOM-Avr version and when someone is interested they can contact me.
    (Av.bemmelen@hotmail.com)

  • #26 04 Paź 2012 14:56
    Alectronic
    Poziom 2  

    As mentioned above in my preceeding mail, the X-copy Amiga Floppy to SD card copier generates a BASCOM-Avr Xram out of space error.

    Therefore line 45 needs to be adjusted from "Dim Ram(&H8000;) As Xram Byte At &H2200; " to => Dim Ram (&H5E01;) As Xram Byte At &H2200; .

    As defined in the program the Xram starts at &H2200; (where the internal Sram ends) and therefore is only &H5E01; free space.

    And again a big thanks to Thomasz Sadzikowski for his big programming efforts in making this wonderful Amiga Floppy copier !!

    Albert van Bemmelen, Weert.

  • #27 04 Paź 2012 15:08
    Jimi Hendrix
    Poziom 19  

    Możesz proszę zamieścić schematy w formie obrazków? Nie mam tutaj EAGLE.
    Chcę zobaczyć jak połączyłeś to wszystko ze stacją FDD.
    Pozdrawiam
    JH

  • #28 04 Paź 2012 15:38
    Alectronic
    Poziom 2  

    Attached a video of the perfect working copier !

    (Still can't see it after uploading ??)

  • #29 04 Paź 2012 23:02
    Mundi1970
    Poziom 24  

    Alectronic napisał:
    As mentioned above in my preceeding mail, the X-copy Amiga Floppy to SD card copier generates a BASCOM-Avr Xram out of space error.

    Rzeczywiście BASCOM 2.0.7.5 generuje błąd w linii 45. Linie Dim Ram(&H8000;) As Xram Byte At &H2200; można usunąć. Tablica Ram była wykorzystana w pierwszej wersji (V1.0) programu przez procedurę testującą xram. W wersji 1.01 tablica jest niewykorzystana, nie zauważyłem tego :).

    Jimi Hendrix napisał:
    Możesz proszę zamieścić schematy w formie obrazków? ...

    Pierwsza płytka:

    AVR X-Copy Final Step ;) Amiga Floppy Disk Reader AVR X-Copy Final Step ;) Amiga Floppy Disk Reader

    Druga płytka:

    AVR X-Copy Final Step ;) Amiga Floppy Disk Reader AVR X-Copy Final Step ;) Amiga Floppy Disk Reader

    Klawiatura i lcd:

    AVR X-Copy Final Step ;) Amiga Floppy Disk Reader AVR X-Copy Final Step ;) Amiga Floppy Disk Reader

    Czytnik kart SD:

    AVR X-Copy Final Step ;) Amiga Floppy Disk Reader

  • #30 05 Paź 2012 21:52
    Alectronic
    Poziom 2  

    For all Amiga enthousiasts hobbyists I'd like to mention that about 10 years ago there was another smart Italian guy (Veneri ? I lost his name in time), made Afr 1.0 (Short for: Amiga Floppy Reader).

    I've build that project then also and it worked fine ! But that project had only a pc LPT port connection and only worked with an original Amiga 1010 3,5 inch drive attached to it. But if people want a direct pc connected copier they could use that project.

    For anyone who needs to know : When build, use LPT 1 EPP mode $378/IRQ7.
    (tested in the year 2001 on a A7V1200 Asus pc.)

    Also note that you need to attach pin1 of the 74ls164 chip on the board to Vcc to work because it abusively wasn't going anywhere. And when you use a DC adapter you probably need about 14 Volts !

    Keep on the good work, all of you guys !(or girls ?!)
    Greetings. :D
    Albert van Bemmelen, Weert.