⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 3dtesting.s

📁 3D LCD for running graphical lCDs
💻 S
📖 第 1 页 / 共 4 页
字号:
	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 + -