76

(69 odpowiedzi, napisanych Software, Gry - 8bit)

Skorzystaj z pierwszego przykładu podanego przez drac030 - dłuższy, ale zdecydowanie najlepszy.

Tak tez zrobilem i oczywiscie dziala bardzo ladnie.
Wlasnie mysle, jak w teorii powinien przedstawiac sie algorytm interepretowania nazwy tak, aby okreslic bezblednie sciezke, z jakiej program zostal wczytany (o czym juz sporo w tym watku mowilismy). Konkretnie wydaje mi sie, ze powinno to mniej wiecej wygladac tak (SDX odpada, bo 1. jest doskonalszy sposob (podany przez LZD) i mozna rozpoznajac dos zrobic odgalezienie do oddzielnej procedury, 2. nie jest w tym przypadku potrzebne wogole doczytywanie pliku konfig., po rozpoznaniu, ze mamy SDX, omijamy ten watek):

1. (addr),0 =(1,9) & (addr),1 =':'  (II+/D)
1a:TAK: 'D(1,9):'; @3b.
2. (addr),0 = 'D' & (addr),1 =(1,9) & (addr),2 =':' (MyDos)
2a:TAK: @1a.
3. (addr),0 = 'D' & (addr),1= ':' (MyDos)
3a:TAK: 'D:';
3b:TAK: sprawdzamy czy w dalszej czesci wprowadzonego ciagu znajdziemy jakis ze znakow specjalnych (':>/') i jesli tak, dodajemy do 'D[?]:' ciag znakow do znaku specjalnego wlacznie; powtarzamy sprawdzanie do znaku konca linii; @5.
4. Przyjmujemy domyslnie: 'Dn:' (n = $301 ora #$30); @3b.

5. Pomijajac nieistotna czesc ciagu (nazwe pliku wczytanego), dodajemy do 'D[?]:[path]' wlasciwa nazwe pliku konfiguracyjnego.

Objasnienie:
@x oznacza skok do punktu x;
kolejny punkt realizowany jest, jesli warunek postawiony w aktualnym punkcie nie moze byc spelniony;
(1,9) oznacza cyfre z tego przedzialu;
(addr) to adres pobrany z a$344.

77

(69 odpowiedzi, napisanych Software, Gry - 8bit)

Nie, moja poprawka jest uniwersalna i działa z każdym rozszerzeniem (od 128kB do 1088 kB, niezależnie od bitów przełączających).

Super robota. Mam nadzieje, ze zostanie ona uwzgledniona w opracowywanej wersji SDX.
Wniosek stad taki, ze dostep do tablicy T_ jest jednak koniecznoscia w programach uzytkowych, a nie zakladanie okreslonej konstrukcji tej tablicy.

Oczywiście przy odpowiednim zagnieżdżeniu wszystko się ładnie wysypie, więc bez przesady.

Zdaje sie jest miejsce na 16 wpisow (rowne maksymalnej liczba grup bankow). Przy zastrzezeniu, ze wpisy sie nie powtorza, nie ma obawy, ze sie wysypie.

[ Dodano: Czw Maj 19, 2005 2:00 pm ]
Problem dojscia do tablicy T_ i przetworzenia grup bankow na wartosci poszczegolnych bankow jest juz rozwiazany. Skorzystalem z podpowiedzi Truba w zlokalizowaniu danych tablicy, reszte rozwiazaly podpowiedzi Lizarda (lacznie z podanym kodem).
Obecnie probuje dodac wywolanie GR.0, ale niestety nie udaje sie to z jakis powodow. Proba wywolania konczy sie powrotem z komunikatem bledu $81.
Pierwsze skojarzenie mam takie, ze moze otwieram juz otwarty kanal (zerowy) i powinienem albo go sprobowac zamknac (pamietam, ze czytalem w TA, ze jest on zawsze otwarty i ze chyba nie mozna go zamknac), albo wywolac GR.0 z innego niz zerowy kanal (co tez nie bardzo wydaje mi sie dzialaniem poprawnym, skoro E: jest przydzielony wlasnie do kanalu 0). Co wiec robic, o ile wlasciwie interpretuje blad systemu?

78

(69 odpowiedzi, napisanych Software, Gry - 8bit)

Zapoznalem sie troszke z kodem obu procedur SDX jext_on i *off. Nie bardzo rozumiem potrzebe wszystkich dzialan jakie te procedury wykonuja. Jest to dosc nieczytelne poza korzyscia wynikajaca z samego faktu mozliwosci zastapienia indeksami wartosci kodujacych banki. Troche przypomina to strukture stosu, ale jakie moga plynac z tego korzysci nie potrafie dociec.

Natomiast dostrzeglem ciekawe rozwiazanie SDX w postaci zapewnienia temu dosowi w przypadku wylaczonego ROMu wykonywanie zawartych w nim procedur przerwan na zasadzie przylaczania na czas ich wykonywania ROMu i powrotu do stanu z wylaczonym ROMem po wykonaniu przerwan. Tak wiec pod SDX, tak to odczytuje, nie ma obawy przed dostepem do RAMu pod ROMem z uwagi na mozliwosc wystapienia przerwan, lub koniecznosci ich wylaczania na ten czas.
W trybie banked Sparta pozostawia wolny RAM pod ROMem, ale robi pewna ciekawa rzecz, mianowicie kopiuje standardowy zestaw znakow. Ciekawe, czy wogole z tego korzysta, czy to uklon w strone wygody uzytkownika, aby dostep do RAMu pod ROMem maksymalnie udogodnic.

Szkoda, ale poki co, wersja programu jaka opracowalem, nie dziala pod SDX. Nie bardzo wiem co konkretnie przeszkadza temu, ale bede jeszcze probowal dojsc przyczyny. Nie chodzi tu tez o doczytanie pliku konfiguracyjnego, o ktorym sie tutaj rozwodzilem tyle, ale o doczytanie wskazanych plikow.
Odpalam komenda X, poniewaz korzystam tez z obszaru $a000-$bfff.

[ Dodano: Nie Maj 15, 2005 1:29 pm ]

Natomiast dostrzeglem ciekawe rozwiazanie SDX...

Lizard pisal juz o tym wczesniej:

Chodzi Ci o przerwania sprzętowe ($FFFA-$FFFF)? Możesz je dowolnie wykorzystywać, ale na koniec przywróć je do stanu początkowego. SpartaDOS wstawia tam wektory procedur podmieniających RAM na ROM i wywołyjących właściwą procedurę rozpoznania źródła przerwania.

Moje gapiostwo.

Nie domyslilem sie takze, ze Sparta tworzy tablice "masek grup bankow" zawsze tak samo niezaleznie od liczby dostepnej pamieci i rodzaju rozszerzenia. Oznacza to, ze dostep do tej czesci tablicy T_ w zasadzie nie jest nam potrzebny, wystarczy podobna tablice umiescic we wlasnym kodzie.
Lizard juz o tym napominal, ze tablica ta jest gorzej przystosowana do rozszerzenia +256 typu Compo, poniewaz tylko dwa pierwsze wpisy z czterech dostepnych teoretycznie dla rozszerzenia pamieci tej wielkosci, jest takze uzywanych w Compo, a kolejne dwa juz nie (w Rambo nat. tak).
Prawdopodobnie Sparta sprawdza kolejne wpisy z T_+8 (grup bankow) i po napotkaniu pierwszej, ktora nie umozliwia przelaczenia banku, okresla wielkosc dostepnej pamieci.
Ciekawi mnie jeszcze taka rzecz, a pewnie jest to ogolnie znana sprawa, jak to sie dzieje, ze bit basica (7) jest uzywany do przelaczania bankow pamieci dodatkowej w niektorych rozszerzeniach (Compo 320, 1088), a jednoczesnie dostep do niego jest mozliwy?

Lizard w tym watku pisal tez o swojej poprawce do Sparty w zakresie wlasciwego rozpoznawania pamieci dodatkowej dla rozszerzenia typu Compo. Domyslam sie, ze jest to najprostrze rozwiazanie zamieniajace miejscami wpisy w tablicy T_ (konkretnie T+10 i 11 na T+16 i 17). Wowczas taka poprawka oczywiscie jest zasadna i uzyteczna, ale tylko dla atarek z rozszerzeniem Compo, natomiast wykorzystywanie SDX z ta poprawka przy rozszerzeniach Rambo, powoduje ograniczenie pamieci o polowe (analogiczna sytuacje jak bez poprawki dla Compo).

Musze tez przyznac racje Lizardowi i Draco, ktorzy sugerowali, ze korzystanie z "nielegalnych" dla SDX bankow, a nastepnie proba "dogadania" sie z urzadzeniem zewnetrznym, powoduje nieoczekiwane reakcje programu.
Sprawdzilem, ze wyrzucenie z programu procki rozpoznajacej dostepne banki pamieci oraz powstrzymywanie sie od uzywania "nielegalnych" bankow umozliwia prawidlowe dzialanie programu.

Wydaje mi sie, ze to musi byc jakis blad w kodzie SDX, ktory tak komplikuje korzystanie z pamieci dodatkowej. Oczywiscie moge sie mylic, ale chce niejako zasygnalizowac, ze warto byloby sie baczniej rozejrzec w kodzie w miejscach, ktore moga decydowac o takim zachowaniu SDX przy przelaczaniu bankow.

79

(69 odpowiedzi, napisanych Software, Gry - 8bit)

Ponownie ladna procedurka Lizarda, za ktora naleza sie brawa.

Rozumiem, ze jext_on i jext_off maja stale miejsce w Sparcie niezaleznie od jej wersji, co jest bardzo wazne w odniesieniu do zmiennej wartosci adresu tablicy o jaka nam chodzi. Cenne spostrzezenie.
Wewnatrz tych spartowych procedur, podejrzewam, ze dostep do adresu, odpowiednio do wersji, $906 lub $908 (T_+4), odbywa sie za pomoca adresacji bezposredniej (indeksowej Y najpewniej), bo inaczej adres tej tablicy znajdowalby sie gdzies na stronie zerowej i mozna byloby to wykorzystac.
Jext_on ustawia bank xxxx00xx (dot. watrosci >=4; zgaszone bity, to wniosek jeszcze z pierwszej procki Lizarda) z grupy bankow rozpoznanych przez Sparte i wkazanych w tablicy na wejsciu przez akumulator. Rej. X pozostawia bez zmian.
Jest_off wylacza bank aktywny (i przelacza go pewnie na bank podstawowy) oraz pokazuje na wyjsciu w rej. A indeks z tablicy odpowiadajacy bankowi wylaczonemu.

W procedurze Lizarda, liczba zapalonych bitow akumulatora na wyjsciu okresla wielkosc dostepnej pamieci. Oprocz tego ta czesc procedury mowi nam, ze bity ROM i Basica oba sa zapalone w wartosciach bankow w T_+8 (maski), co mnie tez interesowalo.

Jesli sie pogubilem we wnioskach, to przepraszam. Smiale teorie, nie zawsze sa trafne. ;)

