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