Subversion Repositories Kolibri OS

Rev

Rev 1779 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1779 Rev 2022
1
;
1
;
2
;   application     :  3d shaking waved spiral
2
;   application     :  3d shaking waved spiral
3
;   compilator      :  fasm
3
;   compilator      :  fasm
4
;   system          :  MenuetOS
4
;   system          :  KolibriOS
5
;   author          :  macgub
5
;   author          :  macgub
6
;   email           :  macgub3@wp
6
;   email           :  macgub3@wp
7
 
7
 
8
timeout equ 3
8
timeout equ 3
9
maxx equ 600        ; window size
9
maxx equ 616	    ; window size
10
maxy equ 420
10
maxy equ 420
11
use32
11
use32
12
 
12
 
13
               org    0x0
13
	       org    0x0
14
 
14
 
15
               db     'MENUET01'              ; 8 byte id
15
	       db     'MENUET01'	      ; 8 byte id
16
               dd     0x01                    ; header version
16
	       dd     0x01		      ; header version
17
               dd     START                   ; start of code
17
	       dd     START		      ; start of code
18
               dd     I_END                   ; size of image
18
	       dd     I_END		      ; size of image
19
               dd     0x100000                ; memory for app
19
	       dd     0x100000		      ; memory for app
20
               dd     0xbffff                 ; esp
20
	       dd     0xbffff		      ; esp
21
               dd     0x0 , 0x0               ; I_Param , I_Icon
21
	       dd     0x0 , 0x0 	      ; I_Param , I_Icon
22
 
22
 
23
START:                          ; start of execution
23
START:				; start of execution
24
 
24
 
25
     call draw_window
25
     call draw_window
26
 
26
 
27
still:
27
still:
28
 
28
 
29
;    mov  eax,23                 ; wait here for event
29
;    mov  eax,23                 ; wait here for event
30
;    mov  ebx,timeout
30
;    mov  ebx,timeout
31
;    int  0x40
31
;    int  0x40
32
    mov eax,11                   ; check for event no wait
32
    mov eax,11			 ; check for event no wait
33
    int 0x40
33
    int 0x40
34
 
34
 
35
    cmp  eax,1                  ; redraw request ?
35
    cmp  eax,1			; redraw request ?
36
    je   red
36
    je	 red
37
    cmp  eax,2                  ; key in buffer ?
37
    cmp  eax,2			; key in buffer ?
38
    je   key
38
    je	 key
39
    cmp  eax,3                  ; button in buffer ?
39
    cmp  eax,3			; button in buffer ?
40
    je   button
40
    je	 button
41
 
41
 
42
    jmp  noclose
42
    jmp  noclose
43
 
43
 
44
  red:                          ; redraw
44
  red:				; redraw
45
    call draw_window
45
    call draw_window
46
    jmp  still
46
    jmp  still
47
 
47
 
48
  key:                          ; key
48
  key:				; key
49
    mov  eax,2                  ; just read it and ignore
49
    mov  eax,2			; just read it and ignore
50
    int  0x40
50
    int  0x40
-
 
51
    shr  eax,8
-
 
52
    cmp  eax, 27
51
    jmp  still
53
    jne  still
-
 
54
    mov  eax, -1
-
 
55
    int  0x40
-
 
56
 
52
 
57
 
53
  button:                       ; button
58
  button:			; button
54
    mov  eax,17                 ; get id
59
    mov  eax,17 		; get id
55
    int  0x40
60
    int  0x40
56
 
61
 
57
    cmp  ah,1                   ; button id=1 ?
62
    cmp  ah,1			; button id=1 ?
58
    jne  noclose
63
    jne  noclose
59
 
64
 
60
    mov  eax,-1                 ; close this program
65
    mov  eax,-1 		; close this program
61
    int  0x40
66
    int  0x40
62
  noclose:
67
  noclose:
63
 
68
 
64
; mov eax,13
69
; mov eax,13
65
; mov ebx,20*65536+maxx-25
70
; mov ebx,20*65536+maxx-25
66
; mov ecx,20*65536+maxy-25
71
; mov ecx,20*65536+maxy-25
67
; xor edx,edx
72
; xor edx,edx
68
; int 0x40
73
; int 0x40
69
 
74
 
70
 mov edi,screen_buf
75
 mov edi,screen_buf
