Programowanie: Jak stwierdzić obecność SpartaDOS X oraz jego konfigurację pamięci

From Atariki

(Różnice między wersjami)
Jump to: navigation, search
Wersja z dnia 14:37, 29 wrz 2006
Mikey (Dyskusja | wkład)

← Previous diff
Aktualna wersja
KMK (Dyskusja | wkład)

Linia 1: Linia 1:
-Procedura sprawdza obecność SpartaDOS X oraz jego konfigurację pamięci.+Należy wywołać poniższą procedurę.
Wynik w akumulatorze, znaczenie poszczególnych wartości podane w komentarzach na końcu. Wynik w akumulatorze, znaczenie poszczególnych wartości podane w komentarzach na końcu.
- 
-Wersja polska niedostępna. Procedura niezoptymalizowana, majaca raczej wartosc edukacyjna 
-bez przywiazywania wagi do wydajnosci lub wielkosci kodu. (dokladnie rozpisany algorytm)  
<pre> <pre>
Linia 12: Linia 9:
; ;
-p0 equ $f0+p0 = $f0
 +fsymbol = $07EB
-sparta_detect equ *+sparta_detect
; if peek($700) = 'S' and bit($701) sets V then we're SDX ; if peek($700) = 'S' and bit($701) sets V then we're SDX
- lda $700+ lda $0700
cmp #$53 ; 'S' cmp #$53 ; 'S'
bne no_sparta bne no_sparta
- bit $701+ lda $0701
- bvc no_sparta+ cmp #$40
 + bcc no_sparta
 + cmp #$44
 + bcc _oldsdx
-; we're running SDX, find (DOSVEC)-$150 +; we're running 4.4 - the old method is INVALID as of 4.42
 + lda #<sym_t
 + ldx #>sym_t
 + jsr fsymbol
 + sta p0
 + stx p0+1
 + ldy #$06
 + bne _fv
 +
 +; we're running SDX, find (DOSVEC)-$150
- lda $a+_oldsdx lda $a
sec sec
- sbc <$150+ sbc #<$150
sta p0 sta p0
lda $b lda $b
- sbc >$150+ sbc #>$150
sta p0+1 sta p0+1
Linia 39: Linia 49:
ldy #0 ldy #0
- lda (p0),y+_fv lda (p0),y
rts rts
no_sparta lda #$ff no_sparta lda #$ff
rts rts
 +
 +sym_t .byte "T_ "
; if A=$FF -> No SDX :( ; if A=$FF -> No SDX :(
Linia 49: Linia 61:
; if A=anything else -> BANKED mode, and A is the bank number ; if A=anything else -> BANKED mode, and A is the bank number
</pre> </pre>
 +
 +== Zobacz też ==
 +
 +* [http://www.atari.org.pl/forum/viewtopic.php?id=11884 Poświęcony tej procedurze wątek] na [[Atari Area]]
 +
[[Kategoria:Niezbędnik kodera]] [[Kategoria:Niezbędnik kodera]]

Aktualna wersja

Należy wywołać poniższą procedurę. Wynik w akumulatorze, znaczenie poszczególnych wartości podane w komentarzach na końcu.

; sparta_detect.asm
; (c) idea by KMK, code: mikey
;
; $Id: sparta_detect.asm,v 1.2 2006/09/27 22:59:27 mikey Exp $
; 

p0      = $f0
fsymbol = $07EB
                   
sparta_detect

; if peek($700) = 'S' and bit($701) sets V then we're SDX

                lda $0700
                cmp #$53         ; 'S'
                bne no_sparta
                lda $0701
                cmp #$40
                bcc no_sparta
                cmp #$44
                bcc _oldsdx

; we're running 4.4 - the old method is INVALID as of 4.42

                lda #<sym_t
                ldx #>sym_t
                jsr fsymbol
                sta p0
                stx p0+1
                ldy #$06
                bne _fv

; we're running SDX, find (DOSVEC)-$150 

_oldsdx         lda $a
                sec
                sbc #<$150
                sta p0
                lda $b
                sbc #>$150
                sta p0+1

; ok, hopefully we have established the address. 
; now peek at it. return the value. 

                ldy #0
_fv             lda (p0),y
                rts
no_sparta       lda #$ff 
                rts

sym_t           .byte "T_      "

; if A=$FF -> No SDX :(
; if A=$FE -> SDX is in OSROM mode
; if A=$00 -> SDX doesn't use any XMS banks
; if A=anything else -> BANKED mode, and A is the bank number 

Zobacz też

Personal tools