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 17:09 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 18:09 zmieniony
       
      Coś mam:


      ze strony:
      ->link<-
      • 3:
         
        CommentAuthorpirx
      • CommentTime1 Oct 2024 02:10 zmieniony
       
      przykładzik naprędce sklecon
      do komplikacji kodu użyj bibliotek np. stąd:
      ->link<-
      • 4: CommentAuthoradi
      • CommentTime1 Oct 2024 08:10 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 16:10 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.