atarionline.pl pytanie z asemblera - 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: CommentAuthormuffy
      • CommentTime19 Aug 2013 17:08
       
      Pytanie początkującego ;)

      Dana jest procka
      getk	lda ch
      cmp #255
      beq getk
      ldy #255
      sty ch
      tay
      lda (ktab),y
      rts

      Oczywiście ch=$$02fc a ktab=$79
      Wywołuję ją poprzez JSR, a z założenia ma służyć do odczytu znaku z klawiatury jako odpowiedzi użytkownika programu (oraz do zwykłego oczekiwania na naciśnięcie klawisza). Problem pojawia się w momencie następowania po sobie dwóch wywołań, pomiędzy którymi znacznik Z nie jest zerowany co jest zmyłką dla zawartego w pętli beq. No i na A8 nie ma bezpośredniego rozkazu np. CLZ.
      Jak więc ustawić Z=1 z jak najmniejszą szkodą dla wskaźników i rejestrów?
      • 2: CommentAuthor0xF
      • CommentTime19 Aug 2013 18:08
       
      Ten kod wygląda dobrze. Problem musi leżeć gdzie indziej. Instrukcja cmp (podobnie jak wszystkie inne instrukcje wpływające na znacznik Z) zawsze zmienia go, czyli nie tylko ustawia, ale również kasuje.
      • 3: CommentAuthormuffy
      • CommentTime19 Aug 2013 22:08
       
      Pod atari800win dzieją mi się dziwne rzeczy z tym
      Przy pierwszym wywołaniu "getk" jest wszystko ok. ale w przy następnym JSR zachowuje się jakby w pamięci było info o naciśniętym klawiszu. I tak (w pętli na próbę) na przemian. (tzn raz detekcja prawidłowa raz nieudana).
      Pod Alitrra wszystko działa jak trza. ale gdzie leży przyczyna?
      • 4: CommentAuthor0xF
      • CommentTime19 Aug 2013 23:08
       
      Problem jest w tej części programu, której nie pokazałeś. Pokaż cały program.
      • 5: CommentAuthormuffy
      • CommentTime20 Aug 2013 00:08 zmieniony
       
      Zestaw	equ $9000
      Chbas equ $02F4
      ktab equ $79
      ch equ $02fc
      Start equ $2000

      org Start

      init lda >zestaw
      sta Chbas

      pocz putline #powit
      putline #pustyw
      putline #klawisz
      jsr getk

      putline #pustyw
      putline #kom1
      putline #klawisz
      jsr getk

      putline #pustyw
      putline #kom2
      putline #klawisz
      jsr getk

      jmp pocz

      getk lda ch
      cmp #255
      beq getk
      ldy #255
      sty ch
      tay
      lda (ktab),y

      rts

      pustyw .by $9b 0
      powit .by 'poczatek petli' $9b 0
      kom1 .by 'test 1' $9b 0
      kom2 .by 'test 2' $9b 0
      klawisz .by 'WCISNIJ DOWOLNY KLAWISZ' $9b 0

      .link 'lib\posxy.obx'
      .link 'lib\putchar.obx'
      .link 'lib\putline.obx'
      .link 'lib\printf.obx'
      .link 'lib\getline.obx'

      org Zestaw
      ins 'test.fnt'

      run init


      edit:
      Coś się pokrzaczyło przy "code". Poprawna końcówka to:


      pustyw .by $9b 0
      powit .by 'poczatek petli' $9b 0
      kom1 .by 'test 1' $9b 0
      kom2 .by 'test 2' $9b 0
      klawisz .by 'WCISNIJ DOWOLNY KLAWISZ' $9b 0

      .link 'lib\posxy.obx'
      .link 'lib\putchar.obx'
      .link 'lib\putline.obx'
      .link 'lib\printf.obx'
      .link 'lib\getline.obx'

      org Zestaw
      ins 'test.fnt'

      run init
      • 6: CommentAuthorrudla
      • CommentTime20 Aug 2013 09:08
       
      Try doing this:

      getk
      lda #255
      sta ch
      wait
      ldy ch
      cpy #255
      beq wait
      sta ch
      lda (ktab),y
      rts
      • 7: CommentAuthormuffy
      • CommentTime20 Aug 2013 19:08
       
      Thanks Rudla :)

      Teraz działa.
      • 8:
         
        CommentAuthorxeen
      • CommentTime22 Aug 2013 00:08 zmieniony
       
      czy jest jakieś ograniczenie w ilości LMS w DL? Czy każda linia trybu (np $0f) może być poprzedzona LMS'em i zaczynać się od innego (lub nawet tego samego) obszaru w pamięci (czyli DL to w większości $4f + a(obraz), oczywiście z $41 na końcu i jeszcze pustymi liniami na początku)?
      Pytam, bo mam DL i powyżej pewnej ilości LMS sa krzaki i nie wiem z czego to wynika.
      dzięki za pomoc.
      • 9: CommentAuthortebe
      • CommentTime22 Aug 2013 00:08
       
      polecam Atariki

      ->link<-

      Jedyna restrykcja, jaką ANTIC narzuca co do ulokowania danych obrazu jest taka, że dane dla pojedynczej linii trybu graficznego nie mogą przecinać granicy bloku 4 KB. Licznik adresujący pamięć obrazu ma co prawda 16 bitów, ale podczas normalnej pracy ANTIC zmienia tylko 12 najmłodszych bitów - dlatego po dojechaniu do końca bloku 4 KB zacznie pobierać nie to, co znajduje się dalej, ale to, co znajduje się na początku tego bloku (czyli, ów licznik, przepełni się). Jeśli pamięć obrazu ma przekraczać 4 KB, Display List musi być ułożona tak, żeby na granicy bloków czterokilobajtowych wypadał koniec jednej linii trybu, a następna zaczynała się już poza tą granicą. Do utworzenia tej drugiej linii musi zostać użyty rozkaz LMS, który przeładowuje całe 16 bitów wspomnianego licznika "przerzucając" tym samym ANTIC do następnego bloku 4 KB.
      • 10: CommentAuthorseban
      • CommentTime22 Aug 2013 00:08 zmieniony
       
      Hej!

      zacytuję za: ->link<- , być może Twój problem to:

      Atariki:

      Licznik programu ANTIC-a jest co prawda szesnastobitowy, ale podczas wykonywania DL pobieranie rozkazów zmienia tylko dziesięć jego najmłodszych bitów; w związku z tym po przekroczeniu granicy 1 KB pobieranie dalszych rozkazów DL jest kontynuowane od początku bloku 1 KB. Np. jeśli umieścimy początek DL pod adresem $43F0, to po pobraniu 16 bajtów DL, kolejne zostaną pobrane począwszy od $4000.

      Aby ominąć tę niedogodność, można użyć rozkazu JMP do ponownego załadowania całego licznika. Wadą takiego rozwiązania jest wyświetlenie jednej pustej linii na ekranie (generuje ją rozkaz JMP). Można tego uniknąć przez programową zmianę wartości rejestru DLPTR w linii, po której program ANTIC-a przekroczy granicę 1 kilobajta.

      Gdy miałem długi Display-List po prostu pilnowałem aby był wyrównany granicy jednego kilobajta i nie miałem problemów z przekroczeniem tej granicy :)

      O ile dobrze pamiętam to w mads jest chyba jakaś instrukcja algin?
      • 11:
         
        CommentAuthorxeen
      • CommentTime22 Aug 2013 09:08 zmieniony
       
      Dziękuję Seban - to chyba to - sprawdzę wieczorem. Znowu wstyd, po prostu wyleciało mi to z głowy i przy maksymalnym zmęczeniu i kodowaniu z oczami na zapałkę moja ignorancja sięga zenitu.

      Tebe - o tym 4KB już na szczęście (dla siebie) pamiętam i to z Twojego kursu, którego fragment pozwolę sobie zacytować, ale oczywiście dziękuję.


      Po takiej operacji gdy nałożymy na siebie 2 sprity, tzn oba sprity maja tą samą pozycje poziomą i pionową uzyskamy 4 kolorowe sprity (to tak jak kładziesz sie na dziewczynie, razem macie więcej kolorów :>).


      :D
      • 12: CommentAuthor0xF
      • CommentTime22 Aug 2013 11:08
       
      Thanks Rudla :)

      Teraz działa.

      Ale dlaczego?
      • 13: CommentAuthorxxl
      • CommentTime22 Aug 2013 12:08
       
      chyba dlatego, ze jesli ktos fizycznie nacisnie klawisz to trwa to dluzej niz jedna ramka wiec po wcisnieciu klawisza procka zrobi swoje i zresetuje ch ale vbl i tak zapisze tam za chwile stara wartosc i druga procka czytania klawisza juz ma wynik...
      • 14: CommentAuthor0xF
      • CommentTime22 Aug 2013 14:08 zmieniony
       
      Procedura na VBL jest odpowiedzialna za powtarzanie klawisza, ale trzeba przytrzymać klawisz dłużej, żeby to aktywować.

      Niech zgadnę: Muffy włączył przyspieszenie w Atari800Win PLus?
      • 15: CommentAuthormuffy
      • CommentTime22 Aug 2013 20:08
       
      W pierwszej chwili też to sprawdziłem, niestety takie rozwiązanie problemu (wduszony F7 w emu) było zbyt proste by było poprawne.
      Z wyłączonym przyśpieszeniem jak napisałem wcześniej tylko pod Altirra działało dobrze. Sam bym chętnie się dowiedział co się tam działo. Trzeba by w tym celu np wczytać np QA, wpisać pierwszą prockę, ustawić warunki i sprawdzić co w środku się dzieje. Ale dostępu do realnego sprzętu na chwilę obecną niestety nie mam.
      • 16: CommentAuthorxxl
      • CommentTime22 Aug 2013 20:08
       
      jesli chcesz wyslij mi na maila .xex sprawdze co sie dzieje.
      • 17: CommentAuthormuffy
      • CommentTime22 Aug 2013 21:08
       
      cały program jest w 5 poście :)
      można pominąć ustawianie fontów i ich załączanie - efekt ten sam
      • 18: CommentAuthorgreblus
      • CommentTime22 Aug 2013 23:08
       
      @muffy: sprawdziłem i wydaje mi się, że ten program z postu #5 działa prawidłowo na Altirra i na atari800 (3.0.0). Więc może to z atari800win jest coś nie teges? Jak mi żona zwolni tv to sprawdzę jeszcze na żywym atari :).
      • 19: CommentAuthormuffy
      • CommentTime22 Aug 2013 23:08
       
      ok dzięki - a całkiem tak w ogóle możliwe że a800 mi może szwankować bo odkopany był gdzieś z mojego archiwum (choć sprawdzałem też Romy i ustawienia na wszelki wypadek)
      • 20: CommentAuthorxxl
      • CommentTime22 Aug 2013 23:08
       
      @greblus: mozesz gdzies wystawic wersje skompilowana?
      • 21: CommentAuthorgreblus
      • CommentTime22 Aug 2013 23:08
       
      Jasne. Dodałem w załączniku.
      • 22: CommentAuthorxxl
      • CommentTime22 Aug 2013 23:08
       
      wylacz opcje emulatora:

      input/keyboard/use windows typematric rate

      i program zacznie dzialac jak trzeba.
      • 23: CommentAuthormuffy
      • CommentTime23 Aug 2013 00:08
       
      teraz jest ok - a człek się tyle namęczył czemu nie działa :)
      • 24: CommentAuthor0xF
      • CommentTime23 Aug 2013 06:08
       
      xxl: Jak na to wpadłeś?

      muffy: W większości przypadków lepiej nie robić początkowego "sta ch", gdyż powoduje to, że program ignoruje niektóre wciśnięcia klawiszy.
      • 25: CommentAuthorseban
      • CommentTime23 Aug 2013 11:08
       
      @fox: zawsze robiłem w swoich starych programach:

      key:
      lda #$ff
      sta $2fc

      loop:
      cmp $2fc
      beq loop
      rts


      ...i na real sprzęcie działało to zawsze bez problemu :) (mówię o czasach kiedy pisałem jeszcze w Basic i Mac/65 :P)
      • 26: CommentAuthor0xF
      • CommentTime23 Aug 2013 11:08
       
      Nie mówię, że nie działa. Ale wyobraź sobie program, który printuje stronę tekstu, po czym czeka na klawisz. Uruchamiając go 10 raz będziesz wolał wcisnąć klawisz już w trakcie wypisywania tekstu.
      • 27: CommentAuthorseban
      • CommentTime24 Aug 2013 12:08 zmieniony
       
      @0xF: takie programy się poprawiało aby pytały się się czy wyświetlić text lub takie "intro" wywalało się zupełnie :)
      • 28: CommentAuthormuffy
      • CommentTime25 Aug 2013 22:08
       
      Dobra program główny śmiga teraz trudniejsze klocki czyli grafika.
      Jaką metodą użyć obrazków z G2F by wyświetlać je w określonych częściach ekranu (różne pozycje obrazków i różnej wielkości)? Czy dobrze kombinuję że dla każdego trzeba by napisać nowy program dla Antica? Pytam bo tak jakby to będzie mój "1st time" ;)
      • 29:
         
        CommentAuthorxeen
      • CommentTime27 Aug 2013 11:08 zmieniony
       
      polecam kurs Tebe'go na początek - o ten odcinek.

      ->link<-


      Na początku dużo też daje zapisywanie plików g2f jako źródła i analiza.

      Twoje pytanie jest trochę ogólne - "obrazki z g2f" mogą być wyświetlane na Atari w trybie znakowym, lub trybie graficznym - do tego dochodzą zmiany robione na DLI.

      Chodzi Ci o prostokątne obszary na ekranie?
      • 30: CommentAuthormuffy
      • CommentTime27 Aug 2013 20:08
       
      np. 1/3 początku ekranu - obrazek z G2F (a właściwie 1/3 tego obrazka dokładnie, chyba że jest jakaś opcja skalowania o której nie wiem).
      potem 2/3 ekranu w trybie np 8 albo 0.
      Proporcje całkiem przypadkowe i przykładowe. I aby uściślić - bardziej grafika jest tu znacząca.
      • 31:
         
        CommentAuthorxeen
      • CommentTime27 Aug 2013 21:08
       
      podstawą jest obczajenie DL, 1.3 obrazka uzyskasz dzieląc plik z jego danymi - czyli banalnie:)

      Myślę, że po zapoznaniu się z tym linkiem co podałem, będziesz wiedział jako skonstruować DL aby uzyskac: 1/3 to obrazek - np. gr,15 ; 2/3 np. tekst. np. gr.0

      Ten przykład pachnie tekstówką z obrazkami:)
      • 32: CommentAuthormuffy
      • CommentTime27 Aug 2013 23:08
       
      100% hit - "Powrót Kabzy" sam się nie napisze hihi :)
      • 33: CommentAuthormuffy
      • CommentTime31 Aug 2013 16:08 zmieniony
       
      (pod postem ale co innego...)
      W jaki sposób doczytać do programu kod z obrazka w formacie *.scr o określonej długości to już wiem.
      Ale jaki jest dokładnie format tego pliku aby wstawić prawidłową liczbę do załadowania?
      -----------
      edit.......
      -----------
      Nieaktualne.
      Po krótkim zastanowieniu raczej przy rozbudowanym programie musiałbym mieć kilkanaście conajmniej zestawów znaków w pamięci by obsłużyć grafę z G2F. Więc wybór raczej będzie w stronę MIC. (no może poza 1-2 obrazkami w G2F). No i bardziej dla mnie wygodniejsze rozwiązanie, bo i kod nie będzie wymagał za każdym razem nowego DLI i PMG ;)
      • 34: CommentAuthormono
      • CommentTime2 Sep 2013 13:09
       
      Jeśli masz na myśli spectrumowo/amstradowy scr, to jest to żywcem zrzucona pamięć ekranu wraz z mapą atrybutów: ->link<-
      • 35: CommentAuthormuffy
      • CommentTime2 Sep 2013 17:09
       
      Nie, chodzi mi o scr jaki zapisuje G2F.
      • 36: CommentAuthortebe
      • CommentTime2 Sep 2013 18:09 zmieniony
       
      plik SCR (SCREEN) to pamięć obrazu, albo jak kto woli kody znaków które mają zostać wyświetlone, znaki 128..255 to znaki w inwersie (czyli z 5-tym kolorem przypadku trybu 12OS)

      plik TAB to numery zestawów znaków w kolejnych wierszach

      te informacje są w instrukcji na stronie ->link<-
      • 37: CommentAuthormuffy
      • CommentTime7 Sep 2013 01:09
       
      Mam taki tam program antica:
      antic	dta $4e,a(scr1)
      :63 dta $0E
      dta $8E
      dta $C2,a(tekst)
      :14 dta $82
      dta $41,a(antic)

      Mniejsza o to że teraz linie nie pasują ale nie o tym...
      Ponieważ w programie zamierzam wykorzystać wiele danych zawartych w kolejno: scr1,scr2,..,scrN to jak najwygodniej przełączać się pomiędzy tymi adresami? Chodzi mi po głowie zastosowanie teblicy z adresami w pamięci dla poszczególnych danych grafiki. Tylko jak je bezpośrednio w liście DL podmienić? czy tylko np zamiast adresu "scr" wrzucić tam nowy wektor wskazujący na inny obrazek?
      Da się? Jak tak to jak? :)
      • 38: CommentAuthormarok
      • CommentTime7 Sep 2013 14:09
       
      Podmiana adresow bezposrednio w dliscie oczywiscie jest jak najbardziej mozliwa i oczywiscie musi robic to kod programu.

      Trzeba miec tylko pewnosc co do polozenia w pamieci samego wektora (zawierajacego adres), ktory podmieniamy.

      W przypadku powyzej, wektor jestesmy w stanie zlokalizowac posilkujac sie wartoscia zmiennej 'antic' (a szukany adres wektora odpowiada antic+1).

      Do tego trzeba jeszcze tylko wiedziec, ze adres zarowno w kodzie 6502 jak i Antica ma postac nastepujaca: najpierw mlodsza czesc adresu, pozniej starsza. (Np. adres $A000 zapisywany jest wiec w pamieci tak: $00,$A0).

      Jesli program do podmiany zawartosci wektora ma opierac sie o tablice (zawierajaca wartosci adresow), to trzeba jeszcze zdecydowac sie na jeden z dwu wariantow orgranizacji tablicy zawierajacej adresy (pisze tu o dwoch najbardziej oczywistych, bo potencjalnie mozna taka tablice jeszcze inaczej "rozpisac").

      Tablica adresow moze zawierac kolejne adresy wlasnie. Moze tez zawierac osobno mlodsze polowki kolejnych adresow, a w swojej drugiej czesci (mozna to traktowac jako osobna tablice), starsze polowki adresow uszeregowane w tej samej kolejnosci jak mlodsze polowki adresow.

      Tablica adresow moze miec wiec format:
      tablica
      dta a(scr1,scr2,scr3,scr4)

      lub (w drugiej wersji)
      tablica1
      dta l(scr1,scr2,scr3,scr4)
      tablica2
      dta h(scr1,scr2,scr3,scr4)


      Przyklad kodu podmieniajacego wektor:
      mwa tablica,x antic+1

      lub (druga wersja tablicy)
      mva tablica1,x antic+1
      mva tablica2,x antic+2

      W obu przypadkach w rejestrze X trzeba miec odpowiednia wartosc indeksujaca adres z tablicy na ktory chcemy podmienic (znaczy, ktory to scr?). Przy czym trzeba jeszcze zauwazyc, ze rejest X dla tablicy pierwszego typu musi zawierac wartosci parzyste (0,2,4,6..), a w przypadku tablicy drugiego typu, sa to kolejne wartosci liczbowe (0,1,2,3..).
      • 39: CommentAuthormuffy
      • CommentTime7 Sep 2013 15:09
       
      Melduję, że działa. Dzięki.
      Wybrałem metodę z całymi adresami w tablicy: dta a(..) - wydaje mi się wygodniejsza i bez znaczenia jest w tym przypadku znajomość w programie młodszego i starszego bajtu adresu.
      Pytanie jeszcze, czy mogę sobie to ot tak przełączać, czy musiałbym się synchronizować? (jak na razie w testach żadnych śmieci nie wywala)
      • 40: CommentAuthormarok
      • CommentTime7 Sep 2013 18:09
       
      Znajomosc mlodszego i starszego bajtu adresu nie jest potrzebna - te oblicza za nas asembler ("dta l()" i "h()").

      Co do synchronizacji, to rzeczywiscie umknelo mi o tym cos napisac. Prawdopodobnie poprawniej byloby sie synchronizowac z koncem przerwaniem VBLANK (bo wtedy nie jest wykonywany program Antica i mamy gwarancje ze nic nie zostanie przeklamane w generowanym obrazie), ale byc moze ten przypadek nawet tego nie wymaga (trudno mi jednoznacznie powiedziec).
      • 41: CommentAuthor0xF
      • CommentTime9 Sep 2013 13:09
       
      Obrazki mają po 64 linie, więc zajmują wielokrotność 256 bajtów. W związku z tym najprościej umieścić je jeden za drugim. Wtedy nie trzeba zmieniać młodszego bajtu, bo jest taki sam dla wszystkich obrazków. I nie trzeba się synchronizować.
      • 42: CommentAuthormuffy
      • CommentTime11 Sep 2013 00:09
       
      hmm nie wiem, metodą prób, błędów i czytania (a bardziej tą pierwszą metodą) doszedłem do tego, że obrazki muszą zaczynać się od pełnego adresu np $8000, $9000 $A000 co rodzi komplikacje. Jeśli są po kolei to wywala śmieci na ekran. Co ciekawe dotyczy to tylko obrazów graficznych, gdyż tą metodą tekst można sobie przełączać do woli (albo jeszcze do tego nie doszedłem że nie można) :)
      Tylko takie ograniczenie, jakoś nie za bardzo mi się widzi w praktycznym zastosowaniu: a8 z 64kb pamięci, całość w jednym pliku bez doczytywania danych.
      • 43: CommentAuthorxxl
      • CommentTime11 Sep 2013 08:09
       
      poczytaj o LMS w programie Antica. Twoj problem to granica 4kb.
      • 44: CommentAuthor0xF
      • CommentTime11 Sep 2013 10:09
       
      Nie tyle muszą się zaczynać od pełnego adresu, co nie przekraczać granicy 4k. Rozwiązaniem jest LMS w środku display listy ustawiający nowy adres.

      Jeśli to było dla Ciebie zaskoczeniem, to zwracam uwagę, że display list nie może przekraczać granicy 1k.
      • 45:
         
        CommentAuthorxeen
      • CommentTime11 Sep 2013 11:09 zmieniony
       
      Jeżeli dobrze rozumiem muffy ma kilka obrazków - i chciał tylko podmieniać adresy na poczatku DL. Można to "obejść"
      zgodnie z tym co pisał 0xF, ale ja osobiście dodatkowo zastanowiłbym się nad rozpakowywaniem danych i ewentualnie maks dwa obszary na pamięć ekranu - INFLATE daje znakomite rezultaty. Są to rzeczy niewykluczające się....
      • 46: CommentAuthor0xF
      • CommentTime11 Sep 2013 12:09
       
      Słuszna uwaga. Jeśli brakuje pamięci, to warto rozważyć dekompresję w locie. Yoomp! tak robi.

      Z drugiej strony kompresja da lepsze rezultaty na całości, niż na 2,5k kawałkach.
      • 47: CommentAuthormuffy
      • CommentTime11 Sep 2013 19:09
       
      @xxl
      to znaczy? wiem czy się je LMS, ale wskazuje on stale na jeden obszar w tym wypadku
      @0xF
      Zawsze myślałem, ze granica 4k tyczy się tylko i wyłącznie danych aktualnie wyświetlanych (do wyświetlania).
      O granicy DLI 1k wiem
      @xeem
      Dobrze kombinujesz - jest dokładnie jak napisałeś. Tylko jak to obejść w tym przypadku?
      W tym wypadku chyba najprościej by było przepisywać w zależności od potrzeb dane z jednego obszaru do miejsca w pamięci, gdzie dane by były wyświetlane. 1 ekran powinien wystarczyć skoro i tak nie będzie wymagane szybkie przełączanie. Kompresja nie będzie wymagana na tą chwilę, ale na przyszłość się przyda jak znalazł. Gdzie mogę zobaczyć jakieś gotowe i działające algorytmy do tego?
      • 48: CommentAuthorxxl
      • CommentTime11 Sep 2013 19:09
       
      wykonaj w basicu gr.8, i podejrzyj DL zauwazysz, ze dane do wyswietlania przekraczaja granice 4k a w miejscu gdzie konczy sie obszar 4kb w DL masz kolejny LMS. zwroc uwage, ze dane dla jednej linii nigdy nie przekraczaja granicy 4kb.
      • 49: CommentAuthormuffy
      • CommentTime11 Sep 2013 20:09
       
      @xxl - to już nawet u Zientary było ładnie napisane. Tutaj nie mam pytań.
      Czyli ciągłość 4kb powinno się liczyć od pierwszego rozkazu display listy antica, tak?
      W sensie np
      org $9000 ; początek DL Antica
      ...
      ...
      aż do max A000-1 łącznie z danymi do wyświetlenia.
      • 50: CommentAuthorxxl
      • CommentTime11 Sep 2013 20:09
       
      najlepiej przyklad - przekrocze granice 4kb:

      .byte $42 ; gr.0 + LMS
      .word $9fd7 ; ostatni bajt czterokilobajtowego kawalka koncza sie na tej linii
      .byte $42
      .word $a000 ; i dalej nie musisz juz dawac LMS az do konca tego 4-kb kawalka

      natomiast:
      > org $9000 ; początek DL Antica

      DL - display lista nie moze byc na granicy 1kb ($400) - zaczy moze ale musisz na granicy zrobic JMP do kolejnego bajtu DL