26

Odp: Powrot przez wektor $0a

Tu się chyba np. Music Protracker 2.4 nie zalicza, a też wychodzi przez JMP $E474, bo się autorowi GR.0 zawołać nie chciało ...

No nie. Sa wyjatki.... :)

27

Odp: Powrot przez wektor $0a

bo się autorowi GR.0 zawołać nie chciało ...

No, a taki np. SI to nie przywraca pierwotnego koloru tła tylko ten cholerny niebieski...  :twisted:

28

Odp: Powrot przez wektor $0a

To nie SI, tylko GR.0. :P

Nazwę pliku dobrze jest czymś zakończyć, a znak $9b świetnie się do tego nadaje.

Znak końca moża pominąć, gdy urządzenie nie obsługuje nazw plików (E:, K:, S:, P:) lub, gdy po nazwie można zorientować się, gdzie jej koniec (np. fname.ext - rozszerzenie 3-znakowe). Należy tylko zwrócić uwagę, by zaraz za nazwą nie było znaku ">" (MyDOS i SpartaDOS) lub "" (tylko SpartaDOS X). Inaczej sterownik "D:" uzna naszą nazwę za nazwę katalogu, a śmiecie za nią za nazwę naszego pliku. Tak więc jeśli nie chcemy mieć popularnych w Windowsach błędów przepełnieia bufora :mrgreen: , to lepiej kończyć nazwę bezpiecznym $9B lub chociaż wartością 0.

Zawsze mam rację, tylko nikt mnie nie słucha.

29

Odp: Powrot przez wektor $0a

No, a taki np. SI to nie przywraca pierwotnego koloru tła tylko ten cholerny niebieski...  :twisted:

Oczywiście, że przywraca pierwotny niebieski, bo taki kolor jest zdefiniowany przez sterownik "E:".

Jeśli chcesz, żeby ci SI przy wyjściu ustawiało inny kolor, to musisz zmienić wektor OPEN dla "E:" i skierować go na coś, co wywoła procedurę systemową, a po powrocie ustawi takie kolory, jakie sobie życzysz, i dopiero wtedy odda sterowanie do programu.

Wtedy też od razu zobaczysz, które programy wywołują GR.0 przez skok do CIO, a które bezpośrednim skokiem do sterownika przez wektory w ROM-ie  ;)

KMK
? HEX$(6670358)

30

Odp: Powrot przez wektor $0a

Po niekrotkiej przerwie, chcialbym jednak wrocic do tematu. Mam wciaz powazne watpliwosci jak sobie poradzic z obsluga dodatkowych bankow, a nie bardzo potrafie znalezc rekomendowana przez Draco dokunentacje do SpartaDOS na sieci (powinna byc tu: http://my.en.com/~russg/, ale maja przegladarka mi tam nic nie wyswietla).

Pojmuje problem z uzywaniem dodatkowych bankow pamieci w ten sposob, ze Sparta nie rozpoznaje wszystkich dostepnych uzytkownikowi bankow, przez co proba dostania sie do nich poprzez "reczne" przelaczanie i probe doczytania do nich danych z urzadzenia zewnetrznego powoduje zwis kompa. Dochodzi do tego problem umiejetnego pomijania w programie tych bankow, ktore zajete sa przez Sparte.

W takiej sytuacji, czy program dzialajacy wg. ponizszego scenariusza ma szanse dzialac pod Sparta w trybie banked?:

1. Zapamietanie aktualnie aktywnego pod Sparta banku.
2. Wybor banku wolnego i widzianego przez Sparte.
3. Wczytanie z urzadzenia zewn. danych bezposrednio do wybranego jak wyzej banku.

Przy powrocie do Sparty przywrocenie, wraz z innymi ustawieniami, poprzedniej zawartosci $d301.

Dodatkowo chcialbym dopytac, czy bank podstawowy jest zawsze pozostawiany wolnym do wykorzystania, czy nalezy zalozyc, ze Sparta moze tam cos waznego przechowywac?

Jeszcze pytanie odnosnie otwarcia E:. Zawartosc ICAX1 i 2 pewnie okresla tryb otwarcia ekranu, czy moglym zapytac jakie konkretnie znaczenie przypisane jest tym zmiennym?

31

Odp: Powrot przez wektor $0a

W takiej sytuacji, czy program dzialajacy wg. ponizszego scenariusza ma szanse dzialac pod Sparta w trybie banked?:

1. Zapamietanie aktualnie aktywnego pod Sparta banku.

SpartaDOS zawsze przed oddaniem programowi sterowania włącza bank podstawowy (PortB = $FF), więc nie zdążysz zanotować dodatkowego banku. 8)

