/[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 220 by dbug, Sun Jan 31 20:43:50 2010 UTC revision 222 by dbug, Mon Feb 1 21:47:27 2010 UTC
# Line 14  Line 14 
14  ;_OtherPixelY   .dsb 1  ;_OtherPixelY   .dsb 1
15                    
16  save_a                  .dsb 1  save_a                  .dsb 1
 save_x                  .dsb 1  
17  save_y                  .dsb 1  save_y                  .dsb 1
18    
19          .text          .text
# Line 26  save_y                 .dsb 1 Line 25  save_y                 .dsb 1
25  ; dex $ca 11001010  ; dex $ca 11001010
26  ; iny $c8 11001000  ; iny $c8 11001000
27  ; dey $88 10001000  ; dey $88 10001000
28            
29  draw_nearly_horizontal_8  
30          .(  
31          ; here we have DY in Y, and the OPCODE in A  draw_totaly_vertical_8
32          sta __auto_stepx        ; Write a (dex / nop / inx) instruction  .(
33          sty __auto_ady+1          ldx _CurrentPixelX
           
         lda dx  
         sta __auto_dx+1  
           
         lda _OtherPixelX  
         sta __auto_cpx+1  
           
         ldx _CurrentPixelX      ;Plotting coordinates  
         ldy _CurrentPixelY      ;in X and Y  
         sty save_y  
                   
         ; Draw the first pixel  
         sta save_a  
         sty save_y  
34          ldy _TableDiv6,x          ldy _TableDiv6,x
35          lda _TableBit6Reverse,x          lda _TableBit6Reverse,x         ; 4
36          eor (tmp0),y          sta _mask_patch+1
         sta (tmp0),y  
         lda save_a  
         ldy save_y  
           
         lda #00                         ;Saves us a CMP  
         sec  
         sbc dy                                  ; -DY  
         sta save_a                              ; 3  
37                    
38          clc          ldx dy
39          beq test_done          inx
                   
 loop  
 __auto_stepx  
         inx                             ; Step in x  
         lda save_a                              ; 3  
 __auto_ady  
         adc #00                                 ; 2 +DY  
         sta save_a                              ; 3  
         bcc NOPE                        ; Time to step in y?  
40                    
41  __auto_dx            clc                                                     ; 2
42          sbc #00                         ; 2 -DX  loop
43          sta save_a                              ; 3  _mask_patch
44            lda #0                                          ; 2
45            eor (tmp0),y                            ; 5
46            sta (tmp0),y                            ; 6 => total = 13 cycles
47    
48          inc save_y                              ; 5 Steps in y          ; Update screen adress
49          ldy save_y                              ; 3          lda tmp0+0                                      ; 3
50                    adc #40                                         ; 2
51          ; Set the new screen adress          sta tmp0+0                                      ; 3
52          lda _HiresAddrLow,y             ; 4          bcc skip                                        ; 2 (+1 if taken)
53          sta tmp0+0                              ; 3          inc tmp0+1                                      ; 5
54          lda _HiresAddrHigh,y    ; 4          clc                                                     ; 2
55          sta tmp0+1                              ; 3  skip
56                    ; ------------------Min=13 Max=17
57  NOPE  
58          ; Draw the pixel          dex
         ldy _TableDiv6,x  
         lda _TableBit6Reverse,x  
         eor (tmp0),y  
         sta (tmp0),y  
     
 test_done        
 __auto_cpx  
         cpx #00                                 ; At the endpoint yet?  
59          bne loop          bne loop
60          rts              rts
61          .)  .)
62            
63    
64                    
65  ;  ;
# Line 115  _DrawLine8 Line 79  _DrawLine8
79          sec          sec
80          lda _CurrentPixelY          lda _CurrentPixelY
81          sbc _OtherPixelY          sbc _OtherPixelY
         sta dy  
82          beq end          beq end
83          bcc cur_smaller          bcc cur_smaller
84    
85  cur_bigger                                      ; y1>y2  cur_bigger                                      ; y1>y2
86          ; Swap X and Y          ; Swap X and Y
87          ; So we always draw from top to bottom          ; So we always draw from top to bottom
88          lda _CurrentPixelY          ldy _CurrentPixelY
89          ldx _OtherPixelY          ldx _OtherPixelY
90          sta _OtherPixelY          sty _OtherPixelY
91          stx _CurrentPixelY          stx _CurrentPixelY
92    
93          lda _CurrentPixelX          ldy _CurrentPixelX
94          ldx _OtherPixelX          ldx _OtherPixelX
95          sta _OtherPixelX          sty _OtherPixelX
96          stx _CurrentPixelX          stx _CurrentPixelX
97                                    
98          jmp end          jmp end
# Line 138  cur_smaller                                    ; y1<y2 Line 101  cur_smaller                                    ; y1<y2
101          ; Absolute value          ; Absolute value
102          eor #$ff          eor #$ff
103          adc #1          adc #1
         sta dy  
104  end  end
105            sta dy
106  .)  .)
107                    
108          ;          ;
# Line 179  end Line 142  end
142          beq draw_totaly_horizontal_8          beq draw_totaly_horizontal_8
143          cpy dx          cpy dx
144          bcs draw_nearly_vertical_8          bcs draw_nearly_vertical_8
         jmp draw_nearly_horizontal_8  