[ Dodano: Pią Maj 06, 2005 3:09 pm ]
Odnosnie wektra DOSINI. Moja watpliwosc wziela sie ze zwyklej niewiedzy na temat znaczenia klawisza RESET w komputerze wogole. Bo sadzielem, ze ma on prowadzic w dosie do powrotu do systemu, a jest czyms wiecej, co powinna sugerowac juz sama nazwa, inicjacja systemu, czyli przywroceniem pierwotnych ustawien (MEMLO dla przykladu).

80

(69 odpowiedzi, napisanych Software, Gry - 8bit)

Istnieją dwa wektory, które należy właściwie ustawić z punktu widzenia obsługi RESETu. Są to: DOSVEC (słowo 10 czyli $a) oraz DOSINI (słowo 12 czyli $c). Po naciśnięciu klawisza RESET system operacyjny wykona skok do procedury znajdującej się pod adresem zapisanym w DOSINI.

Wlasnie sobie o tym przypomnialem, i stad pytanie, jak przygotowac procedury powrotu do dosu, skoro moze to zostac wywolane zarowno przewidziana w programie opcja wyjscia, jak i klawiszem RESET.
Nakresle pewien plan, prosze mnie poprawic, jesli cos zauwazycie nie tak.
DOSINI podmieniamy na procedure "wyjscia z programu", czyli przywracajaca sprzed wywolania programu wartosci rejestrom systemowym jakie ruszalismy. Dotyczy to takze wywolania GR.0 oraz przywrocenia wektora DOSINI. Czyli, ta sama procedura wyjscia z programu dla obu opcji wyjscia z niego. Dobrze?