2. Wybor banku wolnego i widzianego przez Sparte.
3. Wczytanie z urzadzenia zewn. danych bezposrednio do wybranego jak wyzej banku.

To da się zrobić, choć mogą być łatwe do obejścia problemy z różnymi wersjami SDX. Obecnie są dwie w użyciu: 4.20 (cartridge sprzedawany legalnie lub piracko w Polsce) i 4.22 (przywędrowała do nas w postaci pliku obrazu).

W Twoim przypadku różnica polega na różych adresach tablicy T_. W 4.20 jest to $0902, w 4.22 - $0904. Jej budowa jest następująca: ˇ 4 bajty - informacja o bankach w Atari 400/800, dla serii XL/XE są tam zera
ˇ 1 bajt - bank podstawowy (przeważnie $FF)
ˇ 1 bajt - 0 (nie znam znaczenia)
ˇ 1 bajt - bank, w którym Sparta trzyma swoje bebechy
ˇ 1 bajt - 0 (nie znam znaczenia)
ˇ 16 bajtów - maski przełączające banki
ˇ 1 bajt - maska bitów przełączających banki
Wyjaśnienia wymaga przedostania pozycja. Twórcy SpartaDOS-u wyszli z założenia, że ilość banków jest zawsze podzielna przez 4 (4, 8, 12, 16, 32 i 64), przy czym bity 2 i 3 PortB zawsze odpowiedziale są tylko i wyłącznie za przełączanie pamięci. Dlatego też, nie ma potrzeby sprawdzania dla jakiej ich kombiacji bank istnieje, bo istnieje dla każdej. Jeżeli istnieje %xxxx00xx, to na pewno obecne są również: %xxxx01xx, %xxxx10xx i %xxxx11xx.

Nie wszystkie bajty z tablicy masek są wykorzystywane w każdym systemie. Jeśli komputer ma 128 kB pamięci, to informacja o dodatkowych bankach zapisana jest w pierwszym bajcie, 192 kB - w dwóch, 256 kB - w trzech, 320 kB - w czterech, 576 kB - w ośmiu, 1088 kB - w szesnastu. Informację o ilości baków odczytasz spod adresu DPEEK(dosvec)+29. Jeśli SDX jest w trybie None lub Osram, to będzie tam liczba podzielna przez 4, jeśli Banked, to mniejsza o jeden, ponieważ Sparta po zajęciu dodatkowej pamięci zmniejsza jej dostępną ilość (to samo robi np. RAMDISK.SYS, sprawdź np.: RAMDISK.SYS I: 4 i zobacz ile zostanie wolnych banków). W moim przypadku (320 kB) w None i Osram jest tam 16, w Banked - 15.

Jak z tego korzystać? Najprościej ponumerować sobie banki od 0 do ilości dostępnych banków-1. Chcesz włączyć konkretny bank:

t_   =   $0902           ; (lub $0904, gdy SDX 4.22)
portb =  $D301

     lda portb           ; zapamiętujemy bieżący bank
     pha

     ldy newbank         ; nr banku (0 - liczba dostępych banków-1)
     tya                 ; obliczamy nr "grupy" banków
     lsr
     lsr
     tax

     tya                 ; obliczamy nr banku w "grupie"
     and #%00000011
     tay

     lda t_+8,x          ; "składamy" maskę bitową dla PortB
     ora bnkingrp,y
     eor portb
     and t_+24
     eor portb
     sta portb

     jsr doit            ; robimy co swoje na dodatkowej pamięci

     pla                 ; przywracamy pierwotny bank
     sta portb

     ...