71
 mov ecx,maxx*maxy*3/4
76
 mov ecx,maxx*maxy*3/4
72
 xor eax,eax
77
 xor eax,eax
73
 cld
78
 cld
74
 rep stosd
79
 rep stosd
75
 
80
 
76
 
81
 
77
 call calc_deg
82
 call calc_deg
78
 mov [z],0
83
 mov [z],0
79
 mov [sin_counter],0
84
 mov [sin_counter],0
80
 finit
85
 finit
81
oopz:
86
oopz:
82
 mov [x],0
87
 mov [x],0
83
 push [z]
88
 push [z]
84
 call calc_sin_variable
89
 call calc_sin_variable
85
oop:
90
oop:
86
  push [x]
91
  push [x]
87
;  call getcol  ;(x,z)
92
;  call getcol  ;(x,z)
88
  call fun                       ; calculates y and y1
93
  call fun			 ; calculates y and y1
89
;  call rotateY
94
;  call rotateY
90
  mov eax,[sin_variable]
95
  mov eax,[sin_variable]
91
  add eax,[vector_x]                     ;  vector_x
96
  add eax,[vector_x]			 ;  vector_x
92
  add [x],eax
97
  add [x],eax
93
  mov eax,[vector_y]
98
  mov eax,[vector_y]
94
  add [y],eax                     ;  vector_y
99
  add [y],eax			  ;  vector_y
95
  add [y1],eax
100
  add [y1],eax
96
  call point_perspective
101
  call point_perspective
97
  call draw_point_3d
102
  call draw_point_3d
98
 pop [x]
103
 pop [x]
99
 inc [x]
104
 inc [x]
100
 mov eax,[x]
105
 mov eax,[x]
101
 cmp eax,[loop_counter]
106
 cmp eax,[loop_counter]
102
 jne oop
107
 jne oop
103
 inc [sin_counter]
108
 inc [sin_counter]
104
 pop [z]
109
 pop [z]
105
 inc [z]
110
 inc [z]
106
 cmp [z],200
111
 cmp [z],200
107
 jne oopz
112
 jne oopz
108
 
113
 
109
 mov eax,7
114
 mov eax,7
110
 mov ebx,screen_buf
115
 mov ebx,screen_buf
111
 mov ecx,maxx*65536+maxy
116
 mov ecx,maxx*65536+maxy
112
 mov edx,20*65536+20
117
 mov edx,0*65536+0
113
 int 0x40
118
 int 0x40
114
 
119
 
115
 call set_elipse_dim
120
 call set_elipse_dim
116
 call set_vectors
121
 call set_vectors
117
 
122
 
118
jmp still
123
jmp still
119
;-----------------++++++PROCEDURES
124
;-----------------++++++PROCEDURES
120
getcol:
125
getcol:
121
 mov eax,[x_resolution]
126
 mov eax,[x_resolution]
122
 mul [z]
127
 mul [z]
123
 add eax,[x]
128
 add eax,[x]
124
 mov ebx,eax
129
 mov ebx,eax
125
 mov eax,35
130
 mov eax,35
126
 int 0x40
131
 int 0x40
127
 mov [col],eax
132
 mov [col],eax
128
ret
133
ret
129
 
134
 
130
set_vectors:
135
set_vectors:
131
 cmp [vector_x],55
136
 cmp [vector_x],55
132
 jne vec1
137
 jne vec1
133
 mov [vector_dir_x],1
138
 mov [vector_dir_x],1
134
 vec1:
139
 vec1:
135
 cmp [vector_x],250
140
 cmp [vector_x],250
136
 jne vec2
141
 jne vec2
137
 mov [vector_dir_x],0
142
 mov [vector_dir_x],0
138
 vec2:
143
 vec2:
139
 cmp [vector_dir_x],1
144
 cmp [vector_dir_x],1
140
 jne vec3
145
 jne vec3
141
 inc [vector_x]
146
 inc [vector_x]
142
 jmp end_x
147
 jmp end_x
143
 vec3:
148
 vec3:
144
 dec [vector_x]
149
 dec [vector_x]
145
 end_x:
150
 end_x:
146
 cmp [vector_y],195
151
 cmp [vector_y],195
147
 jne vec4
152
 jne vec4
148
 mov [vector_dir_y],1
153
 mov [vector_dir_y],1
