FR_KRE_2.ASM


1
; ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
2
; º                                                                         º
3
; º       (C) Copyright:  Freie Cracker Crew Hamburg Horn                   º
4
; º                                                                         º
5
; º            Fractale:         MCGA 320 x 200 x 256                       º
6
; º                                                                         º
7
; º                 von:         Dirk Wolfgang Glomp                        º
8
; º                                                                         º
9
; º                 und:         Herbert Athmer                             º
10
; º                                                                         º
11
; º                                                                         º
12
; ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍŒ
13
.MODEL SMALL
14
.386
15
.387
16
17
Col = 33
18
Iter= 322
19
20
.CODE
21
 org 100h
22
    cli
23
    mov     ax, @DATA
24
    mov     ds, ax
25
    mov     es, ax
26
27
    mov     ax, 13h       ;  320 x 200 x 256
28
    int   10h
29
    
30
    mov     ax, 1012h           ; Farb-Block zur Grafik-Karte
31
    mov     dx, OFFSET DAC      ; Tabelle je 3 Byte (rot,gruen,blau)
32
    mov     cx, 100h            ; fuer alle 256 Farben
33
    xor     bx, bx
34
    int   10h
35
       
36
    mov     ax, 0A000h
37
    mov     es, ax
38
    mov     fs, ax
39
;----------------------------------------------------------------------------
40
    finit                                ; FPU initialisieren
41
       
42
    mov     DWORD PTR[Z], 100000
43
    mov     DWORD PTR[A], 76544
44
    fild    DWORD PTR[A]
45
    fidiv   DWORD PTR[Z]
46
    fchs
47
    fst     DWORD PTR[A]                 ; -.76548
48
       
49
    mov     DWORD PTR[B], 76524
50
    fild    DWORD PTR[B]
51
    fidiv   DWORD PTR[Z]
52
    fchs
53
    fst     DWORD PTR[B]                 ; -.76528
54
       
55
    mov     DWORD PTR[C], 9984
56
    fild    DWORD PTR[C]
57
    fidiv   DWORD PTR[Z]
58
    fst     DWORD PTR[C]                 ; .0997
59
       
60
    mov     DWORD PTR[D], 9991
61
    fild    DWORD PTR[D]
62
    fidiv   DWORD PTR[Z]
63
    fst     DWORD PTR[D]                 ; .1003
64
65
    fild    DWORD PTR[NEUN]
66
    fidiv   DWORD PTR[ZEHN]
67
    fstp    DWORD PTR[PNEUN]             ; 0.9
68
       
69
    mov      cx, Iter                    ; Iteration
70
       
71
    fld     DWORD PTR[D]                 ;
72
    fsub    DWORD PTR[C]                 ;
73
    fidiv   DWORD PTR[YMAX]              ;
74
    fstp    DWORD PTR[G]                 ; G = (D-C)/YMAX
75
76
    fld     DWORD PTR[B]                 ;
77
    fsub    DWORD PTR[A]                 ;
78
    fidiv   DWORD PTR[XMAX]              ;
79
    fstp    DWORD PTR[F]                 ; F = (B-A)/XMAX
80
;--------------------------------------------------------
81
    call TABLE
82
    mov    BYTE PTR CS:[FARBE+3], 0
83
    mov    WORD PTR[II], 0               ;
84
    mov    WORD PTR[RADI], 0             ; Radius
85
    mov    WORD PTR[XM], 160             ; X Position
86
    mov    WORD PTR[YM], 100             ; Y Position
87
88
    mov    BYTE PTR CS:[RAD + 4], 0A0h
89
    mov    BYTE PTR CS:[BALL + 5], 3
90
91
KREIS:    xor     di, di
92
    xor     bp, bp
93
94
KR:       mov     bx, OFFSET SINTAB
95
    fld   DWORD PTR[bx+di]
96
    fimul DWORD PTR[RADI]   ; mal Radius
97
    fiadd DWORD PTR[XM]
98
    fistp DWORD PTR[X]
99
       
100
    fld   DWORD PTR[bx+di+2880]
101
    fimul DWORD PTR[RADI]   ; mal Radius
102
    fiadd DWORD PTR[YM]
103
    fistp DWORD PTR[Y]
104
105
    call    FRAK
106
;--------------------------------------------------------------------
107
    add     di, 4
108
    inc     bp
109
    cmp     bp, 2882            ; 2881
110
    jnz KR
111
112
    push    ds               ;         Tastatur  -  Abfrage
113
    mov     ax, 40h          ;        
114
    mov     ds, ax           ;
115
    sti                      ;         Interrupts freigeben !