bnkingrp .by %00001100 %00001000 %00000100 %00000000

Kawałek "składający" maskę jest modyfikacją fragmentu procedury Sparty przełączającej banki. Nie sprawdzałem jej, ale powinna działać. :)

Kod nie jest specjalnie skomplikowany. Kombinacje eor; and; eor i wcześniejsze mają służyć obliczeniu takiej wartości dla PortB, by zmieniły się tylko bity odpowiedzialne za dodatkową pamięć. Dzięki temu, przełączanie banków nie włącza/wyłącza Basica, czy systemu. Powinno się to przydać, gdy zamierzasz odłączać rom.

Przy powrocie do Sparty przywrocenie, wraz z innymi ustawieniami, poprzedniej zawartosci $d301.

Spróbuj zapomnieć o przywróceniu PortB, to bardzo szybko sobie przypomnisz. 8)

Dodatkowo chcialbym dopytac, czy bank podstawowy jest zawsze pozostawiany wolnym do wykorzystania, czy nalezy zalozyc, ze Sparta moze tam cos waznego przechowywac?

Sparta niczego nie przechowuje w tym obszarze. Wszystko co jest jej niezbędne znajduje się poniżej MemLo.

Jeszcze pytanie odnosnie otwarcia E:. Zawartosc ICAX1 i 2 pewnie okresla tryb otwarcia ekranu, czy moglym zapytac jakie konkretnie znaczenie przypisane jest tym zmiennym?

Dokładnie. W ICAX1 określasz kierunek przepływu danych: 4 - odczyt, 8 - zapis, 12 - odczyt i zapis. Urządzenie "E:" jest połączeniem ekranu (wyjście) i klawiatury (wejście), więc zawsze ustawia się go w tryb dwukierunkowy (12 w ICAX1). ICAX2 określa tryb graficzny dla ekranu (urządzenie "S:") . Ponieważ otwarcie "E:" implikuje tryb 0, to ten rejestr można spokojnie pominąć.

Zawsze mam rację, tylko nikt mnie nie słucha.

32

Odp: Powrot przez wektor $0a

Precyzyjna i pelna odpowiedz, dziekuje.

Przydatnosc procedury jest oczywiscie duza. Musze jednak wyjasnic, ze planowalem rozwiazac problem okreslania dostepnych uzytkownikowi bankow w sposob zdecydowanie bardziej prymitywny.
Otoz myslalem nad zrzuceniem odpowiedzialnosci na wyznaczenie bankow niedostepnych dla programu, na uzytkownika, poprzez odpowiednie przygotowanie pliku konfiguracyjnego, doczytywanego tuz po uruchomieni programu. Wczesniej tylko typowa procedura rozpoznajaca wszystkie dostepne banki pamieci dodatkowej tworzylaby ich tablice, z ktorej to eliminowane bylyby banki obecne wlasnie w pliku konfiguracyjnym.
Moze nie jest to rozwiazanie optymalne dla uzytkownikow Sparty, ale sadze z analizy odpowiedzi, ze do zaakceptowania.

W tablicy t_ nie odnajduje pozycji, gdzie wskazane bylyby banki zajmowane przez Ramdysk. Moze jest to zapisane w innym miejscu, a moze jest to rozwiazane w ten sposob, ze banki zajmowane sa "od tylu" tablicy bankow, a wiec nie mozna swobodnie dobierac bankow dla Ramdysku.

Przed powrotem do Sparty, nalezy rozumiem przywrocic tym samym zawartosc banku podstawowego (z tablicy t_, $FF zwykle). Inna zawartosc banku podstawowego moze zaistniec w jakich okolicznosciach i czy wowczas istotnie bank $FF bedzie do dyspozycji uzytkownika?

33

Odp: Powrot przez wektor $0a

W tablicy t_ nie odnajduje pozycji, gdzie wskazane bylyby banki zajmowane przez Ramdysk.

[...]

