Autor Wątek: Tryb gigascreen  (Przeczytany 109611 razy)

matofesi

  • *****
  • Wiadomości: 2048
  • Miejsce pobytu:
    Toruń/Poland
Odp: Tryb gigascreen
« Odpowiedź #60 dnia: 2012.03.03, 18:34:33 »
Owa instrukcja EQU to polecenie programu-assemblera (nie assemblera w znaczeniu języka programowania) i służy do zabezpieczenia pewnej wartości bajtów w miejscu kodu, czyli miejsce na przechowywanie zmiennych. Jeżeli nie używasz programu assemblera to wstaw tam dwa NOPy.

Gwoli ścisłości - EQU to przypisanie wartości do etykiety - odpowiednik LET z BASICa. EQU nie rezerwuje miejsca w pamięci a tylko ustawia występującą przed nim etykietę na podaną po nim wartość. W tym wypadku EQU $+1 używa jeszcze jednej notacji assemblerów - $ to aktualny adres do którego zostanie zapisana następna instrukcja. $+1 oznacza więc kolejną komórkę co w wypadku rozkazów dwubajtowych z bezpośrednio podanym parametrem (np. LD a,0) oznacza komórkę przechowującą ten właśnie parametr.

A to, co opisujesz to DEFB albo DEFW - to polecenia asseblera rezerwujące pamięć :)

Pyza^Illusion

  • *****
  • Wiadomości: 586
  • Miejsce pobytu:
    Lubań, dolnośląskie
Odp: Tryb gigascreen
« Odpowiedź #61 dnia: 2012.03.03, 18:40:05 »
Ooo o oo o o, w sumie o to mi właśnie chodziło :)
Eehhh, pamięć jednak zawodna. Choć w tum miejscu w ten sposób działa - może dlatego się zmyliłem :/
ZX Spectrum+ (128kB by STAVI), FDD3000, TI-OF-TTL/ZXVGS, Masterface2b, MacFace II, DivIDE plus, Just Speccy 128...

Abrimaal

  • *****
  • Wiadomości: 965
  • Miejsce pobytu:
    Lemmingrad
  • Zamulator
    • Games for ULA plus
Odp: Tryb gigascreen
« Odpowiedź #62 dnia: 2012.03.04, 01:33:03 »
Wreszcie działa, dałem HALT za wywołaniem obrazków oraz załadowanie odpowiednich wartości do zmiennej 23888, całość (bez LDIR obrazków) wygląda tak:
46629  EI
46630  LD A,024 ;drugi ekran
46632  LD BC,32765 ;port dla OUT
46635  LD DE,23388 ;adres zmiennej sys
46638  LD (DE),A ;załadowanie wartości do zmiennej
46639  OUT (C),A ;przełączenie obrazka
46641  HALT ;tutaj synchronizacja
46642  LD A,016 ; to samo dla ekranu 1
46644  LD (DE),A
46645  OUT (C),A
46647  HALT
46648  LD BC,63486 ;adres czytania klawiatury
46651  IN A,(C)
46653  BIT 0,A ;klawiszem 1 wychodzi się
46655  JR NZ,46630 ;jeśli nie wciśnięty to pętla
AY Music, ULA plus.

matofesi

  • *****
  • Wiadomości: 2048
  • Miejsce pobytu:
    Toruń/Poland
Odp: Tryb gigascreen
« Odpowiedź #63 dnia: 2012.03.04, 23:12:08 »
No to od razu ci mówię - overkill ;)

Ustawianie strony przy użyciu zmiennej systemowej jest całkowicie zbędne. W zupełności wystarczy (i żeby nie było - tym razem zadałem sobie trud sprawdzenia w praktyce ;)) sam OUT. Żeby twój kod działał wystarczy tyle:

       EI
46630  LD A,024 ;drugi ekran
       LD BC,32765 ;port dla OUT
;      LD DE,23388 ;adres zmiennej sys
;      LD (DE),A ;załadowanie wartości do zmiennej
       OUT (C),A ;przełączenie obrazka
       HALT ;tutaj synchronizacja
       LD A,016 ; to samo dla ekranu 1
;      LD (DE),A
       OUT (C),A
       HALT
       LD BC,63486 ;adres czytania klawiatury
       IN A,(C)
       BIT 0,A ;klawiszem 1 wychodzi się
       JR NZ,46630 ;jeśli nie wciśnięty to pętla

Wykomentowane (średnik na początku) linie są całkowicie zbędne, choć jak widać nie przeszkadzają ;)

Abrimaal

  • *****
  • Wiadomości: 965
  • Miejsce pobytu:
    Lemmingrad
  • Zamulator
    • Games for ULA plus