116
    mov    ax, ds: WORD PTR[001Ch] ;  
117
    cmp    ax, ds: WORD PTR[001Ah] ;   Taste gedrckt,dann Ende !
118
    pop     ds
119
    jnz   RAUS               ;         sonst
120
    cli                      ;         Interrupts  sperren,
121
       
122
    mov    WORD PTR[XX], 0
123
    inc    WORD PTR[YY]
124
125
BALL:     add    BYTE PTR CS:[FARBE+3], 03h    ; Farbe  erh”hen
126
    inc    WORD PTR [RADI]      ; Radius erhoehen
127
RAD:      cmp    WORD PTR [RADI], 0
128
    jnz KREIS
129
;-------------------------------------------------------
130
    sti
131
TASTE:    mov     ax, 1                        ; Tastatur-Abfrage
132
    int   16h
133
RAUS:     mov     ax, 3                        ; Text-Mode
134
    int   10h
135
    mov     ax, 4C00h                    ; DOS-Ruecksprung
136
    int   21h
137
;--------------------------- S u b - Routinen -----------------------------
138
TABLE:    mov    WORD PTR[II], 0
139
    mov     bx, OFFSET SINTAB
140
    xor     di, di
141
142
TAB:      fldpi
143
    fimul  DWORD PTR[II]      ; Zaehler mal PI
144
    fidiv  DWORD PTR[TEIL]   ; durch 1440(int) teilen
145
    fsin
146
    fstp   DWORD PTR[bx+di]
147
148
    add     di, 4
149
    inc    WORD PTR[II]
150
    cmp    WORD PTR[II], 0E18h ; 3608
151
    jnz TAB
152
    ret
153
;-----------------------------------------------------------------
154
FRAK:     fld     DWORD PTR[G]
155
    fimul   DWORD PTR[XX]
156
    fadd    DWORD PTR[C]
157
    fst     st(1)                 ; K = G * Y + C
158
    fstp    st(2)                 ; J = K
159
160
    fld     DWORD PTR[F]
161
    fimul   DWORD PTR[YY]
162
    fadd    DWORD PTR[A]
163
    fst     st(3)                 ; I = F * X + A
164
      fstp    st(4)                 ; H = I
165
166
    fld     st(2-1)
167
    fmul    st, st(2)
168
    fstp    st(5)                 ; L = J * J
169
170
    fld     st(4-1)
171
    fmul    st, st(4)
172
    fstp    st(6)                 ; M = H * H
173
174
    xor     dx, dx
175
176
FRAK1:    inc     dx
177
    cmp     dx, cx                       ; Iteration
178
    ja  FRAK2
179
       
180
    fild    DWORD PTR[ZWEI]
181
    fmul    st, st(4)
182
    fmul    st, st(2)
183
    fadd    st, st(1)
184
    fstp    st(2)                 ; J = 2 * H * J + K
185
       
186
    fld     st(6-1)
187
    fsub    st, st(5)
188
    fadd    st, st(3)
189
    fstp    st(4)                 ; H = M - L + I
190
191
    fld     st(2-1)
192
    fmul    st, st(2)
193
    fstp    st(5)                 ; L = J * J
194
195
    fld     st(4-1)
196
    fmul    st, st(4)
197
    fst     st(6)                 ; M = H * H
198
199
    fadd    st, st(5)                 ; M + L
200
    fadd    DWORD PTR[PNEUN]
201
    fistp   DWORD PTR[WW]
202
       
203
    cmp     WORD PTR[WW], 5
204
    jb  FRAK1
205
206
FRAK2:    cmp     WORD PTR[X], 140h
207
    jnb  PIXOUT
208
    cmp     WORD PTR[Y], 0C8h
209
    jnb  PIXOUT
210
    add      dl, Col
211
    mov     BYTE PTR cs:[FARBE+3], dl
212
    mov      bx, Y
213
214
    mov     dx, bx             ; 320 Pixel a Zeile
215
    shl     bx, 8
216
    shl     dx, 6
217
    add     bx, dx
218
    add     bx, X              ; Y + X
219
FARBE:    mov    BYTE PTR fs:[bx], 0 ; Farb-Byte schreiben 0-255
220
PIXOUT:   inc    WORD PTR[XX]
221
    ret
