/[projet1]/public/oric/routines/rasterization/linebench/line8.s
Defence Force logotype

Diff of /public/oric/routines/rasterization/linebench/line8.s

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 266 by thrust26, Mon Feb 8 17:33:45 2010 UTC revision 267 by thrust26, Mon Feb 8 22:50:29 2010 UTC
# Line 11  Line 11 
11  ;501 chunking, initial version  ;501 chunking, initial version
12  ;482 optimized chunking (avg: 38.91 cylces)  ;482 optimized chunking (avg: 38.91 cylces)
13  ;473 final optimization for mainly_vertical (37.89 -> 38.34 corrected)  ;473 final optimization for mainly_vertical (37.89 -> 38.34 corrected)
14    ;468 a weird stunt on mainly_horizontal (38.07)
15    
16  ; TODOs:  ; TODOs:
17  ; + chunking (-35)  ; + chunking (-35)
# Line 63  draw_totaly_vertical_8 Line 64  draw_totaly_vertical_8
64      ldx _CurrentPixelX      ldx _CurrentPixelX
65      ldy _TableDiv6,x      ldy _TableDiv6,x
66      lda _TableBit6Reverse,x     ; 4      lda _TableBit6Reverse,x     ; 4
67        and #$7f
68      sta _mask_patch+1      sta _mask_patch+1
69      ldx dy      ldx dy
70      inx      inx
# Line 165  cur_smaller                 ; x1<x2 Line 167  cur_smaller                 ; x1<x2
167  end  end
168  .)  .)
169    
170  ;    jmp alignIt      jmp alignIt
171  ;  
172  ;    .dsb 256-(*&255)      .dsb 256-(*&255)
173  ;  
174  ;alignIt  alignIt
175      ; Compute slope and call the specialized code for mostly horizontal or vertical lines      ; Compute slope and call the specialized code for mostly horizontal or vertical lines
176      ldy dy      ldy dy
177      beq draw_totaly_horizontal_8      beq draw_totaly_horizontal_8
# Line 194  draw_totaly_horizontal_8 Line 196  draw_totaly_horizontal_8
196  outer_loop  outer_loop
197      ldy _TableDiv6,x      ldy _TableDiv6,x
198      lda _TableBit6Reverse,x     ; 4      lda _TableBit6Reverse,x     ; 4
199        and #$7f
200      eor (tmp0),y                ; 5      eor (tmp0),y                ; 5
201      sta (tmp0),y                ; 6      sta (tmp0),y                ; 6
202    
# Line 213  draw_mainly_horizontal_8 Line 216  draw_mainly_horizontal_8
216      lda dx      lda dx
217      lsr      lsr
218      cmp dy      cmp dy
219      bcs draw_very_horizontal_8      bcc contMainly
220        jmp draw_very_horizontal_8
221    contMainly
222    
223  ; here we have DY in Y, and the OPCODE (inx, dex) in A  ; here we have DY in Y, and the OPCODE (inx, dex) in A
224      sty __auto_dy+1      sty __auto_dy+1
# Line 222  draw_mainly_horizontal_8 Line 227  draw_mainly_horizontal_8
227      cpx #_INX      cpx #_INX
228      beq doInx      beq doInx
229    
230      lda #<_TableDiv6-1          ; == 0      lda #_DEY
231        sta __auto_stepx
232        lda #$ff
233        sta __auto_cpy+1
234        lda #_DEC_ZP
235        sta __auto_yHi
236    
237        lda #<_TableDiv6            ; == 1
238  ;    clc                        ; _DEX < _INX  ;    clc                        ; _DEX < _INX
239      adc _OtherPixelX      adc _OtherPixelX
240      sta __auto_div6+1      sta __auto_div6+1
# Line 230  draw_mainly_horizontal_8 Line 242  draw_mainly_horizontal_8
242  ;    clc  ;    clc
243      adc _OtherPixelX      adc _OtherPixelX
244    
245      ldx #>_TableDiv6      ldy #>_TableDiv6
246      ldy #>_TableBit6Reverse ;      ldx #>_TableBit6Reverse ;
247      bne endPatch      bne endPatch
248    
249  doInx  doInx
250      lda #X_SIZE-1      lda #_INY
251        sta __auto_stepx
252        lda #$00
253        sta __auto_cpy+1
254        lda #_INC_ZP
255        sta __auto_yHi
256    
257        lda #X_SIZE
258  ;    sec  ;    sec
259      sbc _OtherPixelX      sbc _OtherPixelX
260      sta __auto_div6+1      sta __auto_div6+1
# Line 243  doInx Line 262  doInx
262  ;    sec  ;    sec
263      sbc _OtherPixelX      sbc _OtherPixelX
264    
265      ldx #>_TableDiv6Rev      ldy #>_TableDiv6Rev
266      ldy #>_TableBit6        ;      ldx #>_TableBit6        ;
267  endPatch  endPatch
268      sta __auto_bit6+1      sta __auto_bit6+1
269      stx __auto_div6+2      sta __auto_bit6_0+1
270      sty __auto_bit6+2      stx __auto_bit6+2
271        stx __auto_bit6_0+2
272        sty __auto_div6+2
273    
274        ldx dx
275    __auto_div6
276        lda _TableDiv6,x
277        clc
278        adc tmp0
279        tay
280        bcc skipInc
281        inc tmp0+1
282    skipInc
283        lda #0
284        sta tmp0
285    
286      lda dx      lda dx
287      tax  ;    tax
288      inx                     ; 2         +1 since we count to 0      inx                     ; 2         +1 since we count to 0
289      sta __auto_dx+1      sta __auto_dx+1
290      lsr      lsr
291      eor #$ff      eor #$ff
292      clc      clc
293    
294        sta save_a              ; 3 =  3
295    __auto_bit6_0
296        lda _TableBit6Reverse-1,x;4
297        and #$7f
298        bcc contColumn
299    
300  ; a = sum, x = dX+1  ; a = sum, x = dX+1
301  ;----------------------------------------------------------  ;----------------------------------------------------------
302  loopX  loopX
303      sta save_a              ; 3 =  3      sta save_a              ; 3 =  3
304  loopY  loopY
     ; Draw the pixel  
 __auto_div6  
     ldy _TableDiv6-1,x      ; 4  
