/[projet1]/users/chema/TINE/oobj3d/LineDraw.s
Defence Force logotype

Diff of /users/chema/TINE/oobj3d/LineDraw.s

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

revision 222 by Chema, Mon Feb 1 16:14:32 2010 UTC revision 223 by Chema, Mon Feb 1 22:31:07 2010 UTC
# Line 503  done Line 503  done
503    
504  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
505    
   
506  .zero  .zero
507  save_a                  .dsb 1  save_a                  .dsb 1
 save_x                  .dsb 1  
508  save_y                  .dsb 1  save_y                  .dsb 1
509    
510  .text          .text
511                    
512  .dsb 256-(*&255)          .dsb 256-(*&255)
513    
514  ; nop $ea  ; nop $ea
515  ; inx $e8 11101000  ; inx $e8 11101000
# Line 519  save_y                 .dsb 1 Line 517  save_y                 .dsb 1
517  ; iny $c8 11001000  ; iny $c8 11001000
518  ; dey $88 10001000  ; dey $88 10001000
519    
           
520    
521  draw_nearly_horizontal_8  
522          .(  draw_totaly_vertical_8
523          ; here we have DY in Y, and the OPCODE in A  .(
524          sta __auto_stepx        ; Write a (dex / nop / inx) instruction          ldx _CurrentPixelX
         sty __auto_ady+1  
           
         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  
525          ldy _TableDiv6,x          ldy _TableDiv6,x
526          lda _TableBit6Reverse,x          lda _TableBit6Reverse,x         ; 4
527          ora (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  
528                    
529          clc          ldx dy
530          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?  
531                    
532  __auto_dx            clc                                                     ; 2
533          sbc #00                         ; 2 -DX  loop
534          sta save_a                              ; 3  _mask_patch
535            lda #0                                          ; 2
536            ora (tmp0),y                            ; 5
537            sta (tmp0),y                            ; 6 => total = 13 cycles
538    
539          inc save_y                              ; 5 Steps in y          ; Update screen adress
540          ldy save_y                              ; 3          lda tmp0+0                                      ; 3
541                    adc #40                                         ; 2
542          ; Set the new screen adress          sta tmp0+0                                      ; 3
543          lda _HiresAddrLow,y             ; 4          bcc skip                                        ; 2 (+1 if taken)
544          sta tmp0+0                              ; 3          inc tmp0+1                                      ; 5
545          lda _HiresAddrHigh,y    ; 4          clc                                                     ; 2
546          sta tmp0+1                              ; 3  skip
547                    ; ------------------Min=13 Max=17
548  NOPE  
549          ; Draw the pixel          dex
         ldy _TableDiv6,x  
         lda _TableBit6Reverse,x  
         ora (tmp0),y  
         sta (tmp0),y  
     
 test_done        
 __auto_cpx  
         cpx #00                                 ; At the endpoint yet?  
550          bne loop          bne loop
551          rts              rts
552          .)  .)
553            
554    
555                    
556  ;  ;
# Line 609  _DrawLine Line 570  _DrawLine
570          sec          sec
571          lda _CurrentPixelY          lda _CurrentPixelY
572          sbc _OtherPixelY          sbc _OtherPixelY
         sta dy  
573          beq end          beq end
574          bcc cur_smaller          bcc cur_smaller
575    
576  cur_bigger                                      ; y1>y2  cur_bigger                                      ; y1>y2
577          ; Swap X and Y          ; Swap X and Y
578          ; So we always draw from top to bottom          ; So we always draw from top to bottom
579          lda _CurrentPixelY          ldy _CurrentPixelY
580          ldx _OtherPixelY          ldx _OtherPixelY
581          sta _OtherPixelY          sty _OtherPixelY
582          stx _CurrentPixelY          stx _CurrentPixelY
583    
584          lda _CurrentPixelX          ldy _CurrentPixelX
585          ldx _OtherPixelX          ldx _OtherPixelX
586          sta _OtherPixelX          sty _OtherPixelX
587          stx _CurrentPixelX          stx _CurrentPixelX
588                                    
589          jmp end          jmp end
# Line 632  cur_smaller                                    ; y1<y2 Line 592  cur_smaller                                    ; y1<y2
592          ; Absolute value          ; Absolute value
593          eor #$ff          eor #$ff
594          adc #1          adc #1
         sta dy  
595  end  end
596            sta dy
597  .)  .)
598                    
599          ;          ;
# Line 673  end Line 633  end
633          beq draw_totaly_horizontal_8          beq draw_totaly_horizontal_8
634          cpy dx          cpy dx
635          bcs draw_nearly_vertical_8          bcs draw_nearly_vertical_8
         jmp draw_nearly_horizontal_8  