Zmieniamy temat i kolejne pytanie, tym razem dotyczace Sparty, a konkretnie mozliwosci namierzenia tablicy T_ bez odwolywania sie do wersji dosa. Nie jest nigdzie zapisany adres ktoregos z elementow tej tablicy, tak aby mozna bylo przeliczajac odleglosci wzgledne "dotrzec" do interesujacych nas wpisow w tej tablicy (dla mnie istotny bylby adres masek przelaczajacych banki)?
Skad pytanie? Wersje Sparty moga byc teoretycznie rozne od podanych dwu, a wowczas adres tej tablicy staje sie niemozliwy do okreslenia. Poza tym byloby prosciej posluzyc sie w programie adresem posrednim typu ($a),y, niz wartosciami bezwzglednymi.

81

(69 odpowiedzi, napisanych Software, Gry - 8bit)

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?

82

(69 odpowiedzi, napisanych Software, Gry - 8bit)

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.

83

(69 odpowiedzi, napisanych Software, Gry - 8bit)

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?)

84

(69 odpowiedzi, napisanych Software, Gry - 8bit)

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?

85

(69 odpowiedzi, napisanych Software, Gry - 8bit)

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?

86

(69 odpowiedzi, napisanych Software, Gry - 8bit)

Draco, wielkie dzieki!

