diff --git a/asminc/atari.inc b/asminc/atari.inc index 453c370f4..1b995e380 100644 --- a/asminc/atari.inc +++ b/asminc/atari.inc @@ -1024,9 +1024,16 @@ XFILE = $087D ; XDOS filename buffer 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 diff --git a/libsrc/atari/getdefdev.s b/libsrc/atari/getdefdev.s index a1c950dc5..480639b4a 100644 --- a/libsrc/atari/getdefdev.s +++ b/libsrc/atari/getdefdev.s @@ -77,16 +77,33 @@ finish: lda #<__defdev 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 @@ -94,4 +111,3 @@ __defdev: .else .byte "D1:", 0 .endif - diff --git a/libsrc/atari/shadow_ram_handlers.s b/libsrc/atari/shadow_ram_handlers.s index d65e6bd68..a8ba611b6 100644 --- a/libsrc/atari/shadow_ram_handlers.s +++ b/libsrc/atari/shadow_ram_handlers.s @@ -22,6 +22,7 @@ SHRAM_HANDLERS = 1 .export CIO_handler .export SIO_handler .export SETVBV_handler + .export XMOVE_handler BUFSZ = 128 ; bounce buffer size BUFSZ_SIO = 256 @@ -1085,6 +1086,24 @@ SETVBV_handler: 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 @@ -1093,6 +1112,7 @@ cur_CIOV_PORTB: .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