636    
637    draw_nearly_horizontal_8
638            .(
639            ; here we have DY in Y, and the OPCODE in A
640            sta __auto_stepx        ; Write a (dex / nop / inx) instruction
641            sty __auto_ady+1
642            
643            lda dx
644            sta __auto_dx+1
645            
646            lda _OtherPixelX
647            sta __auto_cpx+1
648            
649            ldx _CurrentPixelX      ;Plotting coordinates
650            ldy _CurrentPixelY      ;in X and Y
651            sty save_y
652                            
653            lda #00                         ;Saves us a CMP
654            sec
655            sbc dy                                  ; -DY
656            sta save_a                              ; 3
657    
658            jmp draw_pixel
659                    
660    loop
661    __auto_stepx
662            inx                             ; Step in x
663            lda save_a                              ; 3
664    __auto_ady
665            adc #00                                 ; 2 +DY
666            sta save_a                              ; 3
667            bcc draw_pixel                  ; Time to step in y?
668            
669    __auto_dx  
670            sbc #00                         ; 2 -DX
671            sta save_a                              ; 3
672    
673            inc save_y                              ; 5 Steps in y
674            ldy save_y                              ; 3
675            
676            ; Set the new screen adress
677            lda _HiresAddrLow,y             ; 4
678            sta tmp0+0                              ; 3
679            lda _HiresAddrHigh,y    ; 4
680            sta tmp0+1                              ; 3
681            
682    draw_pixel
683            ; Draw the pixel
684            ldy _TableDiv6,x
685            lda _TableBit6Reverse,x
686            ora (tmp0),y
687            sta (tmp0),y
688      
689    __auto_cpx
690            cpx #00                                 ; At the endpoint yet?
691            bne loop
692            rts    
693            .)                      
694            
695  draw_totaly_horizontal_8  draw_totaly_horizontal_8
696  .(  .(
697          ; here we have DY in Y, and the OPCODE in A          ; here we have DY in Y, and the OPCODE in A
698          sta _outer_patch        ; Write a (dex / nop / inx) instruction          sta _outer_patch        ; Write a (dex / nop / inx) instruction
699                    
700          ;          ldx _OtherPixelX
701          ; Initialize counter to dx+1          stx __auto_cpx+1
         ;  
         ldx dx  
         inx  
         stx i  
702                    
703          ldx _CurrentPixelX          ldx _CurrentPixelX
704                    
# Line 701  outer_loop Line 714  outer_loop
714  _outer_patch  _outer_patch
715          inx          inx
716    
717          dec i  __auto_cpx      
718            cpx #00                                 ; At the endpoint yet?
719          bne outer_loop          bne outer_loop
720          rts          rts
721  .)        .)      
722                    
 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  
         ora (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)  
723                    
724  ;  ;
725  ; This code is used when the things are moving faster  ; This code is used when the things are moving faster
# Line 750  draw_nearly_vertical_8 Line 731  draw_nearly_vertical_8
731          .(          .(
732          ; here we have DY in Y, and the OPCODE in A          ; here we have DY in Y, and the OPCODE in A
733          sta __auto_stepx        ; Write a (dex / nop / inx) instruction          sta __auto_stepx        ; Write a (dex / nop / inx) instruction
734                    sty __auto_dy+1
         lda dy  
         sta __auto_dy+1  
735    
736          lda dx          lda dx
737          sta __auto_adx+1          sta __auto_adx+1
# Line 766  draw_nearly_vertical_8 Line 745  draw_nearly_vertical_8
745          lda #00                         ;Saves us a CMP          lda #00                         ;Saves us a CMP
746          sec          sec
747          sbc dx                                  ; -DX          sbc dx                                  ; -DX
748                    
749            jmp draw_pixel
750                    
         ; Draw the first pixel  
         sta save_a  
         sty save_y  
         ldy _TableDiv6,x  
         lda _TableBit6Reverse,x  
         ora (tmp0),y  
         sta (tmp0),y  
         lda save_a  
         ldy save_y  
           
         clc  
         beq test_done  
751  loop  loop
752          iny                             ; Step in y          iny                             ; Step in y
753  __auto_adx  __auto_adx
754          adc #00                                 ; +DX          adc #00                                 ; +DX
755          bcc NOPE                        ; Time to step in x?          bcc skip                        ; Time to step in x?
756                    
757  __auto_stepx  __auto_stepx
758          inx                             ; Step in x          inx                             ; Step in x
# Line 791  __auto_stepx Line 760  __auto_stepx
760  __auto_dy    __auto_dy  
761          sbc #00                         ; -DY          sbc #00                         ; -DY
762    
763  NOPE  skip
764          ; Set the new screen adress          ; Set the new screen adress
765          sta save_a          sta save_a
766          lda _HiresAddrLow,y          lda _HiresAddrLow,y
# Line 799  NOPE Line 768  NOPE
768          lda _HiresAddrHigh,y          lda _HiresAddrHigh,y
769          sta tmp0+1          sta tmp0+1
770    
771    draw_pixel      
772          ; Draw the pixel          ; Draw the pixel
773          sty save_y          sty save_y
774          ldy _TableDiv6,x          ldy _TableDiv6,x
# Line 808  NOPE Line 778  NOPE
778          lda save_a          lda save_a
779          ldy save_y          ldy save_y
780        
 test_done        
781  __auto_cpy  __auto_cpy
782          cpy #00                         ; At the endpoint yet?          cpy #00                         ; At the endpoint yet?
783          bne loop          bne loop
# Line 816  __auto_cpy Line 785  __auto_cpy
785          .)          .)
786    
787    
788    
789  #endif  #endif
790    
791    

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

  ViewVC Help
Powered by ViewVC 1.1.26