Jak známo, má Apple ][ procesor 6502. No a nebo taky ne.
Ano, Wozniak vybíral pro svůj Apple I procesor hlavně podle ceny – sice původně chtěl začít s Motorolou 6800, ale když se objevil levný MOS 6500 a 6501, začal se na něj přeorientovávat, a když po soudním sporu musel MOS přijít s řadou 6502, upravil Woz i design svého počítače tak, aby mohl 6502 pojmout místo původně plánované Motoroly.
Apple ][ toto dědictví převzalo.
Velká část amatérských konstrukcí a komerčních mikropočítačů tehdejší doby ale byla založena na procesoru 8080 (Altair 8800, IMSAI 8080, Sol-20, …) a vybavena operačním systémem CP/M, pro který vyvíjel programy jakýsi Micro-Soft (snad ale není potřeba upřesňovat, který Micro-Soft přesně to byl).
Na Apple ][ ovšem nešel samozřejmě OS CP/M spustit.
Ne že by to bylo něco zásadního, ale přeci jen se jednalo o dosti prodávaný počítač a existoval tak segment trhu, na který se programy Micro-Softu nedostaly.
Jak to napravit?
Začal to řešit sám Micro-Soft – Paul Allen vymyslel a Bill Gates s Timem Pattersonem ze Seattle Computer Products (ano, s tím, co později prodal Microsoftu „quick and dirty DOS“) dali dohromady kartu s procesorem Z80.
Použití Microsoft Z80 SoftCard, jak se tato CP/M karta jmenovala, bylo celkem jednoduché.
Strčila se do určeného slotu (tuším, že microsoftí CP/M očekávala kartu ve slotu 4), do disketovky se strčila CP/M disketa a nabootovalo se.
Místo Apple Basicu se pak objevil prompt CP/M.
Když se na kartu podíváme, neobsahuje ani žádnou vlastní ROMku. Jen procesor, přepínače, LEDKu indikující aktivitu a nějakou logiku okolo.
Nebylo to úplně bez vady – CP/M používala nestandardní formát disket, které se navíc lišily podle typu počítače – starší typy Apple ][ a Apple ][+ používaly 13sektorové diskety, novější (Apple ][e) 16sektorové diskety.
Formát tak nebyl kompatibilní nejen s jinými CP/M platformami, ale ani mezi Apple ][ navzájem.
Kód v bootsektoru navíc nebyl určen pro Z80, ale pro 6502, která ho nahrála v domnění, že bootuje applácký DOS (později ProDOS).
Inu, CP/M je sice hezká věc, i když v microsoftím podání se to neobejde bez drobných vad na kráse, ale přeci ho nebudeme na Apple ][ v dnešní době používat jako primární systém (zvlášť, když tehdy dodávané vývojové nástroje Microsoftu nepočítaly se Z80 a byly určeny pro 8080).
Když ale máme v počítači Z80 kartu, a jsme zvyklí používat Z80 assembler, jde toho nějak využít i bez CP/M?
Napsat v Z80 kódu třeba demo pro Apple ][?
Jak uvidíte, je to více než jednoduché.
Podívejme se ale, jak Z80 Softkarta pracuje.
Opravdu neobsahuje vlastní ROM a sdílí paměťový prostor s 6502.
Je tu drobný detail spojený s jedním z přepínačů na kartě – protože CP/M je umístěn od adresu 0, Z80 zde má restarty, ale 6502 má v zeropage své proměnné a o kus výše zásobník, má Z80 prostor posunutý tak, že jeho adresa 0 začíná na adrese $1000 6502 prostoru. Díky zacyklení paměti do sebe se pak 6502 zeropage a 6502 zásobník nachází na konci paměťového prostoru Z80.
Manuál doporučuje na Z80 nehrabat nad adresu $DFFF (jednak aby se nepřepsala zeropage a zásobník, dále aby se nehrabalo do I/O prostoru Apple ][).
Toto posunutí adres je možno přepínačem vypnout, ale je to asi zbytečné dělat, když víme, že existuje a proč.
Co se týče obsluhy periferií a přerušení, v CP/M je to řešeno odskoky do 6502 kódu a hardware si tak obsluhuje 6502 sama.
Rutina pro obsluhu přerušení Z80 má pak v podstatě předat řízení 6502.
Volání těchto služeb CP/M je popsáno v manujálu, ale nyní předpokládáme, že CP/M nabootováno nebylo a my si přepínání procesorů obsloužíme sami.
Jednotlivých 8 slotů je vlastně 8 adresních prostorů, do kterých se namapuje karta do slotu zasunutá (přesněji – její ROM s relokovatelnou částí obslužného software; karta může nést i nerelokovatelnou ROM, která se bankuje do pevně daného prostoru, který je pro všechny karty společný).
Přiřazení slotů pro základní ROM je toto:
1 – $C100-$C1FF
2 – $C200-$C2FF
3 – $C300-$C3FF
4 – $C400-$C4FF
5 – $C500-$C5FF
6 – $C600-$C6FF
7 – $C700-$C7FF
Jak ovšem víme, Z80 SoftCard neobsahuje ROM.
Zapsáním do příslušného prostoru slotu způsobíme přepnutí procesorů.
(Standardní slot pro připojení SoftCard s CP/M je slot 4.)
Zapsáním do předpokládaného prostoru ROM příslušného slotu se tedy vypne 6502 a zapne Z80, při druhém zápisu sem se Z80 deaktivuje a 6502 se zase zapne.
Lze tedy vzít nějaký Z80 kód, třeba ze ZX Spectra, opatřit ho úvodem v 6502 kódu, který zabezpečí přepnutí do Z80 (za předpokladu, že je nainstalovaná v očekávatelném slotu), a ten pak nechat provádět.
Úpravy kódu se pak už budou týkat jen specifičností Apple ][, jako je obsluha jeho grafických režimů a plnění videoRAM, nebo práce se zvukem.
Jak víme, SoftCard je jednoduchá a bylo by možné snadno dát podle schématu dohromady její klon.
Ovšem nemělo by to být potřeba – v roce 1980 se jednalo o komerční trhák. Největší zdroj příjmů pro Microsoft v tehdejší době, větší než příjmy z Basicu.
Za první tři měsíce se vyrobilo 5000 karet, a výroba pokračovala několik let.
Navíc kompatibilní CP/M karty uvedlo na trh více výrobců.
Stačí tedy kartu vzít, strčit do správného slotu (tam, kde ji bude software hledat) a začít pro Apple ][ programovat v assembleru Z80.
Měl jsem v Apple IIc kartu se Z80 od MS, která se strkala do patice místo procesoru, pokud se nepletu. Bohužel nefunkční a k nefunkčnosti se posléze přidala i nefunkčnost sériáků na desce Apple IIc, takže to celé šlo z domu nějakému sběrateli, který na funkčnosti nebazíruje. Jinak ale krásná věc.
Jediné co je lepší než mít v počítači dva procesory, je mít dva různé procesory!
Jak tohle funguje na C128? Nejak podobne? Ta posunuta pamet je docela zajimave reseni.
Tuhle kartu jsem s lítostí z mého jablíčka //e vyndal a pietně uložil do depozitáře, páč pro mne nejevila známky života. Žádná diodka ani neblikla. Pravda, disketu s CP/M jsem neměl a po přečtení článku tedy zpětně přemýšlím, zda přeci jen není v pořádku, jen se sama o sobě nijak neprojevuje. Měl bys návod na to, jak ji otestovat? Díky.
Jirka
C128 jsem moc nezkoumal, takže podrobnosti nevím, odradily mne HW bugy (kvůli kterým nejde Z80 pustit na 4 MHz, i když se s tím původně počítalo).
Každopádně po zapnutí C128 je aktivní Z80 a teprve podle konfigurace počítače (boot z CP/M diskety, zasunutá cartridge, stisknutá C= klávesa) přepne případně na jiný procesor.
Ukázkový program pro přepínání procesorů je popsán tady:
http://commodore64.wikispaces.com/Switching+Between+8502+and+Z80
O CP/M modulu pro C64 se říká, že je nestabilní a často padá (nemám ověřeno).
To je správně, SoftCard (nebo s ní kompatibilní Z80 karta od jiného výrobce) se (za normálních okolností) aktivuje teprve po nabootování CP/M (resp. 6502 kódu z bootu diskety, který nabootuje zbytek CP/M a přepne na Z80).
Protože jde o IIe, nemůžu ani půjčit bootovací diskety (mám jen 13sektorovky) k otestování.
Ale mělo by to jít s využitím znalostí o mechanismu přepínání – strčit kartu do slotu 4 a v miniassembleru, který je v ROMce Apple II (spustí se "F666G") si napsat přepínací rutinku a Z80 prográmek, který "něco" udělá (nekonečný skok sama na sebe postačí – v Z80 módu by se měla dioda rozsvítit). Hádám, že Z80 se bude spouštět od adresy 0 (tedy 0100h v 6502 adresovém prostoru).
Díky za radu. Ale obávám se, že si jen tak nenapíšu přepínací rutinku. Sice assembler 6502 znám (i když z Atari), ale nevím, jestli jsem ono přepnutí pochopil správě – tedy, že stačí zapsat něco do paměťového rozsahu $C400-$C4FF a tímto se automaticky přepne řízení na Z80 na kartě, pro kteroužto musí být nachystaný kód od čtvrté stránky paměti Apple, kterážto je ale počátkem pro Z80?
Jirka
Tak by to mělo podle dokumentace být. Bude to chtít ověřit.
OK, udělám si zítra čas na zkoušku – dám vědět.
Díky
Jirka
Tak jsem to prubnul a funguje to! 🙂
Zatím jsem tedy jen zkusil zápis na adresu $C400, po čemž se rozsvítila dioda na SOFTCARD.
Technická poznámka – na mém stroji se do mini-assembleru leze zadáním ! (vykřičníku) v monitoru a ten se pak také tímto promptem hlásí. Po odeslání prázdného řádku (uvozeného oním vykřičníkem) se zase vyskočí zpět to monitoru.
Nějaké kódy pro Z80, popřípadě nějaké předávání řízení tam a zpět zkusím, až bude víc času.
Každopádně díky moc 😉
Jirka
Jsme prostě dost dobrý. Přiznejme si to :o)