Projekt: Läsa FLEX disketter med GreaseWeazle

Berätta om dina pågående projekt.
Användarvisningsbild
Mickecarlsson
EF Sponsor
Inlägg: 3843
Blev medlem: 15 april 2017, 18:06:15
Ort: Malmö
Kontakt:

Projekt: Läsa FLEX disketter med GreaseWeazle

Inlägg av Mickecarlsson »

Denna tråd ska handla om hur man kan läsa TSC FLEX-disketter med hjälp av GreaseWeazle.
Användarvisningsbild
pi314
Inlägg: 5827
Blev medlem: 23 oktober 2021, 19:22:37
Ort: Stockholm

Re: Projekt: Läsa FLEX disketter med GreaseWeazle

Inlägg av pi314 »

Här verkar det finnas en del "flex-godis".

http://ftp.flexusergroup.com:8080

Användarnamn: flexuser
Lösenord: "Namnet på ditt favoritoperativsystem i gemener"

Hur man skapar disketter vet jag inte.

/Pi
MiaM
Inlägg: 9990
Blev medlem: 6 maj 2009, 22:19:19

Re: Projekt: Läsa FLEX disketter med GreaseWeazle

Inlägg av MiaM »

Jag fick med en enda diskett med RT-datorn.

Däremot fick jag med en 10-pack gröna omärkta med Opus 68 som kanske eller kanske inte hör till den burken.


Angående Greaseweazle: Är problemet 5.25" vs 3,5" eller är det kanske DD vs HD?

Det finns tre varianter på hur en PC pratar med diskdriven. DD är samma både för 3,5" och 5,25": Driven sänder READY när den nått rätt varvtal (vilket den känner av med indexhålet). 5.25" HD har ingång från kontrollern som väljer densitet. 3,5" HD har en utgång till kontrollern som talar om densitet och driven väljer densitet själv. HD-drivear skickar disk change till datorn. Dessutom är det olika varvtal på 5.25" HD beroende på om datorn sagt HD eller DD till driven.

Om nån micklat med byglar eller om ev flaggor osv till Greaseweazle så lär 5.25" HD-drives strula.

Vad får du för symptom på strulet?
Användarvisningsbild
Mickecarlsson
EF Sponsor
Inlägg: 3843
Blev medlem: 15 april 2017, 18:06:15
Ort: Malmö
Kontakt:

Re: Projekt: Läsa FLEX disketter med GreaseWeazle

Inlägg av Mickecarlsson »

Jag har testat tre olika diskenheter, en IBM, en Panasonic och en Shugart.
Försöker jag skriva till en tom diskett får jag samma fel, No Index
Se https://github.com/keirf/Greaseweazle/issues/81
Sen hittade jag denna tråd, jag har inte testat det än: https://stardot.org.uk/forums/viewtopic.php?t=20469
Någon föreslog att jag skulle testa med en 3.5-tums enhet, tyvärr har jag bara inbyggda 3.5:or från HP.
Sen är det lite lurt, för GW’n är för 3.5:or och dom har alltid DS1 satt, så man måste bygla alla drivar till DS1, annars får man andra fel.
Eller får man ha en specialkabel där DS0 och DS1 är swappade. Vilket jag upptäckte efter en halv dags testande.

Vet någon var man får tag på de klämkontakterna som används på 5.25-tums floppyna?


pi314 skrev: 11 augusti 2023, 11:00:07 Här verkar det finnas en del "flex-godis".

http://ftp.flexusergroup.com:8080

Användarnamn: flexuser
Lösenord: "Namnet på ditt favoritoperativsystem i gemener"

Hur man skapar disketter vet jag inte.

/Pi
Det arkivet har jag, problemet är att få det till disketter.
Jag köpte GreaseWeazle F1, den verkar inte funka att skriva till 5,25-tums diskettenheter. Jag har beställt F7 varianten nu, ska se om den är bättre, och jag har en 5,25-tums 1,2MB diskettenhet på väg hem för test.
Ett tips jag fick var att använda en 3,5-tums diskettenhet, den ska moddas lite först, men ska gå att använda. Ska testa det också.
MiaM
Inlägg: 9990
Blev medlem: 6 maj 2009, 22:19:19

