📄 3dtesting.s
字号:
ldd R17,y+15
ldd R18,y+16
ldd R19,y+17
movw R24,R28
subi R24,114 ; offset = 142
sbci R25,255
st -y,R25
st -y,R24
xcall fpmule1x
movw R16,R2
movw R18,R4
xcall fpadd2
movw R26,R28
subi R26,142 ; addi 114
sbci R27,255
st x+,R16
st x+,R17
st x+,R18
st x,R19
.dbline 79
; x = xt;
movw R26,R28
subi R26,146 ; addi 110
sbci R27,255
ld R2,x+
ld R3,x+
ld R4,x+
ld R5,x
std y+10,R2
std y+11,R3
std y+12,R4
std y+13,R5
.dbline 80
; y = yt;
movw R26,R28
subi R26,142 ; addi 114
sbci R27,255
ld R2,x+
ld R3,x+
ld R4,x+
ld R5,x
std y+14,R2
std y+15,R3
std y+16,R4
std y+17,R5
.dbline 82
;
; x=x+xpos; // add the object position offset
ldd R16,y+10
ldd R17,y+11
ldd R18,y+12
ldd R19,y+13
movw R24,R28
subi R24,98 ; offset = 158
sbci R25,255
st -y,R25
st -y,R24
xcall fpadd1
std y+10,R16
std y+11,R17
std y+12,R18
std y+13,R19
.dbline 83
; y=y+ypos; // for both x and y
ldd R16,y+14
ldd R17,y+15
ldd R18,y+16
ldd R19,y+17
movw R24,R28
subi R24,94 ; offset = 162
sbci R25,255
st -y,R25
st -y,R24
xcall fpadd1
std y+14,R16
std y+15,R17
std y+16,R18
std y+17,R19
.dbline 84
; z=z+OFFSETZ-zpos; // as well as Z
ldd R2,y+6
ldd R3,y+7
ldd R4,y+8
ldd R5,y+9
ldi R16,<L10
ldi R17,>L10
xcall elpm32
st -y,R19
st -y,R18
st -y,R17
st -y,R16
movw R16,R2
movw R18,R4
xcall fpadd2
movw R24,R28
subi R24,90 ; offset = 166
sbci R25,255
st -y,R25
st -y,R24
xcall fpsub1
std y+6,R16
std y+7,R17
std y+8,R18
std y+9,R19
.dbline 86
;
; newx[i]=(x*64/z)+OFFSETX; // translate 3d to 2d coordinates for screen
ldi R16,<L11
ldi R17,>L11
xcall elpm32
movw R24,R28
adiw R24,10
st -y,R25
st -y,R24
xcall fpmule1
movw R24,R28
adiw R24,6
st -y,R25
st -y,R24
xcall fpdiv1
movw R2,R16
movw R4,R18
ldi R16,<L12
ldi R17,>L12
xcall elpm32
st -y,R19
st -y,R18
st -y,R17
st -y,R16
movw R16,R2
movw R18,R4
xcall fpadd2
xcall fpint
movw R24,R28
adiw R24,18
movw R26,R28
subi R26,110 ; addi 146
sbci R27,255
ld R30,x+
ld R31,x
lsl R30
rol R31
add R30,R24
adc R31,R25
std z+1,R17
std z+0,R16
.dbline 87
; newy[i]=(y*64/z)+OFFSETY; // drawing so we can see the cube
ldi R16,<L11
ldi R17,>L11
xcall elpm32
movw R24,R28
adiw R24,14
st -y,R25
st -y,R24
xcall fpmule1
movw R24,R28
adiw R24,6
st -y,R25
st -y,R24
xcall fpdiv1
movw R2,R16
movw R4,R18
ldi R16,<L10
ldi R17,>L10
xcall elpm32
st -y,R19
st -y,R18
st -y,R17
st -y,R16
movw R16,R2
movw R18,R4
xcall fpadd2
xcall fpint
movw R24,R28
subi R24,192 ; offset = 64
sbci R25,255
movw R26,R28
subi R26,110 ; addi 146
sbci R27,255
ld R30,x+
ld R31,x
lsl R30
rol R31
add R30,R24
adc R31,R25
std z+1,R17
std z+0,R16
.dbline 88
; }
L7:
.dbline 61
movw R30,R28
subi R30,110 ; addi 146
sbci R31,255
ldd R24,z+0
ldd R25,z+1
adiw R24,1
movw R30,R28
subi R30,110 ; addi 146
sbci R31,255
std z+1,R25
std z+0,R24
.dbline 61
cpi R24,23
ldi R30,0
cpc R25,R30
brge X13
xjmp L6
X13:
X0:
.dbline 90
;
; for (i=0; i<22; i++) // draw the lines that make up the object
clr R0
clr R1
movw R30,R28
subi R30,110 ; addi 146
sbci R31,255
std z+1,R1
std z+0,R0
L13:
.dbline 91
; {
.dbline 92
; vertex=ff[i]-1; // temp = start vertex for this line
ldi R24,<_ff
ldi R25,>_ff
movw R26,R28
subi R26,110 ; addi 146
sbci R27,255
ld R30,x+
ld R31,x
lsl R30
rol R31
add R30,R24
adc R31,R25
elpm R22,Z+
elpm R23,Z
subi R22,1
sbci R23,0
.dbline 93
; sx=newx[vertex]; // set line start x to vertex[i] x position
movw R24,R28
adiw R24,18
movw R30,R22
lsl R30
rol R31
add R30,R24
adc R31,R25
ldd R2,z+0
ldd R3,z+1
sts _sx+1,R3
sts _sx,R2
.dbline 94
; sy=newy[vertex]; // set line start y to vertex[i] y position
movw R24,R28
subi R24,192 ; offset = 64
sbci R25,255
movw R30,R22
lsl R30
rol R31
add R30,R24
adc R31,R25
ldd R2,z+0
ldd R3,z+1
sts _sy+1,R3
sts _sy,R2
.dbline 95
; vertex=gg[i]-1; // temp = end vertex for this line
ldi R24,<_gg
ldi R25,>_gg
movw R26,R28
subi R26,110 ; addi 146
sbci R27,255
ld R30,x+
ld R31,x
lsl R30
rol R31
add R30,R24
adc R31,R25
elpm R22,Z+
elpm R23,Z
subi R22,1
sbci R23,0
.dbline 96
; ex=newx[vertex]; // set line end x to vertex[i+1] x position
movw R24,R28
adiw R24,18
movw R30,R22
lsl R30
rol R31
add R30,R24
adc R31,R25
ldd R2,z+0
ldd R3,z+1
sts _ex+1,R3
sts _ex,R2
.dbline 97
; ey=newy[vertex]; // set line end y to vertex[i+1] y position
movw R24,R28
subi R24,192 ; offset = 64
sbci R25,255
movw R30,R22
lsl R30
rol R31
add R30,R24
adc R31,R25
ldd R2,z+0
ldd R3,z+1
sts _ey+1,R3
sts _ey,R2
.dbline 98
; if(sx>255 | sy>255 | ex>255 | ey>255)
ldi R24,255
ldi R25,0
lds R2,_sx
lds R3,_sx+1
cp R24,R2
cpc R25,R3
brge L19
X1:
ldi R20,1
ldi R21,0
xjmp L20
L19:
clr R20
clr R21
L20:
ldi R24,255
ldi R25,0
lds R2,_sy
lds R3,_sy+1
cp R24,R2
cpc R25,R3
brge L21
X2:
ldi R24,1
movw R14,R24
xjmp L22
L21:
clr R14
clr R15
L22:
ldi R24,255
ldi R25,0
lds R2,_ex
lds R3,_ex+1
cp R24,R2
cpc R25,R3
brge L23
X3:
ldi R24,1
movw R12,R24
xjmp L24
L23:
clr R12
clr R13
L24:
ldi R24,255
ldi R25,0
lds R2,_ey
lds R3,_ey+1
cp R24,R2
cpc R25,R3
brge L25
X4:
ldi R24,1
movw R10,R24
xjmp L26
L25:
clr R10
clr R11
L26:
movw R2,R20
or R2,R14
or R3,R15
or R2,R12
or R3,R13
or R2,R10
or R3,R11
tst R2
brne X5
tst R3
breq L17
X5:
.dbline 99
; {
.dbline 100
; sx=255;
ldi R24,255
ldi R25,0
sts _sx+1,R25
sts _sx,R24
.dbline 101
; sy=255;
sts _sy+1,R25
sts _sy,R24
.dbline 102
; ex=255;
sts _ex+1,R25
sts _ex,R24
.dbline 103
; ey=255;
sts _ey+1,R25
sts _ey,R24
.dbline 104
; }
L17:
.dbline 105
; DisplyLine(sx, sy, ex, ey, 1);
ldi R24,1
ldi R25,0
std y+5,R25
std y+4,R24
lds R2,_ey
lds R3,_ey+1
std y+3,R3
std y+2,R2
lds R2,_ex
lds R3,_ex+1
std y+1,R3
std y+0,R2
lds R18,_sy
lds R19,_sy+1
lds R16,_sx
lds R17,_sx+1
xcall _DisplyLine
.dbline 106
; }
L14:
.dbline 90
movw R30,R28
subi R30,110 ; addi 146
sbci R31,255
ldd R24,z+0
ldd R25,z+1
adiw R24,1
movw R30,R28
subi R30,110 ; addi 146
sbci R31,255
std z+1,R25
std z+0,R24
.dbline 90
cpi R24,22
ldi R30,0
cpc R25,R30
brge X14
xjmp L13
X14:
X6:
.dbline 107
; LcdDsiplayRefresh();
xcall _LcdDsiplayRefresh
.dbline 108
; GuiDisStringF3(0,7,"MEGA128 16MHz 128X64",1);
ldi R24,1
ldi R25,0
std y+3,R25
std y+2,R24
ldi R24,<L27
ldi R25,>L27
std y+1,R25
std y+0,R24
ldi R18,7
ldi R19,0
clr R16
clr R17
xcall _GuiDisStringF3
.dbline 111
; //Delayms(20); // delay for a while to allow looking at the cube
; //ClrDisplyBuffer(); // clear the screen to remove old cube
; for (i=0; i<22; i++)
clr R0
clr R1
movw R30,R28
subi R30,110 ; addi 146
sbci R31,255
std z+1,R1
std z+0,R0
L28:
.dbline 112
; {
.dbline 113
; vertex=ff[i]-1;
ldi R24,<_ff
ldi R25,>_ff
movw R26,R28
subi R26,110 ; addi 146
sbci R27,255
ld R30,x+
ld R31,x
lsl R30
rol R31
add R30,R24
adc R31,R25
elpm R22,Z+
elpm R23,Z
subi R22,1
sbci R23,0
.dbline 114
; sx=newx[vertex];
movw R24,R28
adiw R24,18
movw R30,R22
lsl R30
rol R31
add R30,R24
adc R31,R25
ldd R2,z+0
ldd R3,z+1
sts _sx+1,R3
sts _sx,R2
.dbline 115
; sy=newy[vertex];
movw R24,R28
subi R24,192 ; offset = 64
sbci R25,255
movw R30,R22
lsl R30
rol R31
add R30,R24
adc R31,R25
ldd R2,z+0
ldd R3,z+1
sts _sy+1,R3
sts _sy,R2
.dbline 116
; vertex=gg[i]-1;
ldi R24,<_gg
ldi R25,>_gg
movw R26,R28
subi R26,110 ; addi 146
sbci R27,255
ld R30,x+
ld R31,x
lsl R30
rol R31
add R30,R24
adc R31,R25
elpm R22,Z+
elpm R23,Z
subi R22,1
sbci R23,0
.dbline 117
; ex=newx[vertex];
movw R24,R28
adiw R24,18
movw R30,R22
lsl R30
rol R31
add R30,R24
adc R31,R25
ldd R2,z+0
ldd R3,z+1
sts _ex+1,R3
sts _ex,R2
.dbline 118
; ey=newy[vertex];
movw R24,R28
subi R24,192 ; offset = 64
sbci R25,255
movw R30,R22
lsl R30
rol R31
add R30,R24
adc R31,R25
ldd R2,z+0
ldd R3,z+1
sts _ey+1,R3
sts _ey,R2
.dbline 119
; if(sx>255 | sy>255 | ex>255 | ey>255)
ldi R24,255
ldi R25,0
lds R2,_sx
lds R3,_sx+1
cp R24,R2
cpc R25,R3
brge L34
X7:
ldi R24,1
movw R14,R24
xjmp L35
L34:
clr R14
clr R15
L35:
ldi R24,255
ldi R25,0
lds R2,_sy
lds R3,_sy+1
cp R24,R2
cpc R25,R3
brge L36
X8:
ldi R24,1
movw R12,R24
xjmp L37
L36:
clr R12
clr R13
L37:
ldi R24,255
ldi R25,0
lds R2,_ex
lds R3,_ex+1
cp R24,R2
cpc R25,R3
brge L38
X9:
ldi R24,1
movw R10,R24
xjmp L39
L38:
clr R10
clr R11
L39:
ldi R24,255
ldi R25,0
lds R2,_ey
lds R3,_ey+1
cp R24,R2
cpc R25,R3
brge L40
X10:
ldi R22,1
ldi R23,0
xjmp L41
L40:
clr R22
clr R23
L41:
movw R2,R14
or R2,R12
or R3,R13
or R2,R10
or R3,R11
or R2,R22
or R3,R23
tst R2
brne X11
tst R3
breq L32
X11:
.dbline 120
; {
.dbline 121
; sx=255;
ldi R24,255
ldi R25,0
sts _sx+1,R25
sts _sx,R24
.dbline 122
; sy=255;
sts _sy+1,R25
sts _sy,R24
.dbline 123
; ex=255;
sts _ex+1,R25
sts _ex,R24
.dbline 124
; ey=255;
sts _ey+1,R25
sts _ey,R24
.dbline 125
; }
L32:
.dbline 126
; DisplyLine(sx, sy, ex, ey, 0);
clr R2
clr R3
std y+5,R3
std y+4,R2
lds R2,_ey
lds R3,_ey+1
std y+3,R3
std y+2,R2
lds R2,_ex
lds R3,_ex+1
std y+1,R3
std y+0,R2
lds R18,_sy
lds R19,_sy+1
lds R16,_sx
lds R17,_sx+1
xcall _DisplyLine
.dbline 127
; }
L29:
.dbline 111
movw R30,R28
subi R30,110 ; addi 146
sbci R31,255
ldd R24,z+0
ldd R25,z+1
adiw R24,1
movw R30,R28
subi R30,110 ; addi 146
sbci R31,255
std z+1,R25
std z+0,R24
.dbline 111
cpi R24,22
ldi R30,0
cpc R25,R30
brge X15
xjmp L28
X15:
X12:
.dbline -2
L1:
.dbline 0 ; func end
adiw R28,63
adiw R28,63
adiw R28,22 ; offset = 148
xcall pop_xgsetF0FC
adiw R28,4
ret
.dbsym l loop 7 I
.dbsym l cosaz 142 D
.dbsym l sinaz 138 D
.dbsym l cosay 134 D
.dbsym l sinay 130 D
.dbsym l cosax 126 D
.dbsym l sinax 122 D
.dbsym l zt 118 D
.dbsym l yt 114 D
.dbsym l xt 110 D
.dbsym l newy 64 A[46:23]I
.dbsym l newx 18 A[46:23]I
.dbsym l y 14 D
.dbsym l x 10 D
.dbsym l z 6 D
.dbsym r vertex 22 I
.dbsym l i 146 I
.dbsym l zpos 166 D
.dbsym l ypos 162 D
.dbsym l xpos 158 D
.dbend
.dbfunc e WriteDot _WriteDot fV
; temp2 -> R20
; a -> R10
; temp1 -> R14
; color -> y+10
; y -> R10
; x -> R12
.even
_WriteDot::
xcall push_xgsetF0FC
mov R10,R18
mov R12,R16
.dbline -1
.dbline 135
; }
;
; /***************************************
; * FUNCTION NAME: WriteDot
; * DESCRIPTION:
; /***************************************/
; void WriteDot(unsigned char x,unsigned char y,unsigned char color)
; {
.dbline 137
; unsigned char temp1,temp2,a;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -