26

Casper, nie wrzeszcz.

Po pierwsze, tabela wektorów z której skorzystał Lizard, jest oficjalna, skoki przez nią są "legalne". A to w przeciwieństwie do JSR $F302.

Po drugie, nie jest bynajmniej prawdą, jakoby nielegalne skoki typu JSR $C642 czy to co wyżej, działały na wszystkich wersjach systemu: na systemie rev. A, tej od Atari 400/800, oczywiście nie będą działać. Czyli pewnie na dobrej połowie atarynek świata.

Po trzecie, że coś działa na QMEG-u, to żaden argument, bo QMEG nie jest kompilowany ze źrodeł, jest to zwykły ROM przerobiony w ten sposób, że wycięto niektóre procedury (NOP-ami i zerami wstawionymi tu i ówdzie do image'u ROM-u) a na to miejsce wrzucono procedury własne. To i nie dziwne, że akurat GETCHAR czy w ogóle większość procedur została na swoim miejscu.

Po czwarte, to jest chyba jakaś atarowska choroba, która dotyka też koderów na ST: uporczywa i niczym nie uzasadniona wiara, że bieżąca wersja systemu operacyjnego jest OSTATECZNA. To znaczy, że nikt nigdy nie usiądzie i nie przygotuje nowej - a w przypadku ROM-u XL/XE jest to dla dobrego kodera zajęcie na tydzień, wliczając 5 dni na zdobycie całego źrodła. Nic więc niemożliwego.

Po piąte, nie mogę wprost uwierzyć, że ty nie możesz sobie wyobrazić, jak wygwiździście wręcz UPIERDLIWE jest, podczas preparowania nowego ROM-u ze źrodeł, dbanie o to, żeby jakieś procedury zostały na tym samym miejscu. A to dlatego, że wielkość procedur się może zmienić, jedna może się skrócić, na drugą może być potrzeba więcej miejsca. Ale, k***a mać, takiego GETCHAR nie można ruszyć z miejsca, i trzeba zostawić trzy wolne bajty bez sensu nad nim albo pod nim, albo omijać je bezsensownym skokiem, bo atarowskim "specjalistom" nie chce się korzystać z tablic wektorów.

KMK
? HEX$(6670358)

27

Draco ma absolutną rację. Po to wymyślono tablicę skoków, żeby z niej korzystać. Byli tacy, co nie chcieli i teraz trzeba używać np. Translatora żeby odpalić stare programy :?
Moim zdaniem używanie bezpośrednich skoków do bebechów systemu powinno być ograniczone do mocno uzasadnionych przypadków.

QMEG [...] jest to zwykły ROM przerobiony w ten sposób, że wycięto niektóre procedury [...] a na to miejsce wrzucono procedury własne. To i nie dziwne, że akurat GETCHAR czy w ogóle większość procedur została na swoim miejscu.

Wydaje mi się, że założeniem twórcy QMEGa było zachowanie maksymalnej kompatybilności z programami korzystającymi z "nielegalnych" skoków do środka systemu. Dorobił on nawet punkty początkowe procedur w miejscach, gdzie znajdowały się one w OS A. Dlatego część programów dla 400/800, które krzaczą się w XL OS, działa pod QMEGiem bez problemu.

28

No może i tak. Ale taka polityka powoduje, że niedługo pół ROM-u trzeba będzie wypełnić takimi skokami. Już utrzymanie adresów XL OS-u to jest marnotrawstwo miejsca, a przecież są w nim tez jakieś wynalazki z 400/800. Efekt jest taki, że mozna byłoby mieć ładny pusty obszar np. trzystu bajtów na jakies rozszerzenie, a w rzeczywistości jest to rozrzucone w stu miejscach po trzy bajty, kompletnie nie do użytku.

Pod tym względem największa porażka to pakiet matematyczny, ale akurat w przypadku reszty ROM-u tak nie musiałoby być. Ehhh, szkoda słów  :?

KMK
? HEX$(6670358)

29

proszę bardzo - wstaw sobie to do procki TeBe lub Lizarda - albo mojej

Akurat wszystkie moje przykłady (2 sztuki + poniższy) są z klikiem klawiatury.

I TO NAPISAŁA OSOBA, KTÓRA UŻYWA TYLKO LEGALNYCH I ELEGANCKICH SKOKÓW Z TABLICY SYSTEMU OPERACYJNEGO.

Proszę bardzo. Oto procedura korzystająca w sposób legalny z tablicy wektorów obsługi urządzeń i nawet z tablicy skoków:

getc ldx #'K
     jsr $E486   ; JNEWDEVC
     lda $031A,x ; HATABS
     sta $80
     lda $031B,x
     sta $81
     ldy #$05
     lda ($80),y
     pha
     dey
     lda ($80),y
     pha
     rts

Jeśli nie podoba Ci się każdorazowy skoko do JNEWDEVC, to pamiętaj, że HATABS jest w RAM-ie i w każdej chwili może być zmieniona (nawet w czasie działania programu, niezależnie od niego).

Funkcja działa dokładnie tak samo jak pierwsza przedstawiona przeze mnie.

Jeśli chcesz wiedzieć, to CIOLIB opisywane w Syzygy #7 korzysta z powyższej metody dla funkcji FGETC i GETC. Dla analogicznych FPUTC i PUTC są prostsze metody.

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

30

Lizard: z ostatnim przykładem siem zgodze. Jest elegancki i w 100% kompatybilny praktycznie z każdym systemem. Ale z tym 1-szym jest tak samo jak z moim jsr $f302.

"Kliku" nie było w procce TeBe. Więc sorki Lizard - sam przecież o tym pisałeś. Ślepota nie boli.

Ze źródłami OS-ROM'u Atari niepowinno być problemu, gdyż gdzieś je mam - w postaci *.M65 (Mac65).

Dokładny i szczegółowy opis wszystkich procedur systemu operacyjnego - nie tylko wejścia wyjścia też posiadam - wygrzebywałem je tylko dla celów HiDOS'a, gdyż gdyby nie fakt że dobrze wiem, iż system operacyjny powinien kożystać tylko i wyłącznie z legalnych skoków z tablicy skoków, to bym sie w to w ogóle niebawił. Dla mnie wystarczy to co jest i robie tak jak robie. Natomiast dla systemu operacyjnego zamierzam robić w jak największym stopniu "legalnie". Jak już pisałem, jeśli bede miał jakiś dylemat, czy użyć coś w jakimś stopniu "nielegalne" wykożystywanie OS'a, to zapodam pytanie i opre siem na tym co ludzie mówią!!!

ps. niemówiłem o tabeli, tylko o tym:

 
getchar lda $E425 
        pha 
        lda $E424 
        pha 
        rts 

odp. 1

a to jest nielegalne i NIE jest "1legalne" czy "udokumantowane"- tak jak moje jsr $c642 czy jsr $f302 czy jsr $f556 (...) - to co napisał, odczytując te wartości z bezpośrednio z tabeli HATABS, to jest legalne!!! Ja również mogę odczytać to z tabeli HATABS dodać jeden i zmodyfikować swój kod dynamicznie. Wyjdzie na to samo. Chyba że w jakimś "nowym" OS'ie zmieni się sposób komunikacji w tych procedurach.

odp. 2

używając adresów $c642, $f302, $f556, etc. zreguły piszę programy dla XL/XE z 64kB RAM'u - (z RAM'em pod OS-ROM). Chyba w większości przypadków jest że wiara ma rev. B OS-ROM'u.

