1

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.

2

Oto co napisano w tajemnicach atari nr 8/91 w cyklu "Jak powstaja DOSy"
Tak powinien zachowywac sie dobrze napisany DOS w teorii.

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. Powinny się w niej znajdować instrukcje uaktualniające MEMLO, HATABS oraz zamykające wszystkie lokalne pliki (RESET zamyka wszystkie bloki kontroli wejścia/wyjścia, więc nie ma możliwości zamknięcia plików na dyskietce). Wektor DOSVEC natomiast zawiera globalny adres powrotu do DOS-u, przykładowo wydanie w Basicu polecenia DOS spowoduje praktycznie skok przez wektor DOSVEC. Pod adresem wskazywanym przez słowo 10 powinny przede wszystkim znajdować się instrukcje kasujące flagi przerwania i trybu dziesiętnego (CLI oraz CLD), inicjujące stos (LDX #$ff; TXS),zamykające wszystkie pliki, uaktualniające tablicę HATABS (jeśli np. napisaliśmy bardzo ważny program w Basicu, a z bliżej nieokreślonego powodu tablica została zniszczona, to ta]de rozwiązanie może umożliwić nagranie stworzonego programu).

3

Tak to wygląda w teorii. Praktyka jak zwykle różni się i to czasem dosyć znaczie.

Powrót do DOS-a II+/D wygląda prawie jak wciśnięcie Resetu a klawiaturze: ˇ przywrócenie ekranu ˇ ustawienie MemLo na wartość początkową, tj. załadowania DOS-a, a nie sprzed uruchomienia programu :!: dzięki czemu wszystkie nakładki szlag trafia ˇ przywrócenie wektorów przerwań ˇ inne takie tam
W przypadku SpartaDOS-u, nie są przywracane wektory przerwań, ani ekran. I słusznie! Inaczej nie dałoby się zainstalować nakładek, ani zmienić ekranu na własne upodobania.

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

4

Dlatego też nie używam toporów typu DOS II+/D :) - Lzd; pytanie - gdzie Sparta X trzyma memlo ?? - sorry nie kodze normalnie, winc tylko pytam - nie bić prosze  :twisted:

Kontakt: pin@usdk.pl

5

Symbol H_Fence (adres pod SDX 4.20 - $0C67, pod innymi wersjami sprawdź moim SL.COM).

H_Fence jest tablicą 6 wektorów w kolejności: ˇ main dla systemu, ˇ ext dla systemu, ˇ main dla nakładek, ˇ ext dla nakładek, ˇ main dla programów, ˇ ext dla programów.Nie pamiętam kiedy i jak zmienia MemLo dla programów, ale jest to do ustalenia. Poza tym interesujące są tak naprawdę 4 pierwsze wartości.

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

6

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?

7

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

NIE jest za wysokie i nie jest to prawdą - pod SDX w trybie BANKED - czyli w tym, którego używa się w 99% (jak nie 100% :) ) i przy zainstalowanej całej rzeszy sterów, pierdół itp niech wynosi $1a00 - w minimalnym konfigu może oscylować około $0f00 - np. - więc do $2000 jeszcze daleko :) .


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.

w świetle tego - co napisałem powyżej nie można się z tym zgodzić


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".

wystarczy użyć stera SSDXBNK.SYS - by przenieść Sparta DOS X np. w buraki rozszerzenia 1MB - i wszystkie stare programy wykorzystujące dodatkowy ram działają bez zarzutu. :)


Inna watpliwosc, czy Sparta umozliwia bezproblemowe wykorzystanie pamieci pod romem (zdaje sie, ze tak, jesli jest odpowiednio skonfigurowana)

Wątpliwość dla systemów Sparta poniżej wersji 4.0. Sparta X przy wspomnianym stf konfigu siedzi w ext ram - zostawiając z pierwszych 64k chyba najwięcej wolnego - w porównaniu do innych. W tym ustawieniu memlo będzie miało i tak niżej niż najmniejszy z najmniejszych - tudzież DOS II+/D (jeśli się nie myle)

Co do przerwań - poprosze o wypowiedź kodera; bo ja nim nie jestem :D:D

Kontakt: pin@usdk.pl

8

Nalezy moze zrobic kopie zawartosci tych adresow, a przed oddaniem systemowi sterowania, odtworzyc ich zawartosc?

