Wektora DOSINI nie zmieniasz. DOSINI dotyczy procedury Reset, czyli wciśnięcia klawisza, lub skoku do $E474, lub $E477. Procedura Reset ustawia wszystko sama bez pomocy użytkownika. Byłoby to wygodne rozwiązanie zakończenia programu, gdyby nie fakt, że przy okazji inicjowane są na nowo wszystkie urządzenia. A to jest już czynność co najmniej niepożądana.
Wektora DOSVEC również nie dotykasz, gdyż jest to wektor procedury powrotu do DOS-u po zakończeniu programu. Wszystkie przywrócenia systemu do stanu pierwotnego wykonujesz przed skokiem przez DOSVEC.
[ Dodano: 06.05.2005 10:20:26 ]
W SpartaDOS od 4.18 do 4.20 tablica T_ siedzi pod adresem $0902, w 4.21 i 4.22 pod $904. Niezależnie od wersji dla Atari XL/XE 4 bierwsze bajty są równe zero. Od biedy można przyjąć, że T_ zaczyna się od czterech zer. Jeśli są one pod $0902, to pod tym adresem jest właśnie początek T_, a jeśli pod $0904, to adresem jest $0904. :)
Przy czym, jest to NAJGORSZE rozwiązanie z możliwych! Ale niestety najprostsze. Nie jest powiedziane (a nawet jest pewne), że w kolejnych wersjach SDX adres nie ulegnie zmianie.
Niestety, jedynym dojściem do T_ jest odwołanie do symbolu, a jego położenie jest zmienne. Problem da się jeszcze obejść w dość prymitywny sposób:
dosvec = $0a
jext_on = $07f1
jext_off = $07f4
portb = $d301
nbnks = 29
lda (dosvec),nbnks
beq nom
lsr
lsr
pha
tax
lp0 clc
adc #4
jsr jext_on
lda portb
sta banks,x
jsr jext_off
sbc #1
dex
bpl lp0
pla
tax
lda #$ff
lp1 and banks,x
dex
bpl lp1
eor #$ff
clc
rts
nom sec
rts
Po takim zabiegu znacznik C=0 informuje, że jest dodatkowa pamięć, dla której bity przełączające ustawione są w akumulatorze (1), a grupy banków zapisane są w Twojej tabeli banks (można ją rozszerzyć do ogólnie stosowanej postaci). Jeśli C=1, to oznacza, że albo nie ma dodatkowych banków, albo wszystkie są zajęte (co na jedno wychodzi).
[ Dodano: 06.05.2005 10:40:46 ]
Lizard, jesli sie zgodzisz, to chetnie zastosuje w programie Twoja procedure
Po to je tu zamieszczam, by każdy chętny mógł z nich skorzystać, a nie tylko podziwiać. ;)