222
;---------------------------------------------------------------------------
223
.DATA
224
225
A      DD ?
226
B      DD ?
227
C      DD ?
228
D      DD ?
229
G      DD ?
230
F      DD ?
231
K      DD ?
232
I      DD ?
233
H      DD ?
234
L      DD ?
235
M      DD ?
236
Z      DD ?
237
238
X      DW ?,?
239
XX     DW 0,?
240
Y      DW ?,?
241
YY     DW 0,?
242
243
XM       DW  ?,0          ; Integer
244
YM       DW  ?,0          ; Integer
245
II       DW  ?,0          ; Integer fuer Schleife 0 bis 2880
246
RADI     DW  ?,0          ; Integer Radius
247
TEIL     DD  5A0h         ; Integer 1440 = Teiler
248
249
XMAX   DW 320,?
250
YMAX   DW 200,?
251
252
ZWEI   DD 2
253
NEUN   DD 9
254
ZEHN   DD 10
255
PNEUN  DD ?     ; 0.9
256
WW     DW ?,?
257
258
;         rot  grn blau
259
260
DAC    DB 000h,000h,000h ;    4   blau
261
       DB 000h,000h,001h ;    5
262
       DB 000h,000h,002h ;    6
263
       DB 000h,000h,003h ;    7
264
       DB 000h,000h,004h ;    8
265
       DB 000h,000h,005h ;    9
266
       DB 000h,000h,006h ;   70
267
       DB 000h,000h,007h ;    1
268
       DB 000h,000h,008h ;    2
269
       DB 000h,000h,009h ;    3
270
       DB 000h,000h,00Ah ;    4
271
       DB 000h,000h,00Bh ;    5
272
       DB 000h,000h,00Ch ;    6
273
       DB 000h,000h,00Dh ;    7
274
       DB 000h,000h,00Eh ;    8
275
       DB 000h,000h,00Fh ;    9
276
       DB 000h,000h,010h ;   80
277
       DB 000h,000h,011h ;    1
278
       DB 000h,000h,012h ;    2
279
       DB 000h,000h,013h ;    3
280
       DB 000h,000h,014h ;    4
281
       DB 000h,000h,015h ;    5
282
       DB 000h,000h,016h ;    6
283
       DB 000h,000h,017h ;    7
284
       DB 000h,000h,018h ;    8
285
       DB 000h,000h,019h ;    9
286
       DB 000h,000h,01Ah ;   90
287
       DB 000h,000h,01Bh ;    1
288
       DB 000h,000h,01Ch ;    2
289
       DB 000h,000h,01Dh ;    3
290
       DB 000h,000h,01Eh ;    4
291
       DB 000h,000h,01Fh ;    5
292
       DB 000h,000h,020h ;    6
293
       DB 000h,000h,021h ;    7
294
       DB 000h,000h,022h ;    8
295
       DB 000h,000h,023h ;    9
296
       DB 000h,000h,024h ;  100
297
       DB 000h,000h,025h ;    1
298
       DB 000h,000h,026h ;    2
299
       DB 000h,000h,027h ;    3
300
       DB 000h,000h,028h ;    4
301
       DB 000h,000h,029h ;    5
302
       DB 000h,000h,02Ah ;    6
303
       DB 000h,000h,02Bh ;    7
304
       DB 000h,000h,02Ch ;    8
305
       DB 000h,000h,02Dh ;    9
306
       DB 000h,000h,02Eh ;  110
307
       DB 000h,000h,02Fh ;    1
308
       DB 000h,000h,030h ;    2
309
       DB 000h,000h,031h ;    3
310
       DB 000h,000h,032h ;    4
311
       DB 000h,000h,033h ;    5
312
       DB 000h,000h,034h ;    6
313
       DB 000h,000h,035h ;    7
314
       DB 000h,000h,036h ;    8
315
       DB 000h,000h,037h ;    9
316
       DB 000h,000h,038h ;  120
317
       DB 000h,000h,039h ;    1
318
       DB 000h,000h,03Ah ;    2
319
       DB 000h,000h,03Bh ;    3
320
       DB 000h,000h,03Ch ;    4
321
       DB 000h,000h,03Dh ;    5
322
       DB 000h,000h,03Eh ;    6
323
       DB 000h,000h,03Fh ;    7
324
325
       DB 000h,000h,000h ;    0   rot
326
       DB 001h,000h,000h ;    1
327
       DB 002h,000h,000h ;    2
328
       DB 003h,000h,000h ;    3
329
       DB 004h,000h,000h ;    4
330
       DB 005h,000h,000h ;    5
331
       DB 006h,000h,000h ;    6
332
       DB 007h,000h,000h ;    7
333
       DB 008h,000h,000h ;    8
334
       DB 009h,000h,000h ;    9
335
       DB 00Ah,000h,000h ;   10
336
       DB 00Bh,000h,000h ;    1
337
       DB 00Ch,000h,000h ;    2
338
       DB 00Dh,000h,000h ;    3
339
       DB 00Eh,000h,000h ;    4
