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
     
    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
     
    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
     
    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
     
    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
     
    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 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
     
    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
     
    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
     
    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 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
     
    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 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 zmieniony
     
    a tutaj temat z poruszaną procedurką: procedurka do przerzucania małych bloków na ekran