banki zajmowane sa "od tylu" tablicy bankow, a wiec nie mozna swobodnie dobierac bankow dla Ramdysku.

Dokładnie. Banki zajmowane są ZAWSZE od końca tablicy. Uwalnia to system od trzymania dwóch wartości: pierwszego wolnego banku i liczby wszystkich banków. Wystarczy tylko jedna - liczba dostępnych.

Nie sądzę, by swobodne dobieranie banków, było aż tak niezbędne. Wg mnie nie ma znaczenia w jakiej kolejności przełączane są banki jeśli przypisane sa im indeksy zamiast warości wpisywanych do PortB.

Otoz myslalem nad zrzuceniem odpowiedzialnosci na wyznaczenie bankow niedostepnych dla programu, na uzytkownika, poprzez odpowiednie przygotowanie pliku konfiguracyjnego, doczytywanego tuz po uruchomieni programu.

A co jak użyszkodnik zapomni o stworzeniu takiego pliku. :P Poza tym, nie jest to bezpieczne ze względu na ramdysk (nie tylko pod SDX; dotyczy to również MyDOS-a i DOS-a II+/D).

Wydaje mi się, że w SpartaDOS ma najlepiej rozwiązane zarządzanie dodatkową pamięcią ze wszystkich systemów atarowskich. Przede wszystkim nie musisz sprawdzać, czy i jakie rozszerzenie jest zamontowane oraz jakie wartości przełączają pamięć.

Przed powrotem do Sparty, nalezy rozumiem przywrocic tym samym zawartosc banku podstawowego (z tablicy t_, $FF zwykle).

Zauważ, że w mojej procedurze przed przełączeniem banku jest

lda portb
pha

a na końcu

pla
sta portb

To wystarczy, by nie martwić się o przywracanie na koniec właściwego banku. Oczywiście przechowywanie takich informacji na stosie jest tylko przykładem. Równie dobrze może to być strona zerowa lub dowolna komórka pamięci poza zakresem $4000-$7FFF, ale to chyba jasne. :D

Inna zawartosc banku podstawowego moze zaistniec w jakich okolicznosciach i czy wowczas istotnie bank $FF bedzie do dyspozycji uzytkownika?

Normalnie jest to $FF. Nigdy nie spotkałem się, by bank podstawowy był zmieniany, ale jak pod T_+4 wpiszesz co innego niż $FF, to to będzie bankiem podstawowym. Jednak nie polecam takich eksperymentów, bo np. Turbo Basic (używa pamięci pod ROM-em) i MAE (korzysta z dodatkowej pamięci) wieszają komputer. Reszta, która używa tylko pamięci podstawowej (nie miącha w PortB) działa.

Zawsze mam rację, tylko nikt mnie nie słucha.

34

Odp: Powrot przez wektor $0a

A co jak użyszkodnik zapomni o stworzeniu takiego pliku.  Poza tym, nie jest to bezpieczne ze względu na ramdysk (nie tylko pod SDX; dotyczy to również MyDOS-a i DOS-a II+/D).

Mysle wiec, ze program powinien przypominac o tym, czy plik konfiguracyjny zostal odnaleziony i doczytany (ewentualnie tez informowal, jakie z bankow zostaly wylaczone z uzywania). Mam nadzieje, ze banki zajmowane przez ramdysk uzytkownik bedzie w stanie w jakis sposob sam ustalic (nie mam wiedzy, czy to zawsze mozliwe). Zamierzam dolaczyc do programu tak skonstruowany plik konfiguracyjny, ktory wylaczy z uzywania wszystkie mozliwe banki dodatkowej pamieci (poniewaz program wcale ich do pracy nie bedzie potrzebowal). Poza tym rzecz jasna dokladny opis budowy takiego pliku, aby latwo bylo go samemu sporzadzic. To oczywiscie nie jest rozwiazanie optymalne dla uzytkownikow Sparty, ale nie chcialbym ograniczac mozliwosc uzywania programu jedynie do srodowiska tego DOSu.
Niestety wybor takiego rozwiazania rodzi jeszcze jeden problem dosc powazny. Mianowicie okreslenie sciezki z jakiej zostal wczytany program, poniewaz slusznym zalozeniem wydaje sie szukanie pliku pomocniczego do programu w tym samym miejscu, co sam program.
Chyba znalazlem sposob na rozwiazanie tego problemu, poprzez posluzenie sie adresem bufora nazwy wprowadzonej poprzez E: (kanal 0 IOCB). Nie mam jeszcze opracowanej procedury analizujacej wprowadzona nazwe i wyodrebniajacej sciezke prowadzaca do pliku (trzeba uwzglednic mozliwosc uzycia roznych separatorow dla oznaczenia podkatalogow), ale sadze, ze jest to rozwiazanie dobre.
Wymusza to tylko koniecznosc uruchomienia programu w dosie, poprzez E:, a nie jakims menadzerem plikow.

