1

Jak się robi program pod DOS (czyli FF FF) który wyłapie parametr. Powiedzmy, że mam program o nazwie TEST.
To jak wyłapać co kto wpisał po nim np.:

TEST PIES
TEST KOT
TEST PIES KOT

w C jest to trywialne bo mamy

int main(int argc, char* argv[])

A jak to zrobić dla DOS w ATARI w MADSie?

2

Polecam artykuł w Syzygy #6: "Wiersz poleceń w DOSie II+/D". Początkowo traktuje tylko o tytułowym DOS-ie, ale na końcu jest opis uniwersalny. Do artykułu dołączony jest plik z przykładami.
http://ftp.pigwa.net/stuff/collections/ … ny/Syzygy/

Post's attachments

GETPAR.ARC 9.88 kb, liczba pobrań: 1 (od 2023-05-07) 

Tylko zalogowani mogą pobierać załączniki.
Zawsze mam rację, tylko nikt mnie nie słucha.

3 Ostatnio edytowany przez Gienek (2023-05-07 18:05:09)

Jakieś fatum

Post's attachments

error.png 3.6 kb, liczba pobrań: 1 (od 2023-05-07) 

Tylko zalogowani mogą pobierać załączniki.

4

Po uruchomieniu magazynu włóż drugą dyskietkę (Syzygy6b.atr) i wtedy wczytaj artykuł.

Zawsze mam rację, tylko nikt mnie nie słucha.

5

A dobra, mam.
Widzę, że to nie takie proste. Bo to nie jest oficjalnie, tylko trzeba trikiem robić.

6 Ostatnio edytowany przez Lizard (2023-05-07 22:11:21)

Niestety nie jest i trzeba się trochę nakombinować. W zasadzie wszystko, czego potrzebujesz, jest opisane, więc jak raz napiszesz własną procedurę, to będziesz miał święty spokój. :-)

Zawsze mam rację, tylko nikt mnie nie słucha.

7

http://atariki.krap.pl/index.php/Wiersz_polece%C5%84

hex, code and ror'n'rol
niewiedza buduje, wiedza rujnuje

8 Ostatnio edytowany przez tebe (2023-05-07 23:05:53)

w Mad Pascalu to jest zaimplementowane

https://github.com/tebe6502/Mad-Pascal/ … ramstr.pas

przykład wykorzystania

https://github.com/tebe6502/Mad-Pascal/ … /lzhuf.pas

lzhuf.obx e d:source.dat  d:destination.lzh

*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

9

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.