atarionline.pl Mad Pascal strona zerowa - 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: CommentAuthorMq
    • CommentTime12 Oct 2020 zmieniony
     
    Taka sytuacja:
    uses
    b_system,rmt;

    (...)

    begin
    SystemOff;

    (...)



    I tam jeszcze w kodzie odpala się muzyczka rmt, w przerwaniu vbl.
    Czyli system wyłączony, rmt pewnie korzysta z jakichś adresów na stronie zerowej (jakich?), a reszta strony zerowej powinna być dostępna dla mnie?
    Potrzebuję trochę rzeczy powrzucać na stronę zerową. Z których adresów strony zerowej mogę korzystać i jak to sprawdzić?

    Jak odpalę taki program debugerem w altirze, to duża część adresów strony zerowej ma powpisywane jakieś tam różne wartości, patrzę sobie gdzie są zera i korzystam z tych adresów, ale co chwila trafiam na takie adresy, w które potem jak wpisuję jakieś dane, to mi się z powrotem zerują i nie działa. I tak na chybił-trafił szukam adresu po wpisaniu w który program mi działa, ale nie chcę tego robić na chybił-trafił, tylko jakoś to okiełznać, żeby wiedzieć które adresy mam wolne i ile mi zostało.

    Kompilator wyświetla coś takiego:
    ZPFREE: $0000..$007F / $00D8..$00FF
    Co to oznacza? Niewiele mi mówi...

    Edit: może dopiszę jakieś przykłady: tak na szybko teraz przed chwilą problem pojawił się z adresem $C3 - debuger pokazuje tam wartość 0 i nic się tam nie dzieje, a zapisać tam nic nie mogę...
    Adresy $C0..$C2 i $C4..$CF działają mi bez problemów.
    Adresy $D0..$DF też bez problemu.
    Adresy od $E0..$F2 wg opisu w źródłach playera używa rmt
    • 2: CommentAuthortebe
    • CommentTime12 Oct 2020
     
    domyślnie masz wolne adresy $0000..$007F, ale przy włączonym OS nie radzę z nich korzystać

    a pozostałe wolne są od $D8..$FF

    MP zawłaszcza przestrzeń $80..$D7
    • 3: CommentAuthorMq
    • CommentTime12 Oct 2020
     
    Ok, czyli ten komunikat kompilatora jest zawsze taki sam, to jest właśnie info o zawłaszczonych przez MP adresach, żeby ich nie używać, tak?

    Czyli wystarczy żebym nie używał adresów:
    $80..$D7 - bo używa ich MP
    $E0..$F2 - bo używa ich rmt

    Reszty mogę używać?
    Jest jeszcze kilka adresów, w których coś tam sobie lata, np. $13-$14 to jest chyba zegar?

    To by tłumaczyło, dlaczego miałem losowe problemy: jechałem sobie kolejno używaniem adresów od końca i zacząłem od $DF i schodziłem w dół. Więc zszedłem w przestrzeń MP i pewnie niektóre z tych adresów akurat przypadkiem były nieużyte przez MP w moim programie, więc mi działają (np.$C4..$D7), ale jak zszedłem jeszcze jeden niżej, to akurat nie działa, bo używa go pewnie MP ($C3).
    • 4: CommentAuthortebe
    • CommentTime12 Oct 2020
     
    tak, strony zerowej używa MP kiedy przekazuje parametry do procedur, funkcji, albo w obliczeniach jako tymczasowe zmienne
    • 5: CommentAuthormarok
    • CommentTime12 Oct 2020
     
    W przypadkach takich jak player, gdzie procedura realizowana jest na przerwaniu, zawsze istnieje sposobność współdzielenia obszaru pamięci z programem głównym. Trzeba wtedy przepisać zawartość interesującego w tym względzie nas obszaru pamięci przed użyciem (czyli na przerwaniu) i zaraz przed opuszczeniem przerwania (a ściślej - ostatnim użyciem tej pamięci). To spowolni w niemałym stopniu (choć nie przesadzajmy z tym) całość wykonywania procedury na przerwaniu, ale w bilansie ogólnym wyjdzie nam na plus.

    Jest rodzaj takiej nakładki dla Basic'a + RMT, więc to (chyba) bardzo łatwo przerobić na współpracujące w środowisku MP. Tutaj mogą pomóc, mam nadzieję, Xeen, Sikor i Miker (w dostarczeniu procedury, tak do podpatrzenia, jeśli mogłaby się do tego przydać).
    (Ale można to też napisać sobie chyba tak od ręki. Wersja dla Basica wymagała pewnych szczególniejszych dostosowań, które tu pewnie nie są konieczne.)


    Adresy zmiennych na stronie zerowej przy kompilacji playera są oczywiście zmienialne (piszę to na wszelki wypadek).
    • 6: CommentAuthorMq
    • CommentTime12 Oct 2020
     
    @marok, dzięki, z tym playerem, to faktycznie nie jest problem fizycznie, żeby sobie w międzyczasie użyć tych jego konkretnych adresów na stronie zerowej, bo można je przepisywać gdzieś. Sam tak robię ze "swoimi" zmiennymi na stronie zerowej, że używam ich do różnych celów. Podobnie wiem, że można zmienić zwyczajnie te adresy, ale to nie ma dla mnie znaczenia które to są konkretnie adresy. Player w ogóle nie jest kłopotem, podałem go jako przykład, a pisząc pierwszego posta nie sprawdziłem jeszcze z jakich adresów korzysta, sprawdziłem to trochę później i dopisałem.

    Nie walczę tutaj też o brak miejsca na stronie zerowej, bo mam prawie całą stronę poza wspomnianymi adresami wolną, tylko nie rozumiałem co korzysta już z tej strony i które adresy są wolne, ale teraz już wiem, więc nie ma problemu. Najbardziej chodziło mi o to, co napisał @tebe - czyli jak rozumieć komunikat kompilatora o wolnych adresach strony zerowej i o wykorzystaniu jej przez Mad Pascala. Jakoś tak mam, że piszę w Mad Pascalu, ale wewnątrz coraz więcej mam assemblera, samemu zarządzam sobie większością adresów w pamięci i buduję mapę wykorzystania pamięci, więc jakoś tak głupio zapomniałem, że piszę w języku wyższego poziomu i on sobie sam też rezerwuje pamięć której potrzebuje, żeby mi obsłużyć to co jeszcze mam w Pascalu napisane, a trochę tego jest:-) Ogólnie szkielet programu, procedury, tablice, wskaźniki, tablice wskaźników - wszystko to lepiej mi jest pisać w Mad Pascalu, bo mam wszystko o wiele bardziej przejrzyste i łatwiejsze w analizowaniu i przebudowie kodu. W assemblerze piszę procedury obsługi przerwań i niektóre procedury obliczeń, czy podmiany znaków/grafiki, animacje itp., bo to idzie często przyspieszyć i/lub uprościć w assemblerze.