/[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 263 by thrust26, Mon Feb 8 16:19:34 2010 UTC revision 264 by thrust26, Mon Feb 8 16:59:22 2010 UTC
# Line 10  Line 10 
10  ;517 final optimization at mainly_horizontal  ;517 final optimization at mainly_horizontal
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  ;473 final optimization for mainly_vertical (37.89)
14    
15  ; TODOs:  ; TODOs:
16  ; + chunking (-35)  ; + chunking (-35)
# Line 57  lastSum         .dsb 1 Line 57  lastSum         .dsb 1
57    
58      .dsb 256-(*&255)      .dsb 256-(*&255)
59    
60    ;**********************************************************
61  draw_totaly_vertical_8  draw_totaly_vertical_8
62  .(  .(
63      ldx _CurrentPixelX      ldx _CurrentPixelX
# Line 92  skip Line 93  skip
93  .)  .)
94    
95    
96    ;**********************************************************
97  ;  ;
98  ; Expects the following variables to be set when called:  ; Expects the following variables to be set when called:
99  ; _CurrentPixelX  ; _CurrentPixelX
# Line 168  cur_smaller                 ; x1<x2 Line 169  cur_smaller                 ; x1<x2
169  end  end
170  .)  .)
171    
172      jmp alignIt  ;    jmp alignIt
173    ;
174      .dsb 256-(*&255)  ;    .dsb 256-(*&255)
175    ;
176  alignIt  ;alignIt
177      ; 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
178      ldy dy      ldy dy
179      beq draw_totaly_horizontal_8      beq draw_totaly_horizontal_8
# Line 180  alignIt Line 181  alignIt
181      bcc draw_mainly_horizontal_8      bcc draw_mainly_horizontal_8
182      jmp draw_mainly_vertical_8      jmp draw_mainly_vertical_8
183    
184    ;**********************************************************
185  draw_totaly_horizontal_8  draw_totaly_horizontal_8
186  .(  .(
187      ; here we have DY in Y, and the OPCODE in A      ; here we have DY in Y, and the OPCODE in A
188      sta _outer_patch    ; Write a (dex / nop / inx) instruction      sta _outer_patch    ; Write a (dex / nop / inx) instruction
189    
190      ldx _OtherPixelX      ldx _OtherPixelX
191      sta __auto_cpx+1      stx __auto_cpx+1
192    
193      ldx _CurrentPixelX      ldx _CurrentPixelX
194    
# Line 203  _outer_patch Line 205  _outer_patch
205      inx      inx
206    
207  __auto_cpx  __auto_cpx
208      cpx #00                 ; At the endpoint yet?      cpx #00                     ; At the endpoint yet?
209      bne outer_loop      bne outer_loop
210      rts      rts
211  .)  .)
212    
213    ;**********************************************************
214  draw_mainly_horizontal_8  draw_mainly_horizontal_8
215  .(  .(
216      tax      tax
# Line 259  endPatch Line 262  endPatch
262      eor #$ff      eor #$ff
263      clc      clc
264  ; a = sum, x = dX+1  ; a = sum, x = dX+1
265    ;----------------------------------------------------------
266  loopX  loopX
267      sta save_a              ; 3 =  3      sta save_a              ; 3 =  3
268  loopY  loopY
# Line 286  __auto_dx Line 289  __auto_dx
289      lda tmp0+0              ; 3      lda tmp0+0              ; 3
290      adc #ROW_SIZE           ; 2      adc #ROW_SIZE           ; 2
291      sta tmp0+0              ; 3      sta tmp0+0              ; 3
292      bcc loopY               ; 2/3=10/11 ~84% taken      bcc loopY               ; 2/3=10/11 ~84.4% taken
293      inc tmp0+1              ; 5      inc tmp0+1              ; 5
294      clc                     ; 2      clc                     ; 2
295      bcc loopY               ; 3 = 10      bcc loopY               ; 3 = 10
296  ; average: 12.44  ; average: 12.40
297    
298  exitLoop  exitLoop
299      rts      rts
300  ; Timings:  ; Timings:
301  ; x++/y  : 34  ; x++/y  : 34
302  ; x++/y++: 47.44  ; x++/y++: 47.40
303  ; average: 40.72  ; average: 40.70
304  .)  .)
305    
306        .dsb 256-(*&255)
307    ;**********************************************************
308  draw_very_horizontal_8  draw_very_horizontal_8
309  .(  .(
310  ; dX > 2*dY, here we use "chunking"  ; dX > 2*dY, here we use "chunking"
# Line 373  endPatch Line 378  endPatch
378      jmp loopX      jmp loopX
379  ; a = sum, x = dX+1, y = ptr-offset  ; a = sum, x = dX+1, y = ptr-offset
380    
381      .dsb 256-(*&255)  ;----------------------------------------------------------
   
382  nextColumn                  ;  nextColumn                  ;
383      tax                     ; 2      tax                     ; 2
384      lda chunk               ; 3      lda chunk               ; 3
# Line 444  loopXEnd Line 448  loopXEnd
448  contColumnEnd               ;   =  9.85  contColumnEnd               ;   =  9.85
449  __auto_dy2  __auto_dy2
450      adc #00                 ; 2         +DY      adc #00                 ; 2         +DY
451      bcc loopXEnd            ; 2/3=11/12 ~50% taken      bcc loopXEnd            ; 2/3= 4/5  ~25% taken
452    
453  ; plot last chunk:  ; plot last chunk:
454  __auto_pot3  __auto_pot3
# Line 481  Pot2NTbl Line 485  Pot2NTbl
485      .byte   %00111000, %00111100, %00111110, %00111111      .byte   %00111000, %00111100, %00111110, %00111111
486  .)  .)
487    
   
