1 Ostatnio edytowany przez mono (2010-04-20 12:56:53)

Ze strony jera można ściągnąć wersję 7.2 (bez dyskietki). Czy to jest najświeższa/najlepsza wersja ogólnodostępna? Od Kaza można pobrać wersję 4.1 łącznie z dyskietką, ale obawiam się że nie będzie ona pasować do wersji 7.2 (dyskietka).
Może ktoś ma komplet najświeższy i by się podzielił?

Edit: Chciałem też zapytać czy istnieje może wersja pełna nie wymagająca catrridge'a?

hex, code and ror'n'rol
niewiedza buduje, wiedza rujnuje

2

mono napisał/a:

Chciałem też zapytać czy istnieje może wersja pełna nie wymagająca catrridge'a?

Źle zadane pytanie :)
Tutaj Cart jest podstawowym nośnikiem programu. Dyskietka zawiera procedury rozszerzające możliwości interpretera i to Cart bez dyskietki będzie działał, a nie odwrotnie (głównie z powodu bankowania ROMu w carcie).

Bla bla bla bla, bla bla bla. Bla bla bla - bla - bla. Blabla bleee.

3 Ostatnio edytowany przez mono (2010-04-20 17:36:10)

Ja wiem Pecus. Ale pytanie faktycznie było zadane nieprecyzyjnie - czy istnieje wersja zhakowana gdzie program zawarty obecnie na cart'cie ładuje się np. z dysku do ram (romram/extram)? Pytam, bo namawiała mnie pewna osoba, której nicka tu nie przytoczę ;) aby zrobić pełną wersję dyskową uruchamianą np. z hdd. Stąd moje zainteresowanie, bo nie chcę pracować nad czymś co jest nieaktualne czy niekompletne. Inne pytanie brzmi: "co znajduje się na dyskietce i kiedy jest ładowane do ramu" (nie analizowałem jeszcze wersji 4.1, ale rom carta 7.2 mam zdezassemblowany)?

Edit: niegramatycznie się wyraziłem :) I znowu nieprecyzyjnie - wiem, że w wersji 4.1 ładowany jest plik "D:BASICXE.OSS" ale póki co nie wiem gdzie i co tam jest.

hex, code and ror'n'rol
niewiedza buduje, wiedza rujnuje

4

... przyznam - to nie ja pytałem :) - a Basic XE w wersji dyskowej - ŁOŁ.

Mono - istnieje możliwość zmodyfikowania działania instrukcji EXTEND tak, by interpreter używał większej niż 128k ilości pamięci ram? ... i najlepiej, by konfiguracja banków była zapisywalna do jakiegoś pliku?

Kontakt: pin@usdk.pl

5 Ostatnio edytowany przez mono (2010-04-21 10:18:04)

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