home *** CD-ROM | disk | FTP | other *** search
/ Scene Storm / Scene Storm - Volume 1.iso / coding / asm / utils / makeboot / bootscroll.asm next >
Encoding:
Assembly Source File  |  1980-01-04  |  8.4 KB  |  231 lines

  1. *************************************************************************
  2. *                                    *
  3. * Include-tiedostot, joissa on määritelty käyttöjärjestelmärutiineihin    *
  4. * liittyviä struktuureja ja vakioita.  Struktuurit ovat tässä tapauk-    *
  5. * sessa vain eri alkioiden offset-arvoja struktuurin alkuun verattuna.    *
  6. *                                    *
  7. *************************************************************************
  8.  
  9.     include "exec/types.i"
  10.     include "exec/nodes.i"
  11.     include "exec/lists.i"
  12.     include "exec/memory.i"
  13.     include    "graphics/gfx.i"
  14.     include    "graphics/gfxbase.i"
  15.     include    "graphics/text.i"
  16.     include    "intuition/intuition.i"
  17.     include    "intuition/screens.i"
  18.  
  19. *************************************************************************
  20. *                                    *
  21. * Määritellään kutsuttavat käyttöjärjestelmärutiinit, jolloin BLink    *
  22. * osaa korvata sumboliset nimet oikeilla offset-arvoilla.        *
  23. * BLink saa offset-arvot amiga.lib-tiedostosta.                *
  24. *                                    *
  25. *************************************************************************
  26.  
  27.  xref _LVOOpenLibrary,_LVOCloseLibrary,_LVOGetMsg,_LVOReplyMsg
  28.  xref _LVOOpenScreen,_LVOCloseScreen,_LVOOpenWindow,_LVOCloseWindow
  29.  xref _LVOLoadRGB4,_LVOMove,_LVOText,_LVOWaitTOF,_LVOScrollRaster
  30.  
  31. intuibase    equ    -4    ; tila Intuition-kirjaston osoittimelle
  32. gfxbase        equ    -8    ; tila Graphics-kirjaston osoittimelle
  33. Naytto        equ    -12    ; tila Screen-osoittimelle
  34. Ikkuna        equ    -16    ; tila Window-osoittimelle
  35. rp        equ    -20    ; tila RastPort-osoittimelle
  36.  
  37. *************************************************************************
  38. *                                    *
  39. * Itse ohjelma: Aluksi avataan kirjastot ja näyttö.            *
  40. *                                    *
  41. *************************************************************************
  42.  
  43. scroll    link    a4,#-20            ; varataan muuttujatilaa
  44.     lea    gfxnimi(pc),a1        ; grafiikkakirjaston nimi
  45.     moveq    #0,d0            ; kirjastoversio (mikä tahansa)
  46.     move.l    4,a6            ; exec-kirjaston perusosoite
  47.     jsr    _LVOOpenLibrary(a6)    ; kutsutaan OpenLibrary()ä
  48.     move.l    d0,gfxbase(a4)        ; talletetaan gfx:n perusosoite
  49.     beq    cleanup            ; jos kirjastoa ei ole, pois!
  50.  
  51.     lea    intuinimi(pc),a1    ; Intuition-kirjaston nimi
  52.     moveq    #0,d0            ; kirjastoversio (mikä tahansa)
  53.     jsr    _LVOOpenLibrary(a6)    ; kutsutaan OpenLibrary()ä
  54.     move.l    d0,intuibase(a4)    ; talletetaan I:n perusosoite
  55.     beq    cleanup            ; jos kirjastoa ei ole, pois!
  56.  
  57.     lea    UusiNaytto(pc),a0    ; näytön struktuurin osoite
  58.     move.l    intuibase(a4),a6    ; Intuitionin perusosoite
  59.     jsr    _LVOOpenScreen(a6)    ; kutsutaan OpenScreen()iä
  60.     move.l    d0,Naytto(a4)        ; talletetaan osoitin
  61.     beq    cleanup            ; jos ei auennut, pois!
  62.  
  63. *************************************************************************
  64. *                                    *
  65. * Seuraavaksi asetetaan näytön värit (kynät 0, 1, 2 ja 3) käyttäen    *
  66. * LoadRGB4()-rutiinia, jolle annetaan väritaulukko.            *
  67. *                                    *
  68. *************************************************************************
  69.  
  70.     move.l    d0,a0            ; Screen-struktuurin osoite
  71.     lea.l    sc_ViewPort(a0),a0    ; ViewPort-struktuurin osoite
  72.     lea.l    Varit(pc),a1        ; väritaulukon alkuosoite
  73.     move.l    gfxbase(a4),a6        ; grafiikkakirjaston perusosoite
  74.     moveq    #4,d0            ; värien määrä
  75.     jsr    _LVOLoadRGB4(a6)    ; asettaa värit
  76.  
  77. *************************************************************************
  78. *                                    *
  79. * Avataan ikkuna ja otetaan ikkunan RastPort-struktuurin osoite.    *
  80. *                                    *
  81. *************************************************************************
  82.  
  83.     lea    UusiIkkuna(pc),a0    ; NewWindow-struktuurin osoite
  84.     move.l    Naytto(a4),nw_Screen(a0); asetetaan näytön osoitin
  85.     move.l    intuibase(a4),a6    ; Intuitionin perusosoite
  86.     jsr    _LVOOpenWindow(a6)    ; kutsutaan OpenWindow()ia
  87.     move.l    d0,Ikkuna(a4)        ; talletetaan Window:n osoite
  88.     beq.s    cleanup            ; jos ei auennut, pois!
  89.     move.l    d0,a0
  90.     move.l    wd_RPort(a0),rp(a4)    ; otetaan RastPortin osoite
  91.  
  92. *************************************************************************
  93. *                                    *
  94. * Varsinainen tekstin vieritys tapahtuu tässä.  Silmukoita on vain    *
  95. * kaksi, koska teksti on yhtenä nollaan päättyvänä merkkijonona.    *
  96. * Ulompi silmukka käsittelee kaikki tekstin merkit, sisempi merkin    *
  97. * pikselisarakkeet.                            *
  98. *                                    *
  99. *************************************************************************
  100.  
  101.     lea    teksti(pc),a2        ; tekstin alkuosoite
  102. silmu1    moveq    #9,d7            ; pikselin numero
  103.  
  104. silmu2    move.l    Ikkuna(a4),a0        ; oman ikkunan osoitin
  105.     move.l    wd_UserPort(a0),a0    ; ikkunan viestiportti
  106.     move.l    4,a6            ; Execbase
  107.     jsr    _LVOGetMsg(a6)        ; tutkitaan, onko tullut viestejä
  108.     tst.l    d0
  109.     bne.s    nappula            ; joku painoi hiiren nappia!
  110.     move.l    d7,d0
  111.     add.l    #309,d0            ; x-koordinaatti
  112.     moveq    #78,d1            ; y-koordinaatti
  113.     move.l    rp(a4),a1        ; RastPort-osoitin
  114.     move.l    gfxbase(a4),a6
  115.     jsr    _LVOMove(a6)        ; Move(rp,310+k,78)
  116.     move.l    a2,a0            ; tekstin osoitin
  117.     moveq    #1,d0            ; tulostettava pituus 1 merkki
  118.     move.l    rp(a4),a1        ; RastPort-osoitin
  119.     jsr    _LVOText(a6)        ; gfxbase on jo a6:ssa
  120.     jsr    _LVOWaitTOF(a6)        ; odotellaan
  121.     moveq    #1,d0            ; dx (scrollausmäärä x-suunn.)
  122.     moveq    #0,d1            ; dy (scrollausmäärä y-suunn.)
  123.     moveq    #0,d2            ; minx (alueen vasen yläkulma)
  124.     moveq    #70,d3            ; miny (alueen vasen yläkulma)
  125.     move.l    #319,d4            ; maxx (alueen oikea alakulma)
  126.     moveq    #80,d5            ; maxy (alueen oikea alakulma)
  127.     move.l    rp(a4),a1
  128.     jsr    _LVOScrollRaster(a6)    ; gfxbase on jo a6:ssa
  129.     dbf    d7,silmu2        ; tulostetaan kaikki pikselit
  130.  
  131.     addq.l    #1,a2            ; kasvatetaan tekstiosoitinta
  132.     tst.b    (a2)            ; tekstin loppu?
  133.     bne.s    silmu1            ; ei -> jatketaan
  134.     bra.s    cleanup
  135.  
  136. nappula    move.l    d0,a1            ; viestin osoitin
  137.     jsr    _LVOReplyMsg(a6)    ; vastataan kiltisti viestiin
  138.  
  139. *************************************************************************
  140. *                                    *
  141. * cleanup, joka sulkee kirjastot, näytön ja ikkunat.  On huomattava,    *
  142. * että kirjaston sulkemisen jälkeen siinä olevia rutiineja ei enää saa    *
  143. * kutsua.  Siksi kirjastot suljetaan viimeisenä.            *
  144. * Näytössä olevat ikkunat on suljettava ennen näytön sulkemista.    *
  145. *                                    *
  146. *************************************************************************
  147.  
  148. cleanup    move.l    Ikkuna(a4),d0        ; jos ikkuna auki, suljetaan se
  149.     beq.s    clean1
  150.     move.l    d0,a0
  151.     move.l    intuibase(a4),a6
  152.     jsr    _LVOCloseWindow(a6)
  153.  
  154. clean1    move.l    Naytto(a4),d0        ; jos näyttö auki, suljetaan se
  155.     beq.s    clean2
  156.     move.l    d0,a0
  157.     move.l    intuibase(a4),a6
  158.     jsr    _LVOCloseScreen(a6)
  159.  
  160. clean2    move.l    gfxbase(a4),d0        ; jos graphics auki, suljetaan
  161.     beq.s    clean3
  162.     move.l    d0,a1
  163.     move.l    4,a6
  164.     jsr    _LVOCloseLibrary(a6)
  165.  
  166. clean3    move.l    intuibase(a4),d0    ; jos intuition auki, suljetaan
  167.     beq.s    clean4
  168.     move.l    d0,a1
  169.     move.l    4,a6
  170.     jsr    _LVOCloseLibrary(a6)
  171.  
  172. clean4    unlk    a4            ; vapautetaan pinoalue
  173.     rts                ; jatketaan boottia
  174.  
  175. *************************************************************************
  176. *                                    *
  177. * Struktuurit, joissa määritellään avattavan näytön ja ikkunan ominai-    *
  178. * suudet sekä fontti.                            *
  179. *                                    *
  180. *************************************************************************
  181.  
  182. UusiNaytto    dc.w    0,0        ; näytön koordinaatit
  183.         dc.w    320,256        ; koko (x,y)
  184.         dc.w    2        ; bittitasojen määrä (4 väriä)
  185.         dc.b    0,1        ; kynät, joilla näyttö piirretään
  186.         dc.w    0        ; moodi (HIRES, HAM, DUALPF jne)
  187.         dc.w    CUSTOMSCREEN    ; näytön tyyppi
  188.         dc.l    0        ; käytettävä oletusfontti
  189.         dc.l    0        ; näytön otsikkopalkin teksti
  190.         dc.l    0        ; gadgetteja ei käytetä
  191.         dc.l    0        ; custom bitmappia ei käytetä
  192.  
  193. UusiIkkuna    dc.w    0,0        ; ikkunan koordinaatit (x,y)
  194.         dc.w    320,256        ; ikkunan koko (x,y)
  195.         dc.b    2,3        ; kynien värit
  196.         dc.l    MOUSEBUTTONS    ; IDCMP vahtii hiiren nappuloita
  197.         dc.l    NOCAREREFRESH!ACTIVATE!BORDERLESS!RMBTRAP ; liput
  198.         dc.l    0        ; ei gadgetteja
  199.         dc.l    0        ; ei omaa checkmarkkia
  200.         dc.l    0        ; ei ikkunan otsikkopalkin tekstiä
  201.         dc.l    0        ; näytön osoitin, asetetaan myöhemmin
  202.         dc.l    0        ; ei BitMap-osoitinta
  203.         dc.w    0,0        ; minimikoko (ei vaikuta tässä)
  204.         dc.w    0,0        ; maksimikoko (ei vaikuta tässä)
  205.         dc.w    CUSTOMSCREEN    ; näytön tyyppi
  206.  
  207. Varit        dc.w    $0000,$000f,$00f0,$0f00
  208.  
  209. *************************************************************************
  210. *                                    *
  211. * ASCII-merkkijonot.  Näiden EI tarvitse alkaa parillisista osoitteista    *
  212. * kuten muiden muuttujien, koska nämä ovat tavumuotoista tietoa.    *
  213. *                                    *
  214. *************************************************************************
  215.  
  216. dosnimi        dc.b    "dos.library",0
  217. gfxnimi        dc.b    "graphics.library",0
  218. intuinimi    dc.b    "intuition.library",0
  219.  
  220. teksti    dc.b    "Huomio!  Tässä kokeillaan C=Lehden boottiscrollirutiinia.  "
  221.     dc.b    "Teksti on tallennettu sellaisenaan muistiin.  "
  222.     dc.b    "Tekstirivejä voi lisätä haluamansa määrän ilman, että "
  223.     dc.b    "muuta ohjelmaa tarvitsee muuttaa.  Ohjelman on tietysti "
  224.     dc.b    "mahduttava boot-blokkiin...  Viimeisenä on oltava "
  225.     dc.b    "nollatavu, josta ohjelma tietää tekstin päättyvän. "
  226.     dc.b    "Greetings to JC and (-: PPP :-)                    "
  227.     dc.b    "                          ",0    LOPPUMERKKI!
  228.  
  229.     end
  230.  
  231.