Programowanie: Jak stwierdzić obecność SpartaDOS X oraz jego konfigurację pamięci
From Atariki
(Różnice między wersjami)
Wersja z dnia 12:47, 1 paź 2006 Mikey (Dyskusja | wkład) (polskie znaczki up your ass) ← Previous diff |
Wersja z dnia 11:03, 22 lip 2008 KMK (Dyskusja | wkład) (stara metoda w następnej wersji przestanie działać) Next diff → |
||
Linia 9: | 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 36: | 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 46: | 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> | ||
+ | |||
[[Kategoria:Niezbędnik kodera]] | [[Kategoria:Niezbędnik kodera]] |
Wersja z dnia 11:03, 22 lip 2008
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