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
     
    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
     
    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
     
    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
     
    Problem jest w tej części programu, której nie pokazałeś. Pokaż cały program.
    • 5: CommentAuthormuffy
    • CommentTime20 Aug 2013 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
     
    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
     
    Thanks Rudla :)

    Teraz działa.
    • 8:
       
      CommentAuthorxeen
    • CommentTime22 Aug 2013 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
     
    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 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 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
     
    Thanks Rudla :)

    Teraz działa.

    Ale dlaczego?
    • 13: CommentAuthorxxl
    • CommentTime22 Aug 2013
     
    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 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
     
    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
     
    jesli chcesz wyslij mi na maila .xex sprawdze co sie dzieje.
    • 17: CommentAuthormuffy
    • CommentTime22 Aug 2013
     
    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
     
    @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
     
    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
     
    @greblus: mozesz gdzies wystawic wersje skompilowana?
    • 21: CommentAuthorgreblus
    • CommentTime22 Aug 2013
     
    Jasne. Dodałem w załączniku.
    • 22: CommentAuthorxxl
    • CommentTime22 Aug 2013
     
    wylacz opcje emulatora:

    input/keyboard/use windows typematric rate

    i program zacznie dzialac jak trzeba.
    • 23: CommentAuthormuffy
    • CommentTime23 Aug 2013
     
    teraz jest ok - a człek się tyle namęczył czemu nie działa :)
    • 24: CommentAuthor0xF
    • CommentTime23 Aug 2013
     
    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
     
    @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
     
    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 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
     
    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 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
     
    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
     
    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
     
    100% hit - "Powrót Kabzy" sam się nie napisze hihi :)
    • 33: CommentAuthormuffy
    • CommentTime31 Aug 2013 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
     
    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
     
    Nie, chodzi mi o scr jaki zapisuje G2F.
    • 36: CommentAuthortebe
    • CommentTime2 Sep 2013 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
     
    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
     
    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
     
    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
     
    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
     
    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
     
    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
     
    poczytaj o LMS w programie Antica. Twoj problem to granica 4kb.
    • 44: CommentAuthor0xF
    • CommentTime11 Sep 2013
     
    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 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
     
    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
     
    @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
     
    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
     
    @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
     
    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