/[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 257 by thrust26, Sat Feb 6 23:15:29 2010 UTC revision 258 by thrust26, Sun Feb 7 14:05:11 2010 UTC
# Line 5  Line 5 
5  ;588  ;588
6  ;583 after alignment  ;583 after alignment
7  ;579  ;579
8  ;534 redid mainly vertical  ;534 redid mainly_vertical
9  ;529 removed page penalty  ;529 removed page penalty
10    ;517 final optimization at mainly_horizontal
11    
12      .zero      .zero
13    
# Line 25  save_a          .dsb 1 Line 26  save_a          .dsb 1
26  save_y          .dsb 1  save_y          .dsb 1
27  curBit          .dsb 1  curBit          .dsb 1
28    
29  #define ROW_SIZE    40  #define X_SIZE      240
30    #define ROW_SIZE    X_SIZE/6
31    
32  #define _NOP        $ea  #define _NOP        $ea
33  #define _INX        $e8  #define _INX        $e8
# Line 37  curBit          .dsb 1 Line 39  curBit          .dsb 1
39  #define _INC_ZP     $e6  #define _INC_ZP     $e6
40  #define _DEC_ZP     $c6  #define _DEC_ZP     $c6
41    
42    
43      .text      .text
44    
45      .dsb 256-(*&255)      .dsb 256-(*&255)
# Line 139  end Line 142  end
142      bcc cur_smaller      bcc cur_smaller
143    
144  cur_bigger                  ; x1>x2  cur_bigger                  ; x1>x2
145      lda #_DEX               ; dex      lda #_DEX
146      bne end      bne end
147    
148  cur_smaller                 ; x1<x2  cur_smaller                 ; x1<x2
# Line 148  cur_smaller                 ; x1<x2 Line 151  cur_smaller                 ; x1<x2
151      adc #1      adc #1
152      sta dx      sta dx
153    
154      lda #_INX               ; inx      lda #_INX
155  end  end
156  .)  .)
157    
# Line 161  alignIt Line 164  alignIt
164      ldy dy      ldy dy
165      beq draw_totaly_horizontal_8      beq draw_totaly_horizontal_8
166      cpy dx      cpy dx
167      bcc draw_mainly_horizontal_8      bcc draw_mainly_horizontal_8_new
168      jmp draw_mainly_vertical_8      jmp draw_mainly_vertical_8
169    
170    draw_totaly_horizontal_8
171        .(
172        ; here we have DY in Y, and the OPCODE in A
173        sta _outer_patch    ; Write a (dex / nop / inx) instruction
174    
175        ldx _OtherPixelX
176        sta __auto_cpx+1
177    
178        ldx _CurrentPixelX
179    
180        ;
181        ; Draw loop
182        ;
183    outer_loop
184        ldy _TableDiv6,x
185        lda _TableBit6Reverse,x     ; 4
186        eor (tmp0),y                ; 5
187        sta (tmp0),y                ; 6
188    
189    _outer_patch
190        inx
191    
192    __auto_cpx
193        cpx #00                 ; At the endpoint yet?
194        bne outer_loop
195        rts
196    .)
197    
198  draw_mainly_horizontal_8  draw_mainly_horizontal_8
199      .(      .(
200      ; here we have DY in Y, and the OPCODE in A      ; here we have DY in Y, and the OPCODE in A
# Line 178  skipDex Line 209  skipDex
209      sta __auto_cpx+1      sta __auto_cpx+1
210    
211      ldx _CurrentPixelX      ;Plotting coordinates      ldx _CurrentPixelX      ;Plotting coordinates
212      ldy _CurrentPixelY      ;in X and Y  ;    ldy _CurrentPixelY      ;in X and Y
213    
214      lda dx      lda dx
215      sta __auto_dx+1      sta __auto_dx+1
# Line 228  exitLoop Line 259  exitLoop
259  ; average: 42.56  ; average: 42.56
260      .)      .)
261    
 draw_totaly_horizontal_8  
 .(  
     ; here we have DY in Y, and the OPCODE in A  
     sta _outer_patch    ; Write a (dex / nop / inx) instruction  
262    
263      ldx _OtherPixelX  draw_mainly_horizontal_8_new
264      sta __auto_cpx+1      .(
265    ; here we have DY in Y, and the OPCODE (inx, dex) in A
266        sty __auto_dy+1
267    
268      ldx _CurrentPixelX      cmp #_INX
269        beq doInx
270    
271      ;      lda #<_TableDiv6-1          ; == 0
272      ; Draw loop  ;    clc                        ; _DEX < _INX
273      ;      adc _OtherPixelX
274  outer_loop      sta __auto_div6+1
275      ldy _TableDiv6,x      lda #<_TableBit6Reverse-1   ; == 0
276      lda _TableBit6Reverse,x     ; 4  ;    clc
277      eor (tmp0),y                ; 5      adc _OtherPixelX
     sta (tmp0),y                ; 6  
278    
279  _outer_patch      ldx #>_TableDiv6
280        ldy #>_TableBit6Reverse ;
281        bne endPatch
282    
283    doInx
284        lda #X_SIZE-1
285    ;    sec
286        sbc _OtherPixelX
287        sta __auto_div6+1
288        lda #X_SIZE-1
289    ;    sec
290        sbc _OtherPixelX
291    
292        ldx #>_TableDiv6Rev
293        ldy #>_TableBit6        ;
294    endPatch
295        sta __auto_bit6+1
296        stx __auto_div6+2
297        sty __auto_bit6+2
298    
299        lda dx
300        tax
301      inx      inx
302        sta __auto_dx+1
303        lsr
304        eor #$ff
305        clc
306    ; a = sum, x = dX+1
307    
308  __auto_cpx  loopX
309      cpx #00                 ; At the endpoint yet?      sta save_a              ; 3 =  3
310      bne outer_loop  loopY
311        ; Draw the pixel
312    __auto_div6
313        ldy _TableDiv6-1,x      ; 4
314    __auto_bit6
315        lda _TableBit6Reverse-1,x;4
316        eor (tmp0),y            ; 5*
317        sta (tmp0),y            ; 6*= 19
318    
319        dex                     ; 2         Step in x
320        beq exitLoop            ; 2/3       At the endpoint yet?
321        lda save_a              ; 3
322    __auto_dy
323        adc #00                 ; 2         +DY         TODO: bugfix carry
324        bcc loopX               ; 2/3=11/12 ~50% taken
325        ; Time to step in y
326    __auto_dx
327        sbc #00                 ; 2         -DX
328        sta save_a              ; 3 =  5
329    
330        ; Set the new screen adress
331        lda tmp0+0              ; 3
332        adc #ROW_SIZE           ; 2
333        sta tmp0+0              ; 3
334        bcc loopY               ; 2/3=10/11 ~84% taken
335        inc tmp0+1              ; 5
336        clc                     ; 2
337        bcc loopY               ; 3 = 10
338    ; average: 12.44
339    
340    exitLoop
341      rts      rts
342  .)  ; Timings:
343    ; x++/y  : 34
344    ; x++/y++: 47.12
345    ; average: 40.56
346        .)
347    
348    
349      .dsb 256-(*&255)      .dsb 256-(*&255)
350    
# Line 287  draw_mainly_vertical_8 Line 377  draw_mainly_vertical_8
377      sta __auto_yLo      sta __auto_yLo
378      ldx #$ff      ldx #$ff
379      lda #_DEC_ZP      lda #_DEC_ZP
380      bne endX      bne endPatch
381    
382  doInx  doInx
383  ; inx -> moving right:  ; inx -> moving right:
# Line 301  doInx Line 391  doInx
391      sta __auto_yLo      sta __auto_yLo
392      ldx #$00      ldx #$00
393      lda #_INC_ZP      lda #_INC_ZP
394  endX  endPatch
395      stx __auto_cpY+1      stx __auto_cpY+1
396      sta __auto_yHi      sta __auto_yHi
397  ; setup X  ; setup X
# Line 397  __auto_yHi Line 487  __auto_yHi
487  ; x++,y++: 51.47 (50%)  ; x++,y++: 51.47 (50%)
488  ; average: 45.11  ; average: 45.11
489      .)      .)
490    
491    
492    
493    

Legend:
Removed from v.257  
changed lines
  Added in v.258

  ViewVC Help
Powered by ViewVC 1.1.26