Czego najlepiej trzymać się pisząc program, który chciałbym bez problemu portować na więcej pamięci, carta lub doczyt z dyskietki/dysku? Czy uniwersalne będzie, gdy program będzie korzystał z okna mającego 8KB o modyfikowalnym adresie? Potrzebuję "doczytać" w trakcie trwania programu 16KB (lub 24KB, jeżeli 16KB nie wystarczy).
Cart - ulokowany w $a000..$bfff najczęściej (choć podobno może też być w $8000..$9fff, albo zajmować obydwa obszary); jeśli program uruchamiany jest na carcie, to kod nie może sam się modyfikować (to pamięć ROM w końcu). Nic jednak nie stoi na przeszkodzie, żeby kart przepisał się do RAM i odpalił stamtąd uprzednio wyłączając ROM z obszaru $a000..$bfff (lub $8000..$9fff), ale UWAGA! elektronika carta musi takie rozwiązanie supportować (zazwyczaj przez odczyt/zapis do $d5xx). Odczyt - jeśli spod DOSa (za pośrednictwem "D:"), wtedy zakładaj, że MEMLO nie będzie niżej niż $2000 - obsługę transferu z ramdysków (okno pod $4000..$7fff), hdd czy innych urządzeń załatwia DOS więc nie ma się czym martwić. Warto odwołania do plików robić przez "D:file.ext", a nie "D1:file.ext", bo wtedy porządny DOS skorzysta z bieżącego napędu (a nie z D1). Fajnie, jak gra supportowałaby powrót do DOS. Jeśli zaś odczytujesz przez SIO (urządzenie $3x) wtedy sam określasz adres bufora danych no i sam musisz zorganizować dane na dyskietce. Ogólnym ograniczeniem dla obydwu metod jest odczyt pod ROM ($c000..$cfff,$d800..$ffff) i do XRAM ($4000..$7fff) - musisz czytać dane do bufora w zwykłym RAM poza tymi obszarami, po czym ręcznie je potem przepisywać. W obszar BASICa możesz spokojnie transmitować dane - wystarczy go "podnieść" w PORTB (bit 1=1). Obszaru na końcu pamięci $ffc0..$ffff warto nie dotykać ze względu na wykorzystanie ich przez 65c816 i/lub SDX. A no i ze względu na to, że ktoś może mieć w komputerze 816 nie warto używać nielegalnych rozkazów 6502. Używać wektorów przerwań na stronie 2 i ustawiać je przez SETVBLV ($e45c).
Edit: Warto zrobić założenie, że ktoś może mieć bootowany komputer z BASICem i go podnieść (uprzednio przełączając dlist, albo po podniesieniu ustawiając RAMTOP na $c0 i reinicjalizując E: przez close/open). Pod DOS można przyjąć, że od $2000 do $bfff jest wolny RAM (pod SDX gra raczej będzie odpalana przez X więc odłączy moduł z $a000..$bfff). Ostrożnie z operacjami na $d5xx - jeśli jest przelotowa SDX albo wbudowana to zdarza się, że odczyty z $d5xx powodują odłączenie modułu i powrót do DOS się już nie uda.
Przepraszam - z rozpędu napisałem Ci bzdurę odnośnie ładowania danych do XRAM. Oczywiście możesz ładować bezpośrednio do XRAM ustawiając odpowiedni bank w PORTB. Odczyt pod ROM tylko musi być buforowany, bo w ROMie (zazwyczaj) są procedury odczytu :) Wyłączenie BASICa w PORTB powinno też iść w parze z ustawieniem 1 w BASICF ($3f8).
ilmenit - fajnie ze sie o to troszczysz :) Zwykle tworca gry nastawia sie na dyskietke lub na carta i potem cholernie trudno jest przeniesc gre na inny nosnik.
Tak na marginesie, w tym roku Niemcy wynalezli carta, ktory stanowi olbrzymie ulatwienie w przenoszeniu gier dyskietkowych na carta. Nie mam go w reku, ale jesli dobrze zrozumialem opis, pozwala on przeniesc na cartridge prawie kazda gre, ktora korzysta ze stacji uzywajac dosa. Cart jest na tyle pojemny i ma takie mozliwosci, ze _bez koniecznosci zadnej zmiany programu_ powinno sie dac przeniesc na carta np HDM :)