home *** CD-ROM | disk | FTP | other *** search
/ Dream 44 / Amiga_Dream_44.iso / RiscPc / jeux / biohazard.arc / s / spriteVGA1 < prev    next >
Text File  |  1994-10-25  |  23KB  |  1,228 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  |PlotSpriteVGA|
  17.  
  18. ;Plot Sprite
  19. ;
  20. ; on entry :-
  21. ;    r0 = pointer to data block where :-
  22. ;     0 = frame number
  23. ;     1 = left clip value
  24. ;     2 = right clip value (relative to size of sprite)
  25. ;     3 = size of square (height)
  26. ;     4 = increment (16 bit fixed point number)
  27. ;     5 = x position of square centre on screen
  28. ;     6 = screen address
  29. ;     7 = pointer to frame base address
  30. ;     8 = screen width
  31. ;     9 = screen height
  32. ;    10 = y_value
  33.  
  34. |PlotSpriteVGA|
  35.       STMFD   r13!,{r0-r12,link}
  36.  
  37.  
  38.     ;compute base screen address for plot
  39.     LDR   r1,[r0,#32]  ;load screen width
  40.     LDR   r2,[r0,#12]  ;load height
  41.     LDR   r3,[r0,#20]  ;load centre pos
  42.     LDR   r4,[r0,#36]  ;load screen height
  43.     LDR   r14,[r0,#24] ;load screen address
  44.  
  45.     ;clear y_value
  46.     MOV   r5,#0
  47.     STR   r5,[r0,#40]
  48.  
  49.     ;((screen height - (height)/2) * 640)
  50.     MOV   r5,r4,LSR #1
  51.         SUB   r5,r5,r2,LSR #1
  52.  
  53.     MOV   r12,r5,LSL #7    ; * 128
  54.         ADD   r5,r12,r5,LSL #9 ; + (* 512)
  55.  
  56.     ;(screen width + centre pos - (height/2))
  57.     ;SUB   r6,r3,r2,LSR #1
  58.         ;ADD   r6,r6,r1
  59.  
  60.     ;sum results and add to screen base
  61.         ;ADD   r5,r5,r6
  62.     ADD   r5,r5,r14
  63.     STR   r5,[r0,#24]
  64.  
  65.     ;get data from Frame Database
  66.         ; locate frame data in Database
  67.         LDR   r6,[r0,#28]  ;load pointer to database
  68.  
  69.     ;skip the inital 4 words, these are not required
  70.     ADD   r6,r6,#16
  71.  
  72.     ;locate pointer to our frame
  73.     LDR   r7,[r0]      ;load frame number
  74.  
  75.     ;multiply by 4, and add to database pointer
  76.     ADD   r6,r6,r7,LSL #2
  77.  
  78.     ;get the address of the frame data
  79.     LDR   r7,[r6]
  80.     ADD   r6,r6,r7 ;add databaase pointer to frame address
  81.     SUB   r6,r6,#16
  82.  
  83.     ;calculate reverse increment
  84.     MOV   r10,r2,LSL #9
  85.  
  86. PlotNextLine
  87.  
  88.     ;load the number of vertical lines to skip
  89.     LDRB  r7,[r6],#1
  90.     CMP   r7,#254
  91.     BEQ   EndPlotSprite
  92.  
  93.     ;compute increment and number of lines to plot
  94.     LDR   r8,[r0,#40]
  95.     LDR   r9,[r0,#16]
  96.     ADD   r11,r8,r9
  97.  
  98.     MOV   r12,r11,LSR #16
  99.     SUBS  r12,r12,r8,LSR #16
  100.     STRNE r12,[r0,#44]
  101.     STRNE r11,[r0,#40]
  102.     MOVNE r11,#1
  103.     STRNE r11,[r0,#48]
  104.     BNE   Skip_Calc
  105.  
  106.     ADD   r11,r11,r9
  107.     MOV   r12,r11,LSR #16
  108.     SUBS  r12,r12,r8,LSR #16
  109.     STRNE r12,[r0,#44]
  110.     STRNE r11,[r0,#40]
  111.     MOVNE r11,#2
  112.     STRNE r11,[r0,#48]
  113.     BNE   Skip_Calc
  114.  
  115.     ADD   r11,r11,r9
  116.     MOV   r12,r11,LSR #16
  117.     SUBS  r12,r12,r8,LSR #16
  118.     STRNE r12,[r0,#44]
  119.     STRNE r11,[r0,#40]
  120.     MOVNE r11,#3
  121.     STRNE r11,[r0,#48]
  122.     BNE   Skip_Calc
  123.  
  124.     ADD   r11,r11,r9
  125.     MOV   r12,r11,LSR #16
  126.     SUBS  r12,r12,r8,LSR #16
  127.     STRNE r12,[r0,#44]
  128.     STRNE r11,[r0,#40]
  129.     MOVNE r11,#4
  130.     STRNE r11,[r0,#48]
  131.     BNE   Skip_Calc
  132.  
  133. Skip_Calc
  134.     ;multiply by reverse increment
  135.     MUL   r7,r10,r7
  136.     MOV   r7,r7,LSR #16
  137.  
  138.     ;multiply by 640
  139.     MOV   r8,r7,LSL #7
  140.     ADD   r7,r8,r7,LSL #9
  141.  
  142.     ;add to base screen address
  143.     ADD   r5,r5,r7
  144.  
  145. NextSegment
  146.     ;load the line length and horizontal skip
  147.     LDRB  r14,[r6],#1 ;line length
  148.     ADD   r14,r14,#1
  149.     LDRB  r9,[r6],#1 ;horizontal skip
  150.     ADD   r9,r9,#1
  151.  
  152.     ;reverse increment = height/128
  153.     ;we treat 'height' as reverse increment wiht 7 bit
  154.         ;fixed point accuracy.
  155.  
  156.     ;multiply horizontal skip by reverse increment to get 'offset'
  157.     ; load increment
  158.     ;LDR   r10,[r0,#16]
  159.     LDR   r2,[r0,#12]
  160.     MUL   r9,r10,r9
  161.     MOV   r9,r9,LSR #16
  162.     SUB   r11,r3,r2,LSR #1 ;centre-(height/2)
  163.     ADD   r9,r9,r11        ;hs + (centre-(height/2))
  164.  
  165.         ;multiply source domain line length by increment to get real
  166.     ;'line length'
  167.     MUL   r8,r10,r14
  168.     MOV   r8,r8,LSR #16
  169.  
  170.     ;load left and right clip values
  171.     LDR   r11,[r0,#4] ;left
  172.     LDR   r12,[r0,#8] ;right
  173.     LDR   r2,[r0,#16]
  174.  
  175.     CMP   r12,r9
  176.     MOVLE r8,#0
  177.     MOVLE r9,#0
  178.     BLE   skip_leftclip_else
  179.     ;if offset < left clip then
  180.     ;  source offset = ((left clip - offset) * reverse increment)
  181.     ;  base screen address += left clip
  182.     ;  line length = (line length - (left clip - offset)
  183.     ;end if
  184.     SUBS  r1,r11,r9 ;left clip - offset
  185.     BMI   skip_leftclip
  186.     ADD   r7,r8,r9
  187.     CMP   r11,r7
  188.     MOVGE r8,#0
  189.     MOVGE r9,#0
  190.     BGE   skip_leftclip_else
  191.     MUL   r4,r2,r1
  192.     MOV   r4,r4,LSR #16 ;((left clip - offset) * increment)
  193.     ADD   r7,r6,r4
  194.  
  195.     ADD   r5,r5,r11 ;base screen address += left clip
  196.     MOV   r9,r11
  197.  
  198.     SUB   r8,r8,r1
  199.     B     skip_leftclip_else
  200.  
  201. skip_leftclip
  202.         ADD   r5,r5,r9 ;base screen address += offset
  203.     MOV   r7,r6
  204.  
  205. skip_leftclip_else
  206.     CMP   r8,#0
  207.     BEQ   skip_reg_load
  208.  
  209.     ;clip right by modifying line length
  210.     ADD   r4,r8,r9
  211.     CMP   r4,r12
  212.     SUBGT r8,r12,r9
  213.  
  214.     ;store registers on stack
  215.     STMFD   r13!,{r0-r12,link}
  216.  
  217.     ;set up registers
  218.     MOV    r4,r7
  219.     MOV     r6,r8
  220.     MOV     r1,r5
  221.  
  222.     LDR     r11,[r0,#48]
  223.     B       PlotLine
  224.  
  225. NextLine
  226.     ;load registers from stack
  227.     LDMFD   r13!,{r0-r12,link}
  228.  
  229. skip_reg_load
  230.     ;modify database pointer to point to end of line block
  231.     ADD     r6,r6,r14
  232.     ;ADD     r6,r6,#1
  233.     LDRB    r7,[r6]
  234.     CMP     r7,#254
  235.     BEQ     Test2EndPlotSprite
  236.  
  237.     CMP     r7,#255
  238.     SUB     r5,r5,r9
  239.     BNE     NextSegment
  240.  
  241.     LDR     r8,[r0,#44]
  242.     CMP     r8,#1
  243.     BEQ     skip_modify_database
  244.  
  245.     ;skip required number of lines through database
  246.     ADD     r6,r6,#1
  247.     SUB     r8,r8,#1
  248.     ADD     r5,r5,#640 ;modify screen address
  249.  
  250. skip_database_line
  251.     ;load vskip
  252.     ADD     r6,r6,#1
  253.  
  254. skip_next_segment
  255.     ;load length
  256.     LDRB    r12,[r6],#1
  257.  
  258.     ;load hskip
  259.     ADD     r6,r6,#2
  260.  
  261.     ADD     r6,r6,r12
  262.  
  263.     LDRB    r7,[r6]
  264.     CMP     r7,#254
  265.     BEQ     TestEndPlotSprite
  266.  
  267.     CMP     r7,#255
  268.     BNE     skip_next_segment
  269.  
  270.     SUBS    r8,r8,#1
  271.     ADD     r6,r6,#1
  272.     BNE     skip_database_line
  273.  
  274.     B       PlotNextLine
  275.  
  276. skip_modify_database
  277.     ;update screen address
  278.     LDR     r8,[r0,#48]
  279.     MOV     r11,r8,LSL #7
  280.     ADD     r8,r11,r8,LSL #9
  281.     ADD     r5,r5,r8
  282.  
  283.     ADD     r6,r6,#1
  284.  
  285.     B       PlotNextLine
  286.  
  287. TestEndPlotSprite
  288.     B       EndPlotSprite
  289.  
  290. Test2EndPlotSprite
  291.     B       EndPlotSprite
  292.  
  293.  
  294. ; line plotter
  295. ;
  296. ; on entry :-
  297. ;    r11 = number of lines to plot
  298. ;    r4 = source base address
  299. ;    r6 = line length
  300. ;       r2 = increment
  301. ;    r1 = screen address
  302.  
  303. PlotLine
  304.  
  305.     ;check for zero length line
  306.     CMP   r6,#0
  307.     BEQ   end_plotOne
  308.  
  309.     ;update y incrememt and calculate number of lines to draw
  310.     CMP   r11,#1
  311.     BEQ   OneLine
  312.     CMP   r11,#2
  313.     BEQ   TwoLine
  314.     CMP   r11,#3
  315.     BEQ   ThreeLine
  316.     B     FourLine
  317.  
  318. ;**********************************
  319. ;
  320. ; One Line draw
  321. ;
  322. ;**********************************
  323. OneLine
  324.     ;find offsets - start & end of line
  325.     AND   r7,r1,#3
  326.     RSB   r7,r7,#4
  327.     AND   r7,r7,#3
  328.  
  329.     ADD   r11,r1,r6
  330.     AND   r11,r11,#3
  331.     MOV   r12,r6
  332.  
  333.     ;plot start pixels
  334.     MOV   r3,#0
  335.     CMP   r7,#0
  336.     BEQ   skip_start_plotOne
  337.  
  338.     LDRB  r10,[r4,r3,LSR #16]
  339.     ADD   r3,r3,r2
  340.     STRB  r10,[r1,#320]
  341.     STRB  r10,[r1],#1
  342.     ;check for small pixel line
  343.     SUBS  r12,r12,#1
  344.         BEQ   end_plotOne
  345.     CMP   r7,#1
  346.         BEQ   skip_start_plotOne
  347.  
  348.     LDRB  r10,[r4,r3,LSR #16]
  349.     ADD   r3,r3,r2
  350.     STRB  r10,[r1,#320]
  351.     STRB  r10,[r1],#1
  352.     ;check for small pixel line
  353.     SUBS  r12,r12,#1
  354.         BEQ   end_plotOne
  355.     CMP   r7,#2
  356.         BEQ   skip_start_plotOne
  357.  
  358.     LDRB  r10,[r4,r3,LSR #16]
  359.     ADD   r3,r3,r2
  360.     STRB  r10,[r1,#320]
  361.     STRB  r10,[r1],#1
  362.     ;check for small pixel line
  363.     SUBS  r12,r12,#1
  364.         BEQ   end_plotOne
  365.  
  366. skip_start_plotOne
  367.     MOV   r12,r6
  368.     ADD   r9,r7,r11
  369.     SUB   r9,r6,r9
  370.     MOV   r9,r9,LSR #2
  371.  
  372.     MOVS  r8,r9,LSR #2
  373.     BEQ   skip_four_word_plotOne
  374.  
  375. four_word_plotOne
  376.     LDRB  r5,[r4,r3,LSR #16]
  377.     ADD   r3,r3,r2
  378.     LDRB  r14,[r4,r3,LSR #16]
  379.     ADD   r3,r3,r2
  380.     ADD   r5,r5,r14,LSL #8
  381.     LDRB  r14,[r4,r3,LSR #16]
  382.     ADD   r3,r3,r2
  383.     ADD   r5,r5,r14,LSL #16
  384.     LDRB  r14,[r4,r3,LSR #16]
  385.     ADD   r3,r3,r2
  386.     ADD   r5,r5,r14,LSL #24
  387.  
  388.     LDRB  r6,[r4,r3,LSR #16]
  389.     ADD   r3,r3,r2
  390.     LDRB  r14,[r4,r3,LSR #16]
  391.     ADD   r3,r3,r2
  392.     ADD   r6,r6,r14,LSL #8
  393.     LDRB  r14,[r4,r3,LSR #16]
  394.     ADD   r3,r3,r2
  395.     ADD   r6,r6,r14,LSL #16
  396.     LDRB  r14,[r4,r3,LSR #16]
  397.     ADD   r3,r3,r2
  398.     ADD   r6,r6,r14,LSL #24
  399.  
  400.     LDRB  r7,[r4,r3,LSR #16]
  401.     ADD   r3,r3,r2
  402.     LDRB  r14,[r4,r3,LSR #16]
  403.     ADD   r3,r3,r2
  404.     ADD   r7,r7,r14,LSL #8
  405.     LDRB  r14,[r4,r3,LSR #16]
  406.     ADD   r3,r3,r2
  407.     ADD   r7,r7,r14,LSL #16
  408.     LDRB  r14,[r4,r3,LSR #16]
  409.     ADD   r3,r3,r2
  410.     ADD   r7,r7,r14,LSL #24
  411.  
  412.     LDRB  r8,[r4,r3,LSR #16]
  413.     ADD   r3,r3,r2
  414.     LDRB  r14,[r4,r3,LSR #16]
  415.     ADD   r3,r3,r2
  416.     ADD   r8,r8,r14,LSL #8
  417.     LDRB  r14,[r4,r3,LSR #16]
  418.     ADD   r3,r3,r2
  419.     ADD   r8,r8,r14,LSL #16
  420.     LDRB  r14,[r4,r3,LSR #16]
  421.     ADD   r3,r3,r2
  422.     ADD   r8,r8,r14,LSL #24
  423.  
  424.     ADD   r1,r1,#320
  425.     STMIA r1,{r5-r8}
  426.     SUB   r1,r1,#320
  427.     STMIA r1!,{r5-r8}
  428.     SUB   r9,r9,#4
  429.         MOVS  r8,r9,LSR #2
  430.     BNE   four_word_plotOne
  431.  
  432. skip_four_word_plotOne
  433.     ANDS  r8,r9,#2
  434.     BEQ   skip_two_word_plotOne
  435.  
  436.     ;two word plot
  437.     LDRB  r7,[r4,r3,LSR #16]
  438.     ADD   r3,r3,r2
  439.     LDRB  r14,[r4,r3,LSR #16]
  440.     ADD   r3,r3,r2
  441.     ADD   r7,r7,r14,LSL #8
  442.     LDRB  r14,[r4,r3,LSR #16]
  443.     ADD   r3,r3,r2
  444.     ADD   r7,r7,r14,LSL #16
  445.     LDRB  r14,[r4,r3,LSR #16]
  446.     ADD   r3,r3,r2
  447.     ADD   r7,r7,r14,LSL #24
  448.  
  449.     LDRB  r8,[r4,r3,LSR #16]
  450.     ADD   r3,r3,r2
  451.     LDRB  r14,[r4,r3,LSR #16]
  452.     ADD   r3,r3,r2
  453.     ADD   r8,r8,r14,LSL #8
  454.     LDRB  r14,[r4,r3,LSR #16]
  455.     ADD   r3,r3,r2
  456.     ADD   r8,r8,r14,LSL #16
  457.     LDRB  r14,[r4,r3,LSR #16]
  458.     ADD   r3,r3,r2
  459.     ADD   r8,r8,r14,LSL #24
  460.  
  461.     ADD   r1,r1,#320
  462.     STMIA r1,{r7-r8}
  463.     SUB   r1,r1,#320
  464.     STMIA r1!,{r7-r8}
  465.     SUB   r9,r9,#2
  466.  
  467. skip_two_word_plotOne
  468.     ANDS  r8,r9,#1
  469.     BEQ   skip_one_word_plotOne
  470.  
  471.     ;one word plot
  472.     LDRB  r8,[r4,r3,LSR #16]
  473.     ADD   r3,r3,r2
  474.     LDRB  r14,[r4,r3,LSR #16]
  475.     ADD   r3,r3,r2
  476.     ADD   r8,r8,r14,LSL #8
  477.     LDRB  r14,[r4,r3,LSR #16]
  478.     ADD   r3,r3,r2
  479.     ADD   r8,r8,r14,LSL #16
  480.     LDRB  r14,[r4,r3,LSR #16]
  481.     ADD   r3,r3,r2
  482.     ADD   r8,r8,r14,LSL #24
  483.  
  484.     STR   r8,[r1,#320]
  485.     STR   r8,[r1],#4
  486.  
  487. skip_one_word_plotOne
  488.     ;plot_end_pixels
  489.     CMP   r11,#0
  490.     BEQ   end_plotOne
  491.  
  492.     LDRB  r10,[r4,r3,LSR #16]
  493.     ADD   r3,r3,r2
  494.     STRB  r10,[r1,#320]
  495.     STRB  r10,[r1],#1
  496.     ;check for small pixel line
  497.     SUBS  r12,r12,#1
  498.         BEQ   end_plotOne
  499.     CMP   r11,#1
  500.         BEQ   end_plotOne
  501.  
  502.     LDRB  r10,[r4,r3,LSR #16]
  503.     ADD   r3,r3,r2
  504.     STRB  r10,[r1,#320]
  505.     STRB  r10,[r1],#1
  506.     ;check for small pixel line
  507.     SUBS  r12,r12,#1
  508.         BEQ   end_plotOne
  509.     CMP   r11,#2
  510.         BEQ   end_plotOne
  511.  
  512.     LDRB  r10,[r4,r3,LSR #16]
  513.     ADD   r3,r3,r2
  514.     STRB  r10,[r1,#320]
  515.     STRB  r10,[r1],#1
  516.     ;check for small pixel line
  517.     SUBS  r12,r12,#1
  518.         BEQ   end_plotOne
  519.  
  520. end_plotOne
  521.     B     NextLine
  522.  
  523. ;**********************************
  524. ;
  525. ; Two Line draw
  526. ;
  527. ;**********************************
  528. TwoLine
  529.     ;find offsets - start & end of line
  530.     AND   r7,r1,#3
  531.     RSB   r7,r7,#4
  532.     AND   r7,r7,#3
  533.  
  534.     ADD   r11,r1,r6
  535.     AND   r11,r11,#3
  536.  
  537.     ;plot start pixels
  538.     MOV   r3,#0
  539.     CMP   r7,#0
  540.     BEQ   skip_start_plotTwo
  541.  
  542.     LDRB  r10,[r4,r3,LSR #16]
  543.     ADD   r3,r3,r2
  544.     STRB  r10,[r1,#960]
  545.     STRB  r10,[r1,#640]
  546.     STRB  r10,[r1,#320]
  547.     STRB  r10,[r1],#1
  548.     ;check for 1 pixel line
  549.     CMP   r6,#1
  550.         BEQ   end_plotTwo
  551.     CMP   r7,#1
  552.         BEQ   skip_start_plotTwo
  553.  
  554.     LDRB  r10,[r4,r3,LSR #16]
  555.     ADD   r3,r3,r2
  556.     STRB  r10,[r1,#960]
  557.     STRB  r10,[r1,#640]
  558.     STRB  r10,[r1,#320]
  559.     STRB  r10,[r1],#1
  560.     CMP   r7,#2
  561.         BEQ   skip_start_plotTwo
  562.  
  563.     LDRB  r10,[r4,r3,LSR #16]
  564.     ADD   r3,r3,r2
  565.     STRB  r10,[r1,#960]
  566.     STRB  r10,[r1,#640]
  567.     STRB  r10,[r1,#320]
  568.     STRB  r10,[r1],#1
  569.  
  570. skip_start_plotTwo
  571.     ADD   r9,r7,r11
  572.     SUB   r9,r6,r9
  573.     MOV   r9,r9,LSR #2
  574.  
  575.     MOVS  r8,r9,LSR #2
  576.     BEQ   skip_four_word_plotTwo
  577.  
  578. four_word_plotTwo
  579.     LDRB  r5,[r4,r3,LSR #16]
  580.     ADD   r3,r3,r2
  581.     LDRB  r14,[r4,r3,LSR #16]
  582.     ADD   r3,r3,r2
  583.     ADD   r5,r5,r14,LSL #8
  584.     LDRB  r14,[r4,r3,LSR #16]
  585.     ADD   r3,r3,r2
  586.     ADD   r5,r5,r14,LSL #16
  587.     LDRB  r14,[r4,r3,LSR #16]
  588.     ADD   r3,r3,r2
  589.     ADD   r5,r5,r14,LSL #24
  590.  
  591.     LDRB  r6,[r4,r3,LSR #16]
  592.     ADD   r3,r3,r2
  593.     LDRB  r14,[r4,r3,LSR #16]
  594.     ADD   r3,r3,r2
  595.     ADD   r6,r6,r14,LSL #8
  596.     LDRB  r14,[r4,r3,LSR #16]
  597.     ADD   r3,r3,r2
  598.     ADD   r6,r6,r14,LSL #16
  599.     LDRB  r14,[r4,r3,LSR #16]
  600.     ADD   r3,r3,r2
  601.     ADD   r6,r6,r14,LSL #24
  602.  
  603.     LDRB  r7,[r4,r3,LSR #16]
  604.     ADD   r3,r3,r2
  605.     LDRB  r14,[r4,r3,LSR #16]
  606.     ADD   r3,r3,r2
  607.     ADD   r7,r7,r14,LSL #8
  608.     LDRB  r14,[r4,r3,LSR #16]
  609.     ADD   r3,r3,r2
  610.     ADD   r7,r7,r14,LSL #16
  611.     LDRB  r14,[r4,r3,LSR #16]
  612.     ADD   r3,r3,r2
  613.     ADD   r7,r7,r14,LSL #24
  614.  
  615.     LDRB  r8,[r4,r3,LSR #16]
  616.     ADD   r3,r3,r2
  617.     LDRB  r14,[r4,r3,LSR #16]
  618.     ADD   r3,r3,r2
  619.     ADD   r8,r8,r14,LSL #8
  620.     LDRB  r14,[r4,r3,LSR #16]
  621.     ADD   r3,r3,r2
  622.     ADD   r8,r8,r14,LSL #16
  623.     LDRB  r14,[r4,r3,LSR #16]
  624.     ADD   r3,r3,r2
  625.     ADD   r8,r8,r14,LSL #24
  626.  
  627.     ADD   r1,r1,#320
  628.     STMIA r1,{r5-r8}
  629.     ADD   r1,r1,#320
  630.     STMIA r1,{r5-r8}
  631.     ADD   r1,r1,#320
  632.     STMIA r1,{r5-r8}
  633.     SUB   r1,r1,#960
  634.     STMIA r1!,{r5-r8}
  635.     SUB   r9,r9,#4
  636.         MOVS  r8,r9,LSR #2
  637.     BNE   four_word_plotTwo
  638.  
  639. skip_four_word_plotTwo
  640.     ANDS  r8,r9,#2
  641.     BEQ   skip_two_word_plotTwo
  642.  
  643.     ;two word plot
  644.     LDRB  r7,[r4,r3,LSR #16]
  645.     ADD   r3,r3,r2
  646.     LDRB  r14,[r4,r3,LSR #16]
  647.     ADD   r3,r3,r2
  648.     ADD   r7,r7,r14,LSL #8
  649.     LDRB  r14,[r4,r3,LSR #16]
  650.     ADD   r3,r3,r2
  651.     ADD   r7,r7,r14,LSL #16
  652.     LDRB  r14,[r4,r3,LSR #16]
  653.     ADD   r3,r3,r2
  654.     ADD   r7,r7,r14,LSL #24
  655.  
  656.     LDRB  r8,[r4,r3,LSR #16]
  657.     ADD   r3,r3,r2
  658.     LDRB  r14,[r4,r3,LSR #16]
  659.     ADD   r3,r3,r2
  660.     ADD   r8,r8,r14,LSL #8
  661.     LDRB  r14,[r4,r3,LSR #16]
  662.     ADD   r3,r3,r2
  663.     ADD   r8,r8,r14,LSL #16
  664.     LDRB  r14,[r4,r3,LSR #16]
  665.     ADD   r3,r3,r2
  666.     ADD   r8,r8,r14,LSL #24
  667.  
  668.     ADD   r1,r1,#320
  669.     STMIA r1,{r7-r8}
  670.     ADD   r1,r1,#320
  671.     STMIA r1,{r7-r8}
  672.     ADD   r1,r1,#320
  673.     STMIA r1,{r7-r8}
  674.     SUB   r1,r1,#960
  675.     STMIA r1!,{r7-r8}
  676.     SUB   r9,r9,#2
  677.  
  678. skip_two_word_plotTwo
  679.     ANDS  r8,r9,#1
  680.     BEQ   skip_one_word_plotTwo
  681.  
  682.     ;one word plot
  683.     LDRB  r8,[r4,r3,LSR #16]
  684.     ADD   r3,r3,r2
  685.     LDRB  r14,[r4,r3,LSR #16]
  686.     ADD   r3,r3,r2
  687.     ADD   r8,r8,r14,LSL #8
  688.     LDRB  r14,[r4,r3,LSR #16]
  689.     ADD   r3,r3,r2
  690.     ADD   r8,r8,r14,LSL #16
  691.     LDRB  r14,[r4,r3,LSR #16]
  692.     ADD   r3,r3,r2
  693.     ADD   r8,r8,r14,LSL #24
  694.  
  695.     STR   r8,[r1,#320]
  696.     STR   r8,[r1,#640]
  697.     STR   r8,[r1,#960]
  698.     STR   r8,[r1],#4
  699.  
  700. skip_one_word_plotTwo
  701.     ;plot_end_pixels
  702.     CMP   r11,#0
  703.     BEQ   end_plotTwo
  704.  
  705.     LDRB  r10,[r4,r3,LSR #16]
  706.     ADD   r3,r3,r2
  707.     STRB  r10,[r1,#320]
  708.     STRB  r10,[r1,#640]
  709.     STRB  r10,[r1,#960]
  710.     STRB  r10,[r1],#1
  711.     CMP   r11,#1
  712.         BEQ   end_plotTwo
  713.  
  714.     LDRB  r10,[r4,r3,LSR #16]
  715.     ADD   r3,r3,r2
  716.     STRB  r10,[r1,#320]
  717.     STRB  r10,[r1,#640]
  718.     STRB  r10,[r1,#960]
  719.     STRB  r10,[r1],#1
  720.     CMP   r11,#2
  721.         BEQ   end_plotTwo
  722.  
  723.     LDRB  r10,[r4,r3,LSR #16]
  724.     ADD   r3,r3,r2
  725.     STRB  r10,[r1,#320]
  726.     STRB  r10,[r1,#640]
  727.     STRB  r10,[r1,#960]
  728.     STRB  r10,[r1],#1
  729.  
  730. end_plotTwo
  731.     B     NextLine
  732.  
  733.  
  734. ;**********************************
  735. ;
  736. ; Three Line draw
  737. ;
  738. ;**********************************
  739. ThreeLine
  740.     ;find offsets - start & end of line
  741.     AND   r7,r1,#3
  742.     RSB   r7,r7,#4
  743.     AND   r7,r7,#3
  744.  
  745.     ADD   r11,r1,r6
  746.     AND   r11,r11,#3
  747.  
  748.     ;plot start pixels
  749.     MOV   r3,#0
  750.     CMP   r7,#0
  751.     BEQ   skip_start_plotThree
  752.  
  753.     LDRB  r10,[r4,r3,LSR #16]
  754.     ADD   r3,r3,r2
  755.     STRB  r10,[r1,#320]
  756.     STRB  r10,[r1,#640]
  757.     STRB  r10,[r1,#960]
  758.     STRB  r10,[r1,#1280]
  759.     STRB  r10,[r1,#1600]
  760.     STRB  r10,[r1],#1
  761.     ;check for 1 pixel line
  762.     CMP   r6,#1
  763.         BEQ   end_plotTwo
  764.     CMP   r7,#1
  765.         BEQ   skip_start_plotThree
  766.  
  767.     LDRB  r10,[r4,r3,LSR #16]
  768.     ADD   r3,r3,r2
  769.     STRB  r10,[r1,#640]
  770.     STRB  r10,[r1,#320]
  771.     STRB  r10,[r1,#960]
  772.     STRB  r10,[r1,#1280]
  773.     STRB  r10,[r1,#1600]
  774.     STRB  r10,[r1],#1
  775.     CMP   r7,#2
  776.         BEQ   skip_start_plotThree
  777.  
  778.     LDRB  r10,[r4,r3,LSR #16]
  779.     ADD   r3,r3,r2
  780.     STRB  r10,[r1,#640]
  781.     STRB  r10,[r1,#320]
  782.     STRB  r10,[r1,#960]
  783.     STRB  r10,[r1,#1280]
  784.     STRB  r10,[r1,#1600]
  785.     STRB  r10,[r1],#1
  786.  
  787. skip_start_plotThree
  788.     ADD   r9,r7,r11
  789.     SUB   r9,r6,r9
  790.     MOV   r9,r9,LSR #2
  791.  
  792.     MOVS  r8,r9,LSR #2
  793.     BEQ   skip_four_word_plotThree
  794.  
  795. four_word_plotThree
  796.     LDRB  r5,[r4,r3,LSR #16]
  797.     ADD   r3,r3,r2
  798.     LDRB  r14,[r4,r3,LSR #16]
  799.     ADD   r3,r3,r2
  800.     ADD   r5,r5,r14,LSL #8
  801.     LDRB  r14,[r4,r3,LSR #16]
  802.     ADD   r3,r3,r2
  803.     ADD   r5,r5,r14,LSL #16
  804.     LDRB  r14,[r4,r3,LSR #16]
  805.     ADD   r3,r3,r2
  806.     ADD   r5,r5,r14,LSL #24
  807.  
  808.     LDRB  r6,[r4,r3,LSR #16]
  809.     ADD   r3,r3,r2
  810.     LDRB  r14,[r4,r3,LSR #16]
  811.     ADD   r3,r3,r2
  812.     ADD   r6,r6,r14,LSL #8
  813.     LDRB  r14,[r4,r3,LSR #16]
  814.     ADD   r3,r3,r2
  815.     ADD   r6,r6,r14,LSL #16
  816.     LDRB  r14,[r4,r3,LSR #16]
  817.     ADD   r3,r3,r2
  818.     ADD   r6,r6,r14,LSL #24
  819.  
  820.     LDRB  r7,[r4,r3,LSR #16]
  821.     ADD   r3,r3,r2
  822.     LDRB  r14,[r4,r3,LSR #16]
  823.     ADD   r3,r3,r2
  824.     ADD   r7,r7,r14,LSL #8
  825.     LDRB  r14,[r4,r3,LSR #16]
  826.     ADD   r3,r3,r2
  827.     ADD   r7,r7,r14,LSL #16
  828.     LDRB  r14,[r4,r3,LSR #16]
  829.     ADD   r3,r3,r2
  830.     ADD   r7,r7,r14,LSL #24
  831.  
  832.     LDRB  r8,[r4,r3,LSR #16]
  833.     ADD   r3,r3,r2
  834.     LDRB  r14,[r4,r3,LSR #16]
  835.     ADD   r3,r3,r2
  836.     ADD   r8,r8,r14,LSL #8
  837.     LDRB  r14,[r4,r3,LSR #16]
  838.     ADD   r3,r3,r2
  839.     ADD   r8,r8,r14,LSL #16
  840.     LDRB  r14,[r4,r3,LSR #16]
  841.     ADD   r3,r3,r2
  842.     ADD   r8,r8,r14,LSL #24
  843.  
  844.     ADD   r1,r1,#320
  845.     STMIA r1,{r5-r8}
  846.     ADD   r1,r1,#320
  847.     STMIA r1,{r5-r8}
  848.     ADD   r1,r1,#320
  849.     STMIA r1,{r5-r8}
  850.     ADD   r1,r1,#320
  851.     STMIA r1,{r5-r8}
  852.     ADD   r1,r1,#320
  853.     STMIA r1,{r5-r8}
  854.     SUB   r1,r1,#1600
  855.     STMIA r1!,{r5-r8}
  856.     SUB   r9,r9,#4
  857.         MOVS  r8,r9,LSR #2
  858.     BNE   four_word_plotThree
  859.  
  860. skip_four_word_plotThree
  861.     ANDS  r8,r9,#2
  862.     BEQ   skip_two_word_plotThree
  863.  
  864.     ;two word plot
  865.     LDRB  r7,[r4,r3,LSR #16]
  866.     ADD   r3,r3,r2
  867.     LDRB  r14,[r4,r3,LSR #16]
  868.     ADD   r3,r3,r2
  869.     ADD   r7,r7,r14,LSL #8
  870.     LDRB  r14,[r4,r3,LSR #16]
  871.     ADD   r3,r3,r2
  872.     ADD   r7,r7,r14,LSL #16
  873.     LDRB  r14,[r4,r3,LSR #16]
  874.     ADD   r3,r3,r2
  875.     ADD   r7,r7,r14,LSL #24
  876.  
  877.     LDRB  r8,[r4,r3,LSR #16]
  878.     ADD   r3,r3,r2
  879.     LDRB  r14,[r4,r3,LSR #16]
  880.     ADD   r3,r3,r2
  881.     ADD   r8,r8,r14,LSL #8
  882.     LDRB  r14,[r4,r3,LSR #16]
  883.     ADD   r3,r3,r2
  884.     ADD   r8,r8,r14,LSL #16
  885.     LDRB  r14,[r4,r3,LSR #16]
  886.     ADD   r3,r3,r2
  887.     ADD   r8,r8,r14,LSL #24
  888.  
  889.     ADD   r1,r1,#320
  890.     STMIA r1,{r7-r8}
  891.     ADD   r1,r1,#320
  892.     STMIA r1,{r7-r8}
  893.     ADD   r1,r1,#320
  894.     STMIA r1,{r7-r8}
  895.     ADD   r1,r1,#320
  896.     STMIA r1,{r7-r8}
  897.     ADD   r1,r1,#320
  898.     STMIA r1,{r7-r8}
  899.     SUB   r1,r1,#1600
  900.     STMIA r1!,{r7-r8}
  901.     SUB   r9,r9,#2
  902.  
  903. skip_two_word_plotThree
  904.     ANDS  r8,r9,#1
  905.     BEQ   skip_one_word_plotThree
  906.  
  907.     ;one word plot
  908.     LDRB  r8,[r4,r3,LSR #16]
  909.     ADD   r3,r3,r2
  910.     LDRB  r14,[r4,r3,LSR #16]
  911.     ADD   r3,r3,r2
  912.     ADD   r8,r8,r14,LSL #8
  913.     LDRB  r14,[r4,r3,LSR #16]
  914.     ADD   r3,r3,r2
  915.     ADD   r8,r8,r14,LSL #16
  916.     LDRB  r14,[r4,r3,LSR #16]
  917.     ADD   r3,r3,r2
  918.     ADD   r8,r8,r14,LSL #24
  919.  
  920.     STR   r8,[r1,#320]
  921.     STR   r8,[r1,#640]
  922.     STR   r8,[r1,#960]
  923.     STR   r8,[r1,#1280]
  924.     STR   r8,[r1,#1600]
  925.     STR   r8,[r1],#4
  926.  
  927. skip_one_word_plotThree
  928.     ;plot_end_pixels
  929.     CMP   r11,#0
  930.     BEQ   end_plotThree
  931.  
  932.     LDRB  r10,[r4,r3,LSR #16]
  933.     ADD   r3,r3,r2
  934.     STRB  r10,[r1,#320]
  935.     STRB  r10,[r1,#640]
  936.     STRB  r10,[r1,#960]
  937.     STRB  r10,[r1,#1280]
  938.     STRB  r10,[r1,#1600]
  939.     STRB  r10,[r1],#1
  940.     CMP   r11,#1
  941.         BEQ   end_plotThree
  942.  
  943.     LDRB  r10,[r4,r3,LSR #16]
  944.     ADD   r3,r3,r2
  945.     STRB  r10,[r1,#640]
  946.     STRB  r10,[r1,#320]
  947.     STRB  r10,[r1,#960]
  948.     STRB  r10,[r1,#1280]
  949.     STRB  r10,[r1,#1600]
  950.     STRB  r10,[r1],#1
  951.     CMP   r11,#2
  952.         BEQ   end_plotThree
  953.  
  954.     LDRB  r10,[r4,r3,LSR #16]
  955.     ADD   r3,r3,r2
  956.     STRB  r10,[r1,#640]
  957.     STRB  r10,[r1,#320]
  958.     STRB  r10,[r1,#960]
  959.     STRB  r10,[r1,#1280]
  960.     STRB  r10,[r1,#1600]
  961.     STRB  r10,[r1],#1
  962.  
  963. end_plotThree
  964.     B     NextLine
  965.  
  966. ;**********************************
  967. ;
  968. ; Four Line draw
  969. ;
  970. ;**********************************
  971. FourLine
  972.     ;find offsets - start & end of line
  973.     AND   r7,r1,#3
  974.     RSB   r7,r7,#4
  975.     AND   r7,r7,#3
  976.  
  977.     ADD   r11,r1,r6
  978.     AND   r11,r11,#3
  979.  
  980.     ;plot start pixels
  981.     MOV   r3,#0
  982.     CMP   r7,#0
  983.     BEQ   skip_start_plotFour
  984.  
  985.     LDRB  r10,[r4,r3,LSR #16]
  986.     ADD   r3,r3,r2
  987.     STRB  r10,[r1,#960]
  988.     STRB  r10,[r1,#640]
  989.     STRB  r10,[r1,#320]
  990.     STRB  r10,[r1,#1280]
  991.     STRB  r10,[r1,#1600]
  992.     STRB  r10,[r1,#1920]
  993.     STRB  r10,[r1,#2240]
  994.     STRB  r10,[r1],#1
  995.     ;check for 1 pixel line
  996.     CMP   r6,#1
  997.         BEQ   end_plotFour
  998.     CMP   r7,#1
  999.         BEQ   skip_start_plotFour
  1000.  
  1001.     LDRB  r10,[r4,r3,LSR #16]
  1002.     ADD   r3,r3,r2
  1003.     STRB  r10,[r1,#960]
  1004.     STRB  r10,[r1,#640]
  1005.     STRB  r10,[r1,#320]
  1006.     STRB  r10,[r1,#1280]
  1007.     STRB  r10,[r1,#1600]
  1008.     STRB  r10,[r1,#1920]
  1009.     STRB  r10,[r1,#2240]
  1010.     STRB  r10,[r1],#1
  1011.     CMP   r7,#2
  1012.         BEQ   skip_start_plotFour
  1013.  
  1014.     LDRB  r10,[r4,r3,LSR #16]
  1015.     ADD   r3,r3,r2
  1016.     STRB  r10,[r1,#960]
  1017.     STRB  r10,[r1,#640]
  1018.     STRB  r10,[r1,#320]
  1019.     STRB  r10,[r1,#1280]
  1020.     STRB  r10,[r1,#1600]
  1021.     STRB  r10,[r1,#1920]
  1022.     STRB  r10,[r1,#2240]
  1023.     STRB  r10,[r1],#1
  1024.  
  1025. skip_start_plotFour
  1026.     ADD   r9,r7,r11
  1027.     SUB   r9,r6,r9
  1028.     MOV   r9,r9,LSR #2
  1029.  
  1030.     MOVS  r8,r9,LSR #2
  1031.     BEQ   skip_four_word_plotFour
  1032.  
  1033. four_word_plotFour
  1034.     LDRB  r5,[r4,r3,LSR #16]
  1035.     ADD   r3,r3,r2
  1036.     LDRB  r14,[r4,r3,LSR #16]
  1037.     ADD   r3,r3,r2
  1038.     ADD   r5,r5,r14,LSL #8
  1039.     LDRB  r14,[r4,r3,LSR #16]
  1040.     ADD   r3,r3,r2
  1041.     ADD   r5,r5,r14,LSL #16
  1042.     LDRB  r14,[r4,r3,LSR #16]
  1043.     ADD   r3,r3,r2
  1044.     ADD   r5,r5,r14,LSL #24
  1045.  
  1046.     LDRB  r6,[r4,r3,LSR #16]
  1047.     ADD   r3,r3,r2
  1048.     LDRB  r14,[r4,r3,LSR #16]
  1049.     ADD   r3,r3,r2
  1050.     ADD   r6,r6,r14,LSL #8
  1051.     LDRB  r14,[r4,r3,LSR #16]
  1052.     ADD   r3,r3,r2
  1053.     ADD   r6,r6,r14,LSL #16
  1054.     LDRB  r14,[r4,r3,LSR #16]
  1055.     ADD   r3,r3,r2
  1056.     ADD   r6,r6,r14,LSL #24
  1057.  
  1058.     LDRB  r7,[r4,r3,LSR #16]
  1059.     ADD   r3,r3,r2
  1060.     LDRB  r14,[r4,r3,LSR #16]
  1061.     ADD   r3,r3,r2
  1062.     ADD   r7,r7,r14,LSL #8
  1063.     LDRB  r14,[r4,r3,LSR #16]
  1064.     ADD   r3,r3,r2
  1065.     ADD   r7,r7,r14,LSL #16
  1066.     LDRB  r14,[r4,r3,LSR #16]
  1067.     ADD   r3,r3,r2
  1068.     ADD   r7,r7,r14,LSL #24
  1069.  
  1070.     LDRB  r8,[r4,r3,LSR #16]
  1071.     ADD   r3,r3,r2
  1072.     LDRB  r14,[r4,r3,LSR #16]
  1073.     ADD   r3,r3,r2
  1074.     ADD   r8,r8,r14,LSL #8
  1075.     LDRB  r14,[r4,r3,LSR #16]
  1076.     ADD   r3,r3,r2
  1077.     ADD   r8,r8,r14,LSL #16
  1078.     LDRB  r14,[r4,r3,LSR #16]
  1079.     ADD   r3,r3,r2
  1080.     ADD   r8,r8,r14,LSL #24
  1081.  
  1082.     ADD   r1,r1,#320
  1083.     STMIA r1,{r5-r8}
  1084.     ADD   r1,r1,#320
  1085.     STMIA r1,{r5-r8}
  1086.     ADD   r1,r1,#320
  1087.     STMIA r1,{r5-r8}
  1088.     ADD   r1,r1,#320
  1089.     STMIA r1,{r5-r8}
  1090.     ADD   r1,r1,#320
  1091.     STMIA r1,{r5-r8}
  1092.     ADD   r1,r1,#320
  1093.     STMIA r1,{r5-r8}
  1094.     ADD   r1,r1,#320
  1095.     STMIA r1,{r5-r8}
  1096.     SUB   r1,r1,#2240
  1097.     STMIA r1!,{r5-r8}
  1098.     SUB   r9,r9,#4
  1099.         MOVS  r8,r9,LSR #2
  1100.     BNE   four_word_plotFour
  1101.  
  1102. skip_four_word_plotFour
  1103.     ANDS  r8,r9,#2
  1104.     BEQ   skip_two_word_plotFour
  1105.  
  1106.     ;two word plot
  1107.     LDRB  r7,[r4,r3,LSR #16]
  1108.     ADD   r3,r3,r2
  1109.     LDRB  r14,[r4,r3,LSR #16]
  1110.     ADD   r3,r3,r2
  1111.     ADD   r7,r7,r14,LSL #8
  1112.     LDRB  r14,[r4,r3,LSR #16]
  1113.     ADD   r3,r3,r2
  1114.     ADD   r7,r7,r14,LSL #16
  1115.     LDRB  r14,[r4,r3,LSR #16]
  1116.     ADD   r3,r3,r2
  1117.     ADD   r7,r7,r14,LSL #24
  1118.  
  1119.     LDRB  r8,[r4,r3,LSR #16]
  1120.     ADD   r3,r3,r2
  1121.     LDRB  r14,[r4,r3,LSR #16]
  1122.     ADD   r3,r3,r2
  1123.     ADD   r8,r8,r14,LSL #8
  1124.     LDRB  r14,[r4,r3,LSR #16]
  1125.     ADD   r3,r3,r2
  1126.     ADD   r8,r8,r14,LSL #16
  1127.     LDRB  r14,[r4,r3,LSR #16]
  1128.     ADD   r3,r3,r2
  1129.     ADD   r8,r8,r14,LSL #24
  1130.  
  1131.     ADD   r1,r1,#320
  1132.     STMIA r1,{r7-r8}
  1133.     ADD   r1,r1,#320
  1134.     STMIA r1,{r7-r8}
  1135.     ADD   r1,r1,#320
  1136.     STMIA r1,{r7-r8}
  1137.     ADD   r1,r1,#320
  1138.     STMIA r1,{r7-r8}
  1139.     ADD   r1,r1,#320
  1140.     STMIA r1,{r7-r8}
  1141.     ADD   r1,r1,#320
  1142.     STMIA r1,{r7-r8}
  1143.     ADD   r1,r1,#320
  1144.     STMIA r1,{r7-r8}
  1145.     SUB   r1,r1,#2240
  1146.     STMIA r1!,{r7-r8}
  1147.     SUB   r9,r9,#2
  1148.  
  1149. skip_two_word_plotFour
  1150.     ANDS  r8,r9,#1
  1151.     BEQ   skip_one_word_plotFour
  1152.  
  1153.     ;one word plot
  1154.     LDRB  r8,[r4,r3,LSR #16]
  1155.     ADD   r3,r3,r2
  1156.     LDRB  r14,[r4,r3,LSR #16]
  1157.     ADD   r3,r3,r2
  1158.     ADD   r8,r8,r14,LSL #8
  1159.     LDRB  r14,[r4,r3,LSR #16]
  1160.     ADD   r3,r3,r2
  1161.     ADD   r8,r8,r14,LSL #16
  1162.     LDRB  r14,[r4,r3,LSR #16]
  1163.     ADD   r3,r3,r2
  1164.     ADD   r8,r8,r14,LSL #24
  1165.  
  1166.     STR   r8,[r1,#960]
  1167.     STR   r8,[r1,#640]
  1168.     STR   r8,[r1,#320]
  1169.     STR   r8,[r1,#1280]
  1170.     STR   r8,[r1,#1600]
  1171.     STR   r8,[r1,#1920]
  1172.     STR   r8,[r1,#2240]
  1173.     STR   r8,[r1],#4
  1174.  
  1175. skip_one_word_plotFour
  1176.     ;plot_end_pixels
  1177.     CMP   r11,#0
  1178.     BEQ   end_plotFour
  1179.  
  1180.     LDRB  r10,[r4,r3,LSR #16]
  1181.     ADD   r3,r3,r2
  1182.     STRB  r10,[r1,#960]
  1183.     STRB  r10,[r1,#320]
  1184.     STRB  r10,[r1,#640]
  1185.     STRB  r10,[r1,#960]
  1186.     STRB  r10,[r1,#1280]
  1187.     STRB  r10,[r1,#1600]
  1188.     STRB  r10,[r1,#1920]
  1189.     STRB  r10,[r1,#2240]
  1190.     STRB  r10,[r1],#1
  1191.     CMP   r11,#1
  1192.         BEQ   end_plotFour
  1193.  
  1194.     LDRB  r10,[r4,r3,LSR #16]
  1195.     ADD   r3,r3,r2
  1196.     STRB  r10,[r1,#960]
  1197.     STRB  r10,[r1,#640]
  1198.     STRB  r10,[r1,#320]
  1199.     STRB  r10,[r1,#1280]
  1200.     STRB  r10,[r1,#1600]
  1201.     STRB  r10,[r1,#1920]
  1202.     STRB  r10,[r1,#2240]
  1203.     STRB  r10,[r1],#1
  1204.     CMP   r11,#2
  1205.         BEQ   end_plotFour
  1206.  
  1207.     LDRB  r10,[r4,r3,LSR #16]
  1208.     ADD   r3,r3,r2
  1209.     STRB  r10,[r1,#960]
  1210.     STRB  r10,[r1,#640]
  1211.     STRB  r10,[r1,#320]
  1212.     STRB  r10,[r1,#1280]
  1213.     STRB  r10,[r1,#1600]
  1214.     STRB  r10,[r1,#1920]
  1215.     STRB  r10,[r1,#2240]
  1216.     STRB  r10,[r1],#1
  1217.  
  1218. end_plotFour
  1219.     B     NextLine
  1220.  
  1221.  
  1222.  
  1223.  
  1224. EndPlotSprite
  1225.         LDMFD   r13!,{r0-r12,pc}
  1226.  
  1227.     END
  1228.