Tja, prowokujesz do dzialania
.
Niedawno jak 3 dni temu bawilem sie w przelaczanie character setow. Bardzo teoretycznie wydaje mi sie, ze mozna to rozwiazac wlasnie w ten sposob jednak potrzebowalbym porady kolegow.
Pomyslalem, zeby wykorzystac wspaniala wlasciwosc rejestru $d018. 4 gorne bity kontroluja SCREEN MEMORY (16 dostepnych ekranow) a 4 dolne bity kontroluja CHARACTER SET (8 dostepnych dla banku 3).
Innymi slowy w trakcie przesuwania sie planszy re-definiowane by byly np: dwa rzedy znakow w 8 kompletach CHARACTER SET. Dzieki IRQ mozna by przelaczac CHARACTER SET co dwa rzedy. Na wyswietlanych polach mozna po kolei umiescic znaki ekranowe, ktore zmieniane by byly podczas przesuniecia planszy.
Dlaczego dwa rzedy znakow? Zauwazcie, ze w Amaurote jest 16 pol w pionie! Podzielmy to na ilosc dostepnych setow. Wyjdzie po 2 rzedy. Kazdy rzad ma w poziomie 28 pol wiec zdefiniowac mozna 56 znakow dla kazdego CHARACTER SET-u. Mozna tez zrobic po 4 rzedy na CHARACTER SET - wtedy re-definiowane bedzie 56*2=112 znakow a zmieniane beda tylko 4 sety, mniejsza z tym. Reszta znakow pozostaje na ruchoma animacje i te ramko-plastry miodu dookola.
SCREEN MEMORY mozna by wykorzystac jako double buffering: raz re-definiowane sa znaki na jednym screenie, a raz na drugim - dzieki czemu przy wyswietlaniu nowego ukladu planszy nastepuje natychmiastowe przejscie ze \"starych\" znakow na \"nowe\" - przez co nie bedzie oczywiscie widoczne to, ze te znaki modyfikujemy \"w locie\". Sprawa jasna.
Obecnie silniczek, ktory napisalem pobiera numer pola z mapy i wyswietla relatywnie dla niego odpowiednie znaki ekranowe. To jest metoda na sztywke, a gdyby zrobic wlasnie dynamiczne zmieniane znakow?
Beda wiec dwa pytania, pierwsze prowadzi do drugiego. Kto zna odpowiedz, niech napisze lub zamilknie na wieki:
1) Ile czasu zajmie re-definicja calej planszy? Plansza ma rozmiar 28 x 16 = 448 znakow - kazdy sklada sie z 8 bajtow wiec musimy zmienic wartosci 3584 bajtow (!!). Teraz wiec pytanie jak najszybciej je odczytac i wyswietlic, zeby przejscia te byly w miare plynne. Trzeba tu uwzglednic zmiane adresow do danego CHARACTER SET-u (zmienianego osiem lub cztery razy).
2) Czy daloby sie utworzyc mape zlozona juz z definicji znakow? Bedzie to w sumie ta sama mapa co dotychczas tylko 8 razy wieksza (kazdy wyglad znaku sklada sie z 8 bajtow). Odczytywane wartosci bylyby od razu tymi bajtami skladajacymi sie na znak: i w ten sposob za pomoca okna z danej pozycji bylyby od razu kopiowane do odpowiednich CHARACTER SET-ow.
Jezeli na pytanie 1) i 2) znajdzie sie rozwiazanie, ten silnik moge sprobowac napisac, jest prostszy niz dotychczasowo utworzony gdyz kopiowalby tylko dane wygladu znakow ekranowych, ktore przelaczane by byly przez zmiane CHARACTER SET-ow z racji tego, iz jeden set ma tych znakow 256 a chcemy wyswietlic plansze, ktora ma ich 448 a dochodza do tego znaki naszego pajaka, pociskow, much, plastrow miodu (ramek).
Ciezko jest to napisac, latwiej narysowac a jeszcze prosciej o tym pogadac na zywca, ale mam nadzieje, ze jest to na tyle banalna metoda, ze zlapaliscie o co mi chodzi. Tylko czy ja dobrze lapie, ze to moze sie w miare szybko wyrysowac
- nie potrafie sobie jeszcze odpowiedziec na to pytanie, brak doswiadczenia mi na to nie pozwala ale bede probowal jakby co.