145    
146    draw_nearly_horizontal_8
147            .(
148            ; here we have DY in Y, and the OPCODE in A
149            sta __auto_stepx        ; Write a (dex / nop / inx) instruction
150            sty __auto_ady+1
151            
152            lda dx
153            sta __auto_dx+1
154            
155            lda _OtherPixelX
156            sta __auto_cpx+1
157            
158            ldx _CurrentPixelX      ;Plotting coordinates
159            ldy _CurrentPixelY      ;in X and Y
160            sty save_y
161                            
162            lda #00                         ;Saves us a CMP
163            sec
164            sbc dy                                  ; -DY
165            sta save_a                              ; 3
166            
167            jmp draw_pixel
168                    
169    loop
170    __auto_stepx
171            inx                             ; Step in x
172            lda save_a                              ; 3
173    __auto_ady
174            adc #00                                 ; 2 +DY
175            sta save_a                              ; 3
176            bcc draw_pixel                  ; Time to step in y?
177            
178    __auto_dx  
179            sbc #00                         ; 2 -DX
180            sta save_a                              ; 3
181    
182            inc save_y                              ; 5 Steps in y
183            ldy save_y                              ; 3
184            
185            ; Set the new screen adress
186            lda _HiresAddrLow,y             ; 4
187            sta tmp0+0                              ; 3
188            lda _HiresAddrHigh,y    ; 4
189            sta tmp0+1                              ; 3
190            
191    draw_pixel
192            ; Draw the pixel
193            ldy _TableDiv6,x
194            lda _TableBit6Reverse,x
195            eor (tmp0),y
196            sta (tmp0),y
197      
198    __auto_cpx
199            cpx #00                                 ; At the endpoint yet?
200            bne loop
201            rts    
202            .)                      
203            
204  draw_totaly_horizontal_8  draw_totaly_horizontal_8
205  .(  .(
206          ; here we have DY in Y, and the OPCODE in A          ; here we have DY in Y, and the OPCODE in A
207          sta _outer_patch        ; Write a (dex / nop / inx) instruction          sta _outer_patch        ; Write a (dex / nop / inx) instruction
208                    
209          ;          ldx _OtherPixelX
210          ; Initialize counter to dx+1          sta __auto_cpx+1
         ;  
         ldx dx  
         inx  
         stx i  
211                    
212          ldx _CurrentPixelX          ldx _CurrentPixelX
213                    
# Line 207  outer_loop Line 223  outer_loop
223  _outer_patch  _outer_patch
224          inx          inx
225    
226          dec i  __auto_cpx      
227            cpx #00                                 ; At the endpoint yet?
228          bne outer_loop          bne outer_loop
229          rts          rts
230  .)        .)      
231                    
 draw_totaly_vertical_8  
 .(  
         ldx _CurrentPixelX  
         ldy _TableDiv6,x  
         lda _TableBit6Reverse,x         ; 4  
         sta _mask_patch+1  
           
         ldx dy  
         inx  
           
         clc                                                     ; 2  
 loop  
 _mask_patch  
         lda #0                                          ; 2  
         eor (tmp0),y                            ; 5  
         sta (tmp0),y                            ; 6 => total = 13 cycles  
   
         ; Update screen adress  
         lda tmp0+0                                      ; 3  
         adc #40                                         ; 2  
         sta tmp0+0                                      ; 3  
         bcc skip                                        ; 2 (+1 if taken)  
         inc tmp0+1                                      ; 5  
         clc                                                     ; 2  
 skip  
         ; ------------------Min=13 Max=17  
   
         dex  
         bne loop  
         rts  
 .)  
                   
         ;.dsb 256-(*&255)  
