home *** CD-ROM | disk | FTP | other *** search
/ The Amiga Demo Collection / TheAmigaDemoCollectionCDCUE.img / S / showtime05 / Bonus / BScreen.lha / Blitterscreen / BScreenInt3.i < prev    next >
Text File  |  1992-12-20  |  2KB  |  102 lines

  1. BScreenCurrentScreen    ds.l    1
  2. BScreenCurrentCop    dc.w    0
  3. BScreenCopTable        ds.l    2    ;Table inizialized in BScreenInit
  4.  
  5.  
  6. *** HARDWAREHACK INTERRUPT HANDLER
  7. BScreenInt3
  8.     move.l    d0,-(sp)
  9.     move.w    $dff01e,d0
  10.     btst.l    #6,d0
  11.     beq.s    .noblit
  12.     bsr    BScreenBlitInt        ;<--- Blitter handling called here
  13.     bra.s    BScreenInt3End
  14. .noblit    btst.l    #5,d0
  15.     beq.s    .novb
  16.     bsr.s    BScreenVBInt        ;<--- BitPlanes pointers set here
  17.     bra.s    BScreenInt3End
  18. .novb    btst.l    #4,d0
  19.     beq.s    .nocop
  20.     bsr.s    BScreenCopInt        ;<--- Call here your Copper int routine
  21.     bra.s    BScreenInt3End
  22. .nocop
  23. * huh ?
  24.     move.w #$0070,$dff09c    ;kill all requests to avoid(?) delirium
  25. BScreenInt3End
  26.     move.l    (sp)+,d0
  27.     rte
  28.  
  29. ;****** Handle Vertical Blanking Interrupt *******
  30. BScreenVBInt
  31.     move.w    #$0020,$dff09c    ;clear VB request
  32.     movem.l    d0-d1/a0-a1,-(sp)
  33.  
  34.     lea.l    $dff0e0,a0    ;used here
  35.  
  36. *--- Set Coplist
  37.     lea.l    BScreenCopTable(PC),a1        ;table address
  38.     move.w    BScreenCurrentCop(PC),d0    ;counter
  39.     move.l    0(a1,d0.w*4),$080-$0e0(a0)    ;right address to register
  40.     move.w    d0,$088-$0e0(a0)        ;restart coplist
  41.     addq.w    #1,d0                ;counter to next
  42.     andi.w    #1,d0                ;modulo 2
  43.     move.w    d0,BScreenCurrentCop        ;store
  44.  
  45. *--- Set planes
  46.     move.l    BScreenCurrentScreen(PC),d0
  47.     move.l    #BScreenPlaneSize,d1
  48.  
  49.     move.l    d0,(a0)+    ;first and second plane
  50.     move.l    d0,(a0)+
  51.     add.l    d1,d0
  52.     move.l    d0,(a0)+    ;third and fourth
  53.     move.l    d0,(a0)+
  54.     add.l    d1,d0
  55.     move.l    d0,(a0)+    ;fifth and sixth
  56.     move.l    d0,(a0)+
  57.     add.l    d1,d0
  58.     move.l    d0,(a0)+    ;seventh and eighth
  59.     move.l    d0,(a0)+
  60.  
  61.  
  62. *--- All Done
  63.     movem.l    (sp)+,d0-d1/a0-a1
  64.     rts
  65.  
  66.  
  67. ;******* Handle Copper Interrupt ********
  68. BScreenCopInt
  69.     move.w    #$0010,$dff09c
  70.     rts
  71.  
  72.  
  73. ;****** Handle Blitter Interrupt ********
  74. BScreenBlitInt
  75.     move.w    #$0040,$dff09c    ;clear blit request
  76.  
  77.     movem.l    d0-d1/a5-a6,-(sp)
  78.     lea.l    $dff000,a5        ;Hardware Base Reg
  79.     move.l    bltpc(PC),a6        ;Blitter Program Counter
  80.  
  81. .bltsetreg
  82.     move.l    (a6)+,d0        ;next istr for blitter
  83.     move.w    d0,d1             ;copy
  84.     beq.s    .bltintend         ;exit if 0
  85.     swap    d0
  86.     move.w    d0,0(a5,d1.w)        ;put value in the right register
  87.  
  88.     cmp.w    #$5e,d1            ;HSize & start ???
  89.     beq.s    .bltstarted        ;if yes, start
  90.     cmp.w    #$58,d1            ;Size & Start ???
  91.     bne.s    .bltsetreg        ;if no, put next
  92. * ---
  93. .bltstarted
  94.     move.l    a6,bltpc        ;Store Blitter PC
  95.     movem.l    (sp)+,d0-d1/a5-a6
  96.     rts
  97.  
  98. .bltintend
  99.     clr.w    bltbsy            ;Blitter free for another screen
  100.     movem.l (sp)+,d0-d1/a5-a6
  101.     rts
  102.