odp. 3

chyba większość systemów jest w ten sposób pisana - że jest modyfikacją OS-ROM rev. B

odp. 4

no cóż.. Niewiem jak inni, ja postaram się już niekożystać z tych skoków.
Zęby to co napiszę działało ok.

odp 5

mogę sobie wyobrazić. Problem rozwiąże się jak Pasiu wprowadzi w życie ROM 512kB dla 65c816 - wtedy obszar $c000 - $ffff można "poświęcić" na wypełnienie NOP'ami i skokami JSR do "nowego" ROM'u.


A autor QMEGA - postarał sie o zgodność z 400/800, a zapomniał o ludziach XL/XE i zgubił "nowe urządzenia" - czyli nie w te stronę to w drugą. ale mniejsza z tym.

pakiet matematyczny - niestey fakt - porażka. ktoś, kto przerobił go kiedyś przyspieszając go znacznie - umieścił reszte kodu na miejscu zestawu znaków międzynarodowych. Draco może w nowym ROM'ie dla 65c816  zrobisz jakąś tablice skoków na przyszłość.

W związku powyższym mam kilka pytań:

czy warto przerobić AtariOS-ROM rev. B (800XE, 1985-03-01) wyżucając z niej obsługę C:, zestaw międzynarodowy i SelfTest'a, celem dodania obsługi obu tabeli partycji dla IDE KMK? Z posiadaczy IDE KMK i tak z innego OS-ROM nikt niekożysta - chyba, że jest to nowy  DracOS dla 65c816.