488      .dsb 256-(*&255)      .dsb 256-(*&255)
489    ;**********************************************************
490  ;  ;
491  ; This code is used when the things are moving faster  ; This code is used when the things are moving faster
492  ; vertically than horizontally  ; vertically than horizontally
# Line 527  endPatch Line 531  endPatch
531      stx __auto_cpY+1      stx __auto_cpY+1
532      sta __auto_yHi      sta __auto_yHi
533  ; setup X  ; setup X
534  ;    tya                     ;           y = dY      ldx dx                  ;           X = dx
 ;    tax  
     ldx dx  
535      stx __auto_dx1+1      stx __auto_dx1+1
536      stx __auto_dx2+1      stx __auto_dx2+1
 ;    inx                     ;           x = dY+1  
537  ; setup current bit:  ; setup current bit:
538      ldy _CurrentPixelX      ldy _CurrentPixelX
539      lda _TableBit6Reverse,y ; 4      lda _TableBit6Reverse,y ; 4
540      sta curBit      sta curBit
541  ; setup pointer and Y:  ; setup pointer and Y:
542  ; TODO: self-modyfing code?  ; TODO: self-modyfing code for the ptrs?
543      lda _TableDiv6,y      lda _TableDiv6,y
544      clc      clc
545      adc tmp0      adc tmp0
# Line 555  skipTmp0 Line 556  skipTmp0
556      eor #$ff                ;           -DY/2      eor #$ff                ;           -DY/2
557      clc                     ; 2      clc                     ; 2
558      bcc loopY               ; 3      bcc loopY               ; 3
559  ; a = sum, y = tmp0, x = dY+1, tmp0 = 0  ; a = sum, y = tmp0, x = dX, tmp0 = 0
560    ;----------------------------------------------------------
561  incHiPtr                    ;  incHiPtr                    ;
562      inc tmp0+1              ; 5      inc tmp0+1              ; 5
563      clc                     ; 2      clc                     ; 2
# Line 618  contHiPtrEnd                ;   =  9.72 Line 619  contHiPtrEnd                ;   =  9.72
619      txa                     ; 2      txa                     ; 2
620  __auto_dx2  __auto_dx2
621      adc #00                 ; 2         +DX      adc #00                 ; 2         +DX
622      bcc loopYEnd            ; 2/3= 6/7  ~50% taken      bcc loopYEnd            ; 2/3= 6/7  ~25% taken
623      rts      rts
624  ;----------------------------------------------------------  ;----------------------------------------------------------
625  nextColumn  nextColumn
# Line 643  incHiPtrEnd                 ; 9 Line 644  incHiPtrEnd                 ; 9
644    
645  ; *** total timings: ***  ; *** total timings: ***
646  ; draw_very_horizontal_8   (29.6%): 27.20  ; draw_very_horizontal_8   (29.6%): 27.20
647  ; draw_mainly_horizontal_8 (20.4%): 40.72  ; draw_mainly_horizontal_8 (20.4%): 40.70
648  ; draw_mainly_vertical_8   (50.0%): 43.06  ; draw_mainly_vertical_8   (50.0%): 43.06
649  ;----------------------------------------  ;----------------------------------------
650  ; total average           (100.0%): 38.89  ; total average           (100.0%): 37.89
651    
652    
653    

Legend:
Removed from v.263  
changed lines
  Added in v.264

  ViewVC Help
Powered by ViewVC 1.1.26