Amiga-diskettemulator
Amiga-diskettemulator
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
Ä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
-
- Inlägg: 2360
- Blev medlem: 16 september 2003, 17:18:13
- Ort: Dubai, United Arab Emirates
- Kontakt:
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...
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...
URL'en är gjord av någon med fel på tangentbordet :-) http://www.idg.se/ArticlePages/200401/2 ... limit=trueAmiga 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.
-
- Inlägg: 2360
- Blev medlem: 16 september 2003, 17:18:13
- Ort: Dubai, United Arab Emirates
- Kontakt:
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....
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....
- Illuwatar
- Inlägg: 2256
- Blev medlem: 10 november 2003, 14:44:27
- Skype: illuwatar70
- Ort: Haninge
- Kontakt:
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...
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.
Tja....
http://www.cybermem.com/pdf/r2_mmc1.pdf
Där kan man läsa till det mesta
EDIT nyare:
http://www.sandisk.com/download/Product ... Mn_5.1.pdf
http://www.cybermem.com/pdf/r2_mmc1.pdf
Där kan man läsa till det mesta
EDIT nyare:
http://www.sandisk.com/download/Product ... Mn_5.1.pdf
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.
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
MFM-kodningen går till så här:
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:
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
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
Kod: Markera allt
Data | MFM
----------------+--------
1 | 01
0(efter en 1:a) | 00
0(efter en 0:a | 10
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
Hoppas jag har tänkt rätt nu
[edit] tryckte på fel knapp och skickade lite för tidigt
[edit2] nu e jag klar