Tak właśnie planuję. W swoim BASXu mam konfigurację obszarów pamięci w pliku tekstowym w postaci:
;portb:start-stop
;romram
FE:D800-DFFF
FE:E400-FFBF
FE:C000-CFFF
FE:E000-E3FF
FF:A000-BFFF
;ext130XE
E1:4000-7FFF
E5:4000-7FFF
E9:4000-7FFF
ED:4000-7FFF
...
;lowram
Na razie ta wersja nie jest jeszcze udostępniona u Kaza (z oficjalną publikacją czekam aż odpluskwię błędy i zrealizuję postawione cele), ale niedługo będzie w postaci kolejnej bety. BASX póki co jest mocno nieoptymalny i wolny.
Jeśli zaś chodzi o używanie więcej niż 64k extram to jest tu kilka problemów:
1. BXE w trybie extend wrzuca tylko kod programu do pamięci ext zostawiając pamięć podstawową na tablicę nazw zmiennych, wartości zmiennych, tablicę zmiennych indeksowanych, stos basica, pamięć obrazu i pamięć pmg. Jest mechanizm, który sprawdza czy w ext założony jest ramdysk dosa 2.x żeby z nim nie kolidować. Trzeba by ten mechanizm rozszerzyć na testowanie ramdysków innych dosów, albo jak mówisz (i co uważam za rozsądniejsze) umożliwić ręczną konfigurację pamięci (albo i to i to).
2. Adresowanie pamięci programu (podejrzewam, że używane są adresy wirtualne) jest 16-bitowe tak więc na program nie można przeznaczyć więcej niż 64KB bez rozszerzenia całego basica o adresy 24-bit (albo zmianę koncepcji adresowania bieżącego wyrażenia za pomocą adresu w pamięci na np. nr linii + mapa nrów linii na adresy 24-bit). BXE stosuje też pewien trick, który wyklucza z całkowitej ilości pamięci przeznaczonej na program do 1KB - mianowicie zakłada, że cała linia nie może być dzielona między bankami i musi być zapisana w jednym banku (pewnie przy wyznaczaniu początków wierszy określany jest bank w jakim leżą, a potem czytanie tokenów odbywa się np. lda (adr),y).
3. Można by (jak radzi Draco) trzymać też zmienne indeksowane w pamięci ext, ale wtedy nie ma co się łudzić, że będą działać USR(ADR(...)), chyba żeby w takich przypadkach przepisywać ciąg do pamięci podstawowej, albo zakładać analogicznie jak z programem, że jedna zmienna musi być cała w jednym banku czyli nie może mieć więcej niż 16KB (aktualnie zmienna może mieć max 32KB - przynajmniej w Atari BASIC). W pamięci podstawowej trzymane byłyby wtedy tylko nazwy zmiennych i ich wartości, stos basica, ekran (z dl) i pmg.
4. Modyfikacja na pewno działałaby wolniej przy porównywaniu ciągów. W pamięci podstawowej (która jest liniowa) nie ma z tym żadnych problemów bo obydwa ciągi są naraz dostępne - w bankowanej już tak łatwo nie ma i trzeba przełączać banki przy każdym bajcie. Może w tym kontekście nie warto wrzucać tablic do exta, ale kusi te 64KB... Coś za coś.
5. Trzeba by generalnie przemyśleć jakie procedury mają zostać w obszarze $A000..$BFFF a co schować w extram (BXE na cartcie ma stały bank $B000..$BFFF a przełącza na stronie $D5 pozostałe banki w obszarze $A000..$AFFF adresując komórki $D500, $D501 i $D509 - $D508 mapuje bank stały co jest nieużyteczne). W extram zajęty zostałby tylko 1 bank (właściwie to tylko 8KB).
No i zastanowiłbym się nad bootowaniem BXE - wersja 7.2 ma możliwość ręcznego wyboru boota z dysku lub kasety co w przypadku carta ma sens, ale w przypadku ładowania z konkretnego nośnika zmieniłbym to na automatyczny boot z nośnika, z jakiego BXE jest wczytywany.
Póki co to tylko przymiarki, bo nie wiem czy będzie się dało te założenia zrealizować bez utraty korzyści, jaką jest szybkość działania BXE. W przypadku BASXa już widzę, że niektóre założenia były błędne i być może nawet po wprowadzeniu optymalizacji i obliczania adresów linii nie uda się choćby zbliżyć z prędkością do standardowego Atari Basic'a.
Edit: Bank ma oczywiście rozmiar 16KB a nie 4KB.
hex, code and ror'n'rol
niewiedza buduje, wiedza rujnuje