home *** CD-ROM | disk | FTP | other *** search
/ Falcon 030 Power 2 / F030_POWER2.iso / ST_STE / MAGS / UCM9.ARJ / ucm9 / SOURCES.LZH / VOXEL / SCAN.S < prev    next >
Text File  |  1997-06-25  |  4KB  |  115 lines

  1. ********** Source: Zeichnen der Spalten ***********
  2.  
  3. scan_nibble_high:
  4.  
  5. ;**** Registerbelegung innerhalb der Schleifen ****
  6.  
  7. ; d0= x+y Position
  8. ; d1= Neue Hoehe
  9. ; d2= Alte Hoehe
  10. ; d3= Spaltenpunkte ZΣhler
  11. ; d4= pers adr + work byte
  12. ; d5= perts adder
  13. ; d6= Offset einer Zeile innerhalb des Junk Puffers
  14. ; d7= And Maske fⁿr Bleiben innerhalb der Landschaft 
  15.  
  16. * a0= Delta-xy-offset Tabelle eines Strahls
  17. * a1= Zugriff auf die H÷hendaten der Landschaft
  18. * a2= Zugriff auf die Farbdaten der Landschaft
  19. * a3= Fⁿr Direkteinsprung in die Turmzeichenbefehlsfolge
  20. * a4= Perspektiven Tabelle
  21. * a5= Aktuelle Screen Adresse
  22. * a6= Alte Screen Adresse
  23.  
  24.                 lea     byte_code_1(PC),A3    * Adresse fⁿr Code (Direkteinsprung)
  25.  
  26.                 moveq   #0,D1           * Neue H÷he init
  27.                 moveq   #0,D2           * Alte H÷he init
  28.                 move.w  #punkte-1,D3    * Anzahl der Voxel, die Richtung Horizont 
  29.                        * ausgewertet werden sollen
  30.                 moveq   #0,D4           * Perspektiventabelle Start ganz vorne beim Betrachter
  31.                 move.w  #perspektiven*punkte,D5    * Offset fⁿr Schritt Richtung Horizont
  32.  
  33. do_row_byte_1:
  34.                 add.w   D5,D4           * In der Perspektiventabelle einen Schritt
  35.    * Richtung Horizont machen ...
  36.  
  37.                 add.l   (A0)+,D0        * actual x-y-position
  38.                 and.l   D7,D0           * mask raender
  39.  
  40.                 move.b  0(A1,D0.l),D4   * H÷he auslesen
  41.                 move.b  0(A4,D4.l),D1   * H÷he perspektivisch anpassen ...
  42.    * Ergebnis: H÷he * 4
  43.  
  44.                 sub.w   D1,D2           * Alte H÷he - neue H÷he < 0 ?
  45. * damit ist der neue Punkt nicht sichtbar !
  46.    * also nichts zeichnen
  47.  
  48.                 bmi.s   scan_me_byte_1
  49.                 add.w   D1,D2           * Operation rⁿckgΣngig machen -> alte H÷he bleibt
  50.                        * der Ma∞stab !
  51.                 dbra    D3,do_row_byte_1     * NΣchster Punkt
  52.                 rts
  53.  
  54. scan_me_byte_1:
  55.                 move.b  0(A2,D0.l),D4   * Farbinformation holen (Byte)
  56.  
  57.                 jmp     0(A3,D2.w)       * Direkteinsprung (abh. von neu zu zeichnendem
  58.                        * Turmdelta)
  59.  
  60. ********* Farbwerte eintragen ***********
  61.  
  62.                 REPT max_y
  63.                 move.b  D4,(A5)        * Farbe in Junk Puffer schreiben
  64.                 suba.w  D6,A5            * vorherige Zeile im Junk Puffer adressieren
  65.                 ENDR
  66.  
  67. byte_code_1:    move.w  D1,D2            * neue H÷he wird zur alten H÷he
  68.                 dbra    D3,do_row_byte_1    * nΣchstes Voxel
  69.                 rts
  70.                 
  71.  
  72. Die selbe Prozedur fⁿr jede 2.Spalte - hier werden die niedrigen Nibbles des Junk
  73. Puffers gefⁿllt.
  74.  
  75. scan_nibble_low:
  76.  
  77.                 lea     byte_code_2(PC),A3
  78.  
  79.                 moveq   #0,D1           
  80.                 moveq   #0,D2           
  81.                 move.w  #punkte-1,D3    
  82.                 moveq   #0,D4
  83.                 move.w  #perspektiven*punkte,D5
  84.  
  85. do_row_byte_2:
  86.                 add.w   D5,D4
  87.  
  88.                 add.l   (A0)+,D0        
  89.                 and.l   D7,D0           
  90.  
  91.                 move.b  0(A1,D0.l),D4   
  92.                 move.b  0(A4,D4.l),D1   
  93.  
  94.                 sub.w   D1,D2          
  95.                 bmi.s   scan_me_byte_2
  96.                 add.w   D1,D2
  97.                 dbra    D3,do_row_byte_2
  98.                 rts
  99.  
  100. scan_me_byte_2:
  101.                 move.b  0(A2,D0.l),D4   
  102.  
  103.                 lsr.b   #4,D4            ; Farbinformation ins untere Nibble
  104.  
  105.                 jmp     0(A3,D2.w)
  106.  
  107.                 REPT max_y
  108.                 or.b    D4,(A5)        ; unteres Nibble fⁿllen
  109.                 suba.w  D6,A5
  110.                 ENDR
  111.  
  112. byte_code_2:    move.w  D1,D2
  113.                 dbra    D3,do_row_byte_2
  114.                 rts
  115.