home *** CD-ROM | disk | FTP | other *** search
/ Dream 44 / Amiga_Dream_44.iso / RiscPc / jeux / biohazard.arc / s / Border < prev    next >
Text File  |  1995-03-26  |  9KB  |  429 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.           IMPORT  |x$stack_overflow|
  17.        EXPORT  |DrawBorder|
  18.        EXPORT  |DrawBar|
  19.           EXPORT  |AdaptiveRedrawScreen|
  20.  
  21. ;draw border graphics.
  22. ;on entry -
  23. ;           r0 = screen address
  24. ;           r1 = screen width
  25. ;           r2 = screen height
  26. ;           r3 = pointer to backdrop
  27.  
  28. |DrawBorder|
  29.       STMFD   r13!,{r0-r12,link}
  30.       ;LDMFD   r13!,{r0-r12,pc}
  31.  
  32.       ;check if whole screen is black
  33.           ;CMP     r2,#237
  34.           ;BGT     DrawBlack
  35.  
  36.       ;preserve screen address
  37.           MOV     r12,r0
  38.  
  39.  
  40.       ;initial height value
  41.       MOV     r8,#240
  42.  
  43.  
  44. DBloop    LDMIA   r3!,{r4-r7} ;plot one line of colour data on screen
  45.           STMIA   r0!,{r4-r7}
  46.           LDMIA   r3!,{r4-r7}
  47.       STMIA   r0!,{r4-r7}
  48.           LDMIA   r3!,{r4-r7}
  49.       STMIA   r0!,{r4-r7}
  50.           LDMIA   r3!,{r4-r7}
  51.       STMIA   r0!,{r4-r7}
  52.           LDMIA   r3!,{r4-r7}
  53.       STMIA   r0!,{r4-r7}
  54.  
  55.           LDMIA   r3!,{r4-r7}
  56.           STMIA   r0!,{r4-r7}
  57.           LDMIA   r3!,{r4-r7}
  58.       STMIA   r0!,{r4-r7}
  59.           LDMIA   r3!,{r4-r7}
  60.       STMIA   r0!,{r4-r7}
  61.           LDMIA   r3!,{r4-r7}
  62.       STMIA   r0!,{r4-r7}
  63.           LDMIA   r3!,{r4-r7}
  64.       STMIA   r0!,{r4-r7}
  65.  
  66.           LDMIA   r3!,{r4-r7}
  67.           STMIA   r0!,{r4-r7}
  68.           LDMIA   r3!,{r4-r7}
  69.       STMIA   r0!,{r4-r7}
  70.           LDMIA   r3!,{r4-r7}
  71.       STMIA   r0!,{r4-r7}
  72.           LDMIA   r3!,{r4-r7}
  73.       STMIA   r0!,{r4-r7}
  74.           LDMIA   r3!,{r4-r7}
  75.       STMIA   r0!,{r4-r7}
  76.  
  77.           LDMIA   r3!,{r4-r7}
  78.           STMIA   r0!,{r4-r7}
  79.           LDMIA   r3!,{r4-r7}
  80.       STMIA   r0!,{r4-r7}
  81.           LDMIA   r3!,{r4-r7}
  82.       STMIA   r0!,{r4-r7}
  83.           LDMIA   r3!,{r4-r7}
  84.       STMIA   r0!,{r4-r7}
  85.           LDMIA   r3!,{r4-r7}
  86.       STMIA   r0!,{r4-r7}
  87.  
  88.       SUBS      r8,r8,#1
  89.       BNE     DBloop
  90.  
  91.           LDMFD   r13!,{r0-r12,pc}
  92.  
  93.       ;register for use in MULs
  94.           MOV     r11,#320
  95.  
  96.       ;calculate offset to top left corner
  97.           RSB     r3,r2,#238
  98.           MOV     r4,r3,LSR #1
  99.           MUL     r3,r4,r11
  100.  
  101.           RSB     r4,r1,#320
  102.           MOV     r5,r4,LSR #1
  103.           ADD     r3,r3,r5
  104.           ADD     r3,r3,r12
  105.  
  106.           ;plot black area of screen
  107.  
  108.       ;get height for use as counter
  109.           MOV     r8,r2
  110.  
  111.       ;load initial colour value into r4 & make word sized
  112.       MOV     r4,#0
  113.       ADD     r4,r4,r4,LSL #8
  114.       ADD     r4,r4,r4,LSL #16
  115.  
  116.       ;move into other registers
  117.       MOV     r5,r4
  118.       MOV     r6,r4
  119.       MOV     r7,r4
  120.  
  121. BLloopA      MOV     r9,r1 ;reset width counter
  122.  
  123. BLloop    STMIA   r3!,{r4-r7} ;plot one block of colour data on screen
  124.  
  125.           SUBS    r9,r9,#16
  126.           BNE     BLloop
  127.  
  128.       ;update screen pointer to start of next line
  129.       RSB     r10,r1,#320
  130.           ADD     r3,r3,r10
  131.  
  132.           SUBS    r8,r8,#1
  133.           BNE     BLloopA
  134.  
  135.  
  136.       ADD     r2,r2,#2
  137.           ADD     r1,r1,#2
  138.  
  139.       ;calculate offset to top left corner
  140.           RSB     r3,r2,#238
  141.           MOV     r4,r3,LSR #1
  142.           MUL     r3,r4,r11
  143.  
  144.           RSB     r4,r1,#320
  145.           MOV     r5,r4,LSR #1
  146.           ADD     r3,r3,r5
  147.  
  148.           ;add to screen start position
  149.           ADD     r3,r3,r12
  150.  
  151.           ;draw dark lines on top and left sides
  152.  
  153.           ;get darker colour value
  154.           MOV     r0,#7
  155.  
  156.       ;plot top line
  157.       MOV     r4,r1
  158.           SUB     r4,r4,#1
  159. topline   STRB    r0,[r3,r4]
  160.           SUBS    r4,r4,#1
  161.           BNE     topline
  162.  
  163.           ;plot left side line
  164.           MOV     r4,r2
  165. leftline  STRB    r0,[r3],#320
  166.           SUBS    r4,r4,#1
  167.           BNE     leftline
  168.       SUB     r3,r3,#320
  169.  
  170.           ;get lighter colour value
  171.           MOV     r0,#22
  172.  
  173.       ;plot bottom line
  174.       MOV     r4,r1
  175.           SUB     r4,r4,#1
  176. botline   STRB    r0,[r3,r4]
  177.           SUBS    r4,r4,#1
  178.           BNE     botline
  179.  
  180.           ;plot right side line
  181.           MOV     r4,r2
  182.           ADD     r3,r3,r1
  183.           SUB     r3,r3,#1
  184.           SUB     r4,r4,#1
  185. rightline STRB    r0,[r3]
  186.           SUB     r3,r3,#320
  187.           SUBS    r4,r4,#1
  188.           BNE     rightline
  189.  
  190.       ADD     r2,r2,#2
  191.           ADD     r1,r1,#2
  192.  
  193.       ;calculate offset to top left corner
  194.           RSB     r3,r2,#238
  195.           MOV     r4,r3,LSR #1
  196.           MUL     r3,r4,r11
  197.  
  198.           RSB     r4,r1,#320
  199.           MOV     r5,r4,LSR #1
  200.           ADD     r3,r3,r5
  201.  
  202.           ;add to screen start position
  203.           ADD     r3,r3,r12
  204.  
  205.           ;draw dark lines on top and left sides
  206.  
  207.           ;get darker colour value
  208.           MOV     r0,#7
  209.  
  210.       ;plot top line
  211.       MOV     r4,r1
  212.           SUB     r4,r4,#1
  213. topline1  STRB    r0,[r3,r4]
  214.           SUBS    r4,r4,#1
  215.           BNE     topline1
  216.  
  217.           ;plot left side line
  218.           MOV     r4,r2
  219. leftline1 STRB    r0,[r3],#320
  220.           SUBS    r4,r4,#1
  221.           BNE     leftline1
  222.       SUB     r3,r3,#320
  223.  
  224.           ;get lighter colour value
  225.           MOV     r0,#22
  226.  
  227.       ;plot bottom line
  228.       MOV     r4,r1
  229.           SUB     r4,r4,#1
  230. botline1  STRB    r0,[r3,r4]
  231.           SUBS    r4,r4,#1
  232.           BNE     botline1
  233.  
  234.           ;plot right side line
  235.           MOV     r4,r2
  236.           ADD     r3,r3,r1
  237.           SUB     r3,r3,#1
  238.           SUB     r4,r4,#1
  239. rightline1
  240.           STRB    r0,[r3]
  241.           SUB     r3,r3,#320
  242.           SUBS    r4,r4,#1
  243.           BNE     rightline1
  244.  
  245.  
  246. EndDrawBorder
  247.           LDMFD   r13!,{r0-r12,pc}
  248.  
  249.  
  250. ;draw whole screen in black
  251.  
  252. DrawBlack
  253.       ;initial height value
  254.       MOV     r3,#240
  255.  
  256.       ;load initial colour value into r4 & make word sized
  257.       MOV     r4,#0
  258.       ADD     r4,r4,r4,LSL #8
  259.       ADD     r4,r4,r4,LSL #16
  260.  
  261.       ;move into other registers
  262.       MOV     r5,r4
  263.       MOV     r6,r4
  264.       MOV     r7,r4
  265.  
  266.  
  267. DBLloop   STMIA   r0!,{r4-r7} ;plot one line of colour data on screen
  268.       STMIA   r0!,{r4-r7}
  269.       STMIA   r0!,{r4-r7}
  270.       STMIA   r0!,{r4-r7}
  271.       STMIA   r0!,{r4-r7}
  272.  
  273.       STMIA   r0!,{r4-r7}
  274.       STMIA   r0!,{r4-r7}
  275.       STMIA   r0!,{r4-r7}
  276.       STMIA   r0!,{r4-r7}
  277.       STMIA   r0!,{r4-r7}
  278.  
  279.       STMIA   r0!,{r4-r7}
  280.       STMIA   r0!,{r4-r7}
  281.       STMIA   r0!,{r4-r7}
  282.       STMIA   r0!,{r4-r7}
  283.       STMIA   r0!,{r4-r7}
  284.  
  285.       STMIA   r0!,{r4-r7}
  286.       STMIA   r0!,{r4-r7}
  287.       STMIA   r0!,{r4-r7}
  288.       STMIA   r0!,{r4-r7}
  289.       STMIA   r0!,{r4-r7}
  290.  
  291.       SUBS      r3,r3,#1
  292.       BNE     DBLloop
  293.  
  294.       B       EndDrawBorder
  295.  
  296. ;draw bar graphics.
  297. ;on entry -
  298. ;           r0 = screen address
  299. ;           r1 = pointer to bar graphics data
  300.  
  301. |DrawBar|
  302.       STMFD   r13!,{r0-r12,link}
  303.  
  304.       MOV     r14,#16
  305.  
  306. DrawBarLoop
  307.           LDMIA   r1!,{r2-r9} ;plot one line of graphics data on screen
  308.           STMIA   r0!,{r2-r9}
  309.  
  310.           LDMIA   r1!,{r2-r9}
  311.           STMIA   r0!,{r2-r9}
  312.  
  313.           LDMIA   r1!,{r2-r9}
  314.           STMIA   r0!,{r2-r9}
  315.  
  316.           LDMIA   r1!,{r2-r9}
  317.           STMIA   r0!,{r2-r9}
  318.  
  319.           LDMIA   r1!,{r2-r9}
  320.           STMIA   r0!,{r2-r9}
  321.  
  322.           LDMIA   r1!,{r2-r9}
  323.           STMIA   r0!,{r2-r9}
  324.  
  325.           LDMIA   r1!,{r2-r9}
  326.           STMIA   r0!,{r2-r9}
  327.  
  328.           LDMIA   r1!,{r2-r9}
  329.           STMIA   r0!,{r2-r9}
  330.  
  331.           LDMIA   r1!,{r2-r9}
  332.           STMIA   r0!,{r2-r9}
  333.  
  334.           LDMIA   r1!,{r2-r9}
  335.           STMIA   r0!,{r2-r9}
  336.  
  337.       SUBS    r14,r14,#1
  338.           BNE     DrawBarLoop
  339.  
  340. EndDrawBar
  341.           LDMFD   r13!,{r0-r12,pc}
  342.  
  343.  
  344. ;clear background
  345. ;on entry -
  346. ;           r0 = screen address
  347. ;           r1 = screen width
  348. ;           r2 = screen height
  349.  
  350. |AdaptiveRedrawScreen|
  351.       STMFD   r13!,{r0-r12,link}
  352.  
  353.       ;calculate offset to top left corner
  354.           RSB     r3,r2,#238
  355.           MOV     r4,r3,LSR #1
  356.           MOV     r11,r4,LSL #8
  357.           ADD     r3,r11,r4,LSL #6
  358.  
  359.           ;RSB     r4,r1,#320
  360.           ;MOV     r5,r4,LSR #1
  361.           ;ADD     r3,r3,r5
  362.           ADD     r3,r3,r0
  363.  
  364.           ;divide screen height by 2
  365.           MOV     r2,r2,LSR #1
  366.  
  367.           ;plot top half of screen
  368.  
  369.       ;get height for use as counter
  370.           MOV     r8,r2
  371.  
  372.       ;load initial colour value into r4 & make word sized
  373.       MOV     r4,#44
  374.       ADD     r4,r4,r4,LSL #8
  375.       ADD     r4,r4,r4,LSL #16
  376.  
  377.       ;move into other registers
  378.       MOV     r5,r4
  379.       MOV     r6,r4
  380.       MOV     r7,r4
  381.  
  382. BLloopA2  MOV     r9,r1 ;reset width counter
  383.  
  384. BLloop2   STMIA   r3!,{r4-r7} ;plot one block of colour data on screen
  385.  
  386.           SUBS    r9,r9,#16
  387.           BNE     BLloop2
  388.  
  389.       ;update screen pointer to start of next line
  390.       RSB     r10,r1,#320
  391.           ADD     r3,r3,r10
  392.  
  393.           SUBS    r8,r8,#1
  394.           BNE     BLloopA2
  395.  
  396.           ;plot bottom half of screen
  397.  
  398.       ;get height for use as counter
  399.           MOV     r8,r2
  400.  
  401.       ;load initial colour value into r4 & make word sized
  402.       MOV     r4,#46
  403.       ADD     r4,r4,r4,LSL #8
  404.       ADD     r4,r4,r4,LSL #16
  405.  
  406.       ;move into other registers
  407.       MOV     r5,r4
  408.       MOV     r6,r4
  409.       MOV     r7,r4
  410.  
  411. BLloopA1  MOV     r9,r1 ;reset width counter
  412.  
  413. BLloop1   STMIA   r3!,{r4-r7} ;plot one block of colour data on screen
  414.  
  415.           SUBS    r9,r9,#16
  416.           BNE     BLloop1
  417.  
  418.       ;update screen pointer to start of next line
  419.       RSB     r10,r1,#320
  420.           ADD     r3,r3,r10
  421.  
  422.           SUBS    r8,r8,#1
  423.           BNE     BLloopA1
  424.  
  425. EndAdaptiveRedrawScreen
  426.           LDMFD   r13!,{r0-r12,pc}
  427.  
  428.       END
  429.