340
       DB 00Fh,000h,000h ;    5
341
       DB 010h,000h,000h ;    6
342
       DB 011h,000h,000h ;    7
343
       DB 012h,000h,000h ;    8
344
       DB 013h,000h,000h ;    9
345
       DB 014h,000h,000h ;   20
346
       DB 015h,000h,000h ;    1
347
       DB 016h,000h,000h ;    2
348
       DB 017h,000h,000h ;    3
349
       DB 018h,000h,000h ;    4
350
       DB 019h,000h,000h ;    5
351
       DB 01Ah,000h,000h ;    6
352
       DB 01Bh,000h,000h ;    7
353
       DB 01Ch,000h,000h ;    8
354
       DB 01Dh,000h,000h ;    9
355
       DB 01Eh,000h,000h ;   30
356
       DB 01Fh,000h,000h ;    1
357
       DB 020h,000h,000h ;    2
358
       DB 021h,000h,000h ;    3
359
       DB 022h,000h,000h ;    4
360
       DB 023h,000h,000h ;    5
361
       DB 024h,000h,000h ;    6
362
       DB 025h,000h,000h ;    7
363
       DB 026h,000h,000h ;    8
364
       DB 027h,000h,000h ;    9
365
       DB 028h,000h,000h ;   40
366
       DB 029h,000h,000h ;    1
367
       DB 02Ah,000h,000h ;    2
368
       DB 02Bh,000h,000h ;    3
369
       DB 02Ch,000h,000h ;    4
370
       DB 02Dh,000h,000h ;    5
371
       DB 02Eh,000h,000h ;    6
372
       DB 02Fh,000h,000h ;    7
373
       DB 030h,000h,000h ;    8
374
       DB 031h,000h,000h ;    9
375
       DB 032h,000h,000h ;   50
376
       DB 033h,000h,000h ;    1
377
       DB 034h,000h,000h ;    2
378
       DB 035h,000h,000h ;    3
379
       DB 036h,000h,000h ;    4
380
       DB 037h,000h,000h ;    5
381
       DB 038h,000h,000h ;    6
382
       DB 039h,000h,000h ;    7
383
       DB 03Ah,000h,000h ;    8
384
       DB 03Bh,000h,000h ;    9
385
       DB 03Ch,000h,000h ;   60
386
       DB 03Dh,000h,000h ;    1
387
       DB 03Eh,000h,000h ;    2
388
       DB 03Fh,000h,000h ;    3
389
390
       DB 000h,000h,000h ;    8   gruen
391
       DB 000h,001h,000h ;    9
392
       DB 000h,002h,000h ;  130
393
       DB 000h,003h,000h ;    1
394
       DB 000h,004h,000h ;    2
395
       DB 000h,005h,000h ;    3
396
       DB 000h,006h,000h ;    4
397
       DB 000h,007h,000h ;    5
398
       DB 000h,008h,000h ;    6
399
       DB 000h,009h,000h ;    7
400
       DB 000h,00Ah,000h ;    8
401
       DB 000h,00Bh,000h ;    9
402
       DB 000h,00Ch,000h ;  140
403
       DB 000h,00Dh,000h ;    1
404
       DB 000h,00Eh,000h ;    2
405
       DB 000h,00Fh,000h ;    3
406
       DB 000h,010h,000h ;    4
407
       DB 000h,011h,000h ;    5
408
       DB 000h,012h,000h ;    6
409
       DB 000h,013h,000h ;    7
410
       DB 000h,014h,000h ;    8
411
       DB 000h,015h,000h ;    9
412
       DB 000h,016h,000h ;  150
413
       DB 000h,017h,000h ;    1
414
       DB 000h,018h,000h ;    2
415
       DB 000h,019h,000h ;    3
416
       DB 000h,01Ah,000h ;    4
417
       DB 000h,01Bh,000h ;    5
418
       DB 000h,01Ch,000h ;    6
419
       DB 000h,01Dh,000h ;    7
420
       DB 000h,01Eh,000h ;    8
421
       DB 000h,01Fh,000h ;    9
422
       DB 000h,020h,000h ;  160
423
       DB 000h,021h,000h ;    1
424
       DB 000h,022h,000h ;    2
425
       DB 000h,023h,000h ;    3
426
       DB 000h,024h,000h ;    4
427
       DB 000h,025h,000h ;    5
428
       DB 000h,026h,000h ;    6
429
       DB 000h,027h,000h ;    7
430
       DB 000h,028h,000h ;    8
431
       DB 000h,029h,000h ;    9
432
       DB 000h,02Ah,000h ;  170
433
       DB 000h,02Bh,000h ;    1