232                    
233  ;  ;
234  ; This code is used when the things are moving faster  ; This code is used when the things are moving faster
# Line 256  draw_nearly_vertical_8 Line 240  draw_nearly_vertical_8
240          .(          .(
241          ; here we have DY in Y, and the OPCODE in A          ; here we have DY in Y, and the OPCODE in A
242          sta __auto_stepx        ; Write a (dex / nop / inx) instruction          sta __auto_stepx        ; Write a (dex / nop / inx) instruction
243                    sty __auto_dy+1
         lda dy  
         sta __auto_dy+1  
244    
245          lda dx          lda dx
246          sta __auto_adx+1          sta __auto_adx+1
# Line 272  draw_nearly_vertical_8 Line 254  draw_nearly_vertical_8
254          lda #00                         ;Saves us a CMP          lda #00                         ;Saves us a CMP
255          sec          sec
256          sbc dx                                  ; -DX          sbc dx                                  ; -DX
257                    
258            jmp draw_pixel
259                    
         ; Draw the first pixel  
         sta save_a  
         sty save_y  
         ldy _TableDiv6,x  
         lda _TableBit6Reverse,x  
         eor (tmp0),y  
         sta (tmp0),y  
         lda save_a  
         ldy save_y  
           
         clc  
         beq test_done  
260  loop  loop
261          iny                             ; Step in y          iny                             ; Step in y
262  __auto_adx  __auto_adx
263          adc #00                                 ; +DX          adc #00                                 ; +DX
264          bcc NOPE                        ; Time to step in x?          bcc skip                        ; Time to step in x?
265                    
266  __auto_stepx  __auto_stepx
267          inx                             ; Step in x          inx                             ; Step in x
# Line 297  __auto_stepx Line 269  __auto_stepx
269  __auto_dy    __auto_dy  
270          sbc #00                         ; -DY          sbc #00                         ; -DY
271    
272  NOPE  skip
273          ; Set the new screen adress          ; Set the new screen adress
274          sta save_a          sta save_a
275          lda _HiresAddrLow,y          lda _HiresAddrLow,y
# Line 305  NOPE Line 277  NOPE
277          lda _HiresAddrHigh,y          lda _HiresAddrHigh,y
278          sta tmp0+1          sta tmp0+1
279    
280    draw_pixel      
281          ; Draw the pixel          ; Draw the pixel
282          sty save_y          sty save_y
283          ldy _TableDiv6,x          ldy _TableDiv6,x
# Line 314  NOPE Line 287  NOPE
287          lda save_a          lda save_a
288          ldy save_y          ldy save_y
289        
 test_done        
290  __auto_cpy  __auto_cpy
291          cpy #00                         ; At the endpoint yet?          cpy #00                         ; At the endpoint yet?
292          bne loop          bne loop

Legend:
Removed from v.220  
changed lines
  Added in v.222

  ViewVC Help
Powered by ViewVC 1.1.26