Emulátor magnetofonu pro Science of Cambridge MK14

Teď, když už se první počítač sira Cliva Sinclaira, resp. jeho replika začíná šířit mezi retro počítačové nadšence, začíná být aktuální nahrávání programů do a z tohoto počítače. Novější verze SCIOS obsahuje v sobě rutiny pro obsluhu kazetového magnetofonu. Pro jeho připojení je potřeba Cassette Interface, avšak vstup a výstup přímo na MK14 jsou v TLL úrovních a tak si to říká o nějaký jednoduchý emulátor magnetofonu na těchto úrovních. První, co mně napadlo bylo samozřejmě Arduino. Připojení šlo hladce a tak můžeme nahrávat i ukládat data do i z MK14 hned na dva způsoby.

MK14_TapeEmu_TZXDuino_working   MK14_TapeEmuSerial_Scr1

Nejprve ale k připojení. Když se podíváte na strany 16 a 17 manuálu, zjistíte, že pro připojení magnetofonu je potřeba propojit vstupy SENSE-B a SIN (piny 18 a 24 CPU) a tyto zapojit na výstup magnetofonu, v našem případě digitální pin č. 4 Arduina (pin 7 u Arduino Nano). Na vstup magnetofonu se připojuje výstup F0 (pin 19 CPU). V našem případě tento výstup zapojíme na digitální pin č. 2 Arduina (pin 5 u Arduino Nano). Výhodou tohoto pinu je možnost vyvolání přerušení. Samozřejmě můžete použít jakékoli jiné Arduino nebo jen ATmega 328 v breadboardu, je to úplně jednoduché.

MK14_Tape_connection

Důvod, proč já jsem použil Arduino Nano byl jednoduchý. Nejprve jsem napsal sériovou variantu a tam to bylo jedno, s počítačem komunikujete po virtuálním sériovém portu, kde máte jak ovládání, tak stavové informace i vstup a výstup dat. Ovšem potom jsem si řekl, že by to chtělo displej a klávesnici a SD kartu a tohle všechno má na sobě TZXDuino, které obsahuje právě Arduino Nano. Proto jsou obě verze přiloženého softwaru odladěné (plusmínus, je to bastl Mrkající veselý obličej) na Arduino Nano a připojení je u obou stejné.

MK14_TapeEmu_MK14_connection   MK14_TapeEmu_TZXDuino_connection

Firmware pro TZXDuino

Pro prosté uživatele MK14 bez velkých ambicí na tvorbu vlastního softwaru se asi nejvíc hodí tato verze. Stáhnout si ji můžete tady:

MK14_TapeEmu_0-1_TZXDunioSRC.zip

Jedná se o alternativní firmware pro TZXDuino, který vám umožní vybrat na SD kartě HEX nebo binární soubor a tento přehrát. Na MK14 je potřeba zadat cílovou adresu kam data nahrát do paměti na adresu 0FF9 (vyšší byte) a 0FFA (nižší byte) a spustit podprogram monitoru ‘load from tape’ na adrese 007C. V praxi to vypadá třeba takto:

1) vyberte na TZXDuino s MK14 TapeEmu firmwarem soubor pro nahrání, např. CLOCKM.HEX

2) zapněte MK14, stiskněte RESET a postupně zadávejte:

  • 0FF9
  • TERM
  • 0F
  • MEM
  • 12
  • MEM
  • ABORT
  • 007C
  • GO
  • Stiskněte PLAY na TZXDuino

3) po dokončení nahrávání stiskněte na MK14 tlačítko RESET a zadejte

  • 0F20
  • GO

a měly by se Vám spustit hodiny s časem 21:31:00. Správný čas můžete zeditovat na adrese 0F16, jako je uvedeno v manuálu.

Tato verze nemá aktivní ukládání dat na SD kartu. Rutina je sice v paměti, ale nepřišlo mi to pohodlné. Kdybyste chtěli ukládat, doporučuji sériovou verzi nebo si můžete zdrojáky jakkoli upravit.

Další datový soubor, který jsem nachystal na vyzkoušení je binární MESSAGE. Nahrává i spouští se od adresy 0F20. Určitě nebudete mít problém si na SD kartu nahrát další. Na internetu najdete zdrojáky, binární i HEX podobu prográmků, případně si můžete sami něco napsat a přeložit a na to se více hodí druhá verze programu.

