Kassett-emulator

Fra Arduipedia

Gå til: navigasjon, søk

Ein kassett-emulator til Sharp MZ700. Formålet er å kunne bruke eit SD-kort som "kassettspelar".

Tanken er å bruke ein Teensy med eit SD-kort til dette. Ein kan då koble Teensyen til ein PC/Mac/ACP og SD-kortet vert då tilgjengeleg som ein disk. På disken/SD-kortet lagrar ein så filer/tape-image.

Det er to moglege måtar å overføre filer til/frå Sharpen:

  1. Som tape-image. Dette er det enklaste for "kassettspelaren" sin del, då jobben blir begrensa til å lese/skrive bitstrømmen. Bakdelen er at (de)koding av tape-image må foregå på PC/ACP-en, utan at dette treng vere så vanskeleg.
  2. Som binære filer. "Kassettspelaren" dekoder/koder tape-imaget, slik at filene vert lagra som reine binærfiler på SD-kortet. Dermed kan ein t.d. skrive BASIC-program i ein tekst-editor på ACP-en og laste dei på Sharpen utan å gå via eit tape-image.

I begge tilfelle kan ein bruke filnamnet som angitt av Sharpen, etterfulgt av eit løpenummer. På denne måten får ein full historikk for kvar fil. Når ein skal laste ei fil på Sharpen må ein "spole seg fram til" riktig image. Ein kan tenke seg å koble til eit LCD-display som viser innhaldet på SD-kortet, t.d. kan ein bla seg gjennom filene med opp/ned-tastar og filrevisjonar med venstre/høgre-tastar. Evt. kan ein gjere dette via ein PC/Mac/ACP.

"Kassetten" må også ha play/record-knappar til å ta sense-linja opp/ned.

Innhold

Korleis det fungerer

Overføre til Sharpen

Dette ser ut til å vere den enkle delen. Det er snakk om einvegskommunikasjon med Sharpen, så her kan ein bruke 100% CPU på å generere tape-signalet.

Fil:tapeformat.gif

Som ein ser så ventar Sharpen på ein positiv flanke, ventar 368us og så les av biten. That's it. Så overføring til Sharpen består rett og slett berre av å lese ein del av tape-imaget frå SD-kortet til ein buffer, generere tape-signalet, late tape-signalet ligge lavt når ein fyller bufferen igjen og gjenta til ferdig.

Overføre frå Sharpen til "kassetten"

Interrupt på positiv flanke på tape-signalet. I interrupten venter ein 368us og les av biten, som ein så pusher inn i ein kø. Denne køen vert fortløpande overført til tape-imaget på SD-kortet. I Record-modus må altså Teensyen loope rundt ein buffer-sjekk, og overføre innkommande bits til SD-kortet. Spørsmålet er om det er nok CPU-tid til det.

Ein annan ting - "fil"navnet er koda inn i bitstrømmen. Er usikker på om det er så tidleg i bitstrømmen at eg kan vente med å skrive til SD-disken til eg har fått dekoda filnavnet. Viss ikkje må ein berre kalla fila t.d. "temp.tap" og så døype den om når den er ferdig skriven.

Geir hadde ein god idé: Bruke ein separat MCU til den tidskritiske delen her. Då kan den følge med på signalet, trigge på positiv flanke, vente 368us, lese biten og overføre den til Teensyen. Overføringa kan gjerast via to linjer, ei klokke og ei datalinje. Klokkelinja kan koblast til ein interruptpinne på Teensyen. Dette vil frigjere masse CPU-tid på Teensyen, som no ikkje burde ha noko problem med å skrive til SD-kortet i tide.

Alternativ

Kan også bruke ein vanleg Arduino og overføre dataene serielt. Ein må framleis ha play/record-knappar, og ein enkel kommunikasjon med verts-maskina:

  • "Play": Send ein streng til vertsmaskina som seier at den skal begynne å skrive det aktuelle tape-imaget til seriellporten. Arduinoen les så neste byte i pausa etter positiv flanke (368us) heilt til Play eller Record blir trykt igjen.
  • "Record": Send ein streng til vertsmaskina som seier at no kjem det ein bitstraum. Vertsmaskina les så denne fortløpande, og dekoder den slik at filnavn, sjekksummar og slutt på fil kan trekkast ut.

Oppgåva til vertsmaskina blir då å lagre innkommande bitstrømmar uendra, samt sende dei til seriellporten på forespørsel. Over dette kan ein lage eit greitt GUI.

Play/record-knappane kan ein også implementere i host-applikasjonen. Då kan ein montere Arduinoen "stealth" inne i Sharpen, med null betjeningsknappar.

Eg kan også stjele Geir sin SRAM-idé. Då vil det vere superkjapt å lagre unna bitsa etterkvart som dei kjem inn. Treng ein teller på adressebussen, ein port til databussen og nokre pinnar til trigging/reset av telleren, r/w-linje etc. Fordelen med å bruke SRAM er at tida det tek å pushe data til den er forutsigbar, og kan dermed gjerast i venteløkka i interrupt-handleren. I teorien vil dette gjere emulatoren bombesikker :)

Personlige verktøy
Navigasjon