Amiga-diskettemulator

Berätta om dina pågående projekt.
Användarvisningsbild
mrmike
Inlägg: 301
Blev medlem: 29 oktober 2003, 20:40:12

Amiga-diskettemulator

Inlägg av mrmike »

Jag har äntligen fått ändan ur vagnen och jobbat lite på mitt emulera-Amiga-diskett-projekt. Jag har tänkt börja lite "enkelt" med att försöka skriva till en diskett ett "track" i taget för att nån gång långt in i framtiden kanske kunna emulera en diskettstation.

Än så länge har jag samlat information om hårdvaran och hur datan på disketterna ser ut och börjat skriva på ett PC-program som återskapar rå diskettdata från en .adf-fil.

Jag har nyss programmerat en PIC till att agera 8 bitars paralell -> seriell shiftregister som "shiftar" 300kbit/s och begär data av en PC via paralellporten efterhand (nån mer avancerad buffer som jag diskuterat med hebbe får vänta, än så länge är den 1 byte stor). Än har jag inte testat om allt funkar, men i debuggern funkar det som det ska och när jag hårdvirar PIC:en med '10101010' in så mäter jag med min multimeter 150.01 kHz på utgången och det verkar lovande. .01 är jag lite fundersam över men hoppas att det är multimetern som är knasig :)

Tyvärr(?) kommer väl nypåbörjade högskolestudier göra att det inte blir så mkt tid över till lek
matseng
Inlägg: 2360
Blev medlem: 16 september 2003, 17:18:13
Ort: Dubai, United Arab Emirates
Kontakt:

Inlägg av matseng »

Det låter som ett kul projekt.

Att du mäter 150.01 KHz är nog inte så förvånande. Jag skulle bli högst imponerad om du hade en multimeter med en precision bättre än 0.1 promille!

Stod det förresten inte något om amigan på idg.se's förstasida idag?
EDIT: Jo...
Amiga på banan igen
2004-01-27 10:35
Vårens lansering av Amiga OS4 ska ge en nystart för denna klassiska plattform. Det hoppas i alla fall Andreas Loong, ordförande för Amiga Computer Group.
URL'en är gjord av någon med fel på tangentbordet :-) http://www.idg.se/ArticlePages/200401/2 ... limit=true
Användarvisningsbild
mrmike
Inlägg: 301
Blev medlem: 29 oktober 2003, 20:40:12

Inlägg av mrmike »

Nu kan PC:n (en 200MHz Pentium) kommunicera med PIC:en. Dock måste den (PC:n alltså) köras i MS-DOS-läge för att få någon bra output från PIC:en.

matseng>> Hmm, jag undrar hur det kommer gå för dom.
Atma-n
Inlägg: 10
Blev medlem: 10 januari 2004, 19:50:12

Inlägg av Atma-n »

Joppas du lyckas! Har letat efter en sådan lösning. Så man kan spela spel man har på adf-filer på någon av mina amigor! (500 och 500 plus).
Lycka till!
Användarvisningsbild
mrmike
Inlägg: 301
Blev medlem: 29 oktober 2003, 20:40:12

Inlägg av mrmike »

Hoppas jag också :)
Nu har jag dock stött på lite problem: Flera datablad till olika floppy disk controllers säger att hastigheten för DD är 250Kb/s. Betyder K 1000 eller 1024 i det här fallet?
matseng
Inlägg: 2360
Blev medlem: 16 september 2003, 17:18:13
Ort: Dubai, United Arab Emirates
Kontakt:

Inlägg av matseng »

I The .ADF (Amiga Disk File) format FAQ http://perso.club-internet.fr/lclevy/ad ... _info.html står det såhär:

MFM encoding
Precompensation time : 0 nanoseconds
Controller clock rate : 2 microseconds per bit cell
Synchronization value : 0x4489


vilket tyder på att det är 1000 som K'et betyder.

Dokumentet verkar klart läsvärt för någon som ska göra en amiga-floppyemulator....
Användarvisningsbild
mrmike
Inlägg: 301
Blev medlem: 29 oktober 2003, 20:40:12

Inlägg av mrmike »

Jo, det är där jag har fått den mesta infon men så smart var jag inte att jag såg det där. Tack så mycket!
Eelector
EF Sponsor
Inlägg: 656
Blev medlem: 3 juni 2003, 23:58:52
Ort: Trollhättan
Kontakt:

Inlägg av Eelector »

Spännande projekt!
Skall du använda dig av PC eller Amiga diskettstation till din kontroller?
Användarvisningsbild
Illuwatar
Inlägg: 2256
Blev medlem: 10 november 2003, 14:44:27
Skype: illuwatar70
Ort: Haninge
Kontakt:

Inlägg av Illuwatar »

