home *** CD-ROM | disk | FTP | other *** search
/ Dream 55 / Amiga_Dream_55.iso / RISCOS / MAGAZINE / NEWS / 3DENGI.ZIP / 3DEngine / !PlotLib / src / s / plotter16 next >
Text File  |  1998-08-11  |  15KB  |  891 lines

  1.         AREA |C$$code|, CODE, READONLY
  2.  
  3.     EXPORT    PlotterFcore16
  4.     EXPORT    PlotterFGcore16
  5.     EXPORT    PlotterFAcore16
  6.     EXPORT    PlotterFAGcore16
  7.     EXPORT    PlotterTcore16
  8.     EXPORT    PlotterTGcore16
  9.     EXPORT    PlotterTAcore16
  10.     EXPORT    PlotterTAGcore16
  11.     EXPORT    PlotterTTcore16
  12.     EXPORT    PlotterTTGcore16
  13.     EXPORT    PlotterTTAcore16
  14.     EXPORT    PlotterTTAGcore16
  15.     ;EXPORT    Screen_Clear
  16.  
  17. PlotterFcore16
  18.     ; r0 = int temp
  19.     ; r1 = int c
  20.     ; r2 = short *tpos
  21.     MOV    r3,r1,ASR#8
  22. pfclp
  23.     STRB    r1,[r2],#1
  24.     STRB    r3,[r2],#1
  25.     SUBS    r0,r0,#1
  26.     BGE    pfclp
  27.  
  28.     MOVS    PC,R14
  29. PlotterTcore16
  30.     ; r0 = int su
  31.     ; r1 = int sv
  32.     ; r2 = int sdu
  33.     ; r3 = int sdv
  34.     MOV    r12,r13
  35.     STMFD    r13!,{r4-r8,r14}
  36.         LDMFD    r12,{r4,r5,r12,r14}
  37.     ; r4 = int temp
  38.     ; r5 = int rowbytes
  39.     ; r12= ptemp
  40.     ; r14= tpos
  41.     TST    r14,#3
  42.     BEQ    ptcmainlp
  43.  
  44.     MOV    r6,r1,ASR#16
  45.     MOV    r7,r0,ASR#16
  46.     MLA    r6,r5,r6,r7
  47.     ADD    r0,r0,r2
  48.     LDR    r6,[r12,r6,LSL#1]
  49.     ADD    r1,r1,r3
  50.     STRB    r6,[r14],#1
  51.     MOV    r6,r6,LSR#8
  52.     STRB    r6,[r14],#1
  53.     SUBS    r4,r4,#1
  54.     LDMLTFD    r13!,{r4-r8,PC}^
  55. ptcmainlp
  56.     CMP    r4,#0
  57.     BEQ    ptcsingleton
  58. ptclp
  59.     MOV    r6,r1,ASR#16
  60.     MOV    r7,r0,ASR#16
  61.     MLA    r6,r5,r6,r7
  62.     ADD    r0,r0,r2
  63.     LDR    r6,[r12,r6,LSL#1]
  64.     ADD    r1,r1,r3
  65.     MOV    r8,r1,ASR#16
  66.     MOV    r7,r0,ASR#16
  67.     MLA    r8,r5,r8,r7
  68.     ADD    r0,r0,r2
  69.     LDR    r8,[r12,r8,LSL#1]
  70.     ADD    r1,r1,r3
  71.     MOV    r6,r6,LSL#16
  72.     MOV    r8,r8,LSL#16
  73.     ORR    r8,r8,r6,LSR#16
  74.     STR    r8,[r14],#4
  75.     SUBS    r4,r4,#2
  76.     BGT    ptclp
  77.  
  78.     LDMLTFD    r13!,{r4-r8,PC}^
  79. ptcsingleton
  80.     MOV    r6,r1,ASR#16
  81.     MOV    r7,r0,ASR#16
  82.     MLA    r6,r5,r6,r7
  83.     LDR    r6,[r12,r6,LSL#1]
  84.     STRB    r6,[r14],#1
  85.     MOV    r6,r6,LSR#8
  86.     STRB    r6,[r14],#1
  87.  
  88.     LDMFD    r13!,{r4-r8,PC}^
  89. PlotterFAcore16
  90.     ; r0 = int temp
  91.     ; r1 = int c
  92.     ; r2 = int alpha
  93.     ; r3 = int *tpos
  94.     STMFD    r13!,{r4-r8,r14}
  95.     MVN    r12,#31
  96.     BIC    r12,r12,#31<<10
  97.     MOV    r2,r2,LSR#11
  98.     AND    r7,r1,#31<<5
  99.     BIC    r1,r1,r12
  100.     ORR    r1,r1,r7,LSL#15
  101.  
  102.     TST    r3,#3
  103.     BEQ    pfacmainlp
  104. pfaclp
  105.     LDR    r14,[r3]
  106.     ; Stall
  107.     AND    r7,r14,#31<<5
  108.     BIC    r14,r14,r12
  109.     ORR    r14,r14,r7,LSL#15
  110.     SUB    r6,r1,r14
  111.     MUL    r6,r2,r6
  112.     ; Stall
  113.     ADD    r6,r6,r14,LSL#5
  114.     AND    r7,r6,#31<<25
  115.     BIC    r6,r6,r12,LSL#5
  116.     ORR    r6,r6,r7,LSR#15
  117.     MOV    r6,r6,LSR#5
  118.  
  119.     STRB    r6,[r3],#1
  120.     MOV    r6,r6,ASR#8
  121.     STRB    r6,[r3],#1
  122.     SUBS    r0,r0,#1
  123.     LDMLTFD    r13!,{r4-r8,PC}^
  124. pfacmainlp
  125.     CMP    r0,#0
  126.     BEQ    pfacsingleton
  127. pfaclp2
  128.     LDR    r8,[r3]
  129.     ; Stall
  130.     AND    r7,r8,#31<<5
  131.     BIC    r14,r8,r12
  132.     ORR    r14,r14,r7,LSL#15
  133.     SUB    r6,r1,r14
  134.     MUL    r6,r2,r6
  135.     ; Stall
  136.     ADD    r6,r6,r14,LSL#5
  137.     AND    r7,r6,#31<<25
  138.     BIC    r6,r6,r12,LSL#5
  139.     ORR    r6,r6,r7,LSR#15
  140.     MOV    r6,r6,LSR#5
  141.  
  142.     MOV    r8,r8,LSR#16
  143.     AND    r7,r8,#31<<5
  144.     BIC    r8,r8,r12
  145.     ORR    r8,r8,r7,LSL#15
  146.     SUB    r14,r1,r8
  147.     MUL    r14,r2,r14
  148.     ; Stall
  149.     ADD    r14,r14,r8,LSL#5
  150.     AND    r7,r14,#31<<25
  151.     BIC    r14,r14,r12,LSL#5
  152.     ORR    r14,r14,r7,LSR#15
  153.     MOV    r14,r14,LSR#5
  154.     ORR    r6,r6,r14,LSL#16
  155.  
  156.     STR    r6,[r3],#4
  157.     SUBS    r0,r0,#2
  158.     BGT    pfaclp2
  159. pfacsingleton
  160.     LDR    r14,[r3]
  161.     AND    r7,r14,#31<<5
  162.     BIC    r14,r14,r12
  163.     ORR    r14,r14,r7,LSL#15
  164.     SUB    r6,r1,r14
  165.     MUL    r6,r2,r6
  166.     ; Stall
  167.     ADD    r6,r6,r14,LSL#5
  168.     AND    r7,r6,#31<<25
  169.     BIC    r6,r6,r12,LSL#5
  170.     ORR    r6,r6,r7,LSR#15
  171.     MOV    r6,r6,LSR#5
  172.  
  173.     STRB    r6,[r3],#1
  174.     MOV    r6,r6,ASR#8
  175.     STRB    r6,[r3],#1
  176.  
  177.     LDMFD    r13!,{r4-r8,PC}^
  178. PlotterTAcore16
  179.     ; r0 = int su
  180.     ; r1 = int sv
  181.     ; r2 = int sdu
  182.     ; r3 = int sdv
  183.     MOV    r12,r13
  184.     STMFD    r13!,{r4-r11,r14}
  185.         LDMFD    r12,{r4,r5,r6,r12,r14}
  186.     ; r4 = int temp
  187.     ; r5 = int rowbytes
  188.     ; r6 = int alpha
  189.     ; r12= ptemp
  190.     ; r14= tpos
  191.     MVN    r9,#31
  192.     BIC    r9,r9,#31<<10
  193.     MOV    r6,r6,LSR#11
  194.  
  195.     TST    r14,#3
  196.     BEQ    ptacmainlp
  197.  
  198.     MOV    r8,r1,ASR#16
  199.     MOV    r7,r0,ASR#16
  200.     MLA    r8,r5,r8,r7
  201.     ADD    r0,r0,r2
  202.     LDR    r8,[r12,r8,LSL#1]
  203.     LDR    r10,[r14]
  204.     AND    r7,r8,#31<<5
  205.     BIC    r8,r8,r9
  206.     ORR    r8,r8,r7,LSL#15
  207.     AND    r7,r10,#31<<5
  208.     BIC    r10,r10,r9
  209.     ORR    r10,r10,r7,LSL#15
  210.     SUB    r8,r8,r10
  211.     MUL    r8,r6,r8
  212.     ADD    r1,r1,r3
  213.     ADD    r8,r8,r10,LSL#5
  214.     AND    r7,r8,#31<<25
  215.     BIC    r8,r8,r9,LSL#5
  216.     ORR    r8,r8,r7,LSR#15
  217.     MOV    r8,r8,LSR#5
  218.  
  219.     STRB    r8,[r14],#1
  220.     MOV    r8,r8,ASR#8
  221.     STRB    r8,[r14],#1
  222.     SUBS    r4,r4,#1
  223.     LDMLTFD    r13!,{r4-r11,PC}^
  224. ptacmainlp
  225.     CMP    r4,#0
  226.     BEQ    ptac_single
  227. ptaclp
  228.     MOV    r8,r1,ASR#16
  229.     MOV    r7,r0,ASR#16
  230.     MLA    r8,r5,r8,r7
  231.     ADD    r0,r0,r2
  232.     LDR    r8,[r12,r8,LSL#1]
  233.     LDR    r10,[r14]
  234.     AND    r7,r8,#31<<5
  235.     BIC    r8,r8,r9
  236.     ORR    r8,r8,r7,LSL#15
  237.     AND    r7,r10,#31<<5
  238.     BIC    r11,r10,r9
  239.     ORR    r11,r11,r7,LSL#15
  240.     SUB    r8,r8,r11
  241.     MUL    r8,r6,r8
  242.     ADD    r1,r1,r3
  243.     ADD    r8,r8,r11,LSL#5
  244.     AND    r7,r8,#31<<25
  245.     BIC    r8,r8,r9,LSL#5
  246.     ORR    r8,r8,r7,LSR#15
  247.     MOV    r8,r8,LSR#5
  248.  
  249.     MOV    r11,r1,ASR#16
  250.     MOV    r7,r0,ASR#16
  251.     MLA    r11,r5,r11,r7
  252.     ADD    r0,r0,r2
  253.     LDR    r11,[r12,r11,LSL#1]
  254.     MOV    r10,r10,LSR#16
  255.     AND    r7,r11,#31<<5
  256.     BIC    r11,r11,r9
  257.     ORR    r11,r11,r7,LSL#15
  258.     AND    r7,r10,#31<<5
  259.     BIC    r10,r10,r9
  260.     ORR    r10,r10,r7,LSL#15
  261.     SUB    r11,r11,r10
  262.     MUL    r11,r6,r11
  263.     ADD    r1,r1,r3
  264.     ADD    r11,r11,r10,LSL#5
  265.     AND    r7,r11,#31<<25
  266.     BIC    r11,r11,r9,LSL#5
  267.     ORR    r11,r11,r7,LSR#15
  268.     MOV    r11,r11,LSR#5
  269.     ORR    r11,r8,r11,LSL#16
  270.  
  271.     STR    r11,[r14],#4
  272.     SUBS    r4,r4,#2
  273.     BGT    ptaclp
  274.     LDMLTFD    r13!,{r4-r11,PC}^
  275. ptac_single
  276.     MOV    r8,r1,ASR#16
  277.     MOV    r7,r0,ASR#16
  278.     MLA    r8,r5,r8,r7
  279.     LDR    r8,[r12,r8,LSL#1]
  280.     LDR    r10,[r14]
  281.     AND    r7,r8,#31<<5
  282.     BIC    r8,r8,r9
  283.     ORR    r8,r8,r7,LSL#15
  284.     AND    r7,r10,#31<<5
  285.     BIC    r10,r10,r9
  286.     ORR    r10,r10,r7,LSL#15
  287.     SUB    r8,r8,r10
  288.     MUL    r8,r6,r8
  289.     ADD    r8,r8,r10,LSL#5
  290.     AND    r7,r8,#31<<25
  291.     BIC    r8,r8,r9,LSL#5
  292.     ORR    r8,r8,r7,LSR#15
  293.     MOV    r8,r8,LSR#5
  294.  
  295.     STRB    r8,[r14],#1
  296.     MOV    r8,r8,ASR#8
  297.     STRB    r8,[r14],#1
  298.  
  299.     LDMFD    r13!,{r4-r11,PC}^
  300.  
  301. PlotterTAGcore16
  302.     ; r0 = int su
  303.     ; r1 = int sv
  304.     ; r2 = int sdu
  305.     ; r3 = int sdv
  306.     MOV    r12,r13
  307.     STMFD    r13!,{r4-r11,r14}
  308.         LDMFD    r12,{r4,r5,r6,r7,r10,r12,r14}
  309.     ; r4 = int temp
  310.     ; r5 = int rowbytes
  311.     ; r6 = int alpha
  312.     ; r7 = int si
  313.     ; r10= int sdi
  314.     ; r12= ptemp
  315.     ; r14= tpos
  316.     MOV    r6,r6,LSR#11
  317.     CMP    r7,#0
  318.     BLE    ptagc_lp_lt0
  319. ptagc_lp
  320.     MOV    r8,r1,ASR#16
  321.     MOV    r11,r0,ASR#16
  322.     MLA    r8,r5,r8,r11
  323.     ADD    r0,r0,r2
  324.     LDR    r8,[r12,r8,LSL#1]
  325.  
  326.     MOV    r9,#31
  327.     AND    r10,r8,#31
  328.     MUL    r10,r7,r10
  329.     AND    r11,r9,r8,LSR#5
  330.     MUL    r11,r7,r11
  331.     CMP    r10,#31<<16
  332.     MOVGT    r10,#31<<16
  333.     AND    r10,r9,r10,LSR#16
  334.     AND    r8,r9,r8,LSR#10
  335.     MUL    r8,r7,r8
  336.     CMP    r11,#31<<16
  337.     MOVGT    r11,#31<<16
  338.     AND    r11,r9,r11,LSR#16
  339.     CMP    r8,#31<<16
  340.     MOVGT    r8,#31<<16
  341.     AND    r8,r9,r8,LSR#16
  342.     ORR    r10,r10,r11,LSL#5
  343.     ORR    r8,r10,r8,LSL#10
  344.  
  345.     MVN    r9,#31
  346.     BIC    r9,r9,#31<<10
  347.     LDR    r10,[r14]
  348.     AND    r11,r8,#31<<5
  349.     BIC    r8,r8,r9
  350.     ORR    r8,r8,r11,LSL#15
  351.     AND    r11,r10,#31<<5
  352.     BIC    r10,r10,r9
  353.     ORR    r10,r10,r11,LSL#15
  354.     SUB    r8,r8,r10
  355.     MUL    r8,r6,r8
  356.     ADD    r1,r1,r3
  357.     ADD    r8,r8,r10,LSL#5
  358.     AND    r11,r8,#31<<25
  359.     BIC    r8,r8,r9,LSL#5
  360.     ORR    r8,r8,r11,LSR#15
  361.     LDR    r10,[r13,#(9+4)*4]
  362.     MOV    r8,r8,LSR#5
  363.  
  364.     ADDS    r7,r7,r10
  365.     STRB    r8,[r14],#1
  366.     MOV    r8,r8,ASR#8
  367.     STRB    r8,[r14],#1
  368.     BLT    ptagc_lp_lt0_entry2
  369. ptagc_lp_entry2
  370.     SUBS    r4,r4,#1
  371.     BGE    ptagc_lp
  372.  
  373.     LDMFD    r13!,{r4-r11,PC}^
  374.  
  375. ptagc_lp_lt0
  376.     ADD    r0,r0,r2
  377.  
  378.     MVN    r9,#31
  379.     BIC    r9,r9,#31<<10
  380.     LDR    r10,[r14]
  381.     AND    r11,r10,#31<<5
  382.     BIC    r10,r10,r9
  383.     ORR    r10,r10,r11,LSL#15
  384.     RSB    r8,r10,#0
  385.     MUL    r8,r6,r8
  386.     ADD    r1,r1,r3
  387.     ADD    r8,r8,r10,LSL#5
  388.     AND    r11,r8,#31<<25
  389.     BIC    r8,r8,r9,LSL#5
  390.     ORR    r8,r8,r11,LSR#15
  391.     LDR    r10,[r13,#(9+4)*4]
  392.     MOV    r8,r8,LSR#5
  393.  
  394.     ADDS    r7,r7,r10
  395.     STRB    r8,[r14],#1
  396.     MOV    r8,r8,ASR#8
  397.     STRB    r8,[r14],#1
  398.     BGT    ptagc_lp_entry2
  399. ptagc_lp_lt0_entry2
  400.     SUBS    r4,r4,#1
  401.     BGE    ptagc_lp_lt0
  402.  
  403.     LDMFD    r13!,{r4-r11,PC}^
  404. PlotterTGcore16
  405.     ; r0 = int su
  406.     ; r1 = int sv
  407.     ; r2 = int sdu
  408.     ; r3 = int sdv
  409.     MOV    r12,r13
  410.     STMFD    r13!,{r4-r11,r14}
  411.         LDMFD    r12,{r4,r5,r7,r10,r12,r14}
  412.     ; r4 = int temp
  413.     ; r5 = int rowbytes
  414.     ; r7 = int si
  415.     ; r10= int sdi
  416.     ; r12= ptemp
  417.     ; r14= tpos
  418.     CMP    r7,#0
  419.     BLE    ptgc_lp_lt0
  420. ptgc_lp
  421.     MOV    r8,r1,ASR#16
  422.     MOV    r11,r0,ASR#16
  423.     MLA    r8,r5,r8,r11
  424.     ADD    r0,r0,r2
  425.     LDR    r8,[r12,r8,LSL#1]
  426.  
  427.     MOV    r9,#31
  428.     AND    r6,r8,#31
  429.     MUL    r6,r7,r6
  430.     AND    r11,r9,r8,LSR#5
  431.     MUL    r11,r7,r11
  432.     CMP    r6,#31<<16
  433.     MOVGT    r6,#31<<16
  434.     AND    r6,r9,r6,LSR#16
  435.     AND    r8,r9,r8,LSR#10
  436.     MUL    r8,r7,r8
  437.     CMP    r11,#31<<16
  438.     MOVGT    r11,#31<<16
  439.     AND    r11,r9,r11,LSR#16
  440.     CMP    r8,#31<<16
  441.     MOVGT    r8,#31<<16
  442.     AND    r8,r9,r8,LSR#16
  443.     ORR    r6,r6,r11,LSL#5
  444.     ORR    r8,r6,r8,LSL#10
  445.  
  446.     ADD    r1,r1,r3
  447.  
  448.     ADDS    r7,r7,r10
  449.     STRB    r8,[r14],#1
  450.     MOV    r8,r8,ASR#8
  451.     STRB    r8,[r14],#1
  452.     BLE    ptgc_lp_lt0_entry2
  453. ptgc_lp_entry2
  454.     SUBS    r4,r4,#1
  455.     BGE    ptgc_lp
  456.  
  457.     LDMFD    r13!,{r4-r11,PC}^
  458.  
  459. ptgc_lp_lt0
  460.     ADD    r0,r0,r2
  461.  
  462.     MOV    r8,#0
  463.     ADD    r1,r1,r3
  464.     ADDS    r7,r7,r10
  465.     STRB    r8,[r14],#1
  466.     MOV    r8,r8,ASR#8
  467.     STRB    r8,[r14],#1
  468.     BGT    ptgc_lp_entry2
  469. ptgc_lp_lt0_entry2
  470.     SUBS    r4,r4,#1
  471.     BGE    ptgc_lp_lt0
  472.  
  473.     LDMFD    r13!,{r4-r11,PC}^
  474. PlotterFAGcore16
  475.     ; r0 = int temp
  476.     ; r1 = int c
  477.     ; r2 = int alpha
  478.     ; r3 = int *tpos
  479.     ; r9 = int si
  480.     ; r10=int sdi
  481.     MOV    r12,r13
  482.     STMFD    r13!,{r5-r11,r14}
  483.     LDMFD    r12,{r9,r10}
  484.     MVN    r12,#31
  485.     BIC    r12,r12,#31<<10
  486.     MOV    r2,r2,LSR#11
  487.     AND    r7,r1,#31<<5
  488.     BIC    r1,r1,r12
  489.     ORR    r1,r1,r7,LSL#15
  490.     MOV    r5,#31
  491.     CMP    r9,#0
  492.     BLE    pfagclp_lt0
  493. pfagclp
  494.     LDR    r14,[r3]
  495.     AND    r6,r1,#31
  496.     MUL    r6,r9,r6
  497.     AND    r11,r5,r1,LSR#20
  498.     MUL    r11,r9,r11
  499.     CMP    r6,#31<<16
  500.     MOVGT    r6,#31<<16
  501.     AND    r6,r5,r6,LSR#16
  502.     AND    r8,r5,r1,LSR#10
  503.     MUL    r8,r9,r8
  504.     CMP    r11,#31<<16
  505.     MOVGT    r11,#31<<16
  506.     AND    r11,r5,r11,LSR#16
  507.     CMP    r8,#31<<16
  508.     MOVGT    r8,#31<<16
  509.     AND    r8,r5,r8,LSR#16
  510.     ORR    r6,r6,r8,LSL#10
  511.     ORR    r8,r6,r11,LSL#20
  512.  
  513.     AND    r7,r14,#31<<5
  514.     BIC    r14,r14,r12
  515.     ORR    r14,r14,r7,LSL#15
  516.     SUB    r6,r8,r14
  517.     MUL    r6,r2,r6
  518.     ; Stall
  519.     ADD    r6,r6,r14,LSL#5
  520.     AND    r7,r6,#31<<25
  521.     BIC    r6,r6,r12,LSL#5
  522.     ORR    r6,r6,r7,LSR#15
  523.     MOV    r6,r6,LSR#5
  524.  
  525.     STRB    r6,[r3],#1
  526.     MOV    r6,r6,ASR#8
  527.     STRB    r6,[r3],#1
  528.     ADDS    r9,r9,r10
  529.     BLE    pfagclp_lt0_entry2
  530. pfagclp_entry2
  531.     SUBS    r0,r0,#1
  532.     BGE    pfagclp
  533.  
  534.     LDMFD    r13!,{r5-r11,PC}^
  535. pfagclp_lt0
  536.     LDR    r14,[r3]
  537.  
  538.     AND    r7,r14,#31<<5
  539.     BIC    r14,r14,r12
  540.     ORR    r14,r14,r7,LSL#15
  541.     RSB    r6,r14,#0
  542.     MUL    r6,r2,r6
  543.     ; Stall
  544.     ADD    r6,r6,r14,LSL#5
  545.     AND    r7,r6,#31<<25
  546.     BIC    r6,r6,r12,LSL#5
  547.     ORR    r6,r6,r7,LSR#15
  548.     MOV    r6,r6,LSR#5
  549.  
  550.     STRB    r6,[r3],#1
  551.     MOV    r6,r6,ASR#8
  552.     STRB    r6,[r3],#1
  553.     ADDS    r9,r9,r10
  554.     BGT    pfagclp_entry2
  555. pfagclp_lt0_entry2
  556.     SUBS    r0,r0,#1
  557.     BGE    pfagclp_lt0
  558.  
  559.     LDMFD    r13!,{r5-r11,PC}^
  560. PlotterFGcore16
  561.     ; r0 = int temp
  562.     ; r1 = int c
  563.     ; r2 = short *tpos
  564.     ; r3 = int si
  565.     ; r12= int sdi
  566.     LDR    r12,[r13]
  567.     STMFD    r13!,{r4-r6,r8,r11,r14}
  568.     MOV    r5,#31
  569.     MOV    r4,#0
  570.     CMP    r3,#0
  571.     BLE    pfgclp_lt0
  572. pfgclp
  573.     AND    r6,r1,#31
  574.     MUL    r6,r3,r6
  575.     AND    r11,r5,r1,LSR#5
  576.     MUL    r11,r3,r11
  577.     CMP    r6,#31<<16
  578.     MOVGT    r6,#31<<16
  579.     AND    r6,r5,r6,LSR#16
  580.     AND    r8,r5,r1,LSR#10
  581.     MUL    r8,r3,r8
  582.     CMP    r11,#31<<16
  583.     MOVGT    r11,#31<<16
  584.     AND    r11,r5,r11,LSR#16
  585.     CMP    r8,#31<<16
  586.     MOVGT    r8,#31<<16
  587.     AND    r8,r5,r8,LSR#16
  588.     ORR    r6,r6,r8,LSL#10
  589.     ORR    r8,r6,r11,LSL#5
  590.  
  591.     STRB    r8,[r2],#1
  592.     MOV    r8,r8,ASR#8
  593.     STRB    r8,[r2],#1
  594.     ADDS    r3,r3,r12
  595.     BLE    pfgclp_lt0_entry2
  596. pfgclp_entry2
  597.     SUBS    r0,r0,#1
  598.     BGE    pfgclp
  599.  
  600.     LDMFD    r13!,{r4-r6,r8,r11,PC}^
  601. pfgclp_lt0
  602.     STRB    r4,[r2],#1
  603.     STRB    r4,[r2],#1
  604.     ADDS    r3,r3,r12
  605.     BGT    pfgclp_entry2
  606. pfgclp_lt0_entry2
  607.     SUBS    r0,r0,#1
  608.     BGE    pfgclp_lt0
  609.  
  610.     LDMFD    r13!,{r4-r6,r8,r11,PC}^
  611. PlotterTTcore16
  612.     ; r0 = int su
  613.     ; r1 = int sv
  614.     ; r2 = int sdu
  615.     ; r3 = int sdv
  616.     MOV    r12,r13
  617.     STMFD    r13!,{r4-r9,r14}
  618.         LDMFD    r12,{r4,r5,r12,r14}
  619.     ; r4 = int temp
  620.     ; r5 = int rowbytes
  621.     ; r12= ptemp
  622.     ; r14= tpos
  623.     MOV    r9,#&FF
  624.     ORR    r9,r9,#&FF00
  625. pttcmainlp
  626.     MOV    r6,r1,ASR#16
  627.     MOV    r7,r0,ASR#16
  628.     MLA    r6,r5,r6,r7
  629.     ADD    r0,r0,r2
  630.     LDR    r6,[r12,r6,LSL#1]
  631.     ADD    r1,r1,r3
  632.     ANDS    r6,r6,r9
  633.     STRNEB    r6,[r14]
  634.     MOVNE    r6,r6,LSR#8
  635.     STRNEB    r6,[r14,#1]
  636.     ADD    r14,r14,#2
  637.     SUBS    r4,r4,#1
  638.     BGE    pttcmainlp
  639.     LDMFD    r13!,{r4-r9,PC}^
  640. PlotterTTAcore16
  641.     ; r0 = int su
  642.     ; r1 = int sv
  643.     ; r2 = int sdu
  644.     ; r3 = int sdv
  645.     MOV    r12,r13
  646.     STMFD    r13!,{r4-r11,r14}
  647.         LDMFD    r12,{r4,r5,r6,r12,r14}
  648.     ; r4 = int temp
  649.     ; r5 = int rowbytes
  650.     ; r6 = int alpha
  651.     ; r12= ptemp
  652.     ; r14= tpos
  653.     MVN    r9,#31
  654.     BIC    r9,r9,#31<<10
  655.     MOV    r6,r6,LSR#11
  656. pttacmainlp
  657.     MOV    r8,r1,ASR#16
  658.     MOV    r7,r0,ASR#16
  659.     MLA    r8,r5,r8,r7
  660.     ADD    r0,r0,r2
  661.     LDR    r8,[r12,r8,LSL#1]
  662.     LDR    r10,[r14]
  663.     AND    r7,r8,#31<<5
  664.     BIC    r8,r8,r9
  665.     ORRS    r8,r8,r7,LSL#15
  666.     BEQ    pttac_trans
  667.     AND    r7,r10,#31<<5
  668.     BIC    r10,r10,r9
  669.     ORR    r10,r10,r7,LSL#15
  670.     SUB    r8,r8,r10
  671.     MUL    r8,r6,r8
  672.     ADD    r1,r1,r3
  673.     ADD    r8,r8,r10,LSL#5
  674.     AND    r7,r8,#31<<25
  675.     BIC    r8,r8,r9,LSL#5
  676.     ORR    r8,r8,r7,LSR#15
  677.     MOV    r8,r8,LSR#5
  678.  
  679.     STRB    r8,[r14],#1
  680.     MOV    r8,r8,ASR#8
  681.     STRB    r8,[r14],#1
  682.     SUBS    r4,r4,#1
  683.     BGT    pttacmainlp
  684.  
  685.     LDMFD    r13!,{r4-r11,PC}^
  686. pttac_trans
  687.     ADD    r1,r1,r3
  688.     SUBS    r4,r4,#1
  689.     ADD    r14,r14,#2
  690.     BGT    pttacmainlp
  691.  
  692.     LDMFD    r13!,{r4-r11,PC}^
  693. PlotterTTGcore16
  694.     ; r0 = int su
  695.     ; r1 = int sv
  696.     ; r2 = int sdu
  697.     ; r3 = int sdv
  698.     MOV    r12,r13
  699.     STMFD    r13!,{r4-r11,r14}
  700.         LDMFD    r12,{r4,r5,r7,r10,r12,r14}
  701.     ; r4 = int temp
  702.     ; r5 = int rowbytes
  703.     ; r7 = int si
  704.     ; r10= int sdi
  705.     ; r12= ptemp
  706.     ; r14= tpos
  707.     CMP    r7,#0
  708.     BLE    pttgc_lp_lt0
  709. pttgc_lp
  710.     MOV    r8,r1,ASR#16
  711.     MOV    r11,r0,ASR#16
  712.     MLA    r8,r5,r8,r11
  713.     ADD    r0,r0,r2
  714.     LDR    r8,[r12,r8,LSL#1]
  715.  
  716.     MOV    r9,#31
  717.     CMP    r8,#0
  718.     BEQ    pttgc_nope
  719.     AND    r6,r8,#31
  720.     MUL    r6,r7,r6
  721.     AND    r11,r9,r8,LSR#5
  722.     MUL    r11,r7,r11
  723.     CMP    r6,#31<<16
  724.     MOVGT    r6,#31<<16
  725.     AND    r6,r9,r6,LSR#16
  726.     AND    r8,r9,r8,LSR#10
  727.     MUL    r8,r7,r8
  728.     CMP    r11,#31<<16
  729.     MOVGT    r11,#31<<16
  730.     AND    r11,r9,r11,LSR#16
  731.     CMP    r8,#31<<16
  732.     MOVGT    r8,#31<<16
  733.     AND    r8,r9,r8,LSR#16
  734.     ORR    r6,r6,r11,LSL#5
  735.     ORR    r8,r6,r8,LSL#10
  736.  
  737.     STRB    r8,[r14]
  738.     MOV    r8,r8,ASR#8
  739.     STRB    r8,[r14,#1]
  740. pttgc_nope
  741.     ADDS    r7,r7,r10
  742.     ADD    r1,r1,r3
  743.     ADD    r14,r14,#2
  744.     BLE    pttgc_lp_lt0_entry2
  745. pttgc_lp_entry2
  746.     SUBS    r4,r4,#1
  747.     BGE    pttgc_lp
  748.  
  749.     LDMFD    r13!,{r4-r11,PC}^
  750.  
  751. pttgc_lp_lt0
  752.     MOV    r8,r1,ASR#16
  753.     MOV    r11,r0,ASR#16
  754.     MLA    r8,r5,r8,r11
  755.     ADD    r0,r0,r2
  756.     LDR    r8,[r12,r8,LSL#1]
  757.  
  758.     ADD    r1,r1,r3
  759.     CMP    r8,#0
  760.     BEQ    pttgc_nope2
  761.     MOV    r8,#0
  762.     STRB    r8,[r14]
  763.     MOV    r8,r8,ASR#8
  764.     STRB    r8,[r14,#1]
  765. pttgc_nope2
  766.     ADDS    r7,r7,r10
  767.     ADD    r14,r14,#2
  768.     BGT    pttgc_lp_entry2
  769. pttgc_lp_lt0_entry2
  770.     SUBS    r4,r4,#1
  771.     BGE    pttgc_lp_lt0
  772.  
  773.     LDMFD    r13!,{r4-r11,PC}^
  774. PlotterTTAGcore16
  775.     ; r0 = int su
  776.     ; r1 = int sv
  777.     ; r2 = int sdu
  778.     ; r3 = int sdv
  779.     MOV    r12,r13
  780.     STMFD    r13!,{r4-r11,r14}
  781.         LDMFD    r12,{r4,r5,r6,r7,r10,r12,r14}
  782.     ; r4 = int temp
  783.     ; r5 = int rowbytes
  784.     ; r6 = int alpha
  785.     ; r7 = int si
  786.     ; r10= int sdi
  787.     ; r12= ptemp
  788.     ; r14= tpos
  789.     MOV    r6,r6,LSR#11
  790.     CMP    r7,#0
  791.     BLE    pttagc_lp_lt0
  792. pttagc_lp
  793.     MOV    r8,r1,ASR#16
  794.     MOV    r11,r0,ASR#16
  795.     MLA    r8,r5,r8,r11
  796.     ADD    r0,r0,r2
  797.     LDR    r8,[r12,r8,LSL#1]
  798.  
  799.     MOV    r9,#31
  800.     CMP    r8,#0
  801.     BEQ    pttagc_nope
  802.     AND    r10,r8,#31
  803.     MUL    r10,r7,r10
  804.     AND    r11,r9,r8,LSR#5
  805.     MUL    r11,r7,r11
  806.     CMP    r10,#31<<16
  807.     MOVGT    r10,#31<<16
  808.     AND    r10,r9,r10,LSR#16
  809.     AND    r8,r9,r8,LSR#10
  810.     MUL    r8,r7,r8
  811.     CMP    r11,#31<<16
  812.     MOVGT    r11,#31<<16
  813.     AND    r11,r9,r11,LSR#16
  814.     CMP    r8,#31<<16
  815.     MOVGT    r8,#31<<16
  816.     AND    r8,r9,r8,LSR#16
  817.     ORR    r10,r10,r11,LSL#5
  818.     ORR    r8,r10,r8,LSL#10
  819.  
  820.     MVN    r9,#31
  821.     BIC    r9,r9,#31<<10
  822.     LDR    r10,[r14]
  823.     AND    r11,r8,#31<<5
  824.     BIC    r8,r8,r9
  825.     ORR    r8,r8,r11,LSL#15
  826.     AND    r11,r10,#31<<5
  827.     BIC    r10,r10,r9
  828.     ORR    r11,r10,r11,LSL#15
  829.     SUB    r8,r8,r11
  830.     MUL    r8,r6,r8
  831.     LDR    r10,[r13,#(9+4)*4]
  832.     ADD    r8,r8,r11,LSL#5
  833.     AND    r11,r8,#31<<25
  834.     BIC    r8,r8,r9,LSL#5
  835.     ORR    r8,r8,r11,LSR#15
  836.     MOV    r8,r8,LSR#5
  837.  
  838.     STRB    r8,[r14]
  839.     MOV    r8,r8,ASR#8
  840.     STRB    r8,[r14,#1]
  841. pttagc_nope
  842.     ADD    r1,r1,r3
  843.     ADDS    r7,r7,r10
  844.     ADD    r14,r14,#2
  845.     BLT    pttagc_lp_lt0_entry2
  846. pttagc_lp_entry2
  847.     SUBS    r4,r4,#1
  848.     BGE    pttagc_lp
  849.  
  850.     LDMFD    r13!,{r4-r11,PC}^
  851.  
  852. pttagc_lp_lt0
  853.     MOV    r8,r1,ASR#16
  854.     MOV    r11,r0,ASR#16
  855.     MLA    r8,r5,r8,r11
  856.     ADD    r0,r0,r2
  857.     LDR    r8,[r12,r8,LSL#1]
  858.     ADD    r1,r1,r3
  859.     CMP    r8,#0
  860.     BEQ    pttagc_nope2
  861.  
  862.     MVN    r9,#31
  863.     LDR    r10,[r14]
  864.     BIC    r9,r9,#31<<10
  865.     AND    r11,r10,#31<<5
  866.     BIC    r10,r10,r9
  867.     ORR    r11,r10,r11,LSL#15
  868.     RSB    r8,r11,#0
  869.     MUL    r8,r6,r8
  870.     LDR    r10,[r13,#(9+4)*4]
  871.     ADD    r8,r8,r11,LSL#5
  872.     AND    r11,r8,#31<<25
  873.     BIC    r8,r8,r9,LSL#5
  874.     ORR    r8,r8,r11,LSR#15
  875.     MOV    r8,r8,LSR#5
  876.  
  877.     STRB    r8,[r14]
  878.     MOV    r8,r8,ASR#8
  879.     STRB    r8,[r14,#1]
  880. pttagc_nope2
  881.     ADDS    r7,r7,r10
  882.     ADD    r14,r14,#2
  883.     BGT    pttagc_lp_entry2
  884. pttagc_lp_lt0_entry2
  885.     SUBS    r4,r4,#1
  886.     BGE    pttagc_lp_lt0
  887.  
  888.     LDMFD    r13!,{r4-r11,PC}^
  889.  
  890.         END
  891.