Re: Projekt: Läsa FLEX disketter med GreaseWeazle

Inlägg av MiaM »

Inte så enkelt att termineringen är fel, som det antyds lite halvt i en av de två länkade grejerna?

Specifikt så körde gamla 5,25"-drivear ofta 150 ohm pull-up om jag minns rätt, och modernare logik med TTL-nivåer orkar inte riktigt driva detta.

Jag minns väldigt starkt att jag gjorde en terminator av en begagnad komponentadapter och motstånd på antingen 1,05k eller 1,96k (vilket var två värden jag hade massor av då det begav sig, köpte några storpack med halvudda motståndsvärden på Överskottsbolaget för kanske 35 år sen :D Minns att jag också använde 372 ohm ofta där andra använde 330 ohm :D ) för att kunna köra 5,25"-drive mot en Amiga (som väl är byggd med NMOS eller kanske HMOS eller vad de kallas, TTL-kompatibla signaler med MOS-trissor, som cirka allt som MOS Technologies / Commodore Semiconductor Group gjorde).

Annars är det väl läge att bara allmänt mäta på signalerna och se om vad som påstås stämmer?

Två sidospår: Det må vara väldigt vanligt att 3,5"-drives har DS1 vald, men så är inte fallet på interna drives i Amiga, förutom i det fall man har en större Amiga med plats för två interna drives och har en sladd utan växlade pinnar. Det finns en del 3,5"-drives där man kan välja DS0 eller DS1 med byglar. Likaså är det ju vanligt att man har DS1 satt på 5,25"-drives för PC.

Vet inte var man kan köpa kantkontater för flatkabel och med 2,54mm delning idag. Kontakter för att löda fast kabel och för 3,96mm delning finns fortfarande att köpa, åtminstone de stora 2*22-poliga som på t.ex. VIC 20. Gissar att de används i industriapplikationer. Det finns också experimentkort att köpa nya med sån kantkontakt, så man kan alltså köpa tomma kort från stora kända komponentleverantörer för att labba ihop VIC20-expansioner, men priserna lär väl vara höga.

Enklast är väl att köpa begagnade floppykablar. Vet inte om/vad jag ev har över, men Retrodatorer...-grupperna på Facebook är väl vettigt. Eller fråga Anders som väl bor nästgårds om han har nåt över?

Angående DS0 och DS1 osv så kan du ju klämma på flera honor för stiftlist med kabeln korsad på olika sätt för att samma kabel ska passa Greaseweazle, RT-datorn, PC med flera beroende på vilket don du använder.

Tillägg: Den kanske märkligaste källan för en kantkontakt är att skrota en läsare för SD-kort. Vet inte hur många pinnar som är kopplade också, men det är samma delning. När de första DIY-grejerna för SD-kort började dyka upp så använde folk ofta kablar för 5,25"-diskdrives som kortläsare.
Användarvisningsbild
anders_bzn
Inlägg: 5462
Blev medlem: 17 december 2008, 19:22:18
Ort: Kävlinge
Kontakt:

Re: Projekt: Läsa FLEX disketter med GreaseWeazle

Inlägg av anders_bzn »

Vilken sorts kabel behöver du? Jag har troligen något som du kan få.
Användarvisningsbild
Mickecarlsson
EF Sponsor
Inlägg: 3843
Blev medlem: 15 april 2017, 18:06:15
Ort: Malmö
Kontakt:

Re: Projekt: Läsa FLEX disketter med GreaseWeazle

Inlägg av Mickecarlsson »

Följande verktyg hämtas och installeras/packas upp:
1.
SWTPC 6808/6809 Emulator: http://www.evenson-consulting.com/swtpc/default.htm
Gå till Download / Upgrades och hämta hem ZIP-filen eller EXE-filen Complete Setup

2.
HxC Floppy Emulator: https://hxc2001.com/download/floppy_drive_emulator
Bläddra ner till Software och ladda hem filen HxCFloppyEmulator_soft.zip

3.
GreaseWeazle: https://github.com/keirf/greaseweazle/wiki
Ladda hem Host Tools och installera
OBS! Du behöver någon av hårdvaruenheterna för att använda GreaseWeazle