Przed powrotem do Sparty, nalezy rozumiem przywrocic tym samym zawartosc banku podstawowego (z tablicy t_, $FF zwykle).

Zauważ, że w mojej procedurze przed przełączeniem banku jest

lda portb 
pha 

a na końcu

 
pla 
sta portb

Mozna jednak chyba zalozyc, ze na 99,9% jest to na pewno bank $FF (niezaleznie czy to Sparta, czy inny DOS)?

Chcialbym jeszcze z ciekawosci zapytac, w jakim porzadku Sparta umieszcza w obszarze tablicy T_ "masek przelaczajacych banki", rozpoznane kombinacje aktywujace przelaczanie bankow pamieci. Chodzi mi o to, czy kody grup bankow (po 4) uszeregowane sa wg. swoich wartosci np. od najstarszego do najmlodszego w tej tablicy, czy nie ma takiego porzadku? (A co z bitami OS i Basica, czy sa ustawione czy zgaszone w tych maskach przelaczajacych banki?)

35

Odp: Powrot przez wektor $0a

Niestety wybor takiego rozwiazania rodzi jeszcze jeden problem dosc powazny. Mianowicie okreslenie sciezki z jakiej zostal wczytany program, poniewaz slusznym zalozeniem wydaje sie szukanie pliku pomocniczego do programu w tym samym miejscu, co sam program.

żaden problem. Wystarczy (SDX), że program poszukuje pliku poprzez "D:" - i jeśli zostanie uruchomiony np. z "D5:trolljaskiniapałaprogram.com" - to ta właśnie "ścieżka" będzie traktowana jak "D:"  :)  :D  :D  :D

ADRES: pin@atari.pl - konto zlikwidowane. Aktualny adres: pin(at)atari8.info

36

Odp: Powrot przez wektor $0a

W MyDosie mozliwe jest wczytanie programu nie "wchodzac" do podkalogow (np. D1:MSX:BRULL.COM). D: w tym czasie moze wskazywac na zupelnie inna sciezke, niz ta, spod ktorej wczytany zostal program.
Zapoznawalem sie dzis troche z dokumentacja SpartaDOS X i wynika z niej, ze takze mozliwe jest wczytanie programu ze sciezki roznej od biezacej.
Mozna ewentualnie przyjac, ze nalezy tak ustawic sciezke, aby wskazywala na miejsce, w ktorym znajduje sie plik konfiguracyjny programu. Tylko, ze bedzie to mala niedogodnosc dla uzytkownika.

37

Odp: Powrot przez wektor $0a

Z tym, ze chyba kazdy w zmiennej 'path' w Sparcie ma biezacy katalog...
Z moich obserwacji wynika (byc moze to przypadek, wynikajacy z mojej sciezki przeszukiwania), ze np. jak jestem na D3: (lub C: jak kto woli) i uruchomie QA, ktory jest u mnie w katalogu B:>PROG> to nie znajdzie on swojego pliku konfiguracyjnego. Ale jesli ten plik bedzie w katalogu glownym partycji B: to juz go znajduje (chociaz ja domyslnie jestem na C: ). Moze tu byc jeszcze jedna zagwozdka, ktora wlasnie mi do glowy przyszla. Otoz Sparta zapamietuje aktualna sciezke dla kazdrgo Dx:. A Wiec jesli bym wykonal taki ciag insrukcji:
B:
CD PROG
C:
CD JAKIS>KATALOG>
QA
i plik QA.SET bylby w katalogu B:>PROG> to by prawdopodobnie Sparta go znalazla.

