Komputery z Z80 > AMSTRAD

Tricki na Amstradzie

(1/29) > >>

ZbyniuR:
OVERSCAN

W tych nowszych grach obrazek startowy zajmujący także ramkę to nie taki rzadki widok, jest tez kilka pokazów slajdów z takimi większymi obrazkami.
Nie raz też ekranik się zmniejsza np do rozmiarów podobnych jak w Spectrum by łatwiej zrobić port gry na CPC, mamy wtedy szerokaśną ramkę. Za to procek się troszkę mniej męczy bo ma mniejszy obszar pamięci ekranu do "obrobienia". A np ARKANOID ma obraz bardziej wysoki niż szeroki.  Bo aby w CPC zmienić proporcje ekranu nie potrzeba przerwań ani kości z PLUSA, tylko trzeba zmienić zawartość kilku rejestrów w CRTC, a robi się to komendą OUT. OUT &BC00,(tu nr rejestru który chcesz zmienić):OUT &BD00,(tu wartość jaką chcesz tam wpisać). Overscan wymaga zmian w następujących rejestrach.

nr rejestru / co to zmienia / standardowa wartość / FullScreen
2 - pozycja lewej krawędzi ekranu - 46 - 50
1 - szerokość ekranu - 40 - 48
7 - pozycja górnej krawędzi ekranu - 30 - 35
6 - wysokość ekranu - 25 - 34

Pełny opis rejestrów http://www.cpcwiki.eu/index.php/CRTC#The_6845_Registers

Bawiąc się nimi można zmieniać na NTSC, włączać interlace, zmienić wygląd i mruganie kursora, zmieniać wysokość znaków w pikselach, zmieniać adres pamięci ekranu, rysować piórem świetlnym po ekranie.

Czyli OUT &BC00,2:OUT &BD00,50:OUT &BC00,1:OUT &BD00,48:OUT &BC00,7:OUT &BD00,35:OUT &BC00,6:OUT &BD00,34  daje FullScreen nie zostawiając ramki w rozdziałce 768x272 w 2kolorach, 384x272 w 4kol, lub 192x272 w 16. Ale jak łatwo policzyć taki ekran zajmuje dokładnie 25,5KB a jak widać w dolnych kilku linijkach powtarza się to co jest na górze ekranu. I tu się przydają przerwania, by w chwili gdy ma wyświetlić dolne linijki czytał je spod innego adresu, co trzeba przestawiać ileś tam razy na sekundę. ;)

Słyszałem że w dodatkowych niepublikowanych rejestrach można włączyć drugi obszar do wyświetlenia, (dzięki czemu np FullScreen nie wymagałoby przerwań) a widziałem to w paru gierkach. np w Prehistoric 2, ekran jest szerszy ale też niższy niż standardowo więc nie przekracza 16KB, ale kilka linijek odstępu pod nim jest jeszcze linijka z punktami i życiami, a pomiędzy nimi jest ramka.

Jako ciekawostkę podam że jedynym trybem ekranu w Amstradzie PCW który ma podobnego scalaka do grafy, jest 720x256 2kolory 22,5KB czyli zostawia wąziutką rameczkę.

ZbyniuR:
Propo mrugania na ekranie po wpisaniu CAT na dyskietce z grą R-Type 2012.
Mrugające kolory w Amstradzie to nie czary. Dopisując po wyświetleniu się tej listy rekordów INK 2,10,20 słowo Ranking zacznie mrugać tak samo. Bo dodając trzeci zbędny parametr przy definiowaniu koloru zaczyna mrugać. Podobnie BORDER 6,18 a normalnie wystarcza jeden parametr. Ciekawsze jest to że po wpisaniu komendy CAT zamiast wyświetlać listę plików i ilość wolnego miejsca tworzą się cuda. hehe :)

Zanim podpowiem jak coś takiego umieścić na dyskietce. Wyjaśnię że gdy wyświetlimy na ekranie komendą PRINT znaczki o kodach 1 do 31 można robić fajne rzeczy które normalnie robimy takimi rozkazami jak MODE, INK, BORDER, LOCATE, SYMBOL i parę innych. By uzyskać te znaczki wciskamy litery z Controlem.

Klawisz - co robi (parametry jeśli konieczne)
Ctrl+D - MODE - zmienia tryb graficzny (0, 1 lub 2)
Ctrl+] - BORDER - kolor ramki (2 znaczki jeśli nie ma mrugać to takie same)
Ctrl+\ - INK - definiuje kolor w palecie - (nr kol i 2 znaczki tak jak wyżej)
Ctrl+O - PEN (1 znak)
Ctrl+N - PAPER (1 znak)
Ctrl+X - przełącza kolory na invers
Ctrl+G - brzęczyk
Ctrl+0 - LOCATE - zmienia współrzędne kursora (2 znaki)
Ctrl+L - CLS
Ctrl+U - wyłącza wyświetlanie znaków
Ctrl+F - przywraca wyświetlanie
Ctrl+V - zmienia tryb nakładania się znaków na siebie (cyfra 1 pozwala nakładać na siebie np L i / dając literkę Ł)
Ctrl+Y - SYMBOL - definiuje wygląd znaku (1szy znak to nr ASCII a kolejne 8 to wygląd znaku)
Ctrl+(jeden z HIJK) - to strzałeczki które przesuwają kursor

