products/Sources/formale Sprachen/MASM image not shown  

Quellcode-Bibliothek

© Kompilation durch diese Firma

[Weder Korrektheit noch Funktionsfähigkeit der Software werden zugesichert.]

Datei: fire.asm   Sprache: Masm

include  macro.inc      ;Makros einbinden
         .MODEL Small   ;EXE
         .486           ;Prozessortyp
         .STACK 100h  

XSize    EQU 320        ;320 Pixel breit...
YSize    EQU 200        ;... und 200 hoch

         .DATA          ;Die Daten:
include  palette.dat  ;Mit MakePal erstellte Palette
Msg      DB 10,13,"Flammendemo",10,13,"$"

         .CODE          ;Der Code...
 Start:  CutMem         ;Speicher freigeben
         AllocMem 0FFFh ;und reservieren
         mov  es,ax     ;Für später
         mov  fs,ax     ;In FS sichern

         mov  ax,@data
         mov  ds,ax     ;DS initialisieren

         xor  eax,eax   ;EAX=0
         xor  di,di     ;ES:DI auf Pufferanfang
         mov  cx,0FFF0h/4 ;Pufferlänge (Doppelworte)
         rep  stosd     ;Puffer mit 0 überschreiben

         SetVGA         ;In den VGA-Modus
         PalOut Palette ;Palette senden
  
         mov  bx,9433h  ;Für Random
         push fs       
         pop  ds        ;DS auf res. Puffer
;nun: ES auf Videospeicher und DS auf Puffer!

MainLoop:
         mov  si,XSize*YSize ;oben 2.Zeile anfangen
         mov  cx,XSize*2  ;1. u. letze Zeile nicht
FillLi:  call Random    ;Zufallszahl bitte
         mov  [si],dl   ;nach DS:SI
         dec  si
         dec  cx
         jnz  FillLi    ;Brennstoff

         call MakeFire  ;Verbrennen
         call DrawScr   ;und ausgeben
         
         mov  ah,01h
         int  16h
         jz   MainLoop  ;Wurde Taste gedrückt?
         xor  ah,ah
         int  16h       ;Welche?
         cmp  al,"i"    ;Normale Flamme...
         jne  Weiter
         xor  bp,bp
         jmp  MainLoop
Weiter:
         cmp  al,"o"    ;Große Flamme
         jne  Raus
         mov  bp,"o"
         jmp  MainLoop
Raus:
         push ds
         pop  es
         mov  ah,49h
         int  21h       ;Speicher wieder freigeben

         StVidMod 3     ;Normaler Videomodus
         mov  ax,@data
         mov  ds,ax

         mov  ah,09h
         mov  dx,OFFSET Msg
         int  21h       ;Text ausgeben
         mov  ah,4Ch
         int  21h       ;Programm beenden...

Random   PROC NEAR      ;Zufallsgenerator
         mov  ax,bx     ;Faktor1 nach AX
         mov  dx,8405h  ;Faktor2 nach DX 
         mul  dx        ;AX*DX=DX:AX
         inc  ax        ;AX=AX+1
         mov  bx,ax     ;AX wieder nach BX
         ret            ;Zurück...
         ENDP

MakeFire PROC NEAR
         mov  si,XSize               ;Oben 2. Zeile
         mov  cx,XSize*YSize-XSize*2 
         ;1. und letzte Zeile nicht
FireLoop: 
         xor  ax,ax          ;AX=0
         mov  al,[si]        ;eigentliches Pixel
         add  al,[si+XSize]  ;+Pixel darunter
         adc  ah,0           ;AH+1 falls zuviel
         add  al,[si+1]      ;+Pixel rechts daneben
         adc  ah,0           ;AH+1 falls zuviel
         add  al,[si-1]      ;+Pixel links daneben 
         adc  ah,0           ;AH+1 falls zuviel
         shr  ax,2           ;AX=AX/4
         jz   NichtSchrumpfen ;Wenn AX=0 kein DEC
         cmp  bp,"o"         ;Wurde o gedrückt?
         je   NichtSchrumpfen ;Ja: Kein DEC
         dec  ax             ;Flamme klein halten

NichtSchrumpfen:

         mov  [si-XSize],al  ;Wert darüber platzieren 
         inc  si             ;nächstes Pixel!
         dec  cx             ;Zähler - 1
         jnz  FireLoop       ;Weiter...
         ret                 ;Zurück
MakeFire ENDP

DrawScr  PROC NEAR
         WaitRet        ;Das bekannte Makro
         xor  si,si     ;Anfang Puffer
         xor  di,di     ;Anfang Videospeicher
         mov  cx,(XSize*YSize-4*XSize)/4
         rep  movsd     ;Alles Raus! DS:SI->ES:DI
         ret            ;Und zurück...
DrawScr  ENDP

  END Start

¤ Dauer der Verarbeitung: 0.3 Sekunden  (vorverarbeitet)  ¤





Download des
Quellennavigators
Download des
sprechenden Kalenders

in der Quellcodebibliothek suchen




Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.


Bemerkung:

Die farbliche Syntaxdarstellung ist noch experimentell.


Bot Zugriff