Programowanie: Jak stwierdzić obecność SpartaDOS X oraz jego konfigurację pamięci
From Atariki
(Różnice między wersjami)
Wersja z dnia 06:41, 1 paź 2006 Miker (Dyskusja | wkład) (Programowanie: Jak stwierdzic obecność SpartaDOS X oraz jego konfiguracje pamięci moved to Programowanie: Jak stwierdzić obecność SpartaDOS X oraz jego konfigurację pamięci: żeby tytuł był po polsku) ← Previous diff |
Aktualna wersja KMK (Dyskusja | wkład) |
||
Linia 1: | Linia 1: | ||
- | {{SDP}} | + | Należy wywołać poniższą procedurę. |
- | + | ||
- | Nalezy wywolac ponizsza procedure. | + | |
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. | ||
Linia 11: | 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 | ||
- | lda $a | + | ; we're running SDX, find (DOSVEC)-$150 |
+ | |||
+ | _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 38: | 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 48: | 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
[Edytuj]