434
       DB 000h,02Ch,000h ;    2
435
       DB 000h,02Dh,000h ;    3
436
       DB 000h,02Eh,000h ;    4
437
       DB 000h,02Fh,000h ;    5
438
       DB 000h,030h,000h ;    6
439
       DB 000h,031h,000h ;    7
440
       DB 000h,032h,000h ;    8
441
       DB 000h,033h,000h ;    9
442
       DB 000h,034h,000h ;  180
443
       DB 000h,035h,000h ;    1
444
       DB 000h,036h,000h ;    2
445
       DB 000h,037h,000h ;    3
446
       DB 000h,038h,000h ;    4
447
       DB 000h,039h,000h ;    5
448
       DB 000h,03Ah,000h ;    6
449
       DB 000h,03Bh,000h ;    7
450
       DB 000h,03Ch,000h ;    8
451
       DB 000h,03Dh,000h ;    9
452
       DB 000h,03Eh,000h ;  190
453
       DB 000h,03Fh,000h ;    1
454
455
       DB 0C0h,040h,000h ;    2   gelb
456
       DB 0C1h,041h,000h ;    3
457
       DB 0C2h,042h,000h ;    4
458
       DB 0C3h,043h,000h ;    5
459
       DB 0C4h,044h,000h ;    6
460
       DB 0C5h,045h,000h ;    7
461
       DB 0C6h,046h,000h ;    8
462
       DB 0C7h,047h,000h ;    9
463
       DB 0C8h,048h,000h ;  200
464
       DB 0C9h,049h,000h ;    1
465
       DB 0CAh,04Ah,000h ;    2
466
       DB 0CBh,04Bh,000h ;    3
467
       DB 0CCh,04Ch,000h ;    4
468
       DB 0CDh,04Dh,000h ;    5
469
       DB 0CEh,04Eh,000h ;    6
470
       DB 0CFh,04Fh,000h ;    7
471
       DB 0D0h,050h,000h ;    8
472
       DB 0D1h,051h,000h ;    9
473
       DB 0D2h,052h,000h ;  210
474
       DB 0D3h,053h,000h ;    1
475
       DB 0D4h,054h,000h ;    2
476
       DB 0D5h,055h,000h ;    3
477
       DB 0D6h,056h,000h ;    4
478
       DB 0D7h,057h,000h ;    5
479
       DB 0D8h,058h,000h ;    6
480
       DB 0D9h,059h,000h ;    7
481
       DB 0DAh,05Ah,000h ;    8
482
       DB 0DBh,05Bh,000h ;    9
483
       DB 0DCh,05Ch,000h ;  220
484
       DB 0DDh,05Dh,000h ;    1
485
       DB 0DEh,05Eh,000h ;    2
486
       DB 0DFh,05Fh,000h ;    3
487
       DB 0E0h,060h,000h ;    4
488
       DB 0E1h,061h,000h ;    5
489
       DB 0E2h,062h,000h ;    6
490
       DB 0E3h,063h,000h ;    7
491
       DB 0E4h,064h,000h ;    8
492
       DB 0E5h,065h,000h ;    9
493
       DB 0E6h,066h,000h ;  230
494
       DB 0E7h,067h,000h ;    1
495
       DB 0E8h,068h,000h ;    2
496
       DB 0E9h,069h,000h ;    3
497
       DB 0EAh,06Ah,000h ;    4
498
       DB 0EBh,06Bh,000h ;    5
499
       DB 0ECh,06Ch,000h ;    6
500
       DB 0EDh,06Dh,000h ;    7
501
       DB 0EEh,06Eh,000h ;    8
502
       DB 0EFh,06Fh,000h ;    9
503
       DB 0F0h,070h,000h ;  240
504
       DB 0F1h,071h,000h ;    1
505
       DB 0F2h,072h,000h ;    2
506
       DB 0F3h,073h,000h ;    3
507
       DB 0F4h,074h,000h ;    4
508
       DB 0F5h,075h,000h ;    5
509
       DB 0F6h,076h,000h ;    6
510
       DB 0F7h,077h,000h ;    7
511
       DB 0F8h,078h,000h ;    8
512
       DB 0F9h,079h,000h ;    9
513
       DB 0FAh,07Ah,000h ;  250
514
       DB 0FBh,07Bh,000h ;    1
515
       DB 0FCh,07Ch,000h ;    2
516
       DB 0FDh,07Dh,000h ;    3
517
       DB 0FEh,07Eh,000h ;    4
518
       DB 0FFh,07Fh,000h ;    5
519
520
SINTAB   DD  0E19h DUP (?) ; Real
521
522
.STACK 20h
523
 END