atarionline.pl DLI - zmiana koloru + HSC - 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: CommentAuthordan
    • CommentTime27 Aug 2013
     
    Może ktoś z Was mi odpowie - bo kombinuje, debuguje i nie potrafię zrozumieć.

    W programie jedna jedyna procedura DLI:

    dli sta dli_a+1
    sty dli_y+1
    stx dli_x+1
    sta WSYNC
    ldx #0
    @
    mva OD_Duch0C,x COLPM0
    sta COLBAK
    mva OD_Duch1C,x COLPM1
    sta WSYNC
    inx
    cpx #150
    bcc @-
    @
    dli_a lda #0
    dli_y ldy #0
    dli_x ldx #0
    rti

    która przepisuje linia po linii kolor duszka (dla potrzeb testu również do koloru tła).

    I dla DL:
    ant dta b($70),b($70),b($70)
    dta b($42),a(tekst),b($02),b($02)
    dta b($20+$80)
    dta b($44),a(map),($4),($4) //1
    dta b($4),($4),($4) //2
    dta b($4),($4),($4) //3
    dta b($4),($4),($4) //4
    dta b($4),($4),($4) //5
    dta b($4),($4),($4) //6
    dta b($41),a(ant)

    wszystko działa poprawnie. Ale po zdefiniowaniu HSCROLLa w DL:

    ant dta b($70),b($70),b($70)
    dta b($42),a(tekst),b($02),b($02)
    dta b($20+$80)
    dta b($54),a(map),($14),($14) //1
    dta b($14),($14),($14) //2
    dta b($14),($14),($14) //3
    dta b($14),($14),($14) //4
    dta b($14),($14),($14) //5
    dta b($14),($14),($14) //6
    dta b($41),a(ant)

    mam efekt przesunięcia się kolorów względem postaci (im niżej ekranu tym większe przesunięcie).

    Dlaczego? Może mi to ktoś "łopatologicznie" wytłumaczyć.
    • 2: CommentAuthordan
    • CommentTime27 Aug 2013
     
    Hmmm czyżbym zbyt mocno obciążył DLI? robiąc to samo, ale w formie:
    .rept 150
    mva OD_Duch0C+# COLPM0
    sta COLBAK
    mva OD_Duch1C+# COLPM1
    sta WSYNC
    .endr

    zaczyna działać - czyli jak rozumiem, za bardzo sobie pofolgowałem na przerwaniu?
    • 3:
       
      CommentAuthorxeen
    • CommentTime27 Aug 2013
     
    pewnie się nie wyrabiasz.
    ale dlaczego z hscrollem obserwujesz inne zachowanie?
    • 4: CommentAuthorxxl
    • CommentTime27 Aug 2013
     
    przerwanie dli w Twoim programie zabiera 50% czasu procesora
    • 5: CommentAuthortebe
    • CommentTime28 Aug 2013
     
    najpierw ładujesz rejestry A-X-Y, potem STA WSYNC, na koniec zapis do właściwych rejestrów, np.

    lda #$22
    ldx #$80
    ldy #50

    sta wsync

    sta $d000
    stx $d001
    sty $d01a

    to jest najbardziej optymalny sposób
    • 6: CommentAuthor0xF
    • CommentTime28 Aug 2013
     
    Zauważ, że w pierwszej linii trybu znakowego 4 z HSCROLem ANTIC musi pobrać z pamięci prawie 96 bajtów (48 kodów znaków i 48 bajtów z fontu). Każde takie pobranie zajmuje cykl. Dodatkowo bajt DL i co najmniej jeden cykl odświeżenia pamięci. W linii dla 6502 i ANTICa jest 114 cykli. Teraz policz, ile cykli trwa obieg Twojej pętli.

    ANTIC będzie zabierał mniej cykli, jeśli wpiszesz duże wartości do HSCROL: lepiej $c-$f zamiast 0-3.
    • 7: CommentAuthortebe
    • CommentTime28 Aug 2013
     
    tego nie wiedziałem
    • 8: CommentAuthordan
    • CommentTime28 Aug 2013
     
    xxl - przepisanie 300 bajtów??
    tebe - dzięki, tak docelowo będzie. Zastanawiałem się tylko, dlaczego efekt się "zwiększa" im niżej schodzi postać. W końcu przerwanie zajmuje tyle samo czasu... przynajmniej tak mi się wydaje
    0xF - też nie wiedziałem. Tylko nie wiem czy dobrze zrozumiałem w linii wyrobi się 114 cykli pomniejszone o to co musi zrobić ANTIC? I w moim przypadku jest to co 8 linii? Dobrze załapałem?
    • 9: CommentAuthorxxl
    • CommentTime28 Aug 2013
     
    150 x sta wsync - zobacz co sie dzieje po zapisie do tego rejestru
    • 10: CommentAuthorEagle
    • CommentTime28 Aug 2013 zmieniony
     
    dan: Badlines - zoptymalizuj procedurę żeby się w co 8 lini wyrabiała z czasem.
    Tak jak pisze xxl procka DLI zajmuje połowę czasu procesora i chyba ciężko by to było obejść chyba że przestaniesz używać wsync i zaczniesz cyklować jak komodziarze przy otwieraniu borderów a zamiast nop'ów wciśniesz jakieś procedury :)
    • 11: CommentAuthordan
    • CommentTime28 Aug 2013
     
    ok ok - rozumiem. Nie mogłem sobie tylko wyobrazić dlaczego po zejściu w dół przesuwają się kolory coraz niżej. Teraz załapałem....
    • 12: CommentAuthor0xF
    • CommentTime28 Aug 2013
     
    Tutaj dokładnie sprawdzisz, co robi ANTIC w którym cyklu w linii: ->link<-
    No i oczywiście powinieneś wiedzieć, ile cykli zajmują poszczególne instrukcje 6502.
    • 13: CommentAuthordan
    • CommentTime28 Aug 2013
     
    0xF - dzięki, ten plik wiele mi wyjaśnił.