W SpartaDOS X 4.20, w banku nr 0 pod adresem $B9BD jest coś takiego:

sta dbufa
stx dbufa+1
ldy #$01
sty dunit
ldy #$31
sty ddevic
ldy #'R
sty dcmnd
ldy #$40
sty dstats
jmp jsioint

Ja się tam nie znam, ale wydaje mi się, że to może być część procedury odczytu pliku CONFIG.SYS. Jak widać, procedurka ustawia na chama odczyt ze stacji nr 1. W zwykłym OS-ie to wszystko jedno (on robi to samo), ale na ROM-ie od 65c816 to nie jest wszystko jedno, bo numer napędu do zabootowania można wybierać.

Moja propozycja brzmi, żeby na miejsce rozkazów:

ldy #$01
sty dunit

powstawiać NOP-y. Konkretnie to będzie pięć NOP-ów pod adresami od $B9C3 do $B9C7.

Czy ktoś wie o jakichś przeciwwskazaniach (za wyjątkiem prawnych)?

KMK
? HEX$(6670358)

2

Ta procedura jest używana tylko do odczytu CONFIG.SYS. Można potestować pod emu, ale chyba nie będzie problemów.
Pod 4.22 adresy są inne, sprawdzę i napiszę i też będzie można spaczować ;)

Ale nie lepiej zrobić przekierowanie na stałe stacji w SIO? Tzn. wybierasz numerek a OS zawsze podmienia 1 na wybrany? Coś jak SWAP w SDX.

3

Mam tak w sterowniku twardziela, ale jednak swobodny wybór dysku bardziej mi się podoba. Lepiej chyba, żeby DOS wyświetlał właściwy numer dysku, z którego wystartował (tj. np. D2:), zamiast zawsze D1: niezależnie od okoliczności.

KMK
? HEX$(6670358)

4

Draco? - masz jeszcze source fdisk 1.40 ?? - albo, czy ma je Lizard ?? - pytanie;- jakiś pacz do montowania dowolnej partycji (czytaj mnt.com), tyle, że coś, co potrafi zrobić np. mnt 10->3, a nie wyłącznie dla D1: (a:).. jak ma to miejsce obecnie.

Kontakt: pin@usdk.pl

5

Nie ma źródeł do FDiska. Tzn. mam coś jeszcze w Turbo Basicu, ale to jest wersja wczesna-grubo-przed-pre-alfa. ;) To co potrebujesz, to nic innego jak zamienienie inforamcji o partycjach w tablicy. Możesz sam sobie coś takiego napisać w TB. Opis tablicy partycji w Syzygy.

[ Dodano: 25.12.2004 16:16:27 ]
A tak się ma +1 do statsów na AA i Mistrza offtopicu. :mrgreen:

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

6

Tak - oczywiście Lizard. "Napisz se" ?? :D - ale po kiego wyważać otwarte odrzwia, jeśli byłoby coś w postaci source. Z drugiej zaś strony, jak dla mnie to zapewne zeszło by dni kilka; a dla kogoś - kto temat zna dokładnie - 1-2h ?? :cry: Może jednak lepszym wyjściem jest modyfikacja MNT.COM??

Kontakt: pin@usdk.pl

7

No nie mów, że wpisanie kilku poków zajmuje Ci kilka dni. :mrgreen:

Niewątpliwie wyważanie otwartych drzwi jest rzeczą co najmniej pozbawioną sensu. Sęk w tym, że te drzwi się zatrzasnęły i dodatkowo Draco zgubił klucz. ;)

Teoretycznie modyfikacja MNT.COM była by najszybszą metodą. Tylko pytanie: czy HDBIOS się nie powali jeśli zamienimy miejscami partycje o różnych rozmiarach za przykładem Pinka 3-cią z 10-tą i będziemy chcieli coś zrobić na 4-tej i dalszej? Z tego co pamiętam, to obliczenie sektora w notacji CHS poprzedzone jest obliczeniem nr-u sektora logicznego. To drugie wykonywane jest przez prostą pętlę:

S=0
FOR I=1 TO D-1:S=S+rozmiar_partycji(I):NEXT I
S=S+nr_sektora_w_partycji_D

[ Dodano: 26.12.2004 04:58:02 ]
A tak się ma +1 do statsów na AA i Mistrza offtopicu. :mrgreen:

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

8

