Apple ][ jako Z80 platforma

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.