¸
 đF.Task1Ł
 đF.Task2Ł
 ˝


@



@


        
ş                               Üdv mindenkinek! ç


 Most  másodszor  jelentkezem  programozási  témában, mely a következő:  "Egy
program  hogyan tegye fel magát egy saját taszkra." A legegyszerűbb megoldás,
ha  a  RUN  paranccsal  indítjuk  a  programunkat,  de ez nem túl elegáns.  A
legtöbb utility program (FileMaster, CED, stb...) önmagát teszi fel egy külön
taszkra.    Így   mi   adhatunk  nevet,  prioritást  és  stack-méretet  is  a
taszkunknak.
 Egyébként  többféle  megoldás is létezik.  Lehetne úgy is, hogy hamis hunkot
készítünk.   Erről a dos dokumentációjában olvashattok.  Amit én leírtam, két
hunkot  használ.   Az  első  a  boot hunk.  Ez teszi fel a második hunkot egy
taszkra.  A programunk végén egy UnLoadSeg meghívásával el is kell távolítani
magunkat.   Ha  ezt  nem  tennénk, nem szabadulna fel a memória utánunk, mert
magától  csak a taszk törlődik.  Röviden ennyit a működésről, a többit majd a
példaforrásban  meglátjátok.   Ennek  a  használatáról:   az assemblerből nem
ajánlatos   indítani,  jobb  hogyha  előbb  kimentitek  object-ként,  és  úgy
futtatjátok.   A prioritást nem érdemes túl nagyra állítani, mert nem marad a
többi  programnak  abból a kevés processzoridőböl semmi.  Próbáljunk meghívni
egy dir parancsot miközben fut a programunk.  Elég lassú, mi?  Ha átírjátok a
prioritást -1-re, már egyből más a helyzet.
 Az  ARTM-mel meg lehet nézni a taszkokat.  Ez egy szuper program, sok minden
másra is jó.  A teljes neve:  Amiga RealTime Monitor.
 Ennyit erről. Remélem érthető voltam, és érdekelt valakit a téma.
Ha minden igaz, a jövő számban is jelentkezem. És most a forráslista:

        incdir  sys:assembler/includes/         ; ezt írd át magadnak
        include lvo3.0/exec_lib.i
        include lvo3.0/dos_lib.i

        section boot,code

j:      movem.l d0-a6,-(sp)
        move.l  4.w,a6
        lea     DosName(pc),a1
        jsr     _LVOOldOpenLibrary(a6)
        move.l  d0,DosBase              ; eltároljuk a dosbase-t
        move.l  d0,a5
        move.l  #TaskName,d1            ; taszknév
        moveq   #0,d2                   ; ez a prioritás
        lea     j-4(pc),a0
        move.l  (a0),d3                 ; a next hunk címe a d3-ba
        move.l  d3,Segment
        clr.l   (a0)
        move.l  #4096,d4                ; stack size
        jsr     _LVOCreateProc(a5)
        movem.l (sp)+,d0-a6
        rts
DosName:        dc.b    `dos.library`,0
TaskName:       dc.b    `Az én taszkom !`,0     ; ez lesz a neve.

        section main,code

loop:   st      $dff182
        btst    #10,$dff016
        bne.b   loop
        move.l  DosBase(pc),a5
        move.l  Segment(pc),d1
        jsr     _LVOUnLoadSeg(a5)       ; el is kell távolítani
        moveq   #0,d0
        rts

DosBase:        dc.l    0
Segment:        dc.l    0

ş (A forráslista a Bonus-ban is benne van)


                                                        ŞAnChoR of Therapyç