014
06.10.2003, 17:14 Uhr
Bruder Leif
dances with systems (Operator)
|
Moin!
Abgesehen davon, daß Mode 10 für ein OS nicht unbedingt optimal ist (und die BIOS-Routinen lahm wie noch was), hier mal ein kleines altes Beispiel:
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
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 _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 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
|
Nicht lachen, ist noch aus meiner Wenig-Kommentare-Sind-Schön-Zeit...
Der _sin-Teil erstellt die Sinusdaten fürs Plasma, der _pal-Teil erstellt die Farbpalette, und von _plasma1 bis_Retrace wird jeweils EIN Bildschirm aufgebaut. _Retrace wartet auf den vertikalen Retrace = Graphikkarte hat das Bild vollständig aufgebaut -> nächstes, und _ende springt bei ESC raus. Viel Spaß damit... -- Mit 40 Fieber sitzt man nicht mehr vor dem PC. Man liegt im Bett. Mit dem Notebook. |