atarionline.pl TBXL a pamięć dodatkowa - 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:
         
        CommentAuthorMaW
      • CommentTime15 Jan 2010 19:01
       
      Witam, męczyłem już Mona, ale on ciągle siedzi przy przyspieszaniu ataribeja.

      Mam pytanie: 32kB dostępne pod TB - czy da się jakoś powiększyć i do ilu ?

      Jak w TB wykorzystywać pamięć >64kB ? Pod jakie adresy sięgać ?
      • 2: CommentAuthortebe
      • CommentTime15 Jan 2010 20:01
       
      pamięć >64kB jest w postaci 16kB banków włączanych w obszar $4000..$7FFF niezależnie czy używasz TB, asm, czy czegokolwiek

      ->link<-
      • 3:
         
        CommentAuthorlarek
      • CommentTime15 Jan 2010 20:01
       
      A nie jest tak, że w obszarze tym jest lokowany program w TBXL? Jeśli tak, to przełączenie banku może spowodować zwis kompa. Należałoby zadbać o to, aby w $4000-$7fff nie było programu, a tylko np. dane.

      Tak sobie tylko głośno myślę, więc mogę się mylić... ;)
      • 4: CommentAuthormono
      • CommentTime15 Jan 2010 20:01
       
      To jednak trochę trudne kiedy nie wiadomo czy kawałek kodu, który właśnie odpalamy nie jest ulokowany właśnie w obszarze banku pamięci :/
      Teoretycznie (niech mnie poprawi ktoś, kto zna TBXL) taki test można wykonać sprawdzając adres stałej tekstowej (która zapisana jest bezpośrednio w kodzie programu - tak to robi w każdym razie Atari BASIC):
      10 REM tu ma być zdefiniowana procedura sięgająca do XRAM
      ...
      100 IF ADR("") > 16384 THEN REM procka sięgająca do xram jest w obszarze XRAM

      Jeżeli zamierzamy przepisać kawałek pamięci gdzie indziej, należałoby zadbać o to, żeby obszar docelowy również nie pokrywał się z xram. Jeśli np. chcielibyśmy przepisać kawał pamięci do zmiennej tekstowej, to można taki test zrobić tak:
      100 DIM A$(1000)
      110 A=ADR(A$)
      120 IF A+1000 > 16384 AND A < 32768 THEN REM zmienna nakłada się na XRAM
      130 GOSUB przepisanie obszaru z XRAM do A$

      Sama procedura przepisująca (pewnie da się zrobić znacznie lepszą w TBXL) w Atari BASIC może wyglądać tak:
      10 POKE 54017,BANK
      20 FOR A=0 TO STOP-START
      30 POKE CEL+A,PEEK(START+A)
      40 NEXT A
      50 POKE 54017,255: REM bank podstawowy (dla Atari Basic ma być 253)
      60 RETURN

      START i STOP to odpowiednio adresy początku i końca przepisywanego obszaru, CEL to adres docelowy. BANK to numer banku z którego przepisujemy.
      Przełączać banki można też w pętli - wtedy obszar docelowy może pokrywać się z obszarem banku; w żadnym wypadku jednak procedura przepisująca nie może nachodzić na obszar banku.
      • 5:
         
        CommentAuthorPecus
      • CommentTime15 Jan 2010 21:01
       
      W Turbo Basicu jest oczywiscie rozkaz:
      MOVE skad,dokad,ile oraz
      -MOVE skad,dokad,ile

      Ten drugi przepisuje blok od konca (przydatne kiedy przepisywane bloki na siebie zachodza - wtedy w zaleznoci ktory z blokow jest wczesniej wybieramy odpowiednia wersje MOVE).
      • 6:
         
        CommentAuthorMaW
      • CommentTime16 Jan 2010 11:01 zmieniony
       
      Dzięki za odpowiedzi. Wymyśliłem sobie tak: ponieważ czy to TB, czy AB, oba potrzebują dużo czasu na przepisanie data-setów w odpowiedni obszar pamięci, wobec tego lepiej jest i odpowiednio przygotowane procedury maszynowe, i zestawy znaków, i inne "ozdobinki" - ładować w pamięć rozszerzoną - poprawcie mnie, jeśli się mylę, ale przy 320kB "standardzie" mam do wykorzystania 16 bloków pamięci EXT dodatkowo, co do wszystkiego powinno wystarczyć...

      //EDIT: i jeszcze jedno pytanie: czy da się zrobić tak, by móc korzystać naraz z dwóch niezależnych bloków ? Tzn. podmapowywać w dwa różne miejsca ?
      • 7: CommentAuthormono
      • CommentTime16 Jan 2010 12:01
       
      W C= mają tak rozwiązane rozszerzenia pamięci, co umożliwia im łatwe przepisywanie procesorem pamięci między blokami.
      W Atari tak nie mamy :( - blok jest zawsze mapowany w obszar $4000..$7fff.
      • 8:
         
        CommentAuthorPecus
      • CommentTime16 Jan 2010 14:01
       
      MaW.... instrukcja MOVE Turbo Basica jest prawie tak samo szybka jak kod maszynowy.... nie wiem skąd u Ciebie przekonanie co do jej powolności.
      Kiedyś za jej pomocą animowało się w pionie duszki i nie było problemów z szybkością.
      • 9:
         
        CommentAuthorMaW
      • CommentTime17 Jan 2010 11:01
       
      Pecuś, nie chodzi mi o MOVE, ale o same wartości DATA z basic-a - ja stary magnetofonowiec jestem, przyzwyczajony do tego, że na końcu programu wpisywało się zawsze nieskończoną liczbę linii data...

      A jeśli chodzi o same move, to nie obsłuży ona wypełnienia bloku pamięci ze skokiem W w ilości kroków H - czyli jak chcesz szybko nakładać dane na pamięć obrazu to bez procedurki w asm nie da się.
      • 10: CommentAuthormono
      • CommentTime17 Jan 2010 11:01 zmieniony
       
      Skoro potrzebna jest i tak procedura w asm, to nie ma żadnych obostrzeń dotyczących pamięci dodatkowej i położenia programu w basicu. Byle procedura w asm nie leżała w obszarze banku pamięci $4000..$7fff.

      Edit: Ktoś zrobił taką procedurkę niedawno - poszukaj MaW na którymś z forów. Uwzględniało skok i rodzaj operacji (and,xor,mov, może jeszcze inne).
      • 11:
         
        CommentAuthorxeen
      • CommentTime17 Jan 2010 14:01
       
      jakby ktoś tę procedurkę odnalazł, niech da namiary na tym forum, bo ja szukam na razie bez powodzenia

      dzięki
      • 12:
         
        CommentAuthorMaW
      • CommentTime17 Jan 2010 15:01 zmieniony
       
      Procedukę mam i ja, bo o nią pytałem na AA :-)

      //EDIT: szukam, a w międzyczasie znalazłem fajny temat o kolorach, który podlinkowuję we właściwszym wątku (wypłynął)
      • 13:
         
        CommentAuthorMaW
      • CommentTime17 Jan 2010 15:01 zmieniony
       
      a tutaj temat z poruszaną procedurką: procedurka do przerzucania małych bloków na ekran