atarionline.pl Płynne przewijanie tekstu potrzebne do loadera. - 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: CommentAuthoradi
    • CommentTime30 Sep 2024 zmieniony
     
    Mam w planie przerobić loader do Sistema Injektor, aby zamiast gierki był na ekranie podczas ładowania jakiś baner z przepływającym tekstem, chętnie również jakiś pasek z tęczą Atari lub inne bajery.
    Niestety nie mam biegłości w programowaniu Atari i zadanie to jest dla mnie trudne.
    Czy macie jakiegoś gotowca?

    Na zachętę podam Wam co napisała mi sztuczna inteligencja.
    Zapytana:
    "napisz mi w assemblerze atari 65xe przewijający się na ekranie tekst"
    napisała:
    "Oto prosty program w assemblerze dla Atari 65XE, który wyświetla przewijający się tekst na ekranie. Program wykorzystuje pamięć ekranu i prostą pętlę do przesuwania tekstu."
    .org $6000          ; Ustawienie adresu startowego programu

    START:
    LDX #$00 ; Ustawienie X na 0
    STY $D000 ; Ustawienie koloru tła (czarny)
    STY $D001 ; Ustawienie koloru tekstu (czarny)

    ; Tekst do wyświetlenia
    .text "Witaj w Atari 65XE! " ; Tekst do przewijania
    .byte $00 ; Zakończenie tekstu

    MAIN_LOOP:
    LDA $D000 ; Wczytaj kolor tła
    STA $D000 ; Ustaw kolor tła
    LDA $D001 ; Wczytaj kolor tekstu
    STA $D001 ; Ustaw kolor tekstu

    ; Przesuwanie tekstu
    LDX #$00 ; Ustawienie X na 0
    LDY #$00 ; Ustawienie Y na 0

    PRINT_TEXT:
    LDA .text, X ; Wczytaj znak z tekstu
    BEQ END_LOOP ; Jeśli znak to 0, zakończ pętlę
    STA $200 + Y ; Wyświetl znak na ekranie
    INX ; Zwiększ X
    INY ; Zwiększ Y
    JMP PRINT_TEXT ; Powrót do drukowania tekstu

    END_LOOP:
    ; Przewijanie tekstu
    LDX #$00 ; Ustawienie X na 0
    STY $D000 ; Ustawienie koloru tła
    STY $D001 ; Ustawienie koloru tekstu
    JMP MAIN_LOOP ; Powrót do głównej pętli

    .text:
    .asciz "Witaj w Atari 65XE! " ; Tekst do przewijania

    "Opis programu:
    Program ustawia kolory tła i tekstu.
    Wczytuje tekst do wyświetlenia.
    W pętli MAIN_LOOP tekst jest wyświetlany na ekranie.
    Po osiągnięciu końca tekstu, program wraca do początku i kontynuuje przewijanie.
    Kompilacja i uruchomienie:
    Aby skompilować ten kod, użyj assemblera dla Atari, takiego jak MAC/65 lub ASM65. Po skompilowaniu, załaduj program na Atari 65XE i uruchom go.

    Pamiętaj, że kod ten jest uproszczony i może wymagać dostosowania w zależności od konkretnego środowiska i wymagań."

    Doprecyzowałem:
    "a można prosić o płynne przewijanie tekstu co jeden pixel"

    Odpisała:
    "Oczywiście! Aby uzyskać płynne przewijanie tekstu co jeden piksel, musimy wprowadzić kilka zmian w kodzie. Poniżej znajduje się przykład programu w assemblerze dla Atari 65XE, który przewija tekst w pionie o jeden piksel w każdej iteracji."
    .org $6000          ; Ustawienie adresu startowego programu

    START:
    LDX #$00 ; Ustawienie X na 0
    STY $D000 ; Ustawienie koloru tła (czarny)
    STY $D001 ; Ustawienie koloru tekstu (czarny)

    ; Tekst do wyświetlenia
    .text "Witaj w Atari 65XE! "
    .byte $00 ; Zakończenie tekstu

    MAIN_LOOP:
    ; Przesuwanie tekstu
    LDX #$00 ; Ustawienie X na 0
    LDY #$00 ; Ustawienie Y na 0

    PRINT_TEXT:
    LDA .text, X ; Wczytaj znak z tekstu
    BEQ END_LOOP ; Jeśli znak to 0, zakończ pętlę
    STA $200 + Y ; Wyświetl znak na ekranie
    INX ; Zwiększ X
    INY ; Zwiększ Y
    JMP PRINT_TEXT ; Powrót do drukowania tekstu

    END_LOOP:
    ; Przewijanie tekstu
    LDX #$00 ; Ustawienie X na 0
    STY $D000 ; Ustawienie koloru tła
    STY $D001 ; Ustawienie koloru tekstu

    ; Przesunięcie tekstu w górę o jeden piksel
    LDA $200 ; Wczytaj pierwszy znak
    STA $200 + 1 ; Przesuń go w górę
    LDA $201 ; Wczytaj drugi znak
    STA $201 + 1 ; Przesuń go w górę
    ; Kontynuuj dla pozostałych znaków...

    ; Wprowadź opóźnienie, aby uzyskać płynne przewijanie
    JSR DELAY ; Wywołanie procedury opóźnienia
    JMP MAIN_LOOP ; Powrót do głównej pętli

    DELAY:
    LDX #$FF ; Ustawienie X na maksymalną wartość
    DELAY_LOOP:
    DEX ; Decrement X
    BNE DELAY_LOOP ; Powtarzaj, aż X osiągnie 0
    RTS ; Powrót z procedury

    .text:
    .asciz "Witaj w Atari 65XE! " ; Tekst do przewijania

    "Opis zmian:
    Płynne przewijanie: W pętli END_LOOP dodano przesunięcie tekstu w górę o jeden piksel. Możesz dostosować tę część, aby przesuwać każdy znak w pamięci ekranu.
    Opóźnienie: Dodano prostą procedurę opóźnienia, aby uzyskać efekt płynnego przewijania.
    Kompilacja i uruchomienie:
    Podobnie jak wcześniej, skompiluj ten kod za pomocą assemblera, a następnie uruchom go na Atari 65XE. Możesz dostosować opóźnienie w procedurze DELAY, aby uzyskać pożądane tempo przewijania.

    Pamiętaj, że kod ten jest uproszczony i może wymagać dalszych poprawek, aby działał zgodnie z oczekiwaniami."
    • 2: CommentAuthoradi
    • CommentTime30 Sep 2024 zmieniony
     
    Coś mam:


    ze strony:
    ->link<-
    • 3:
       
      CommentAuthorpirx
    • CommentTime1 Oct 2024 zmieniony
     
    przykładzik naprędce sklecon
    do komplikacji kodu użyj bibliotek np. stąd:
    ->link<-
    • 4: CommentAuthoradi
    • CommentTime1 Oct 2024 zmieniony
     
    Dzięki Pirx :).

    Bardzo dobre.
    Jak pozwolisz dodam tylko trochę koloru.

    Jeśli nie będziesz miał nic przeciwko, umieszczę informację, że Ty zrobiłeś grafikę. Oczywiście przed puszczeniem w świat skonsultuję z Tobą ostateczną formę.
    • 5:
       
      CommentAuthorpirx
    • CommentTime1 Oct 2024 zmieniony
     
    za wszę do usług
    nie wiem, czy to się wyrobi podczas wczytywania, prawd. musisz przenieść VBL na "immediate" czyli
    VMAIN VBL,6

    i zamiast JMP XITVBV --> JMP SYSVBV

    dodatkowo DLI mogą być za długie, może trzeba będzie w ogóle zrezygnować albo dać lżejsze

    tak w ogóle to zerknąłem dziś i znalazłem błąd, etykieta `scroll2_end` w złym miejscu.