Jag har fått låna 4 st FLEX-skivor 5.25-tums från ett datamuseum (nedan kallade DM1 - DM4) och 1 från en mjukvaruutvecklare (nedan kallad TB1).
Av de 4 kunde jag boota 2 st på min RT-dator, men fick hängningar när jag försökte lista innehållet på skivan.
Detta kan bero på antingen mitt kontrollerkort eller, som MiaM påpekade, att jag saknar Pull-Upp-motstånd på enheten. Detta kollar jag senare.

I alla fall, jag kunde inte läsa något från GreaseWeazle alls, hur jag än försökte. I går kväll satte jag mig ner och lusläste Wiki'n på GreaseWeazle och kom fram till att jag måste göra en egen diskdef.cfg-fil.
Jag tog den befintliga diskdefs.cfg och kopierade de två Flex-defenitionerna som fanns och skapade en flex.cfg
Efter mycket experimenterade lyckades jag läsa ut två disketter, DM1 och TB1, och skapa image, DM1.img och TB1.img.
Sen blev det roligt, jag kunde öppna DM1.img med SWTPC Floppy Maintenance och se innehållet. Jag kunde också exportera allt innehåll till disk.
Jag öppnade sen TB1.img i Floppy Manintenance, och kunde se innehållet, men..... exporterade jag ut innehållet innehäll alla filer detta:
-=[BAD SECTOR]=--=[BAD SECTOR]=--=[BAD SECTOR]=-
Så, något stämmer inte.
En FLEX diskett har denna layout:
Track 0 does not have a sector 1. All of the other tracks don't have a sector 0.
On double sided diskettes, the sector numbers on the second side continue on from the numbers on the first side.
That is, if track 1 sector 10 is the last sector on side 0, then track 1 side 1 will start with sector number 11 and end with sector number 20.
Track 2 side 0 will start over with sector number 1.

Så min flex.cfg ser ut såhär för enkelsidig diskett:

Kod: Markera allt

# TSC FLEX: SS/DD with SD (FM) cylinder 0.
# Definition is a simplified version of the DS/DD format.
disk flex.35
  cyls = 35              # Kan vara 35 eller 40
  heads = 1              # Enkelsidig
  tracks 0.0 ibm.fm      # Första spåret SD
    bps = 256            # Varje sektor har 256 byte
    iam = no
    gap3 = 16
    gap4a = 16
    secs = 10            # 10 sektorer
    interleave = 4       # Interleave 4
    id = 1               # Hmmm, borde vara 0, ska testas
    h = 0                # Huvud 0
  end
  tracks 1-34.0 ibm.fm   # Spår 1-34
    bps = 256
    iam = no
    gap3 = 16
    gap4a = 16
    secs = 10            # 10 sektorer
    interleave = 6       # Interleave 6
    id = 1               # Starta med sektor ID 1
    h = 0                # Huvud 0
  end
end
Dock, disketten TB1 kunde jag läsa ut som 35 spår och 10 sektorer, men det blir bara rappakalja på data. Men det kan vara så att det är en dubbelsdig diskett.
Jag kan då läsa ut FAT (hette det så på FLEX) då den alltid finns på spår 0, sektor 5 till sista sektorn (10?) men inte innehållet då jag saknar halva innehållet.
Nu när jag läser noggrant kan jag se en sak jag missat, detta är layouten på skivan:

Kod: Markera allt

track 0   sector  0   boot sector
      0           2   extended boot sector
      0           3   System Information Record (SIR)
      0           4   not used
      0           5   start of the directory area.
     ...         ...  the rest of track 0 is used for
                      directory storage
      1           1   start of the data and program
                      storage area of diskette
Sektor 3 innehåller System Information Record (SIR) och har denna layout:

Kod: Markera allt

This is the layout of the SIR:
The first 16 bytes are not used (all zeros)

offset(hex)   size(hex)   contents
-----------   ---------   -------------------------
   $10           $0B       Volume Label
   $1B           $01       Volume Number High byte
   $1C           $01       Volume Number Low byte
   $1D           $01       First User Track
   $1E           $01       First User Sector
   $1F           $01       Last User Track
   $20           $01       Last User Sector
   $21           $01       Total Sectors High byte
   $22           $01       Total Sectors Low byte
   $23           $01       Creation Month
   $24           $01       Creation Day
   $25           $01       Creation Year
   $26           $01       Max Track
   $27           $01       Max Sector