Dokladnie tego potrzebowalem. Gdyby nie ta podpowiedz, to pewnie myslalbym nad wlasna procka przywracajaca ekran do stanu wyjsciowego z wstawianiem dlisty wlacznie. Roznica potezna.

Tak tylko na marginesie zapytam, czy bajt $9b musi na pewno byc po "E:", przy otwieraniu ekranu? Wyprobowalem, ze i bez tego bajtu na koncu nazwy pliku otwieranego do odczytu (dajmy na to: "D1:PROG.OBJ"), mozna procedure CIO wywolywac z sukcesem.

87

(69 odpowiedzi, napisanych Software, Gry - 8bit)

Oddzielna procedura GR.0 istnieje? Domyslalem sie, ze moze cos w romie takiego jest, ale nie natrafilem na zadne wzmianki na jej temat.
Pewnie ustawia tez przy okazji dlisty zmienne DMACTL, SDLST i pare innych zwiazanych z wygladem ekranu?
Czy Draco miales tylko na mysli wewnetrzna dla programu procke realizujaca podobne zadanie?

88

(69 odpowiedzi, napisanych Software, Gry - 8bit)

Program, ktory zaklada w swoim dzialaniu, juz po zaladowaniu do pamieci i uruchomieniu pod Sparta w trybie Banked, doczytywanie danych do dodatkowych bankow pamieci, spowoduje zwis kompa, bo procedury odpowiedzialne za odczyt z urzadzenia zewnetrznego siedzia takze w ktoryms z bankow?

2) przywrócił przy wyjściu taką wartość PORTB, jaką zastał.

Jak technicznie moze to wygladac, skoro PORTB jest rejestem tylko do zapisu? Gdzie znalezc informacje na temat "aktywnego" banku?

Załóż po prostu, że przywracasz stan wszystkich zmiennych systemowych, w jakich twój program grzebie

Zapytam wprost, nawet takich zmiennych jak DMACTL, SDLST?

89

(69 odpowiedzi, napisanych Software, Gry - 8bit)

Wynika to z lenistwa koderów, którym nie chce się napisać prostej procedury zapamiętywania ustawień i przywracania ich na koniec.

Sedno problemu postawionego w tym watku. Ja niestety nie bardzo wiem, ktore z ustawien nalezy przywracac, a ktore spokojnie mozna pozostawic gestii DOS'u. Mysle wiec, ze nie zawsze tylko lenistwo decydowalo o takim stylu pisania programow.

Ten DOS bardzo nie lubi, gdy program sam zmienia banki. Zwis grozi, gdy SDX pracuje w trybie Banked i

W takiej sytuacji, czy programy, ktore same przelaczaja banki w trakcie swojego dzialania, moga byc uruchamiane pod Sparta? Domyslam sie, ze w ktoryms z innych trybow pracy niz Banked, ale wowczas, czy pamiec pod ROM'em moze pozostawac wolna i czy rownoczesnie memlo bez nakladek w systemie nie przekroczy granicy $2000? Obawiam sie, ze nie, a wiec czy jest jakas dobra metoda korzystania z dodatkowych bankow pamieci dla programow dzialajacych pod Sparta?
A moze to zastrzezenie, ktore tu cytuje, nie dotyczy sytuacji "przejecia" przerwan przez dzialajacy program. Wowczas wystarczyloby tylko unikac bankow zajmowanych przez Sparte, a wskazanych programowi np. w  jego pliku konfiguracyjnym.

co oznacza, jesli memlo nie bardzo mozna w programie zmienic (np. program juz krazy w obiegu), ze i tak trzeba bedzie zrezygnowac z programow rezydentnych w systemie

powyzej zamiast slowa memlo powinno byc adres ladowania programu, stad sens powyzszego zostal zle odczytany, za co przepraszam...

90

(69 odpowiedzi, napisanych Software, Gry - 8bit)

Pin dziekuje, Draco rowniez dzieki.

Draco: mialem na mysli przywracanie ustawien po skoku przez wektor $0a. Lizard ladnie opisal jak to sie ma w przypadku Sparty i II/+ i podkreslil roznice w podejsciu do problemu obu dosow. Mydos takze jest bardzo powszechnie uzywanym dosem, stad pytanie.

Wracajac do tematu programow rezydentych. Ciekawi mnie tylko, czy wiekszosc scenowych produkcji, chocby wymienie tutaj "Energy Editor", czy "TMC 1.11", ktore, zakladam, przechwytuja wektory przerwan, bardzo przeszkadza rezydowaniu w pamieci nakladkom (przypuszczam, ze moze je deaktywowac, jesli sa wywolywane przez przerwania klawiatury) i czy po powrocie z nich do dosu poprzez wektor $a, sa ponownie przez system aktywowane.

91

(69 odpowiedzi, napisanych Software, Gry - 8bit)

Dziekuje za informacje Lizard i Mikey.

Po tych wyjasnieniach, a w szczegolnosci po uwagach na temat odmiennosci dzialania Sparty, chcialbym blizej zapytac, jak ten system radzi sobie z prostymi programami uzytkowymi, na przyklad, ktore laduja sie zwykle od adresu $2000 i zupelnie nie przejmuja sie zagospodarowaniem strony zerowej powyzej $80.
Slyszalem, ze programy pod Sparte sa relokowalne, stad wzmianowane programy rezydentne, domyslam sie, bardzo czesto gniezdza sie w pamieci komputera. Przypuszczam, ze jesli memlo jest za wysokie, to program sie nie wczyta, co oznacza, jesli memlo nie bardzo mozna w programie zmienic (np. program juz krazy w obiegu), ze i tak trzeba bedzie zrezygnowac z programow rezydentnych w systemie, a przynajmniej z wiekszosci z nich (i ich wiekszej liczby jednoczesnie).
Stad chyba decydujac sie na niski adres poczatkowy programu, nie bardzo nalezy sie przejmowac koniecznoscia zachowania przyjaznych warunkow dla innych programow - rezydentnych. Takie moje przypuszczenia i ocena, nie wiem, czy mozna sie z tym zgodzic.

