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