*
                     
* Aloittaessani tekemään tätä alkumenua tarkoituksenani
                     
* oli tehdä latausohjelma,jossa on 4-ääninen musiikkiru-
                     
* tiini.Kiitos DEVPACIN debuggerin ja QUARTET-musiikki-
                     
* ohjelman,onnistuinkin siinä vaihtelevalla menestyksel-
                     
* lä.Varsinkin musiikkirutiinin liittäminen ohjelmaan
                     
* tuotti vaikeuksia.
                     
*
                     
*                                      -ILE-
                     
*
                     
*
                     
* PS.Toivottavasti tästä listauksesta on jotain hyötyä
                     
* aloitteleville assembler-ohjelmoijille
                     
*********************************************************
                     
*Diskettilehden nro 2/90  
                     
*      alkumenu
                     
*Versio 1.0   09/06/90
                     
*********************************************************
                     
                     
                     
                     
                     
paletti_alku equ  $ff8240      
                     
                     
                     
******************************************************
                     
musa_on MACRO
                     
       move.l  prog_ptr,a6             *musiikkirutiinin käynnistys
                     
       move.l  song_ptr,12(a6)
                     
       move.l  vset_ptr,16(a6)
                     
       jsr     4(a6)
                     
       ENDM
                     
       
                     
******************************************************
                     
musa_ei        MACRO
                     
       move.l  prog_ptr,a6             *musiikkirutiinin pysäytys
                     
       jsr     8(a6)
                     
       ENDM
                     
******************************************************
                     
mus_lat        MACRO
                     
       pea     env_str         *pexec()        
                     
       pea     cmd_str         *musiikkirutiinin lataus muistiin
                     
       pea     prog_nm
                     
       move.w  #3,-(sp)
                     
       move.w  #$4b,-(sp)
                     
       trap    #1
                     
       lea     16(sp),sp
                     
       ENDM
                     
******************************************************
                     
                     
                     
getrez:
                     
       move.w  #4,-(sp)        *getrez()
                     
       trap    #14
                     
       addq.l  #2,sp
                     
       
                     
oik_res:
                     
       cmp.b   #2,d0           *onko mustavalkomonitori?
                     
       beq     hi              
                     
                     
                     
       cmp.b   #0,d0           *onko low-resoluutio?
                     
       bne     med
                     
       move.b  #1,r_ok         *lehden latauksen esto
                     
       bra     co
                     
med:   cmp.b   #1,d0           *onko medium-resoluutio?
                     
       beq     co
                     
                       *jos resoluutiota ei tunnistettu,niin poistutaan
                     
                       *ohjelmasta
                     
                     
                     
       clr.w   -(sp)   *pterm()
                     
       trap    #1
                     
                     
                     
*asetellaan muuttujat ja osoittimet riippuen siitä
                     
*onko käytössä mustavalko- vai värimonitori
                     
                     
                     
co:    move.w  d0,res
                     
       move.w  #0,rez
                     
       lea     v_kuva+34,a5
                     
       move.l  a5,kuva
                     
       lea     v_kuva+2,a5
                     
       move.l  a5,u_pal
                     
       move.l  #160,offs
                     
       move.l  #39,kerr
                     
       move.l  #199,kier
                     
       bra      main
                     
                     
                     
hi:    move.w  d0,res
                     
       move.w  #2,rez
                     
       lea     mvkuva+34,a5
                     
       move.l  a5,kuva
                     
       lea     mvkuva+2,a5
                     
       move.l  a5,u_pal
                     
       move.l  #80,offs
                     
       move.l  #19,kerr
                     
       move.l  #399,kier
                     
       
                     
                     
                     
                     
                     
                     
                     
*********************************************
                     
       
                     
main:
                     
       movea.l sp,a5                   
                     
       move.l  sp,pino         *entinen pino-osoitin talteen
                     
                     
                     
       lea     end,sp          *uuden pinon alku
                     
                                       
                     
       movea.l 4(a5),a5                
                     
       move.l  12(a5),d0               
                     
       add.l   $14(a5),d0              
                     
       add.l   $1C(a5),d0              
                     
       addi.l  #$300,d0                
                     
                     
                     
       move.l  d0,-(sp)                
                     
       move.l  a5,-(sp)                
                     
       clr.w   -(sp)                   
                     
       move.w  #$4A,-(sp)      *mshrink()      
                     
       trap    #1              *siirretään gemdosin vapaan muistin
                     
       lea     12(sp),sp       *alku ohjelman loppuun,jotteivat
                     
                               *myöhemmin ladattavat ohjelmat sotke
                     
                               *sitä      
                     
                     
                     
       mus_lat
                     
       
                     
       move.l  d0,d1
                     
       add.l   #256,d0
                     
       move.l  d0,prog_ptr     *musiikkirutiinin alkuosoite
                     
       
                     
       move.l  #$4000,-(sp)            
                     
       move.l  d1,-(sp)                
                     
       clr.w   -(sp)                   
                     
       move.w  #$4A,-(sp)      *mshrink()      
                     
       trap    #1                      
                     
       lea     12(sp),sp               
                     
                     
                     
       move.l  #0,-(sp)
                     
       move.w  #$20,-(sp)      *super()
                     
       trap    #1              *vaihdetaan prosessori user-tilasta
                     
       addq.l  #6,sp           *supervisor-tilaan
                     
       move.l  d0,vanha_ssp    *entinen supervisor-pino talteen
                     
                     
                     
       bsr alkutoimet
                     
                     
                     
       bsr musta_paletti
                     
                     
                     
       bsr kuva_siirto
                     
                     
                     
       bsr paletti_uusi
                     
                     
                     
       bsr kuva_näyttö
                     
                     
                     
       musa_on
                     
       
                     