Innym problemem dla takiego rozbudowanego i przyjaznego programom rezydentnym systemu jak Sparta, jest chyba pamiec dodatkowa w bankach. Jesli program zaklada ich uzywanie, powiedzmy z mozliwoscia ich swobodnego wyboru, to czy Sparta jest w tej mierze sie w stanie "dostroic".

Inna watpliwosc, czy Sparta umozliwia bezproblemowe wykorzystanie pamieci pod romem (zdaje sie, ze tak, jesli jest odpowiednio skonfigurowana) i czy nie jest dla niej problemem przejmowanie, chocby na czas dzialania programu, wektorow przerwan (pewnie nalezaloby sie "doczepiac" do nich, ale czy jest to wogole dopuszczalne przy zalozeniu, ze programy rezydentne odpadaja), oraz czy mozna wylaczajac rom wpisac w lokacje $fffa-$ffff wlasciwe dla programu adresy. Nalezy moze zrobic kopie zawartosci tych adresow, a przed oddaniem systemowi sterowania, odtworzyc ich zawartosc?

Jeszcze jedno pytanie. Wracajac do tematu postawionego w temacie watku, do jakiego dosu z tych dwoch, o ktorych byla tu juz mowa, bardziej podobny jest Mydos, wedlug tylko tego kryterium?

92

(69 odpowiedzi, napisanych Software, Gry - 8bit)

Program, ktory ma konczyc sie powrotem do dosu, powinien wykonac skok poprzez wektor $0a. Tyle wiem. Chcialbym zapytac, czy istnieje jakas ustalona lista dzialan, jakimi dos przywraca pierwotne ustawienia.
Chodzi mi o wszelkie wpisy do wektorow przerwan, rejestrow. Czy dlista jest takze na nowo konstruowana, a pamiec ekranu czyszczona? Nie wiem czy przyjety jest jakis standard, czy kazdy dos robi to w innym zakresie. Moze ktos wie, bardzo bym byl wdzieczny za podpowiedz.

93

(11 odpowiedzi, napisanych Emulacja - 8bit)

Nie wiem, czy program zapisuje dane fontow wraz z naglowkiem okreslajacym miejsce ulokowania w pamieci i czy wartosc tego adresu mozna swobodnie okreslic. Jesli nie, to nalezaloby taki naglowek stworzyc, ew. skorygowac do wartosci umozliwiajacej rezydowanie w pamieci QA (szesc bajtow na poczatku pliku).
QA po wczytaniu sie, relokuje sie w dol pamieci, wedlug zawartosci memlo. Dlatego nalezaloby najpierw wczytac QA, wyjsc do dosu i dopiero teraz wykonac instrukcja typu LOA wczytanie fontow w odpowiednio dobrany obszar pamieci, po czym wrocic do QA instrukcja RUN dosa.
Adres fontow musi byc podzielny przez $400. Najlepiej zapewnic mu bezpieczenstwo umieszczajac go wysoko w pamieci i obnizajac w opcjach QA granice mozliwej do wykorzystania przez siebie pamieci. Chyba opcja nazywa sie MEMHI.
Drugi sposob. Zanim wczyta sie QA, wczytac fonty w pierwszy wolny obszar pamieci x*$400 - x*$400+$3ff, powyzej adresu wskazywanego przez memlo i podniesc memlo ponad dane fontow (x+1)*$400.

94

(11 odpowiedzi, napisanych Różne)