Här ska jag kunna få ut hur skivan är formaterad med hjälp av:
First User Track - Last User Track
Max Track - Max Sector

På skivan DM1.img finns detta:

Kod: Markera allt

0010 - 00 00 00 00 00 00 00 00 00 00 00 = Ingen Volume Lable
001B - 00 = Volume Number High byte
001C - 07 = Volume Number Low byte
001D - 16 = First User Track = spår 10
001E - 0A = First User Sector = sektor 22
001F - 16 = Last User Track = 22
0020 - 03 = Last User Sector = 3
0021 - 00 = Total Sectors High Byte = 0
0022 - 89 = Total Sectors Low Byte =137
0023 - 07 = Creation Month = 7 
0024 - 0D = Creation Day = 13
0025 - 57 = Creation Year = 87
0026 - 22 = Max Track = 34
0027 - 0A = Max Sector = 10
De sista två byten är intressanta, max track = 34 och max sector = 10, dvs, 35 spår och 10 sektorer.
Vad innehåller då TB1.img?

Kod: Markera allt

0010 - 53 59 53 54 45 4D 00 00 00 00 00 = SYSTEM
001B - 1A = Volume Number High byte
001C - 99 = Volume Number Low byte
001D - 27 = First User Track = spår 39
001E - 0A = First User Sector = sektor 10
001F - 27 = Last User Track = 39
0020 - 14 = Last User Sector = 20
0021 - 00 = Total Sectors High Byte = 0
0022 - 0B = Total Sectors Low Byte = 11
0023 - 03 = Creation Month = 3
0024 - 0F = Creation Day = 15
0025 - 54 = Creation Year = 84
0026 - 27 = Max Track = 39
0027 - 14 = Max Sector = 20
Denna skiva verkar vara en 40-spårs 20 sektorer, dvs, dubbelsidig.
Jag har dessa två diskettenheter:
Shugart SA465 - ska vara en 80-spårs Double Density
Panasonic JU-455-6 - ska vara en 40-spårs Double Density

Då ska jag se om jag kan skriva en bra definition till en 40-spårs dubbelsidig diskettenhet för GreaseWeazle.
Det blir senare idag.
Användarvisningsbild
Mickecarlsson
EF Sponsor
Inlägg: 3843
Blev medlem: 15 april 2017, 18:06:15
Ort: Malmö
Kontakt:

Re: Projekt: Läsa FLEX disketter med GreaseWeazle

Inlägg av Mickecarlsson »

OK, små steg i rätt riktning.
Denna config-fil läser en FLEX 40-spårs skiva, dubbelsidig med enkel densitet:

Kod: Markera allt

# TSC FLEX: DS/SD with SD (FM) cylinder 0.
disk flex.40.ds
  cyls = 40
  heads = 2
  tracks 0.0 ibm.fm
    bps = 256
    iam = no
    gap3 = 16
    gap4a = 16
    secs = 10
    interleave = 4
    id = 1
  end
  tracks 0.1 ibm.fm
    bps = 256
    iam = no
    gap3 = 16
    gap4a = 16
    secs = 10
    interleave = 4
    h = 0
    id = 11
  end
  tracks 1-39.0 ibm.fm
    bps = 256
    iam = no
    gap3 = 16
    gap4a = 16
    secs = 10
    interleave = 6
    id = 1
    h = 0
  end
  tracks 1-39.1 ibm.fm
    bps = 256
    iam = no
    gap3 = 16
    gap4a = 16
    secs = 10
    interleave = 6
    h = 0
    id = 11
  end
end
För att läsa ut data från en okänd FLEX-skiva, läs först med FLEX "standardformat", 35 spår, enkelsidig, enkel densitet:

Kod: Markera allt

disk flex.35
  cyls = 35
  heads = 1
  tracks 0.0 ibm.fm
    bps = 256
    iam = no
    gap3 = 16
    gap4a = 16
    secs = 10
    interleave = 4
    id = 1
    h = 0
  end
  tracks 1-34.0 ibm.fm
    bps = 256
    iam = no
    gap3 = 16
    gap4a = 16
    secs = 10
    interleave = 6
    id = 1
    h = 0
  end
