003
30.10.2004, 15:45 Uhr
Bruder Leif
dances with systems (Operator)
|
Hier mal ein kleines Sinusplasma als Beispiel (TASM-Syntax). Achtung, 16 Bit:
Code: |
.model small .stack .code .386
STORECOLORS MACRO mov al, bl out dx, al mov al, bh out dx, al mov al, ah out dx, al ENDM
; In den Graphikmodus wechseln und ; Palette aufbauen
Start: mov ax, SEG _DATA mov ds, ax mov es, ax mov ax, 013h int 010h cld xor cx, cx lea di, bSin _sin1: fldpi mov wBuffer, cx fild wBuffer fmulp st(1), st mov wBuffer, 128 fild wBuffer fdivp st(1), st fsin fld1 faddp st(1), st mov wBuffer, 63 fild wBuffer fmulp st(1), st fistp wBuffer mov ax, wBuffer stosb inc cl jnz _sin1 mov ax, 0a000h mov es, ax mov dx, 03c8h out dx, al inc dx xor ah, ah mov bx, 03f00h mov cx, 64 _pal1: STORECOLORS dec bh inc bl LOOP _pal1 mov cx, 64 _pal2: inc bh dec bl STORECOLORS LOOP _pal2 mov cx, 64 _pal3: STORECOLORS inc ah inc bl LOOP _pal3 mov cx, 64 dec ah _pal4: dec bl STORECOLORS dec bh LOOP _pal4
; Palette fertig aufgebaut ; Plasma starten
_plasma1: xor ax, ax mov di, ax mov y, ax lea bx, bSin _draw1: mov ax, y add ax, DeltaX xlatb mov wBuffer, ax mov x, 0 _draw2: mov ax, x add ax, DeltaX xlatb add ax, y add ax, 64 xlatb mov dx, ax mov ax, x add ax, wBuffer add ax, 64 xlatb add dx, ax mov al, dl stosb inc x cmp x, 320 jne _draw2 inc y cmp y, 200 jne _draw1 inc DeltaX mov ah, 1 int 016h jnz _ende
; Auf vertikalen Retrace warten, um ; Flackern zu vermeiden
mov dx, 03dah _Retrace: in al, dx and al, 8 jz _Retrace jmp _plasma1 _ende: mov ax, 003h int 010h mov ax, 04c00h int 021h
.data DeltaX DW 0 wBuffer DW ? x DW ? y DW ? bSin DB 256 DUP (?)
END Start
|
-- Mit 40 Fieber sitzt man nicht mehr vor dem PC. Man liegt im Bett. Mit dem Notebook. |