149
 vec4:
154
 vec4:
150
 cmp [vector_y],205
155
 cmp [vector_y],205
151
 jne vec5
156
 jne vec5
152
 mov [vector_dir_y],0
157
 mov [vector_dir_y],0
153
 vec5:
158
 vec5:
154
 cmp [vector_dir_y],1
159
 cmp [vector_dir_y],1
155
 jne vec6
160
 jne vec6
156
 inc [vector_y]
161
 inc [vector_y]
157
 ret
162
 ret
158
 vec6:
163
 vec6:
159
 dec [vector_y]
164
 dec [vector_y]
160
ret
165
ret
161
set_elipse_dim:
166
set_elipse_dim:
162
 cmp [b],60
167
 cmp [b],60
163
 jne go11
168
 jne go11
164
 mov [elipse_dir],0
169
 mov [elipse_dir],0
165
 go11:
170
 go11:
166
 cmp [b],10
171
 cmp [b],10
167
 jne go12
172
 jne go12
168
 mov [elipse_dir],1
173
 mov [elipse_dir],1
169
 go12:
174
 go12:
170
 cmp [elipse_dir],1
175
 cmp [elipse_dir],1
171
 jne go13
176
 jne go13
172
 inc [b]
177
 inc [b]
173
 dec [a]
178
 dec [a]
174
 mov eax,[a]
179
 mov eax,[a]
175
 mov [xo],eax
180
 mov [xo],eax
176
 shl eax,1
181
 shl eax,1
177
 inc eax
182
 inc eax
178
 mov [loop_counter],eax
183
 mov [loop_counter],eax
179
 ret
184
 ret
180
 go13:
185
 go13:
181
 dec [b]
186
 dec [b]
182
 inc [a]
187
 inc [a]
183
 mov eax,[a]
188
 mov eax,[a]
184
 mov [xo],eax
189
 mov [xo],eax
185
 shl eax,1
190
 shl eax,1
186
 inc eax
191
 inc eax
187
 mov [loop_counter],eax
192
 mov [loop_counter],eax
188
ret
193
ret
189
 
194
 
190
calc_deg:
195
calc_deg:
191
 cmp [deg_counter], 360
196
 cmp [deg_counter], 360
192
 jne go_deg
197
 jne go_deg
193
 mov [deg_counter],0
198
 mov [deg_counter],0
194
 go_deg:
199
 go_deg:
195
 fldpi
200
 fldpi
196
 fidiv [deg_div]
201
 fidiv [deg_div]
197
 fimul [deg_counter]
202
 fimul [deg_counter]
198
 fstp [current_deg]
203
 fstp [current_deg]
199
; fsincos
204
; fsincos
200
; fstp [cosbeta]
205
; fstp [cosbeta]
201
; fstp [sinbeta]
206
; fstp [sinbeta]
202
 inc [deg_counter]
207
 inc [deg_counter]
203
 ret
208
 ret
204
 
209
 
205
;rotateY:
210
;rotateY:
206
; mov eax,[z]
211
; mov eax,[z]
207
; sub eax,[zoo]
212
; sub eax,[zoo]
208
; mov [subz],eax
213
; mov [subz],eax
209
; mov eax,[x]
214
; mov eax,[x]
210
; sub eax,[xoo]
215
; sub eax,[xoo]
211
; mov [subx],eax
216
; mov [subx],eax
212
;
217
;
213
; fld [sinbeta]
218
; fld [sinbeta]
214
; fimul [subz]
219
; fimul [subz]
215
; fchs
220
; fchs
216
; fld [cosbeta]
221
; fld [cosbeta]
217
; fimul[subx]
222
; fimul[subx]
218
; faddp
223
; faddp
219
; fiadd [xoo]
224
; fiadd [xoo]
220
; fistp [x]
225
; fistp [x]
221
 
226
 
222
; fld [sinbeta]
227
; fld [sinbeta]
223
; fimul [subx]
228
; fimul [subx]
224
; fld [cosbeta]
229
; fld [cosbeta]
225
; fimul [subz]
230
; fimul [subz]
226
; faddp
231
; faddp
227
; fiadd [zoo]
232
; fiadd [zoo]
228
; fistp [z]
233
; fistp [z]
229
; finit
234
; finit
230
 
235
 
231
; ret
236
; ret
232
 
237
 
