; VALUES for dos_type
;-------------------------------------------------------------------------
-ATARIDOS = 0
-SPARTADOS = 1
-OSADOS = 2 ; OS/A+
-MYDOS = 3
-XDOS = 4
+SPARTADOS = 0
+OSADOS = 1 ; OS/A+
+XDOS = 2
+ATARIDOS = 3
+MYDOS = 4
NODOS = 255
+; The DOSes with dos_type below or equal MAX_DOS_WITH_CMDLINE do support
+; command line arguments.
+MAX_DOS_WITH_CMDLINE = XDOS
;-------------------------------------------------------------------------
; XDOS defines (version 2.4, taken from xdos24.pdf)
; startup code but is nevertheless included in the compiled program when
; needed.
+; XDOS support added 05/2016 by Christian Groessler
+
MAXARGS = 16 ; max. amount of arguments in arg. table
CL_SIZE = 64 ; command line buffer size
SPACE = 32 ; SPACE char.
.segment "ONCE"
+nargdos:rts
+
initmainargs:
lda __dos_type ; which DOS?
- cmp #ATARIDOS
- beq nargdos ; DOS does not support arguments
- cmp #MYDOS
- bne argdos ; DOS supports arguments
-nargdos:rts
+ cmp #MAX_DOS_WITH_CMDLINE + 1
+ bcs nargdos
; Initialize ourcl buffer
-argdos: lda #ATEOL
- sta ourcl+CL_SIZE
+argdos: ldy #ATEOL
+ sty ourcl+CL_SIZE
-; Move SpartaDOS command line to our own buffer
+; Move SpartaDOS/XDOS command line to our own buffer
+
+ cmp #XDOS
+ bne sparta
+
+ lda #<XLINE
+ sta ptr1
+ lda #>XLINE
+ sta ptr1+1
+ bne cpcl0
- lda DOSVEC
+sparta: lda DOSVEC
clc
adc #<LBUF
sta ptr1
adc #>LBUF
sta ptr1+1
- ldy #0
+cpcl0: ldy #0
cpcl: lda (ptr1),y
sta ourcl,y
iny