Stefan Dorndorf, author of XDOS, pointed out that retrieving the
default device by looking at an undocumented memory location won't
work in future XDOS versions.
He also showed a way to get the default device in a compatible
manner.
This change implements his method and adds a version check (XDOS
versions below 2.4 don't support this -- for them the behaviour
will be the same as, for example, AtariDOS: no notion of a default
drive).
XLINE = $0880 ; XDOS DUP input line
XGLIN = $0871 ; get line
XSKIP = $0874 ; skip parameter
+.ifdef __ATARIXL__
+.ifndef SHRAM_HANDLERS
+.import XMOVE_handler
+.endif
+.define XMOVE XMOVE_handler
+XMOVE_org = $0877 ; move filename
+.else
XMOVE = $0877 ; move filename
+.endif
XGNUM = $087A ; get number
-XDEFDEV = $0816 ; current drive * undocumented *
;-------------------------------------------------------------------------
; End of atari.inc
ldx #>__defdev
rts
-; XDOS version
+; XDOS default device retrieval
-xdos: lda XDEFDEV
+xdos:
+
+; check XDOS version (we need >= 2.4)
+
+ lda XGLIN
+ cmp #$4C ; there needs to be a 'JMP' opcode here
+ bne finish ; older version, use DEFAULT_DEVICE or D1:
+ lda XVER ; get BCD encoded version ($24 for 2.4)
+ cmp #$24
+ bcc finish ; too old, below 2.4
+
+; good XDOS version, get default drive
+
+ lda #ATEOL
+ sta XLINE ; simulate empty command line
+ ldy #0
+ jsr XMOVE ; create an FMS filename (which in this case only contains the drive)
+ lda XFILE+1
bne done
.data
crvec: jmp $FFFF ; target address will be set to crunch vector
-; Default device
+; Default device string
__defdev:
.ifdef DEFAULT_DEVICE
.else
.byte "D1:", 0
.endif
-
.export CIO_handler
.export SIO_handler
.export SETVBV_handler
+ .export XMOVE_handler
BUFSZ = 128 ; bounce buffer size
BUFSZ_SIO = 256
plp
rts
+;---------------------------------------------------------
+
+XMOVE_handler:
+
+ pha
+ lda PORTB
+ sta cur_XMOVE_PORTB
+ enable_rom
+ pla
+ jsr XMOVE_org
+ php
+ pha
+ disable_rom_val cur_XMOVE_PORTB
+ pla
+ plp
+ rts
+
+
CIO_a: .res 1
CIO_x: .res 1
CIO_y: .res 1
cur_SIOV_PORTB: .res 1
cur_KEYBDV_PORTB: .res 1
cur_SETVBV_PORTB: .res 1
+cur_XMOVE_PORTB: .res 1
orig_ptr: .res 2
orig_len: .res 2
req_len: .res 2