home *** CD-ROM | disk | FTP | other *** search
/ Vectronix 2 / VECTRONIX2.iso / FILES_03 / SOURCE_J.LZH / 3DDEMO / GPU.S < prev    next >
Text File  |  1995-02-16  |  4KB  |  136 lines

  1. ;*======================================================================*
  2. ;*                TITLE:                  GPU.S                         *
  3. ;*                Function:               Gpu interfece routines        *
  4. ;*                                                                      *
  5. ;*                Project #:              RAPIER                        *
  6. ;*                Programmer:             Andrew J Burgess              *
  7. ;*                                        Rob Zdybel                    *
  8. ;*                                                                      *
  9. ;*              COPYRIGHT 1992/1993 Atari Computer Corporation          *
  10. ;*          UNATHORIZED REPRODUCTION, ADAPTATION, DISTRIBUTION,         *
  11. ;*          PERFORMANCE OR DISPLAY OF THIS COMPUTER PROGRAM OR          *
  12. ;*        THE ASSOCIATED AUDIOVISUAL WORK IS STRICTLY PROHIBITED.       *
  13. ;*                            ALL RIGHTS RESERVED.                      *
  14. ;*                                                                      *
  15. ;*======================================================================*
  16.  
  17.     include "jaguar.inc"
  18.  
  19. ;
  20. ;    PUBLIC SYMBOLS
  21. ;
  22.     .globl    gpuload
  23.     .globl    gpurun
  24.     .globl    gpuwait
  25.  
  26.     .extern    framecnt
  27.  
  28. ;*======================================================================*
  29. ;* gpuload()    - load a GPU program into GPU RAM
  30. ;*
  31. ;*    input:
  32. ;*        a0    - 68000 address of GPU program
  33. ;*        a1    - destination address
  34. ;*        d0    - size of program
  35. ;*
  36. ;*    preserved:
  37. ;*        d0-d1
  38. ;*        a0-a1
  39. ;*======================================================================*
  40.  
  41. gpuload:
  42.     movem.l    d0-d1/a0-a2,-(sp)        ; save GPU address for restore
  43.  
  44.     move.l    #B_CMD,a2
  45. .waitblit:            ; Wait for BLTTER Idle
  46.     move.l    (a2),d1
  47.     lsr.w    #1,d1
  48.     bcc    .waitblit
  49.  
  50.     jsr    gpuwait
  51.  
  52. ; This code will load a gpu program into the Blitter at the address
  53. ; specified in the header 
  54.  
  55.     move.l    #PITCH1|PIXEL16|WID256|XADDPHR,d1
  56.     move.l    d1,A1_FLAGS
  57.     move.l    d1,A2_FLAGS
  58.     
  59.     move.l    a1,A1_BASE    ; Point A1BASE to the destination
  60.     move.l    #0,A1_PIXEL    ; Set the pixel pointer to the offset in d1
  61.  
  62. ; Find size of data to load
  63.  
  64.     asr.l    #1,d0        ; Convert to words
  65.     or.l    #$10000,d0    ; Set 1 outer loop
  66.     move.l    d0,B_COUNT    ; Set up Counters register to number of words
  67.  
  68. ; Point A2BASE to the source
  69. ; a0 now points to the data
  70.  
  71.     move.l    a0,A2_BASE
  72.  
  73. ; Set the pixel pointer to the offset in d1
  74.  
  75.     move.l    #0,A2_PIXEL
  76.  
  77.     move.l    #SRCEN|LFU_AN|LFU_A,d0
  78. .blit_go:
  79.     move.l    d0,B_CMD
  80. ;
  81. ;    NOTE: No Wait for BLTTER Idle - I have yet to be overrun but WARNING
  82. ;
  83.     movem.l    (sp)+,d0-d1/a0-a2
  84.     rts
  85.  
  86. ;*======================================================================*
  87. ;* gpurun()    - tell the GPU to begin execution
  88. ;*
  89. ;*    input:
  90. ;*        a0    - 68000 address of GPU program
  91. ;*
  92. ;*    preserved:
  93. ;*        d0-d1
  94. ;*        a0
  95. ;*======================================================================*
  96. gpurun:
  97.     movem.l    d0-d1/a0,-(sp)        ; save GPU address for restore
  98.     move.l    #$F03000,G_PC
  99.  
  100.     move.l    #$11,G_CTRL        ; Turn on the GPU
  101.  
  102.     movem.l    (sp)+,a0/d0-d1        ; restore GPU address
  103.     rts
  104.  
  105. ;*======================================================================*
  106. ;* gpuwait()    - wait for the GPU to finish executing
  107. ;*
  108. ;*    input:
  109. ;*        None
  110. ;*
  111. ;*    preserved:
  112. ;*        d0
  113. ;*        a0
  114. ;*======================================================================*
  115. gpuwait:
  116.     movem.l    a0-a1/d0-d1,-(sp)
  117.  
  118.     lea    G_CTRL,a0
  119.     move.l    #$400000,a1
  120. .gpuwt:                ; wait for GPU to finish
  121.     move.l    framecnt,d1
  122.     swap    d1
  123.     move.w    $f00006,d1
  124.     move.l    d1,(a1)+
  125.     move.l    #-1,(a1)
  126.     move.l    (a0),d0
  127.     asr    #1,d0
  128.     bcs    .gpuwt
  129.  
  130.     movem.l    (sp)+,a0-a1/d0-d1
  131.     rts
  132. ;*======================================================================*
  133. ;*                                 EOF                                  *
  134. ;*======================================================================*
  135.  
  136.