home *** CD-ROM | disk | FTP | other *** search
/ Dream 44 / Amiga_Dream_44.iso / RiscPc / jeux / biohazard.arc / s / ConvScrn < prev    next >
Text File  |  1995-03-19  |  8KB  |  350 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  |ConvertScreen|
  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. |ConvertScreen|
  27.     STMFD   r13!,{r0-r12,link}
  28.  
  29.         ;find which coversion routine to use
  30.         CMP     r2,#8
  31.         BEQ     EndConvertScreen
  32.         CMP     r2,#4
  33.         BEQ     Conv4bpp
  34.         CMP     r2,#2
  35.         BEQ     Conv2bpp
  36.         CMP     r2,#1
  37.         BNE     EndConvertScreen
  38.  
  39. Conv1bpp
  40.     ;create mask
  41.         MOV     r14,#255
  42.         MOV     r12,#256
  43.  
  44. C1loopB
  45.         MOV     r11,#10
  46. C1loopA
  47.         ;load initial data
  48.         LDMIA   r0!,{r4,r5,r6,r7}
  49.  
  50.         ;convert data
  51.  
  52.         ;word one
  53.         AND     r8,r14,r4
  54.         LDR     r8,[r3,r8,LSL #2]
  55.  
  56.         AND     r9,r14,r4,LSR #8
  57.         LDR     r9,[r3,r9,LSL #2]
  58.         ADD     r8,r8,r9,LSL #1
  59.  
  60.         AND     r9,r14,r4,LSR #16
  61.         LDR     r9,[r3,r9,LSL #2]
  62.         ADD     r8,r8,r9,LSL #2
  63.  
  64.         AND     r9,r14,r4,LSR #24
  65.         LDR     r9,[r3,r9,LSL #2]
  66.         ADD     r8,r8,r9,LSL #3
  67.  
  68.         ;word two
  69.         AND     r9,r14,r5
  70.         LDR     r9,[r3,r9,LSL #2]
  71.         ADD     r8,r8,r9,LSL #4
  72.  
  73.         AND     r9,r14,r5,LSR #8
  74.         LDR     r9,[r3,r9,LSL #2]
  75.         ADD     r8,r8,r9,LSL #5
  76.  
  77.         AND     r9,r14,r5,LSR #16
  78.         LDR     r9,[r3,r9,LSL #2]
  79.         ADD     r8,r8,r9,LSL #6
  80.  
  81.         AND     r9,r14,r5,LSR #24
  82.         LDR     r9,[r3,r9,LSL #2]
  83.         ADD     r8,r8,r9,LSL #7
  84.  
  85.         ;word three
  86.         AND     r9,r14,r6
  87.         LDR     r9,[r3,r9,LSL #2]
  88.         ADD     r8,r8,r9,LSL #8
  89.  
  90.         AND     r9,r14,r6,LSR #8
  91.         LDR     r9,[r3,r9,LSL #2]
  92.         ADD     r8,r8,r9,LSL #9
  93.  
  94.         AND     r9,r14,r6,LSR #16
  95.         LDR     r9,[r3,r9,LSL #2]
  96.         ADD     r8,r8,r9,LSL #10
  97.  
  98.         AND     r9,r14,r6,LSR #24
  99.         LDR     r9,[r3,r9,LSL #2]
  100.         ADD     r8,r8,r9,LSL #11
  101.  
  102.         ;word four
  103.         AND     r9,r14,r7
  104.         LDR     r9,[r3,r9,LSL #2]
  105.         ADD     r8,r8,r9,LSL #12
  106.  
  107.         AND     r9,r14,r7,LSR #8
  108.         LDR     r9,[r3,r9,LSL #2]
  109.         ADD     r8,r8,r9,LSL #13
  110.  
  111.         AND     r9,r14,r7,LSR #16
  112.         LDR     r9,[r3,r9,LSL #2]
  113.         ADD     r8,r8,r9,LSL #14
  114.  
  115.         AND     r9,r14,r7,LSR #24
  116.         LDR     r9,[r3,r9,LSL #2]
  117.         ADD     r8,r8,r9,LSL #15
  118.  
  119.         ;load second block of initial data
  120.         LDMIA   r0!,{r4,r5,r6,r7}
  121.  
  122.         ;convert data
  123.  
  124.         ;word one
  125.         AND     r9,r14,r4
  126.         LDR     r8,[r3,r9,LSL #2]
  127.         ADD     r8,r8,r9,LSL #16
  128.  
  129.         AND     r9,r14,r4,LSR #8
  130.         LDR     r9,[r3,r9,LSL #2]
  131.         ADD     r8,r8,r9,LSL #17
  132.  
  133.         AND     r9,r14,r4,LSR #16
  134.         LDR     r9,[r3,r9,LSL #2]
  135.         ADD     r8,r8,r9,LSL #18
  136.  
  137.         AND     r9,r14,r4,LSR #24
  138.         LDR     r9,[r3,r9,LSL #2]
  139.         ADD     r8,r8,r9,LSL #19
  140.  
  141.         ;word two
  142.         AND     r9,r14,r5
  143.         LDR     r9,[r3,r9,LSL #2]
  144.         ADD     r8,r8,r9,LSL #20
  145.  
  146.         AND     r9,r14,r5,LSR #8
  147.         LDR     r9,[r3,r9,LSL #2]
  148.         ADD     r8,r8,r9,LSL #21
  149.  
  150.         AND     r9,r14,r5,LSR #16
  151.         LDR     r9,[r3,r9,LSL #2]
  152.         ADD     r8,r8,r9,LSL #22
  153.  
  154.         AND     r9,r14,r5,LSR #24
  155.         LDR     r9,[r3,r9,LSL #2]
  156.         ADD     r8,r8,r9,LSL #23
  157.  
  158.         ;word three
  159.         AND     r9,r14,r6
  160.         LDR     r9,[r3,r9,LSL #2]
  161.         ADD     r8,r8,r9,LSL #24
  162.  
  163.         AND     r9,r14,r6,LSR #8
  164.         LDR     r9,[r3,r9,LSL #2]
  165.         ADD     r8,r8,r9,LSL #25
  166.  
  167.         AND     r9,r14,r6,LSR #16
  168.         LDR     r9,[r3,r9,LSL #2]
  169.         ADD     r8,r8,r9,LSL #26
  170.  
  171.         AND     r9,r14,r6,LSR #24
  172.         LDR     r9,[r3,r9,LSL #2]
  173.         ADD     r8,r8,r9,LSL #27
  174.  
  175.         ;word four
  176.         AND     r9,r14,r7
  177.         LDR     r9,[r3,r9,LSL #2]
  178.         ADD     r8,r8,r9,LSL #28
  179.  
  180.         AND     r9,r14,r7,LSR #8
  181.         LDR     r9,[r3,r9,LSL #2]
  182.         ADD     r8,r8,r9,LSL #29
  183.  
  184.         AND     r9,r14,r7,LSR #16
  185.         LDR     r9,[r3,r9,LSL #2]
  186.         ADD     r8,r8,r9,LSL #30
  187.  
  188.         AND     r9,r14,r7,LSR #24
  189.         LDR     r9,[r3,r9,LSL #2]
  190.         ADD     r8,r8,r9,LSL #31
  191.  
  192.         ;store on screen
  193.         STR     r8,[r1],#4
  194.  
  195.         SUBS    r11,r11,#1
  196.         BNE     C1loopA
  197.  
  198.         ADD     r1,r1,#280
  199.  
  200.         SUBS    r12,r12,#1
  201.         BNE     C1loopB
  202.  
  203.         B       EndConvertScreen
  204.  
  205. Conv2bpp
  206.     ;create mask
  207.         MOV     r14,#255
  208.         MOV     r12,#256
  209.  
  210. C2loopB
  211.         MOV     r11,#20
  212. C2loopA
  213.         ;load initial data
  214.         LDMIA   r0!,{r4,r5,r6,r7}
  215.  
  216.         ;convert data
  217.  
  218.         ;word one
  219.         AND     r8,r14,r4
  220.         LDR     r8,[r3,r8,LSL #2]
  221.  
  222.         AND     r9,r14,r4,LSR #8
  223.         LDR     r9,[r3,r9,LSL #2]
  224.         ADD     r8,r8,r9,LSL #2
  225.  
  226.         AND     r9,r14,r4,LSR #16
  227.         LDR     r9,[r3,r9,LSL #2]
  228.         ADD     r8,r8,r9,LSL #4
  229.  
  230.         AND     r9,r14,r4,LSR #24
  231.         LDR     r9,[r3,r9,LSL #2]
  232.         ADD     r8,r8,r9,LSL #6
  233.  
  234.         ;word two
  235.         AND     r9,r14,r5
  236.         LDR     r9,[r3,r9,LSL #2]
  237.         ADD     r8,r8,r9,LSL #8
  238.  
  239.         AND     r9,r14,r5,LSR #8
  240.         LDR     r9,[r3,r9,LSL #2]
  241.         ADD     r8,r8,r9,LSL #10
  242.  
  243.         AND     r9,r14,r5,LSR #16
  244.         LDR     r9,[r3,r9,LSL #2]
  245.         ADD     r8,r8,r9,LSL #12
  246.  
  247.         AND     r9,r14,r5,LSR #24
  248.         LDR     r9,[r3,r9,LSL #2]
  249.         ADD     r8,r8,r9,LSL #14
  250.  
  251.         ;word three
  252.         AND     r9,r14,r6
  253.         LDR     r9,[r3,r9,LSL #2]
  254.         ADD     r8,r8,r9,LSL #16
  255.  
  256.         AND     r9,r14,r6,LSR #8
  257.         LDR     r9,[r3,r9,LSL #2]
  258.         ADD     r8,r8,r9,LSL #18
  259.  
  260.         AND     r9,r14,r6,LSR #16
  261.         LDR     r9,[r3,r9,LSL #2]
  262.         ADD     r8,r8,r9,LSL #20
  263.  
  264.         AND     r9,r14,r6,LSR #24
  265.         LDR     r9,[r3,r9,LSL #2]
  266.         ADD     r8,r8,r9,LSL #22
  267.  
  268.         ;word four
  269.         AND     r9,r14,r7
  270.         LDR     r9,[r3,r9,LSL #2]
  271.         ADD     r8,r8,r9,LSL #24
  272.  
  273.         AND     r9,r14,r7,LSR #8
  274.         LDR     r9,[r3,r9,LSL #2]
  275.         ADD     r8,r8,r9,LSL #26
  276.  
  277.         AND     r9,r14,r7,LSR #16
  278.         LDR     r9,[r3,r9,LSL #2]
  279.         ADD     r8,r8,r9,LSL #28
  280.  
  281.         AND     r9,r14,r7,LSR #24
  282.         LDR     r9,[r3,r9,LSL #2]
  283.         ADD     r8,r8,r9,LSL #30
  284.  
  285.         ;store on screen
  286.         STR     r8,[r1],#4
  287.  
  288.         SUBS    r11,r11,#1
  289.         BNE     C2loopA
  290.  
  291.         ADD     r1,r1,#240
  292.  
  293.         SUBS    r12,r12,#1
  294.         BNE     C2loopB
  295.  
  296.         B       EndConvertScreen
  297.  
  298. Conv4bpp
  299.     ;create mask
  300.         MOV     r14,#255
  301.         MOV     r12,#256
  302.  
  303. C4loopB
  304.         MOV     r11,#40
  305. C4loopA
  306.         ;load initial data
  307.         LDMIA   r0!,{r4,r5}
  308.  
  309.         ;convert data
  310.         AND     r7,r14,r4
  311.         LDR     r7,[r3,r7,LSL #2]
  312.         AND     r6,r14,r4,LSR #8
  313.         LDR     r6,[r3,r6,LSL #2]
  314.         ADD     r7,r7,r6,LSL #4
  315.         AND     r6,r14,r4,LSR #16
  316.         LDR     r6,[r3,r6,LSL #2]
  317.         ADD     r7,r7,r6,LSL #8
  318.         AND     r6,r14,r4,LSR #24
  319.         LDR     r6,[r3,r6,LSL #2]
  320.         ADD     r7,r7,r6,LSL #12
  321.  
  322.         AND     r6,r14,r5
  323.         LDR     r6,[r3,r6,LSL #2]
  324.         ADD     r7,r7,r6,LSL #16
  325.         AND     r6,r14,r5,LSR #8
  326.         LDR     r6,[r3,r6,LSL #2]
  327.         ADD     r7,r7,r6,LSL #20
  328.         AND     r6,r14,r5,LSR #16
  329.         LDR     r6,[r3,r6,LSL #2]
  330.         ADD     r7,r7,r6,LSL #24
  331.         AND     r6,r14,r5,LSR #24
  332.         LDR     r6,[r3,r6,LSL #2]
  333.         ADD     r7,r7,r6,LSL #28
  334.  
  335.         ;store on screen
  336.         STR     r7,[r1],#4
  337.  
  338.         SUBS    r11,r11,#1
  339.         BNE     C4loopA
  340.  
  341.         ADD     r1,r1,#160
  342.  
  343.         SUBS    r12,r12,#1
  344.         BNE     C4loopB
  345.  
  346. EndConvertScreen
  347.         LDMFD   r13!,{r0-r12,pc}
  348.  
  349.     END
  350.