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