Niezupełnie. W tablicy partycji jest zapisany numer sektora od którego partycja sie zaczyna - żadna pętla nie jest potrzebna i w rzeczy samej jej tam nie ma. Od przepinania patrycji może się pokrzaczyć tylko wewnętrzny nazwijmy to cache na sektor - trzeba zresetować jego zawartość, najlepszą metodą jest odczytanie na pusto sektora nr 1 przełączonej partycji po jej przełąćzeniu.

KMK
? HEX$(6670358)

9

Errare humanum est.

Zapomniałem o tym numerkowniu początków partycji. 8)

[ Dodano: 29.12.2004 21:50:26 ]
A tak się ma +1 do statsów na AA i Mistrza offtopicu. :mrgreen:

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

10

Pin: mnt.com wykorzystuje możliwość przekierowania dysku D1: na dowolny inny, bez mieszania w tablicy partycji. Przełączenie D3: na D10: wymaga fizycznej zamiany miejscami wpisów w tablicy partycji dotyczących dysków D3: i D10:. I oczywiście wczytania sektora nr 1 dysku D3 potem  ;)

Tak się składa, że istnieje - w źrodle MAE - biblioteka podprogramów do "niskopoziomowej" obsługi dysku. Ale nie pamiętam, czy umie zamieniać partycje miejscami.

[ Dodano: 30.12.2004 21:08:24 ]
PS. Aha, byłbym zapomniał. Źródło FDISK-a 1.40 odeszło w niebyt razem z dyskiem Maxtor, który pewnego pięknego dnia zszedł mi śmiertelnie w obecności osób trzecich i został wyrzucony do śmietnika. Moja wina, bo dysk niedomagał już od dłuższego czasu, i trzeba go było czym prędzej wymienić, a nie liczyć na zasadę nieskończoności ("no jeszcze jeden dzień chyba podziała, nie?").  :rolleyes:

PS2. Trub, co z tym SDX 4.22? Adresy się różnią?

KMK
? HEX$(6670358)

11

W 4.22 adres jest $B981 (procedura jest kopiowana do RAMu pod inny adres).

Testowałem poprawioną Spartę pod emulcem i wydaje się że:
1. Nie będzie w ogóle czytać CONFIG.SYS pod Atari OSem, bo ten zostawia początkowo DUNIT=0 :(. Zamiast NOPów trzeba byłoby dopisać kawałek kodu, który sprawdzałby, czy DUNIT=0 i wtedy ustawiałby 1, co będzie trudne bez źródeł (chyba że ma działać tylko pod DracOSem ;)).
2. AUTOEXEC.BAT dalej będzie odczytywany z D1, chyba że ustawimy inny SET BATCHem. Dotyczy to także ładowanych sterowników itp. Oznacza to, że pliki konfiguracyjne są jakby na stałe przypisane do konkretnych napędów. Nie za bardzo mi to pasuje, bo często zmieniam przypisanie dysków (w S2I).

Pod QMEgiem 4 udało mi się natomiast odpalić oryginalną Spartę 4.22 z innego dysku niż D1 dlatego, że zawsze podmieniany jest DUNIT przy wywołaniach OS SIO. Trzeba załadować DEVICE SIO2 (zachowujemy systemowe procedury SIO), wtedy CONFIG i AUTOEXEC się ładują np. z napędu 3 (Sparta widzi go jako D1: więc nic nie trzeba poprawiać). W QMEGu można zbutować z dowolnej stacji inne programy, np. gierki na dyskietkach ze stacji LDW nr 3, bez wyłączania D1 na HDD :D.

12

