ACNews #54
21 января 2009

Программирование - Быстрое преобразование координат.

SIGNOFS EQU     #C000                                           
SINOFS  EQU     #C100                                           
COSOFS  EQU     #C200                                           
PROCROT EQU     #C300                                           
MULTAB  EQU     #C400                                           
                                                                
ALPHA   DEFW    SIGNOFS+#40                                     
BETA    DEFW    SIGNOFS+#00                                     
GAMMA   DEFW    SIGNOFS+#00                                     
                                                                
ROTATE                                                          
        LD      A,SINBANK                                       
        CALL    BANK                                            
                                                                
        LD      HL,(ALPHA)                                      
        LD      A,(HL)                                          
        LD      (_ALPCAL),A                                     
        INC     H                                               
        LD      A,(HL)                                          
        LD      (_ASIN),A                                       
        INC     H                                               
        LD      A,(HL)                                          
        LD      (_ACOS),A                                       
                                                                
        LD      HL,(BETA)                                       
        LD      A,(HL)                                          
        LD      (_BETCAL),A                                     
        INC     H                                               
        LD      A,(HL)                                          
        LD      (_BSIN),A                                       
        INC     H                                               
        LD      A,(HL)                                          
        LD      (_BCOS),A                                       
                                                                
        LD      HL,(GAMMA)                                      
        LD      A,(HL)                                          
        LD      (_GAMCAL),A                                     
        INC     H                                               
        LD      A,(HL)                                          
        LD      (_GSIN),A                                       
        INC     H                                               
        LD      A,(HL)                                          
        LD      (_GCOS),A                                       
                                                                
NVERT   EQU     $+1                                             
        LD      B,0                                             
        LD      L,0                                             
        LD      LX,0                                            
...R1                                                           
        LD      H,VTX3DH                                        
        LD      HX,VTX3DIH                                      
        EXX                                                     
        LD      C,(IX+0)                                        
        INC     HX                                              
        LD      B,(IX+0)                                        
        INC     HX                                              
                                                                
_ASIN   EQU     $+1                                             
        LD      H,0                                             
_ACOS   EQU     $+1                                             
        LD      D,0                                             
_ALPCAL EQU     $+1                                             
        CALL    PROCROT         ;INP CB, OUTP AB                
        EX      AF,AF`                                          
        LD      C,B                                             
        LD      B,(IX+0)                                        
                                ;A`=X,C=Y,B=Z                   
_BSIN   EQU     $+1                                             
        LD      H,0                                             
_BCOS   EQU     $+1                                             
        LD      D,0                                             
_BETCAL EQU     $+1                                             
        CALL    PROCROT                                         
        EX      AF,AF`          ;PUT Y                          
        LD      C,B                                             
        LD      B,A                                             
                                ;A`=Y,C=Z,B=X                   
_GSIN   EQU     $+1                                             
        LD      H,0                                             
_GCOS   EQU     $+1                                             
        LD      D,0                                             
_GAMCAL EQU     $+1                                             
        CALL    PROCROT                                         
                                ;A=Z,B=X,A`=Y                   
        SRA     A                                               
        LD      (_CZ),A                                         
        LD      A,B                                             
        EXX                                                     
        SRA     A                                               
        LD      (HL),A                                          
        INC     H                                               
        EX      AF,AF`                                          
        SRA     A                                               
        LD      (HL),A                                          
        INC     H                                               
_CZ     EQU     $+1                                             
        LD      (HL),0                                          
        INC     L                                               
        INC     LX                                              
        DJNZ    ...R1                                           
        LD      A,WRKBANK                                       
        JP      BANK                                            
QROT_E                                                          
;################################                               
                                                                
; X`=X*COS(F)#Y*SIN(F)                                          
; Y`=X*SIN(F)+Y*COS(F)                                          
                                                                
;C=X    DE=COS                                                  
;B=Y    HL=SIN                                                  
;OUTP A=X,B=Y                                                   
PROC_INST                                                       
                                                                
;COS SIN                                                        
; +   +                                                         
CH_I    EQU     $#PROC_INST                                     
        LD      L,C                                             
        LD      E,B                                             
        LD      A,(DE)                                          
        ADD     A,(HL)                                          
        LD      L,B                                             
        LD      E,C                                             
        LD      B,A                                             
        LD      A,(DE)                                          
        SUB     (HL)                                            
        RET                                                     
; #   +                                                         
CH_II   EQU     $#PROC_INST                                     
        LD      L,C                                             
        LD      E,B                                             
        EX      DE,HL                                           
        LD      A,(DE)                                          
        SUB     (HL)                                            
        LD      L,C                                             
        LD      E,B                                             
        LD      B,A                                             
        LD      A,(DE)                                          
        ADD     A,(HL)                                          
        NEG                                                     
        RET                                                     
