Itt kezdõdnek az izgalmak
ahhoz, hogy LPT-t készítsünk, meg kell ismerni a CPC képernyõ kezelését.
Angolul tudóknak itt a leírás.Azt tudjuk, hogy 27 színbõl lehet válogatni, ezt a témát pár napja már kielemeztem
, az ott látható programmal sikeresen le lettek gyártva a CPC színeknek megfelelõ EP színek, ez meg is található a programban COLORS néven futó táblázatban.
Szerencsére a CPC a NICK-hez hasonló módokat ismer (csak kevesebbet
) , 0-ás módban 16 szín, 1-es módban 4 szín, 2-es módban 2 szín lehetséges. A színek számának növelésével a felbontás csökken, akárcsak a NICK esetén. Konkrétan 160x200, 320x200, 640x200 az egyes módokban. Ezt megvalósítani a NICK-kel gyerekjáték
kell egy 200 pixel sor magas 40 karakter széles nagyfelbontású grafikus sort definiálni az LPT-ben a megfelelõ színmódban és kész
Sajnos nem ilyen egyszerû a dolog, mert a videómemória valami elmebeteg módon van szervezve CPC-n
Fel van osztva 8 db 2048 bájtos blokkra: C000H-C7FFH, C800H-CFFFH, stb
A képernyõt 25 db karakter sorra lehet osztani, amelyek egyenként 8 sorosak. Egy sor 80 bájt hosszú.
Ezek úgy helyezkednek el, hogy az elsõ karakter sor elsõ sora az elsõ blokk elsõ sora, a második sor a második blokk elsõ sora, stb, tehát: C000H, C800H, D000H, D800H, stb
A második karakter sor elsõ sora az elsõ blokk második sora, a második sora a második blokk második sora, stb, tehát:
C050H, C850H, D050H, D850H, stb
És így tovább a 25. sorig.
Könnyen ki lehet számolni, hogy egy-egy blokkban 25 sor van, 25x80=2000! tehát blokkonként az utolsó 48 bájt pocsékba megy...
Ezekután már könnyen érthetõ az LPT generáló program felépítése, 25x8 sor-t generálunk, az elõre elkészített sor másolásával, az elsõdleges videócím helyére pedig a megfelelõ NICK cím kerül. Spectrum-os LPT generálásnál itt jóval egyszerübb a program, mivel nem kell az attribútum címek kiszámításával veszõdni.
A LINE címen található sor a CPC-n alapértelmezett 4 szín módban van, a 8 paletta szín pedig szintén a CPC-n alapértelmezetként beállított elsõ 8 szín.
A 200 grafikus sor legenerálása után a befejezõ rész egyben kerül másolásra. Ebben a részben még van egy szabvány 40 karakteres EP sor, ami a státusz sorra mutat. Ezt azért szoktam betenni az átírataimba, hogy magnóról töltés közben lehessen látni, hogy mi történik (SEARCHING, LOADING, PAUSE, stb), anno egy idõben sokat töltöttem be nem távvezérelhetõ magnóval, ekkor idegesített az olyan betöltõ program amiben nem látszik a státusz sor, hiszen így a magnó leállásával se lehetett észrevenni, ha már kész a betöltés, vagy netán hiba miatt leállt (mert persze az EXOS 6 utáni hibaellenõrzéssel se foglalkoztak...)
Miután kész az LPT, a képernyõ memóriaként használandó szegmens kerül a 3. lapra, ezután kinullázzuk ezt a 3 szegmenst, nehogy valami benne maradt szeméttõl megkergüljön majd a program. (van pl pár Spectrum átírat is ami meghülyül, ha nem kinullázott memóriával indul, pl volt egy RAMDISK, ami már meg lett szüntetve, és ez után lett betöltve a játék. Az eredeti gépen fel se merülhetett az, hogy már használt memóriába kerül a program, így abból indulnak ki a programozók, hogy csupa 0 van mindenütt)
CPC-n B900H-tól helyezkedik el a ROM rutinok belépési táblázat, ezért ezt a tarületet csupa RET-tel töltjük fel, így bármit hív a program, nem fog elszállni, csak éppen nem csinál semmit
Ezután betöltjük az elsõ fájlt a megfelelõ helyre. Errõl a fájlról már leszedtem a a CPC fejlécet, így pont oda töltjük, mint amit megtudtunk a CPCXFS-ben töltési címnek.
Eztán átállítjuk a NICK-et az új LPT-re. DAVE piszkálása a Spectrum betöltõ korszakból maradt, jelenleg felesleges
Ezután jön az ugrásipontok elhelyezése, amikor neki kezdtem, még csak kettõ volt: a megszakítási rutin (38H), ill. RST 0 (ami CPC-n a RESET rutin), többirõl majd késöbb
DAVE-ben engedélyezzük a videómegszakításokat, veremmutató pedig a CPC rendszerveremnek megfelelõen beállítva.
Ezután nagy levegõ, és ráugrunk a program elsõ utasítására, lesz ami lesz