home *** CD-ROM | disk | FTP | other *** search
/ Dream 55 / Amiga_Dream_55.iso / RISCOS / MAGAZINE / NEWS / 3DENGI.ZIP / 3DEngine / !PlotLib / src / s / plotter8 < prev   
Text File  |  1998-08-11  |  17KB  |  1,014 lines

  1.         AREA |C$$code|, CODE, READONLY
  2.  
  3.     EXPORT    PlotterFcore8
  4.     EXPORT    PlotterFGcore8
  5.     EXPORT    PlotterFAcore8
  6.     EXPORT    PlotterFAGcore8
  7.     EXPORT    PlotterTcore8
  8.     EXPORT    PlotterTGcore8
  9.     EXPORT    PlotterTAcore8
  10.     EXPORT    PlotterTAGcore8
  11.     EXPORT    PlotterTTcore8
  12.     EXPORT    PlotterTTGcore8
  13.     EXPORT    PlotterTTAcore8
  14.     EXPORT    PlotterTTAGcore8
  15.     ;EXPORT    Screen_Clear
  16.  
  17. PlotterFcore8
  18.     ; r0 = int temp
  19.     ; r1 = int c
  20.     ; r2 = char *tpos
  21. pfclp
  22.     STRB    r1,[r2],#1
  23.     SUBS    r0,r0,#1
  24.     BGE    pfclp
  25.  
  26.     MOVS    PC,R14
  27. PlotterTcore8
  28.     ; r0 = int su
  29.     ; r1 = int sv
  30.     ; r2 = int sdu
  31.     ; r3 = int sdv
  32.     MOV    r12,r13
  33.     STMFD    r13!,{r4-r7,r14}
  34.         LDMFD    r12,{r4,r5,r12,r14}
  35.     ; r4 = int temp
  36.     ; r5 = int rowbytes
  37.     ; r12= ptemp
  38.     ; r14= tpos
  39. ptclp
  40.     MOV    r6,r1,ASR#16
  41.     MOV    r7,r0,ASR#16
  42.     MLA    r6,r5,r6,r7
  43.     ADD    r0,r0,r2
  44.     LDRB    r6,[r12,r6]
  45.     ADD    r1,r1,r3
  46.     STRB    r6,[r14],#1
  47.     SUBS    r4,r4,#1
  48.     BGE    ptclp
  49.  
  50.     LDMFD    r13!,{r4-r7,PC}^
  51. PlotterFAcore8
  52.     ; r0 = int temp
  53.     ; r1 = int c
  54.     ; r2 = int alpha
  55.     ; r3 = char *tpos
  56.     STMFD    r13!,{r4-r6,r14}
  57.     ADR    r14,alphatab+12*4
  58.     ADR    r12,alphatab+17
  59.     MOV    r2,r2,LSR#11
  60.     LDRB    r5,[r3]
  61.     LDR    r1,[r14,r1,LSL#2]    ; r1 = a = (B<<20)|(G<<10)|(R)
  62.     LDR    r5,[r14,r5,LSL#2]    ; r10= b = (b<<20)|(g<<10)|(r)
  63. pfaclp
  64.     SUB    r6,r1,r5        ; r7 = a-b
  65.     MUL    r4,r6,r2        ; r7 = (a-b)*alpha
  66.     ; Stall
  67.     ADD    r4,r4,r5,LSL#5    ; r8 = (a-b)*alpha + 32*b
  68.     LDRB    r6,[r14,-r4,LSR#25]
  69.     ANDS    r5,r4,#15<<15
  70.     LDRNEB    r5,[r12,r5,LSR#15]
  71.     ANDS    r4,r4,#15<<5
  72.     LDRNEB    r4,[r12,-r4,LSR#5]
  73.     ORR    r6,r6,r5
  74.     ORR    r4,r4,r6
  75.  
  76.     STRB    r4,[r3],#1
  77.     LDRB    r5,[r3]
  78.     SUBS    r0,r0,#1
  79.     LDRGE    r5,[r14,r5,LSL#2]    ; r10= b = (b<<20)|(g<<10)|(r)
  80.     BGE    pfaclp
  81.  
  82.     LDMFD    r13!,{r4-r6,PC}^
  83. PlotterTAcore8
  84.     ; r0 = int su
  85.     ; r1 = int sv
  86.     ; r2 = int sdu
  87.     ; r3 = int sdv
  88.     MOV    r12,r13
  89.     STMFD    r13!,{r4-r11,r14}
  90.         LDMFD    r12,{r4,r5,r6,r12,r14}
  91.     ; r4 = int temp
  92.     ; r5 = int rowbytes
  93.     ; r6 = int alpha
  94.     ; r12= ptemp
  95.     ; r14= tpos
  96.     MOV    r6,r6,LSR#11
  97.     ADR    r9,alphatab+12*4
  98. ptaclp
  99.     MOV    r8,r1,ASR#16
  100.     MOV    r7,r0,ASR#16
  101.     MLA    r8,r5,r8,r7
  102.     ADD    r0,r0,r2
  103.     LDRB    r8,[r12,r8]
  104.     LDRB    r10,[r14]
  105.  
  106.     LDR    r8,[r9,r8,LSL#2]    ; r8 = a = (B<<20)|(G<<10)|(R)
  107.     LDR    r10,[r9,r10,LSL#2]    ; r10= b = (b<<20)|(g<<10)|(r)
  108.     ADD    r1,r1,r3
  109.     SUB    r8,r8,r10        ; r8 = a-b
  110.     MUL    r11,r8,r6        ; r8 = (a-b)*alpha
  111.     ADR    r8,alphatab+17
  112.     ADD    r11,r11,r10,LSL#5    ; r8 = (a-b)*alpha + 32*b
  113.     LDRB    r7,[r9,-r11,LSR#25]
  114.     ANDS    r10,r11,#15<<15
  115.     LDRNEB    r10,[r8,r10,LSR#15]
  116.     ANDS    r11,r11,#15<<5
  117.     LDRNEB    r11,[r8,-r11,LSR#5]
  118.     ORR    r7,r7,r10
  119.     ORR    r11,r11,r7
  120.  
  121.     STRB    r11,[r14],#1
  122.     SUBS    r4,r4,#1
  123.     BGE    ptaclp
  124.  
  125.     LDMFD    r13!,{r4-r11,PC}^
  126. alphatab
  127.     DCD &16170000
  128.     DCD &12131415
  129.     DCD &06071011
  130.     DCD &02030405
  131.     DCD &02010001
  132.     DCD &22212003
  133.     DCD &42414023
  134.     DCD &62616043
  135.     DCD &898A8B63
  136.     DCD &81828388
  137.     DCD &090A0B80
  138.     DCD &01020308
  139.     DCD &00000000
  140.     DCD &00100401
  141.     DCD &00200802
  142.     DCD &00300C03
  143.     DCD &00000004
  144.     DCD &00100405
  145.     DCD &00200806
  146.     DCD &00300C07
  147.     DCD &00400000
  148.     DCD &00500401
  149.     DCD &00600802
  150.     DCD &00700C03
  151.     DCD &00400004
  152.     DCD &00500405
  153.     DCD &00600806
  154.     DCD &00700C07
  155.     DCD &00000008
  156.     DCD &00100409
  157.     DCD &0020080A
  158.     DCD &00300C0B
  159.     DCD &0000000C
  160.     DCD &0010040D
  161.     DCD &0020080E
  162.     DCD &00300C0F
  163.     DCD &00400008
  164.     DCD &00500409
  165.     DCD &0060080A
  166.     DCD &00700C0B
  167.     DCD &0040000C
  168.     DCD &0050040D
  169.     DCD &0060080E
  170.     DCD &00700C0F
  171.     DCD &00001000
  172.     DCD &00101401
  173.     DCD &00201802
  174.     DCD &00301C03
  175.     DCD &00001004
  176.     DCD &00101405
  177.     DCD &00201806
  178.     DCD &00301C07
  179.     DCD &00401000
  180.     DCD &00501401
  181.     DCD &00601802
  182.     DCD &00701C03
  183.     DCD &00401004
  184.     DCD &00501405
  185.     DCD &00601806
  186.     DCD &00701C07
  187.     DCD &00001008
  188.     DCD &00101409
  189.     DCD &0020180A
  190.     DCD &00301C0B
  191.     DCD &0000100C
  192.     DCD &0010140D
  193.     DCD &0020180E
  194.     DCD &00301C0F
  195.     DCD &00401008
  196.     DCD &00501409
  197.     DCD &0060180A
  198.     DCD &00701C0B
  199.     DCD &0040100C
  200.     DCD &0050140D
  201.     DCD &0060180E
  202.     DCD &00701C0F
  203.     DCD &00002000
  204.     DCD &00102401
  205.     DCD &00202802
  206.     DCD &00302C03
  207.     DCD &00002004
  208.     DCD &00102405
  209.     DCD &00202806
  210.     DCD &00302C07
  211.     DCD &00402000
  212.     DCD &00502401
  213.     DCD &00602802
  214.     DCD &00702C03
  215.     DCD &00402004
  216.     DCD &00502405
  217.     DCD &00602806
  218.     DCD &00702C07
  219.     DCD &00002008
  220.     DCD &00102409
  221.     DCD &0020280A
  222.     DCD &00302C0B
  223.     DCD &0000200C
  224.     DCD &0010240D
  225.     DCD &0020280E
  226.     DCD &00302C0F
  227.     DCD &00402008
  228.     DCD &00502409
  229.     DCD &0060280A
  230.     DCD &00702C0B
  231.     DCD &0040200C
  232.     DCD &0050240D
  233.     DCD &0060280E
  234.     DCD &00702C0F
  235.     DCD &00003000
  236.     DCD &00103401
  237.     DCD &00203802
  238.     DCD &00303C03
  239.     DCD &00003004
  240.     DCD &00103405
  241.     DCD &00203806
  242.     DCD &00303C07
  243.     DCD &00403000
  244.     DCD &00503401
  245.     DCD &00603802
  246.     DCD &00703C03
  247.     DCD &00403004
  248.     DCD &00503405
  249.     DCD &00603806
  250.     DCD &00703C07
  251.     DCD &00003008
  252.     DCD &00103409
  253.     DCD &0020380A
  254.     DCD &00303C0B
  255.     DCD &0000300C
  256.     DCD &0010340D
  257.     DCD &0020380E
  258.     DCD &00303C0F
  259.     DCD &00403008
  260.     DCD &00503409
  261.     DCD &0060380A
  262.     DCD &00703C0B
  263.     DCD &0040300C
  264.     DCD &0050340D
  265.     DCD &0060380E
  266.     DCD &00703C0F
  267.     DCD &00800000
  268.     DCD &00900401
  269.     DCD &00A00802
  270.     DCD &00B00C03
  271.     DCD &00800004
  272.     DCD &00900405
  273.     DCD &00A00806
  274.     DCD &00B00C07
  275.     DCD &00C00000
  276.     DCD &00D00401
  277.     DCD &00E00802
  278.     DCD &00F00C03
  279.     DCD &00C00004
  280.     DCD &00D00405
  281.     DCD &00E00806
  282.     DCD &00F00C07
  283.     DCD &00800008
  284.     DCD &00900409
  285.     DCD &00A0080A
  286.     DCD &00B00C0B
  287.     DCD &0080000C
  288.     DCD &0090040D
  289.     DCD &00A0080E
  290.     DCD &00B00C0F
  291.     DCD &00C00008
  292.     DCD &00D00409
  293.     DCD &00E0080A
  294.     DCD &00F00C0B
  295.     DCD &00C0000C
  296.     DCD &00D0040D
  297.     DCD &00E0080E
  298.     DCD &00F00C0F
  299.     DCD &00801000
  300.     DCD &00901401
  301.     DCD &00A01802
  302.     DCD &00B01C03
  303.     DCD &00801004
  304.     DCD &00901405
  305.     DCD &00A01806
  306.     DCD &00B01C07
  307.     DCD &00C01000
  308.     DCD &00D01401
  309.     DCD &00E01802
  310.     DCD &00F01C03
  311.     DCD &00C01004
  312.     DCD &00D01405
  313.     DCD &00E01806
  314.     DCD &00F01C07
  315.     DCD &00801008
  316.     DCD &00901409
  317.     DCD &00A0180A
  318.     DCD &00B01C0B
  319.     DCD &0080100C
  320.     DCD &0090140D
  321.     DCD &00A0180E
  322.     DCD &00B01C0F
  323.     DCD &00C01008
  324.     DCD &00D01409
  325.     DCD &00E0180A
  326.     DCD &00F01C0B
  327.     DCD &00C0100C
  328.     DCD &00D0140D
  329.     DCD &00E0180E
  330.     DCD &00F01C0F
  331.     DCD &00802000
  332.     DCD &00902401
  333.     DCD &00A02802
  334.     DCD &00B02C03
  335.     DCD &00802004
  336.     DCD &00902405
  337.     DCD &00A02806
  338.     DCD &00B02C07
  339.     DCD &00C02000
  340.     DCD &00D02401
  341.     DCD &00E02802
  342.     DCD &00F02C03
  343.     DCD &00C02004
  344.     DCD &00D02405
  345.     DCD &00E02806
  346.     DCD &00F02C07
  347.     DCD &00802008
  348.     DCD &00902409
  349.     DCD &00A0280A
  350.     DCD &00B02C0B
  351.     DCD &0080200C
  352.     DCD &0090240D
  353.     DCD &00A0280E
  354.     DCD &00B02C0F
  355.     DCD &00C02008
  356.     DCD &00D02409
  357.     DCD &00E0280A
  358.     DCD &00F02C0B
  359.     DCD &00C0200C
  360.     DCD &00D0240D
  361.     DCD &00E0280E
  362.     DCD &00F02C0F
  363.     DCD &00803000
  364.     DCD &00903401
  365.     DCD &00A03802
  366.     DCD &00B03C03
  367.     DCD &00803004
  368.     DCD &00903405
  369.     DCD &00A03806
  370.     DCD &00B03C07
  371.     DCD &00C03000
  372.     DCD &00D03401
  373.     DCD &00E03802
  374.     DCD &00F03C03
  375.     DCD &00C03004
  376.     DCD &00D03405
  377.     DCD &00E03806
  378.     DCD &00F03C07
  379.     DCD &00803008
  380.     DCD &00903409
  381.     DCD &00A0380A
  382.     DCD &00B03C0B
  383.     DCD &0080300C
  384.     DCD &0090340D
  385.     DCD &00A0380E
  386.     DCD &00B03C0F
  387.     DCD &00C03008
  388.     DCD &00D03409
  389.     DCD &00E0380A
  390.     DCD &00F03C0B
  391.     DCD &00C0300C
  392.     DCD &00D0340D
  393.     DCD &00E0380E
  394.     DCD &00F03C0F
  395.  
  396.     DCD    0
  397.  
  398. PlotterTAGcore8
  399.     ; r0 = int su
  400.     ; r1 = int sv
  401.     ; r2 = int sdu
  402.     ; r3 = int sdv
  403.     MOV    r12,r13
  404.     STMFD    r13!,{r4-r11,r14}
  405.         LDMFD    r12,{r4,r5,r6,r7,r10,r12,r14}
  406.     ; r4 = int temp
  407.     ; r5 = int rowbytes
  408.     ; r6 = int alpha
  409.     ; r7 = int si
  410.     ; r10= int sdi
  411.     ; r12= ptemp
  412.     ; r14= tpos
  413.     MOV    r6,r6,LSR#11
  414.     CMP    r7,#0
  415.     BLE    ptagclp_lt0
  416. ptagclp
  417.     MOV    r8,r1,ASR#16
  418.     MOV    r11,r0,ASR#16
  419.     MLA    r8,r5,r8,r11
  420.     ADR    r9,alphatab+12*4
  421.     LDRB    r8,[r12,r8]
  422.     ADD    r0,r0,r2
  423.  
  424.     LDR    r8,[r9,r8,LSL#2]    ; r8 = a = (B<<20)|(G<<10)|(R)
  425.     ADD    r1,r1,r3
  426.     AND    r11,r8,#15
  427.     MUL    r11,r7,r11
  428.     AND    r10,r8,#15<<10
  429.     MUL    r10,r7,r10
  430.     CMP    r11,#15<<16
  431.     MOVGT    r11,#15<<16
  432.     MOV    r11,r11,LSR#16
  433.     MOV    r8,r8,LSR#20
  434.     MUL    r8,r7,r8
  435.     CMP    r10,#15<<26
  436.     MOVGT    r10,#15<<26
  437.     MOV    r10,r10,LSR#26
  438.     CMP    r8,#15<<16
  439.     MOVGT    r8,#15<<16
  440.     MOV    r8,r8,LSR#16
  441.     ORR    r11,r11,r10,LSL#10
  442.     LDRB    r10,[r14]
  443.     ORR    r8,r11,r8,LSL#20
  444.  
  445.     LDR    r10,[r9,r10,LSL#2]    ; r10= b = (b<<20)|(g<<10)|(r)
  446.     ; Stall
  447.     SUB    r8,r8,r10        ; r8 = a-b
  448.     MUL    r11,r8,r6        ; r8 = (a-b)*alpha
  449.     SUB    r8,r9,#12*4-17
  450.     ADD    r11,r11,r10,LSL#5    ; r8 = (a-b)*alpha + 32*b
  451.     LDRB    r9,[r9,-r11,LSR#25]
  452.     ANDS    r10,r11,#15<<15
  453.     LDRNEB    r10,[r8,r10,LSR#15]
  454.     ANDS    r11,r11,#15<<5
  455.     LDRNEB    r11,[r8,-r11,LSR#5]
  456.     ORR    r9,r9,r10
  457.     LDR    r10,[r13,#(9+4)*4]
  458.     ORR    r11,r11,r9
  459.  
  460.     ADDS    r7,r7,r10
  461.     STRB    r11,[r14],#1
  462.     BLT    ptagclp_lt0_entry2
  463. ptagclp_entry2
  464.     SUBS    r4,r4,#1
  465.     BGE    ptagclp
  466.  
  467.     LDMFD    r13!,{r4-r11,PC}^
  468. ptagclp_lt0
  469.  
  470.     LDRB    r10,[r14]
  471.     ADD    r1,r1,r3
  472.     ADR    r9,alphatab+12*4
  473.  
  474.     LDR    r10,[r9,r10,LSL#2]    ; r10= b = (b<<20)|(g<<10)|(r)
  475.     ADD    r0,r0,r2
  476.     RSB    r8,r10,#0        ; r8 = a-b
  477.     MUL    r11,r8,r6        ; r8 = (a-b)*alpha
  478.     SUB    r8,r9,#12*4-17
  479.     ADD    r11,r11,r10,LSL#5    ; r8 = (a-b)*alpha + 32*b
  480.     LDRB    r9,[r9,-r11,LSR#25]
  481.     ANDS    r10,r11,#15<<15
  482.     LDRNEB    r10,[r8,r10,LSR#15]
  483.     ANDS    r11,r11,#15<<5
  484.     LDRNEB    r11,[r8,-r11,LSR#5]
  485.     ORR    r9,r9,r10
  486.     LDR    r10,[r13,#(9+4)*4]
  487.     ORR    r11,r11,r9
  488.  
  489.     ADDS    r7,r7,r10
  490.     STRB    r11,[r14],#1
  491.     BGT    ptagclp_entry2
  492. ptagclp_lt0_entry2
  493.     SUBS    r4,r4,#1
  494.     BGE    ptagclp_lt0
  495.  
  496.     LDMFD    r13!,{r4-r11,PC}^
  497.     DCD    0
  498. PlotterTGcore8
  499.     ; r0 = int su
  500.     ; r1 = int sv
  501.     ; r2 = int sdu
  502.     ; r3 = int sdv
  503.     MOV    r12,r13
  504.     STMFD    r13!,{r4-r11,r14}
  505.         LDMFD    r12,{r4,r5,r7,r10,r12,r14}
  506.     ; r4 = int temp
  507.     ; r5 = int rowbytes
  508.     ; r7 = int si
  509.     ; r10= int sdi
  510.     ; r12= ptemp
  511.     ; r14= tpos
  512.     CMP    r7,#0
  513.     BLE    ptgclp_lt0
  514. ptgclp
  515.     MOV    r8,r1,ASR#16
  516.     MOV    r11,r0,ASR#16
  517.     MLA    r8,r5,r8,r11
  518.     ADD    r0,r0,r2
  519.     LDRB    r8,[r12,r8]
  520.     ADR    r9,alphatab+12*4
  521.  
  522.     LDR    r8,[r9,r8,LSL#2]    ; r8 = a = (B<<20)|(G<<10)|(R)
  523.     ADD    r1,r1,r3
  524.     AND    r11,r8,#15
  525.     MUL    r11,r7,r11
  526.     MOV    r10,#15
  527.     AND    r10,r10,r8,LSR#10
  528.     MUL    r10,r7,r10
  529.     CMP    r11,#15<<16
  530.     MOVGT    r11,#15<<16
  531.     MOV    r11,r11,LSR#16
  532.     MOV    r8,r8,LSR#20
  533.     MUL    r8,r7,r8
  534.     CMP    r10,#15<<16
  535.     MOVGT    r10,#15<<16
  536.     MOV    r10,r10,LSR#16
  537.     CMP    r8,#15<<16
  538.     MOVGT    r8,#15<<16
  539.     MOV    r8,r8,LSR#16
  540.     ORR    r11,r11,r10,LSL#10
  541.     ORR    r11,r11,r8,LSL#20
  542.  
  543.     SUB    r8,r9,#12*4-17
  544.     LDRB    r9,[r9,-r11,LSR#20]
  545.     ANDS    r10,r11,#15<<10
  546.     LDRNEB    r10,[r8,r10,LSR#10]
  547.     ANDS    r11,r11,#15
  548.     LDRNEB    r11,[r8,-r11]
  549.     ORR    r9,r9,r10
  550.     LDR    r10,[r13,#(9+3)*4]
  551.     ORR    r11,r11,r9
  552.  
  553.     ADDS    r7,r7,r10
  554.     STRB    r11,[r14],#1
  555.     BLE    ptgclp_lt0_entry2
  556. ptgclp_entry2
  557.     SUBS    r4,r4,#1
  558.     BGE    ptgclp
  559.  
  560.     LDMFD    r13!,{r4-r11,PC}^
  561. ptgclp_lt0
  562.     ADD    r1,r1,r3
  563.     ADD    r0,r0,r2
  564.     LDR    r10,[r13,#(9+3)*4]
  565.     MOV    r11,#0
  566.  
  567.     ADDS    r7,r7,r10
  568.     STRB    r11,[r14],#1
  569.     BGT    ptgclp_entry2
  570. ptgclp_lt0_entry2
  571.     SUBS    r4,r4,#1
  572.     BGE    ptgclp_lt0
  573.  
  574.     LDMFD    r13!,{r4-r11,PC}^
  575. PlotterFAGcore8
  576.     ; r0 = int temp
  577.     ; r1 = int c
  578.     ; r2 = int alpha
  579.     ; r3 = char *tpos
  580.     ; r7 = int si
  581.     ; r8 = int sdi
  582.     MOV    r12,r13
  583.     STMFD    r13!,{r4-r11,r14}
  584.            ADR    r14,alphatab+12*4
  585.     AND    r1,r1,#&ff
  586.     MOV    r2,r2,LSR#11
  587.     MOV    r9,#15
  588.     LDMFD    r12,{r7,r8}
  589.     SUB    r12,r14,#12*4-17
  590.     LDR    r1,[r14,r1,LSL#2]    ; r1 = a = (B<<20)|(G<<10)|(R)
  591.     CMP    r7,#0
  592.     BLE    pfagclp_lt0
  593. pfagclp
  594.     LDRB    r5,[r3]
  595.     AND    r11,r1,#15
  596.     LDR    r5,[r14,r5,LSL#2]    ; r10= b = (b<<20)|(g<<10)|(r)
  597.     MUL    r11,r7,r11
  598.     AND    r10,r9,r1,LSR#10
  599.     MUL    r10,r7,r10
  600.     CMP    r11,#15<<16
  601.     MOVGT    r11,#15<<16
  602.     MOV    r11,r11,LSR#16
  603.     MOV    r6,r1,LSR#20
  604.     MUL    r6,r7,r6
  605.     CMP    r10,#15<<16
  606.     MOVGT    r10,#15<<16
  607.     MOV    r10,r10,LSR#16
  608.     CMP    r6,#15<<16
  609.     MOVGT    r6,#15<<16
  610.     MOV    r6,r6,LSR#16
  611.     ORR    r11,r11,r10,LSL#10
  612.     ORR    r11,r11,r6,LSL#20
  613.  
  614.     SUB    r6,r11,r5        ; r7 = a-b
  615.     MUL    r4,r6,r2        ; r7 = (a-b)*alpha
  616.     ; Stall
  617.     ADD    r4,r4,r5,LSL#5    ; r8 = (a-b)*alpha + 32*b
  618.     LDRB    r6,[r14,-r4,LSR#25]
  619.     ANDS    r5,r4,#15<<15
  620.     LDRNEB    r5,[r12,r5,LSR#15]
  621.     ANDS    r4,r4,#15<<5
  622.     LDRNEB    r4,[r12,-r4,LSR#5]
  623.     ORR    r6,r6,r5
  624.     ORR    r4,r4,r6
  625.  
  626.     ADDS    r7,r7,r8
  627.     STRB    r4,[r3],#1
  628.     BLE    pfagclp_lt0_entry2
  629. pfagclp_entry2
  630.     SUBS    r0,r0,#1
  631.     BGE    pfagclp
  632.  
  633.     LDMFD    r13!,{r4-r11,PC}^
  634. pfagclp_lt0
  635.     LDRB    r5,[r3]
  636.     RSB    r6,r5,#0        ; r7 = a-b
  637.     MUL    r4,r6,r2        ; r7 = (a-b)*alpha
  638.     ; Stall
  639.     ADD    r4,r4,r5,LSL#5    ; r8 = (a-b)*alpha + 32*b
  640.     LDRB    r6,[r14,-r4,LSR#25]
  641.     ANDS    r5,r4,#15<<15
  642.     LDRNEB    r5,[r12,r5,LSR#15]
  643.     ANDS    r4,r4,#15<<5
  644.     LDRNEB    r4,[r12,-r4,LSR#5]
  645.     ORR    r6,r6,r5
  646.     ORR    r4,r4,r6
  647.  
  648.     ADDS    r7,r7,r8
  649.     STRB    r4,[r3],#1
  650.     BGT    pfagclp_entry2
  651. pfagclp_lt0_entry2
  652.     SUBS    r0,r0,#1
  653.     BGE    pfagclp_lt0
  654.  
  655.     LDMFD    r13!,{r4-r11,PC}^
  656. PlotterFGcore8
  657.     ; r0 = int temp
  658.     ; r1 = int c
  659.     ; r2 = char *tpos
  660.     ; r3 = int si
  661.     ; r7 = int sdi
  662.     LDR    r12,[r13]
  663.     STMFD    r13!,{r4-r11,r14}
  664.     AND    r1,r1,#&ff
  665.            ADR    r14,alphatab+12*4
  666.     SUB    r7,r14,#12*4-17
  667.     LDR    r1,[r14,r1,LSL#2]    ; r1 = a = (B<<20)|(G<<10)|(R)
  668.     MOV    r9,#15
  669.     CMP    r3,#0
  670.     BLE    pfgclp_lt0
  671. pfgclp
  672.     AND    r4,r1,#15
  673.     MUL    r4,r3,r4
  674.     AND    r5,r9,r1,LSR#10
  675.     MUL    r5,r3,r5
  676.     CMP    r4,#15<<16
  677.     MOVGT    r4,#15<<16
  678.     MOV    r4,r4,LSR#16
  679.     MOV    r6,r1,LSR#20
  680.     MUL    r6,r3,r6
  681.     CMP    r5,#15<<16
  682.     MOVGT    r5,#15<<16
  683.     MOV    r5,r5,LSR#16
  684.     CMP    r6,#15<<16
  685.     MOVGT    r6,#15<<16
  686.     MOV    r6,r6,LSR#16
  687.  
  688.     LDRB    r6,[r14,-r6]
  689.     LDRNEB    r5,[r7,r5]
  690.     LDRNEB    r4,[r7,-r4]
  691.     ORR    r6,r6,r5
  692.     ORR    r4,r4,r6
  693.  
  694.     ADDS    r3,r3,r12
  695.     STRB    r4,[r2],#1
  696.     BLE    pfgclp_lt0_entry2
  697. pfgclp_entry2
  698.     SUBS    r0,r0,#1
  699.     BGE    pfgclp
  700.  
  701.     LDMFD    r13!,{r4-r11,PC}^
  702. pfgclp_lt0
  703.     MOV    r4,#0
  704.  
  705.     ADDS    r3,r3,r12
  706.     STRB    r4,[r2],#1
  707.     BGT    pfgclp_entry2
  708. pfgclp_lt0_entry2
  709.     SUBS    r0,r0,#1
  710.     BGE    pfgclp_lt0
  711.  
  712.     LDMFD    r13!,{r4-r11,PC}^
  713. PlotterTTcore8
  714.     ; r0 = int su
  715.     ; r1 = int sv
  716.     ; r2 = int sdu
  717.     ; r3 = int sdv
  718.     MOV    r12,r13
  719.     STMFD    r13!,{r4-r7,r14}
  720.         LDMFD    r12,{r4,r5,r12,r14}
  721.     ; r4 = int temp
  722.     ; r5 = int rowbytes
  723.     ; r12= ptemp
  724.     ; r14= tpos
  725. pttclp
  726.     MOV    r6,r1,ASR#16
  727.     MOV    r7,r0,ASR#16
  728.     MLA    r6,r5,r6,r7
  729.     ADD    r0,r0,r2
  730.     LDRB    r6,[r12,r6]
  731.     ADD    r1,r1,r3
  732.     CMP    r6,#0
  733.     STRNEB    r6,[r14]
  734.     ADD    r14,r14,#1
  735.     SUBS    r4,r4,#1
  736.     BGE    pttclp
  737.  
  738.     LDMFD    r13!,{r4-r7,PC}^
  739.     DCD    0
  740.     DCD    0
  741. PlotterTTAcore8
  742.     ; r0 = int su
  743.     ; r1 = int sv
  744.     ; r2 = int sdu
  745.     ; r3 = int sdv
  746.     MOV    r12,r13
  747.     STMFD    r13!,{r4-r11,r14}
  748.         LDMFD    r12,{r4,r5,r6,r12,r14}
  749.     ; r4 = int temp
  750.     ; r5 = int rowbytes
  751.     ; r6 = int alpha
  752.     ; r12= ptemp
  753.     ; r14= tpos
  754.     MOV    r6,r6,LSR#11
  755.     ADR    r9,alphatab+12*4
  756. pttaclp
  757.     MOV    r8,r1,ASR#16
  758.     MOV    r7,r0,ASR#16
  759.     MLA    r8,r5,r8,r7
  760.     ADD    r0,r0,r2
  761.     LDRB    r8,[r12,r8]
  762.     LDRB    r10,[r14]
  763.     CMP    r8,#0
  764.     BEQ    pttaclp_nope
  765.  
  766.     LDR    r8,[r9,r8,LSL#2]    ; r8 = a = (B<<20)|(G<<10)|(R)
  767.     LDR    r10,[r9,r10,LSL#2]    ; r10= b = (b<<20)|(g<<10)|(r)
  768.     ADD    r1,r1,r3
  769.     SUB    r8,r8,r10        ; r8 = a-b
  770.     MUL    r11,r8,r6        ; r8 = (a-b)*alpha
  771.     SUB    r8,r9,#12*4-17
  772.     ADD    r11,r11,r10,LSL#5    ; r8 = (a-b)*alpha + 32*b
  773.     LDRB    r7,[r9,-r11,LSR#25]
  774.     ANDS    r10,r11,#15<<15
  775.     LDRNEB    r10,[r8,r10,LSR#15]
  776.     ANDS    r11,r11,#15<<5
  777.     LDRNEB    r11,[r8,-r11,LSR#5]
  778.     ORR    r7,r7,r10
  779.     ORR    r11,r11,r7
  780.  
  781.     STRB    r11,[r14],#1
  782.     SUBS    r4,r4,#1
  783.     BGE    pttaclp
  784.  
  785.     LDMFD    r13!,{r4-r11,PC}^
  786. pttaclp_nope
  787.     ADD    r1,r1,r3
  788.     ADD    r14,r14,#1
  789.     SUBS    r4,r4,#1
  790.     BGE    pttaclp
  791.  
  792.     LDMFD    r13!,{r4-r11,PC}^
  793.     DCD    0
  794.     DCD    0
  795.     DCD    0
  796. PlotterTTAGcore8
  797.     ; r0 = int su
  798.     ; r1 = int sv
  799.     ; r2 = int sdu
  800.     ; r3 = int sdv
  801.     MOV    r12,r13
  802.     STMFD    r13!,{r4-r11,r14}
  803.         LDMFD    r12,{r4,r5,r6,r7,r10,r12,r14}
  804.     ; r4 = int temp
  805.     ; r5 = int rowbytes
  806.     ; r6 = int alpha
  807.     ; r7 = int si
  808.     ; r10= int sdi
  809.     ; r12= ptemp
  810.     ; r14= tpos
  811.     MOV    r6,r6,LSR#11
  812.     CMP    r7,#0
  813.     BLE    pttagclp_lt0
  814. pttagclp
  815.     MOV    r8,r1,ASR#16
  816.     MOV    r11,r0,ASR#16
  817.     MLA    r8,r5,r8,r11
  818.     ADR    r9,alphatab+12*4
  819.     LDRB    r8,[r12,r8]
  820.     ADD    r0,r0,r2
  821.  
  822.     CMP    r8,#0
  823.     BEQ    pttagc_nope
  824.     LDR    r8,[r9,r8,LSL#2]    ; r8 = a = (B<<20)|(G<<10)|(R)
  825.     ADD    r1,r1,r3
  826.     AND    r11,r8,#15
  827.     MUL    r11,r7,r11
  828.     AND    r10,r8,#15<<10
  829.     MUL    r10,r7,r10
  830.     CMP    r11,#15<<16
  831.     MOVGT    r11,#15<<16
  832.     MOV    r11,r11,LSR#16
  833.     MOV    r8,r8,LSR#20
  834.     MUL    r8,r7,r8
  835.     CMP    r10,#15<<26
  836.     MOVGT    r10,#15<<26
  837.     MOV    r10,r10,LSR#26
  838.     CMP    r8,#15<<16
  839.     MOVGT    r8,#15<<16
  840.     MOV    r8,r8,LSR#16
  841.     ORR    r11,r11,r10,LSL#10
  842.     LDRB    r10,[r14]
  843.     ORR    r8,r11,r8,LSL#20
  844.  
  845.     LDR    r10,[r9,r10,LSL#2]    ; r10= b = (b<<20)|(g<<10)|(r)
  846.     ; Stall
  847.     SUB    r8,r8,r10        ; r8 = a-b
  848.     MUL    r11,r8,r6        ; r8 = (a-b)*alpha
  849.     SUB    r8,r9,#12*4-17
  850.     ADD    r11,r11,r10,LSL#5    ; r8 = (a-b)*alpha + 32*b
  851.     LDRB    r9,[r9,-r11,LSR#25]
  852.     ANDS    r10,r11,#15<<15
  853.     LDRNEB    r10,[r8,r10,LSR#15]
  854.     ANDS    r11,r11,#15<<5
  855.     LDRNEB    r11,[r8,-r11,LSR#5]
  856.     ORR    r9,r9,r10
  857.     LDR    r10,[r13,#(9+4)*4]
  858.     ORR    r11,r11,r9
  859.  
  860.     ADDS    r7,r7,r10
  861.     STRB    r11,[r14],#1
  862.     BLT    pttagclp_lt0_entry2
  863. pttagclp_entry2
  864.     SUBS    r4,r4,#1
  865.     BGE    pttagclp
  866.  
  867.     LDMFD    r13!,{r4-r11,PC}^
  868. pttagc_nope
  869.     ADDS    r7,r7,r10
  870.     ADD    r14,r14,#1
  871.     ADD    r1,r1,r3
  872.     BLT    pttagclp_lt0_entry2
  873.     SUBS    r4,r4,#1
  874.     BGE    pttagclp
  875.  
  876.     LDMFD    r13!,{r4-r11,PC}^
  877.     DCD    0
  878. pttagclp_lt0
  879.     MOV    r8,r1,ASR#16
  880.     MOV    r11,r0,ASR#16
  881.     MLA    r8,r5,r8,r11
  882.     LDRB    r8,[r12,r8]
  883.     ADD    r0,r0,r2
  884.     CMP    r8,#0
  885.     BEQ    pttagc_nope2
  886.  
  887.     LDRB    r10,[r14]
  888.     ADR    r9,alphatab+12*4
  889.  
  890.     LDR    r10,[r9,r10,LSL#2]    ; r10= b = (b<<20)|(g<<10)|(r)
  891.     ADD    r1,r1,r3
  892.     RSB    r8,r10,#0        ; r8 = a-b
  893.     MUL    r11,r8,r6        ; r8 = (a-b)*alpha
  894.     SUB    r8,r9,#12*4-17
  895.     ADD    r11,r11,r10,LSL#5    ; r8 = (a-b)*alpha + 32*b
  896.     LDRB    r9,[r9,-r11,LSR#25]
  897.     ANDS    r10,r11,#15<<15
  898.     LDRNEB    r10,[r8,r10,LSR#15]
  899.     ANDS    r11,r11,#15<<5
  900.     LDRNEB    r11,[r8,-r11,LSR#5]
  901.     ORR    r9,r9,r10
  902.     LDR    r10,[r13,#(9+4)*4]
  903.     ORR    r11,r11,r9
  904.  
  905.     ADDS    r7,r7,r10
  906.     STRB    r11,[r14],#1
  907.     BGT    pttagclp_entry2
  908. pttagclp_lt0_entry2
  909.     SUBS    r4,r4,#1
  910.     BGE    pttagclp_lt0
  911.  
  912.     LDMFD    r13!,{r4-r11,PC}^
  913. pttagc_nope2
  914.     ADD    r1,r1,r3
  915.     ADDS    r7,r7,r10
  916.     ADD    r14,r14,#1
  917.     BGT    pttagclp_entry2
  918.     SUBS    r4,r4,#1
  919.     BGE    pttagclp_lt0
  920.  
  921.     LDMFD    r13!,{r4-r11,PC}^
  922.     DCD    0
  923.     DCD    0
  924.     DCD    0
  925. PlotterTTGcore8
  926.     ; r0 = int su
  927.     ; r1 = int sv
  928.     ; r2 = int sdu
  929.     ; r3 = int sdv
  930.     MOV    r12,r13
  931.     STMFD    r13!,{r4-r11,r14}
  932.         LDMFD    r12,{r4,r5,r7,r10,r12,r14}
  933.     ; r4 = int temp
  934.     ; r5 = int rowbytes
  935.     ; r7 = int si
  936.     ; r10= int sdi
  937.     ; r12= ptemp
  938.     ; r14= tpos
  939.     CMP    r7,#0
  940.     BLE    pttgclp_lt0
  941. pttgclp
  942.     MOV    r8,r1,ASR#16
  943.     MOV    r11,r0,ASR#16
  944.     MLA    r8,r5,r8,r11
  945.     ADD    r0,r0,r2
  946.     LDRB    r8,[r12,r8]
  947.     ADD    r1,r1,r3
  948.     CMP    r8,#0
  949.     BEQ    pttgc_nope
  950.  
  951.     ADR    r9,alphatab+12*4
  952.     LDR    r8,[r9,r8,LSL#2]    ; r8 = a = (B<<20)|(G<<10)|(R)
  953.     MOV    r10,#15
  954.     AND    r11,r8,#15
  955.     MUL    r11,r7,r11
  956.     AND    r10,r10,r8,LSR#10
  957.     MUL    r10,r7,r10
  958.     CMP    r11,#15<<16
  959.     MOVGT    r11,#15<<16
  960.     MOV    r11,r11,LSR#16
  961.     MOV    r8,r8,LSR#20
  962.     MUL    r8,r7,r8
  963.     CMP    r10,#15<<16
  964.     MOVGT    r10,#15<<16
  965.     MOV    r10,r10,LSR#16
  966.     CMP    r8,#15<<16
  967.     MOVGT    r8,#15<<16
  968.     MOV    r8,r8,LSR#16
  969.     ORR    r11,r11,r10,LSL#10
  970.     ORR    r11,r11,r8,LSL#20
  971.  
  972.     SUB    r8,r9,#12*4-17
  973.     LDRB    r9,[r9,-r11,LSR#20]
  974.     ANDS    r10,r11,#15<<10
  975.     LDRNEB    r10,[r8,r10,LSR#10]
  976.     ANDS    r11,r11,#15
  977.     LDRNEB    r11,[r8,-r11]
  978.     ORR    r9,r9,r10
  979.     LDR    r10,[r13,#(9+3)*4]
  980.     ORR    r11,r11,r9
  981.  
  982.     STRB    r11,[r14]
  983. pttgc_nope
  984.     ADD    r14,r14,#1
  985.     ADDS    r7,r7,r10
  986.     BLE    pttgclp_lt0_entry2
  987. pttgclp_entry2
  988.     SUBS    r4,r4,#1
  989.     BGE    pttgclp
  990.  
  991.     LDMFD    r13!,{r4-r11,PC}^
  992. pttgclp_lt0
  993.     MOV    r8,r1,ASR#16
  994.     MOV    r11,r0,ASR#16
  995.     MLA    r8,r5,r8,r11
  996.     ADD    r0,r0,r2
  997.     LDRB    r8,[r12,r8]
  998.     ADD    r1,r1,r3
  999.     CMP    r8,#0
  1000.     LDRNE    r10,[r13,#(9+3)*4]
  1001.     MOVNE    r11,#0
  1002.  
  1003.     STRNEB    r11,[r14]
  1004.     ADD    r14,r14,#1
  1005.     ADDS    r7,r7,r10
  1006.     BGT    pttgclp_entry2
  1007. pttgclp_lt0_entry2
  1008.     SUBS    r4,r4,#1
  1009.     BGE    pttgclp_lt0
  1010.  
  1011.     LDMFD    r13!,{r4-r11,PC}^
  1012.  
  1013.         END
  1014.