Program pobiera kolejne parametry i wypisuje je w kolejnych liniach. Na koniec wyświetla ile parametrów podano. Kod od "noarg" odpowiada za wyświetlenie liczby podanych argumentów. "nosupp" wyświrtla komunikat o niewłaściwym DOS-ie. "print" wyświetla parametr.
Poprawiłem funkcję "getpar". Pierwotna wersja zwracała pod SDX długość argumentu o 3 bajty krótszą niż pod DOS-em II+/D. SpartaDOS przy obliczaniu długości parametru nie uwzględnia początkowej nazwy urządzenia ("Dn:").
        opt ?+
iccmnd  =   $0342
icbufa  =   $0344
icbufl  =   $0348
ciov    =   $e456
fr0     =   $d4
inbufp  =   $f3
lbuff   =   $0580
ifp     =   $d9aa
fasc    =   $d8e6
        org $2000
start   jsr getpar
        bcs nosupp
        beq noarg
        jsr print
        inc argc
        jmp start
noarg   lda #<argc_s
        ldy #>argc_s
        ldx #argc_l
        jsr print
        lda argc
        sta fr0
        lda #$00
        sta fr0+1
        jsr ifp
        jsr fasc
        ldy #$ff
?lp     iny
        lda (inbufp),y
        bpl ?lp
        and #$7f
        sta (inbufp),y
        iny
        lda #$9b
        sta (inbufp),y
        iny
        tya
        tax
        lda inbufp
        ldy inbufp+1
        bne print
nosupp  lda #<bdos_s
        ldy #>bdos_s
        ldx #bdos_l
print   sta icbufa
        sty icbufa+1
        stx icbufl
        ldx #$00
        stx icbufl+1
        lda #$09
        sta iccmnd
        jmp ciov
argc_s  .by "Liczba parametrow:"
argc_l  =   *-argc_s
bdos_s  .by "Nie ten DOS"
bdos_l   =  *-bdos_s
argc    .by 0
; Get Parameter for DOS II+/D
; Results:
;       C=1 - neither DOS II+/D nor SDX
;       Z=1 - no more parameters
;   If Z=0 & C=0:
;       AY - pointer to parameter
;       X  - length of parameter
Getpar  lda $0700
        asl
        cmp #'D'*2
        beq ?d2p
        cmp #'S'*2
        beq ?sdx
        sec
        rts
?d2p    lda #<?d2dp     ; Init for
        ldx #>?d2dp     ; DOS II+/D
        jsr ?stdos
        lda $13c3
        sta ?cur
        ldy $0348
        lda $1b00
        cmp #'M'
        beq ?dec
        lda $1b01
        cmp $13c3
        beq ?skp
?dec    dey
        dey
?skp    lda #$9b
        sta $1b02,y
?dos2d  ldy #$00        ; DOS II+/D
?nxt    lda $1b03,y
        iny
        cmp #$20
        beq ?fnd
        cmp #$9b
        bne ?nxt
        php
        ldx #$03
?ccr    lda ?cur,x
        sta $0580,x
        dex
        bpl ?ccr
        bmi ?aex
?fnd    ldx #<$1b03
        stx $f3
        ldx #>$1b03
        stx $f4
        jsr $dba5
        jsr $14b9
        ldx #$ff
?mv     inx
        lda $1b00,x
        sta $0580,x
        cmp #$20
        beq ?pel
        cmp #$9b
        bne ?mv
?pel    lda #$9b
        sta $0580,x
        php
?aex    lda #<$0580
        ldy #>$0580
        plp
        clc
        rts
?cur    .by "D :" $9b
?sdx    lda #<?spx      ; Init for
        ldx #>?spx      ; SpartaDOS
        jsr ?stdos
        ldy #$04
        lda ($0a),y
        sta ?spdos+1
        iny
        lda ($0a),y
        sta ?spdos+2
        lda $0a
        adc #$20        ; C=0
        sta ?lo+1
        lda $0b
        adc #$00
        sta ?hi+1
?spdos  jsr 0           ; SpartaDOS
        php
?lo     lda #$00
?hi     ldy #$00
        inx
        inx
        inx
        plp
        clc
        rts
?stdos  sta ?ad+1
        stx ?ad+2
        ldy #$02
?ad     lda 0,y
        sta getpar,y
        dey
        bpl ?ad
        rts
?d2dp   jmp ?dos2d
?spx    jmp ?spdos
        .en
 
						Zawsze mam rację, tylko nikt mnie nie słucha.