home *** CD-ROM | disk | FTP | other *** search
/ Amiga ACS 1998 #6 / amigaacscoverdisc1998-061998.iso / games / descent / source / 3d / setup.asm < prev    next >
Assembly Source File  |  1998-06-08  |  5KB  |  196 lines

  1. ;THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
  2. ;SOFTWARE CORPORATION ("PARALLAX").  PARALLAX, IN DISTRIBUTING THE CODE TO
  3. ;END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
  4. ;ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
  5. ;IN USING, DISPLAYING,  AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
  6. ;SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
  7. ;FREE PURPOSES.  IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
  8. ;CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES.  THE END-USER UNDERSTANDS
  9. ;AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.  
  10. ;COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION.  ALL RIGHTS RESERVED.
  11. ;
  12. ; $Source: f:/miner/source/3d/rcs/setup.asm $
  13. ; $Revision: 1.13 $
  14. ; $Author: matt $
  15. ; $Date: 1995/02/09 22:00:53 $
  16. ;
  17. ; Source for setup,close,start & end frame routines
  18. ;
  19. ; $Log: setup.asm $
  20. ; Revision 1.13  1995/02/09  22:00:53  matt
  21. ; Removed dependence on divide overflow handler; we now check for overflow
  22. ; before dividing.  This fixed problems on some TI chips.
  23. ; Revision 1.12  1994/11/10  21:29:48  mike
  24. ; call init_interface_vars_to_assembler.
  25. ; Revision 1.11  1994/10/03  12:50:54  matt
  26. ; Fixed stupid mistake
  27. ; Revision 1.10  1994/10/03  12:50:12  matt
  28. ; Took out unused routines & data
  29. ; Revision 1.9  1994/07/25  00:00:05  matt
  30. ; Made 3d no longer deal with point numbers, but only with pointers.
  31. ; Revision 1.8  1994/04/19  18:26:43  matt
  32. ; Added g3_draw_sphere() function.
  33. ; Revision 1.7  1994/03/15  21:21:58  matt
  34. ; Put in check for div overflow in blob code
  35. ; Revision 1.6  1994/02/10  18:00:43  matt
  36. ; Changed 'if DEBUG_ON' to 'ifndef NDEBUG'
  37. ; Revision 1.5  1994/01/28  13:07:50  matt
  38. ; Added func, g3_get_view_pos_ptr_, sortof a hack, for the polygon objects.
  39. ; Revision 1.4  1994/01/14  17:19:50  matt
  40. ; Added check for no points in start_frame()
  41. ; Revision 1.2  1993/11/04  18:49:18  matt
  42. ; Added system to only rotate points once per frame
  43. ; Revision 1.1  1993/10/29  22:20:27  matt
  44. ; Initial revision
  45. ;
  46. ;
  47.  
  48. .386
  49.     option    oldstructs
  50.  
  51.     .nolist
  52.     include    types.inc
  53.     include    psmacros.inc
  54.     include    gr.inc
  55.     include    3d.inc
  56.     include    div0.inc
  57.     .list
  58.  
  59.     assume    cs:_TEXT, ds:_DATA
  60.  
  61. _DATA    segment    dword public USE32 'DATA'
  62.  
  63. rcsid    db    "$Id: setup.asm 1.13 1995/02/09 22:00:53 matt Exp $"
  64.     align    4
  65.  
  66.  extd free_point_num
  67.  
  68. _DATA    ends
  69.  
  70.  
  71.  
  72. _TEXT    segment    dword public USE32 'CODE'
  73.  
  74.     extn    init_interface_vars_to_assembler_
  75.     extn    atexit_    ;C library function
  76.  
  77. ;I don't what these are supposed to do, but here they are.
  78.  
  79. ;sets up divide overflow handler, and sets the global points variables. 
  80. ;takes eax=points, edx=vecs, ecx=num points
  81. ;trashes eax,edx
  82. g3_init:
  83.     mov    eax,DM_ERROR
  84.     call    div0_init_
  85.     or    eax,eax    ;check error
  86.     jnz    dz_ok
  87.     int    3
  88. dz_ok:
  89.  
  90. ;;@@;handlers for point projection
  91. ;;@@    lea    eax,cs:proj_div0
  92. ;;@@    lea    edx,cs:div_overflow_handler
  93. ;;@@    call    div0_set_handler_
  94. ;;@@
  95. ;;@@    lea    eax,cs:proj_div1
  96. ;;@@    lea    edx,cs:div_overflow_handler
  97. ;;@@    call    div0_set_handler_
  98. ;;@@
  99. ;;@@;handlers for blob draw
  100. ;;@@    lea    eax,cs:blob_div0
  101. ;;@@    lea    edx,cs:blob_overflow_handler
  102. ;;@@    call    div0_set_handler_
  103. ;;@@
  104. ;;@@    lea    eax,cs:blob_div1
  105. ;;@@    lea    edx,cs:blob_overflow_handler
  106. ;;@@    call    div0_set_handler_
  107. ;;@@
  108. ;;@@;handler for sphere projection
  109. ;;@@    lea    eax,cs:sphere_proj_div
  110. ;;@@    lea    edx,cs:sphere_div_overflow_handler
  111. ;;@@    call    div0_set_handler_
  112. ;;@@
  113.  
  114.     lea    eax,cs:g3_close
  115.     call    atexit_
  116.  
  117.     ret
  118.  
  119.  
  120. g3_close:    ret
  121.  
  122.  
  123. ;cv_bitmap equ 0
  124. ;bm_w equ 4
  125. ;bm_h equ 6
  126.  
  127. ;start rendering a frame. sets up window vars
  128. g3_start_frame:    pushm    eax,edx,esi
  129.  
  130.     mov    esi,grd_curcanv
  131.  
  132.     movzx    eax,w [esi].cv_bitmap.bm_w
  133.     mov    Canvas_width,eax    ;store width
  134.     sal    eax,15    ;get fixed-point width/2
  135.     mov    Canv_w2,eax
  136.  
  137.     movzx    eax,w [esi].cv_bitmap.bm_h
  138.     mov    Canvas_height,eax    ;store height
  139.     sal    eax,15    ;get fixed-point height/2
  140.     mov    Canv_h2,eax
  141.  
  142. ;compute aspect ratio for this canvas
  143.     mov    esi,grd_curscreen
  144.     mov    eax,[esi].sc_aspect    ;get pixel ratio
  145.     imul    Canvas_height    ;figure in window size
  146.     idiv    Canvas_width
  147.  
  148.     cmp    eax,f1_0    ; > 1?
  149.     jg    scale_y
  150.     mov    Window_scale.x,eax
  151.     mov    Window_scale.y,f1_0
  152.     jmp    got_win_scale
  153. scale_y:    mov    esi,eax
  154.     mov    eax,f1_0
  155.     fixdiv    esi
  156.     mov    Window_scale.y,eax
  157.     mov    Window_scale.x,f1_0
  158. got_win_scale:    mov    Window_scale.z,f1_0    ;always 1
  159.  
  160.     call    init_interface_vars_to_assembler_
  161.  
  162.     popm    eax,edx,esi
  163.     ret
  164.  
  165. ;this doesn't do anything, but is here for completeness
  166. g3_end_frame:
  167.     ifndef    NDEBUG
  168.      test    free_point_num,-1
  169.      ;break_if    nz,"Error: free_point_num != 0 in g3_end_frame"
  170.      ;Commented the above line out, so it would compile
  171.     endif
  172.     ret
  173.  
  174.  
  175. ;@@ public g3_get_view_pos_ptr_
  176. ;@@g3_get_view_pos_ptr_:
  177. ;@@    lea    eax,View_position
  178. ;@@    ret
  179.  
  180.  
  181. _TEXT    ends
  182.  
  183.     end
  184.