; #   #                                                         
CH_III  EQU     $#PROC_INST                                     
        LD      L,C                                             
        LD      E,B                                             
        LD      A,(DE)                                          
        ADD     A,(HL)                                          
        NEG                                                     
        LD      L,B                                             
        LD      E,C                                             
        LD      B,A                                             
        EX      DE,HL                                           
        LD      A,(DE)                                          
        SUB     (HL)                                            
        RET                                                     
; +   #                                                         
CH_IV   EQU     $#PROC_INST                                     
        LD      L,C                                             
        LD      E,B                                             
        LD      A,(DE)                                          
        SUB     (HL)                                            
        LD      L,B                                             
        LD      E,C                                             
        LD      B,A                                             
        LD      A,(DE)                                          
        ADD     A,(HL)                                          
        RET                                                     
;COS SIN                                                        
; 1   0                                                         
U0      EQU     $#PROC_INST                                     
        LD      A,C                                             
        RET                                                     
; 1  #P                                                         
UM360   EQU     $#PROC_INST                                     
        LD      L,C                                             
        LD      A,B                                             
        SUB     (HL)                                            
        LD      L,B                                             
        LD      B,A                                             
        LD      A,C                                             
        ADD     A,(HL)                                          
        RET                                                     
; 1  +P                                                         
UB0     EQU     $#PROC_INST                                     
        LD      L,C                                             
        LD      A,B                                             
        ADD     A,(HL)                                          
        LD      L,B                                             
        LD      B,A                                             
        LD      A,C                                             
        SUB     (HL)                                            
        RET                                                     
                                                                
;COS SIN                                                        
; 0   1                                                         
U90     EQU     $#PROC_INST                                     
        XOR     A                                               
        SUB     B                                               
        LD      B,C                                             
        RET                                                     
;#P   1                                                         
UB90    EQU     $#PROC_INST                                     
        LD      E,B                                             
        EX      DE,HL                                           
        LD      A,C                                             
        SUB     (HL)                                            
        LD      B,A                                             
        XOR     A                                               
        SUB     L                                               
        LD      L,C                                             
        SUB     (HL)                                            
        RET                                                     
;+P   1                                                         
UM90    EQU     $#PROC_INST                                     
        LD      E,B                                             
        LD      A,(DE)                                          
        ADD     A,C                                             
        LD      L,A                                             
        LD      E,C                                             
        LD      A,(DE)                                          
        SUB     B                                               
        LD      B,L                                             
        RET                                                     
                                                                
;COS SIN                                                        
;#1   0                                                         
U180    EQU     $#PROC_INST                                     
        XOR     A                                               
        SUB     B                                               
        LD      B,A                                             
        XOR     A                                               
        SUB     C                                               
        RET                                                     
;#1  #P                                                         
UB180   EQU     $#PROC_INST                                     
        LD      L,C                                             
        XOR     A                                               
        SUB     B                                               
        SUB     (HL)                                            
        LD      L,B                                             
        LD      B,A                                             
        LD      A,(HL)                                          
        SUB     C                                               
        RET                                                     
;#1  +P                                                         
UM180   EQU     $#PROC_INST                                     
        LD      L,C                                             
        LD      A,(HL)                                          
        SUB     B                                               
        LD      L,B                                             
        LD      B,A                                             
        XOR     A                                               
        SUB     C                                               
        SUB     (HL)                                            
        RET                                                     
                                                                
;COS SIN                                                        
; 0  #1                                                         
U270    EQU     $#PROC_INST                                     
        XOR     A                                               
        SUB     C                                               
        LD      C,A                                             
        LD      A,B                                             
        LD      B,C                                             
        RET                                                     
;#P  #1                                                         
UM270   EQU     $#PROC_INST                                     
        LD      E,B                                             
        EX      DE,HL                                           
        XOR     A                                               
        SUB     C                                               
        SUB     (HL)                                            
        LD      B,A                                             
        LD      A,L                                             
        LD      L,C                                             
        SUB     (HL)                                            
        RET                                                     
                                                                
;COS SIN                                                        
;+P  #1                                                         
UB270   EQU     $#PROC_INST                                     
        LD      E,B                                             
        EX      DE,HL                                           
        LD      A,(HL)                                          
        SUB     C                                               
        LD      B,A                                             
        LD      A,L                                             
        LD      L,C                                             
        ADD     A,(HL)                                          
        RET                                                     
                                                                
PROC_LEN EQU    $#PROC_INST                                     
                                                                