38

Odp: Powrot przez wektor $0a

SpartaDOS X ma mechanizm zwany szlakiem poszukiwań. Jest to zmienna środowiskowa PATH, w której zapisane są katalogi, w jakich szukany jest otwierany plik (nie koniecznie wykonywalny). Polecenie OPEN #1,4+32,0,"D:twojplik.dat" spowoduje przeszukanie wszystkich katalogów zawartych w zmiennej PATH (od pierwszego do ostatniego), a na końcu katalogu bierzącego i otwarcie podanego pliku z katalogu, w którym został znaleziony jako pierwszy.

Np.
PATH=c:dos;b:programy;e:gry
Plik twojplik.dat znajduje się w katalogach: b:programy, e:gry i w katalogu bieżącym, czyli tym, w którym zajdowałeś się w momencie uruchomienia programu (np. a:moje).
Wykonanie powyższego OPEN spowoduje otwarcie pliku twojplik.dat z katalogu b:programy.

Oczywiście nie musi to być wcale ten plik, o który Ci chodziło, bo program, który go otwiera był uruchomiony przez polecenie np. c:dostoolstwojplik. Aby sprawdzić pod SpartaDOS X (tylko ta wersja!) z jakiego katalogu został uruchomiony plik należy wykonać poniższy kod:

; Przepisanie urządzenia, ścieżki i nazwy uruchomionego programu
; pod adres wskazany przez rejestry AX

auxptr =   $15
device =   $0761
name   =   $0762
path   =   $07A0

g.path sta auxptr
       stx auxptr+1
       ldy #0
       lda #'D
       sta (auxptr),y
       iny
       lda device       ; urządzenie z jakiego został uruchomiony program
       ora #$30         ; przerabiamy na jego nr ;)
       sta (auxptr),y
       iny
       lda #':
       sta (auxptr),y   ; mamy już Dn:

       iny              ; teraz przepisujemy ścieżkę
       lda path-3,y
       sta (auxptr),y
       bne *-6
       cpy #3           ; jeśli program uruchomiony z bieżącego katalogu,
       beq ?skp         ; to brak ścieżki
       lda path-4,y     ; jeśli z wykorzystaniem szlaku poszukiwań,
       jsr ckspec       ; to brak '' lub '>' na końcu ścieżki
       beq ?skp
       lda #'>
       sta (auxptr),y

?skp   ldx #-1          ; przepisujemy nazwę
?cn    inx
       cpx #8
       bcs ?id
       jsr ?cc          ; przenosimy znak nazwy
       bne ?cn

?id    lda #'.          ; kropka rozdzielająca nazwę od rozszerzenia
       sta (auxptr),y
       iny

       ldx #8
?ce    inx
       cpx #12
       bcs ?in
       jsr ?cc
       bne ?ce

?in    lda #0
       sta (auxptr),y
       rts

?cc    lda name,x
       sta (auxptr),y
       iny
       cmp #$20         ; sprawdzamy, czy spacja (koniec nazwy)
       rts

ckspec cmp #'<
       beq *+8
       cmp #'>
       beq *+4
       cmp #'
       rts

Jak widać procedura nie robi nic szczególnego. Przepisuje tylko urządzenie, ścieżkę i nazwę pliku w formie strawnej dla OPEN. Wskaźnik auxptr może być umieszczony pod dowolnym adresem na stronie 0 ($15 jest dobrą lokalizacją nie kolidującą, ani z systemem, ani z ew. inymi zmiennymi pragramu).

Powyższa procedura jest lekką modyfikacją procki umieszczonej w Config Selectorze. Tam jest nieco krótsza, gdyż korzysta z paru procedur Sparty, który tu nie można użyć ze względu na ich "ruchomy" charakter ze względu na wersję.

