home *** CD-ROM | disk | FTP | other *** search
/ Dream 44 / Amiga_Dream_44.iso / RiscPc / jeux / biohazard.arc / s / FloorFast < prev    next >
Text File  |  1994-08-21  |  12KB  |  432 lines

  1. ; Use the GET directive to include register definitions as if typed here
  2.  
  3.       KEEP
  4.           GET     h.WolfReg
  5.  
  6. ; Use the GET directive to include a list of SWI names as if typed here
  7.  
  8.           GET     h.SWInames
  9.  
  10. ; Area name C$$code advisable as wanted to link with C output
  11.  
  12.           AREA    |C$$code|, CODE, READONLY
  13.  
  14. ; Export global symbols
  15.  
  16.        EXPORT  |PlotFloor|
  17.  
  18. PltFloorX DCB     "PlotFloor", 0
  19.           ALIGN
  20. PltFloorY DCD     &ff000000 + PltFloorY - PltFloorX
  21.  
  22. ;on entry
  23. ;
  24. ; r0 = pointer to data block where :-
  25. ;
  26. ; 0 = pointer to perspective plot data
  27. ;         format of plot data is :-
  28. ;           word 1...x1 x start position
  29. ;           word 2...y1 y start position
  30. ;           word 3...xg x increment value (per screen pixel)
  31. ;           word 4...yg y increment value (per screen pixel)
  32. ; 1 = screen address (of the first line to draw on)
  33. ; 2 = pointer to sprite data to use as floor.
  34. ;        This is simply a 64x64 block of data
  35. ; 3 = counter (number of lines to draw)
  36. ; 4 = x offset
  37. ; 5 = y offset
  38.  
  39. |PlotFloor|
  40.       STMFD   r13!,{r0-r12,link}
  41.  
  42.       ;load up block data
  43.           MOV     r14,r0
  44.           LDMIA   r14,{r0-r5}
  45.  
  46. Plot_Loop
  47.       ;load up the next block of perspective plot data
  48.       LDMIA   r0!,{r9-r12}
  49.       ADD     r9,r9,r4,LSL #22
  50.           SUB     r9,r9,r5,LSL #16
  51.       ;SUB     r9,r9,r5,LSL #16
  52.           ;ADD     r10,r10,r4,LSL #16
  53.  
  54.           ;combine x1 & y1 and xg & yg
  55.       ;ADD     r9,r9,r10,LSL #6
  56.           ;ADD     r11,r11,r12,LSL #6
  57.  
  58.  
  59.           ;store vars on stack
  60.           ;  screen address is updated by line drawing procedure
  61.           ;  source base is used by the line drawing program and not changed
  62.           STMFD   r13!,{r0,r3,r4,r5}
  63.  
  64.       ;main line drawing procedure
  65.  
  66.       ;set counter and 63 register
  67.       MOV     r4,#320
  68.           MVN     r3,#0
  69.           MOV     r3,r3,LSR #4
  70.  
  71. Draw_Line
  72.       ;extract x,y positions in sprite data from x & y
  73.           AND     r0,r3,r9
  74.           ;AND     r14,r3,r10,LSR #16
  75.  
  76.       ;construct address from x & y values
  77.           ;ADD     r0,r0,r14,LSL #6
  78.  
  79.           ;load byte from source_base + (x + 64(y))
  80.           LDRB    r5,[r2,r0,LSR #16]
  81.  
  82.           ;update x & y
  83.           ADD     r9,r9,r11
  84.           ;ADD     r10,r10,r12
  85.  
  86.       ;load byte 2 word 1
  87.           AND     r0,r3,r9
  88.           ;AND     r14,r3,r10,LSR #16
  89.           ;ADD     r0,r0,r14,LSL #6
  90.           LDRB    r14,[r2,r0,LSR #16]
  91.           ADD     r5,r5,r14,LSL #8
  92.           ADD     r9,r9,r11
  93.           ;ADD     r10,r10,r12
  94.  
  95.       ;load byte 3 word 1
  96.           AND     r0,r3,r9
  97.           ;AND     r14,r3,r10,LSR #16
  98.           ;ADD     r0,r0,r14,LSL #6
  99.           LDRB    r14,[r2,r0,LSR #16]
  100.           ADD     r5,r5,r14,LSL #16
  101.           ADD     r9,r9,r11
  102.           ;ADD     r10,r10,r12
  103.  
  104.       ;load byte 4 word 1
  105.           AND     r0,r3,r9
  106.           ;AND     r14,r3,r10,LSR #16
  107.           ;ADD     r0,r0,r14,LSL #6
  108.           LDRB    r14,[r2,r0,LSR #16]
  109.           ADD     r5,r5,r14,LSL #24
  110.           ADD     r9,r9,r11
  111.           ;ADD     r10,r10,r12
  112.  
  113.       ;load byte 1 word 2
  114.           AND     r0,r3,r9
  115.           ;AND     r14,r3,r10,LSR #16
  116.           ;ADD     r0,r0,r14,LSL #6
  117.           LDRB    r6,[r2,r0,LSR #16]
  118.           ADD     r9,r9,r11
  119.           ;ADD     r10,r10,r12
  120.  
  121.       ;load byte 2 word 2
  122.           AND     r0,r3,r9
  123.           ;AND     r14,r3,r10,LSR #16
  124.           ;ADD     r0,r0,r14,LSL #6
  125.           LDRB    r14,[r2,r0,LSR #16]
  126.           ADD     r6,r6,r14,LSL #8
  127.           ADD     r9,r9,r11
  128.           ;ADD     r10,r10,r12
  129.  
  130.       ;load byte 3 word 2
  131.           AND     r0,r3,r9
  132.           ;AND     r14,r3,r10,LSR #16
  133.           ;ADD     r0,r0,r14,LSL #6
  134.           LDRB    r14,[r2,r0,LSR #16]
  135.           ADD     r6,r6,r14,LSL #16
  136.           ADD     r9,r9,r11
  137.           ;ADD     r10,r10,r12
  138.  
  139.       ;load byte 4 word 2
  140.           AND     r0,r3,r9
  141.           ;AND     r14,r3,r10,LSR #16
  142.           ;ADD     r0,r0,r14,LSL #6
  143.           LDRB    r14,[r2,r0,LSR #16]
  144.           ADD     r6,r6,r14,LSL #24
  145.           ADD     r9,r9,r11
  146.           ;ADD     r10,r10,r12
  147.  
  148.       ;load byte 1 word 3
  149.           AND     r0,r3,r9
  150.           ;AND     r14,r3,r10,LSR #16
  151.           ;ADD     r0,r0,r14,LSL #6
  152.           LDRB    r7,[r2,r0,LSR #16]
  153.           ADD     r9,r9,r11
  154.           ;ADD     r10,r10,r12
  155.  
  156.       ;load byte 2 word 3
  157.           AND     r0,r3,r9
  158.           ;AND     r14,r3,r10,LSR #16
  159.           ;ADD     r0,r0,r14,LSL #6
  160.           LDRB    r14,[r2,r0,LSR #16]
  161.           ADD     r7,r7,r14,LSL #8
  162.           ADD     r9,r9,r11
  163.           ;ADD     r10,r10,r12
  164.  
  165.       ;load byte 3 word 3
  166.           AND     r0,r3,r9
  167.           ;AND     r14,r3,r10,LSR #16
  168.           ;ADD     r0,r0,r14,LSL #6
  169.           LDRB    r14,[r2,r0,LSR #16]
  170.           ADD     r7,r7,r14,LSL #16
  171.           ADD     r9,r9,r11
  172.           ;ADD     r10,r10,r12
  173.  
  174.       ;load byte 4 word 3
  175.           AND     r0,r3,r9
  176.           ;AND     r14,r3,r10,LSR #16
  177.           ;ADD     r0,r0,r14,LSL #6
  178.           LDRB    r14,[r2,r0,LSR #16]
  179.           ADD     r7,r7,r14,LSL #24
  180.           ADD     r9,r9,r11
  181.           ;ADD     r10,r10,r12
  182.  
  183.       ;load byte 1 word 4
  184.           AND     r0,r3,r9
  185.           ;AND     r14,r3,r10,LSR #16
  186.           ;ADD     r0,r0,r14,LSL #6
  187.           LDRB    r8,[r2,r0,LSR #16]
  188.           ADD     r9,r9,r11
  189.           ;ADD     r10,r10,r12
  190.  
  191.       ;load byte 2 word 4
  192.           AND     r0,r3,r9
  193.           ;AND     r14,r3,r10,LSR #16
  194.           ;ADD     r0,r0,r14,LSL #6
  195.           LDRB    r14,[r2,r0,LSR #16]
  196.           ADD     r8,r8,r14,LSL #8
  197.           ADD     r9,r9,r11
  198.           ;ADD     r10,r10,r12
  199.  
  200.       ;load byte 3 word 4
  201.           AND     r0,r3,r9
  202.           ;AND     r14,r3,r10,LSR #16
  203.           ;ADD     r0,r0,r14,LSL #6
  204.           LDRB    r14,[r2,r0,LSR #16]
  205.           ADD     r8,r8,r14,LSL #16
  206.           ADD     r9,r9,r11
  207.           ;ADD     r10,r10,r12
  208.  
  209.       ;load byte 4 word 4
  210.           AND     r0,r3,r9
  211.           ;AND     r14,r3,r10,LSR #16
  212.           ;ADD     r0,r0,r14,LSL #6
  213.           LDRB    r14,[r2,r0,LSR #16]
  214.           ADD     r8,r8,r14,LSL #24
  215.           ADD     r9,r9,r11
  216.           ;ADD     r10,r10,r12
  217.  
  218.       ;write block to screen
  219.           STMIA   r1!,{r5-r8}
  220.           SUBS    r4,r4,#16
  221.           BNE     Draw_Line
  222.  
  223.       ;load vars from stack & decrement line counter
  224.           LDMFD   r13!,{r0,r3,r4,r5}
  225.           SUBS    r3,r3,#1
  226.           BNE     Plot_Loop
  227.  
  228.           LDMFD   r13!,{r0-r12,link}
  229.       STMFD   r13!,{r0-r12,link}
  230.  
  231.       ;load up block data
  232.           MOV     r14,r0
  233.           LDMIA   r14,{r0-r5}
  234.           ADD     r2,r2,#4096
  235.  
  236.       ;adjust screen address
  237.       RSB     r14,r3,#127      ;r14 = 127 - lines
  238.           MOV     r7,r14,LSL #8
  239.           ADD     r6,r7,r14,LSL #6 ;r6  = r14 * 320
  240.           SUB     r1,r1,r6,LSL #1
  241.       SUB     r1,r1,#320
  242.  
  243. Plot_Loop1
  244.       ;load up the next block of perspective plot data
  245.       LDMIA   r0!,{r9-r12}
  246.       ADD     r9,r9,r4,LSL #22
  247.           SUB     r9,r9,r5,LSL #16
  248.       ;SUB     r9,r9,r5,LSL #16
  249.           ;ADD     r10,r10,r4,LSL #16
  250.  
  251.           ;combine x1 & y1 and xg & yg
  252.       ;ADD     r9,r9,r10,LSL #6
  253.           ;ADD     r11,r11,r12,LSL #6
  254.  
  255.           ;store vars on stack
  256.           ;  screen address is updated by line drawing procedure
  257.           ;  source base is used by the line drawing program and not changed
  258.           STMFD   r13!,{r0,r3,r4,r5}
  259.  
  260.       ;main line drawing procedure
  261.  
  262.       ;set counter and 63 register
  263.       MOV     r4,#320
  264.           MVN     r3,#0
  265.           MOV     r3,r3,LSR #4
  266.  
  267. Draw_Line1
  268.       ;extract x,y positions in sprite data from x & y
  269.           AND     r0,r3,r9
  270.           ;AND     r14,r3,r10,LSR #16
  271.  
  272.       ;construct address from x & y values
  273.           ;ADD     r0,r0,r14,LSL #6
  274.  
  275.           ;load byte from source_base + (x + 64(y))
  276.           LDRB    r5,[r2,r0,LSR #16]
  277.  
  278.           ;update x & y
  279.           ADD     r9,r9,r11
  280.           ;ADD     r10,r10,r12
  281.  
  282.       ;load byte 2 word 1
  283.           AND     r0,r3,r9
  284.           ;AND     r14,r3,r10,LSR #16
  285.           ;ADD     r0,r0,r14,LSL #6
  286.           LDRB    r14,[r2,r0,LSR #16]
  287.           ADD     r5,r5,r14,LSL #8
  288.           ADD     r9,r9,r11
  289.           ;ADD     r10,r10,r12
  290.  
  291.       ;load byte 3 word 1
  292.           AND     r0,r3,r9
  293.           ;AND     r14,r3,r10,LSR #16
  294.           ;ADD     r0,r0,r14,LSL #6
  295.           LDRB    r14,[r2,r0,LSR #16]
  296.           ADD     r5,r5,r14,LSL #16
  297.           ADD     r9,r9,r11
  298.           ;ADD     r10,r10,r12
  299.  
  300.       ;load byte 4 word 1
  301.           AND     r0,r3,r9
  302.           ;AND     r14,r3,r10,LSR #16
  303.           ;ADD     r0,r0,r14,LSL #6
  304.           LDRB    r14,[r2,r0,LSR #16]
  305.           ADD     r5,r5,r14,LSL #24
  306.           ADD     r9,r9,r11
  307.           ;ADD     r10,r10,r12
  308.  
  309.       ;load byte 1 word 2
  310.           AND     r0,r3,r9
  311.           ;AND     r14,r3,r10,LSR #16
  312.           ;ADD     r0,r0,r14,LSL #6
  313.           LDRB    r6,[r2,r0,LSR #16]
  314.           ADD     r9,r9,r11
  315.           ;ADD     r10,r10,r12
  316.  
  317.       ;load byte 2 word 2
  318.           AND     r0,r3,r9
  319.           ;AND     r14,r3,r10,LSR #16
  320.           ;ADD     r0,r0,r14,LSL #6
  321.           LDRB    r14,[r2,r0,LSR #16]
  322.           ADD     r6,r6,r14,LSL #8
  323.           ADD     r9,r9,r11
  324.           ;ADD     r10,r10,r12
  325.  
  326.       ;load byte 3 word 2
  327.           AND     r0,r3,r9
  328.           ;AND     r14,r3,r10,LSR #16
  329.           ;ADD     r0,r0,r14,LSL #6
  330.           LDRB    r14,[r2,r0,LSR #16]
  331.           ADD     r6,r6,r14,LSL #16
  332.           ADD     r9,r9,r11
  333.           ;ADD     r10,r10,r12
  334.  
  335.       ;load byte 4 word 2
  336.           AND     r0,r3,r9
  337.           ;AND     r14,r3,r10,LSR #16
  338.           ;ADD     r0,r0,r14,LSL #6
  339.           LDRB    r14,[r2,r0,LSR #16]
  340.           ADD     r6,r6,r14,LSL #24
  341.           ADD     r9,r9,r11
  342.           ;ADD     r10,r10,r12
  343.  
  344.       ;load byte 1 word 3
  345.           AND     r0,r3,r9
  346.           ;AND     r14,r3,r10,LSR #16
  347.           ;ADD     r0,r0,r14,LSL #6
  348.           LDRB    r7,[r2,r0,LSR #16]
  349.           ADD     r9,r9,r11
  350.           ;ADD     r10,r10,r12
  351.  
  352.       ;load byte 2 word 3
  353.           AND     r0,r3,r9
  354.           ;AND     r14,r3,r10,LSR #16
  355.           ;ADD     r0,r0,r14,LSL #6
  356.           LDRB    r14,[r2,r0,LSR #16]
  357.           ADD     r7,r7,r14,LSL #8
  358.           ADD     r9,r9,r11
  359.           ;ADD     r10,r10,r12
  360.  
  361.       ;load byte 3 word 3
  362.           AND     r0,r3,r9
  363.           ;AND     r14,r3,r10,LSR #16
  364.           ;ADD     r0,r0,r14,LSL #6
  365.           LDRB    r14,[r2,r0,LSR #16]
  366.           ADD     r7,r7,r14,LSL #16
  367.           ADD     r9,r9,r11
  368.           ;ADD     r10,r10,r12
  369.  
  370.       ;load byte 4 word 3
  371.           AND     r0,r3,r9
  372.           ;AND     r14,r3,r10,LSR #16
  373.           ;ADD     r0,r0,r14,LSL #6
  374.           LDRB    r14,[r2,r0,LSR #16]
  375.           ADD     r7,r7,r14,LSL #24
  376.           ADD     r9,r9,r11
  377.           ;ADD     r10,r10,r12
  378.  
  379.       ;load byte 1 word 4
  380.           AND     r0,r3,r9
  381.           ;AND     r14,r3,r10,LSR #16
  382.           ;ADD     r0,r0,r14,LSL #6
  383.           LDRB    r8,[r2,r0,LSR #16]
  384.           ADD     r9,r9,r11
  385.           ;ADD     r10,r10,r12
  386.  
  387.       ;load byte 2 word 4
  388.           AND     r0,r3,r9
  389.           ;AND     r14,r3,r10,LSR #16
  390.           ;ADD     r0,r0,r14,LSL #6
  391.           LDRB    r14,[r2,r0,LSR #16]
  392.           ADD     r8,r8,r14,LSL #8
  393.           ADD     r9,r9,r11
  394.           ;ADD     r10,r10,r12
  395.  
  396.       ;load byte 3 word 4
  397.           AND     r0,r3,r9
  398.           ;AND     r14,r3,r10,LSR #16
  399.           ;ADD     r0,r0,r14,LSL #6
  400.           LDRB    r14,[r2,r0,LSR #16]
  401.           ADD     r8,r8,r14,LSL #16
  402.           ADD     r9,r9,r11
  403.           ;ADD     r10,r10,r12
  404.  
  405.       ;load byte 4 word 4
  406.           AND     r0,r3,r9
  407.           ;AND     r14,r3,r10,LSR #16
  408.           ;ADD     r0,r0,r14,LSL #6
  409.           LDRB    r14,[r2,r0,LSR #16]
  410.           ADD     r8,r8,r14,LSL #24
  411.           ADD     r9,r9,r11
  412.           ;ADD     r10,r10,r12
  413.  
  414.       ;write block to screen
  415.           STMIA   r1!,{r5-r8}
  416.           SUBS    r4,r4,#16
  417.           BNE     Draw_Line1
  418.  
  419.       ;load vars from stack & decrement line counter
  420.           LDMFD   r13!,{r0,r3,r4,r5}
  421.           SUB     r1,r1,#640
  422.           SUBS    r3,r3,#1
  423.           BNE     Plot_Loop1
  424.  
  425. EndPlotFloor
  426.           LDMFD   r13!,{r0-r12,pc}
  427.  
  428.  
  429.  
  430.  
  431.       END
  432.