näppäin_luku:
                     
*musiikkirutiini varaa suurimman osan ST:n tehosta,joten
                     
*käyttöjärjestelmän omia näppäimistörutiineja ei voi käyttää.                                        
                     
*Onneksi rutiinissa on oma näppisluku rekisterin a6 kautta.
                     
                     
                     
F1:    cmp.b   #$3b,(a6)       *onko painettu näppäintä F1 ?    
                     
       bne     F2
                     
                     
                     
       musa_ei
                     
                     
                     
       bsr     lehti_lat
                     
                     
                     
       musa_on
                     
                     
                     
       bra     näppäin_luku
                     
                     
                     
F2:    cmp.b   #$3c,(a6)       *onko painettu näppäintä F2 ?
                     
       beq     loppu
                     
                     
                     
       bra     näppäin_luku                  
                     
                     
                     
******************************************************
                     
loppu:
                     
       musa_ei
                     
       
                     
       bsr palautus
                     
                     
                     
       move.l  vanha_ssp,-(sp)
                     
       move.w  #$20,-(sp)      *super()
                     
       trap    #1              *takaisin user-tilaan
                     
       addq.l  #6,sp
                     
                     
                     
       move.l  pino,sp
                     
                     
                     
       clr.w   -(sp)                   
                     
       move.w  #$4c,-(sp)      *pterm()
                     
       trap    #1              *ohjelman lopetus
                     
                     
                     
******************************************************
                     
alkutoimet:
                     
       move.w  #2,-(sp)        *physbase()
                     
       trap    #14
                     
       move.l  d0,phybase
                     
                     
                     
       move.w  #3,-(sp)        *logbase()
                     
       trap    #14
                     
       move.l  d0,logbase
                     
                     
                     
       addq.l  #4,sp
                     
                     
                     
       movea.l #paletti_alku,a5        * paletti talteen
                     
       lea      vpal,a6
                     
       bsr     pal_siirto
                     
                     
                     
       lea     song,a2                 * soitinten ja musiikin
                     
       move.l  a2,song_ptr             * alkuosoitteiden asetus
                     
       lea     voice,a2
                     
       move.l  a2,vset_ptr
                     
                     
                     
       rts
                     
                     
                     
                     
                     
******************************************************
                     
pal_siirto:
                     
       moveq.l #15,d0
                     
                     
                     
pal:   move.w  (a5)+,(a6)+
                     
       dbf     d0,pal
                     
                     
                     
       rts
                     
******************************************************
                     
musta_paletti:
                     
       movea.l #paletti_alku,a6
                     
       moveq.l #15,d0
                     
                     
                     
mp:    move.w  #$0000,(a6)+
                     
       dbf     d0,mp
                     
                     
                     
       rts
                     
                     
                     
******************************************************
                     
paletti_uusi:
                     
       movea.l #paletti_alku,a6        * mahtavat värit
                     
       move.l  u_pal,a5
                     
       bsr     pal_siirto
                     
                     
                     
       rts
                     
                     
                     
******************************************************
                     
kuva_siirto:
                     
       lea     kuva_alue,a0
                     
       move.l  a0,d0
                     
       clr.b   d0
                     
       move.l  d0,oma_kuva     *kuvaruudun alkuosoite
                     
                     
                     
       move.w  rez,-(sp)
                     
       move.l  d0,-(sp)
                     
       move.l  d0,-(sp)
                     
       move.w  #5,-(sp)        *setscreen()
                     
       trap    #14
                     
       lea     12(sp),sp
                     
                     
                     
       rts
                     
                     
                     
******************************************************
                     
palautus:
                     
       move.w  res,-(sp)
                     
       move.l  phybase,-(sp)
                     
       move.l  logbase,-(sp)
                     
       move.w  #5,-(sp)                *setscreen()
                     
       trap    #14
                     
       lea     12(sp),sp
                     
                     
                     
       movea.l #paletti_alku,a6        * paletti takaisin
                     
       lea      vpal,a5
                     
       bsr     pal_siirto
                     
                     
                     
       rts
                     
                     
                     