O wiele łatwiej jest ustalić ścieżkę pod MyDOS-em, czy dyskową wersją SpartaDOS-u. Tak jak marok dobrze kombiuje, można skorzystać z adresu bufora kanału 0 CIO.

[ Dodano: 03.05.2005 00:23:15 ]
Lewis, QA jak i wszystkie "inteligentne" programy próbujące zgadnąć skąd zostały wczytane wykładają się pod SpartaDOS-em i MyDOS-em. To dlatego, że odczytują tylko numer urządzenia z DUNIT ($0301) i wstawiają go pomiędzy "D" a ":". ;) Pod MyDOS-em "Dn:" oznacza katalog główny dysku n, a pod Spartą katalog bieżący tego dysku.

Jeśli pod Spartą jesteś w katalogu D3:ZRODLA, w zmiennej PATH masz wstawiony katalog z QA, powiedzmy Twój D2:PROG, a katalogiem bieżącym dla dysku D2: będzie akurat D2:GNIOT, to QA będzie szukał pliku QA.SET w katalogu bieżącym dysku D2:, czyli D2:GNIOT.

Po MyDOS-em (drzewo katalogów takie samo jak w powyższym przykładzie ze Spartą), QA zawsze będzie szukało QA.SET w katalogu głównym dysku D2: i nie pomogą tu kombinacje z "CHDIR".

Zawsze mam rację, tylko nikt mnie nie słucha.

39

Odp: Powrot przez wektor $0a

No to czyli to co napisalem. Czyli po prostu programy typu QA szukaja w biezacym katalogu napedu z ktorego zostal odpalony program. A jako, ze zazwyczaj nie zmieniam sciezki dla D2: to szuka w katalogu glownym...

40

Odp: Powrot przez wektor $0a

Tak, ale napisałeś to jako przypuszczenie, a ja przejrzyście naświetliłem temat. ;)

Z QA problem rozwiążałem kategorycznie - nie używam. :D Do Panthera z koleji naisałem krótki "skrypt" odpalany zamiast programu:

cd b:applspanther
x b:applspanther

Z tym, ze chyba kazdy w zmiennej 'path' w Sparcie ma biezacy katalog...

Katalog bieżący zawsze jest sprawdzany na końcu. Chyba, że się go dołączy gdzieś w środku lub na początku PATH. (W przeciwieństwie do takiego za przeproszeniem MS-DOS-a, gdzie katalog bieżący sprawdzany jest przed PATH.)

Zawsze mam rację, tylko nikt mnie nie słucha.

41

Odp: Powrot przez wektor $0a

ICAX2 określa tryb graficzny dla ekranu (urządzenie "S:") . Ponieważ otwarcie "E:" implikuje tryb 0, to ten rejestr można spokojnie pominąć.

Istotnie, otwarcie "E:" implikuje tryb 0, procedura otwarcia edytora w ciemno ustawia rejestr DINDEX na 0, bez patrzenia do ICAX2. Ale CIO kopiuje wcześniej ICAX1/2 na stronę zerową, a to z niej mają korzystać sterowniki w stylu "E:". Sterownik, który jest w ROM-ie nie zagląda pod ICAX2Z, ale nie można przewidzieć, jaki sterownik kto napisze w przyszłości. Zostawienie w ICAX2 i ICAX2Z wartości losowej (czyli nieustawienie ICAX2Z) zmniejsza ilość bajtów IOCB i ZIOCB, jakie mogłyby być wykorzystane dla przyszłych rozszerzeń systemu.

A ponieważ zrobienie LDA #$00 / STA ICAX2 (albo STZ ICAX2) nie kosztuje dużo, wobec tego proponuję mimo wszystko zerować ICAX2 przy otwieraniu edytora. Taka mała wprawka z eleganckiego programowania  ;)

KMK
? HEX$(6670358)

42

Odp: Powrot przez wektor $0a