Można się tym troszkę pobawić by sprawdzić jak to działa. Stosowanie takich tricków bardzo skracają lisingi w Basicu. Bo pozwala wcisnąć w komendę PRINT szereg rozkazów definiujących wygląd ekranu, albo upchać wygląd wszystkich polskich znaków w jednej linijce.
A teraz jak to zastosować na dyskietce. Będzie potrzebny jakiś edytor dyskowy. Na zerowej ścieżce 2KB czyli sektory od C1 do C4 zawierają katalog dyskietki. By zrobić coś takiego jak na wspomnianej R-Type trzeba przygotować sobie szereg znaczków jakie chcemy aby się wykonały lub wyświetliły po wpisaniu komendy CAT a potem podzielić je na 6 znakowe fragmenty i wykorzystując puste pozycje w katalogu wpisywać zamiast 8 znaków nazwy pliku, znaczek Ctrl+F potem 6 znaczków jakie chcemy i Ctrl+U by zapobiec wyświetleniu się kropeczki w nazwie pliku oraz ilości KB do tego pliku. Nie zapomnijcie zrobić kopi dyskietki na której grzebiecie i nie uszkodźcie nazwy prawdziwych plików jakie chcecie by działały z tej dyskietki. Miłej zabawy.

RafalM:
A może zechciałbyś napisać taki wstępny artykuł - jak w ogóle Amstrad generuje obraz, jak jest zorganizowana pamięć obrazu, jak ustawia się tryby graficzne, zmienia paletę, jak wyświetlić sprajta ?

Żeby rozmawiać o trickach trzeba najpierw orientować się w podstawach ;)

ZbyniuR:
  To by pochłonęło masę czasu a z natury jestem leniwy. I obawiam się że mało kto by to chciał czytać i stosować. Nie za bardzo mi się chce uprawiać sztukę dla sztuki, wolałbym wiedzieć że konkretna osoba ma konkretne pytanie, to przynajmniej wiedział bym, że nie piszę do ściany.
  To co napisałem powyżej dla osoby która bawiła się kiedyś Basic-iem i to niekoniecznie na CPC, powinno być zrozumiałe. Jak komuś się bardzo zachce a umie używać Googla to sobie znajdzie dokładny opis komend Basica z parametrami, organizację pamięci, opis kernela (czyli wszystkich procedur maszynowych w ROMie), opis każdego pina na każdym złączu, czy też wspomniany wyżej opis rejestrów CRTC lub AY, Że o rozkazach Z80 nie wspomnę. Nawet jak materiał nie będzie w znanym mu języku Google przetłumaczy, a żyłka odkrywcy dopełni reszty. ;)
  Na sprajtach się nie znam, Basic standardowo komend do nich nie ma, a programy do ich tworzenia zwykle mają edytor i dodatkowe komendy by gotowych sobie w Basicu użyć, co dokładnie opisują w instrukcji. Sam jakoś nigdy się za żadne nie zabrałem. Gdy pisałem kiedyś coś a`la okienkowa nakładka na system, strzałeczkę nakładałem na tło w inversie tak by go nie naruszyć, a wyświetlałem jako zaprojektowane wcześniej znaki, wyświetlane w trybie graficznym by precyzję co do piksela umożliwić, a użyłem standardowych rozkazów Basica. Jeśli ktoś ma jakieś konkretne pytania a nie polegają na tym że znajdź mi to i to bo mi się nie chce Googla użyć. to mogę odpowiedzieć w tym wątku lub na gg. :)
  Zainteresowanym mogę udostępnić .dsk np z polskimi znakami w zaledwie 2óch linijkach Basica, albo wyjaśnienie jak używać wąskiej czcionki takiej o szerokości 4 pikseli tak aby mieć 40 znaków w wierszu w 16kolorowym trybie ekranu albo 80 znaków w tym 4kolorowym. To pierwsze pewnie nie raz w grach widzieliście nawet czcionki w paseczki, a to ostatnie to mój oryginalny pomysł. ;)

  Jeśli chodzi o artykuł wstępny to raczej by musiał wyjaśniać jak wogóle coś włączyć na Amstradzie z dyskietki lub taśmy. By chciało się komuś wyciągnąć maszynę z piwnicy kolegi albo pobawić się emulatorem. Nawet napisałem niedawno coś takiego na ppa.pl
To Amigowa stronka i jest tam także wątek o Amstradach ale martwy. Co mnie nie powstrzymało przed dodaniem swoich 3ech groszy.
http://www.ppa.pl/forum/hyde-park/13918/amstrad-cpc/2#m367884   <- tu i o jeden wpis powyżej też.
A także moje wynurzenia o retro kompach  http://www.ppa.pl/forum/hyde-park/24701/hej-byly-czasy-c64-i-atari/2#m350785

Jeśli ktoś tam zajrzy i chce skomentować to może tutaj, bo tam raczej nikt tego nie zauważy. ;)

PS.: Wiem że Overscan robi się podobnie jak pisałem w tym wątku wcześniej także na małym Atari 384x240, w ST 704x260 i w Amidze 704x576 OCS i 1440x580 AGA, a w Commodorku można wyświetlać duszki na ramce, ale czy można w nim robić Overscan to nie wiem. Podobnie nie wiem czy da się to w Spectrum zrobić. Nie śmiejcie się tylko mnie oświećcie. :)

RafalM:
Rozumiem, też nie lubię pisać do ściany ;)

Więc mam konkretne pytanie:

W Spectrum mamy pamięć ekranu pod sztywnym adresem 16384 i żeby ten ekran wyświetlić nie trzeba robić nic, bo i tak 50 razy na sekundę zostanie on wysłany przez Ulę na telewizor, czy chcemy tego czy nie.

Jak jest w Amstradzie? Coś mi się kojarzy że tam trzeba napisać procedurę która wyśle grafikę na Spectrum za pomocą instrukcji OUT. Czy dobrze mi się kojarzy?

Nawigacja

[0] Indeks wiadomości

[#] Następna strona

Idź do wersji pełnej