305  __auto_bit6  __auto_bit6
306      lda _TableBit6Reverse-1,x;4      lda _TableBit6Reverse-1,x;4
307      eor (tmp0),y            ; 5*      bmi nextColumn          ; 2/14      16.7% taken
308      sta (tmp0),y            ; 6*= 19  contColumn
309        eor (tmp0),y            ; 5
310        sta (tmp0),y            ; 6 = 19
311    
312      dex                     ; 2         Step in x      dex                     ; 2         Step in x
313      beq exitLoop            ; 2/3       At the endpoint yet?      beq exitLoop            ; 2/3       At the endpoint yet?
# Line 282  __auto_dx Line 321  __auto_dx
321      sta save_a              ; 3 =  5      sta save_a              ; 3 =  5
322    
323  ; update the screen address:  ; update the screen address:
324      lda tmp0+0              ; 3      tya                     ; 2
325      adc #ROW_SIZE           ; 2      adc #ROW_SIZE           ; 2
326      sta tmp0+0              ; 3      tay                     ; 2
327      bcc loopY               ; 2/3=10/11 ~84.4% taken      bcc loopY               ; 2/3= 8/9  ~84.4% taken
328      inc tmp0+1              ; 5      inc tmp0+1              ; 5
329      clc                     ; 2      clc                     ; 2
330      bcc loopY               ; 3 = 10      bcc loopY               ; 3 = 10
331  ; average: 12.40  ; average: 10.40
332    
333  exitLoop  exitLoop
334      rts      rts
335    
336    nextColumn
337        and #$7f                ; 2         remove signal bit
338    __auto_stepx
339        iny                     ; 2
340    __auto_cpy
341        cpy #$00                ; 2
342        clc                     ; 2
343        bne contColumn          ; 2/3=10/11
344    __auto_yHi
345        inc tmp0+1              ; 5
346        bcc contColumn          ; 3
347    
348  ; Timings:  ; Timings:
349  ; x++/y  : 34    (33.3%)  ; x++/y  : 34.00 (33.3%)
350  ; x++/y++: 47.40 (66.7%)  ; x++/y++: 45.40 (66.7%)
351  ; average: 42.94  ; average: 41.61
352  .)  .)
353    
354      .dsb 256-(*&255)      .dsb 256-(*&255)
# Line 371  endPatch Line 423  endPatch
423      sta lastSum             ; 3         this is used for the last line segment      sta lastSum             ; 3         this is used for the last line segment
424      eor #$ff                ;           = -dx/2      eor #$ff                ;           = -dx/2
425      clc      clc
426      jmp loopX      bcc loopX
427  ; a = sum, x = dX+1, y = ptr-offset  ; a = sum, x = dX+1, y = ptr-offset
428    
429  ;----------------------------------------------------------  ;----------------------------------------------------------
# Line 533  endPatch Line 585  endPatch
585  ; setup current bit:  ; setup current bit:
586      ldy _CurrentPixelX      ldy _CurrentPixelX
587      lda _TableBit6Reverse,y ; 4      lda _TableBit6Reverse,y ; 4
588        and #$7f
589      sta curBit      sta curBit
590  ; setup pointer and Y:  ; setup pointer and Y:
591  ; TODO: self-modyfing code for the ptrs?  ; TODO: self-modyfing code for the ptrs?
# Line 640  incHiPtrEnd                 ; 9 Line 693  incHiPtrEnd                 ; 9
693    
694  ; *** total timings: ***  ; *** total timings: ***
695  ; draw_very_horizontal_8   (29.6%): 27.20  ; draw_very_horizontal_8   (29.6%): 27.20
696  ; draw_mainly_horizontal_8 (20.4%): 42.94 <- corrected!  ; draw_mainly_horizontal_8 (20.4%): 41.61 <- corrected!
697  ; draw_mainly_vertical_8   (50.0%): 43.06  ; draw_mainly_vertical_8   (50.0%): 43.06
698  ;----------------------------------------  ;----------------------------------------
699  ; total average           (100.0%): 38.34  ; total average           (100.0%): 38.07
   
   
   

Legend:
Removed from v.266  
changed lines
  Added in v.267

  ViewVC Help
Powered by ViewVC 1.1.26