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
SYMBOLS {
__STACKSIZE__: type = weak, value = $0800; # 2k stack
__STARTOFDIRECTORY__: type = weak, value = $00CB; # start just after loader
- __BLOCKSIZE__: type = weak, value = $0400; # cart block size
+ __BANK0BLOCKSIZE__: type = weak, value = $0400; # bank 0 cart block size
+ __BANK1BLOCKSIZE__: type = weak, value = $0000; # bank 1 block size
__BLLHDR__: type = import;
}
MEMORY {
SYMBOLS {
__STACKSIZE__: type = weak, value = $0800; # 2k stack
__STARTOFDIRECTORY__: type = weak, value = $00CB; # start just after loader
- __BLOCKSIZE__: type = weak, value = $0400; # cart block size
+ __BANK0BLOCKSIZE__: type = weak, value = $0400; # bank 0 cart block size
+ __BANK1BLOCKSIZE__: type = weak, value = $0000; # bank 1 block size
__EXEHDR__: type = import;
__BOOTLDR__: type = import;
__DEFDIR__: type = import;
SYMBOLS {
__STACKSIZE__: type = weak, value = $0800; # 2k stack
__STARTOFDIRECTORY__: type = weak, value = $00CB; # start just after loader
- __BLOCKSIZE__: type = weak, value = $0400; # cart block size
+ __BANK0BLOCKSIZE__: type = weak, value = $0400; # bank 0 cart block size
+ __BANK1BLOCKSIZE__: type = weak, value = $0000; # bank 1 block size
__EXEHDR__: type = import;
__BOOTLDR__: type = import;
__DEFDIR__: type = import;
SYMBOLS {
__STACKSIZE__: type = weak, value = $0800; # 2k stack
__STARTOFDIRECTORY__: type = weak, value = $00CB; # start just after loader
- __BLOCKSIZE__: type = weak, value = 1024; # cart block size
+ __BANK0BLOCKSIZE__: type = weak, value = $0400; # bank 0 cart block size
+ __BANK1BLOCKSIZE__: type = weak, value = $0000; # bank 1 block size
__EXEHDR__: type = import;
__BOOTLDR__: type = import;
__DEFDIR__: type = import;
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
;
.include "lynx.inc"
.include "extzp.inc"
- .import __BLOCKSIZE__
+ .import __BANK0BLOCKSIZE__
.export __BOOTLDR__: absolute = 1
lda __iodat
sta IODAT
stz _FileBlockByte
- lda #<($100-(>__BLOCKSIZE__))
+ lda #<($100-(>__BANK0BLOCKSIZE__))
sta _FileBlockByte+1
ply
plx
.import __MAIN_START__
.import __CODE_SIZE__, __DATA_SIZE__, __RODATA_SIZE__
.import __STARTUP_SIZE__, __ONCE_SIZE__, __LOWCODE_SIZE__
- .import __BLOCKSIZE__
+ .import __BANK0BLOCKSIZE__
.export __DEFDIR__: absolute = 1
__DIRECTORY_START__:
off0 = __STARTOFDIRECTORY__ + (__DIRECTORY_END__ - __DIRECTORY_START__)
-blocka = off0 / __BLOCKSIZE__
+blocka = off0 / __BANK0BLOCKSIZE__
; Entry 0 - first executable
-block0 = off0 / __BLOCKSIZE__
+block0 = off0 / __BANK0BLOCKSIZE__
len0 = __STARTUP_SIZE__ + __ONCE_SIZE__ + __CODE_SIZE__ + __DATA_SIZE__ + __RODATA_SIZE__ + __LOWCODE_SIZE__
.byte <block0
- .word off0 & (__BLOCKSIZE__ - 1)
+ .word off0 & (__BANK0BLOCKSIZE__ - 1)
.byte $88
.word __MAIN_START__
.word len0
;
; This header contains data for emulators like Handy and Mednafen
;
- .import __BLOCKSIZE__
+ .import __BANK0BLOCKSIZE__
+ .import __BANK1BLOCKSIZE__
.export __EXEHDR__: absolute = 1
; EXE header
.segment "EXEHDR"
.byte 'L','Y','N','X' ; magic
- .word __BLOCKSIZE__ ; bank 0 page size
- .word __BLOCKSIZE__ ; bank 1 page size
+ .word __BANK0BLOCKSIZE__ ; bank 0 page size
+ .word __BANK1BLOCKSIZE__ ; bank 1 page size
.word 1 ; version number
.asciiz "Cart name " ; 32 bytes cart name
.asciiz "Manufacturer " ; 16 bytes manufacturer