atarionline.pl Początki w c. Adres ekranu i podmiana. - 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: CommentAuthorPecet
    • CommentTime26 Nov 2018 zmieniony
     
    Teraz tak sobie pomyslalem, ze moze w moim kodzie nie ma bledu. Pomylka polega jedynie na sposobie, w jaki to chcialem przetestowac na szybko, wypisujac (przy uzyciu writeln) tekst na ekranie.
    Przyjde do domu, to sprawdze.

    No i tak, jak myślałem - śmiga. Błędem było najwyraźniej testowanie poprzez writeln.
    • 2:
       
      CommentAuthorbocianu
    • CommentTime27 Nov 2018 zmieniony
     
    No to jak już wszystko jasne to nie będę się produkował, ale korzystając z okazji zareklamują moją libkę do robienie list diplayowych. Ja bym tego scrolla zrobił następująco :)

    program hscroll;
    uses atari, b_dl;

    const
    dlist = $5000;
    vmem = $5100;

    var hscroll:byte = 3;
    offset:byte = 0;
    blankSize:byte = 0;
    s:string = 'hello! it is an jumping pascal scroll!!'~;
    blanks:array[0..15] of byte = (
    DL_BLANK8, DL_BLANK7, DL_BLANK6, DL_BLANK5, DL_BLANK4, DL_BLANK3, DL_BLANK2, DL_BLANK1,
    DL_BLANK1, DL_BLANK2, DL_BLANK3, DL_BLANK4, DL_BLANK5, DL_BLANK6, DL_BLANK7, DL_BLANK8
    );

    begin

    DL_Init(dlist);
    DL_Push(DL_BLANK8, 12); // 12 blank lines
    DL_Push(DL_MODE_40x24T2 + DL_HSCROLL + DL_LMS, vmem); // textline
    DL_Push(DL_JVB, dlist); // jump back
    DL_Start;

    move(s[1],pointer(vmem+42),sizeOf(s)); // copy text to vram
    color2:=0;

    repeat
    pause;
    if hscroll = $ff then begin // $ff is one below zero
    hscroll := 3;
    offset := (offset + 1) mod 80; // go trough 0-79
    DL_PokeW(13, vmem + offset); // set new memory offset
    end;
    hscrol := hscroll; // set hscroll
    dec(hscroll);
    blankSize := (blankSize + 1) and 15; // go trough 0-15
    DL_Poke(10, blanks[blankSize]); // set new blankline height
    until false;

    end.


    adres do moich libek:
    ->link<-
    a dokumentacja tu:
    ->link<-
    • 3: CommentAuthorPecet
    • CommentTime28 Nov 2018
     
    dzieki, na razie pobawie scrollem calego ekranu co punkt, potem scrolling plynny.
    • 4:
       
      CommentAuthorTheFender
    • CommentTime28 Nov 2018 zmieniony
     
    Płynniej niż co punkt, to dopiero na następcy atari z chipsetem AGA ;) Pozdro
    • 5: CommentAuthortebe
    • CommentTime28 Nov 2018 zmieniony
     
    :) na Atari można tylko co cykl koloru, czyli min 2 piksle HiRes, na C64 można co 1 piksel HiRes (i na Atari z VBXE)
    • 6:
       
      CommentAuthorYosh
    • CommentTime29 Nov 2018
     
    Kurka, da się napisać scroll mniej niż jeden pixel hires... aż sobie napisze :D
    • 7: CommentAuthorPecet
    • CommentTime29 Nov 2018 zmieniony
     
    widzę, że wzbudziłem sensację:)
    chodziło o scrolla co znak w Gr. 0
    • 8:
       
      CommentAuthorbocianu
    • CommentTime29 Nov 2018
     
    dobrze że tylko sensacje.
    niektóre z pozoru niewinne wątki kończą się bluzgami i obrażaniem się nawzajem... ale to zazwyczaj na głównej :D
    • 9:
       
      CommentAuthorbocianu
    • CommentTime29 Nov 2018 zmieniony
     
    @Pecet: a tak swoją drogą to do scrolla co znak nie potrzebujesz się wcale bawić w display listy. Można to zrobic o wiele prościej:

    program hscroll2;
    uses atari;
    var s:string = 'hello my friends! i''m one char scroll in text mode done in different way, not using display lists '~;
    textStart, screenStart:byte;
    begin
    repeat
    textStart:=1;
    screenStart:=39;
    repeat
    move(s[textStart],pointer(savmsc+160+screenStart),40-screenStart);
    if screenStart>0 then Dec(screenStart)
    else Inc(textStart);
    Pause(5);
    until textStart>Length(s);
    until false;
    end.
    • 10: CommentAuthorPecet
    • CommentTime29 Nov 2018
     
    Tutaj na szczescie bluzgow nie bylo, padla natomiast ciekawa deklaracja - czekam na realizacje;)

    Czyli w tym przykladzie jesli dobrze rozumiem, przesuwamy stringa po pamieci ekranu...

    A wlasnie, jeszcze jedno pytanie: co to jest color clock? To se te dwa bity, gdzie kodowany jest kolor (tak jak np. w basicowym trybie 15, czyli 2 bity = 4 kolory)? To by wyjasnialo skad color, ale dlaczego clock?:)
    • 11: CommentAuthortebe
    • CommentTime29 Nov 2018 zmieniony
     
    ->link<-

    ->link<-

    Jednostka czasu odpowiadająca jednemu okresowi podstawowego sygnału taktującego GTIA (w systemie PAL - 3,546894 MHz, w systemie NTSC - 3,579545 MHz, w systemie SECAM - 3,563 MHz), co odpowiada 1/228 linii, czyli 1/71136 ramki, a także 1/2 cyklu maszynowego. Jednostka ta ma bezpośrednie przełożenie na określenie poziomej pozycji i szerokości wyświetlanych obiektów graficznych i do tego celu również jest używana.

    Jest to czas, w jakim układy graficzne Atari są w stanie dokonać pełnej zmiany koloru w linii poziomej, stąd też wynika najmniejsza szerokość pikseli w kolorowych trybach graficznych. Tryby monochromatyczne ANTIC-a dają możliwość wyświetlania pikseli o szerokości połowy cyklu koloru.
    • 12: CommentAuthorPecet
    • CommentTime4 Dec 2018
     
    dzieki tebe.