Lizard, jesli sie zgodzisz, to chetnie zastosuje w programie Twoja procedure na rozpoznawanie sciezki, z ktorej zostal wczytany program pod SDX. Drobne dopasowanie jej do potrzeb programu bedzie wymagac jedynie podmiany tej czesci, ktora odpowiada za wpis nazwy pliku.
Z drugiej strony plik konfiguracyjny potrzebny jest mi tylko po to, aby ustalic zabronione z dostepnych bankow pamieci, a pod SDX mozna byloby z powodzeniem sie bez tego obyc, o czym pisales. Niemniej tej przewagi SDX nad innymi dosami raczej nie bede wykorzystywal, chociaz przyjrze sie mozliwosciom wplecenia odpowiednich poprawek w kodzie programu i jeszcze sie nad tym glebiej zastanowie (musialyby istniec rownolegle dwa sposoby korzystania z bankow w programie).
Starsze wersje Sparty (3.x) chyba nie bedzie mozna uzywac z programem korzystajacym z RAMu pod ROMem, a wiec separatory katalogow charakterystyczne dla tego tylko dosu mozna odrzucic.

Poza tym mialbym jeszcze takie pytania:
Sa jeszcze, poza MyDosem i Sparta, dosy umozliwiajace tworzenie katalogow na dysku?
Pod MyDosem uzywa sie separatora ":" dla oddzielenia katalogu i tylko ten znak jest w uzyciu?

43

Odp: Powrot przez wektor $0a

Pod MyDosem uzywa sie separatora ":" dla oddzielenia katalogu i tylko ten znak jest w uzyciu?

Z tego co mi wiadomo, separator ">" jest wspólny dla MyDOS-a i wszystkich wersji SpartaDOS.

KMK
? HEX$(6670358)

44

Odp: Powrot przez wektor $0a

Dokladnie i w celu wygodnego pisania najlepiej wlasnie tego uzywac, bo zadowala i Sparte i MyDosa. Innych DOSow z obsluga podkatalogow brak (jak narazie ;) ).

45

Odp: Powrot przez wektor $0a

Zapomniałeś jeszcze do DOS-ie XE. ;) Ale czy ktoś go używa? Niemniej istnieje, więc i jego należy uwzględnić. Na szczęście separatorem katalogów również jest ">".

Aha, DOS XE nie nadaje sie do użycia w twardym dyskiem, chociaż jego file system obsługuje "duże" dyski (nie paamiętam, czy 16 MB czy mniej).

Zawsze mam rację, tylko nikt mnie nie słucha.

46

Odp: Powrot przez wektor $0a

No wlasnie, nawet nie wiedzialem, ze ma to podkatalogi... Bo nie uzywalem... ;)

47

Odp: Powrot przez wektor $0a

Zawsze myślałem, że filesystem DOS XE obsługuje dyski tylko do 360k. Ale nawet gdyby więcej, to chyba i tak nie da się zapisać struktury katalogu bez uprzedniego formatowania, nie ma żadnej dokumentacji, no i filesystem SpartaDOS-u i tak jest lepszy  ;)

KMK
? HEX$(6670358)

48

Odp: Powrot przez wektor $0a

..i tu ciekawostka. Graphisc Op. System v2.0 poprawnie widzi podkatalogi dosa XE, lecz z formatem Sparta coś już nie bardzo. Pomimo, że istnieje jakiś enigmatyczny ster dla SDX... diamond.sdx(!) - w gnatach wygląda jak plik dla X'a.

A wydawało się, że wyjście do dosa - to taka prosta rzecz :)

ADRES: pin@atari.pl - konto zlikwidowane. Aktualny adres: pin(at)atari8.info

49

Odp: Powrot przez wektor $0a

Patrząc na niektóre programy dochodzi się do wniosku, że nie ma takiej prostej rzeczy, której nie można byłoby spieprzyć.

KMK
? HEX$(6670358)

50

Odp: Powrot przez wektor $0a

A wydawało się, że wyjście do dosa - to taka prosta rzecz

To jest akurat prosta rzecz. Tyle, że wątek wyewoluował na inny temat. ;)

Zawsze mam rację, tylko nikt mnie nie słucha.