qrotate.txt

(8 KB) Pobierz
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
Zgłoś jeśli naruszono regulamin