Oczywiście. To jest chyba jedyny cywilizowany sposób korzystania z wektora przerwania, niezależnie od tego, czy "wpinasz" się z własną procedurą w łańcuch dotychczas zainstalowanych procedur, czy zastępujesz wszystko własną procedurą.

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?

Według którego kryterium, bo się zgubiłem  ;) MyDOS ma MEMLO w okolicach $2000 (nie wiem dokładnie, ale raczej nie wyżej), nie ma w nim czegoś takiego jak relokowalne binaria, nie jest ulokowany w dodatkowej pamięci ...

KMK
? HEX$(6670358)

9

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.

10

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.

Generalie przestrzeń dla programów została przyjęta właśnie od adresu $2000. Nazwałbym to już tradycją. ;)

SDX również nie przejmuje się zbytnio "starszą" połówką strony 0.

Slyszalem, ze programy pod Sparte sa relokowalne, stad wzmianowane programy rezydentne, domyslam sie, bardzo czesto gniezdza sie w pamieci komputera.

Wszystkie programy będące nakładkami są relokowalne i umieszczają się, bądź są umieszczane pod adresem wskazywanym przez MemLo. MemLo po takiej operacji podnoszone jest o odpowiednią wartość (musi to zrobić Twoja nakładka :!: ).

Tak jak poprzednicy napisali. Pod SDX w trybie Banked raczej nie zdaża się, by nakładki (wszystkie razem) zajmowały pamięć powyżej $2000.

Przypuszczam, ze jesli memlo jest za wysokie, to program sie nie wczyta

Program się wczyta, ale jeśli nadpisze np. procedurę jakiegoś przerwania, to... sam sobie dopisz scenariusz :)

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

No niestety, trzeba będzie rezygnować. Wskaźnika MemLo lepiej samemu nie ruszać (nie ma potrzeby), chyba, że program ma być nakładką, wtedy należy ten wskaźnik ustawić ponad nią. Nakładki pisane specjalnie dla SDX nie muszą tego robić, wystarczy, że zmienią flagę Install na różą od zera (polecam DEC INSTALL ;) ), a system już sam zadba o zmianę wskaźnika.

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.

Nie można się z tym zgodzić. Lepiej podnieść trochę adres ładowania własnego programu niż narażać się systemowi i użytkownikowi. Big Brother is watchig you. Jak się nie będziesz przejmować, to wszyscy się na Ciebie obrażą. :P

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".

Sparta sama z siebie nie może przeskoczyć z banku do banku. Pin podał receptę na to. Jest jeszcze jeden problem z dodatkową pamięcią pod SDX. Ten DOS bardzo nie lubi, gdy program sam zmienia banki. Zwis grozi, gdy SDX pracuje w trybie Banked i: ˇ ładowany program zmienia bank ładowanym blokiem:

    .or $D301
    .by bank
    .or $4000
; kod lub dane

ˇ wywoływana jest operacja I/O urządzenia "Dn:" lub urządzeń Sparty (DSK, CON, CAR, itp.) po ręcznej zmianie banku

Inna watpliwosc, czy Sparta umozliwia bezproblemowe wykorzystanie pamieci pod romem

Gdy pracuje w trybie None lub Banked, to tak.

czy nie jest dla niej problemem przejmowanie, chocby na czas dzialania programu, wektorow przerwan

[...]

oraz czy mozna wylaczajac rom wpisac w lokacje $fffa-$ffff wlasciwe dla programu adresy.

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. Nie wszystkie programy korzystające z RAM-u pod ROM-em i zmieniające te wektory przywracają je i później są problemy (z powieszeniem kompa włącznie).

Nalezy moze zrobic kopie zawartosci tych adresow, a przed oddaniem systemowi sterowania, odtworzyc ich zawartosc?

Dobrze kombinujesz. ;) Jest to reguła we wszystkich systemach niezależnie od komputera i systemu. Program zmieiający wektory przerwań musi je przywrócić najpóźniej przy kończeniu pracy. Wyjątkiem są programy rezydentne. Ale nawet onne muszą mieć mechanizmy sprzątania po sobie na wypadek usuwania ich z pamięci (może ktoś napisze kiedyś podsystem zarządzania pamięcią w Atari).

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?