czy odczyt klawiatury w podany PRZE ZEMNIE SPOSÓB jest wkońcu legalny, czy też mam go nieużywać - w RAM'ie pod OS-ROM inaczej sie nieda, chyba ze przeskoczymy do zwykłej pamięci włączymy OS-Rom "odwołamy" się do CIO i powrócimy do programu w pamięci pod ROM'em. (roche długie i dla mnie bezsensowne marnowanie pamięci, ale coż).

getchr equ *

 lda $d20f 
 and #$0c 
 eor #$0c 
 bne *+4 
 clc 
 rts 
 ldy $d209 
 lda ($79),y 
 ldx #$50 
 stx $d40a 
 stx $d01f 
 dex 
 dex 
 bpl *-8 
 sec 
 rts

W Linii poleceń HiDOS'a chciałem zrobić obsługę np. historii poleceń, tylko że jeżeli użyję "E:", to bede ograniczony - nic niebede mógł robić jak OS'ROM czeka na naciśnięcie klawisza. Więc pytanie: Czy można zrobić w ten sposób, że kod klawisza odczytuję sobie po "swojemu" (tzn. jak wyżej), a wyświetlam poprzez E: lub bezpośrednio w pamięci ekranu - tylko że bezpośrednio w pamięci ekranu, to znowu nieda sie używać XEP80 - jeśłi ktoś tego używa. Więc pytam się za wczasu - może coś w rodzaju ładowalnego modułu - jeśli ktoś chce, to do wszystkiego używa zwykłego "E:" (lub własnego sterownika "E:" (np. QuickEdit) lub "mojego" z bezpośrednim dostępem do pamięci ekranu i klawiatury z rozszeżonymi funkacjami klawiatury - np. historia poleceń - pytam za wczasu. żeby potem niebyło.

O kurde - ktoś sobie zadał proste pytanie na forum (jak czytać klawisze w ASM), a tu niezła burza wyszła nt. (nie)legalnego używania procedur OS'u  :lol:

FAQ: Cegła waży kilogram i pół cegły. Ile ważą dwie cegły ? :D

JIL 4EVER!

31

Lizard: z ostatnim przykładem siem zgodze. Jest elegancki i w 100% kompatybilny praktycznie z każdym systemem. Ale z tym 1-szym jest tak samo jak z moim jsr $f302.

No niezupełnie. Od $E400 do $E44F masz tablicę wektorów do sterowników urządzeń obsługiwanych w ROM-ie. Ta tablica jest tam zawsze, w każdej wersji systemu. W związku z tym skok przez te wektory zawsze zrobi to samo: jak w powyższym przykładzie, wczyta bajt z systemowej klawiatury (tej przyczepionej przez producenta do Pokeya). Natomiast twoje JSR $F203 czy też np. JSR $F2FD już nie, te skoki będą działać albo nie w zależności od wersji systemu. Dlatego to drugie jest nielegalne, a to pierwsze jest, bo użyta jest tabela wektorów zdefiniowana przez producenta.

Tej metodzie można zarzucić jedynie tyle, że nie uwzględnia możliwości podmiany sterownika. Ale też jest to legalna metoda wywołania sterownika systemowego (a nie każdego zainstalowanego), więc nie dziwne.

Ze źródłami OS-ROM'u Atari niepowinno być problemu, gdyż gdzieś je mam - w postaci *.M65 (Mac65).

Dzięki, ja mam w MAE i to w dwóch wersjach (zwykły i 65c816).

chyba większość systemów jest w ten sposób pisana - że jest modyfikacją OS-ROM rev. B

To chyba tylko z lenistwa. Poza tym co to za argument, że wiekszość, skoro najwyraźniej nie wszystkie.

mogę sobie wyobrazić. Problem rozwiąże się jak Pasiu wprowadzi w życie ROM 512kB dla 65c816 - wtedy obszar $c000 - $ffff można "poświęcić" na wypełnienie NOP'ami i skokami JSR do "nowego" ROM'u.

Zgadza się, jak będzie 512k ROM-u, to można będzie sobie pozwolić na różne cuda, w tym wypełnienie obszaru $C000-$CFFF i $D800-$FFFF skokami JML jeden obok drugiego. Ale na razie tak nie mamy.

pakiet matematyczny - niestey fakt - porażka. ktoś, kto przerobił go kiedyś przyspieszając go znacznie - umieścił reszte kodu na miejscu zestawu znaków międzynarodowych. Draco może w nowym ROM'ie dla 65c816  zrobisz jakąś tablice skoków na przyszłość.

Ja myślę, że dla nowego pakietu matematycznego (tego do 512k ROM-u) będzie można użyć któregoś z przerwań COP nie bawiąc się już w tablice skoków. Przerwania są wektorowane przez RAM, więc co za wygoda, jeśli trzeba przejąć jakieś wywołanie. Na razie natomiast przeżyjemy jakoś na starym, zwłaszcza że nie jest on chyba tak znowu często używany :D

czy warto przerobić AtariOS-ROM rev. B (800XE, 1985-03-01) wyżucając z niej obsługę C:, zestaw międzynarodowy i SelfTest'a, celem dodania obsługi obu tabeli partycji dla IDE KMK?

A bo ja wiem? Musisz się zastanowić, ile osób zdecyduje się na wymianę ROM-u (i uwiązanie się do twojej wersji na stałe) przy instalacji twardego dysku.

Przypominam, że nowy interfejs ma 3 kilo ROM-u: może obsługa jednego i drugiego się tam zmieści. Jeszcze żadnej nowej wersji sterownika nie ma, która by tego używała, 1.5 jest dla starego interfejsu.

czy odczyt klawiatury w podany PRZEZEMNIE SPOSÓB jest wkońcu legalny, czy też mam go nieużywać

Masz na myśli odczyt z rejestru klawiatury? No a dlaczego miałby być nielegalny w sumie. Najwyżej kiedyś program przestanie działać, jak zmieni się adres tego rejestru (bo ktoś przestanie w tym celu używać Pokeya) :D

w RAM'ie pod OS-ROM inaczej sie nieda, chyba ze przeskoczymy do zwykłej pamięci włączymy OS-Rom "odwołamy" się do CIO i powrócimy do programu w pamięci pod ROM'em. (roche długie i dla mnie bezsensowne marnowanie pamięci, ale coż).

Oj tam kilkanaście bajtów możesz odżałować. Umieść je w buforze magnetofonu, i tak jest przeważnie pusty :D

W Linii poleceń HiDOS'a chciałem zrobić obsługę np. historii poleceń, tylko że jeżeli użyję "E:", to bede ograniczony - nic niebede mógł robić jak OS'ROM czeka na naciśnięcie klawisza.

A co chcesz robić w tym czasie?

Co do pytań "czy można": wszystko można, tylko że jak się omija system, to potem to albo nie działa z nowszym sprzętem, albo coś tam. W sumie do zrobienia historii poleceń nie potrzebujesz omijać E:, czy też K:, bo to chyba jest kwestia nadania pewnym klawiszom znaczenia, i odpowiedniej interpretacji w tym duchu tego, co zwraca system.

Też bym w życiu nie uwierzył, że na systemowym E: da się zrobić pełnoekranowy edytor, i to w dodatku wygodny, gdybym nie widział tego w MAE. Więc da się. Czyli historię pewnie też się da korzystając z systemowych urządzeń.

KMK
? HEX$(6670358)

32

W Linii poleceń HiDOS'a chciałem zrobić obsługę np. historii poleceń, tylko że jeżeli użyję "E:", to bede ograniczony - nic niebede mógł robić jak OS'ROM czeka na naciśnięcie klawisza.

A co chcesz robić w tym czasie?

Pewnie ścigać się z userem. Czy user zdąży wcisnąć następny klawisz, czy ja szybciej zgadnę i wyświetlę na ekranie. :D

[ Dodano: 16.11.2004 15:45:26 ]
Casper: jak już Draco wspomniał, "legalna" jest nie tylko tablica skoków pod $E450, ale też parę innych rzeczy. Np. pamięć od $0000 - $05FF, $E000 - $E44F, $FFFA - $FFFF. ;)

