home *** CD-ROM | disk | FTP | other *** search
/ Dream 44 / Amiga_Dream_44.iso / RiscPc / jeux / biohazard.arc / s / Floor1 < prev    next >
Text File  |  1994-08-07  |  11KB  |  416 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.       SUB     r9,r9,r5,LSL #16
  50.           ADD     r10,r10,r4,LSL #16
  51.  
  52.           ;store vars on stack
  53.           ;  screen address is updated by line drawing procedure
  54.           ;  source base is used by the line drawing program and not changed
  55.           STMFD   r13!,{r0,r3,r4,r5}
  56.  
  57.       ;main line drawing procedure
  58.  
  59.       ;set counter and 63 register
  60.       MOV     r4,#320
  61.           MOV     r3,#63
  62.  
  63. Draw_Line
  64.       ;extract x,y positions in sprite data from x & y
  65.           AND     r0,r3,r9,LSR #16
  66.           AND     r14,r3,r10,LSR #16
  67.  
  68.       ;construct address from x & y values
  69.           ADD     r0,r0,r14,LSL #6
  70.  
  71.           ;load byte from source_base + (x + 64(y))
  72.           LDRB    r5,[r2,r0]
  73.  
  74.           ;update x & y
  75.           ADD     r9,r9,r11
  76.           ADD     r10,r10,r12
  77.  
  78.       ;load byte 2 word 1
  79.           AND     r0,r3,r9,LSR #16
  80.           AND     r14,r3,r10,LSR #16
  81.           ADD     r0,r0,r14,LSL #6
  82.           LDRB    r14,[r2,r0]
  83.           ADD     r5,r5,r14,LSL #8
  84.           ADD     r9,r9,r11
  85.           ADD     r10,r10,r12
  86.  
  87.       ;load byte 3 word 1
  88.           AND     r0,r3,r9,LSR #16
  89.           AND     r14,r3,r10,LSR #16
  90.           ADD     r0,r0,r14,LSL #6
  91.           LDRB    r14,[r2,r0]
  92.           ADD     r5,r5,r14,LSL #16
  93.           ADD     r9,r9,r11
  94.           ADD     r10,r10,r12
  95.  
  96.       ;load byte 4 word 1
  97.           AND     r0,r3,r9,LSR #16
  98.           AND     r14,r3,r10,LSR #16
  99.           ADD     r0,r0,r14,LSL #6
  100.           LDRB    r14,[r2,r0]
  101.           ADD     r5,r5,r14,LSL #24
  102.           ADD     r9,r9,r11
  103.           ADD     r10,r10,r12
  104.  
  105.       ;load byte 1 word 2
  106.           AND     r0,r3,r9,LSR #16
  107.           AND     r14,r3,r10,LSR #16
  108.           ADD     r0,r0,r14,LSL #6
  109.           LDRB    r6,[r2,r0]
  110.           ADD     r9,r9,r11
  111.           ADD     r10,r10,r12
  112.  
  113.       ;load byte 2 word 2
  114.           AND     r0,r3,r9,LSR #16
  115.           AND     r14,r3,r10,LSR #16
  116.           ADD     r0,r0,r14,LSL #6
  117.           LDRB    r14,[r2,r0]
  118.           ADD     r6,r6,r14,LSL #8
  119.           ADD     r9,r9,r11
  120.           ADD     r10,r10,r12
  121.  
  122.       ;load byte 3 word 2
  123.           AND     r0,r3,r9,LSR #16
  124.           AND     r14,r3,r10,LSR #16
  125.           ADD     r0,r0,r14,LSL #6
  126.           LDRB    r14,[r2,r0]
  127.           ADD     r6,r6,r14,LSL #16
  128.           ADD     r9,r9,r11
  129.           ADD     r10,r10,r12
  130.  
  131.       ;load byte 4 word 2
  132.           AND     r0,r3,r9,LSR #16
  133.           AND     r14,r3,r10,LSR #16
  134.           ADD     r0,r0,r14,LSL #6
  135.           LDRB    r14,[r2,r0]
  136.           ADD     r6,r6,r14,LSL #24
  137.           ADD     r9,r9,r11
  138.           ADD     r10,r10,r12
  139.  
  140.       ;load byte 1 word 3
  141.           AND     r0,r3,r9,LSR #16
  142.           AND     r14,r3,r10,LSR #16
  143.           ADD     r0,r0,r14,LSL #6
  144.           LDRB    r7,[r2,r0]
  145.           ADD     r9,r9,r11
  146.           ADD     r10,r10,r12
  147.  
  148.       ;load byte 2 word 3
  149.           AND     r0,r3,r9,LSR #16
  150.           AND     r14,r3,r10,LSR #16
  151.           ADD     r0,r0,r14,LSL #6
  152.           LDRB    r14,[r2,r0]
  153.           ADD     r7,r7,r14,LSL #8
  154.           ADD     r9,r9,r11
  155.           ADD     r10,r10,r12
  156.  
  157.       ;load byte 3 word 3
  158.           AND     r0,r3,r9,LSR #16
  159.           AND     r14,r3,r10,LSR #16
  160.           ADD     r0,r0,r14,LSL #6
  161.           LDRB    r14,[r2,r0]
  162.           ADD     r7,r7,r14,LSL #16
  163.           ADD     r9,r9,r11
  164.           ADD     r10,r10,r12
  165.  
  166.       ;load byte 4 word 3
  167.           AND     r0,r3,r9,LSR #16
  168.           AND     r14,r3,r10,LSR #16
  169.           ADD     r0,r0,r14,LSL #6
  170.           LDRB    r14,[r2,r0]
  171.           ADD     r7,r7,r14,LSL #24
  172.           ADD     r9,r9,r11
  173.           ADD     r10,r10,r12
  174.  
  175.       ;load byte 1 word 4
  176.           AND     r0,r3,r9,LSR #16
  177.           AND     r14,r3,r10,LSR #16
  178.           ADD     r0,r0,r14,LSL #6
  179.           LDRB    r8,[r2,r0]
  180.           ADD     r9,r9,r11
  181.           ADD     r10,r10,r12
  182.  
  183.       ;load byte 2 word 4
  184.           AND     r0,r3,r9,LSR #16
  185.           AND     r14,r3,r10,LSR #16
  186.           ADD     r0,r0,r14,LSL #6
  187.           LDRB    r14,[r2,r0]
  188.           ADD     r8,r8,r14,LSL #8
  189.           ADD     r9,r9,r11
  190.           ADD     r10,r10,r12
  191.  
  192.       ;load byte 3 word 4
  193.           AND     r0,r3,r9,LSR #16
  194.           AND     r14,r3,r10,LSR #16
  195.           ADD     r0,r0,r14,LSL #6
  196.           LDRB    r14,[r2,r0]
  197.           ADD     r8,r8,r14,LSL #16
  198.           ADD     r9,r9,r11
  199.           ADD     r10,r10,r12
  200.  
  201.       ;load byte 4 word 4
  202.           AND     r0,r3,r9,LSR #16
  203.           AND     r14,r3,r10,LSR #16
  204.           ADD     r0,r0,r14,LSL #6
  205.           LDRB    r14,[r2,r0]
  206.           ADD     r8,r8,r14,LSL #24
  207.           ADD     r9,r9,r11
  208.           ADD     r10,r10,r12
  209.  
  210.       ;write block to screen
  211.           STMIA   r1!,{r5-r8}
  212.           SUBS    r4,r4,#16
  213.           BNE     Draw_Line
  214.  
  215.       ;load vars from stack & decrement line counter
  216.           LDMFD   r13!,{r0,r3,r4,r5}
  217.           SUBS    r3,r3,#1
  218.           BNE     Plot_Loop
  219.  
  220.           LDMFD   r13!,{r0-r12,link}
  221.       STMFD   r13!,{r0-r12,link}
  222.  
  223.       ;load up block data
  224.           MOV     r14,r0
  225.           LDMIA   r14,{r0-r5}
  226.           ADD     r2,r2,#4096
  227.       SUB     r1,r1,#320
  228.  
  229. Plot_Loop1
  230.       ;load up the next block of perspective plot data
  231.       LDMIA   r0!,{r9-r12}
  232.       SUB     r9,r9,r5,LSL #16
  233.           ADD     r10,r10,r4,LSL #16
  234.  
  235.           ;store vars on stack
  236.           ;  screen address is updated by line drawing procedure
  237.           ;  source base is used by the line drawing program and not changed
  238.           STMFD   r13!,{r0,r3,r4,r5}
  239.  
  240.       ;main line drawing procedure
  241.  
  242.       ;set counter and 63 register
  243.       MOV     r4,#320
  244.           MOV     r3,#63
  245.  
  246. Draw_Line1
  247.       ;extract x,y positions in sprite data from x & y
  248.           AND     r0,r3,r9,LSR #16
  249.           AND     r14,r3,r10,LSR #16
  250.  
  251.       ;construct address from x & y values
  252.           ADD     r0,r0,r14,LSL #6
  253.  
  254.           ;load byte from source_base + (x + 64(y))
  255.           LDRB    r5,[r2,r0]
  256.  
  257.           ;update x & y
  258.           ADD     r9,r9,r11
  259.           ADD     r10,r10,r12
  260.  
  261.       ;load byte 2 word 1
  262.           AND     r0,r3,r9,LSR #16
  263.           AND     r14,r3,r10,LSR #16
  264.           ADD     r0,r0,r14,LSL #6
  265.           LDRB    r14,[r2,r0]
  266.           ADD     r5,r5,r14,LSL #8
  267.           ADD     r9,r9,r11
  268.           ADD     r10,r10,r12
  269.  
  270.       ;load byte 3 word 1
  271.           AND     r0,r3,r9,LSR #16
  272.           AND     r14,r3,r10,LSR #16
  273.           ADD     r0,r0,r14,LSL #6
  274.           LDRB    r14,[r2,r0]
  275.           ADD     r5,r5,r14,LSL #16
  276.           ADD     r9,r9,r11
  277.           ADD     r10,r10,r12
  278.  
  279.       ;load byte 4 word 1
  280.           AND     r0,r3,r9,LSR #16
  281.           AND     r14,r3,r10,LSR #16
  282.           ADD     r0,r0,r14,LSL #6
  283.           LDRB    r14,[r2,r0]
  284.           ADD     r5,r5,r14,LSL #24
  285.           ADD     r9,r9,r11
  286.           ADD     r10,r10,r12
  287.  
  288.       ;load byte 1 word 2
  289.           AND     r0,r3,r9,LSR #16
  290.           AND     r14,r3,r10,LSR #16
  291.           ADD     r0,r0,r14,LSL #6
  292.           LDRB    r6,[r2,r0]
  293.           ADD     r9,r9,r11
  294.           ADD     r10,r10,r12
  295.  
  296.       ;load byte 2 word 2
  297.           AND     r0,r3,r9,LSR #16
  298.           AND     r14,r3,r10,LSR #16
  299.           ADD     r0,r0,r14,LSL #6
  300.           LDRB    r14,[r2,r0]
  301.           ADD     r6,r6,r14,LSL #8
  302.           ADD     r9,r9,r11
  303.           ADD     r10,r10,r12
  304.  
  305.       ;load byte 3 word 2
  306.           AND     r0,r3,r9,LSR #16
  307.           AND     r14,r3,r10,LSR #16
  308.           ADD     r0,r0,r14,LSL #6
  309.           LDRB    r14,[r2,r0]
  310.           ADD     r6,r6,r14,LSL #16
  311.           ADD     r9,r9,r11
  312.           ADD     r10,r10,r12
  313.  
  314.       ;load byte 4 word 2
  315.           AND     r0,r3,r9,LSR #16
  316.           AND     r14,r3,r10,LSR #16
  317.           ADD     r0,r0,r14,LSL #6
  318.           LDRB    r14,[r2,r0]
  319.           ADD     r6,r6,r14,LSL #24
  320.           ADD     r9,r9,r11
  321.           ADD     r10,r10,r12
  322.  
  323.       ;load byte 1 word 3
  324.           AND     r0,r3,r9,LSR #16
  325.           AND     r14,r3,r10,LSR #16
  326.           ADD     r0,r0,r14,LSL #6
  327.           LDRB    r7,[r2,r0]
  328.           ADD     r9,r9,r11
  329.           ADD     r10,r10,r12
  330.  
  331.       ;load byte 2 word 3
  332.           AND     r0,r3,r9,LSR #16
  333.           AND     r14,r3,r10,LSR #16
  334.           ADD     r0,r0,r14,LSL #6
  335.           LDRB    r14,[r2,r0]
  336.           ADD     r7,r7,r14,LSL #8
  337.           ADD     r9,r9,r11
  338.           ADD     r10,r10,r12
  339.  
  340.       ;load byte 3 word 3
  341.           AND     r0,r3,r9,LSR #16
  342.           AND     r14,r3,r10,LSR #16
  343.           ADD     r0,r0,r14,LSL #6
  344.           LDRB    r14,[r2,r0]
  345.           ADD     r7,r7,r14,LSL #16
  346.           ADD     r9,r9,r11
  347.           ADD     r10,r10,r12
  348.  
  349.       ;load byte 4 word 3
  350.           AND     r0,r3,r9,LSR #16
  351.           AND     r14,r3,r10,LSR #16
  352.           ADD     r0,r0,r14,LSL #6
  353.           LDRB    r14,[r2,r0]
  354.           ADD     r7,r7,r14,LSL #24
  355.           ADD     r9,r9,r11
  356.           ADD     r10,r10,r12
  357.  
  358.       ;load byte 1 word 4
  359.           AND     r0,r3,r9,LSR #16
  360.           AND     r14,r3,r10,LSR #16
  361.           ADD     r0,r0,r14,LSL #6
  362.           LDRB    r8,[r2,r0]
  363.           ADD     r9,r9,r11
  364.           ADD     r10,r10,r12
  365.  
  366.       ;load byte 2 word 4
  367.           AND     r0,r3,r9,LSR #16
  368.           AND     r14,r3,r10,LSR #16
  369.           ADD     r0,r0,r14,LSL #6
  370.           LDRB    r14,[r2,r0]
  371.           ADD     r8,r8,r14,LSL #8
  372.           ADD     r9,r9,r11
  373.           ADD     r10,r10,r12
  374.  
  375.       ;load byte 3 word 4
  376.           AND     r0,r3,r9,LSR #16
  377.           AND     r14,r3,r10,LSR #16
  378.           ADD     r0,r0,r14,LSL #6
  379.           LDRB    r14,[r2,r0]
  380.           ADD     r8,r8,r14,LSL #16
  381.           ADD     r9,r9,r11
  382.           ADD     r10,r10,r12
  383.  
  384.       ;load byte 4 word 4
  385.           AND     r0,r3,r9,LSR #16
  386.           AND     r14,r3,r10,LSR #16
  387.           ADD     r0,r0,r14,LSL #6
  388.           LDRB    r14,[r2,r0]
  389.           ADD     r8,r8,r14,LSL #24
  390.           ADD     r9,r9,r11
  391.           ADD     r10,r10,r12
  392.  
  393.       ;write block to screen
  394.           STMIA   r1!,{r5-r8}
  395.           SUBS    r4,r4,#16
  396.           BNE     Draw_Line1
  397.  
  398.       ;load vars from stack & decrement line counter
  399.           LDMFD   r13!,{r0,r3,r4,r5}
  400.           SUB     r1,r1,#640
  401.           SUBS    r3,r3,#1
  402.           BNE     Plot_Loop1
  403.  
  404.  
  405.  
  406.  
  407.  
  408.  
  409. EndPlotFloor
  410.           LDMFD   r13!,{r0-r12,pc}
  411.  
  412.  
  413.  
  414.  
  415.       END
  416.