home *** CD-ROM | disk | FTP | other *** search
/ Dream 44 / Amiga_Dream_44.iso / RiscPc / jeux / biohazard.arc / s / ConvScrRPC < prev    next >
Text File  |  1995-01-26  |  10KB  |  466 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  |ConvertRPC|
  17.  
  18. ;Convert Screen
  19. ;
  20. ; on entry :-
  21. ;    r0 = pointer to 8 bpp virtual screen
  22. ;       r1 = pointer to converted screen
  23. ;       r2 = number of bits per pixel to convert to
  24. ;       r3 = table of colour entries for current mode.
  25.  
  26. |ConvertRPC|
  27.     STMFD   r13!,{r0-r12,link}
  28.  
  29.         ;find which coversion routine to use
  30.         CMP     r2,#32
  31.         BEQ     Conv32bpp
  32.         CMP     r2,#16
  33.         BEQ     Conv16bpp
  34.         CMP     r2,#8
  35.         BEQ     Conv8bpp
  36.         CMP     r2,#4
  37.         BEQ     Conv4bpp
  38.         CMP     r2,#2
  39.         BEQ     Conv2bpp
  40.         CMP     r2,#1
  41.         BNE     EndConvertScreen
  42.  
  43. Conv1bpp
  44.     ;create mask
  45.         MOV     r14,#255
  46.         MOV     r12,#256
  47.  
  48. C1loopB
  49.         MOV     r11,#10
  50. C1loopA
  51.         ;load initial data
  52.         LDMIA   r0!,{r4,r5,r6,r7}
  53.  
  54.         ;convert data
  55.  
  56.         ;word one
  57.         AND     r8,r14,r4
  58.         LDR     r8,[r3,r8,LSL #2]
  59.  
  60.         AND     r9,r14,r4,LSR #8
  61.         LDR     r9,[r3,r9,LSL #2]
  62.         ADD     r8,r8,r9,LSL #1
  63.  
  64.         AND     r9,r14,r4,LSR #16
  65.         LDR     r9,[r3,r9,LSL #2]
  66.         ADD     r8,r8,r9,LSL #2
  67.  
  68.         AND     r9,r14,r4,LSR #24
  69.         LDR     r9,[r3,r9,LSL #2]
  70.         ADD     r8,r8,r9,LSL #3
  71.  
  72.         ;word two
  73.         AND     r9,r14,r5
  74.         LDR     r9,[r3,r9,LSL #2]
  75.         ADD     r8,r8,r9,LSL #4
  76.  
  77.         AND     r9,r14,r5,LSR #8
  78.         LDR     r9,[r3,r9,LSL #2]
  79.         ADD     r8,r8,r9,LSL #5
  80.  
  81.         AND     r9,r14,r5,LSR #16
  82.         LDR     r9,[r3,r9,LSL #2]
  83.         ADD     r8,r8,r9,LSL #6
  84.  
  85.         AND     r9,r14,r5,LSR #24
  86.         LDR     r9,[r3,r9,LSL #2]
  87.         ADD     r8,r8,r9,LSL #7
  88.  
  89.         ;word three
  90.         AND     r9,r14,r6
  91.         LDR     r9,[r3,r9,LSL #2]
  92.         ADD     r8,r8,r9,LSL #8
  93.  
  94.         AND     r9,r14,r6,LSR #8
  95.         LDR     r9,[r3,r9,LSL #2]
  96.         ADD     r8,r8,r9,LSL #9
  97.  
  98.         AND     r9,r14,r6,LSR #16
  99.         LDR     r9,[r3,r9,LSL #2]
  100.         ADD     r8,r8,r9,LSL #10
  101.  
  102.         AND     r9,r14,r6,LSR #24
  103.         LDR     r9,[r3,r9,LSL #2]
  104.         ADD     r8,r8,r9,LSL #11
  105.  
  106.         ;word four
  107.         AND     r9,r14,r7
  108.         LDR     r9,[r3,r9,LSL #2]
  109.         ADD     r8,r8,r9,LSL #12
  110.  
  111.         AND     r9,r14,r7,LSR #8
  112.         LDR     r9,[r3,r9,LSL #2]
  113.         ADD     r8,r8,r9,LSL #13
  114.  
  115.         AND     r9,r14,r7,LSR #16
  116.         LDR     r9,[r3,r9,LSL #2]
  117.         ADD     r8,r8,r9,LSL #14
  118.  
  119.         AND     r9,r14,r7,LSR #24
  120.         LDR     r9,[r3,r9,LSL #2]
  121.         ADD     r8,r8,r9,LSL #15
  122.  
  123.         ;load initial data
  124.         LDMIA   r0!,{r4,r5,r6,r7}
  125.  
  126.         ;word five
  127.         AND     r9,r14,r4
  128.         LDR     r9,[r3,r9,LSL #2]
  129.         ADD     r8,r8,r9,LSL #16
  130.  
  131.         AND     r9,r14,r4,LSR #8
  132.         LDR     r9,[r3,r9,LSL #2]
  133.         ADD     r8,r8,r9,LSL #17
  134.  
  135.         AND     r9,r14,r4,LSR #16
  136.         LDR     r9,[r3,r9,LSL #2]
  137.         ADD     r8,r8,r9,LSL #18
  138.  
  139.         AND     r9,r14,r4,LSR #24
  140.         LDR     r9,[r3,r9,LSL #2]
  141.         ADD     r8,r8,r9,LSL #19
  142.  
  143.         ;word six
  144.         AND     r9,r14,r5
  145.         LDR     r9,[r3,r9,LSL #2]
  146.         ADD     r8,r8,r9,LSL #20
  147.  
  148.         AND     r9,r14,r5,LSR #8
  149.         LDR     r9,[r3,r9,LSL #2]
  150.         ADD     r8,r8,r9,LSL #21
  151.  
  152.         AND     r9,r14,r5,LSR #16
  153.         LDR     r9,[r3,r9,LSL #2]
  154.         ADD     r8,r8,r9,LSL #22
  155.  
  156.         AND     r9,r14,r5,LSR #24
  157.         LDR     r9,[r3,r9,LSL #2]
  158.         ADD     r8,r8,r9,LSL #23
  159.  
  160.         ;word seven
  161.         AND     r9,r14,r6
  162.         LDR     r9,[r3,r9,LSL #2]
  163.         ADD     r8,r8,r9,LSL #24
  164.  
  165.         AND     r9,r14,r6,LSR #8
  166.         LDR     r9,[r3,r9,LSL #2]
  167.         ADD     r8,r8,r9,LSL #25
  168.  
  169.         AND     r9,r14,r6,LSR #16
  170.         LDR     r9,[r3,r9,LSL #2]
  171.         ADD     r8,r8,r9,LSL #26
  172.  
  173.         AND     r9,r14,r6,LSR #24
  174.         LDR     r9,[r3,r9,LSL #2]
  175.         ADD     r8,r8,r9,LSL #27
  176.  
  177.         ;word eight
  178.         AND     r9,r14,r7
  179.         LDR     r9,[r3,r9,LSL #2]
  180.         ADD     r8,r8,r9,LSL #28
  181.  
  182.         AND     r9,r14,r7,LSR #8
  183.         LDR     r9,[r3,r9,LSL #2]
  184.         ADD     r8,r8,r9,LSL #29
  185.  
  186.         AND     r9,r14,r7,LSR #16
  187.         LDR     r9,[r3,r9,LSL #2]
  188.         ADD     r8,r8,r9,LSL #30
  189.  
  190.         AND     r9,r14,r7,LSR #24
  191.         LDR     r9,[r3,r9,LSL #2]
  192.         ADD     r8,r8,r9,LSL #31
  193.  
  194.         ;store on screen
  195.         STR     r8,[r1],#4
  196.  
  197.         SUBS    r11,r11,#1
  198.         BNE     C1loopA
  199.  
  200.         ADD     r1,r1,#280
  201.         ADD     r1,r1,#960
  202.  
  203.         SUBS    r12,r12,#1
  204.         BNE     C1loopB
  205.  
  206.         B       EndConvertScreen
  207.  
  208. Conv2bpp
  209.     ;create mask
  210.         MOV     r14,#255
  211.         MOV     r12,#256
  212.  
  213. C2loopB
  214.         MOV     r11,#20
  215. C2loopA
  216.         ;load initial data
  217.         LDMIA   r0!,{r4,r5,r6,r7}
  218.  
  219.         ;convert data
  220.  
  221.         ;word one
  222.         AND     r8,r14,r4
  223.         LDR     r8,[r3,r8,LSL #2]
  224.  
  225.         AND     r9,r14,r4,LSR #8
  226.         LDR     r9,[r3,r9,LSL #2]
  227.         ADD     r8,r8,r9,LSL #2
  228.  
  229.         AND     r9,r14,r4,LSR #16
  230.         LDR     r9,[r3,r9,LSL #2]
  231.         ADD     r8,r8,r9,LSL #4
  232.  
  233.         AND     r9,r14,r4,LSR #24
  234.         LDR     r9,[r3,r9,LSL #2]
  235.         ADD     r8,r8,r9,LSL #6
  236.  
  237.         ;word two
  238.         AND     r9,r14,r5
  239.         LDR     r9,[r3,r9,LSL #2]
  240.         ADD     r8,r8,r9,LSL #8
  241.  
  242.         AND     r9,r14,r5,LSR #8
  243.         LDR     r9,[r3,r9,LSL #2]
  244.         ADD     r8,r8,r9,LSL #10
  245.  
  246.         AND     r9,r14,r5,LSR #16
  247.         LDR     r9,[r3,r9,LSL #2]
  248.         ADD     r8,r8,r9,LSL #12
  249.  
  250.         AND     r9,r14,r5,LSR #24
  251.         LDR     r9,[r3,r9,LSL #2]
  252.         ADD     r8,r8,r9,LSL #14
  253.  
  254.         ;word three
  255.         AND     r9,r14,r6
  256.         LDR     r9,[r3,r9,LSL #2]
  257.         ADD     r8,r8,r9,LSL #16
  258.  
  259.         AND     r9,r14,r6,LSR #8
  260.         LDR     r9,[r3,r9,LSL #2]
  261.         ADD     r8,r8,r9,LSL #18
  262.  
  263.         AND     r9,r14,r6,LSR #16
  264.         LDR     r9,[r3,r9,LSL #2]
  265.         ADD     r8,r8,r9,LSL #20
  266.  
  267.         AND     r9,r14,r6,LSR #24
  268.         LDR     r9,[r3,r9,LSL #2]
  269.         ADD     r8,r8,r9,LSL #22
  270.  
  271.         ;word four
  272.         AND     r9,r14,r7
  273.         LDR     r9,[r3,r9,LSL #2]
  274.         ADD     r8,r8,r9,LSL #24
  275.  
  276.         AND     r9,r14,r7,LSR #8
  277.         LDR     r9,[r3,r9,LSL #2]
  278.         ADD     r8,r8,r9,LSL #26
  279.  
  280.         AND     r9,r14,r7,LSR #16
  281.         LDR     r9,[r3,r9,LSL #2]
  282.         ADD     r8,r8,r9,LSL #28
  283.  
  284.         AND     r9,r14,r7,LSR #24
  285.         LDR     r9,[r3,r9,LSL #2]
  286.         ADD     r8,r8,r9,LSL #30
  287.  
  288.         ;store on screen
  289.         STR     r8,[r1],#4
  290.  
  291.         SUBS    r11,r11,#1
  292.         BNE     C2loopA
  293.  
  294.         ADD     r1,r1,#240
  295.         ADD     r1,r1,#960
  296.  
  297.         SUBS    r12,r12,#1
  298.         BNE     C2loopB
  299.  
  300.         B       EndConvertScreen
  301.  
  302. Conv4bpp
  303.     ;create mask
  304.         MOV     r14,#255
  305.         MOV     r12,#256
  306.  
  307. C4loopB
  308.         MOV     r11,#40
  309. C4loopA
  310.         ;load initial data
  311.         LDMIA   r0!,{r4,r5}
  312.  
  313.         ;convert data
  314.         AND     r7,r14,r4
  315.         LDR     r7,[r3,r7,LSL #2]
  316.         AND     r6,r14,r4,LSR #8
  317.         LDR     r6,[r3,r6,LSL #2]
  318.         ADD     r7,r7,r6,LSL #4
  319.         AND     r6,r14,r4,LSR #16
  320.         LDR     r6,[r3,r6,LSL #2]
  321.         ADD     r7,r7,r6,LSL #8
  322.         AND     r6,r14,r4,LSR #24
  323.         LDR     r6,[r3,r6,LSL #2]
  324.         ADD     r7,r7,r6,LSL #12
  325.  
  326.         AND     r6,r14,r5
  327.         LDR     r6,[r3,r6,LSL #2]
  328.         ADD     r7,r7,r6,LSL #16
  329.         AND     r6,r14,r5,LSR #8
  330.         LDR     r6,[r3,r6,LSL #2]
  331.         ADD     r7,r7,r6,LSL #20
  332.         AND     r6,r14,r5,LSR #16
  333.         LDR     r6,[r3,r6,LSL #2]
  334.         ADD     r7,r7,r6,LSL #24
  335.         AND     r6,r14,r5,LSR #24
  336.         LDR     r6,[r3,r6,LSL #2]
  337.         ADD     r7,r7,r6,LSL #28
  338.  
  339.         ;store on screen
  340.         STR     r7,[r1],#4
  341.  
  342.         SUBS    r11,r11,#1
  343.         BNE     C4loopA
  344.  
  345.         ADD     r1,r1,#160
  346.         ADD     r1,r1,#960
  347.  
  348.         SUBS    r12,r12,#1
  349.         BNE     C4loopB
  350.  
  351.         B       EndConvertScreen
  352.  
  353. Conv8bpp
  354.     ;create mask
  355.         MOV     r14,#256
  356.  
  357. C8loopA
  358.         ;load initial data
  359.         LDMIA   r0!,{r2-r11}
  360.         STMIA   r1!,{r2-r11}
  361.  
  362.         LDMIA   r0!,{r2-r11}
  363.         STMIA   r1!,{r2-r11}
  364.  
  365.         LDMIA   r0!,{r2-r11}
  366.         STMIA   r1!,{r2-r11}
  367.  
  368.         LDMIA   r0!,{r2-r11}
  369.         STMIA   r1!,{r2-r11}
  370.  
  371.         LDMIA   r0!,{r2-r11}
  372.         STMIA   r1!,{r2-r11}
  373.  
  374.         LDMIA   r0!,{r2-r11}
  375.         STMIA   r1!,{r2-r11}
  376.  
  377.         LDMIA   r0!,{r2-r11}
  378.         STMIA   r1!,{r2-r11}
  379.  
  380.         LDMIA   r0!,{r2-r11}
  381.         STMIA   r1!,{r2-r11}
  382.  
  383.         ADD     r1,r1,#960
  384.  
  385.         SUBS    r14,r14,#1
  386.         BNE     C8loopA
  387.  
  388.         B       EndConvertScreen
  389.  
  390. Conv16bpp
  391.     ;create mask
  392.         MOV     r14,#255
  393.         MOV     r12,#256
  394.  
  395. C16loopB
  396.         MOV     r11,#80
  397. C16loopA
  398.         ;load initial data
  399.         LDMIA   r0!,{r4}
  400.  
  401.         ;convert data
  402.         AND     r7,r14,r4
  403.         LDR     r7,[r3,r7,LSL #2]
  404.  
  405.         AND     r6,r14,r4,LSR #8
  406.         LDR     r6,[r3,r6,LSL #2]
  407.         ADD     r7,r7,r6,LSL #16
  408.  
  409.         AND     r8,r14,r4,LSR #16
  410.         LDR     r8,[r3,r8,LSL #2]
  411.  
  412.         AND     r6,r14,r4,LSR #24
  413.         LDR     r6,[r3,r6,LSL #2]
  414.         ADD     r8,r8,r6,LSL #16
  415.  
  416.         ;store on screen
  417.         STMIA   r1!,{r7,r8}
  418.  
  419.         SUBS    r11,r11,#1
  420.         BNE     C16loopA
  421.  
  422.         ADD     r1,r1,#640
  423.  
  424.         SUBS    r12,r12,#1
  425.         BNE     C16loopB
  426.  
  427.         B       EndConvertScreen
  428.  
  429. Conv32bpp
  430.     ;create mask
  431.         MOV     r14,#255
  432.         MOV     r12,#256
  433.  
  434. C32loopB
  435.         MOV     r11,#80
  436. C32loopA
  437.         ;load initial data
  438.         LDMIA   r0!,{r4}
  439.  
  440.         ;convert data
  441.         AND     r7,r14,r4
  442.         LDR     r7,[r3,r7,LSL #2]
  443.  
  444.         AND     r8,r14,r4,LSR #8
  445.         LDR     r8,[r3,r8,LSL #2]
  446.  
  447.         AND     r9,r14,r4,LSR #16
  448.         LDR     r9,[r3,r9,LSL #2]
  449.  
  450.         AND     r10,r14,r4,LSR #24
  451.         LDR     r10,[r3,r10,LSL #2]
  452.  
  453.         ;store on screen
  454.         STMIA   r1!,{r7-r10}
  455.  
  456.         SUBS    r11,r11,#1
  457.         BNE     C32loopA
  458.  
  459.         SUBS    r12,r12,#1
  460.         BNE     C32loopB
  461.  
  462. EndConvertScreen
  463.         LDMFD   r13!,{r0-r12,pc}
  464.  
  465.     END
  466.