233
point_perspective:
238
point_perspective:
234
  mov eax,[x]
239
  mov eax,[x]
235
  sub eax,[xobs]
240
  sub eax,[xobs]
236
  mov [xobssub],eax
241
  mov [xobssub],eax
237
  mov eax,[z]
242
  mov eax,[z]
238
  sub eax,[zobs]
243
  sub eax,[zobs]
239
  mov [zobssub],eax
244
  mov [zobssub],eax
240
 
245
 
241
  mov eax,[y]
246
  mov eax,[y]
242
  sub eax,[yobs]
247
  sub eax,[yobs]
243
  mov [yobssub],eax
248
  mov [yobssub],eax
244
  mov eax,[y1]
249
  mov eax,[y1]
245
  sub eax,[yobs]
250
  sub eax,[yobs]
246
  mov [y1obssub],eax
251
  mov [y1obssub],eax
247
 
252
 
248
  finit
253
  finit
249
  fild [xobssub]
254
  fild [xobssub]
250
  fidiv [zobssub]
255
  fidiv [zobssub]
251
  fimul [zobs]
256
  fimul [zobs]
252
  fchs
257
  fchs
253
  fiadd [xobs]
258
  fiadd [xobs]
254
  fistp [x]
259
  fistp [x]
255
  fild [yobssub]
260
  fild [yobssub]
256
  fidiv [zobssub]
261
  fidiv [zobssub]
257
  fimul [zobs]
262
  fimul [zobs]
258
  fchs
263
  fchs
259
  fiadd [yobs]
264
  fiadd [yobs]
260
  fistp [y]
265
  fistp [y]
261
 
266
 
262
;  mov eax,[xobssub]
267
;  mov eax,[xobssub]
263
; idiv [zobssub]
268
; idiv [zobssub]
264
;; mov eax,edx
269
;; mov eax,edx
265
; imul [zobs]
270
; imul [zobs]
266
; neg eax
271
; neg eax
267
;  add eax,[xobs]
272
;  add eax,[xobs]
268
;  mov [x],eax
273
;  mov [x],eax
269
;  mov eax,[yobssub]
274
;  mov eax,[yobssub]
270
;  idiv [zobssub]
275
;  idiv [zobssub]
271
;;  mov eax,edx
276
;;  mov eax,edx
272
;  imul [zobs]
277
;  imul [zobs]
273
;  neg eax
278
;  neg eax
274
;  add eax,[yobs]
279
;  add eax,[yobs]
275
;  mov [y],eax
280
;  mov [y],eax
276
 
281
 
277
  fild [y1obssub]
282
  fild [y1obssub]
278
  fidiv [zobssub]
283
  fidiv [zobssub]
279
  fimul [zobs]
284
  fimul [zobs]
280
  fchs
285
  fchs
281
  fiadd [yobs]
286
  fiadd [yobs]
282
  fistp [y1]
287
  fistp [y1]
283
ret
288
ret
284
calc_sin_variable:
289
calc_sin_variable:
285
                     ;calculate sinus variable
290
		     ;calculate sinus variable
286
 fldpi
291
 fldpi
287
 fidiv [sin_gran]
292
 fidiv [sin_gran]
288
 fimul [sin_counter]
293
 fimul [sin_counter]
289
 fadd  [current_deg]
294
 fadd  [current_deg]
290
 fsin
295
 fsin
291
 fimul [sin_mul]
296
 fimul [sin_mul]
292
 fistp [sin_variable]
297
 fistp [sin_variable]
293
ret
298
ret
294
 
299
 
295
fun:
300
fun:
296
; finit
301
; finit
297
 fild [x]
302
 fild [x]
298
 fisub [xo]
303
 fisub [xo]
299
; fchs
304
; fchs
300
; faddp
305
; faddp
301
 fild [a]
306
 fild [a]
302
 fdivp st1,st
307
 fdivp st1,st
303
 fmul st,st0
308
 fmul st,st0
304
 fchs
309
 fchs
305
 fld1
310
 fld1
306
 faddp
311
 faddp
307
 fsqrt
312
 fsqrt
308
 fimul [b]
313
 fimul [b]
309
 fld st
314
 fld st
310
 fchs
315
 fchs
311
 fiadd [yo]
316
 fiadd [yo]
312
 fistp [y]
317
 fistp [y]
