atarionline.pl Assembler 6502 - odwapnianie mózgu :) - Forum Atarum

    Jeśli chcesz wziąć udział w dyskusjach na forum - zaloguj się. Jeżeli nie masz loginu - poproś o członkostwo.

    • :
    • :

    Vanilla 1.1.4 jest produktem Lussumo. Więcej informacji: Dokumentacja, Forum.

      • 1:
         
        CommentAuthorjhusak
      • CommentTime22 Mar 2012 16:03 zmieniony
       
      Przypuszczenie moje: Tak naprawdę to powiększ szerokość ekranu emulatora. Zobaczysz resztę literek.
      Inni mówią (zapewne mają rację): Antic obcina 3 bajty.
      Mnie się to za bardzo nie mieści w głowie, ale co tam. Sprawdzę na real atari i już (ale to kiedyś).
      ---edit---
      W dokumentacji Antica ekran szeroki to 44 bajty - 176 cykli kolorów...
      A emulator daje 168 cykli czyli 42 bajty wyświetlane...
      ---/edit---

      @0xF - nie pisz, że się praktycznie nie używa. Bo jak się używa to właśnie praktycznie :P. Poza tym ludzie Ci uwierzą i nie będą pisać gier w szerokim trybie. Chłopak chce poeksperymentować, a ty mu: nie eksperymentuj, bo się nie używa :)

      ---edit---
      napisałem:
      Ale do rzeczy. Ten tryb działa normalnie i wyświetla wszystkie 48 znaczków, o ile nie jest włączony hscroll.

      a jak widać z późniejszej dyskusji - nie jest to prawda
      ---/edit---

      W starych telewizorach/monitorach obraz wychodził poza kineskop, stąd obcięcie.
      ---edit---
      napisałem też:
      W emulatorze jest jakiś babol, który zostawia śmiecie na ekranie poza obszarem wyświetlania po prawej stronie. Wygląda na to, że to tryb traktowany po macoszemu przez atari800, zbyt mało testerów.

      wycofuję się z tego
      ---/edit---

      Ale zupełnie inaczej wygląda gra bez ramek z prawej i z lewej strony, no nie?

      Z tego co pamiętam kilka gierek używało tego trybu z powodzeniem - ale tytułów sobie nie przypomnę.

      @at0mic. Jesteś bardzo ciekawym obiektem do obserwacji :)
      Obserwacji, jak mocno człowiek po opanowaniu C64 jest zboczony na punkcie tzw. hacków.

      Naprawdę, na Atari wszystko działa tak, jak powinno, nawet nie potrafię znaleźć przykładów na jakąś niekonsekwencję.
      ---edit---
      Właśnie się o jednej dowiedziałem :)
      ---/edit---

      To co mnie denerwuje w Atari, ale jednocześnie jak to zrobić inaczej?

      - hardware registers w środku pamięci. Ale gdzie je umieścić?
      - DOS. Ale z DOSEM źle, a bez DOSA jeszcze gorzej - jak z kobietą :P
      - brak trybu atrybutowego. Ale jak to się ma zawrzeć w doskonałym skąd inąd i bardzo elastycznym modelu wyświetlania obrazu w Atari?
      - brak sprajtów hires. Ale tu znowu jest kicha, bo jeśli byłyby hires, musiały by być generowane przez ANTIC. a są przez GTIA (antic tylko podaje dane przez DMA) To, co jest jest proste, do objęcia przez przecięt(n)y umysł, jak mój. Takie sprajty, jak w C64 są super, ale hardware do tego jest porąbany. No cóż... coś za coś.
      - Pokey mi nie przeszkadza, nie mam kompleksów :P
      - podkradanie cykli procesora przez ANTIC, czasem baaardzo dużo. Ale jak to inaczej zrobić? W spectrum jest jakiś hardware babol, który pozwala wyświetlać śmieci na ekranie (jest podział na pamięć wolną i szybką jakoś tak, jak w amidze)
      - 128 znakowy generator znaków, lub 64 w tych trybach z dwoma bitami koloru znaku

      To, co mnie mile zaskoczyło z czasem 100 razy bardziej, niż powyższe zmartwiło:
      - rewelacyjny scroll w każdą stronę
      - przemyślany system przerwań DLI (w trybach tekstowych jest zgłaszane w OSTATNIEJ linii znakowej :) przez co scroll pionowy powoduje, że przerwanie jest PRZYKLEJONE do granic linii.
      - eksperymenty emkaya z dźwiękiem - wypas.
      - tryby niskorozdzielcze (tryb konopa i derywaty) - bardzo mało zużycia procka przez ANTIC.
      - tryby do generowania gier 3D (a la wolfenstein) w 256 kolorach na raz (za to co drugą linię)
      - tryby interlace: bug GTIA (przesunięcie o pół piksla trybu GTIA szarości/koloru i indeksowanego)
      - dość stare odkrycie, że sample mogą ładnie grać przy włączonym ekranie, a na dodatek podczas gry,
      - prędkośc wystarczająca do obsługi SoftSynth oraz różnych mod-playerów
      - UWAGA. Użycie platformy ATARI jako emulującej:
      --- ZX Spectrum
      --- Apple
      --- Chip8
      --- SID

      Brakuje jeszcze:
      --- C64
      --- A2600

      To wszystko nie byłoby możliwe, gdyby nie elastyczność hardware Atari.
      Naprawdę, zajebisty komputer.

      Czy ja napisałem zajebisty?
      Tak, wygląda na to że tak, napisałem zajebisty.

      Zajebiście wszystkich przepraszam, za to, że użyłem przydawki "zajebisty" w tym kontekście.

      Ale czuję się w pełni usprawiedliwiony.
      • 2: CommentAuthor0xF
      • CommentTime22 Mar 2012 16:03
       
      @jhusak - a Ty znowu wprowadzasz w błąd ;)

      Po pierwsze ANTIC z lewej strony generuje ramkę i tak jak napisałem w trybie szerokim widać jeden znak więcej, a nie cztery.

      Po drugie prawdziwe Atari i nowa Altirra z prawej strony wyświetlają śmieci (to co robi procek na szynie danych, a nie ANTIC pobiera pamięci obrazu).

      Po trzecie jądro emulacji Atari800 generuje obraz szerokości 336 pikseli i widoczne śmieci poza tym obszarem to wina autora portu (podejrzewam, że w Twoim przypadku Mac OS X), który nie powinien tego wyświetlać.

      Po czwarte - ok, niech używa, tylko dobrze, aby znał ograniczenia.
      • 3: CommentAuthorEagle
      • CommentTime22 Mar 2012 17:03
       
      @atomic:
      Zależy co chcesz osiągnąć i czemu Ci to przeszkadza.
      Jeśli to ma być jedna linijka to możesz ją "doadjustować" HScrollem.

      dodanie hscrl (+$10)
      dta b($c2+$10),a(obraz)


      i w kodzie dodać na przykład przed never
      lda #$0c    ;przesunięcie o 3 znaki w prawo
      sta $d404 ; rejestr HScrol
      ...................
      never jmp never


      Wtedy już nie powinno burzyć Ci myślenia. :)
      • 4: CommentAuthor0xF
      • CommentTime22 Mar 2012 17:03
       
      Niezły pomysł - można w ten sposób przesunąć wszystkie linijki. W dodatku jeśli dobrze pamiętam, zaoszczędzisz w ten sposób cykle DMA.
      • 5:
         
        CommentAuthorjhusak
      • CommentTime22 Mar 2012 18:03
       
      Czyli można założyć, że wide playfield nie mając załączonego scrolla zachowuje się jakby miał :) A włączenie hscrolla nic nie zmienia oprócz tego oczywiście, że jest możliwość scrollowania (w trybach węższych zmienia się szerokość DMA ekranu)
      • 6: CommentAuthormono
      • CommentTime22 Mar 2012 20:03 zmieniony
       
      @jhusak: Skoro Antic mógłby generować sprajty w hiresie to czemu hscroll jest co cykl koloru, czyli 2 piksele hires?
      Jak lubisz niekonsekwencje, to włącz obydwa scrolle w linii trybu tekstowego hires i na dodatek przerwanie. Zobaczysz co się będzie działo ze znaczkami z lewej strony ekranu :)

      Edit: Oczywiście na szerokim ekranie i z lmsem.
      • 7:
         
        CommentAuthorjhusak
      • CommentTime22 Mar 2012 21:03 zmieniony
       
      @mono,
      nie wiem - nie pisałem, że antic mógłby, ale pisałem, że tego mi brakuje w Atari.
      To co mnie denerwuje w Atari, ale jednocześnie jak to zrobić inaczej?
      (...)
      - brak sprajtów hires. Ale tu znowu jest kicha, bo jeśli byłyby hires, musiały by być generowane przez ANTIC. a są przez GTIA (antic tylko podaje dane przez DMA)


      Czyli rozwijając myśl: gtia przepuszcza ANTICA w hires only (dlatego jest jeden kolor i dwa odcienie, bo nie ma interpretacji koloru). W nie hires dodaje kolory paczkom bitów. ANTIC instruuje GTIA o bicie aktualnie wyświetlanym (gtia sobie to a rejestr przesuwny pakuje?) oraz o trybie graficznym, a gtia do tego dokłada kolory. Nie jestem pewien, jak ANTIC przekazuje GTIA info o obrazie - czy jednym bitem, czy też bajtem? Nie, bajt odpada, bo hscroll by nie działał.

      Czyli z tego wniosek, że sprajt hires musiałby być generowany przez ANTIC, a ten nie ma takiej funkcjonalności, bo i gdzie to zmieścić i jak to dodać, no nie da się (czysto).

      Jedyne co mogło by być, to nowy układ pomiędzy ANTIC i GTIA podkładający świnie, tfu sprajty, w locie :) Ale byłyby one takiej rozdzielczości, i w tych samych kolorach, co pole gry.

      Poza tym ja lubię konsekwencje.
      • 8: CommentAuthor0xF
      • CommentTime22 Mar 2012 21:03
       
      To się nazywa VBXE. :)
      • 9:
         
        CommentAuthorjhusak
      • CommentTime22 Mar 2012 21:03
       
      I właśnie tak działa?
      • 10: CommentAuthormono
      • CommentTime22 Mar 2012 21:03 zmieniony
       
      @jhusak: Przecież DMA ma Antic, więc to on bierze dane dla sprajtów, to dlaczego nie wystawia ich kształtów dla GTIA tak, jak dla pola gry?
      Skrol to samo - sam wciąga dane obrazu a potem nie potrafi ich przesunąć o piksel w hiresie, ale o 2 to jak najbardziej :/. Nawet gdyby psuł kolory w multicolorze to by mi to nie przeszkadzało (tak, jak to robi dla trybów GTIA). Kolorki zostawmy jak są.
      Mapa, cóż - fajna jest, no ale powiedzmy że konstrukcyjnie tu nie pasuje (aczkolwiek patrząc na tryby wybierające kolor znaku bitami 6 i 7 oraz kolor pary %11 bitem 7 to można by się zastanawiać).
      Słabo jak dla mnie z tą konsekwencją.

      Edit: Nawet inverse w hiresie jest właśnie namiastką mapy kolorów.
      • 11: CommentAuthorepi
      • CommentTime22 Mar 2012 22:03
       
      mono: W przypadku sprajtów ANTIC wystawia adres i R/W, ale dane odczytuje GTIA.

      jhusak: ANTIC przekazuje dane obrazu do GTIA 3-ma liniami (AN0-AN2). W dokumentacji GTIA z lat dawnych można przeczytać, co oznaczają różne kombinacje bitów.

      Założenie przyjęte w GTIA jest takie, że faza chromy może się zmieniać co 1 jej okres, co nazywamy cyklem koloru. Piksel w hiresie trwa pół okresu chromy, stąd piksel parzysty i kolejny mają tę samą fazę, czyli ten sam kolor. Nie wiem, czy są jakieś komputery, które umożliwiają zmianę fazy chromy częściej. Nie wiem też, jak telewizory/monitory/karty tv reagują na takie zmiany. (Ale chętnie się dowiem :))

      Luma jest generowana niezależnie i nie jest modulowana, więc można w niej mnożyć rozdzielczość na tyle na ile pasmo przenoszenia w torze od GTIA do luminoforu pozwoli. :)

      IMO nie ma przeszkód, żeby GTIA generował sprajty w hiresie. Podejrzewam, że brak takiej featury to wyłącznie kwestia kosztów i czasu - wymagałoby to "paru" dodatkowych tranzystorów.
      • 12:
         
        CommentAuthorjhusak
      • CommentTime22 Mar 2012 23:03
       

      mono:

      Przecież DMA ma Antic, więc to on bierze dane dla sprajtów, to dlaczego nie wystawia ich kształtów dla GTIA tak, jak dla pola gry?

      No nie, no wystawia i wklepuje w GRAFP/M, czyż nie? Tylko jak to robi.
      No kurka, nie znam się.

      Czy tak po prostu przepisuje? Skąd bierze adres docelowy? A może można go zmienić?
      No późno jest.
      • 13: CommentAuthorxxl
      • CommentTime22 Mar 2012 23:03
       
      juz w 1977 atari dysponowalo ukladem generujacym sprity hires o rozdzialce poziomej 16 px w ilosci chyba 8 sztuk (jak trzeba bedzie to sprawdze:p) mogly poruszac sie o 1 pixel hires i mialy kolory. przykladem jest gra sprint4 z automatow.
      • 14: CommentAuthorepi
      • CommentTime23 Mar 2012 00:03
       
      jhusak: No przecież napisałem, jak to robi.
      Dla pola gry i synchronizacji ANTIC wystawia AN0-AN2.
      Dla P/MG ANTIC wystawia adres na szynie adresowej a GTIA bierze dane z szyny danych.
      Proste? Proste.
      • 15:
         
        CommentAuthorjhusak
      • CommentTime23 Mar 2012 00:03
       
      No właśnie, ale antic musi mieć zaszyty adres (adresy) jaki ma wystawić dla gtia. W związku z tym antic i gtia są bardziej zależne, niż mogły by być.
      A można by jeszcze dać anticowi rejest "gtiabase", i mielibyśmy dma jak ta lala!

      Można by sample na dma grać! Spieprzyli chłopcy sprawę.
      • 16:
         
        CommentAuthorjhusak
      • CommentTime23 Mar 2012 00:03 zmieniony
       
      Kurczę. jest jeszcze sprawa taka. Piszą ( ->link<- )
      że w A5200 jest TEN SAM ANTIC, co w A400/800. A GTIA w tym komputerku jest pod C000.

      Czyli co, adresy GRAFP są generowane przez coś innego, nie ANTIC?
      • 17: CommentAuthorBrix
      • CommentTime23 Mar 2012 00:03
       
      No ludzie kochani, Atari XL/XE po prostu jest takie jakie jest. Wszelkie dyskusje są spóźnione o niemal 30 lat :)
      • 18:
         
        CommentAuthorjhusak
      • CommentTime23 Mar 2012 00:03
       
      Koń tez jaki jest każdy widzi. A dyskutują, krzyżują, gapią sie na nie, zachwycają harmonią, czyszczą, dbają chuchają...

      Zupełnie jak my ze swoimi pupilami:P
      • 19: CommentAuthorepi
      • CommentTime23 Mar 2012 00:03 zmieniony
       
      jhusak: Nie rozumiem Twoich rozterek, chyba zgubiłeś kursy dla początkujących. ;)
      ANTICowi ustawiasz PMBASE ($D407), a on sobie składa adres danych, które ma wyświetlić GTIA, z najstarszych bitów PMBASE, numeru gracza i numeru linii. W odpowiedniej chwili (blisko początku linii) wystawia go na szynę adresową, a GTIA podgląda szynę danych (na której powinny się teraz pojawić dane z pamięci).

      Granie sampli na DMA graczy/pocisków wymyśliłem już parę lat temu. Trzeba dodać trochę prostej elektroniki, żeby w cyklach DMA P/MG wygenerować WR dla np. Covoxa. Trzeba też załatwić linie poza ekranem, w których dane P/MG nie są czytane, programowo.
      • 20:
         
        CommentAuthorjhusak
      • CommentTime23 Mar 2012 00:03 zmieniony
       
      @epi, to skąd czyta, jest oczywiste. Nie jest oczywiste, skąd wie, gdzie zapisać.
      A, chyba kumam. Gtia ma 5 bitów adresowych, to z nich sobie czyta i nieważne co jest powyżej 5 bitów.
      a Antic pewnie wystawia adres 11 10 f e d na najmłodszych bitach w jakiejś tam kolejności i daną odczytaną z pamięci...

      Nie jest to proste, bo trzeba odczytać spod innego adresu i zapisać pod innym adresem. Proste byłoby, gdyby to był ten sam adres (tylko użyte inne bity)

      np.

      PMBASE = 8000
      MISSILE = 8300
      PLAYER0 = 8400
      ...
      PLAYER3=8700

      i teraz numerki rejestrów graf brane są z 8,9 i 10 bitu.

      A rozterki stąd, że gdy czegoś nie rozumiem to:
      - śmieję się
      - robię mądrą minę
      - ignoruję
      - blefuję (no nie nie, no tak tak!)
      Dotąd nie różnię się od przeciętnego zjadacza chleba :D
      - nie daje mi to spać, aż zrozumiem i poznam
      I tu się patrzą dziwnie, bo zadaję dziwne pytania, które mają mnie zbliżyć do Rozumienia lub Poznania (w sensie poznawczym ofkors), a dla innych odpowiedzi na te pytania są oczywiste, lub przynajmniej takie się wydają :P
      • 21:
         
        CommentAuthorjhusak
      • CommentTime23 Mar 2012 01:03 zmieniony
       
      Jeszcze tak powiem. W czasach, kiedy to wszystko poznawałem, nie było żródeł wiedzy. Bywały kserowane perełki wiedzy tajemnej w cenie stacji dysków, ale literatury oficjalnej niet.

      Potem nadszedł Zientara i Ruszczyc.
      Soeto było na Hożej, mój ojciec tam niedaleko pracował, to raz na tydzień wpadałem do nich zapytać co tam mają. Dobrze, że wystawkę mieli, to z wystawki chyba rozpoznałem "Wojciech Zientara - procedury systemu operacyjnego" czy może Ruszczyc był pierwszy... nie wiem

      Taką wiedzę mam, bardziej od strony programowej. Od strony HW się uczę, chociaż może dla wielu to dziwne jest... Ale człek się uczy przez całe życie, o ile ma na to ochotę.
      • 22: CommentAuthorepi
      • CommentTime23 Mar 2012 02:03 zmieniony
       
      ANTIC nie wie gdzie zapisać. Nie potrzebuje.
      ANTIC nic nigdzie nie zapisuje. Nigdy.

      Po raz trzeci, ciąg przyczynowo-skutkowy:
      - ANTIC wystawia adres na szynie adresowej. R/W jest w stanie wysokim, czyli będzie read.
      - Pamięć reaguje na nowy adres i polecenie odczytu wystawieniem danej spod tego adresu na szynę danych.
      - GTIA zatrzaskuje to, co widzi na szynie danych, w GRAFPx (GRAFM) i niebawem (z opóźnieniem zależnym od HPOSxx) wypluje to na wyjścia lumy i chromy.

      Prześpij się z tym. :)
      • 23:
         
        CommentAuthorjhusak
      • CommentTime23 Mar 2012 02:03 zmieniony
       
      Tak właśnie myślałem, że tak by było najprościej, ale nie bardzo rozumiejąc szczegóły zarzuciłem tę myśl.

      Czy GTIA ma jakiś licznik wewnętrzny?
      Rozumiem, że jest jakiś sygnał, który mówi gtia "Teraz będzie pierwszy bajt dma w tej linii" i gtia zatrzaskuje go sobie pod grafp0. a potem po kolei jeszcze 4 razy. Tak?

      I nie wyliczaj mi epi ile razy już powtórzyłeś :))))))))))))) Jeśli jeszcze nie masz dosyć to:
      punkt pierwszy i drugi jest oczywisty, tak działa antic - wystawia adres i na szynie danych pojawia się dana, którą antic może odczytać lub zignorować. Problem zały czas mam w tym, JAK ta dana jest zatrzaskiwana w ODPOWIEDNIM GRAFPx czy GRAFM. Podejrzewam (jw) że jest to wewnętrzny licznik GTIA.

      Teraz odpowiedz mi na pytanie:
      - czy rzeczywiście jest licznik wewnętrzny w GTIA?
      - jeśli tak, to jak jest inicjalizowany
      - jeśli nie, to jak jest.

      Początek linii to cykl DMA PMG, cykl DL, 4cykle DMA PMG, 2 cykle DL
      jak te cykle PMG przyporządkowane są do GRAFPx i GRAFM? Czy jak leci?

      Ja wiem, że Wy hardwareowcy doszliście do tego przy pomocy oscyloskopów i sond, no i oczywiście literatury. A ja z tego wszystkiego mam tylko literaturę i waszą chęć przekazywania wiedzy :)
      • 24: CommentAuthorepi
      • CommentTime23 Mar 2012 02:03
       
      Skąd GTIA wie, kiedy zerknąć na dane? Robi to w cyklach następujących po wykryciu opadającego zbocza /HALT w czasie wygaszania poziomego. O wygaszaniu poziomym informują stany 010 i 011 na AN2-AN0 od ANTICa. Szczegóły na stronach 11-12 Datasheetu GTIA.
      • 25:
         
        CommentAuthorjhusak
      • CommentTime23 Mar 2012 02:03
       
      No i się rozjaśnia. Zerknąłem na datasheet Antica, na gtia nie starczyło pomysłu, żeby zajrzeć. Dzięki za konkret. To mi wszystko wyjaśnia, nie mam więcej pytań w tej kwestii (odpowiedź na kolejność pewnie też w datasheecie znajdę).

      DOBRANOC.
      • 26:
         
        CommentAuthorKrótki
      • CommentTime23 Mar 2012 09:03 zmieniony
       

      xxl:

      juz w 1977 atari dysponowalo ukladem generujacym sprity hires o rozdzialce poziomej 16 px w ilosci chyba 8 sztuk (jak trzeba bedzie to sprawdze:p) mogly poruszac sie o 1 pixel hires i mialy kolory. przykladem jest gra sprint4 z automatow.

      Ale ten układ nie generował sygnału composite video, tylko RGB. W RGB w ogóle można sobie na więcej pozwolić.

      epi:

      Nie wiem, czy są jakieś komputery, które umożliwiają zmianę fazy chromy częściej. Nie wiem też, jak telewizory/monitory/karty tv reagują na takie zmiany. (Ale chętnie się dowiem :))

      Amiga? ST? Każda konsola po 1990?
      • 27: CommentAuthorat0mic
      • CommentTime23 Mar 2012 09:03 zmieniony
       

      mono:

      Jak lubisz niekonsekwencje, to włącz obydwa scrolle w linii trybu tekstowego hires i na dodatek przerwanie. Zobaczysz co się będzie działo ze znaczkami z lewej strony ekranu :)


      i co takiego będzie się działo ?
      obraz equ $6000

      opt h+
      org $5000
      lda#$23
      sta 559
      lda <ant ;adres programu ANTICA
      sta 560
      lda >ant
      sta 561

      lda 20 ;czekamy na synchro :)
      cmp 20
      beq *-2

      lda <dli ;mlodszy bajt naszego nowego DLI
      sta $200
      lda >dli ;starszy bajt naszego nowego DLI
      sta $201
      lda #$c0 ;pozwalamy na przerwania DLI
      sta $d40e
      lda #$0c
      sta $ff
      skok jmp skok

      dli pha ;A (akumulator) na stos
      tya ;rej.Y do A
      pha ;A na stos
      lda 15
      sta $d017
      ldy #100
      l0 tya
      sta $d40a
      sta $d018
      sta$d01a

      dey
      bne l0
      dec $ff
      lda $ff
      cmp #$00
      bne dalej
      lda#$0c
      sta $ff
      dalej
      sta $d404
      pla ;zdejmij ze stosu do A
      tay ;z A do Y
      pla ;zdejmij ze stosu do A
      rti ;wyjście

      ant dta b($70,$70+$80) ;2 x 8 pustych linii
      dta b($70) ;8 pustych linii z przerwaniem DLI, bo `+$80`
      dta b($72),a(obraz) ;tutaj już wszyscy wiedzą co i jak itd
      dta b(5,5,5,5,5)
      dta b($41),a(ant)


      org (obraz)
      dta d'abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc'
      • 28:
         
        CommentAuthorjhusak
      • CommentTime23 Mar 2012 10:03 zmieniony
       
      DZIEŃDOBRY

      epi:
      Nie wiem, czy są jakieś komputery, które umożliwiają zmianę fazy chromy częściej. Nie wiem też, jak telewizory/monitory/karty tv reagują na takie zmiany. (Ale chętnie się dowiem :))


      A ja widziałem demko/intro na C64, które pokazywało słynnego złotego faraona (złoty na atari, na c64 jest brązowawo-żólty) z poziomym sinus-scrollem i głowę dam, że tam jest właśnie przesuwanie co pixel w hires, chociaż grafika jest na 160 punktów szerokości.
      Jeszcze sprawdzę i link zamieszczę, jak znajdę.

      O tutaj:

      • 29: CommentAuthorat0mic
      • CommentTime23 Mar 2012 10:03 zmieniony
       
      @ -1 tak scroll w c64 jest co punkt hires na rejestrze $d016 (3 najmłodsze bity odpowiadają za wysunięcie o 7ptk hires)

      $D016 - 53270:

      Screen control register #2. Bits:

      Bits #0-#2: Horizontal raster scroll.

      Bit #3: Screen width; 0 = 38 columns; 1 = 40 columns.

      Bit #4: 1 = Multicolor mode on.

      Default: $C8, %11001000.

      dodatkowy bajerem jest to że tekst w c64 można przesuwać w zakresie 0-7 ten sam znak czyli górna część znaku i dolna mogą być inaczej wysunięte a w a8 trzeba już robić to w trybie graficznym bo wcięcie D404 dotyczy całej linii z DLI. Dlatego faraon na Atari jest w trybie graficznym a w C64 został zrobiony w trybie tekstowym. Na C64 zrobienie tego w trybie graficznym niestety wymagałoby przynajmniej 32+4+1+code KB pamięci ponieważ nie ma scrollingu o 4 znaki (4*8-2 =30pkt)jak w a8 tylko o 7 punktów a potem trzeba przewalać pamięć na co w trybie graficznym nie wystarczyłoby czasu w ramce i w alternatywnych ekranach graficznych już by grafika była z koniecznym przesunięciem.

      Wszystko ładnie pięknie
      przy czym ani w emulatorze C64 ani Atari konwertując 50 ramek na sekundę na 60 ramek(VGA) nie uzyska się wrażenia pełnej płynności - i to mnie wkurzać zaczyna...

      za to pełny obraz na A8 bez ramek to jest czad ! :D
      • 30: CommentAuthor0xF
      • CommentTime23 Mar 2012 10:03
       

      jhusak:

      Jedyne co mogło by być, to nowy układ pomiędzy ANTIC i GTIA podkładający świnie, tfu sprajty, w locie :) Ale byłyby one takiej rozdzielczości, i w tych samych kolorach, co pole gry.

      0xF:

      To się nazywa VBXE. :)

      jhusak:

      I właśnie tak działa?

      Trochę inaczej - jest to zamiennik GTIA wzbogacony o własną pamięć, atrybuty, dodatkowe sprite-y.

      epi:

      Robi to w cyklach następujących po wykryciu opadającego zbocza /HALT w czasie wygaszania poziomego. O wygaszaniu poziomym informują stany 010 i 011 na AN2-AN0 od ANTICa.

      Od razu widziałem, że tego wyjaśnienia brakowało Kubie.

      Uzupełniając: oznacza to, że GTIA łapie pierwszy DMA w trakcie wygaszenia poziomego, zakładając że są to pociski. To tłumaczy, dlaczego w ANTICu nie można włączyć DMA dla samych graczy.

      Natomiast jeśli wyłączymy DMA dla PMG w ANTICu, a zostawimy w GTIA, to do kształtu pocisków trafi rozkaz display listy (!), a do graczy to, co 6502 robi na szynie. Stąd słynne migoczące PMG.

      W zeszłym roku Phaeron od Altirry poszedł dalej i dzięki precyzyjnym trickom z HSCROLem rozszerzył DMA obrazu na wygaszenie poziome - dzięki temu PMG jest pobierane wg licznika pamięci obrazu. Ale to już temat dla największych guru, a nie początkujących. ;)

      epi:

      Granie sampli na DMA graczy/pocisków wymyśliłem już parę lat temu. Trzeba dodać trochę prostej elektroniki, żeby w cyklach DMA P/MG wygenerować WR dla np. Covoxa. Trzeba też załatwić linie poza ekranem, w których dane P/MG nie są czytane, programowo.

      Pozostałe pomysły:
      - zmiana trybów GTIA przy pomocy DMA - mielibyśmy HIP i TIP bez obciążania procka
      - zmiana kolorów bez obciążania procka
      - sample na POKEYu - Epi twierdzi, że na Covoxie łatwiej
      • 31: CommentAuthorxxl
      • CommentTime23 Mar 2012 11:03
       
      > dodatkowy bajerem jest to że tekst w c64 można przesuwać w zakresie 0-7 ten sam znak czyli górna część znaku i dolna mogą być inaczej wysunięte a w a8 trzeba już robić to w trybie graficznym bo wcięcie D404 dotyczy całej linii z DLI.

      rozkaz z HSC dotyczy calej linii trybu czyli np. 8 linii skaningowych ale w kazdej z tych linii HSCORL moze miec inna wartosc w zakresie 16 cykli koloru ... czyli... ten bajer na atari tez dziala?
      • 32: CommentAuthorat0mic
      • CommentTime23 Mar 2012 11:03 zmieniony
       
      @xxl

      tak sprawdziłem i faktycznie działa co dwa punkty hires ale za to o 30 pkt, tylko czemu dajesz znak zapytania na końcu zdania twierdzącego ?
      to trochę wprowadza w błąd.
      • 33: CommentAuthorxxl
      • CommentTime23 Mar 2012 11:03
       
      w tej syt. lepiej uzywac "cykl koloru" niz punkt poniewaz tryby tekstowe moga miec punkt wielkosci polowy,jednego lub dwoch cykli koloru i w pewnym momencie mozesz napisac, ze w trybie tekstowym atari moze przesuwac o pol punktu :/
      • 34: CommentAuthorat0mic
      • CommentTime23 Mar 2012 11:03 zmieniony
       
      dla mnie cykl koloru znaczy co innego w A8 (odnosi sie do dwóch punktów hires) i C64 (odnosi się do jednego punktu hires) a punkt hires znaczy to samo w obydwu ale będę się na forum już posługiwał cyklem koloru skoro to jest koszerne a tamto kwaśne...

      BTW jak posłuchać sobie SlightSIDPlayer.atr
      na emulatorni ? czy to jest możliwe czy tylko przez covox na prawdziwym Atari ?
      • 35:
         
        CommentAuthorjhusak
      • CommentTime23 Mar 2012 12:03 zmieniony
       
      @0xF, dzięki - twoje konkrety wiele wyjaśniają.

      at0mic:

      dodatkowy bajerem jest to że tekst w c64 można przesuwać w zakresie 0-7 ten sam znak czyli górna część znaku i dolna mogą być inaczej wysunięte a w a8 trzeba już robić to w trybie graficznym bo wcięcie D404 dotyczy całej linii z DLI. Dlatego faraon na Atari jest w trybie graficznym a w C64 został zrobiony w trybie tekstowym.


      Ejno, na atari też przecież, nie? (bez basica uruchamiać)

      HSCROLL =$D404
      VCOUNT =$D40B
      RANDOM =$D20A
      WSYNC =$D40A
      org $600
      loop:
      lda #$12
      ldx #16
      lp4:
      sta $BC28,x ;podmiana linii display list - ustawienie hscroll
      dex
      bne lp4
      lp2:
      lda RANDOM ; zapełnianie ekranu śmieciami
      sta $BC40,x
      sta $BD40,x
      sta $BE40,x
      sta $BF40,x
      dex
      bne lp2

      lp3:
      lda VCOUNT
      sta WSYNC
      sta HSCROLL ; kopiowanie vcount do HSCROLL w pętelce :)
      jmp lp3


      run loop



      Wszystko ładnie pięknie
      przy czym ani w emulatorze C64 ani Atari konwertując 50 ramek na sekundę na 60 ramek(VGA) nie uzyska się wrażenia pełnej płynności - i to mnie wkurzać zaczyna...


      Tego nie rozumiem, co to za rodzaj konwersji? czy po prostu zmiana paltontsc (czyli 50 na 60 hz?)

      jeśli tak, to zmień taktowanie monitora odpowiedio na wielokrotność 50 i 60 hz. Będziesz miał płynnie ze sporadycznymi przeskokami.
      • 36:
         
        CommentAuthorjhusak
      • CommentTime23 Mar 2012 12:03 zmieniony
       

      0xF:

      W zeszłym roku Phaeron od Altirry poszedł dalej i dzięki precyzyjnym trickom z HSCROLem rozszerzył DMA obrazu na wygaszenie poziome - dzięki temu PMG jest pobierane wg licznika pamięci obrazu. Ale to już temat dla największych guru, a nie początkujących. ;)


      Ty no ale robisz smaka i zabierasz lizaka! Tak się nie robi!
      Jakiś link zapodaj!
      • 37: CommentAuthorxxl
      • CommentTime23 Mar 2012 12:03 zmieniony
       
      > BTW jak posłuchać sobie SlightSIDPlayer.atr
      na emulatorni ? czy to jest możliwe czy tylko przez covox na prawdziwym Atari ?

      na emulatorze Altirra (wlaczyc SIDa) a na zywym atari musisz miec kardridge SlightSID.

      > dla mnie cykl koloru znaczy co innego w A8 (odnosi sie do dwóch punktów hires) i C64 (odnosi się do jednego punktu hires) a punkt hires znaczy to samo w obydwu

      sluszny pixel musi miec co najmniej wielkosc tego z gr.7 basica a na c64 w hires pixele sa mniejsze od tych atarowskich hires
      • 38: CommentAuthor0xF
      • CommentTime23 Mar 2012 13:03
       

      jhusak:

      Jakiś link zapodaj!

      ->link<-
      • 39:
         
        CommentAuthorKaz
      • CommentTime23 Mar 2012 14:03
       
      Ja w sprawie zadawania pytan na forum:

      Kuba:

      Dotąd nie różnię się od przeciętnego zjadacza chleba :D
      - nie daje mi to spać, aż zrozumiem i poznam
      I tu się patrzą dziwnie, bo zadaję dziwne pytania, które mają mnie zbliżyć do Rozumienia lub Poznania (w sensie poznawczym ofkors), a dla innych odpowiedzi na te pytania są oczywiste, lub przynajmniej takie się wydają :P


      Masz zadatki na laureata nagrody Nobla :) Wybitny fizyk Feynman, laureat tej nagrody, tak pisal, gdy proszono go a analize jakiegos skomplikowanego problemu:

      - Dobrze. To proszę mi podać jakiś przykład. - Chciałem sobie ułatwić: nie potrafię zrozumieć nic ogólnego, jeżeli nie mam w głowie konkretnego przykładu, do którego stale się odnoszę. Niektórzy ludzie myślą z początku, że jestem niezbyt rozgarnięty i nie rozumiem problemu, bo zadaję te wszystkie „durne” pytania: „Chodzi o katodę dodatnią czy ujemną? Czy anion jest w tę stronę, czy w drugą?”.

      Ale później, kiedy facet sypie równaniami, ja mu nagle przerywam i mówię: „Chwileczkę! Tu jest jakiś błąd! To nie może być tak!”. Facet patrzy na swoje równania, po chwili znajduje błąd i myśli sobie: „Jak to możliwe, że człowiek, który z początku ledwo nadążał za tym, co mówię, teraz znalazł błąd w gąszczu tych wszystkich równań?”.

      Sądzi, że śledzę kolejne kroki matematyczne, ale ja robię, co innego. Mam w głowie konkretny, fizyczny przykład tego, co on próbuje zanalizować, i znam własności tego przedmiotu dzięki wyczuciu i doświadczeniu. Kiedy więc równanie mówi, że przedmiot powinien się zachowywać tak-a-tak, a ja wiem, że powinno być inaczej, podrywam się i mówię: „Zaraz! Tu jest błąd!”.

      Nie potrafię, więc zrozumieć ani dyskutować o czyjejś pracy, jeżeli nie dostanę fizycznego
      przykładu,


      I jeszcze to, w sprawie zadawania pytan przez studentow w Brazylii (bardzo podobne podejscie jest w Polsce):

      Kolejna rzecz, do której nie byłem ich w stanie zmusić, to zadawanie pytań. Wreszcie jakiś student wyjaśnił mi: „Jeśli zadam pytanie podczas zajęć, wszyscy na mnie potem naskoczą, że marnuję ich czas, bo oni chcą się czegoś nauczyć, a ja panu przerywam pytaniami”.

      Wzajemnie się licytowali, jacy są mądrzy, udawali, że wszystko rozumieją, a jeśli ktoś, zadając pytanie, przyznał, że coś jest dla niego niejasne, obruszali się, stroili miny, że niby wszystko jest tak oczywiste, a facet tylko marnuje ich czas.

      Wyjaśniłem im, jak pożyteczna jest wspólna praca, wspólne omawianie problemów, ale na to też nie chcieli się zgodzić, bo zapytanie o coś kolegi oznaczałoby dla nich kompromitację. Żal mi ich było. Inteligentni ludzie, chętni do nauki, ale wpadli w tę dziwną koleinę bezproduktywnego gromadzenia wiedzy.

      Na koniec powiedziałem, że nie widzę sposobu, by ktoś miał się czegokolwiek nauczyć w tym samonapędzającym systemie, w którym ludzie zdają egzaminy i uczą innych zdawać egzaminy, ale nikt nic nie wie.
    1.  
      @Kaz
      Feynman widać znał się na rzeczy :) Jak ja komuś coś tłumaczę, też szukam zawsze analogii i przykładów w życiu codziennym. Sam też lubię się w ten sposób uczyć - szkoda, że Ruszczyc za bardzo tego nie stosował :)


      Po tym wszystkim co tutaj czytam trochę mi głupio wyskakiwać z moim następnym pytaniem, ale co tam :) One kozie death :)

      Chciałbym zapytać jakich lokalizacji w praktyce używacie na pamięć ekranu i program. Ja ustawiłem org=$8000 i screen=$2000, ale miałem pewne problemy w pewnych okolicznościach :) Nie chcę ich opisywać, ale kosztowały mnie trochę piwa i siwych włosów (ujawnił mi się taki Heisenbug... jak ja go debuguje, to wszystko zaczyna działać).

      Zatem, jakie lokalizacje polecacie i czy trzeba je na początek czyścić/zerować? Wiem, jest mapa pamięci, ale wolę zapytać praktyków.

      W tutorialach w necie org i screen są ustawiane na najprzeróżniejsze miejsca.

      I pytanie 2: W BASIC raz po raz stukałem FRE(0) i sprawdzałem ile jeszcze mogę dopisać. Jak do problemu braku pamięci podejść w ASM? Czy jeśli proga mam pod $2000, to mogę spokojnie zrobić xexa o rozmiarze 24575b, bo miejsca mam aż do 7FFF?
      • 41: CommentAuthorEagle
      • CommentTime23 Mar 2012 16:03
       
      Ekrany, sprajty, bufory staram się dawać pod rom - trzeba czyścić wcześniej.
      A program jak najniżej na złość SDX'owcom :]
      • 42:
         
        CommentAuthorjhusak
      • CommentTime23 Mar 2012 16:03 zmieniony
       
      @Eagle, zmienisz zdanie, jak sam się staniesz SDXowcem :)

      Ja nie jestem jakby co.

      Ale co do ekranu i sprajtów - pod koniec pamięci.
      Np. Amaurote pamięć ekranu ma pod D800, ale będzie miało pod E000.

      Ale na proste rzeczy w Basicu, to tak, jak SO podpowie. Pod koniec pamięci ekran, poniżej sprajty a basic od początku (czyli od ca 2000)

      A to wszystko dlatego, że jednak ekran może być byle gdzie, ale wyalignowany odpowiednio, bo będzie się źle wyświetlał.

      A np. River Raid jest od 4000, ale ... w dół. I sprytnie przepisywane LMSy :)

      Jak pisałem gry, to kod był z reguły jedną paczką, a reszta była rozrzucona po pamięci. Z wyjątkiem drobnych danych, typu sprajty, krzyżyki, kursory.

      Generalnie niepisana(?) zasada Atari, to: od dołu - oprogramowanie systemowe, potem wolna pamięć, a potem dane obrazu poprzedzone display listą.
      • 43: CommentAuthor0xF
      • CommentTime23 Mar 2012 16:03
       
      @mgr_inz_rafal: zależy, jakiego rodzaju program piszesz.

      Jeśli narzędziowy, to najprawdopodobniej musi chodzić z DOSem (nie dotykamy poniżej $2000, jeszcze lepiej $2800), jeśli ma własny ekran, to zwykle powinien oszczędzić systemowy (od $bc20). Jeśli ma działać przy włączonym BASICu, to ekran tekstowy (dokładniej DL) jest pod $9c20.

      Jeśli piszesz grę lub demo bez użycia OS, to możesz jechać po całej pamięci, oszczędzając tylko DOSa i zmienne OS podczas wczytywania.

      Nie zakładaj nigdy, że w momencie uruchomienia programu jakakolwiek pamięć jest wyzerowana. Czyść ją sam.
      • 44:
         
        CommentAuthorjhusak
      • CommentTime23 Mar 2012 16:03 zmieniony
       
      Ostatnie zdanie 0xF jest kluczowe. Ile to później błędów powoduje... np. przy rozpakowywaniu...

      Aż do tego stopnia to jest ważne, że dobrze najpierw zerować obszar, pod który właduje się gra, a potem ją tam władować (mechanizmami plików dosowych). Bo inaczej, jak ktoś przeleci "wyrzucaczem zer" może być kiepsko.

      Oczywiście to jest ważne w wersji finalnej, w roboczej nie.

      Np. Dan Strikes Back można łatwo spakować exomizerem. Jednak wówczas grafika jest trochę skaszaniona. A jak ktoś tego nie zauważy? Rozchodzi się gra z bugami.
      • 45:
         
        CommentAuthorjhusak
      • CommentTime23 Mar 2012 16:03
       
      @Kaz, wiem :)

      Niestety tylko zadatki :P
      • 46: CommentAuthorBrix
      • CommentTime23 Mar 2012 17:03
       
      Jeśli chodzi o mnie, żeby się nie pogubić przy pewnym projekcie, zrobiłem sobie wykres zajętości pamięci w arkuszu kalkulacyjnym. I wizualnie ładnie widzę co gdzie jest, gdzie co można przestawić, gdzie co jeszcze wcisnąć itd., a i łatwo da się wszystko dość dokładnie policzyć.
      • 47:
         
        CommentAuthorKaz
      • CommentTime23 Mar 2012 17:03
       
      No to pokaz arkusz, moze komus sie przyda jako wzor i tez bedzie stosowal taka metode. Narzedzi ulatwiajacych prace nigdy za wiele.
      • 48: CommentAuthorBrix
      • CommentTime23 Mar 2012 17:03 zmieniony
       
      @Kaz: Ale to się nie nadaje do publikacji, taka moja prywatna pomoc by się nie pogubić, choć mogę pokazać fragment jak to w tej chwili wygląda. Jeszcze nie walczę o każdy wolny bajt, więc i superdokładność na razie nie jest mi potrzebna :)

      ->link<-
      • 49:
         
        CommentAuthorjhusak
      • CommentTime23 Mar 2012 20:03
       
      Ja z kolei nadaję rozszerzenia, pod które dany plik się ładuje.
      Minus jak coś trzeba przesunąć...
      • 50: CommentAuthorxxl
      • CommentTime23 Mar 2012 20:03
       
      > Jeśli piszesz grę lub demo bez użycia OS, to możesz jechać po całej pamięci, oszczędzając tylko DOSa i zmienne OS podczas wczytywania.

      nie trzeba oszczedzac DOSa i zmiennych OS: przepis na szczescie i dostatek ->link<-