end
Spara filen som flex.cfg, du kan ha flera definitioner i samma fil.
Syntax: gw read --diskdefs flex.cfg --format flex.35 flex.img
Öppna sedan imagen med HcXFloppyEmulator, klicka på Load Raw Image, Load Raw File, bläddra efter filen, klicka sen på Track Analyzer.
Håll musen över tredje gröna fältet och skriv av värdena för position 26 och 27, omvandla till decimalt och ni ser max antal spår och sektorer
Är det sista talet 0A är det 10 sektorer = enkelsidig, är det näst sista talet 22 är det 35 spår, är talet 27 är det 40 spår, tänk på att man börjar räkna från 0
Tyvärr är min 80-spårs diskettstation kass, stegmotorn funkar inte. Jag får ev tag på en i morgon eller nästa vecka då jag får en gammal 286-dator.
MiaM
Inlägg: 9990
Blev medlem: 6 maj 2009, 22:19:19

Re: Projekt: Läsa FLEX disketter med GreaseWeazle

Inlägg av MiaM »

Mickecarlsson skrev: 12 augusti 2023, 10:12:46eller, som MiaM påpekade, att jag saknar Pull-Upp-motstånd på enheten. Detta kollar jag senare.
Avsaknad av pull-up borde dock ge problem med skrivning eller att den inte fungerar alls. Läs-data-signalen termineras av kontrollern.
Mickecarlsson skrev: 12 augusti 2023, 10:12:46En FLEX diskett har denna layout:
Track 0 does not have a sector 1. All of the other tracks don't have a sector 0.
Vet inte om detta reflekteras i det faktiska lågnivåformatet men detta att ha en skillnad på första sektorn på första spåret kan kanske vara kopplat till disksystem som har enkel densitet för bootsektorn och resten kör dubbel densitet. Eftersom FLEX kan köras på olika hårdvaror så kan det väl mycket väl vara så att det är skillnad mellan FLEX-disketter för RT-datorn och FLEX-disketter för SWTPC till exempel?
Användarvisningsbild
Mickecarlsson
EF Sponsor
Inlägg: 3843
Blev medlem: 15 april 2017, 18:06:15
Ort: Malmö
Kontakt:

Re: Projekt: Läsa FLEX disketter med GreaseWeazle

Inlägg av Mickecarlsson »

Nja, det beror helt på kontrollern som datorn har, i ”gamla” RT-datorn sitter det en FD1771, den klarar bara Single Density, samma IC satt i SWTPC’s äldre kontroller, de gjorde en ny kontroller baserad på WD2792, som klarar Double Density.
Alla Flex-skivor kom med formatet Single Side, Single Density och 35 spår, men FLEX 9 kunde formatera och länka upp till 80-spår, DS, DD då den versionen hade fullt stöd för detta.
Flex 2 tror jag bara klarade DS SD.
Den ”nya” RT-datorn har också bara FD1771 på kortet CÅ-817, jag fick ett kort av Åke Holm som heter CÅ-837 och är märkt DSDD. Det använder WD2797.
Användarvisningsbild
Mickecarlsson
EF Sponsor
Inlägg: 3843
Blev medlem: 15 april 2017, 18:06:15
Ort: Malmö
Kontakt:

Re: Projekt: Läsa FLEX disketter med GreaseWeazle

Inlägg av Mickecarlsson »

Jag hade inte terminator på disketten, lödde ihop en egen med 1,2k motstånd.
Körde gw write med en av avbilderna jag fick fram med gw read, den skrev den utan problem.
Användarvisningsbild
Mickecarlsson
EF Sponsor
Inlägg: 3843
Blev medlem: 15 april 2017, 18:06:15
Ort: Malmö
Kontakt:

Re: Projekt: Läsa FLEX disketter med GreaseWeazle

Inlägg av Mickecarlsson »

Det blev mycket trial and error innan jag fick ihop en cfg-fil till GreaseWeazle som fungerar till Flex-skivor.
Jag har skapat en egen cfg kallad flex.cfg som just nu innehåller tre definitioner:
flex.sssd.35 - Enkelsidig diskett med enkel densitet, 35 spår
flex.sssd.40 - Enkelsidig diskett med enkel densitet, 40 spår
flex.dssd.40 - Dubbelsidig diskett med enkel densitet, 40 spår