;##########################                                     
                                                                
GEN_ROTATE                                                      
        LD      A,SINBANK                                       
        CALL    BANK                                            
                                                                
        XOR     A                                               
        LD      (PREV),A                                        
                                                                
        LD      IX,MULTAB##0100                                 
        LD      HL,SIN4                                         
        LD      DE,SINOFS                                       
INST_MUL                                                        
        LD      A,(HL)                                          
        INC     HL                                              
PREV    EQU     $+1                                             
        CP      0                                               
        JR      Z,_SKIP                                         
                                                                
        LD      (PREV),A                                        
        INC     HX                                              
        EXX                                                     
                                                                
        ADD     A,A                                             
                                                                
        LD      E,A                                             
        XOR     A                                               
        LD      D,A                                             
        LD      L,A                                             
        LD      H,A                                             
                                                                
        LD      B,128                                           
...1                                                            
        LD      (IX),A                                          
        INC     LX                                              
        ADD     HL,DE                                           
        LD      A,H                                             
        DJNZ    ...1                                            
                                                                
        NEG                                                     
        LD      (IX),A                                          
        INC     LX                                              
                                                                
        XOR     A                                               
        SUB     L                                               
        LD      L,A     ;L=0#L                                  
        SBC     A,H     ;0#L#H#C                                
        SUB     L       ;#(0#L)                                 
        LD      H,A             ;24                             
                                                                
        LD      B,127                                           
...2                                                            
        ADD     HL,DE                                           
        LD      A,H                                             
        LD      (IX),A                                          
        INC     LX                                              
        DJNZ    ...2                                            
        EXX                                                     
_SKIP                                                           
        LD      A,HX                                            
        INC     E                                               
        LD      (DE),A                                          
                                                                
        LD      A,(HL)                                          
        RLA                                                     
;       CP      #80                                             
        JR      NC,INST_MUL                                     
                                                                
                                                                
        LD      HL,SINOFS+#44                                   
        LD      B,#3C                                           
        LD      A,(DE)                                          
        LD      (HL),A                                          
        DEC     E                                               
        INC     L                                               
        DJNZ    $#4                                             
        EX      DE,HL                                           
        LD      C,#80                                           
        LDIR                                                    
                                                                
        LD      L,#40                                           
        LD      A,(HL)                                          
        LD      (DE),A                                          
        INC     L                                               
        INC     E                                               
        JR      NZ,$#4                                          
                                                                
        LD      DE,SIGNOFS                                      
        LD      HL,SIGNOFS_INST                                 
I_OFS                                                           
        LD      B,(HL)                                          
        INC     HL                                              
        LD      A,(HL)                                          
        INC     HL                                              
        LD      (DE),A                                          
        INC     E                                               
        DJNZ    $#2                                             
        JR      NZ,I_OFS                                        
                                                                
        LD      HL,PROC_INST                                    
        LD      DE,PROCROT                                      
        LD      BC,PROC_LEN                                     
        CALL    NLDIR                                           
        LD      A,WRKBANK                                       
        JP      BANK                                            
                                                                
SIN4                                                            
        DEFB        #03,#06,#09,#0D,#10,#13,#16                 
;       DEFB    #00,#03,#06,#09,#0D,#10,#13,#16                 
        DEFB    #19,#1C,#1F,#22,#25,#28,#2B,#2E                 
        DEFB    #31,#34,#37,#3A,#3C,#3F,#42,#44                 
        DEFB    #47,#4A,#4C,#4F,#51,#54,#56,#58                 
        DEFB    #5B,#5D,#5F,#61,#63,#65,#67,#69                 
        DEFB    #6A,#6C,#6E,#6F,#71,#72,#74,#75                 
        DEFB    #76,#77,#79,#7A,#7A,#7B,#7C,#7D                 
        DEFB    #7E,#7E,#7F,#7F,#7F,#80; #80,#80                
                                                                
;       DEFB    #80,#80,#80,#80,#7F,#7F,#7F,#7E                 
                                                                
SIGNOFS_INST                                                    
                                                                
        DEFB    1,U0,3,UB0,57,CH_I,3,UM90                       
        DEFB    1,U90,3,UB90,57,CH_II,3,UM180                   
        DEFB    1,U180,3,UB180,57,CH_III,3,UM270                
        DEFB    1,U270,3,UB270,57,CH_IV,3,UM360                 




Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Новости с полей СинклерКлуба - Ура! Оле-оле! Хай-гай-ай-яй!!! А у нас опять интернет заработал.
Юмор - Анекдоты, приколы, афоризмы...
Рассказы - Толкатель (продолжение).

В этот день...   15 ноября