home *** CD-ROM | disk | FTP | other *** search
/ The CDPD Public Domain Collection for CDTV 3 / CDPDIII.bin / pd / commodities / superdark / blankers / shaded_bobs.s < prev    next >
Text File  |  1993-01-05  |  5KB  |  256 lines

  1.     ; ##########################
  2.     ; # PLASMA  T.Landspurg 91 #
  3.     ; ##########################
  4.     ; A assembler sous devpac
  5.     opt c+,o+,ow-
  6.  
  7. prof=5
  8. CUSTOM = $dff000    ; Registres hardware
  9. NB_LIGNE=256
  10. NB_LIGNE_SPR=10
  11. NB_BYTE_LIGNE=40
  12. tailleplan=NB_LIGNE*NB_BYTE_LIGNE
  13. taillescr=tailleplan*prof
  14.  
  15.     opt    d+
  16.  
  17. ;    incdir    "include:"
  18.     incdir    "work:prog/devpac/include/"
  19.     include    exec/exec_lib.i
  20.     include    exec/types.i
  21.     include    exec/memory.i
  22.     include    graphics/graphics_lib.i
  23.     include    intuition/intuition_lib.i
  24.     include    graphics/gfxbase.i
  25.     include    hardware/custom.i
  26.     include libraries/dos.i
  27.     include    struct.i
  28.  
  29.     section    plasma,CODE_C
  30.     ; DEBUT DU PROGRAMME
  31. _dark:
  32.     movem.l    d0-d7/a0-a6,-(a7)
  33.  
  34.  
  35.     lea    b(pc),a4    ; a4 POINTERA TOUJOURS SUR LA BASE!
  36.     lea    graphname(pc),a1; Ouverture de la graphics
  37.     clr.l    d0
  38.     CALLEXEC    OpenLibrary
  39.     move.l    d0,_GfxBase-b(a4)
  40.     lea    intuiname(pc),a1
  41.     clr.l    d0
  42.     CALLEXEC    OpenLibrary
  43.     move.l    d0,_IntuitionBase-b(a4)
  44.  
  45.     bsr    allocscr
  46.     tst.l    d0
  47.     beq    error_scr
  48.     lea    CUSTOM,a5    ; Base des coprocesseurs
  49. ;    move.w    intenar(a5),save_intena-b(a4)
  50. ;    or.w    #$c000,save_intena-b(a4)
  51. ;    move.w    #$7fff,intena(a5)
  52. ;    move.w    #$0020,dmacon(a5); controle DMA
  53. ;    move.w    #$8400,dmacon(a5) ; Bltpri
  54. ;    move.b    #%10000111,$bfd100 ; ARRET DU DRIVE (BEURK!)
  55.     CALLGRAF    OwnBlitter
  56.     CALLGRAF    WaitBlit
  57.     bsr    met_cop
  58. waitbout:            ; BOUCLE PRINCIPALE
  59.     sub.w    #1,tempo
  60.     tst.w    tempo
  61.     bne.s    pas_end_temp
  62. pas_end_temp:
  63.  
  64. sync:
  65.     btst    #0,vposr+1(a5)
  66.     bne.s    sync
  67. sync1:
  68.     cmp.b    #60,vhposr(a5)    ; Syncronisation
  69.     bne.s    sync1
  70.     btst    #6,$bfe001    ; Test le bouton de la souris
  71.     beq.s    out
  72.  
  73.  
  74.     lea    CUSTOM,a5
  75.     move.w    joy0dat(a5),d0    ; recupere coord de la souris
  76.     move.w    d0,d1
  77.     and.w    #$ff,d0
  78.     lsr.w    #8,d1
  79.  
  80.     bsr    aff_sprite
  81.  
  82.     moveq    #0,d0
  83.     moveq    #0,d1
  84.     movem.l    d1-d7/a0-a6,-(a7)
  85.     CALLEXEC    SetSignal
  86.     and.l    #SIGBREAKF_CTRL_C,d0
  87.     movem.l    (a7)+,d1-d7/a0-a6
  88.     tst.l    d0
  89.     beq.s    waitbout
  90. out:
  91.     lea    CUSTOM,a5    ; a5 pointera sur les registres hardware
  92. ;    move.w    save_intena-b(a4),intena(a5)    ; interuption
  93.     move.l    _GfxBase(pc),a0 ; On restore l'ancienne copperlist
  94.     move.l    $32(a0),d0
  95.     move.l    $26(a0),cop1lc(a5)
  96.  
  97. ;    CALLINT    RethinkDisplay
  98.  
  99.     CALLGRAF    DisownBlitter
  100.     bsr    freescr
  101. error_scr:
  102.     move.l    _GfxBase(pc),a1 ; On referme la libraire
  103.     CALLEXEC CloseLibrary
  104.     move.l    _IntuitionBase(pc),a1 ; On referme la libraire
  105.     CALLEXEC CloseLibrary
  106. ;    move.w    #$0400,dmaconr(a5)
  107. ;    move.w    #$8020,dmaconr(a5)
  108.     movem.l    (a7)+,d0-d7/a0-a6
  109.     moveq    #0,d0
  110.     rts
  111.  
  112.  
  113.     ; #########################
  114.     ; ROUTINES POUR LES SPRITES
  115.     ; #########################
  116.     ; d4:numsprite
  117. aff_sprite:
  118.     movem.l    d0-d3/d5-d7/a0-a5,-(a7)    ; !!! PETITE OPTIMISATION SUR LES REGISTRES
  119.  
  120.     move.l    bitplane0(pc),a1 ; destination
  121.     lea    motif,a0    ; source
  122.  
  123.     mulu    #(NB_BYTE_LIGNE),d1 ; y
  124.  
  125.     move.l    d0,d3        ; x
  126.     and.w    #$0f,d0        ; partie basse=decalage raster
  127.     ror.w    #4,d0        ; rotation (circulaire)=lsl.w #12,d7
  128.  
  129.     lsr.l    #3,d3        ; en octets
  130.     bclr    #0,d3    ; partie haute
  131.     add.w    d3,d1
  132.     lea    (a1,d1.w),a1    ; adresse de pour la deuxieme partie
  133.     move.w    d0,d3
  134. ;    or.w    #$0fca,d3
  135.     or.w    #$09f0,d3
  136.  
  137.     move.w    d3,bltcon0(a5)    ; controle
  138.     move.w    d0,bltcon1(a5)
  139.     move.w    #NB_BYTE_LIGNE-4,bltdmod(a5)    ; modulos pour le masque
  140.     clr.w    bltamod(a5)
  141.     move.l    #$ffff0000,bltafwm(a5)
  142.     bsr    waitblit
  143.  
  144.     move.l    a0,bltapt(a5)
  145.     move.l    a1,bltdpt(a5)
  146.     move.w    #NB_LIGNE_SPR<<6+2,bltsize(a5)    ; depart
  147.     lea    (a0,d0.w),a0
  148.     lea    (a1,d1.w),a1
  149.     movem.l    (a7)+,d0-d3/d5-d7/a0-a5    ; !!! FAUT DESEMPILER LES MEMES REGISTRES
  150.     rts
  151.  
  152.  
  153.  
  154.  
  155.     ; Allocation memoire pour les buffers ecran
  156. allocscr:
  157.     move.l    #taillescr,d0    ; 2 ecrans car double buffering
  158.     move.l    #MEMF_CLEAR|MEMF_CHIP,d1
  159.     CALLEXEC AllocMem
  160.     move.l    d0,bitplane0
  161.     rts
  162.     ; desallocation memoire des buffers
  163. freescr:
  164.     move.l    bitplane0(pc),a1
  165.     move.l    #taillescr,d0
  166.     CALLEXEC FreeMem
  167.     rts
  168.  
  169. met_cop:
  170.     move.l    bitplane0,a5
  171.     bsr    initbrush        ; on change la copperlist
  172.     move.l    _GfxBase(pc),a0        ; on reaffiche la copperlist
  173.     move.l    #mycop,$32(a0)
  174.     lea    CUSTOM,a5
  175.     move.l    #mycop,cop1lc(a5)
  176.     clr.w    copjmp1(a5)
  177.     rts
  178.  
  179.     ; MET DANS LA COPPER LIST LES ADRESSES DES BITPLANES
  180.  
  181. initbrush:            ; d0 contient l'adresse du prem plan
  182.     lea    p_bitpl,a0
  183.     move.w    #$00e0,d1    ; adresses de bitp0h
  184.     move.w    #prof-1,d2
  185. ibrush:    
  186.     move.l    a5,d0
  187.     bsr    metadr
  188.     bsr    metadr
  189.     add.l    #NB_LIGNE*NB_BYTE_LIGNE,a5
  190.     dbf    d2,ibrush
  191.     rts
  192.  
  193. metadr:                ; cet ici qu'on le met dans la coplist
  194.     swap    d0
  195.     move.w    d1,(a0)+
  196.     move.w    d0,(a0)+
  197.     addq.w    #2,d1
  198.     rts
  199.  
  200. waitblit:
  201.     btst    #14,dmaconr(a5)
  202.     bne.s    waitblit
  203.     rts
  204. b:
  205. oldcop:    dc.l    0
  206. bitplane0:dcb.l    1
  207. flagcop:dc.b    0
  208.  
  209. save_intena:dc.w    0
  210. waitblit:macro
  211. waitblit\@:
  212.     btst    #14,dmaconr(a5)
  213.     bne    waitblit\@
  214.     endm
  215. graphname:
  216.     GRAFNAME
  217. intuiname:
  218.     INTNAME
  219.     even
  220. tempo:dc.w    100
  221. _IntuitionBase:dc.l    0
  222. _GfxBase:
  223.     dc.l    0
  224.  
  225.     section    coplist,DATA_C
  226. mycop:
  227.     dc.w    $1081,$fffe
  228.     dc.w    $180,0,$182,$ff
  229.     dc.w    $008e,$2581
  230.     dc.w    $0090,$40c1
  231.     dc.w    $0092,$0038
  232.     dc.w    $0094,$00cc
  233.     dc.w    $102,0
  234.     dc.w    $108,0
  235.     dc.w    $10a,0
  236.     dc.w    $009c,$8010
  237.     dc.w    $3101,$fffe
  238.     dc.w    $0100,prof<<12
  239. p_bitpl
  240.     dcb.w    prof*4,0
  241.     dc.l    $f0dffffe
  242.     dc.l    $01000000
  243.     dc.l    $fffffffe
  244. fincop4:
  245.  
  246. motif:
  247.     dc.w    $ffff,$ffff
  248.     dc.w    $ffff,$ffff
  249.     dc.w    $ffff,$ffff
  250.     dc.w    $ffff,$ffff
  251.     dc.w    $ffff,$ffff
  252.     dc.w    $ffff,$ffff
  253.     dc.w    $ffff,$ffff
  254.     dc.w    $ffff,$ffff
  255.     dc.w    $ffff,$ffff
  256.