Zientara zrobił błąd podając adresy procedur systemowych. Każdy myśli, że jak WZ napisał, to moż skakać do $Fxyz i zawsze będzie działać. :/

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

33

Ale bez Zientary byłoby ciężko. Więc są tego wady i zalety.

KMK
? HEX$(6670358)

34

Mówi się, że to co dla jednych zaletą, dla drugich wadą.

Zaletą jest dla ludzi mądrych - potrafią skorzystać, wadą - dla pozostałych. :twisted:

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

35

Główne procedury systemu są wywoływane poprzez tablicę skoków. Oznacza to, że adresy ich są jednakowe we wszystkich wersjach Atari. Pozostałe procedury mogą mieć w niektórych wersjach systemu nieco odmienne adresy. Przed ich wykorzystaniem należy zawsze sprawdzić, czy znajdują się one w podanym tu miejscu.

Czyli nie można winić Zientary, ale tych co nie doczytują wszystkiego ;)

36

Główne procedury systemu są wywoływane poprzez tablicę skoków. Oznacza to, że adresy ich są jednakowe we wszystkich wersjach Atari.

Jasne, że nie można winić Zientary za to, że książka, którą przepisywał zawiera błędy. ;) Zwróć uwagę, że mowa tu o głównych procedurach. Funkcje wskazywane przez wskaźniki zawarte w tablicy wektorów obsługi urządzeń nie są procedurami głównymi. Dostęp do nich wszystkich uzyskuje się przez skok do $E456. Dla operacji na pojedyńczych bajtach jest to jednak rozwiązanie najwolniejsze i dlatego stosuje się wektory pod $E400. Dla przykładu odczyt/zapis pliku na dysku:
wykonanie BGET #kanał, adres, długość spowoduje wywołanie przez główną procedurę CIO (tę w ROM-ie) procedury odczytu/zapisu pojedynczego bajtu przez sterownik dyskowy (czyli DOS). DOS sprawdza wtedy, czy rzeczywiście chodzi o jeden bajt, czy cały blok. Jeśli blok, to przeprowadza transmisję całości, a następnie poprzez modyfikację rejestrów systemowych oszukuje CIO tak, że ta myśli, że już wywołała Get/Put Byte odpowiednią ilość razy. Gdyby nie ta sztuczka, to byśmy sobie czekali i czekali. Nawet najszybszy twardziel niewiele by tu pomógł.

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

37

Hmm, ale jak się jedno, drugie i trzecie ma do siebie? Bo jakoś nie widzę związku pomiędzy błędami w książce, tablicą wektorów a tym, co DOS robi przy transmisji bloku danych.

KMK
? HEX$(6670358)

38

To, że koledzy, którzy lubią skoki na lewo stali się nagle purystami, gdy chodzi o wytykanie cudzych pomyłek i "lewackości". ;)

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

39

Jak zwykle obracasz kota ogonem  :lol:

KMK
? HEX$(6670358)