Kawałek kodu da się chyba dopisać, bo na końcu Sparty (pod koniec obszaru adresowego cartridge'a) widziałem kawałek wolnego miejsca. A więc zamiast:

ldy #$01
sty dunit

dalibyśmy

ldy #$01
jsr set_dunit

a pod adresem set_dunit coś takiego:

lda dunit
bne ?ret
sty dunit
?ret rts

To jest 9 bajtów, wlezie?

Co do autoexec.bat i reszty: jak to jest możliwe, żeby DOS wczytywał to z D1: bez ustawienia DUNIT na 1?

[ Dodano: 31.12.2004 01:24:30 ]
PS. Ze zmianą D1 na cokolwiek innego to i bez QMEG-a jest możliwe, bylebyś miał KMK/JŻ IDE. Ale, jak mówię, mnie to niezbyt satysfakcjonuje.

KMK
? HEX$(6670358)

13

Uff, udało mi się odpalić konfigi Sparty z D3 :D
Procedurkę set_dunit trzeba było dać do banku 1 carta, bo w czasie gdy pierwsza część kodu działa, aktywny jest ten bank (kod czytający konfig jest przeniesiony z banku 0 do RAMu). Mam nadzieję, że umieściłem ją w wolnym miejscu (od $BFC7).

Co do autoexec.bat i reszty: jak to jest możliwe, żeby DOS wczytywał to z D1: bez ustawienia DUNIT na 1?

Inna procedura wczytuje autoexeca. Konieczne jest SET BATCH = C:AUTOEXEC.BAT, żeby go odpalić oraz ew. zamiana odwołań do A: na C: przy ładowaniu sterowników.

Ze zmianą D1 na cokolwiek innego to i bez QMEG-a jest możliwe, bylebyś miał KMK/JŻ IDE

Tylko partycje - a nie da się zbutować gry ze stacji innej niż 1. Przynajmniej ja nie wiem jak :(

14

Jeśli w konfigu po DEVICE podasz nazwę sterownika bez ścieżki, to pliki poszukiwane są wg zmiennej PATH, a potem w katalogu bieżącym (standardowo przy starcie A:). Możesz zmienić PATH lub podać ścieżkę dostępu do każdego drivera. ZTCW, to SDX tylko CONFIG.SYS czyta z katalogu głównego dysku A:, reszta może być rozrzucona dowolnie (AUTOEXEC.BAT również, zresztą nawet tak nie musi się nazywać).

[ Dodano: 31.12.2004 16:35:23 ]
A tak się ma +1 do statsów na AA i Mistrza offtopicu. :mrgreen:

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

15

Aaautoexec chce się normalnie czytać z D1:
Z moich prób wynika, że dla butowania np. z D3: (C:) trzeba ustawić:
1. SET PATH=...C:;...
2. DEVICE=... (sterowniki ładowane z dysku, bez ścieżki jeśli w PATH)
2. SET BATCH=C:AUTOEXEC.BAT (opcjonalnie bez tego też zadziała)
Resztę prób zrobię już w Nowym Roku :D:D

16

Aaautoexec chce się normalnie czytać z D1:

Bo normalnie BATCH nie jest ustawiona. Dla mnie najważniejsze, by CONFIG.SYS dało się odczytać z dowolnego dysku. Reszta nie ma znaczenia - moża ustawić dowolnie.

[ Dodano: 31.12.2004 17:20:28 ]
A tak się ma +1 do statsów na AA i Mistrza offtopicu. :mrgreen:

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

17

Zaraz, zaraz, PATH jest ustawiony na A:> ? Myślałem, że na CAR:. I zdaje się w ogóle, że Sparta ma gdzieś taki standardowy CONFIG.SYS gdzieś zaszyty w sobie, i to on ustawia BATCH i tym podobne historie. Trzeba go  znaleźć, obejrzeć i też ewentualnie poprawić.

Ale to już w następnym roku  ;)

[ Dodano: 31.12.2004 17:28:08 ]
PS. Że inna procedura wczytuje autoexeca to ja się domyślam, że inna. Ale żeby go wczytać z D1:, gdzieś musi ustawiać numer napędu na 1, w ten czy inny sposób.

KMK
? HEX$(6670358)

18

Masz rację, wystarczy umieścić scieżkę do autoexec w PATH i się odczyta bez ustawiania :D
Czyli nie trzeba robić ostatniego punktu (drugiego p.2 ;)) z wcześniejszego posta.
Warunkiem jest wpisanie do PATH katalogu głównego napędu startowego (C:).

19

jak odpalisz Spartę bez dysku i zapodasz SET, to zobaczysz coś takiego:

COMSPEC=CAR:COMMAND.COM
PROMPT=D$N:
PATH=CAR:
CAR=I:CAR.SAV
BASIC=I:BAS.SAV
_01=AUTOEXEC.BAT

z ostatniej linii wynika, że AUTOEXEC.BAT odczytywany jest z katalogu bieżącego. I tak jest faktycznie. Jeśli w CONFIG.SYS zmienimy katalog, to AUTOEXEC.BAT będzie odczytany z tego nowego katalogu. Np. mam w swoim CONFIG.SYS linię: DEVICE SETPATHS C:SOURCES i bez ustawienia BATCH, AUTOEXEC.BAT jest odczytywany właśnie z katalogu C:SOURCES.