Odp: Tryb gigascreen
« Odpowiedź #64 dnia: 2012.03.04, 23:56:59 »
Tak się domyślałem, jednak czasem lepiej przesadzić, żeby 2 razy zrobił to samo, niż miałoby nie chodzić wcale.
Tymczasowo moja misja skończona (z tym jednym obrazkiem), który jest moim pierwszym interlace, więc nie śmiać się.
To ma być tylko dodatek do przerobionej gry. Na ZX 48 gigascreen nie jest wykonywany, wyświetla się jeden statyczny obraz.

Ciekawe, czy dałoby się w menu podczas przerzucania obrazków wpakować jakąś muzykę (na AY)
Zapraszam do joysticków.


« Ostatnia zmiana: 2012.03.05, 00:09:38 wysłana przez Abrimaal »
AY Music, ULA plus.

matofesi

  • *****
  • Wiadomości: 2048
  • Miejsce pobytu:
    Toruń/Poland
Odp: Tryb gigascreen
« Odpowiedź #65 dnia: 2012.03.05, 00:19:33 »
To co zrobiłeś i gigascreen w ogólności to nie jest interlace. Interlace to tryb graficzny w którym generator obrazu telewizyjnego (i tylko telewizyjnego ewentualnie na monitorze w trybie zgodnym z telewizorem - ma wyświetlać na przemian parzyste i nieparzyste linie ekranu w kolejnych półramkach) wyświetla najpierw parzyste linie obrazu a w kolejnej ramce/półramce nieparzyste linie. Wszystkie mrugające próby udawania interlace'u są dokłądnie tym - udawaniem. Interlace jest taką sobie koncepcją, ale poprawnie zrealizowany dawał całkiem przyzwoite efekty. Wyświetlanie na przemian dwóch obrazków w nadziei, że coś je po drodze przetworzy i zrobi z nich poprawny dobrze zsynchronizowany z rastrem interlace daje w efekcie dokładnie to, co może dawać - mrugający obraz z rozmytymi krawędziami, który przy dużej dozie samozaparcia można uznać za statyczny obraz z większą liczbą kolorów.

I, żeby nie było - przetestowałem takie zabawy na Samie - tam było dostępne sprzętowe przełączanie ekranół ale i tryb 512x192 i 16 kolorów. W żadnym wypadku to, co wychodziło przy użyciu mrugania ekranami nie było zbliżone do prawdziwego interlace'u. Ale oczywiście... 20 lat temu wmawialiśmy sobie, że jest ładnie, fajnie i tylko troszeczkę mruga ;)
« Ostatnia zmiana: 2012.03.05, 00:21:55 wysłana przez matofesi »

Abrimaal

  • *****
  • Wiadomości: 965
  • Miejsce pobytu:
    Lemmingrad
  • Zamulator
    • Games for ULA plus
Odp: Tryb gigascreen
« Odpowiedź #66 dnia: 2012.03.05, 00:34:23 »
O-mać-Qu! Racja, po tygodniu spędzonym na rozkładaniu i składaniu gry, mogło mi się pomylić.
Jeśli chodzi o interlace, to absolutnie nie mam pojęcia, jak to jest robione i nawet nie pytam.
AY Music, ULA plus.

YERZMYEY/HOOY-PROGRAM

  • *****
  • Wiadomości: 1187
  • Miejsce pobytu:
    Rubber Planet
  • AY RIDERS
    • ZX Spectrum demos/games
Odp: Tryb gigascreen
« Odpowiedź #67 dnia: 2012.03.05, 09:19:54 »
Ciekawe, czy dałoby się w menu podczas przerzucania obrazków wpakować jakąś muzykę (na AY)

Przy w miarę standardowym wyświetlaniu - tak. Przy tych, które napisał Zilog - ponoć już nie.

matofesi

  • *****
  • Wiadomości: 2048
  • Miejsce pobytu:
    Toruń/Poland
Odp: Tryb gigascreen
« Odpowiedź #68 dnia: 2012.03.05, 09:31:19 »
Jeśli "tryb graficzny" polega na zwykłym mruganiu ekranami - nie widzę problemu. Jeśli przełącza co linię - tak pod warunkiem, że player zmieści się na dolnym borderze.

andys

  • *
  • Wiadomości: 41
  • Miejsce pobytu:
    w domu
