Temat: Pamięć wewnętrzna VBXE
Zanim się użycie VBXE rozpowszechni na dobre, chciałbym zadać temat dzielenia się przez programy pamięcią tej karty. Przyszło mi to do głowy, bo robię ostatnie przymiarki przed napisaniem korzystającego z VBXE rezydenta i z pewnych powodów uśmiecha mi się załadowanie go w całości (tzn. kod i wszystko) do pamięci VBXE "MEMAC B". Chodzi o to, żeby w przypadku zajęcia kawałka pamięci VBXE inny program też chcący z niej korzystać, mógł uniknąć zniszczenia zajętego obszaru. Oczywiście dotyczyłoby to tylko tych programów, które po zakończeniu się wracają do DOS-u i/albo nie potrzebują całości pamięci VBXE, a tylko jakiejś części.
Wymyśliłem, żeby pierwszy program, który rezydentnie ładuje coś do VBXE, wpisywał pod adres $000000 jakąś magiczną wartość, a pod adres $000003 - pierwszy wolny adres w pamieci VBXE "nad" sobą. Następny pobierałby ten adres i sprawdzał, czy jest tam magic, jeśli nie, to wpisywał swój magic i swój wskaźnik do wolnej pamięci, a jeśli tak, to przeskakiwał następny kawałek, sprawdzał itd. w pętli aż do znalezienia wolnego miejsca albo końca RAM-u karty.
Jedyny problem to, że przy resecie trzeba byłoby te znaczniki pokasować, co oznacza kolejnego rezydenta, który to będzie robił i nie wiem, czy nie kładzie całej koncepcji.
W każdym razie alternatywa to trzymanie takiego rezydentnego programu w dwóch kopiach w pamięci, tzn. w ext RAM-ie normalnym, skąd przy każdym resecie przeładowywałoby się go do pamięci VBXE.
Szkoda, że MEMAC A bankuje się w obszarze $2000-$3FFF. Gdyby to było $4000-$5FFF (albo $6000-$7FFF), byłoby łatwiej napisać rezydenta, który ma kod w ext RAM-ie, ale np. pamięć obrazu w pamięci VBXE (wyjasniam dlaczego: bo programy sa "przyzwyczajone", że pod $4000-$7FFF bankuje się pamięć, więc istnieje tendencja do tego, żeby unikać umieszczania tam handlerów przerwań - a pod $2000-$3FFF takiego ograniczenia do tej pory nie było).
Wszystkie moje wywody dotyczą oczywiście softu, który działa pod DOS-em i korzysta z OS-u np. w celu wczytania directory itp.
? HEX$(6670358)