Programowanie: Jak stwierdzić obecność SpartaDOS X oraz jego konfigurację pamięci
From Atariki
(Różnice między wersjami)
| Wersja z dnia 14:30, 29 wrz 2006 Mikey (Dyskusja | wkład) (Opis dla niekoderów. Requiested by sikor. Silwuple.) ← Previous diff |
Wersja z dnia 14:32, 29 wrz 2006 Epi (Dyskusja | wkład) (i po co dirtyhaki) Next diff → |
||
| Linia 1: | Linia 1: | ||
| - | Procedura sprawdza obecnosc SpartaDOSX oraz jego konfigurację pamięci. | + | Procedura sprawdza obecność SpartaDOS X oraz jego konfigurację pamięci. |
| 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 niedostepna. | + | Wersja polska niedostępna. |
| <pre> | <pre> | ||
| Linia 10: | Linia 10: | ||
| ; | ; | ||
| - | p0 equ $f0 | + | p0 equ $f0 |
| sparta_detect equ * | sparta_detect equ * | ||
| Linia 26: | Linia 26: | ||
| lda $a | lda $a | ||
| + | sec | ||
| + | sbc <$150 | ||
| sta p0 | sta p0 | ||
| lda $b | lda $b | ||
| + | sbc >$150 | ||
| sta p0+1 | sta p0+1 | ||
| - | |||
| - | sec | ||
| - | lda p0 | ||
| - | sbc <$150 | ||
| - | sta p0 | ||
| - | bcs _nxt | ||
| - | dec p0+1 | ||
| - | _nxt dec p0+1 ; dirty hack, MSB of $150 is always 1,so we do a dec instead of sub | ||
| ; ok, hopefully we have established the address. | ; ok, hopefully we have established the address. | ||
| Linia 44: | Linia 39: | ||
| lda (p0),y | lda (p0),y | ||
| rts | rts | ||
| - | no_sparta lda #$ff | + | no_sparta lda #$ff |
| rts | rts | ||
Wersja z dnia 14:32, 29 wrz 2006
Procedura sprawdza obecność SpartaDOS X oraz jego konfigurację pamięci. Wynik w akumulatorze, znaczenie poszczególnych wartości podane w komentarzach na końcu. Wersja polska niedostępna.
; 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 equ $f0
sparta_detect equ *
; if peek($700) = 'S' and bit($701) sets V then we're SDX
lda $700
cmp #$53 ; 'S'
bne no_sparta
bit $701
bvc no_sparta
; we're running SDX, find (DOSVEC)-$150
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
lda (p0),y
rts
no_sparta lda #$ff
rts
; 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