MyDOS ma najwięcej wspólnego z DOS-em 2.5. Jeśli chodzi o przerwania, to należy z nimi ostrożnie jak pod Spartą (i gdziekolwiek indziej), jeśli chodzi o dodatkową pamięć, to można zaszaleć jak pod DOS-em II+/D, najwyżej skopiesz sobie (i innym) ramdysk. 8)

[ Dodano: 22.04.2005 15:49:42 ]

Ciekawi mnie tylko, czy wiekszosc scenowych produkcji,

Większość scenowych produkcji, albo nie ma opcji wyjścia, albo wychodzi przez reset (JMP $E474). Za takie wychodzenie z programu powinni wieszać na miejscu. Wynika to z lenistwa koderów, którym nie chce się napisać prostej procedury zapamiętywania ustawień i przywracania ich na koniec. :?

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

11

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...

12

Sedno problemu postawionego w tym watku. Ja niestety nie bardzo wiem, ktore z ustawien nalezy przywracac, a ktore spokojnie mozna pozostawic gestii DOS'u.

Załóż po prostu, że przywracasz stan wszystkich zmiennych systemowych, w jakich twój program grzebie - chyba, że celem jego działania ma być zmiana ich wartości.

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?

Lizard pewnie miał na myśli to, co zilustrował przykładem: SDX nie lubi, kiedy  plik binarny zawiera sekwencję powodującą, że loader wstawia jakąś wartość bezpośrednio do PORTB, bo następuje wtedy natychmiastowe przełączenie banku pamięci i kod DOS-u po prostu znika z przestrzeni adresowej.

Natomiast jak już program się załaduje, może sobie przełączać banki pamięci jak chce, byleby spełnił 2 warunki:

1) nie uszkodził kodu DOS-u, jeśli ten siedzi w którymś z banków (jak to poznać - zob. dokumentacja do SDX)

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

KMK
? HEX$(6670358)

13

Jest jeszcze jeden problem z dodatkową pamięcią pod SDX. Ten DOS bardzo nie lubi, gdy program sam zmienia banki. Zwis grozi, gdy SDX pracuje w trybie Banked i:

    * ładowany program zmienia bank ładowanym blokiem:
      Kod:   
          .or $D301
          .by bank
          .or $4000
      ; kod lub dane   

    * wywoływana jest operacja I/O urządzenia "Dn:" lub urządzeń Sparty (DSK, CON, CAR, itp.) po ręcznej zmianie banku

O to ciekawostaka. Ja zawsze tak robie jak napisales powyzej i jeszcze nigdy mi sie nie wywalila Sparta (a wiedz, ze programy tak dzialajace wczytywalem co najmniej kilka tysiecy razy).
Wobez powyzszego przylaczam sie do pytania Maroka: jak korzystac z pamieci XMS pod Sparta zeby bylo zgodnie z prawidłami?

14

Zawsze mi się wydawało, że to zalezy od rozszerzenia pamięci. To znaczy, są takie rozszerzenia (np. 256k TOMS), których SDX nie rozpoznaje w całości, widzi np. tylko 192k. Przełączenie na bank, który Sparta "widzi", nie powoduje złych skutków, natomiast przełączenie na jakikolwiek z pozostałych powoduje zwis przy próbie odwołania się do urządzenia "D:".

KMK
? HEX$(6670358)

15

Draco: no to, ze moga byc problemy gdy probujesz cos zrobic w banku, ktorego nie ma to rzecz oczywista. Moje pytanie dootyczy sytuacji gdy ladujesz do banku, ktory napewno jest, bo np. sobie wczesniej wykryles sprytna procka, ze on jest. Czy w takim razie kolega Lizard sieje zamet czy rzeczywiscie jest jakich haczyk z ladowaniem danych/kodu do XMSu?

16

Tu nie chodzi o banki, których fizycznie nie ma, tylko o takie, które są, ale SpartaDOS X o tym nie wie. Dlatego wykrywanie sprytną procką nie ma tu wiele do rzeczy, tu trzeba DOS-owi (a nie sobie) udowodnić, że te banki istnieją  ;)

KMK
? HEX$(6670358)

17

Aaaa. To trzeba bylo tak od razu. Wiec nastepna poprawka do SpartaDOSu....

18

Już jest od dawna. :) Draco powinien to gdzieś mieć. Jak nie on, to Pinek.

