Jump to content
Sign in to follow this  
FrankF

TIKI-100 Secure Digital (SD) HardDisk

Recommended Posts

FrankF    7

Jeg har nå blitt ferdig med testing av en ny harddisk for TIKI-100 som jeg har utviklet.

Det ble en del utfordringer underveis, blant annet måtte jeg inn med en ekstra IC krets for å håndtere et signal på ekspansjons bussen til TIKI-100, som jeg hadde oversett. Også et par transistorer som jeg måtte fjerne. Og en god del utfordringer med å tolke assembler kode i maskinen, for å finne ut hvordan ting hang sammen.

Har fått god hjelp av FrodeM underveis, og takker mye for dette.

 

Den konfigurasjon jeg har nå, gir 2 harddisker på 8MB. Jeg har satt den opp med minste fil størrelse på 16 kB, og 2048 mulige fil innganger.

Jeg har lagt ut en kort video på youtube, som viser kortet montert i min TIKI-100, og et skjerm dump av "KAT" som viser total disk størrelse, samt en "DIR" kommando utførelse, bare for å vise at det fungerer.

 

Mitt kort simulerer det originale Winchester harddisk kortet som var å få som opsjon for TIKI-100, slik at BIOS i maskinen tror et originalt kontroller kort med harddisk er montert. Jeg har også laget et program for å formatere harddisken, selv om denne formateringen ikke er det samme som for en roterende harddisk, der også sektor info må lagres på sporene.

 

Jeg skal nå legge inn de nødvendige hardware endringene, før jeg bestiller nye kretskort. I den forbindelse er jeg åpen for forslag og idèer fra andre, om der er noe jeg bør gjøre annerledes. Jeg har tenkt en del på dette med å gjøre SD kortet tilgjengelig eksternt, men har ikke kommet frem til noen god løsning på dette.

Personlig så ønsker jeg å beholde min TIKI-100 så original som mulig, uten å begynne å lage hull i den for modifikasjoner.

Det eneste jeg har tenkt å legge til på kretskortet, er mulighet for å koble til 2 lysdioder, som kan indikere aktivitet på de 2 mulige fysiske harddiskene.

Disse lysdioder kan monteres i fronten på maskinen, hvis man får til en fin løsning på det.

Slik software på min harddisk er nå, så benyttes SD kortet i råformat. Det vil si at det kan ikke settes i en PC, der data kan leses ut direkte.

Dette er grunnen til at jeg ikke ser behov for å ha tilgang til SD kortet på utsiden av maskinen.

 

Jeg vil se på en løsning med å benytte FAT filsystem, der harddisk data blir lagret på en fil, som direkte blir et image av harddisken. Hvis jeg får til dette, så er det mer aktuelt med ekstern tilgang til SD kortet, for å kunne lagre backup på en PC.

 

Men som nevnt så er jeg interessert i kommentarer fra andre, og jeg ønsker å tilby dette SD harddisk kortet til andre som har TIKI-100.

 

Legger ved et bilde (før modifikasjon) og en link til video av kortet.

 

https://youtu.be/G-ykK7FKRiw

post-3666-0-54917100-1440791040_thumb.jpg

  • Upvote 1

Share this post


Link to post
Share on other sites
Quarryman    0

Kult! Vil ha!  :veryhappy:

 

Angående det med tilgang til SD-kortet fra utsiden så var vel det jeg som mente det var en god idé, og siden det tok meg ca 10 sekunder googling å finne forlengerkabel så tror jeg nok det går helt fint om det ikke er mulig på kortet du lager. Det med å bruke FAT på kortet, og så heller ha filer som er harddisk-imager tror jeg derimot er ganske så vesentlig, ihvertfall for meg som gjerne vil ha mulighet til å jobbe med Tiki-ting på PC og så overføre til tikien en gang i blant, målet mitt er ikke å bruke Tiki-programvare, en av tingene jeg ser på er f.eks å bytte boot-sektor så jeg slipper å boote Tiko i det hele tatt. På den andre siden så burde det vel være grei skuring å kjøre dd direkte mot devicen på PC og dermed bruke råformatet du har implementert nå? I så fall går det nok fint å overleve uten FAT på SD-kortet.