Med hjälp av dessa tre kan man skapa nya definitioner om man har en 40-spårs, dubbelsidig, dubbel densitet, eller en 80-spårs, enkel eller dubbelsidig, enkel eller dubbel densitet.
Allt är uppladdat till GitHub: https://github.com/mickecamino/RT-datorn

Jag kommer att uppdatera flex.cfg när jag får tag på en 80-spårs diskettenhet.
Användarvisningsbild
Mickecarlsson
EF Sponsor
Inlägg: 3843
Blev medlem: 15 april 2017, 18:06:15
Ort: Malmö
Kontakt:

Re: Projekt: Läsa FLEX disketter med GreaseWeazle

Inlägg av Mickecarlsson »

Efter en liten tankeställare från keirf testade jag enklare uppsättning av definitionsfilen, denna funkar utmärkt:
flex.cfg, för 35-spår och 40-spår enkelsidiga enkel densitet, 40 spår dubbelsidig enkel densitet.

Kod: Markera allt

disk flex.35.sssd
  cyls = 35
  heads = 1
  tracks 0-34.0 ibm.fm
    bps = 256
    iam = no
    gap3 = 16
    gap4a = 16
    secs = 10
    interleave = 6
    id = 1
    h = 0
  end
end
disk flex.40.sssd
  cyls = 40
  heads = 1
  tracks 0-39.0 ibm.fm
    bps = 256
    iam = no
    gap3 = 16
    gap4a = 16
    secs = 10
    interleave = 6
    id = 1
    h = 0
  end
end
disk flex.40.dssd
  cyls = 40
  heads = 2
  tracks 0-39.0 ibm.fm
    bps = 256
    iam = no
    gap3 = 16
    gap4a = 16
    secs = 10
    interleave = 6
    id = 1
  end
  tracks 0-39.1 ibm.fm
    bps = 256
    iam = no
    gap3 = 16
    gap4a = 16
    secs = 10
    interleave = 6
    h = 0
    id = 11
  end
end
uaxnet
Inlägg: 100
Blev medlem: 12 oktober 2020, 07:43:25

Re: Projekt: Läsa FLEX disketter med GreaseWeazle

Inlägg av uaxnet »

Nice ser ut som du har fått till det. Grattis
Användarvisningsbild
Mickecarlsson
EF Sponsor
Inlägg: 3843
Blev medlem: 15 april 2017, 18:06:15
Ort: Malmö
Kontakt:

Re: Projekt: Läsa FLEX disketter med GreaseWeazle

Inlägg av Mickecarlsson »

Kollade i Flex Adaption Guide för 6809:
2.3 FLEX Disk Format
There is a defined format for FLEX disks which is essentially IBM floppy
disk compatible, but uses 256 bytes per sector. Track number 0 (the
outermost track) is reserved for system information and directory. The
remainder is available for user files. Each file may be thought of as a
chain of sectors which are linked together. This linking is
accomplished by placing the track and sector address of the next sector
in the chain into the first two bytes of a sector's data. The third and
fourth bytes of each sector are reserved for a value used in random file
accessing techniques. Thus each data sector on the disk is actually
only capable of holding 252 bytes of user data. The last sector in a
file chain has a forward link (track and sector address) of zero which
marks it as the last sector. All the sectors on the disk which are not
part of a file are linked together in the same fashion as a file, but
are collectively called the "free-chain" and are not treated as a normal
file. The directory, which starts with sector number 5 on track 0, is
also just a chain of sectors. This chain initially contains all the
sectors from number 5 up on track 0, but can grow out onto other tracks
if necessary. Track 0 sector 3 is called the "System Information
Record" and maintains certain data about the disk such as where the
free-chain is located, the number of sectors per track, the disk name,
etc. Sectors 1 and 2 on track 0 are reserved for a bootstrap loader.
Further details about disk formats for double-sided and double-density
disks may be found in Appendix B.


Och i Notes står det:
1) On double-density disks, track #0 is formatted in single-density to facilitate automatic density selection.
2) Side #0 is the bottom of the disk (opposite the label).
3) Sector size is 256 bytes.
4) Track numbers always begin with #0 and sector numbers always begin with #1.
Skriv svar