[ Dodano: 31.12.2004 17:33:46 ]
A tak się ma +1 do statsów na AA i Mistrza offtopicu. :mrgreen:

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

20

Jeszcze jedno pytanie: jeśli się poprawioną Spartę (z procedurką set_dunit, nb. miejsce na nią jest chyba zarówno w banku 0 jak i 1, bo końcówki obu są takie same) odpali np. z D3:, i tam nie będzie ani CONFIG.SYS ani AUTOEXEC.BAT, to jak jest ustawiony katalog bieżący?

KMK
? HEX$(6670358)

21

COMMAND.COM pokazuje A: :(
W banku 0 set_dunit raczej być nie może, bo gdy jest wykonywany skok JSR set_dunit, to jest włączony bank1.

22

Miałem na myśli, że może być w obu - zwłaszcza że chyba suma kontrolna cartridge'a, liczona z ostatnich kilkunastu bajtów carta, musi być taka sama w obydwu blokach (ale może się mylę).

Command.com pokazuje A: mimo że to jest C: ? Hmm, no to znaczy, że numer napędu nie jest odczytywany z DUNIT, ale ustawiany na pałę gdzieś w procedurach inicjowania DOS-u. Trzeba znaleźć w przyszłym roku  ;)

KMK
? HEX$(6670358)

23

Okazuje się, że:
1. Trzeba zapamiętać DUNIT na początku, bo może zostać zmieniony przy ładowaniu sterowników z innego dysku niż startowy.
2. Pod adresem $C5D jest bieżące urządzenie SDX ustawiane na początku na $21 (CAR: nr 1), a potem starsza połówka jest zerowana ($01). Dlatego COMMAND.COM pokazuje zawsze A:

Proponuję dwie procedury:

set_dunit ldy $C5D
          sty DUNIT
          rts

sav_dunit ldy DUNIT   *Ustawiany przez OS
          bne save
          iny
save      sty $C5D
          jmp $730E

sav_dunit jest odpalana zamiast pierwszego odczytu sektora. Nie wiem, jaki wpływ będzie miało nadpisanie $21 (zdaje się że czasami Sparta startuje z kartem jako D1:)
Z pierwszych testów wynika jednak, że jest ok. Atarka jak grzyb pokazuje C:> :D

24

$0C5D jest wskazywany przez symbol CURDEV.

Nie możesz radośnie przekopiować jego zawartości do DUNIT, bo będziesz miał, albo $21, albo $01, a powinno być $31. To samo w drugą stronę. W CURDEV stację dysków określa się przez $0x, $3x oznacza inne urządzenie.

Urządzenie, na którym wykonywana jest bierząca/ostatnia operacja zapisane jest w device ($0760). Pod tą lakacją urządzenie zapisane jest zgodnie ze standardem SDX ($0x - dysk, $2x - cart, etc.) Dlatgo należy raczej w set_dunit i sav_dunit korzystać z ego rejestru niż ddevic.

[ Dodano: 02.01.2005 16:48:02 ]
A tak się ma +1 do statsów na AA i Mistrza offtopicu. :mrgreen:

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

25

Wydaje mi się że jest tak: CURDEV jest używane przez COMMAND.COM jako bieżące urządzenie przy starcie.
Dlatego na początku (przed odczytem CONFIGa) wstawiamy do CURDEVa zawartość DUNITa (np. 03, a było w nim $21) i ta wartość jest za każdym razem używana do odczytu CONFIGa. W DUNIT mamy mieć $03 więc wystarczy przekopiować z CURDEVa. Przy starcie COMMAND.COM też używa tego rejestru, więc lądujemy w C:>.

Powinno więc być wszystko ok o ile w międzyczasie (tj. przy odczycie CONFIGa) zawartość CURDEV się nie zmieni. U mnie jest ok. Można ew. użyć innego rejestru, ale i tak pozostaje problem odpowiedniego ustawienia CURDEVa.
Podsyłam romik do potestowania.

[ Dodano: 2005-01-02 17:30:42 ]
Jak testować?
Trzeba mieć najnowszego DracOSa z wybieranym dyskiem startowym ;)
Ale lepiej pod emulcem - ustawić DUNIT samemu w monitorze (przed startem SDX).