Odp: Tryb gigascreen
« Odpowiedź #69 dnia: 2012.03.10, 07:56:51 »
jedynym chyba komputerem 8-bitowym co robi sprzetowy interlace jest chyba jednak atari xl http://www.atari.org.pl/forum/viewtopic.php?id=6923 sprawa odkryta jednak dopiero niedawno przez rybgasa... nasz interlejs (po oucie czy recznie) co najwyzej zmienia kolor na telewizorze, na emulatorze wcale. gigascreen sumuje i miesza wartosci dwoch bankow pamieci koloru i na dobra sprawe nawet nie wiem jak sobie radzi z 4 bankami.
Mat co do playera to w sixth demo na borderze jest na granicy taktow bo w bodajze trzecim utworze zrywa ramke;p. no i mam pytanie bo w kod niepatrzylem i tak... scroll zrobiliscie na gornej ramce?

matofesi

  • *****
  • Wiadomości: 2048
  • Miejsce pobytu:
    Toruń/Poland
Odp: Tryb gigascreen
« Odpowiedź #70 dnia: 2012.03.10, 11:16:45 »
Sixth'a Kaz robił sam. Szczerze mówiąc nigdy mu przez ramię nie zaglądałem więc nie wiem jak dokładnie to zrobił. Pamiętam tylko, że logo po lewej zasłaniało fakt, że timing się tam zrywał. No i wydawało mi się, że było dokładnie liczone na48 i chodziło dobrze. Ale to bylo ponad 20 lat temu...

andys

  • *
  • Wiadomości: 41
  • Miejsce pobytu:
    w domu
Odp: Tryb gigascreen
« Odpowiedź #71 dnia: 2012.03.10, 15:59:54 »
wyszlo okey... cieszy fakt efectu sinclara lub kaza;p, na emualtorach czesto w pionie stoi nieprzeliczona kreska na wprost, ale to juz niedoskonalosc emulatorow......
co do sixth sprawa dotyczy tylko utworu bilinskiego...tam zrywalo ramke, ale doslownie z dwa razy na utwor;p
mat tak apropo przrzucales 2/3i ramk na 48 w lyrze 2 w swoim efekcie...daj troceh sourca.....

matofesi

  • *****
  • Wiadomości: 2048
  • Miejsce pobytu:
    Toruń/Poland
Odp: Tryb gigascreen
« Odpowiedź #72 dnia: 2012.03.10, 22:36:41 »
@andys Ze źródłami jesteś dokładnie tam gdzie ja... Nic mi się nie zachowało z tamtych czasów i jakbym potrzebował coś z tamtych dem wyciągnąć to musiałbym pruć kod i disassemblować.

Sądząc po tym, co wtedy potrafiłem zrobić nie spodziewam się cudów ponad serię LDI albo jakieś niezbyt skomplikowane zabawy ze stosem. Ale raczej to pierwsze i sprytnie tablicowane dane albo automatycznie generowany kod.

Po raz kolejny powtórzę to samo - to było ponad 20 lat temu... ja od tego czasu nie dotykałem Spectruma aż do teraz. A to, co popełniłem teraz ukaże się dopiero za parę dni ;)

andys

  • *
  • Wiadomości: 41
  • Miejsce pobytu:
    w domu
Odp: Tryb gigascreen
« Odpowiedź #73 dnia: 2012.03.11, 07:07:17 »
zreszta albo stos albo ldi jak piszesz (ze stosu zdaje sie jest i tak najszybciej)... na h... sie pytam;p cos malo robie aby wiedziec ile speccy robi na ramke..chyba bardziej mi chodzilo o to, ze wizualnie nie widac rysowania  i czy robiles jakies nopy aby nie widziec rysowania w danym momencie. kodowanie wtedy na spectrum to bylo wyzwaniem;p ciagle nagrywanie pracy, spojrzenie jak jest i ponownie co zmienic;p

....A to, co popełniłem teraz ukaże się dopiero za parę dni.......
forever?
« Ostatnia zmiana: 2012.03.11, 07:09:20 wysłana przez andys »

matofesi

  • *****
  • Wiadomości: 2048
  • Miejsce pobytu:
    Toruń/Poland
Odp: Tryb gigascreen
« Odpowiedź #74 dnia: 2012.03.11, 13:38:54 »
Tak na szybko zajrzałem w kod pierwszej części TL2 (bo jak rozumiem o to ci chodziło - w żadnej innej części nie przewalam pół ekranu w ramce)... Nie ma tam jakichś wielkich cudów. Przede wszystkim nie ma przewalania. To jest zasadniczo scroller tylko z dużym fontem i więcej niż jednym znakiem na raz. Tekst jest po prostu wrzucany na ekran bez przewijania czy kasowania. Nie przyglądałem się timingom, ale raczej nie bylo tam dodatkowych opóźnień tylko jak najszybsze generowanie obrazu (używając ciągów LDI - stos jest szybszy ale mniej wygodny). To, że się nie tnie na rastrze to zasadniczo odpowiednio dobrana kolejność i umiejscowienie grafiki.