Dobrym pomyslem jest uwazam sama cyklicznosc tego konkursu. Warto pomyslec o zapewnieniu podobnej mozliwosci wykazania sie osobom odwiedzajacym AA. Natomiast nalezy zdac sobie sprawe z faktu, ze wiekszosc ludzi wolalaby jednak korzystac w pelni z mozliwosci sprzetu i sadze, ze raczej nalezy dopuscic mozliwosc tworzenia w asemblerze.
Nie uwazam rowniez za najlepszy pomysl skladania sie na nagrode.
Co do ograniczen regulaminu konkursu, to sa dwa wyjscia: albo wszystko co sie urodzi w miedzyczasie i zostanie zgloszone moze wziac udzial, albo okreslamy scisle tematyke i ewentualnie inne wymagania (np. maksymana ilosc uzytego kodu, dane wejsciowe i wyjsciowe w okreslonym oszarze pamieci lub rejestrach procesora).
W tym drugim przypadku wyobrazam sobie, ze mozna byloby zorganizowac konkurs na np. najciekawsza (najszybsza) procedure dzielania liczb wielobajtowych jednobajtowa, itp., czyli niezbyt zlozone w zalozeniach zadania, ale na tyle interesujace takze w aspekcie ich mozliwego wykorzystania w praktyce, aby stanowilo to dodatkowa motywacje dla potencjalnych uczestnikow konkursu.

95

(8 odpowiedzi, napisanych Software, Gry - 8bit)

Draco, a moze daloby sie zrobic jakis w miare prosty konwerter z postaci generowanej przez Dissasembler na taka, ktora bylaby do przyjecia?
Nie musi to byc nawet na Atari.
Niestety z bledami w dissasemblacji kodu niewiele mozna zrobic poza recznym poprawianiem, co takze odnosi sie do drugiego disasemblera, ktorego, z powodu wlasnie stwierdzonego przeze mnie braku na sieci, postanowilem dodac w zalaczniku. (Kiedys sciagnelem go z istniejacej jeszcze wtedy strony Holmsa).

96

(8 odpowiedzi, napisanych Software, Gry - 8bit)

Juz dziala! :)
Problemem bylo to, ze do kom. $303 za kazdym razem przed skokiem przez $e459 nalezalo zapisac wartosc $40 (odczyt), poniewaz po powrocie z procedur systemowych zapisywana jest tam wartosc 1 (zdaje sie to informacja o powodzeniu operacji).
Draco: Dziekuje za zainteresowanie sprawa i tak rzetelnie przedstawiona argumentacje. Ciekawe sa tez te podpowiedzi z drugiego Twojego postu, moze uda mi sie je zastosowac w razie gdybym uznal to za potrzebne w pozniejszym czasie.
Rowniez podziekowania dla TeBe za podeslane zrodla wlasnego loadrera.

97

(8 odpowiedzi, napisanych Software, Gry - 8bit)

Draco masz oczywiscie racje, co do problemu. To prawda rowniez, ze stawiam sie w sytuacji czlowieka, o ktorym napisales, zabierajac sie za cos na czym sie slabo znam (programowanie na atari, w szczegolnosci korzystanie z systemu).

Argumentacja jaka przytoczyles na temat potrzeby uzywania wlasciwej drogi odczytu directory jest bardzo istotna i dobrze, ze przedstawiles to tak szczegolowo.
Natomiast wyjasnie dlaczego zalezalo mi na zastosowaniu wlasnie takiej metody odczytu directory (ta procedura powyzej to tylko przyklad, docelowo jej postac ma miec inna forme - uwzgledniajaca chocby reakcje na blad).
Przede wszystkim zalezalo mi na oszczednosci miejsca na bufor dla directory (w przypadku tej motody wystarczy strona pamieci i kazdorazowe odczytywanie wskazanego sektora directory).
Zastosowanie do programu, ktory z zaloznia wspolpracowac mial z gora 63 plikami (moze to dziwne, ale pewne ograniczenia przyjalem juz w programie - zastosowane bufory dla danych). Istotny stal sie tez dostep do niektorych innych bajtow wpisu w directory poza sama nazwa pliku, celem obliczenia, moze dosc problematyczny pomysl, "sum kontrolnych", tak aby miec pewna kontrole nad zmianami w directory dysku.

W przykladzie, ktory podalem, wystarczy tylko zamienic wektor z $e459 na $e453 - dzieki TeBe za podpowiedz.

98

(8 odpowiedzi, napisanych Software, Gry - 8bit)

Ponizsza procedura odczytywac ma katalog dysku, korzystajac z systemowych procedur umozliwiajacych odczyt pojedynczych sektorow dysku.
Dziala, ale tylko na emulatorze z wlaczonym patchem na SIO. Z wylaczonym  - nie (a konkretnie odczytuje tylko pierwszy z sektorow). Wnosze stad, ze na prawdziwiej atarce rowniez.
Obsluga wektora $e459 polega tutaj jedynie na ustawieniu bajtow z obszaru $300-$30b, czy to za malo?
Podaje pelny kod problematycznej procedury do latwiejszej analizy oraz postac wykonywalna. (Zawartosc directory lokuje sie od adresu $3000).

 lda #1
 sta $301
 lda #'S'
 sta $302
 jsr $e453

 lda $2ea
 and #$20
 asl @
 asl @
 eor #$80
 sta $308
 eor #$80
 asl @
 rol @
 sta $309

 lda <dir
 sta $304
 lda >dir
 sta $305
 lda #'R'
 sta $302
 lda #$40
 sta $303
 lda #$31
 sta $300

 lda #8
 sta $ff
 lda #1
 sta $30b
 lda #$69
 sta $30a
loop jsr $e459
 lda $304
 clc
 adc #$80
 sta $304
 bcc *+5
 inc $305

 inc $30a
 dec $ff
 bne loop
 beq *

99

(12 odpowiedzi, napisanych Software, Gry - 8bit)

Rzeczywiscie, bardzo fajnie pomyslane. Gratuluje inwencji Laoo. Dziekuje Draco za objasnienie!

Dla mnie 65816 pozostawal do wczoraj zagadnieniem slabo rozumianym, dzis dzieki temu tematowi, wydaje mi sie, ze jest troche lepiej. Byla to wiec dobra okazja do przyjrzenia sie blizej temu prockowi, co moze kiedys mi sie tez przyda.

100

(12 odpowiedzi, napisanych Software, Gry - 8bit)

PHP zapisuje rejestr znacznikow na stosie. Jest to instrukcja znana juz z 6502.

Druga podana przeze mnie metoda jest chyba zla. Nie uwzglednia mozliwosci, kiedy znacznik M bylby zgaszony (akumulator 16-bitowy) w trybie natywnym. Para instrukcji PHP PLA zdejmuje wowczas dodatkowy bajt ze stosu.
Zeby to ominac potrzebna bedzie dodatkowa instrukcja po REP #$10, SEP #$20, chyba ze mialaby zastosowanie inna odmiana tej metody z SEP #$10, wowczas wystarczyloby poprawic na SEP #$30.

Albo jeszcze inaczej, zamiast REP #$10, byloby REP #$20 i dodatkowe LSR po PLA.

[ Dodano: Czw Lut 10, 2005 9:38 am ]
Przepraszam za zamieszanie.
Obie wersje sa felerne. To ten sam blad z mozliwym pobraniem ze stosu slowa zamiast bajtu do akumulatora.
Poprawka do metody pierwszej powoduje wydluzenie kodu do 14 bajtow.
Druga mozna przeksztalcic do postaci 13 bajtow:

php
rep #$20
php
sep #$20
pla
asl
asl
asl
rol
plp
lsr

Jesli wersja Laoo dziala, to oczywiscie te propozycje sa pozbawione sensu.

[ Dodano: Czw Lut 10, 2005 11:17 am ]

php
rep #$e0
php
set #$20
pla
cmp #$20
rol
plp
lsr

12 bajtow.