&&
------------------------------------------------------------------------------
                   CURSUS ASSEMBLER  -  EEN MENU-PROGRAMMA
------------------------------------------------------------------------------

Dit keer een klein programma dat op een van de funktie-toetsen wacht en dan
het gekozen programma gaat starten. Daarbij wordt de tekst met de titels van
de programma's gewoon met het CLI-kommando TYPE op het scherm gezet. Dit gaat
buiten dit programma om.

We gebruiken een kommando uit de DOS.library, Execute, en moeten daarvoor na-
tuurlijk deze library laden.

;
; Een menu-programma dat op de F-toetsen wacht.
;

ExecBase     =  4
Execute      = -222
OpenLib      = -408
CloseLibrary = -414

Na het definieren van de systeemvariabelen komt het openen van de DOS.library.

Start:
    movem.l  d0-d7/a0-a6,-(sp)       ; Alles op de stack.
    move.l   ExecBase,a6             ; Adres van de Exec.library.
    lea      Dosname,a1              ; Naam van de Dos.library.
&&
    jsr      OpenLib(a6)             ; Open de Dos.library.
    move.l   d0,DosBase              ; Sla de pointer op.

Omdat alle tekst al op het scherm staat voor dit programma gestart wordt,
hoeven we nu alleen nog op de toetsen te letten. Daarbij kijken we meteen in
de toetsenbord-chip. Op locatie $BFEC01 staat de ingedrukte toets. Deze waarde
blijft daar staan totdat de toets wordt los gelaten.
Experimenteel, of uit een tabel, bepalen we de waarden voor de 10 funktie-
toetsen. Een voor een testen we of een van deze toetsen is ingedrukt.

;
; Nu komt de lus waar gewacht wordt op een toets.
;

Lus:
    cmp.b    #$5e,$bfec01            ; F1
    beq      M1
    cmp.b    #$5c,$bfec01            ; F2
    beq      M2
    cmp.b    #$5a,$bfec01            ; F3
    beq      M3
    cmp.b    #$59,$bfec01            ; F4
    beq      M4
    cmp.b    #$57,$bfec01            ; F5
    beq      M5
    cmp.b    #$55,$bfec01            ; F6
    beq      M6
&&
    cmp.b    #$53,$bfec01            ; F7
    beq      M7
    cmp.b    #$51,$bfec01            ; F8
    beq      M8
    cmp.b    #$4e,$bfec01            ; F9
    beq      M9
    cmp.b    #$4c,$bfec01            ; F10
    beq      M10

We testen ook op het drukken van de linker-muisknop. Wordt die gedrukt dan
stopt het programma en gaat het terug naar de CLI.

    btst     #6,$bfe001              ; Test op de muisknop.
    bne      Lus

Nu het einde van het programma. Deze routine wordt aangeroepen vanaf deze
plaats als je de muisknop ingedrukt hebt. De routine sluit de libraries en
haalt alles weer van de stack af wat we in het begin erop hebben gezet. Daarna
verlaten we het programma.

De routine wordt ook aangeroepen als we een keuze hebben gemaakt door het
drukken van een funktie-toets. Eerst wordt de routine van de funktie-toets
doorlopen en als laatste wordt naar deze routine gesprongen om alles te
sluiten en het programma te stoppen.
&&
;
; Einde. Je hebt op de muisknop gedrukt of een programma gekozen.
;

Einde:
    move.l   ExecBase,a6             ; Adres van de Exec.library.
    move.l   DosBase,a1              ; Adres van de Dos.library.
    jsr      CloseLibrary(a6)        ; Sluit de library.
    movem.l  (sp)+,d0-d7/a0-a6       ; Alles terug van de stack.
    clr.l    d0                      ; Foutcode 0 zetten.
    rts                              ; Terug naar de CLI.

De volgende tien routines zijn vrijwel gelijk. Het verschil zit steeds in de
tweede regel. Daar wordt een pointer naar de naam van het te starten programma
gezet. Deze is voor elke funktie-toets anders.

De funktie Execute voert het programma dan uit.

M1:
    move.l   DosBase,a6              ; Adres van de Dos.library.
    move.l   #Titel1,d1              ; De titel van het programma.
    clr.l    d2                      ; D2 op nul zetten.
    clr.l    d3                      ; D3 op nul zetten.
    jsr      Execute(a6)             ; Voer het programma uit.
    jmp      Einde                   ; Einde van dit programma.
&&
En nog eens....

M2:
    move.l   DosBase,a6
    move.l   #Titel2,d1
    clr.l    d2
    clr.l    d3
    jsr      Execute(a6)
    jmp      Einde

M3:
    move.l   DosBase,a6
    move.l   #Titel3,d1
    clr.l    d2
    clr.l    d3
    jsr      Execute(a6)
    jmp      Einde

M4:
    move.l   DosBase,a6
    move.l   #Titel4,d1
    clr.l    d2
    clr.l    d3
    jsr      Execute(a6)
    jmp      Einde
&&
M5:
    move.l   DosBase,a6
    move.l   #Titel5,d1
    clr.l    d2
    clr.l    d3
    jsr      Execute(a6)
    jmp      Einde

M6:
    move.l   DosBase,a6
    move.l   #Titel6,d1
    clr.l    d2
    clr.l    d3
    jsr      Execute(a6)
    jmp      Einde

M7:
    move.l   DosBase,a6
    move.l   #Titel7,d1
    clr.l    d2
    clr.l    d3
    jsr      Execute(a6)
    jmp      Einde
&&
M8:
    move.l   DosBase,a6
    move.l   #Titel8,d1
    clr.l    d2
    clr.l    d3
    jsr      Execute(a6)
    jmp      Einde

M9:
    move.l   DosBase,a6
    move.l   #Titel9,d1
    clr.l    d2
    clr.l    d3
    jsr      Execute(a6)
    jmp      Einde

M10:
    move.l   DosBase,a6
    move.l   #Titel10,d1
    clr.l    d2
    clr.l    d3
    jsr      Execute(a6)
    jmp      Einde
&&
Als laatste komen gegevens over de verschillende namen van de programma's en
wat andere teksten en pointers.

;
; Nu nog wat pointers en de titels van de programma's.
;

even
Dosname:     dc.b  'dos.library',0
even
DosBase:     dc.l  0

Titel1:      dc.b  "df0:ProgrammaNaam1",0
Titel2:      dc.b  "df0:ProgrammaNaam2",0
Titel3:      dc.b  "df0:ProgrammaNaam3",0
Titel4:      dc.b  "df0:ProgrammaNaam4",0
Titel5:      dc.b  "df0:ProgrammaNaam5",0
Titel6:      dc.b  "df0:ProgrammaNaam6",0
Titel7:      dc.b  "df0:ProgrammaNaam7",0
Titel8:      dc.b  "df0:ProgrammaNaam8",0
Titel9:      dc.b  "df0:ProgrammaNaam9",0
Titel10:     dc.b  "df0:ProgrammaNaam10",0
&&
U kunt tussen de aanhalingstekens natuurlijk de eigenlijke naam van het pro-
gramma zetten. Het voorvoegsel DF0: moet alleen gebruikt worden als ook wer-
kelijk van DF0: gestart moet worden.

Het programma kan vanuit de CLI gestart worden. Ga naar de CLI op deze disket-
te en tik daar in :

Assembler/Menu

U ziet niets, maar de cursor komt terug als u een funktie-toets indrukt. De
computer zal melden dat het programma niet te vinden is omdat de namen van de
programma's willekeurig zijn.

In dezelfde subdirectory, Assembler, staat ook de source in Seka.












- EINDE ----------------------------------------------------------------------
&&
