1

Temat: Jak korzystac z $e459?

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 *

2

Odp: Jak korzystac z $e459?

Przepraszam za sformułowanie, ale - gorzej ci? Nie możesz odczytać katalogu po ludzku, to znaczy przez CIO ($E456)?

KMK
? HEX$(6670358)

3

Odp: Jak korzystac z $e459?

a po co ludzie wspinaja sie na góry ? bo są  8)

*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

4

Odp: Jak korzystac z $e459?

?a ja myślałem, że to dlatego, że trudno się wspinać w doliny! }:>

[ Dodano: Pon Lut 14, 2005 00:53  ]
A tak się ma -1 do upływu dni i wieczną młodość.  :mrgreen:

5

Odp: Jak korzystac z $e459?

a po co ludzie wspinaja sie na góry ? bo są  8)

Ale nikt normalny nie pcha się w góry, zanim nie nauczy się łazić po płaskim.

Marok:

1) po pierwsze primo, nie ma gwarancji, że katalog znajduje się (albo zaczyna się) w sektorze $169. W szczególności pod SpartaDOS katalog może być gdziebądź; pod MyDOS-em od sektora $169 zaczyna się katalog główny, ale podkatalog może być gdziebądź. Że już o egzotyce (AtariDOS 3.0, AtariDOS 4.0) nie ma co wspominać.

2) po drugie secundo, nie ma gwarancji, że katalog wygląda tak, jak pod DOS-em 2.5. Znowu, pod SpartaDOS katalog jest w zupełnie innym formacie.

3) po trzecie tertio, nie ma gwarancji, że katalog zajmuje 8 kolejnych sektorów - znowu, pod SpartaDOS katalog jest plikiem, który może zajmować bardzo dużą liczbę sektorów rozrzuconych dowolnie po dysku.

4) po czwarte quarto, nawet jeśli katalog zaczyna się od sektora $169 i zajmuje osiem kolejnych sektorów, nie ma gwarancji, że sektory są równo wypełnione danymi katalogu: np. MyDOS używa tylko pierwszych 128 bajtów każdego sektora katalogu (nawet w podwójnej gęstości), a BiboDOS - przeciwnie, zawsze całych sektorów.

To są wszystko rzeczy, o które ma się martwić DOS. Przeto, jeśli naprawdę z jakiegoś powodu nie musisz tego robić w sposób skomplikowany i zawodny, to lepiej jest, wedle sentencji wypowiadającego się tu również tebe, ułatwić sobie życie i skorzystać z funkcji odczytu sformatowanego katalogu, jaką oferuje każdy DOS (via CIO, $E456).

[ Dodano: 15.02.2005 02:37:00 ]
PS. O ile mnie pamięć nie myli, bit 5 pierwszego bajtu statusu oznacza "gęstość MFM", a nie "podwójną gęstość". Nie możesz na tej podstawie wyciągać wniosków o wielkości sektora, bo gęstościami MFM są zarówno gęstość podwójna jak i średnia. Innymi słowy bit ten oznacza owszem "double density", ale w kategoriach scalaka kontrolera WD 1772 (czy kompatybilnego), a nie w terminologii wymyślonej przez Atari.

Poza tym dobrze jest sprawdzać kody błędów, jeśli coś nie działa.

KMK
? HEX$(6670358)

6

Odp: Jak korzystac z $e459?

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.

7

Odp: Jak korzystac z $e459?

To ja bym na Twoim miejscu zmienil koncepcje programu.
Minely czasy pisania kodu nie dzialajacego prawidlowo z HDD czy tez Sparta X.

Bla bla bla bla, bla bla bla. Bla bla bla - bla - bla. Blabla bleee.

8

Odp: Jak korzystac z $e459?

Przede wszystkim zalezalo mi na oszczednosci miejsca na bufor dla directory (w przypadku tej motody wystarczy strona pamieci i kazdorazowe odczytywanie wskazanego sektora directory).

Przy odczycie katalogu przez CIO możesz wcale nie użwać żadnego bufora, albo - dla odczytu rekordami - zastosować bufor o rozmiarze np. 20 bajtów.

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 ten sposób będziesz miał pełną kontrolę nad zmianami w katalogu niepełnym (bo bez uwzględnienia podkatalogów) albo w ogóle poza katalogiem. Przyznaj się, co to za program, może da się to rozwiązać lepiej.

KMK
? HEX$(6670358)

9

Odp: Jak korzystac z $e459?

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.