313
 fiadd [yo]
318
 fiadd [yo]
314
 fistp [y1]
319
 fistp [y1]
315
ret
320
ret
316
draw_point_3d:
321
draw_point_3d:
317
 mov eax,[z]
322
 mov eax,[z]
318
 imul [sq]
323
 imul [sq]
319
 shr eax,10
324
 shr eax,10
320
 mov ebx,eax
325
 mov ebx,eax
321
 neg eax
326
 neg eax
322
 push eax
327
 push eax
323
 add eax,[y]
328
 add eax,[y]
324
 mov [y],eax
329
 mov [y],eax
325
 pop eax
330
 pop eax
326
 add eax,[y1]
331
 add eax,[y1]
327
 mov [y1],eax
332
 mov [y1],eax
328
 mov eax,ebx
333
 mov eax,ebx
329
 add eax,[x]
334
 add eax,[x]
330
 mov [x],eax
335
 mov [x],eax
331
 ;mov eax,1
336
 ;mov eax,1
332
 ;mov ebx,[x]
337
 ;mov ebx,[x]
333
 ;mov ecx,[y]
338
 ;mov ecx,[y]
334
 ;mov edx,[col]
339
 ;mov edx,[col]
335
 ;int 0x40
340
 ;int 0x40
336
 ;mov ecx,[y1]
341
 ;mov ecx,[y1]
337
 ;int 0x40
342
 ;int 0x40
338
 mov eax,maxx
343
 mov eax,maxx
339
 mul [y]
344
 mul [y]
340
 add eax,[x]
345
 add eax,[x]
341
 mov ebx,eax
346
 mov ebx,eax
342
 shl ebx,1
347
 shl ebx,1
343
 add eax,ebx
348
 add eax,ebx
344
 add eax,screen_buf
349
 add eax,screen_buf
345
 mov ebx,[col]
350
 mov ebx,[col]
346
 or [eax],ebx
351
 or [eax],ebx
347
 mov eax,maxx
352
 mov eax,maxx
348
 mul [y1]
353
 mul [y1]
349
 add eax,[x]
354
 add eax,[x]
350
 mov ebx,eax
355
 mov ebx,eax
351
 shl ebx,1
356
 shl ebx,1
352
 add eax,ebx
357
 add eax,ebx
353
 add eax,screen_buf
358
 add eax,screen_buf
354
 mov ebx,[col]
359
 mov ebx,[col]
355
 or [eax],ebx
360
 or [eax],ebx
356
ret
361
ret
357
 
362
 
358
;   *********************************************
363
;   *********************************************
359
;   *******  WINDOW DEFINITIONS AND DRAW ********
364
;   *******  WINDOW DEFINITIONS AND DRAW ********
360
;   *********************************************
365
;   *********************************************
361
draw_window:
366
draw_window:
362
 
367
 
363
    mov  eax,12                    ; function 12:tell os about windowdraw
368
    mov  eax,12 		   ; function 12:tell os about windowdraw
364
    mov  ebx,1                     ; 1, start of draw
369
    mov  ebx,1			   ; 1, start of draw
365
    int  0x40
370
    int  0x40
366
                                   ; DRAW WINDOW
371
								   ; DRAW WINDOW
367
    mov  eax,0                     ; function 0 : define and draw window
372
    mov  eax,0			   		   ; function 0 : define and draw window
368
    mov  ebx,100*65536+maxx+25         ; [x start] *65536 + [x size]
373
    mov  ebx,100*65536+maxx+9	   ; [x start] *65536 + [x size]
369
    mov  ecx,100*65536+maxy+25         ; [y start] *65536 + [y size]
374
    mov  ecx,100*65536+maxy+25	   ; [y start] *65536 + [y size]
370
    mov  edx,0x02000000            ; color of work area RRGGBB,8->color gl
375
    mov  edx,0x74000000 	  	   ; color of work area RRGGBB,8->color gl
371
    mov  esi,0x805080d0            ; color of grab bar  RRGGBB,8->color gl
-
 
372
    mov  edi,0x005080d0            ; color of frames    RRGGBB
376
    mov  edi,labelt
373
    int  0x40
377
    int  0x40
374
                                   ; WINDOW LABEL
378
				   ; WINDOW LABEL
375
    mov  eax,4                     ; function 4 : write text to window