Pozatym, zmiana banku agłówkiem programu jest proszeniem się o kłopoty. Nie lepiej załadować fragment pliku do pamięci podstawowej, przełączyć pamięć i wtedy przenieść dane? Ładnie, zgrabnie i elegancko. Dodatkowo możemy łatwo kontrolować banki bez ryzyka, że spróbujemy włączyć bank, którego nie ma (tym razem fizycznie).

Mnie się zawsze Sparta wiesza, gdy próbuję ładować program zmieniający banki metodą podaną przez Lewisa. Niewykluczone, że przyczyną jest moje rozszerzenie - 320 kB CompyShop. To rozszerzenie widziane jest przez SDX w połowie (8 banków zamiast 16-tu).

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

19

Hmm. Nie wiem, ale wydaje mi sie, ze u Delyego, ktory tez ma Compy Shopa jest ok, jesli chodzi o wczytywanie powyzsza metoda i o ilosc widzianych bankow.

A co do wczytywania do podstawowej pamieci i przenoszenia do XMSu. No to juz trzeba 'napisac se' procke, do tego nie proste LDA->STA w petli, bo po LDA i po STA trzeba przelaczyc znow bank, no chyba ze wczytywac np. pod $8000, ale to sie juz ekran skrzaczy jak nie ma jakiejs zmienionej DLki no i trzeba odpalac przez X.COM. Same problemy  ;)

Większość scenowych produkcji, albo nie ma opcji wyjścia, albo wychodzi przez reset (JMP $E474). Za takie wychodzenie z programu powinni wieszać na miejscu. Wynika to z lenistwa koderów, którym nie chce się napisać prostej procedury zapamiętywania ustawień i przywracania ich na koniec.

Tu chcialbym zauwazyc, ze przy wiekszych produkcjach nie ma juz do czego wracac, bo panowie koderzy sa na tyle bezczelni, ze wykorzystuja pamiec nawet od adresu $200 i wala tam 30 kilobajtow tablic no i niestety z DOSa zostaje miazga. No chyba elegantszy jest zimny start czy skok pod $e474 niz wyjscie z krzaki...

20

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?

21

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?

Mniej więcej, ale nie do końca dlatego.

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

Jak technicznie moze to wygladac, skoro PORTB jest rejestem tylko do zapisu?

Jesteś w błędzie, PORTB jest rejestrem (a nawet dwoma) i do odczytu i do zapisu.

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

Zapytam wprost, nawet takich zmiennych jak DMACTL, SDLST?

Wszystkich. Nie widzę, dlaczego akurat te dwa miałyby być wyjątkowe.

[ Dodano: 23.04.2005 09:00:34 ]

Tu chcialbym zauwazyc, ze przy wiekszych produkcjach nie ma juz do czego wracac, bo panowie koderzy sa na tyle bezczelni, ze wykorzystuja pamiec nawet od adresu $200 i wala tam 30 kilobajtow tablic no i niestety z DOSa zostaje miazga

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 ...

KMK
? HEX$(6670358)

22

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?

23

Oddzielna procedura GR.0 istnieje? Domyslalem sie, ze moze cos w romie takiego jest, ale nie natrafilem na zadne wzmianki na jej temat.

Istnieje procedura otwarcia ekranu, którą się wywołuje przez CIO:

  ldx #$00
  lda #$03
  sta iccmd,x
  lda #<ename
  sta icbufa,x
  lda #>ename
  sta icbufa+1,x
  lda #$0c
  sta icax1,x
  lda #$00
  sta icax2,x
  jsr jciomain

  ...

ename .byte "E:",$9b

W ogóle 95% funkcji systemowych dostępne jest albo przez CIO albo przez SIO, więc nie ma co filozofować (pozostałe 5% to procedury przerwań). Powyższa sekwencja wywołuje dłuższą procedurę, która otwiera ekran w GR.0, więc sam oceń, czy jest to procedura wewnętrzna, czy zewnętrzna w stosunku do programu.

Pewnie ustawia tez przy okazji dlisty zmienne DMACTL, SDLST i pare innych zwiazanych z wygladem ekranu?

Wszystkie za wyjątkiem marginesów.

[ Dodano: 23.04.2005 09:51:50 ]

Same problemy  ;)

Life is hard  ;)

KMK
? HEX$(6670358)

24

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.

25

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

Odpowiadając dokładniej na twoje pytanie: to nie jest przymus, to jest zalecenie.

KMK
? HEX$(6670358)