Om jag förstod mrmike rätt så vill han få sin Amiga att kunna läsa floppy-images avsedda för bland annat WinUAE (*.adf-filer) via ett interface mot sin PC. Amigan skall tro att det är riktiga floppies när det egentligen är filer på datorns (PC) hårddisk. Om det är tänkt på ett annat sätt så är det bara att rätta mig...
Användarvisningsbild
mrmike
Inlägg: 301
Blev medlem: 29 oktober 2003, 20:40:12

Inlägg av mrmike »

Ingen fara, ni har båda tänkt som jag. Just nu pular jag med att skriva till disketter med en "vanlig" PC-diskettstation. Jag tänkte så att jag inte behöver oroa sig för att byta sidor och spår i tid. Men om jag får detta att funka har jag tänkt göra precis som du, Illuwatar, skriver. Jag såg förresten att SD- och MM-kort kan köras i SPI-mod och då PIC:en har hårdvaru-SPI tänkte jag att det skulle vara tufft om man laddade ner sina disketter på ett kort, stoppade in det i amigan och valde diskett från ett litet interface. Tyvärr vill SD Card association och MMCA ha betalt för sina specs (de har en förkortade versioner men de beskriver inte hur SPI-kommandona används) men jag har för mig att jag sett några hobbyprojekt där man kanske kan hitta lite info.
Användarvisningsbild
mrmike
Inlägg: 301
Blev medlem: 29 oktober 2003, 20:40:12

Inlägg av mrmike »

Har fipplat ihop en prototyp. har dock inte testat den så mkt, bara lite enkel rs-232
Bild[/img]
Användarvisningsbild
erixon
Inlägg: 380
Blev medlem: 27 augusti 2003, 10:21:58

Inlägg av erixon »

Användarvisningsbild
mrmike
Inlägg: 301
Blev medlem: 29 oktober 2003, 20:40:12

Inlägg av mrmike »

Tackar, har hittat en SD-spec men man kan aldrig få för mkt info
Användarvisningsbild
mrmike
Inlägg: 301
Blev medlem: 29 oktober 2003, 20:40:12

Inlägg av mrmike »

Nu har jag börjat lite smått på att försöka läsa en diskett. Jag har skrivit ett litet VB-program som skickar kommandon till PIC:en. Styrningen av diskettstationen fungerar fint. Starta motorn och byta spår etc. funkar finfint. Gjorde lite testläsningar men resultatet blev inte så bra, skulle nog vara bra att nåt som kan plocka fram en klocka ur MFM-datan. Vad jag vet så använde/använder man PLL för detta. Man kan kanske göra nåt i kod.
Användarvisningsbild
mrmike
Inlägg: 301
Blev medlem: 29 oktober 2003, 20:40:12

Inlägg av mrmike »

Har lyckats läsa lite MFM-kodad data.
På disketterna ligger 1:orna ligger lagrade som ändringar i magnetfältets polaritet medan 0:orna inte ger någon ändring

Kod: Markera allt

    _____     _
  _|     |___|
   1 0 0 1 0 1
MFM-kodningen går till så här:

Kod: Markera allt

Data            | MFM	
----------------+--------
1               | 01
0(efter en 1:a) | 00
0(efter en 0:a  | 10
Vilket har som följt att efter MFM-kodningen finns det 1-3 0: or mellan varje 1:a. enda möjliga bitkombinationerna blir då 101 1001 10001
Jag använder PORTB interrupt on change på till att känna av när en 1:a kommer och tittar på hur lång tid Timer 0 har räknat. Timern nollsälls efter varje 1:a.
Timern "tickar" varje instruktionscykel, som med 40MHz är 1/10M varje bit är 2us "bred" så 1 bit tar 20 klocktick vilket borde ge en hyffsad upplösning.
minsta värdet på timern blir om man räknar bort tiden att interrupta och lagra värdet:
(1) 20tick 0 20tick 1 = 40 tick
och största:
(1) 20tick 0 20tick 0 20tick 0 20tick 1 = 80 tick

Så här ser en del av resultatet ut:

Kod: Markera allt

Timer0|Ger denna data
 ------+-------------------------
   54 |0 0 1
   54 |0 0 1
   35 |0 1
   35 |0 1
   35 |0 1
   35 |0 1
   54 |0 0 1
   75 |0 0 0 1
   35 |0 1
   34 |0 1
   75 |0 0 0 1
   35 |0 1
   54 |0 0 1
   55 |0 0 1
Nu har jag bara tagit värdet in Timer 0 och lagrat i PIC:en och läst till PC:n. Tanken är att konverteringen ska göras on the fly av PIC:en. Fördelen med detta sätt att läsa borde vara att man inte tappar sync. Det kan kanske bli problem att läsa kopieringsskyddade disketter där skyddet bygger på att otillåtna bitkombinationer i MFM-kodningen.
Hoppas jag har tänkt rätt nu :)
[edit] tryckte på fel knapp och skickade lite för tidigt
[edit2] nu e jag klar
Skriv svar