Firmware pro sériovou komunikaci

U této verze si vystačíte s terminálovým programem a samotným Arduinem Nano. Samozřejmě můžete tento Firmware nahrát i do TZXDuina, jen nic nebude na displeji ani nevyužijete SD kartu nebo tlačítka. Vše se ovládá přes sériový terminál nastavený na 115200 baudů, 8 datových bitů, žádná parita, 1 stop bit, žádné řízení toku. Pro spolehlivé posílání HEX souborů doporučuji nastavit zpoždění řádků na 1000 ms.

Zdrojáky sériové verze můžete stáhnout zde:

MK14_TapeEmu_Serial_0-1_ArduinoNanoSRC.zip

Arduino představuje jakousi mezipamět mezi PC a MK14. Pokud něco chcete nahrát do mezipaměti, jednoduše vložte přímo hexadicemální data nebo Intel HEX soubor. Data se postupně ukládají do paměti od adresy 0. Můžete je vkládat postupně nebo vložit celý obsah Intel HEX souboru najednou. Vypadat by to mělo nějak takto:

MK14_TapeEmu_inserting_IntelHEX   MK14_TapeEmu_LIST_HELP

Vypsat všechny příkazy můžete pomocí ? a vypsat obsah paměti pomocí L (jako LIST, protože D pro DUMP nebylo volné, protože hexa znaky přímo zadávají data do paměti).

Obsah paměti následně nahrajete do MK14 pomocí příkazu W (Write). Před jeho spuštěním samozřejmě musí na MK14 nastavit adresu pro umístění programu na adresy 0FF9 a 0FFA a spustit rutinu ‘load from tape’ na adrese 007C. Během přehrávání se postupně vypisují nahrávané byty.

Funkce R (Reset) slouží pro vymazání vnitřní paměti, kterou pak můžete naplnit třeba daty z MK14. Pro nahrání dat z MK14 musíte na adresy 0FF8 uložit počet bytů, které chcete ukládat, následně na 0FF9 (vyšší byte) a 0FFA (nižší byte) zadat adresu začátku dat a spustit podprogram monitoru ‘store to tape’ na adrese 0052. Arduino nahrávaná data automaticky začne ukládat do paměti. Obslužná rutina pracuje v přerušení, tj. pořád. Kldině si můžete současně přenášet do paměti Intel HEX soubor z PC a nahrávat data z MK14. Ovšem tím si vytvoříte v paměti pěkný bordýlek Veselý obličej.

Data uložená v paměti můžete vypsat již zmíněným příkazem L nebo jako Intel HEX pomocí příkazu Haaaa, kde aaaa je adresa dat v Intel HEX. Z pohledu MK14 a magnetofonu je to jedno, ale pokud máte v Intel HEX souboru správné adresy, může vám to napovědět kam program do MK14 nahrát a spustit.

MK14_TapeEmu_storing_IntelHEX

S Arduinem se dá “vyblbnout”. Můžete si zdrojáky jakkoli upravit podle svého. Najděte si rutiny readBit() a sendByte(). Uvidíte, že jsou kraťučké a to je celá emulace kazeťáku. Ostatní je hromada balastu “aby se to dalo alespoň trochu komfortně používat”. Moje původní idea byla udělat vše tak, aby se dal HEX soubor kopírovat dávkou po překladu na COM port, ale nakonec jsem trochu narazil na handshaking a stejně na MK14 musíte ručně zadat délku, adresy a spustit nahrávání, tak ta automatizace není úplná. Nechtěl jsem se úplně zahrabat tvorbou dokonalých kazeťákových rutin, šlo mi primárně o možnost snadného spuštění přeloženého programu, abych si mohl začít více hrát s VDU a to oba prográmky celkem dobře splňují. Mimochodem pro práci s VDU to bude chtít upravit časové konstanty kvůli pomalejšímu krystalu, ale to ještě napíšu.

Příspěvek byl publikován v rubrice MK14, Sinclair se štítky . Můžete si uložit jeho odkaz mezi své oblíbené záložky.

2 komentáře: Emulátor magnetofonu pro Science of Cambridge MK14

  1. Pingback: Replika Science of Cambridge MK14 Cassette Interface | Martinův 8-bitový blog

  2. Pingback: MK14 audio WAV converter a MK14Duino pro Cassete Interface | Martinův 8-bitový blog

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *