Wymagane ? co najmniej MyDOS.
A dlaczego akurat ten DOS?
Nie jesteś zalogowany. Proszę się zalogować lub zarejestrować.
TURGEN 9.3.0 Kolejna wersja multiplatformowego narzędzia do zarządzania obrazami taśm.
SV 2024 WE - program imprezy Już za tydzień odbędzie się zimowa edycja Silly Venture
Nowa obudowa dla 800XL - zostało 36 dni Niewiele ponad miesiąc do końca kampanii.
Zmarł twórca języka BASIC Zmarł Thomas E. Kurtz twórca języka BASIC
Zmiana serwera atari.area Serwis przeszedł właśnie ważną aktualizację infrastruktury
atari.area forum » Posty przez Lizard
Wymagane ? co najmniej MyDOS.
A dlaczego akurat ten DOS?
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ł.
Hmm, głupia sprawa, bo pod Firefoksem wylatuje to co podaje Mikey, a w tym samym czasie pod IE otwiera się właściwa strona. Pewnie Microsoft wziął hostage na tę domenę i zmusił, by otwierała się tylko pod IE. ;)
Bo to dokładnie na tę modłę było i tworząc powyższe wzorowałem sie na przytoczonym przez Ciebie oryginale.
Tytlko tu k... nikt nie chce współpracować. :twisted:
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:
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ć. :/
Nie jestem modem i inną nabjką, więc proszę pozotałych czytelników forum o nie pisanie więcej w tym wątku, gdyż postanowiłem go zamknąć, ale z powodu braku upraniwń nie mogę tego zrobić. Dlatego proszę o dostowsowanie się do mojego postulatu o nie pisanie więcej w tym wątku, gdyż wątek ten został zamknięty przeze mnie.
Dziękuje bardzo za współpracę i dostosowanie się do mojej prośby i nie pisanie już więcej w tym zamkniętym przeze mnie wątku. ;)
LDW 2000 ma gorszą mechanikę od CA 2001. I zdaje się, że to jedyna różnica pomiędzy nimi. Pomijając oczywiście wygląd zewnętrzny, cenę i zapewne wersję sterownika. :)
... żebym ja mial takie problemy.
Mogę się z Tobą podzielić. :twisted:
Współczesne procesory mają pewnie zapisane w sobue czym są. :) Takie informacje można zapewne wyciągnąć jakimś rozkazem lub grupą rozkazów. Ustalenie szybkości zegara odbywa się poprzez odpytanie chipseta o szybkość FSB i wielkość mnożnika. Sprawdzenie ilości pamięci tak samo. To są tylko przypuszczenia, bo aż tak się nie zagłębiałem. Nie sądzę, by sprawdzanie procesora polegało na testowaniu jakie rozkazy się wykonują, a jakie są nielegalne. Chociaż i to nie jest wykluczone, bo nie wszystkie modele CPU, na których może ruszyć Windows mają takie ficzery.
Widzę, że charakter forum z Atari 8-bit zmienił się na Windows logo and system properties in About box... :mrgreen:
Na zdjęciach jest 1050. Raczej nie przerobiona (tak tylko strzelam ;) ). Do tej stacji pasuje zasilacz od XF551 (stacja) i Atari 850 (4*RS232+Centronics).
Co tam. Teraz jesteśmy starsi panowie, ale choć nie to zdrowie, choć szron na głowie, to w sercach ciągle maj. :D
r0l0, ciekawe co na to gościu co już dał >200. :mrgreen: - to pewnie jego mina.
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.
I to akurat 40%. Pewnie na zlot przybędzie po spożyciu 95% i stwierdzi, że na 100% jest pijany. :mrgreen:
Nie wiem co zapisane jest w rejestrze, ale procesor i pamięć chyba nie. U mnie przy wyświetlaniu włąściwości systemu pojawia się całe okienko, a dopiero po dłuższej chwili namysłu procezsor, zegar i pamięć. Wygląda to tak, jakby testował za każdym razem ( :?: ).
Wersja systemu na pewno jest zapisana w rejestrze, ale nie wiem czy w postaci takiej jak jest pokazywana na ekranie. Może jest to kod wersji?
Wracając do tematu. Najlepsze motody opierają się na specyfikacji systemu i dlatego proponuję jeszcze jedną metodę odczytu klawiatury:
; Initialize reading
ldx #$50 ; open IOCB for Keyboard
lda #$03 ; IOCB open
sta $0342,x ; ICCMD (char)
lda #<kb.id
sta $0344,x ; ICBUFA (ushort)
lda #>kb.id
sta $0345,x
lda #$04 ; open for reading
sta $034A,x
jsr $E456 ; JCIOMAIN
; ...
; some code here
; ...
kb.id .by "K:" 0
; Keyboard reading
getc ldx #$50
lda #$07 ; IOCB get bytes
sta $0342,x
lda #$00
sta $0348,x
sta $0349,x
jmp $E456
; Called by exit() function
kbcls ldx #$50
lda #$0C ; IOCB close
sta #0342,x
jmp $E456
Po wyjściu z GETC kod ATASCII znajduje się w akumulatorze.
Powyższą metodą będziemy mieli pewność, że klawiaturę poprawnie odczytamy zawsze, niezależnie od wersji systemu i jego położenia w pamięci (oczywiście pewne adresy muszą być zachowane, np. tablica skoków).
:!: Więcej :!:
:!: Jeśli ktoś przeniesie system operacyjny z Atari na Commodore, to powyższy kod ruszy bez żadnych zmian. :!:
[ Dodano: 15.11.2004 11:35:21 ]
(choc choroba nie mam clicka po nacisnieciu.... badam sprawe).
My Ci zawsze dobrze doradzimy. :) Przy mojej klik musi być!
Nie, by bym napisał DoS. To nie będzie podsystem obsługi dysków, ale system ładowany z dysku. Wyczuwasz, tę subtelną różnicę?
Yhh, to ja zaczynam czarno widzieć tego DOS-a...
A Ty myślisz, żę poco Casper pisze własne sterowniki do Twojego HDD? To nie będzie Dos, a dOS. :D
Tia. I bardzo uprościło Tobie i wielu innym wychodzenie z programu przez JMP $E474.
Rozumiem, że Twój post, to przyzanie się, że nie potrafisz korzystać z funkcji systemu operacyjnego? :oops:
Jurgi: make me understand, co takiego ma w sobie 2.0f czego nie ma 2.0, że go tak bardzo polecasz?
Coś ściemniasz, hebanowy Pinku. ;)
No tak, tak często z tego korzytam, że aż zapomniałem, że obrazek jest pod monitorem. ;)
lda $d20f - bit 3 skasowany, znaczy ze wciśnięto jakiś klawisz. and #$04 eor #$04 beq *+4 - jeśli nie naciśnięto to powrót z podprocedury
I żeś babola strzelił, bo nie bit trzeci, tylko drugi. I po co to EOR #$04? Po wciśnięciu klawisza:$D20F = $FB; potem AND #$04 i akumulator = 0; EOR #$04 sprawi, że akumulator = 4 i BEQ nie skoczy, a procka wyjdzie jakby klawisz nie był wciśnięty. Nie żebym się czepiał, ale pamiętam, że błędy w przykładach bardzo utrudniały mi kiedyś naukę asma. ;)
hmmm... - użyteczne przy własnych procedurach, jeśli mam kod w pamięci RAM pod ROM'em - a ja z tego nagminnie kożystam Very Happy
Niom, i tylko wtedy, choć jest prosty sposób na przełączanie ROMu na RAM i z powrotem bez ryzyka padu kompa. Opis w Syzygy #7.
Generalnie jestem zwolennikiem korzystania z tego co oferuje system: ˇ po co wyważać otwarte drzwi
ˇ system zrobi to samo co my, i to bez pisania dodatkowego kodu (vide 1)
ˇ system jest sprawdzony i raczej trudno natrafić na błąd (vide 1)
ˇ system, wbrew opini Krógera, nie jest po to by go olewać, bo vide 1
Jurgi ma rację. Logo i dane o licencji można ustawić w rejestrze, każdy WinTweaker to potrafi, ale wersję systemu, zegar i ilość pamięci raczej fotchłop lub inny pain.
Masz jmp a nie jsr, więc powrót nastąpi za miejsce, w którym napiszesz jsr gets. ;)
jsr gets
bmi error ; tutaj wróci jmp $E456 z GETS
...
gets ldx #$00 ; kanał #0
...
; tutaj procedurka podana wcześniej
jmp $E456 ; GO ;)
BMI ERROR nie wzięło się przypadkowo, bo gdy nastąpi błąd lub user wciśnie Break, to znacznik N będzie ustawiony, a rejestr Y będzie zawierał numer błędu (w przypadku uzycia klawisza Break - 128, $80). Dodatm tylko, że wszystkie systemowe numery błędów są większe od 127 (mają ustawiony najstarszy bit) i są zwracane w rejestrze Y.
atari.area forum » Posty przez Lizard
Wygenerowano w 0.062 sekund, wykonano 18 zapytań