-
 
376
    mov  ebx,8*65536+8             ; [x start] *65536 + [y start]
-
 
377
    mov  ecx,0x10ddeeff            ; font 1 & color ( 0xF0RRGGBB )
-
 
378
    mov  edx,labelt                ; pointer to text beginning
-
 
379
    mov  esi,labellen-labelt       ; text length
-
 
380
    int  0x40
-
 
381
                                   ; CLOSE BUTTON
-
 
382
    mov  eax,8                     ; function 8 : define and draw button
-
 
383
    mov  ebx,(maxx+25-19)*65536+12 ; [x start] *65536 + [x size]
-
 
384
    mov  ecx,5*65536+12            ; [y start] *65536 + [y size]
-
 
385
    mov  edx,1                     ; button id
-
 
386
    mov  esi,0x6688dd              ; button color RRGGBB
-
 
387
    int  0x40
-
 
388
 
-
 
389
    mov  eax,12                    ; function 12:tell os about windowdraw
379
    mov  eax,12 		   ; function 12:tell os about windowdraw
390
    mov  ebx,2                     ; 2, end of draw
380
    mov  ebx,2			   ; 2, end of draw
391
    int  0x40
381
    int  0x40
392
 
382
 
393
    ret
383
    ret
394
 
384
 
395
x_resolution dd 800
385
x_resolution dd 800
396
vector_x dd 200
386
vector_x dd 200
397
vector_y dd 200
387
vector_y dd 200
398
vector_dir_x db 1
388
vector_dir_x db 1
399
vector_dir_y db 1
389
vector_dir_y db 1
400
elipse_dir db 1
390
elipse_dir db 1
401
 
391
 
402
deg_counter dd ?   ; rotation variables
392
deg_counter dd ?   ; rotation variables
403
deg_div dd 20
393
deg_div dd 20
404
current_deg dd ?
394
current_deg dd ?
405
;cosbeta dd ?
395
;cosbeta dd ?
406
;sinbeta dd ?
396
;sinbeta dd ?
407
;zoo dd 100            ; rotation axle
397
;zoo dd 100            ; rotation axle
408
;xoo dd 40
398
;xoo dd 40
409
;yoo dd 20
399
;yoo dd 20
410
;subx dd ?
400
;subx dd ?
411
;suby dd ?
401
;suby dd ?
412
;subz dd ?
402
;subz dd ?
413
 
403
 
414
xobs dd maxx/2    ; 320     observer variables
404
xobs dd maxx/2	  ; 320     observer variables
415
yobs dd maxy/2    ; 175
405
yobs dd maxy/2	  ; 175
416
zobs dd -200
406
zobs dd -200
417
xobssub dd ?
407
xobssub dd ?
418
yobssub dd ?
408
yobssub dd ?
419
y1obssub dd ?
409
y1obssub dd ?
420
zobssub dd ?
410
zobssub dd ?
421
 
411
 
422
sin_variable dd ?
412
sin_variable dd ?
423
sin_mul dd 60
413
sin_mul dd 60
424
sin_gran dd 30
414
sin_gran dd 30
425
sin_counter dd  0
415
sin_counter dd	0
426
sq dd 724          ; round( (sqrt2)/2*1024 )
416
sq dd 724	   ; round( (sqrt2)/2*1024 )
427
z dd ?
417
z dd ?
428
x dd ?
418
x dd ?
429
y dd ?
419
y dd ?
430
y1 dd ?
420
y1 dd ?
431
xo dd 70           ; center point  , (loop counter-1)/2
421
xo dd 70	   ; center point  , (loop counter-1)/2
432
yo dd 20
422
yo dd 20
433
a dd 70            ; vertical half-axle
423
a dd 70 	   ; vertical half-axle
434
b dd 20            ; horizontal half-axle
424
b dd 20 	   ; horizontal half-axle
435
loop_counter dd 141 ; axle granularity
425
loop_counter dd 141 ; axle granularity
436
col dd 0x00ffffff
426
col dd 0x00ffffff
437
 
427
 
438
labelt:
428
labelt:
439
     db   ' 3D SHAKING WAVED SPIRAL'
429
     db   ' 3D shaking waved spiral',0
440
labellen:
430
labellen:
441
screen_buf:
431
screen_buf:
442
 
432
 
443
I_END:
433
I_END: