home *** CD-ROM | disk | FTP | other *** search
/ Vectronix 2 / VECTRONIX2.iso / FILES_03 / SOURCE_J.LZH / 3DDEMO / CRYMAIN.S < prev    next >
Text File  |  1994-09-08  |  15KB  |  735 lines

  1. ;*======================================================================*
  2. ;*                TITLE:                  TURTLE.S                      *
  3. ;*                Function:               Complete 3D Turtle Demo       *
  4. ;*                                                                      *
  5. ;*                Project #:              RAPIER                        *
  6. ;*                Programmer:             Rob Zdybel                    *
  7. ;*                                                                      *
  8. ;*              COPYRIGHT 1993 Atari Computer Corporation               *
  9. ;*          UNATHORIZED REPRODUCTION, ADAPTATION, DISTRIBUTION,         *
  10. ;*          PERFORMANCE OR DISPLAY OF THIS COMPUTER PROGRAM OR          *
  11. ;*        THE ASSOCIATED AUDIOVISUAL WORK IS STRICTLY PROHIBITED.       *
  12. ;*                            ALL RIGHTS RESERVED.                      *
  13. ;*                                                                      *
  14. ;*======================================================================*
  15.  
  16.     include "jaguar.inc"
  17. ;
  18. ;    EXTERNAL SYMBOLS
  19. ;
  20.     .extern    cube        ; Hand-Made Cube
  21.  
  22.     .extern TXTCRY_S
  23.     .extern    text3D
  24.     .extern    SORT_S
  25.     .extern    bsort
  26.     .extern    TURTLE_S
  27.     .extern turtpak
  28.     .extern TXTCRY_E
  29.     .extern    SORT_E
  30.     .extern    TURTLE_E
  31.     .extern    cubesize        ; Hand-Made Cube
  32.     .extern cubedata
  33.     .extern    gpuload
  34.     .extern    gpurun
  35.     .extern    gpuwait
  36.     .extern    make_olist
  37.     .extern    pad_now
  38.     .extern    pad_shot
  39.     .extern    readpad
  40.     .extern    vblank
  41.     .extern    vidinit
  42.     .extern    Transform
  43.  
  44.     .extern    framecnt
  45.  
  46.     .extern    bmp_data
  47.     .extern    DISPBUF0
  48.     .extern DISPBUF1
  49.     .extern ZBUF
  50.  
  51.  
  52.     .extern    TexVertPtr
  53.     .extern    VertexPtr
  54.     .extern    EndOfPack
  55.  
  56.     .globl    _main
  57.     .globl    eyepts
  58.     .globl    texpts
  59.     .globl    mthpts
  60.     .globl    brpts
  61. ;
  62. ;    USEFUL DEFINES
  63. ;
  64.  
  65.  
  66. RAMSIZE       EQU    $1000        ; 4K bytes
  67. INPUT6        EQU    G_ENDRAM-$4    ; pointer to parameter 6 for GPU
  68. INPUT5        EQU    INPUT6-$4    ; pointer to parameter 5 for GPU
  69. INPUT4        EQU    INPUT5-$4    ; pointer to parameter 4 for GPU
  70. INPUT3        EQU    INPUT4-$4    ; pointer to parameter 3 for GPU
  71. INPUT2        EQU    INPUT3-$4    ; pointer to parameter 2 for GPU
  72. INPUT1        EQU    INPUT2-$4    ; pointer to parameter 1 for GPU
  73.  
  74.  
  75. ;
  76. ;    PROGRAM SEGMENT
  77. ;
  78.     .text
  79.  
  80. _main:
  81.     move.l    #DISPBUF0+15,d0        ; Set up screen buffers with
  82.     and.l    #~15,d0            ; draw_ptr on a 256 byte boundary
  83.     move.l    d0,draw_ptr
  84.     addq    #8,d0
  85.     move.l    d0,disp_ptr
  86.  
  87.     jsr    initurtl    ; initialize turtles
  88.  
  89.     moveq.l    #0,d0
  90.     moveq.l    #-1,d1
  91.     move    d0,gameover    ; Game not over yet
  92.     move.l    d1,pad_now    ; Clear the joypad
  93.     move    d0,ncubes
  94.  
  95.     move    d0,rotate_flg
  96.     move    d1,amb_flg
  97.     move    d1,sun_flg
  98.     move    d1,bulb_flg
  99.     move    d0,scrublist    ; ScrubList = Nil
  100.     move    #1,drawlist    ; One Object
  101.  
  102. framelp:
  103.     move.l    #$FFFFFFFF,PIT0
  104.  
  105.     jsr    clrscreen    ; Clear the draw buffer
  106.     jsr    do_sort
  107.  
  108.     lea    TXTCRY_S,a0
  109.     lea    text3D,a1
  110.     move.l    #TXTCRY_E,d0
  111.     sub.l    #TXTCRY_S,d0
  112.     jsr    gpuload        ; Load Polyhedron Draw Routine into GPU RAM
  113.  
  114.     move.l    PIT0,d0
  115.     move.l    d0,time1
  116.  
  117.     move    drawlist,newlist
  118. drawlp:    move    newlist,d0    ; WHILE (DrawList <> Nil) DO Draw Object
  119.     beq    .drawxit
  120.     move    d0,d1
  121.     mulu    #turtlsiz,d0
  122.     add.l    #turtle,d0    ; D0 = Ptr to Turtle
  123.     move.l    d0,a0
  124.     move    turtlnk(a0),newlist
  125.     cmp    #0,zposn(a0)
  126.     blt    drawlp
  127.     lea    turtle+turtlsiz,a1
  128.     move.l    (a1)+,(a0)+    ; Cheat rotation by copying from one cube
  129.     move.l    (a1)+,(a0)+
  130.     move.l    (a1)+,(a0)+
  131.     move.l    (a1)+,(a0)+
  132.     move.w    (a1)+,(a0)+
  133.  
  134.     move.l    #cubedata,model_ptr    ; point to the appropriate model
  135.  
  136.     jsr    gpuwait        ; Wait for GPU Idle
  137.  
  138.     jsr    do_fastdraw    ; Start GPU/BLTTER Polyhedron Draw
  139.     bra    drawlp
  140. .drawxit:
  141.  
  142.  
  143.     jsr    readpad        ; Read the Joypad
  144.  
  145.     jsr    gpuwait        ; Wait for GPU Idle
  146.     
  147.     move.l    PIT0,d0
  148.     move.l    d0,time2
  149.  
  150.     move.l    #$0,BORD1    ; **KLUDGE** Bug Test
  151.  
  152.     move.l    disp_ptr,d0
  153.     move.l    draw_ptr,disp_ptr
  154.     move.l    d0,draw_ptr    ; Swap buffers
  155.  
  156.     move.l    disp_ptr,bmp_data
  157.  
  158.     jsr    input        ; DEBUG Interpret the Joypad input
  159.  
  160.     move.l    framecnt,d7    ; D7 = Current Frame for sync later
  161.  
  162. .wsync:    cmp.l    framecnt,d7
  163.     beq    .wsync        ; Wait for video sync
  164.  
  165. ;    move    gameover,d0
  166. ;    beq    framelp        ; UNTIL (Game Over)
  167.  
  168. timecheck:
  169.     move.l    PIT0,d0
  170.     move.l    d0,time3
  171. ;    move.l    PIT0,d0
  172. ;    move.l    d0,time3
  173.     ; go forever
  174.     bra    framelp
  175. stop:
  176.     illegal            ; **KLUDGE** FORCE EXIT TO ADB
  177. ;    rts
  178.     nop
  179.  
  180.  
  181. ;
  182. ;    SUBROUTINE AREA
  183. ;
  184.  
  185. ;
  186. ;    INPUT  Interpret Joypad results and act accordingly
  187. ;
  188. ;    Given:
  189. ;        PAD_NOW = Current Joypad reading
  190. ;        PAD_SHOT = One-Shot Joypad
  191. ;
  192. ;    Returns:
  193. ;        Input handled
  194. ;
  195. ;    Register Usage:
  196. ;        All Registers Restored
  197. ;
  198. ;    Externals:
  199. ;        GPULOAD, DO_TURTLE
  200. ;
  201. ;    NOTE:  SHOULD CONVERT TO THE GPU.
  202. input:
  203.     movem.l    d0-d7/a0-a1,-(sp)
  204.  
  205.  
  206.     lea    TURTLE_S,a0
  207.     lea    turtpak,a1
  208.     move.l    #TURTLE_E,d0
  209.     sub.l    #TURTLE_S,d0
  210.     jsr    gpuload        ; Load Turtle Package into GPU
  211. ;
  212. ;    Handle ViewPoint Rotation and Translation
  213. ;
  214.     move.l    pad_now,d0
  215.     moveq    #0,d1
  216.     btst.l    #JOY_UP,d0
  217.     beq    .noup
  218.     addq    #4,d1        ; PITCH Down
  219. .noup:    btst.l    #JOY_DOWN,d0
  220.     beq    .nodwn
  221.     subq    #4,d1        ; PITCH Up
  222. .nodwn:    moveq    #0,d2
  223.     btst.l    #JOY_LEFT,d0
  224.     beq    .nolft
  225.     addq    #4,d2        ; YAW Left
  226. .nolft:    btst.l    #JOY_RIGHT,d0
  227.     beq    .norit
  228.     subq    #4,d2        ; YAW Right
  229. .norit:    moveq    #0,d3
  230.     btst.l    #KEY_1,d0
  231.     beq    .nocw
  232.     subq    #4,d3        ; ROLL Clockwise
  233. .nocw:    btst.l    #KEY_3,d0
  234.     beq    .noccw
  235.     addq    #4,d3        ; ROLL CounterClockwise
  236. .noccw:    moveq    #0,d4
  237.     btst.l    #KEY_STAR,d0
  238.     beq    .norev
  239.     subq    #4,d4        ; REVERSE
  240. .norev:    btst.l    #KEY_HASH,d0
  241.     beq    .nofor
  242.     addq    #4,d4        ; FORWARD
  243. .nofor:    btst.l    #FIRE_A,d0
  244.     beq    .nomor
  245.     add    #20,d4        ; FAST FORWARD
  246. .nomor:    moveq    #0,d0
  247.     jsr    do_turtle    ; ViewPoint Rotation and Translation
  248. ;
  249. ;    Handle all other input
  250. ;
  251.     move.l    pad_shot,d0
  252.     btst.l    #KEY_0,d0
  253.     beq    .noquit
  254.     move    #-1,gameover    ; 0 = Exit
  255. .noquit:
  256. ;
  257. ;    Light Source Toggle and Intensity
  258. ;
  259.     btst.l    #FIRE_B,d0
  260.     beq    .nob
  261.     eor    #-1,sun_flg    ; Toggle Sun On/Off
  262. .nob:    btst.l    #FIRE_C,d0
  263.     beq    .noc
  264.     eor    #-1,bulb_flg    ; Toggle InScene On/Off
  265. .noc:    btst.l    #KEY_5,d0
  266.     beq    .noa
  267.     eor    #-1,amb_flg    ; Toggle Ambient On/Off
  268. .noa:    move.l    pad_now,d1
  269.     moveq    #0,d2
  270.     btst.l    #KEY_6,d1
  271.     beq    .noinc
  272.     addq    #1,d2        ; Increase Intensity
  273. ; Since intensity isn't used in this version, overload this key and KEY_4
  274.     cmp    #-160,stretch
  275.     ble    .skipstm
  276.     sub    #2,stretch
  277. .skipstm:
  278. .noinc:    btst.l    #KEY_4,d1
  279.     beq    .nodec
  280.     subq    #1,d2        ; Decrease Intensity
  281.     cmp    #0,stretch
  282.     bge    .skipst
  283.     add    #2,stretch
  284. .skipst:
  285. .nodec:    move    amb_flg,d1
  286.     beq    .litem        ; IF (Ambient On) THEN Alter Ambient Intensity
  287.     add.b    d2,ambient+1
  288. .litem:
  289.     lea    litemodel,a0
  290.     move    ambient,(a0)+
  291.     move    sun_flg,d1    ; Build a lighting model
  292.     beq    .nosun
  293.     add.b    d2,sun+1    ; IF (Sun On) THEN Update Intensity and add Sun
  294.     lea    sun,a1
  295.     move.l    (a1)+,(a0)+
  296.     move.l    (a1)+,(a0)+
  297. .nosun:    move    bulb_flg,d1
  298.     beq    .nobulb
  299.     add.b    d2,bulb+1    ; IF (Bulb On) THEN Update Intensity and add Bulb
  300.     lea    bulb,a1
  301.     move.l    (a1)+,(a0)+
  302.     move.l    (a1)+,(a0)+
  303. .nobulb:
  304.     move.w    #0,(a0)+
  305. ;
  306. ;    CUBE Rotation and Propogation
  307. ;
  308.     btst.l    #KEY_7,d0
  309.     bne    .less
  310.     btst.l    #KEY_9,d0
  311.     beq    .same
  312.     move    ncubes,d2    ; More Cubes
  313.     addq    #1,d2
  314.     cmp    #8,d2
  315.     bge    .same        ; BUT No more than EIGHT
  316.     bra    .cubes    
  317. .less:    move    ncubes,d2    ; Fewer Cubes
  318.     subq    #1,d2
  319.     bmi    .same        ; BUT No fewer than ONE
  320. .cubes:    lea    turtle+turtlsiz,a0
  321.     move    d2,ncubes    ; Build the CUBES
  322. ;; keep track of number!
  323.     move    ncubes,d4
  324. ;    move    d4,nturtles
  325.     beq    .noexp
  326.     ext.l    d4
  327.     add.l    #1,d4
  328.     move.l    d4,d1
  329.     mulu    d4,d1
  330.     mulu    d4,d1
  331.     move.l    d1,nturtles
  332. .noexp:
  333.     move    #0,drawlist
  334.     move    #0,scrublist
  335.     move    d2,d4
  336.     move    d2,d5
  337.     move    d2,d6
  338.     moveq    #0,d1
  339.     moveq    #0,d2
  340.     moveq    #0,d3
  341.     moveq    #1,d7
  342. .xcube:    move    d1,xposn(a0)    ; Initialize a Cube
  343.     move    d2,yposn(a0)
  344.     move    d3,zposn(a0)
  345.     move    drawlist,turtlnk(a0)
  346.     move    d7,drawlist    ; Link to DRAWLIST
  347.     addq    #1,d7
  348.     adda.l    #turtlsiz,a0
  349.     add    #$200,d1
  350.     dbra    d4,.xcube    ; All X
  351.     move    ncubes,d4
  352.     moveq    #0,d1
  353.     add    #$200,d2
  354.     dbra    d5,.xcube    ; All Y
  355.     move    ncubes,d5
  356.     moveq    #0,d2
  357.     add    #$200,d3
  358.     dbra    d6,.xcube    ; All Z
  359. .same:
  360.       btst.l    #KEY_8,d0
  361.     beq    .norot
  362.     eor    #-1,rotate_flg
  363. .norot:    move    rotate_flg,d1
  364.     beq    .done
  365.     moveq    #1,d0
  366.     moveq    #6,d1
  367.     moveq    #6,d2
  368.     moveq    #6,d3
  369.     moveq    #0,d4
  370.     jsr    do_turtle    ; Cube Rotation
  371. .done:
  372.     movem.l    (sp)+,d0-d7/a0-a1
  373.     rts
  374.  
  375.  
  376. ;
  377. ;    INITURTL   Initialize the TURTLE database
  378. ;
  379. ;    Given:
  380. ;        Control
  381. ;
  382. ;    Returns:
  383. ;        All Turtles initialized to Origin
  384. ;
  385. ;    Register Usage:
  386. ;        All Registers Restored
  387. ;
  388. ;    Externals:
  389. ;        
  390. ;
  391. initurtl:
  392.     movem.l    d0-d2/a0,-(sp)
  393.  
  394.     move.l    #0,nturtles
  395.     move.w    #0,stretch
  396.  
  397.     lea    turtle,a0
  398.     clr    d0
  399.     move    #$4000,d1
  400.     move    #maxturtl-1,d2
  401. .clrlp:    move    d1,xrite(a0)    ; FOR (All Turtles) DO
  402.     move    d0,yrite(a0)    ; Init to Origin - Ordirnally aligned
  403.     move    d0,zrite(a0)
  404.     move    d0,xdown(a0)
  405.     move    d1,ydown(a0)
  406.     move    d0,zdown(a0)
  407.     move    d0,xhead(a0)
  408.     move    d0,yhead(a0)
  409.     move    d1,zhead(a0)
  410.     move    d0,xposn(a0)
  411.     move    d0,yposn(a0)
  412.     move    d0,zposn(a0)
  413.     move    d0,turtlnk(a0)
  414.     add.l    #turtlsiz,a0
  415.     dbra    d2,.clrlp
  416.  
  417.     lea    turtle,a0
  418.     move    #$fe00,zposn(a0)    ; **DOUBLE*KLUDGE** Position Viewpt in front of object
  419.  
  420.     movem.l    (sp)+,d0-d2/a0
  421.     rts
  422.  
  423.  
  424. ;
  425. ;    CLRSCREEN   BLTTER Zero fill the draw buffer and Zbuffer
  426. ;
  427. ;    Given:
  428. ;        DRAW_PTR = Ptr to Current draw buffer
  429. ;
  430. ;    Returns:
  431. ;        Draw buffer and Zbuffer zeroed
  432. ;
  433. ;    Register Usage:
  434. ;        All Registers Restored
  435. ;
  436. ;    Externals:
  437. ;        clrbuffer
  438. ;
  439. clrscreen:
  440.     movem.l    d0/a0,-(sp)
  441.  
  442.     moveq.l    #0,d0
  443.     move.l    draw_ptr,a0
  444.     jsr    clrbuffer
  445.  
  446.     movem.l    (sp)+,a0/d0
  447.     rts
  448.  
  449.  
  450. ;
  451. ;    CLRBUFFER   BLTTER Zero fill a 320x200x2 screen buffer
  452. ;
  453. ;    Given:
  454. ;        D0 = Data Pattern to fill with
  455. ;        A0 = Ptr to Buffer to Clear
  456. ;
  457. ;    Returns:
  458. ;        Draw buffer zeroed
  459. ;
  460. ;    Register Usage:
  461. ;        All Registers Restored
  462. ;
  463. ;    Externals:
  464. ;        None
  465. ;
  466. clrbuffer:
  467.     movem.l    d0-d1/a0-a1,-(sp)
  468.  
  469.     move.l    #B_CMD,a1
  470. .waitblit:            ; Wait for BLTTER Idle
  471.     move.l    (a1),d1
  472.     lsr.w    #1,d1
  473.     bcc    .waitblit
  474.  
  475.      move.l    #(PITCH2|PIXEL16|WID320|XADDPHR),A1_FLAGS
  476.     move.l    a0,A1_BASE    ; Point to the buffer
  477.  
  478.     move.l    d0,B_PATD
  479.     move.l    d0,B_PATD+4    ; Select Fill Pattern
  480.  
  481.     clr.l    d0
  482.     move.l    d0,A1_PIXEL    ; Point to (0,0)
  483.  
  484.     move.w    #1,d0
  485.     swap    d0
  486.     move.w    #-320,d0
  487.     move.l    d0,A1_STEP    ; Step -320 x, +1 y each line
  488.  
  489.     move.w    #200,d0
  490.     swap    d0
  491.     move.w    #320,d0
  492.     move.l    d0,B_COUNT    ; Do 320x200
  493.  
  494.     move.l    #(PATDSEL|UPDA1),B_CMD    ; Start the BLTTER
  495.  
  496.  
  497.     movem.l    (sp)+,d0-d1/a0-a1
  498.     rts
  499.  
  500.  
  501.  
  502. ;
  503. ;    DO_TURTLE   Execute the turtle package
  504. ;
  505.  
  506. ;    Given:
  507. ;        d0 = Index of Turtle to Operate on
  508. ;        d1 = PITCH
  509. ;        d2 = YAW
  510. ;        d3 = ROLL
  511. ;        d4 = VELOCITY
  512. ;
  513. ;    Returns:
  514. ;        Turtle updated
  515. ;
  516. ;    Register Usage:
  517. ;        All Registers Restored
  518. ;
  519. ;    Externals:
  520. ;        GPURUN, GPUWAIT
  521. ;
  522. do_turtle:
  523.     movem.l    a0/d0-d4,-(sp)
  524.  
  525.     mulu    #turtlsiz,d0
  526.     add.l    #turtle,d0    ; D0 = Address of Turtle Record
  527.     move.l    d0,INPUT1
  528.  
  529.     move.l    d1,INPUT2
  530.     move.l    d2,INPUT3
  531.     move.l    d3,INPUT4
  532.     move.l    d4,INPUT5    ; Remaining inputs
  533.  
  534.     lea    TURTLE_S,a0
  535.     jsr    gpurun        ; run the GPU program
  536.  
  537.     movem.l    (sp)+,a0/d0-d4
  538.     rts
  539.  
  540.  
  541. ;
  542. ;    DO_FASTDRAW   Execute the Polyhedron Draw package
  543. ;
  544. ;    Given:
  545. ;        D0 = Ptr to Turtle to Draw
  546. ;
  547. ;    Returns:
  548. ;        Object Drawn
  549. ;
  550. ;    Register Usage:
  551. ;        All Registers Restored
  552. ;
  553. ;    Externals:
  554. ;        GPURUN
  555. ;
  556. do_fastdraw:
  557.     movem.l    a0/d0,-(sp)
  558.  
  559.     jsr    gpuwait
  560.  
  561.     move.l    d0,INPUT3    ; Pass Ptr to Viewed Object
  562.  
  563.     move.l    model_ptr,INPUT1    ; Ptr to Instance
  564.  
  565.     move.l    #turtle,INPUT2    ; Turtle[0] is Viewer
  566.  
  567.     move.l    #litemodel,INPUT4    ; Ptr to Lighting model
  568.  
  569.     move.l    draw_ptr,INPUT5    ; tell GPU where to find parameters
  570.  
  571.     move.l    #instance,INPUT6    ; use for vertex copies
  572.  
  573.     lea    TXTCRY_S,a0
  574.     jsr    gpurun        ; run the GPU program
  575.  
  576.     movem.l    (sp)+,a0/d0
  577.     rts
  578.  
  579.  
  580. ;*======================================================================*
  581. ;*
  582. ;*    DO_SORT   Execute GPU Bubble Sort
  583. ;*
  584. ;*    Given:
  585. ;*        DRAWLIST  = Last Frame's Sorted See-ables (Inverted, Please)
  586. ;*        SCRUBLIST = Last Frame's UNSee-ables
  587. ;*        NTURTLES  = Number of Active Turtles
  588. ;*        TURTLE    = Turtle Record Array
  589. ;*
  590. ;*    Returns:
  591. ;*        DRAWLIST  = Painter's Sorted See-ables list root index
  592. ;*        SCRUBLIST =  UNSee-ables list root index
  593. ;*
  594. ;*    Register Usage:
  595. ;*        All Registers Restored
  596. ;*
  597. ;*    Externals:
  598. ;*        GPURUN, GPULOAD
  599. ;*
  600. ;*======================================================================*
  601. do_sort:
  602.     movem.l    a0/d0-d1,-(sp)
  603.  
  604.     jsr    gpuwait            ;* Wait for GPU Idle
  605.  
  606.     lea    SORT_S,a0
  607.     lea    bsort,a1
  608.     move.l    #SORT_E,d0
  609.     sub.l    #SORT_S,d0
  610.     jsr    gpuload        ; Load Polyhedron Draw Routine into GPU RAM
  611.  
  612.     move.l    #turtle,INPUT1        ; Address of Viewpt Record
  613.     move.l    #drawlist,INPUT2    ; Address of Drawlist Root
  614.     move.l    #scrublist,INPUT3    ; Address of Scrublist Root
  615.     move.l    #turtle+turtlsiz,INPUT4    ; Address of Turtle[1]
  616.     move.l    nturtles,d0
  617.     beq    skipsort
  618.     move.l    d0,INPUT5        ; Number of Active Turtles
  619.     move.l    #turtlsiz,d0
  620.     move.l    d0,INPUT6        ; Length of a Turtle Record
  621.    
  622.     lea    SORT_S,a0
  623.     jsr    gpurun        ; run the GPU program
  624.  
  625. skipsort:
  626.     movem.l    (sp)+,d0-d1/a0
  627.     rts
  628.  
  629. ;
  630. ;    VARIABLE RAM
  631. ;
  632.     .bss
  633.     .even
  634. disp_ptr:        ; Display buffer ptr
  635.     .ds.l    1
  636. draw_ptr:        ; Draw buffer ptr
  637.     .ds.l    1
  638. zbuf_ptr:        ; Z buffer ptr
  639.     .ds.l    1
  640.  
  641. drawlist:        ; Root (Index really) to List of See-able turtles
  642.     .ds.w    1
  643. scrublist:        ; Root (Index really) to List of UNSee-able turtles
  644.     .ds.w    1
  645. newlist:
  646.     .ds.w    1
  647.  
  648. model_ptr:        ; Ptr to Instance
  649.     .ds.l    1
  650. .phrase
  651. instance:        ; Storage for INSTANCE
  652.     .ds.l    4*2048    ; 32K Bytes
  653. .phrase
  654. litemodel:        ; Lighting Model
  655.     .ds.w    12    ; Enough for Ambient and 2 sources
  656.  
  657. gameover:        ; Game Over Flag (0 ==> Game Active)
  658.     .ds.w    1
  659. rotate_flg:        ; Cube rotation Flag (0 ==> Sit Still)
  660.     .ds.w    1
  661. sun_flg:        ; Sun Lighting Flag (0 ==> No Sun)
  662.     .ds.w    1
  663. bulb_flg:        ; InScene Lighting Flag (0 ==> No Bulb)
  664.     .ds.w    1
  665. amb_flg:        ; Ambient Lighting Flag (0 ==> No Intensity Change)
  666.     .ds.w    1
  667. ncubes:            ; Number of Cubes in space (Less One)
  668.     .ds.w    1
  669. nturtles:        ; Number of turtles in space
  670.     .ds.l    1
  671. stretch:
  672.     .ds.w    1    ; stretch factor to modify the cube
  673. time1: .ds.l    1
  674. time2:    .ds.l    1
  675. time3:    .ds.l    1
  676. ;
  677. ;    TURTLE RECORDS
  678. ;
  679. xrite    =    0        ; IMPORTANT NOTE:
  680. yrite    =    xrite+2        ; These first record offsets are hard-wired
  681. zrite    =    yrite+2        ; into associated GPU routines.
  682. xdown    =    zrite+2        ; DO NOT Insert, Delete or Swap any of these
  683. ydown    =    xdown+2        ;    ^
  684. zdown    =    ydown+2        ;    |
  685. xhead    =    zdown+2        ;    |
  686. yhead    =    xhead+2        ;    |
  687. zhead    =    yhead+2        ;    |
  688. xposn    =    zhead+2        ;    |
  689. yposn    =    xposn+2        ;    |
  690. zposn    =    yposn+2        ;    v
  691. turtlnk =    zposn+2        ; Dont change this or anything above here
  692. turtlsiz =    turtlnk+2
  693. maxturtl =    1400
  694.  
  695. .phrase
  696. turtle:            ; All Motion Objects
  697.     .ds.b    maxturtl*turtlsiz
  698.  
  699.  
  700. ;
  701. ;    CONSTANT DATA
  702. ;
  703.     .data
  704. ;    .even
  705.     .long
  706. ambient:            ; Ambient Intensity
  707.     .dc.w    $80
  708. bulb:                ; InScene Light
  709.     .dc.w    $00FF        ; Intensity
  710.     .dc.w    $f000        ; X
  711.     .dc.w    $f000        ; Y
  712.     .dc.w    $f000        ; Z
  713. ;    .dc.w    $80FF        ; Intensity
  714. ;    .dc.w    $f000        ; X
  715. ;    .dc.w    $f000        ; Y
  716. ;    .dc.w    $f000        ; Z
  717. sun:                ; Sun
  718.     .dc.w    $00ff        ; Intensity
  719.     .dc.w    $4000        ; X
  720.     .dc.w    $0000        ; Y
  721.     .dc.w    $0000        ; Z
  722.  
  723.  
  724. .long
  725. texpts:    dc.w    0,0,63,0,63,63,0,63    ; texturemap ptsin        
  726. eyepts: dc.w    0,0,127,0,127,79,0,79
  727. mthpts:    dc.w    0,0,191,0,191,67,0,67
  728. brpts:    dc.w    0,0,191,0,191,119,0,119
  729.  
  730.     .end
  731. ;*======================================================================*
  732. ;*                                 EOF                                  *
  733. ;*======================================================================*
  734.  
  735.