Share this post


Link to post
Share on other sites
tingo    5

Kult prosjekt - jeg er interessert.

Ideer for utveksling med andre maskiner.

1) lage mulighet for et SD-kort til (kontakt) som kobles til via kabel, så kan det plasseres hvor som helst i maskinen, hvis kretsen din klarer det da (og gitt at Tikien skjønner dette)

2) det er blitt ganske populært med "harddisk via kabel" på endel retro-maskiner nå - kanskje kortet kunne hatt en serieport for å kjøre disk via kabel?

 

Et eksempel på "harddisk via kabel" er  DiveWire: https://sites.google.com/site/drivewire4/

Share this post


Link to post
Share on other sites
FrankF    7

Takk for tilbakemeldinger !

 

Jeg legger inn en 16 pins flatkabel kontakt på kretskortet mitt. Da kan SD kortet monteres enten lokalt på harddisk kortet, eller på et lite kretskort/boks som kobles til med flatkabel, og kan monteres på ønsket plass. Jeg må teste ut at dette fungerer med flatkabel, og at jeg ikke får problem med signal kvaliteten til SD kortet, men jeg kjører på en hastighet på 8 MHz, så jeg tror det skal gå bra.

 

Så skal jeg også forsøke å legge til FAT filsystem, slik at de 2 mulige HD blir på 2 image filer, som kan leses/skrives til SD kortet fra PC. Filene kan f.eks. hete HD0.dsk og HD1.dsk.

Dette vil redusere lese/skrive hastighet litt, men håper at det ikke skal bli så veldig merkbart. Så har jeg selvfølgelig eksisterende løsning med råformat på SD kortet, for den som ønsker det.

 

Jeg har også en idè om å gjøre det mulig å få de 2 floppy diskene inn på samme SD kort, der man kan velge en image fil, omtrent slik som på Tiki emulatoren til Asbjørn Djupdal.

Skal se på denne løsningen etter hvert.

 

Når det gjelder harddisk via kabel, så er dette en av tankene jeg har, når jeg nå i kommende vinter skal se på et WiFi kort til Tiki-100. Da kan en mulighet være å legge disken ut på en server på nettet, slik at der er mulighet for å dele filer også. Men jeg er usikker på hvor stort Tiki-100 miljø som finnes i Norge, så det er kanskje ikke så stor hensikt i å lage en slik løsning.

Men WiFi har jeg lyst på, så det vil jeg prøve å få til.

Share this post


Link to post
Share on other sites
FrankF    7

Da har jeg fått implementert FAT filsystem på SD kortet, slik at et disk image for SD harddisk kan leses ut som en fil på PC.

Denne image filen følger derimot ikke samme mønster som på image filer for floppy disk. HD image filen er alltid 64M byte i størrelse, selv om HD er f.eks. 8M bytes.

Dette er for å støtte ulike format, der 64M begrenses av BIOS i TIKI-100.

 

Men jeg har selv ikke klart å få en disk større en 8M byte, og jeg er ganske sikker på at dette skyldes begrensninger i INSTALL.COM programmet.

Der er en multiplikasjons rutine i dette programmet, som lager en begrensning.

Mulig dette kan ordnes på ved å lage et annet program for å justere disk parameter.

 

Så for å formatere SD harddisken, så er det nå bare å kopiere inn en fil på SD kortet (64M), som er fylt med verdien E5H.

Share this post


Link to post
Share on other sites
FrodeM    9

Bra!

Jeg hadde en liten ide også istedenfor en statisk 64MB fil, så kunne det være en konfigurasjonsfil som bestemmer hvor mange sylindere, heads og sektorer det er på ett image. Da vil det være ganske mye greiere å bruke med programmet eg har som kan lese/skrive filer til et CP/M kompatibelt disk image.

Share this post


Link to post
Share on other sites
FrankF    7

Det er en veldig god idè, og jeg har tenkt litt i samme retning.

Men jeg har ett problem, og det er kode størrelsen på mikrokontrolleren på SD harddisken min. Den er på 16K, og etter jeg la inn kode for FAT filsystem, så er nesten all kode plass brukt opp. Jeg har tatt bort støtte for lange filnavn i FAT, for hvis jeg skal ha med støtte for det, så har jeg for lite kode hukommelse.

Derfor må jeg begrense mest mulig funksjonalitet i mikrokontrolleren.

Det er derfor jeg har valgt en fast fil størrelse, for da slipper jeg å legge inn kode for å handtere formatet på harddisken.

 

Så jeg tror at din idè med en liten fil som forteller formatet, må heller leses av et eksternt program, slik som ditt.

For det handler bare om å hoppe over en del sektorer i filen på 64M.

 

På torsdag forrige uke, fikk jeg til å lage et Visual Studio 2010 prosjekt av koden for simulatoren til Asbjørn Djupdal, og fikk kompilert den riktig.

Tanken min er å legge inn støtte for min harddisk fil i denne, hvis jeg får det til. Jeg er mest vant til MFC (C++) i Windows, mens simulatoren er skrevet i C kode for Win32. Så her må jeg sette meg litt inn i dette.

 

I ditt program, leser du Disk Parameter Block fra disk image, eller benytter du filstørrelsen og lager et fast oppsett ut fra den?

Share this post


Link to post
Share on other sites
tingo    5

Hmm, du kan ikke bare bytte til en større (mer plass) mikrokontroller da? Ut fra tidligere info så ser det ut til at du benytter en AVR mikrokontroller, disse finnes jo med forskjellige størrelser på flash, ram osv.

Share this post


Link to post
Share on other sites
FrankF    7

Jeg har sett på den muligheten, men har ikke funnet en egnet variant.

Problemet er at jeg er avhengig av eksterm memory interface, og en DIL pakke for å unngå overflate monterte komponenter. Da begrenser utvalget seg ganske drastisk.

Men har du et tips om alternativ, så er jeg interessert i det. Men jeg har ikke lyst å benytte så veldig mye mer tid på hardware endringer.

 

Jeg fikk flyttet alle FAT variabler og strukturer til ekstern RAM, så det gikk fint.

Men en AVR kan ikke kjøre kode fra ekstern memory.

Share this post


Link to post
Share on other sites
FrankF    7

Det er en ATMega162.

Den har 16KB Flash, og 1KB SRAM.

Så har jeg koblet til en 8K SRAM på utsiden, ved å benytte ekstern data buss, som finnes på ATMega162.

Simulering av WD1010 winchester harddisk kontroller krever rask timing, så det er ikke mulig å koble SRAM til vanlige I/O porter, og simulere data buss.

Share this post


Link to post
Share on other sites
FrodeM    9

Ah, ser problemet der. Da er det mye enklere å lage et program som "pakker ut" en logisk image fra ett fysisk 64MB disk image. Det er forsåvidt nødvendig også siden Monitor legger flere logiske disker på samme harddisk.

 

Programmet mitt velger standard parametere ut i fra filstørelsen, men man kan manuelt gå over å endre på dem før filen tolkes hvis parameterne er feil. Den kjenner automatisk igjen alle standard TIKO diskettformater.

 

Hvis eg bare skal måke inn noen filer på et tomt diskimage for å teste noe, så pleier eg å bruke Djupdal sitt komandolinjeverktøy med en batch-fil. Mitt program er derimot mye greiere hvis du vil se på, defragmentere eller redigere ett allerede eksisterende diskimage med filer på. Du har også muligheten til å se på filer i selve programmet uten å "eksportere" filen (Veldig hendig for tekstfiler). Når det kommer til sletting og overskriving av filer og sånt så har Djupdal sitt verktøy bugs hvor blokknummerne tuller seg til etter en stund.

 

*In other news* (slightly off topic warning)

Har laget meg et minneutvidelseskort for 8088 (16-bit) utvidelsen til Tiki-100. Med dette kan man få hele 768KB RAM til TIKOS og DOS programmer.

Edited by FrodeM
  • Upvote 1

Share this post


Link to post
Share on other sites
FrankF    7

Programmet ditt er helt supert. Har benyttet det flere ganger mot ulike disk image. Kjempe flott jobb!

 

Jeg ser jeg kan redusere min image fil til 32MB. Slik det er nå, så er det en image fil for hver plate i harddisken. Jeg har en fil som heter HD0.dsk, som er for plate 0, og en fil HD1.dsk, som er for plate 1. Ut fra det jeg har funnet ut av, så støtter TIKI BIOS bare disse 2 platene, så jeg har ikke laget støtte for flere i min software på HD kortet.

Størrelsen på filen har jeg kommet frem til, er basert på begrensninger i TIKI BIOS.

Når TIKO kaller BIOS for å velge sektor for HD, så sendes sektor nummer i BC register par. Men BIOS leser inn bare C registeret, derved er sektor nummer begrenset fra 0 - 255. Og i BIOS så er det logiske sektorer på 128 bytes som det refereres til. Dermed er maks antall sektorer på en plate, begrenset til 256.

Det betyr at et spor/sylinder har en maks størrelse på 128 * 256 bytes = 32768 bytes. Og WD1010 HD kontroller har maks 1024 spor/sylindere. Dette gir 32768 * 1024 bytes = 33554432 bytes = 32MB

Jeg trodde i starten at dette fordelte seg på 2 sider på platen, derav 64MB slik det er i dag. Men BIOS har ikke sidevalg, slik at de 256 mulige sektorene (128 bytes) fordeler seg på 2 sider på ett spor.

Dette resulterer igjen i at det er maks 64 sektorer på 512 byte pr. spor/sylinder, som igjen gir 32 sektorer pr side på et spor/sylinder.

Dette er slik min disk image fil blir fast formatert. Hvert spor/sylinder tar 64 sektorer på 512 bytes (32768 bytes). Så for hvert spor/sylinder, må det hoppes 32768 bytes frem i filen.

Dette er en ganske enkel algoritme som du sikkert med enkelhet kan legge til i ditt program. Men hvis HD er satt opp med mindre antall sektorer pr. spor, så er det her ditt program trenger ekstra input om dette, kanskje via et dialog vindu, der valgene blir lagret til neste gang. Da kan hver enkelt av oss velge format på HD image, og ditt program vil kunne lese data, slik som for floppy disketter.

Jeg kan legge ut en eksempel fil på et HD disk image, som du kan teste mot.

 

Dessverre så er det ikke mulig å sette opp denne 32MB disken i INSTALL.COM programmet. Det som er irriterende, er at programmet lar deg få velge et slikt oppsett, uten å protestere. Men den Disk Parameter Block som blir laget, blir feil. I INSTALL.COM kan det maks være 65535 logiske  sektorer (128 bytes) på hele disken, og det er dette som gir en begrensning på 8MB disk størrelse.

Som nevnt tidligere, så skyldes dette en 16 bits multiplikasjon, der resultatet lagres som 16 bit, ikke som en 32 bit, slik det burde gjøre. Det multipliserer 2 stk. 16 bits verdier, men resultatet kan ikke overstige 16 bit.

Edited by FrankF

Share this post


Link to post
Share on other sites
FrodeM    9

Dessverre så er det ikke mulig å sette opp denne 32MB disken i INSTALL.COM programmet. Det som er irriterende, er at programmet lar deg få velge et slikt oppsett, uten å protestere. Men den Disk Parameter Block som blir laget, blir feil. I INSTALL.COM kan det maks være 65535 logiske  sektorer (128 bytes) på hele disken, og det er dette som gir en begrensning på 8MB disk størrelse.

Som nevnt tidligere, så skyldes dette en 16 bits multiplikasjon, der resultatet lagres som 16 bit, ikke som en 32 bit, slik det burde gjøre. Det multipliserer 2 stk. 16 bits verdier, men resultatet kan ikke overstige 16 bit.

 

Det er litt på trynet. Selv i TIKO brukermanualen skryter de av å støtte disker på opp til 512MB...

 

Monitor støtter ikke mer en 128MB per diskplate uansett, men med fire slike plater i en harddisk så er det teknisk sett en 512MB disk.

Share this post


Link to post
Share on other sites
FrankF    7

Kan det være at det finnes en annen versjon av INSTALL.COM ?

 

Det er enkelt å teste dette i install programmet. Bare å definere en disk som er større en 8MB, og så gå i menyen for å se på virtuelle disker, da viser disk størrelse der.

Min erfaring er at når jeg tror disken skal bli større, så blir den mindre.

 

Mulig at jeg gjør noe feil, men har ikke lykkes med å få en disk større en 8MB.

 

Men jeg er enig i at det er rart at denne begrensningen er tilstede, siden  manualer sier noe annet.

Kanskje en bug som aldri har blitt testet på ?

Share this post


Link to post
Share on other sites
FrankF    7

Da har jeg fått testet litt mer angående harddisk størrelse i TIKO. Det er BIOS som setter mest begrensninger, samt install.com programmet som nevnt tidligere.

Jeg har laget et lite test program, som leser inn disk parameter block (DPB), og justerer den verdien som install programmet har som begrensning.

Nå har jeg en harddisk på 64MB for øyeblikket, og kan få den større om nødvendig, men tviler på om det er behov for det.

 

Det som er begrensning i BIOS, er at den leser inn bare en byte (LSB) av antall sektorer pr. spor, fra DPB. Hvis jeg definerer 32 fysiske sektorer pr. spor, og 2 sider, så blir dette 256 logiske sektorer pr. spor.

Men 256 er 0100 hex, og da blir den byte som leses inn av BIOS null (LSB), og dette blir helt feil i videre kalkulering i BIOS. Så maks antall logiske sektorer pr spor er 255. Men dette går dårlig opp med fysiske sektorer.

Så jeg tror løsningen her er at harddisk må ha et fast format på spor, for eksempel 16 fysiske sektorer, og 2 sider. Da blir dette 128 logiske sektorer, og 16384 bytes pr. spor.

WD1010 winchester harddisk kontroller har en begrensning på maks 1024 spor, men den begrensning finnes ikke i BIOS eller monitor koden i TIKI-100. Heller ikke i install.com programmet, som aksepterer opp til 32768 spor på en plate.

Og min SD harddisk godtar 65536 spor på en plate, så da passer dette fint. Og siden det er en SD disk, så vil ikke bytte av spor medføre noen forsinkelse, slik som på en roterende harddisk.

Jeg kan lage et program som da setter DPB riktig, for den virtuelle disk som velges mot min SD harddisk.

Siden BIOS har begrensninger, så ser jeg ikke behov for at hver enkelt av oss skal velge annet format på et spor, en 16 fysiske sektorer, og 2 sider. Også blokk størrelse kan settes til fast størrelse. Er 8KB et OK valg her ???

Jeg ønsker å sette fast størrelse på SD harddisken også (for de 2 mulige). Hva bør velges her, 32MB, 64MB ... ???

 

Jeg har bare testet på settinger i TIKI simulatoren så langt, men skal test mot min SD disk nå i helgen. Jeg vil da teste med 32MB disk størrelse, ettersom jeg klarer meg med den størrelsen veldig lenge  :rolleyes:

Share this post


Link to post
Share on other sites
FrodeM    9

Tror 32MB er mer en nok for en gooood stund selv hvis du bruker maskinen aktivt til tekstbehandling og sånt ;)

 

Men den originale Tiki-100 harddisken har 17 sektorer per spor, så bør minst støtte såpas. Vil anbefale 32 eller 64.

 

Ellers har eg funnet ut hvordan man kan installere MS-DOS på den ene disken hvis man har 8088 utvidelse (vær oppmerksom på at DOS tror den bare er 5MB etter det). Måtte patche en del ting for å få DOS med harddisk til å boote og formatere fra diskett, men det funker supert. DOS systemfilene eg brukte var den som lå på den gamle harddisken før den døde.

 

Instruksjoner for DOS installasjon:

1. Boot patchet diskett

2. Kjør "WINIT A:" og la den fullføre

3. Bytt til en disk med originale upatchede systemfiler, uten å restarte

4. Kjør "SYS A:"

5. Kopier over alle de andre DOS filene til A, i hvertfall COMMAND.COM

6. Boot TIKO fra harddisk