******************************************************
                     
kuva_näyttö: 
                     
       move.l  oma_kuva,a0     *kuvaruudun alkuosoite
                     
       move.l  oma_kuva,a2
                     
       move.l  kuva,a1         *kuvan,joko mv tai värillisen alkuosoite
                     
       move.l  kuva,a4
                     
       move.l  kier,d6         *kuvaruudun rivien määrä 
                     
       move.l  kier,d3
                     
                     
                     
dsilm: 
                     
       move.l  d3,d2
                     
       
                     
psilm: move.l  a4,a1
                     
       move.l  kerr,d5
                     
                     
                     
esilm: move.l  (a1)+,(a0)+ 
                     
       dbf     d5,esilm
                     
                     
                     
       *move.l offs,d4         *liittämällä nämä rivit ohjelmaan
                     
       *lea    d4(a0),a0       *ja muuttamalla muuttujien
                     
       dbf     d2,psilm        *(offs=40,kerr=9,kier=399) arvoja
                     
                               *ohjelman alussa,saadaan aikaiseksi
                     
                               *jännä efekti mustavalkomonitorilla
                     
       
                     
       move.l  offs,d4
                     
       adda.l  d4,a4
                     
       adda.l  d4,a2
                     
       move.l  a2,a0
                     
       subq.l  #1,d3
                     
       dbf     d6,dsilm
                     
                     
                     
       
                     
       rts
                     
                     
                     
******************************************************
                     
no_set:
                     
       bsr     palautus
                     
       rts
                     
                     
                     
******************************************************
                     
me_set:
                     
       
                     
       move.w  rez,-(sp)
                     
       move.l  #-1,-(sp)
                     
       move.l  #-1,-(sp)
                     
       move.w  #5,-(sp)        *setscreen()
                     
       trap    #14
                     
       
                     
       move.w  #-1,-(sp)
                     
       move.l  oma_kuva,-(sp)
                     
       move.l  oma_kuva,-(sp)
                     
       move.w  #5,-(sp)        *setscreen()
                     
       trap    #14
                     
       lea     24(sp),sp
                     
       
                     
       bsr     paletti_uusi
                     
                     
                     
       rts
                     
                     
                     
******************************************************
                     
lehti_lat:
                     
       tst.b   r_ok            *onko lataus sallittu?
                     
       bne     l_ohi
                     
                     
                     
       bsr     no_set
                     
                     
                     
       lea     tnimi,a5                
                     
       pea     str                     
                     
       pea     str                     
                     
       move.l  a5,-(sp)                
                     
       clr.w   -(sp)                   
                     
       move.w  #$4B,-(sp)      *pexec()        
                     
       trap    #1              *lehtiohjelman lataus   
                     
       lea     16(sp),sp               
                     
                     
                     
       bsr     me_set
                     
l_ohi:                 
                     
       rts
                     
                     
                     
******************************************************
                     
                     
                     
rez:      dc.w 0       *menun aikana oleva resoluutio
                     
res:      dc.w 0       *alkuperäinen kuvaruututarkkuus eli resoluutio
                     
                     
                     
r_ok:     dc.b 0       *muuttuja,josta katsotaan voidaanko lehti ladata
                     
var1:     dc.b 0       *täytettä
                     
var2:     dc.w 0
                     
                     
                     
logbase:   dc.l        0
                     
phybase:   dc.l        0
                     
                     
                     
oma_kuva:  dc.l 0
                     
kuva:     dc.l 0
                     
                     
                     
offs:     dc.l 0
                     
kerr:     dc.l 0
                     
kier:     dc.l 0
                     
u_pal:    dc.l 0
                     
                     
                     
vpal:     ds.w 16
                     
                     
                     
pino:          dc.l    0
                     
vanha_ssp:     dc.l    0
                     
prog_ptr:      dc.l    0
                     
song_ptr:      dc.l    0
                     
vset_ptr:      dc.l    0
                     
str:           dc.l    0
                     
                     
                     
                     
                     
prog_nm:       dc.b    "menu290.dt0",0 
                     
               even
                     
                     
                     
tnimi:         dc.b    "lehti.prg",0
                     
               even
                     
               
                     
env_str:       dc.b    0,0     *musiikkirutiinin latauksessa tarvittavat 
                     
cmd_str:       dc.b    0,0     *muuttujat
                     
       even
                     
täyte:       ds.b 256
                     
kuva_alue: ds.b        32000
                     
mvkuva:    incbin "menu_290.pi3"
                     
v_kuva:           incbin "menu_290.pi1"
                     
                     
                     
                     
                     
*
                     
song:  incbin  "menu.4v"
                     
voice: incbin  "voice.set"
                     
                     
                     
       even
                     
                     
                     
stack: ds.w 399
                     
end:   dc.w 0
                     
                     
                     
                     
                     
       end

Takaisin

(C) Marko, Suomen Atari-sivut / ArkiSTo 2003