7. Kjør Install og deaktiver alle diskstasjoner som bruker harddisk med fysisk enhet 1. Lagre oppdatert system til systemplate.

8. MS-DOS fra harddisk startes ved å kjøre MSDOS.COM fra TIKO. Denne filen bør kopieres til TIKO på harddisken.

Edited by FrodeM

Share this post


Link to post
Share on other sites
FrankF    7

Når du sier 32 eller 64, mener du på en side på et spor, eller totalt begge sider på et spor?

64 fysiske sektorer på et spor, for begge sider, det går ikke. Da kommer vi bort i det problemet jeg nevner tidligere, med at antall logiske sektorer blir over 255. Det takler ikke BIOS.

Det som jeg har nå, og som fungerer helt fint, er 32 sektorer pr. spor (16 på hver side).

Jeg mener dette ikke er så veldig farlig med, ettersom det nå bare er "software" spor med min SD disk, og skifte av spor ikke reduserer hastigheten noe.

 

En annen ting jeg ikke har funnet ut av ennå, som du kanskje vet, er om en blokk på disken kan starte på et spor, og fortsette på neste ?

Og så er det filkatalogen. Skal denne fylle komplette spor, eller kan den avslutte f.eks. midt på et spor ?

 

Jeg har hatt problemer med å få det til å fungere, hvis fil katalogen ikke fyller komplette spor, men har ikke fått tid til å forske så mye mer på det.

 

Flott at du har funnet ut av DOS, bra jobbet!

Jeg har ikke dette ekspansjons kortet selv, og jeg er i hovedsak mest interessert i Z80 (retro for meg, siden det var der min mikroprosessor interesse startet).

Men har jobbet mye med DOS, så det er ikke utenkelig at jeg vil se om jeg finner en retro maskin på det også.

Mener å huske at jeg startet med en Commodore PC, tror den hadde 30 i nummeret.

 

Men utenom TIKI 100, så er det mikrokontrollere av ulike slag jeg fokuserer på.

Som hobby (enda en ...) så holder jeg på med digitale modell tog, og lager ulike styringer for disse.

Så jeg har planer om å koble TIKI 100 inn på dette også (uff, nå sporer jeg helt av, beklager  :oops: )

Edited by FrankF

Share this post


Link to post
Share on other sites
FrodeM    9

32 sektorer på hver side av et spor burde emulatoren støtte, selv om ikke TIKO nødvendigvis støtter det. Oppsettet med TIKO trenger ikke bruke alle de emulerte sektorene! TIKO kan også settes opp til å telle fra sektor 0 istedenfor 1.

 

Har ikke gått inn i hvordan blokkposisjonene regnes ut med tanke om at de må starte på et spor eller ikke. Som nevnt, den originale harddisken bruker 17 sektorer per side per spor (8.5K), mens blokkstørelsen bare er 8K og det funker helt greit.

Share this post


Link to post
Share on other sites
FrankF    7

Dette var den løsningen jeg opprinnelig hadde. Jeg simulerte WD1010 winchester HD kontrolleren fullt ut, men med rå format på SD kortet.

WD1010 støtter 256 sektorer (512 byte) på 8 sider, og 1024 spor. Dette gir 1GB for en harddisk. I tillegg støtter WD1010 fire harddisker, så det gir 4GB totalt.

 

Det er ingen problem med å sette fast størrelse på antall sektorer pr. spor for min HD, og det var det jeg forklarte tidligere, at jeg har 32768 bytes pr. sektor, dvs 64 sektorer pr. spor (512 bytes).

filen blir større, men det er ikke noe problem.

Så da legger jeg inn 64 sektorer totalt pr. spor for 2 sider (32 pr. side).

Men for å få til en 32MB disk i TIKO, trenger jeg da 2048 spor, så filen for en HD blir da 64MB.

Share this post


Link to post
Share on other sites
coolmint    0

Off-topic, men kan du få tak i spillet "MONS OG MARTE"? Jeg skulle meget gjerne ha prøvd det på ny og matet det inn i en emulator.

EDIT: jeg lager en egen tråd

Edited by coolmint

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×