OBS! Denna textfil ingår i ett arkiv som är dedikerat att bevara svensk undergroundkultur, med målsättningen att vara så heltäckande som möjligt. Flashback kan inte garantera att innehållet är korrekt, användbart eller baserat på fakta, och är inte heller ansvariga för eventuella skador som uppstår från användning av informationen.
-------------------------------------------------------------------------
| wwww wwww sssss pppppppp aaaaaaaaa |
| wwww wwww sssssssss ppppppppp aaaaaaaaaaa |
| wwww wwww sss sss ppp ppp aaa aaa |
| wwww wwww sss ppp ppp aaa aaa |
| wwww wwww sss pppppppp aaaaaaaaaaa |
| wwww www wwww ssss ppp aaaaaaaaaaa |
| wwww wwwwwww wwww sss sss ppp aaaa aaa |
| wwwwwwwwwwwwwwwww sss ssss ppp aaa aaa |
| wwwwww wwwwww sssssss ppp aaa aaa |
| |
| N u m m e r # 4 |
------------------||-----------------------------------||----------------
|| ||
|| Detta e-zine läses bäst med || Realese date:
|| pico lr Wordpad || 11/6 99
------------------||------------------- || Realese time:
| -=-Innehåll-=- | || 16:50
|-------------------------------------- || Sise: 32.6 kb
|#Ledare | d0e | -------------------------------
|#x86 Part2 | -Unholy Avatar- | | -=- Disc(lamer)-=- |
|#/Mode #wspa kick | Wspa Team | |------------------------------
|#Join | Mr Despot | |Vi på WSPA tar ej något |
|#Noteringar | d0e | |ansvar för dessa texter som |
|#Slutord | d0e | |publiseras här eller vad des-|
--------------------------------------- |ssa kan användas till. Dessa |
|är endast till för informati-|
|on, Vi uppmanar igen till att|
www.wspa.cjb.net |begå några brottsliga handl- |
|ingar. Om du ej håller med om|
% % \ _^ / ,^, |detta så sluta med att läsa |
% % \>@@</ (( |nu. |
===== (..) );) -------------------------------
| |= vv\^^^^ /
| |/ /== ))) ) <--- ivil Kn1rk4r drake --/
\___/ ( ==/ )=< \
{{{)=(}}}(_}}}
-----------------------------------------------------------------------
| [ Ledare ] |
-----------------------------------------------------------------------
Jaha då var det dax för en nytt nummer av WSPA nämligen #4. Och som
lyser många medlemmar med sin frånvaro. Det värkar som vi får börja med
en lite upprensning här. Det e vackert väder ute och det e skönt därför
blir detta ett litet nummer iaf till artikelmässigt sett, man har helt
enkelt inte tid. Det e ju sommar. Nä nu börjar det bli väldigt varmt
kanske dax för bad eller ja vet inte..finns det nått mer viktigt att
säga hmm...ja #wspa har flyttat till dalnet istället från undernet och
det var ett lyckat drag...tror jag hitills. Bahh och som vanligt vi
behöver mer writers annars kan nog dett bli ett utav dom sista nummren
av WSPA som kommer att skrivas (åhhnej kommer alla att tänka nu :] )
Ger ut det här nummret nu ganska kort efter #3 men det var för jag
kände för att skriva nått och ge ut vilka medlemmar som e kickade.
Nä nu känner jag inte för att skriva mer......
Sup och ha det bra i Sommar /WSPA
-----------------------------------------------------------------------
| [ x86 - Part2 ] |
-----------------------------------------------------------------------
[Lite intro]
Ok här kommer den sista delen i min artikel om x86 hoppas ni förstog
nått sen den förra delen Den här gången kommer vi att gå igenom
programmer BlackArt.exe det är ett program somjag gjort för att
visa er lite filfunktioner och grafik hanteringen i dos bland annat.
Ja så det eväl bara att forsätta....förresten det finns en kompilerad
version att hämta från.
www.wspa.cjb.net om ni skulle vilja se programmet.
BlackArt.exe
1. Syftet med programmet
Demonstrera filhantering, grafiska funktioner, mm. i DOS
2. Programmets struktur
3. Header
Signatur = MZ
CS:IP = 0x00:0x048C
Datasegment
64996 bytes
Kodsegment
1738 bytes
Programmet börjar med en Exe header som talar om vilket operativsystem som programmet
är gjort för, vart i filen den körbara maskinkoden börjar osv. Sedan kommer datasegmentet
som innehåller programmets data, som t ex alla konstanter och variabler. Sist kommer
kodsegmentet, som är själva programmet. Programmet är komprimerat och tar därför bara
2490 bytes, istället för 66734 bytes som bilden visar.
3. Förenklad beskrivning av källkoden
Programmet i sig är ganska enkelt. Det svåra när man programmerar i Assembler är att skriva
alla funktioner som programmet ska använda. Rent teoretiskt sett så skulle man inte behöva
skriva några funktioner alls, men i praktiken tvivlar jag på att det skulle fungera, eftersom att
det skulle bli fruktansvärt mycket kod, och väldigt svårt att hålla reda på vad som gör vad. En
annan sak som är viktig tänka på, förutom att skriva så många funktioner som möjligt, är att
kommentera så mycket av koden som möjligt. En helt okommenterad källkod i Assembler är
fruktansvärt svår att förstå, även för den mest rutinerade programmeraren. Jag vågar nog påstå
att det inte finns nån som kan komma ihåg vad alla olika interrupts och dylikt gör. Nåja, vi
går vidare till det bifogade programmets källkod. Programmet börjar med att tala om vart
datasegmentet ligger genom att flytta dess adress till ds (Data Segment) och es (Extra
Segment) registren i datorns minne.
mov ax, @data
mov ds, ax
mov es, ax
Detta är nödvändigt för att kunna komma åt alla variabler och liknande som programmet
använder. Nästa steg i programmet är att anropa en DOS-funktion som ändrar grafikläget till
320x200x256. I klartext betyder det att skärmen blir 320 pixlar bred, 200 pixlar hög och
kan använda maximalt 256 färger.
mov ax, 13h
int 10h
Bland oss programmerare så är detta klassiska grafikläge för DOS allmänt känt som mode
13h. Nu när vi har ändrat grafikläget är det dags att ladda in den palett som ska användas.
Detta gör vi genom att först flytta adressen till variabeln (spinPal) som håller palettens
filnamn (logo.pal) till si (Source Index) registret i minnet. Sedan anropar vi funktionen
LoadPal som laddar in paletten i variabeln palbuf. Tillsist flyttar vi variabelns (palbuf) adress
till dx (Data) registret och anropar funktionen SetPal, som byter den nuvarande paletten till
den som vi laddade in i variabeln palbuf.
mov si, offset spinPal
call LoadPal
mov dx, offset palbuf
call SetPal
Nu är det dags att visa själva animationen. Det gör vi genom att anropa funktionen SpinLogo
call SpinLogo
Funktionen SpinLogo kommer i sin tur att anropa en del funktioner som t ex WaitVrt. Jag
kommer inte gå in djupare i det ämnet, eller förklara hur funktionerna är skrivna eftersom att
det är ganska invecklat, och skulle ta upp mer papper än vad jag har råd med. Om du är
intresserad av hur programmet fungerar i detalj, så kan du läsa den bifogade källkoden, som
för övrigt är innehåller kommentarer som beskriver vad varje rad gör, i nästa avsnitt. Nog om
det. Vi fortsätter med att anropa funktionen TheEnd.
call TheEnd
Precis som det framgår av namnet, så är det den sista funktionen i detta programmet. Den
börjar med att scrolla upp fem partier av bilden, och suddar sedan ut resterande partier.
Efter det skriver den ut bokstäver i olika färger som bildar ord, som i sin tur bildar en mening.
Tillsist så väntar den på att man ska trycka på tangenten Escape. När man har gjort det så
ska programmet först återgå till textläge, och sedan avslutas. Det sker på följande sätt:
Flytta värdet 0x0003 till ax (Accumulator) registret i minnet. Det kommer att användas som
parameter till nästa interrupt.
mov ax, 0003h
Skicka interrupt 10h till processorn (en interrupt säger till processorn att sluta med det
den gör och utföra en instruktion). Instruktionen 10h (0x10) är en CPU-genererad
videofunktion. ax registrets låga byte (0x00) i ovanstående kod kommer att användas som den
första parametern i instruktionen. Den första parametern (0x00) betyder att vi ska ändra
grafikläge. Den andra parametern (0x03) är vilket grafikläge som vi ska ändra till. 0x03 står
för en 8x14 stor box i textläge (EGA).
int 10h
Det som återstår nu är att avsluta programmet. Det gör vi genom att först flytta värdet 0h
(0x00) till ax (Accumulator) registrets låga byte (al).
mov al, 0h
Det värdet kommer att användas som programmets returkod (Exit code) när programmet
avslutas. Returkoden används för att avgöra om ett fel uppstod i programmet innan det
avslutade. Värdet 0x00 betyder att det inte uppstod nåt fel. Nu ska vi flytta värdet 0x4C till ax
(Accumulator) registrets höga byte (ah).
mov ah, 4ch
Värdet 0x4c kommer stå för en DOS-funktion (exit to DOS) som avslutar programmet, och
det förgående värdet (0x00) kommer att stå för programmets returkod som jag nämnde
tidigare. Nu ska vi bara säga till processorn att den ska utföra DOS-funktionen. Det gör vi
genom att skicka interrupt 21h till processorn.
Int 21h
Nu är programmet avslutat, och förhoppningsvis så har du förstått på ett ungefär hur det
fungerar.
4. Källkoden
Om din hjärna inte har fått nog av logik idag så läs vidare
ideal
model small
stack 200h
DATASEG
;----------------------
; Programmets data
;----------------------
picFile dw 0
palFile dw 0
spinPal db 'res\logo.pal',0
spinF1 db 'res\logo1.dat',0
spinF2 db 'res\logo2.dat',0
spinF3 db 'res\logo3.dat',0
spinF4 db 'res\logo4.dat',0
spinF5 db 'res\logo5.dat',0
spinF6 db 'res\logo6.dat',0
spinF7 db 'res\logo7.dat',0
spinF8 db 'res\logo8.dat',0
spinF9 db 'res\logo9.dat',0
spinF10 db 'res\logo10.dat',0
spinF11 db 'res\logo11.dat',0
spinF12 db 'res\logo12.dat',0
spinF13 db 'res\logo13.dat',0
spinF14 db 'res\logo14.dat',0
spinF15 db 'res\logo15.dat',0
spinbuf db 64001 dup (?)
palbuf db 769 dup (?)
FrameCount db 1
Tick dw 0
;----------------------
CODESEG
;----------------------
; Procedurerna
;----------------------
;*******************************************************
;MoveToScreen: Flyttar en bild ifrån minnet till skärmen
;-------------------------------------------------------
;si=Adressen till bilden
;cx=Höjden på bilden
;dx=Bredden på bilden
;di=Bildens position på skärmen
;-------------------------------------------------------
;*******************************************************
proc MoveToScreen
mov ax, 0A000h ;Flytta videominnets adress till ax...
mov es, ax ;...och vidare till es
mov bx, 320 ;320 pixlar per rad på skärmen...
sub bx, dx ;...minus antal pixlar per rad i bilden
MoveScreenLine:
push cx ;Spara cx på stacken
mov cx, dx ;Flytta "pixlar per rad i bilden" till cx
rep movsb ;Skriv ut en rad på skärmen
add di, bx ;Nästa rad
pop cx ;Ladda cx's värde som sparades förut
loop MoveScreenLine ;Osv...
ret ;Klart
endp MoveToScreen
;*********************
;SetPal: Byter palette
;---------------------
;dx=Adressen till paletten
;---------------------
;*********************
proc SetPal
mov ax, 1012h ;Video-funktion: Set block of DAC registers
mov bx, 0 ;Första färgen
mov cx, 256 ;Sista färgen
int 10h ;Execute!
endp SetPal
;*******************************************************************
;WaitVrt: Väntar på en vertical retrace för att undvika "flickering"
;-------------------------------------------------------------------
;-------------------------------------------------------------------
;*******************************************************************
proc WaitVrt
mov dx, 3dah ;Color graphics adapterns portadress
Vrt:
in al, dx ;Läs ifrån porten
test al, 1000b ;Är det en vertical retrace?...
jnz Vrt ;...så hoppa till Vrt
NoVrt:
in al, dx ;Läs ifrån porten
test al, 1000b ;Är det en vertical retrace?...
jz NoVrt ;...så gå vidare!...om inte, så hoppa till NoVrt
ret ;Klart!
endp WaitVrt
;*************************************************************
;LoadPic: Laddar in en bild (pixelmap) från en fil till minnet
;-------------------------------------------------------------
;si=Adressen till filnamnet
;di=Adressen till buffern
;cx=Bufferns storlek
;-------------------------------------------------------------
proc LoadPic
mov ah, 3Dh ;Funktion: Open file
mov al, 0 ;Read only
mov dx, si ;Flytta filnamnet till dx
int 21h ;Öppna filen
mov [picFile], ax ;Flytta filens "filehandle" till picFile
mov ah, 3Fh ;Funktion: Read file
mov bx, [picFile] ;Flytta filens "filehandle" till bx
mov dx, di ;...till buffern
int 21h ;Go!
mov ah, 3eh ;Funktion: Close file
mov bx, [picFile] ;Flytta "filehandle" till bx
int 21h ;Stäng filen!
ret ;Klart...
endp LoadPic
;*****************************************************
;LoadPal: Laddar in en palette från en fil till minnet
;-----------------------------------------------------
;si=Adressen till filnamnet
;-----------------------------------------------------
proc LoadPal
mov ah, 3Dh ;Funktion: Open file
mov al, 0 ;Read only
mov dx, si ;Flytta filnamnet till dx
int 21h ;Öppna filen
mov [palFile], ax ;Flytta filens "filehandle" till picFile
mov ah, 3Fh ;Funktion: Read file
mov bx, [palFile] ;Flytta filens "filehandle" till bx
mov cx, 768 ;768 bytes ska läsas...
mov dx, offset palbuf ;...till palbuf
int 21h ;Go!
mov ah, 3eh ;Funktion: Close file
mov bx, [palFile] ;Flytta "filehandle" till bx
int 21h ;Stäng filen!
ret ;Klart...
endp LoadPal
;*************************************************************************
;CalSpinF: Räknar ut vilken bild som är nästa "frame" i SpinLogo & laddar in den
;-------------------------------------------------------------------------------
;-------------------------------------------------------------------------------
proc CalSpinF
cmp [FrameCount], 1 ;Är FrameCount=1?...
jne @F2 ;...om inte, så hoppa till @F2
mov si, offset spinF1 ;Adressen till filnamnet
mov di, offset spinbuf ;Adressen till buffern
mov cx, 64000 ;Bufferns storlek
call LoadPic ;Ladda in bilden
ret ;Klart!
@F2:
cmp [FrameCount], 2 ;Är FrameCount=2?...
jne @F3 ;...om inte, så hoppa till @F3
mov si, offset spinF2 ;Adressen till filnamnet
mov di, offset spinbuf ;Adressen till buffern
mov cx, 64000 ;Bufferns storlek
call LoadPic ;Ladda in bilden
ret ;Klart!
@F3:
cmp [FrameCount], 3 ;Är FrameCount=3?...
jne @F4 ;...om inte, så hoppa till @F4
mov si, offset spinF3 ;Adressen till filnamnet
mov di, offset spinbuf ;Adressen till buffern
mov cx, 64000 ;Bufferns storlek
call LoadPic ;Ladda in bilden
ret ;Klart!
@F4:
cmp [FrameCount], 4 ;Är FrameCount=4?...
jne @F5 ;...om inte, så hoppa till @F5
mov si, offset spinF4 ;Adressen till filnamnet
mov di, offset spinbuf ;Adressen till buffern
mov cx, 64000 ;Bufferns storlek
call LoadPic ;Ladda in bilden
ret ;Klart!
@F5:
cmp [FrameCount], 5 ;Är FrameCount=5?...
jne @F6 ;...om inte, så hoppa till @F6
mov si, offset spinF5 ;Adressen till filnamnet
mov di, offset spinbuf ;Adressen till buffern
mov cx, 64000 ;Bufferns storlek
call LoadPic ;Ladda in bilden
ret ;Klart!
@F6:
cmp [FrameCount], 6 ;Är FrameCount=6?...
jne @F7 ;...om inte, så hoppa till @F7
mov si, offset spinF6 ;Adressen till filnamnet
mov di, offset spinbuf ;Adressen till buffern
mov cx, 64000 ;Bufferns storlek
call LoadPic ;Ladda in bilden
ret ;Klart!
@F7:
cmp [FrameCount], 7 ;Är FrameCount=7?...
jne @F8 ;...om inte, så hoppa till @F8
mov si, offset spinF7 ;Adressen till filnamnet
mov di, offset spinbuf ;Adressen till buffern
mov cx, 64000 ;Bufferns storlek
call LoadPic ;Ladda in bilden
ret ;Klart!
@F8:
cmp [FrameCount], 8 ;Är FrameCount=8?...
jne @F9 ;...om inte, så hoppa till @F9
mov si, offset spinF8 ;Adressen till filnamnet
mov di, offset spinbuf ;Adressen till buffern
mov cx, 64000 ;Bufferns storlek
call LoadPic ;Ladda in bilden
ret ;Klart!
@F9:
cmp [FrameCount], 9 ;Är FrameCount=9?...
jne @F10 ;...om inte, så hoppa till @F10
mov si, offset spinF9 ;Adressen till filnamnet
mov di, offset spinbuf ;Adressen till buffern
mov cx, 64000 ;Bufferns storlek
call LoadPic ;Ladda in bilden
ret ;Klart!
@F10:
cmp [FrameCount], 10 ;Är FrameCount=10?...
jne @F11 ;...om inte, så hoppa till @F11
mov si, offset spinF10 ;Adressen till filnamnet
mov di, offset spinbuf ;Adressen till buffern
mov cx, 64000 ;Bufferns storlek
call LoadPic ;Ladda in bilden
ret ;Klart!
@F11:
cmp [FrameCount], 11 ;Är FrameCount=11?...
jne @F12 ;...om inte, så hoppa till @F12
mov si, offset spinF11 ;Adressen till filnamnet
mov di, offset spinbuf ;Adressen till buffern
mov cx, 64000 ;Bufferns storlek
call LoadPic ;Ladda in bilden
ret ;Klart!
@F12:
cmp [FrameCount], 12 ;Är FrameCount=12?...
jne @F13 ;...om inte, så hoppa till @F13
mov si, offset spinF12 ;Adressen till filnamnet
mov di, offset spinbuf ;Adressen till buffern
mov cx, 64000 ;Bufferns storlek
call LoadPic ;Ladda in bilden
ret ;Klart!
@F13:
cmp [FrameCount], 13 ;Är FrameCount=13?...
jne @F14 ;...om inte, så hoppa till @F14
mov si, offset spinF13 ;Adressen till filnamnet
mov di, offset spinbuf ;Adressen till buffern
mov cx, 64000 ;Bufferns storlek
call LoadPic ;Ladda in bilden
ret ;Klart!
@F14:
cmp [FrameCount], 14 ;Är FrameCount=14?...
jne @F15 ;...om inte, så hoppa till @F15
mov si, offset spinF14 ;Adressen till filnamnet
mov di, offset spinbuf ;Adressen till buffern
mov cx, 64000 ;Bufferns storlek
call LoadPic ;Ladda in bilden
ret ;Klart!
@F15:
mov si, offset spinF15 ;Adressen till filnamnet
mov di, offset spinbuf ;Adressen till buffern
mov cx, 64000 ;Bufferns storlek
call LoadPic ;Ladda in bilden
ret ;Klart!
endp CalSpinF
;********************************************
;tWait: Väntar i en "tick" (för att slöa ner)
;--------------------------------------------
;--------------------------------------------
proc tWait
xor ax, ax ;Funktion: Get system time
int 1ah ;Get it!
mov [Tick], dx ;Flytta "tiden" till Tick
add [Tick], 1 ;Lägg till si till Tick
@WaitLoop:
xor ax, ax ;Funktion: Get system time
int 1ah ;Get it!
cmp [Tick], dx ;Är tiden>=Tick?...
jnb @WaitLoop ;...om inte så hoppa till @WaitLoop
ret
endp tWait
;*************************************
;SpinLogo: Visar en animation av logon
;-------------------------------------
;-------------------------------------
proc SpinLogo
@AnimLoop:
call CalSpinF ;Ladda in nästa frame i minnet
call tWait ;Vänta...
call WaitVrt ;Vänta på en vertical retrace
mov si, offset spinbuf ;Adressen till bilden
mov dx, 320 ;Bredden
mov cx, 200 ;Höjden
xor di, di ;Positionen på skärmen
call MoveToScreen ;Visa den!
mov ax, 0100h ;Funktion: Read keyboard buffer
int 16h ;Execute!
jnz @Done ;Hoppa till @Done ifall nån tangent är nertryckt
inc [FrameCount] ;Öka FrameCount med 1
cmp [FrameCount], 16 ;Är FrameCount=16?...
je @ResetFC ;...så hoppa till @ResetFC
jmp @AnimLoop ;Hoppa till @AnimLoop
@ResetFC:
mov [FrameCount], 1 ;FrameCount=1
jmp @AnimLoop ;Hoppa till @AnimLoop
@Done:
ret ;Klart!
endp SpinLogo
;**********************************
;TheEnd: Sluteffekterna...
;----------------------------------
;----------------------------------
proc TheEnd
;***Scroll effekt***
xor si, si ;Nolla si
@SL1:
mov ah, 06h ;Funktion: Scroll up window
mov al, 1 ;Antal linjer som ska scrollas upp
xor cx, cx ;Rad/Kolumn upp i vänstra hörnet
mov dl, 1 ;Kolumn längst ner i högra hörnet
mov dh, 255 ;Rad längst ner i högra hörnet
xor bh, bh ;Attribut för att skriva blanka linjer
int 10h ;Scroll!
mov ah, 06h ;Funktion: Scroll up window
mov al, 1 ;Antal linjer som ska scrollas upp
xor cx, cx ;Rad/Kolumn upp i vänstra hörnet
mov dl, 255 ;Kolumn längst ner i högra hörnet
mov dh, 1 ;Rad längst ner i högra hörnet
xor bh, bh ;Attribut för att skriva blanka linjer
int 10h ;Scroll!
inc si ;Öka si med 1
cmp si, 35 ;Är si=35?...
jne @SL1 ;...om inte, så hoppa till @SL1
mov cx, 64000 ;Hur många bytes? (Hela skärmen)
xor ax, ax ;Fyll dom med nollor (svart)
rep stosw ;Clear screen!
;***Skriv ut lite bröte***
mov ah, 02h ;Funktion: Set cursor position
xor bh, bh ;Page 0
mov dh, 10 ;Rad
mov dl, 7 ;Kolumn
int 10h ;eXecuTe!
mov ah, 0eh ;Funktion: Write character only at cursor
mov al, 'C' ;Bokstaven
mov bl, 100 ;Färgen på bokstaven
mov cx, 1 ;Skriv den 1 gång
int 10h ;Skriv ut den!
call tWait ;Vänta...
mov ah, 0eh ;Funktion: Write character only at cursor
mov al, 'o' ;Bokstaven
mov bl, 105 ;Färgen på bokstaven
mov cx, 1 ;Skriv den 1 gång
int 10h ;Skriv ut den!
call tWait ;Vänta...
mov ah, 0eh ;Funktion: Write character only at cursor
mov al, 'd' ;Bokstaven
mov bl, 110 ;Färgen på bokstaven
mov cx, 1 ;Skriv den 1 gång
int 10h ;Skriv ut den!
call tWait ;Vänta...
mov ah, 0eh ;Funktion: Write character only at cursor
mov al, 'e' ;Bokstaven
mov bl, 115 ;Färgen på bokstaven
mov cx, 1 ;Skriv den 1 gång
int 10h ;Skriv ut den!
call tWait ;Vänta...
mov ah, 0eh ;Funktion: Write character only at cursor
mov al, 'd' ;Bokstaven
mov bl, 120 ;Färgen på bokstaven
mov cx, 1 ;Skriv den 1 gång
int 10h ;Skriv ut den!
call tWait ;Vänta...
mov ah, 0eh ;Funktion: Write character only at cursor
mov al, ' ' ;Bokstaven
mov bl, 255 ;Färgen på bokstaven
mov cx, 1 ;Skriv den 1 gång
int 10h ;Skriv ut den!
call tWait ;Vänta...
mov ah, 0eh ;Funktion: Write character only at cursor
mov al, 'i' ;Bokstaven
mov bl, 125 ;Färgen på bokstaven
mov cx, 1 ;Skriv den 1 gång
int 10h ;Skriv ut den!
call tWait ;Vänta...
mov ah, 0eh ;Funktion: Write character only at cursor
mov al, 'n' ;Bokstaven
mov bl, 130 ;Färgen på bokstaven
mov cx, 1 ;Skriv den 1 gång
int 10h ;Skriv ut den!
call tWait ;Vänta...
mov ah, 0eh ;Funktion: Write character only at cursor
mov al, ' ' ;Bokstaven
mov bl, 255 ;Färgen på bokstaven
mov cx, 1 ;Skriv den 1 gång
int 10h ;Skriv ut den!
call tWait ;Vänta...
mov ah, 0eh ;Funktion: Write character only at cursor
mov al, 'p' ;Bokstaven
mov bl, 135 ;Färgen på bokstaven
mov cx, 1 ;Skriv den 1 gång
int 10h ;Skriv ut den!
call tWait ;Vänta...
mov ah, 0eh ;Funktion: Write character only at cursor
mov al, 'u' ;Bokstaven
mov bl, 140 ;Färgen på bokstaven
mov cx, 1 ;Skriv den 1 gång
int 10h ;Skriv ut den!
call tWait ;Vänta...
mov ah, 0eh ;Funktion: Write character only at cursor
mov al, 'r' ;Bokstaven
mov bl, 145 ;Färgen på bokstaven
mov cx, 1 ;Skriv den 1 gång
int 10h ;Skriv ut den!
call tWait ;Vänta...
mov ah, 0eh ;Funktion: Write character only at cursor
mov al, 'e' ;Bokstaven
mov bl, 150 ;Färgen på bokstaven
mov cx, 1 ;Skriv den 1 gång
int 10h ;Skriv ut den!
call tWait ;Vänta...
mov ah, 0eh ;Funktion: Write character only at cursor
mov al, ' ' ;Bokstaven
mov bl, 255 ;Färgen på bokstaven
mov cx, 1 ;Skriv den 1 gång
int 10h ;Skriv ut den!
call tWait ;Vänta...
mov ah, 0eh ;Funktion: Write character only at cursor
mov al, 'x' ;Bokstaven
mov bl, 155 ;Färgen på bokstaven
mov cx, 1 ;Skriv den 1 gång
int 10h ;Skriv ut den!
call tWait ;Vänta...
mov ah, 0eh ;Funktion: Write character only at cursor
mov al, '8' ;Bokstaven
mov bl, 160 ;Färgen på bokstaven
mov cx, 1 ;Skriv den 1 gång
int 10h ;Skriv ut den!
call tWait ;Vänta...
mov ah, 0eh ;Funktion: Write character only at cursor
mov al, '6' ;Bokstaven
mov bl, 165 ;Färgen på bokstaven
mov cx, 1 ;Skriv den 1 gång
int 10h ;Skriv ut den!
call tWait ;Vänta...
mov ah, 0eh ;Funktion: Write character only at cursor
mov al, ' ' ;Bokstaven
mov bl, 255 ;Färgen på bokstaven
mov cx, 1 ;Skriv den 1 gång
int 10h ;Skriv ut den!
call tWait ;Vänta...
mov ah, 0eh ;Funktion: Write character only at cursor
mov al, 'A' ;Bokstaven
mov bl, 170 ;Färgen på bokstaven
mov cx, 1 ;Skriv den 1 gång
int 10h ;Skriv ut den!
call tWait ;Vänta...
mov ah, 0eh ;Funktion: Write character only at cursor
mov al, 's' ;Bokstaven
mov bl, 175 ;Färgen på bokstaven
mov cx, 1 ;Skriv den 1 gång
int 10h ;Skriv ut den!
call tWait ;Vänta...
mov ah, 0eh ;Funktion: Write character only at cursor
mov al, 's' ;Bokstaven
mov bl, 180 ;Färgen på bokstaven
mov cx, 1 ;Skriv den 1 gång
int 10h ;Skriv ut den!
call tWait ;Vänta...
mov ah, 0eh ;Funktion: Write character only at cursor
mov al, 'e' ;Bokstaven
mov bl, 185 ;Färgen på bokstaven
mov cx, 1 ;Skriv den 1 gång
int 10h ;Skriv ut den!
call tWait ;Vänta...
mov ah, 0eh ;Funktion: Write character only at cursor
mov al, 'm' ;Bokstaven
mov bl, 190 ;Färgen på bokstaven
mov cx, 1 ;Skriv den 1 gång
int 10h ;Skriv ut den!
call tWait ;Vänta...
mov ah, 0eh ;Funktion: Write character only at cursor
mov al, 'b' ;Bokstaven
mov bl, 195 ;Färgen på bokstaven
mov cx, 1 ;Skriv den 1 gång
int 10h ;Skriv ut den!
call tWait ;Vänta...
mov ah, 0eh ;Funktion: Write character only at cursor
mov al, 'l' ;Bokstaven
mov bl, 200 ;Färgen på bokstaven
mov cx, 1 ;Skriv den 1 gång
int 10h ;Skriv ut den!
call tWait ;Vänta...
mov ah, 0eh ;Funktion: Write character only at cursor
mov al, 'y' ;Bokstaven
mov bl, 205 ;Färgen på bokstaven
mov cx, 1 ;Skriv den 1 gång
int 10h ;Skriv ut den!
mov ah, 02h ;Funktion: Set cursor position
xor bh, bh ;Page 0
mov dh, 12 ;Rad
mov dl, 11 ;Kolumn
int 10h ;eXecuTe!
call tWait ;Vänta...
mov ah, 0eh ;Funktion: Write character only at cursor
mov al, 'B' ;Bokstaven
mov bl, 210 ;Färgen på bokstaven
mov cx, 1 ;Skriv den 1 gång
int 10h ;Skriv ut den!
call tWait
mov ah, 0eh ;Funktion: Write character only at cursor
mov al, 'y' ;Bokstaven
mov bl, 215 ;Färgen på bokstaven
mov cx, 1 ;Skriv den 1 gång
int 10h ;Skriv ut den!
call tWait
mov ah, 0eh ;Funktion: Write character only at cursor
mov al, ' ' ;Bokstaven
mov bl, 255 ;Färgen på bokstaven
mov cx, 1 ;Skriv den 1 gång
int 10h ;Skriv ut den!
call tWait
mov ah, 0eh ;Funktion: Write character only at cursor
mov al, '-' ;Bokstaven
mov bl, 220 ;Färgen på bokstaven
mov cx, 1 ;Skriv den 1 gång
int 10h ;Skriv ut den!
call tWait
mov ah, 0eh ;Funktion: Write character only at cursor
mov al, 'U' ;Bokstaven
mov bl, 225 ;Färgen på bokstaven
mov cx, 1 ;Skriv den 1 gång
int 10h ;Skriv ut den!
call tWait
mov ah, 0eh ;Funktion: Write character only at cursor
mov al, 'n' ;Bokstaven
mov bl, 230 ;Färgen på bokstaven
mov cx, 1 ;Skriv den 1 gång
int 10h ;Skriv ut den!
call tWait
mov ah, 0eh ;Funktion: Write character only at cursor
mov al, 'h' ;Bokstaven
mov bl, 235 ;Färgen på bokstaven
mov cx, 1 ;Skriv den 1 gång
int 10h ;Skriv ut den!
call tWait
mov ah, 0eh ;Funktion: Write character only at cursor
mov al, 'o' ;Bokstaven
mov bl, 240 ;Färgen på bokstaven
mov cx, 1 ;Skriv den 1 gång
int 10h ;Skriv ut den!
call tWait
mov ah, 0eh ;Funktion: Write character only at cursor
mov al, 'l' ;Bokstaven
mov bl, 245 ;Färgen på bokstaven
mov cx, 1 ;Skriv den 1 gång
int 10h ;Skriv ut den!
call tWait
mov ah, 0eh ;Funktion: Write character only at cursor
mov al, 'y' ;Bokstaven
mov bl, 250 ;Färgen på bokstaven
mov cx, 1 ;Skriv den 1 gång
int 10h ;Skriv ut den!
call tWait
mov ah, 0eh ;Funktion: Write character only at cursor
mov al, ' ' ;Bokstaven
mov bl, 255 ;Färgen på bokstaven
mov cx, 1 ;Skriv den 1 gång
int 10h ;Skriv ut den!
call tWait
mov ah, 0eh ;Funktion: Write character only at cursor
mov al, 'A' ;Bokstaven
mov bl, 255 ;Färgen på bokstaven
mov cx, 1 ;Skriv den 1 gång
int 10h ;Skriv ut den!
call tWait
mov ah, 0eh ;Funktion: Write character only at cursor
mov al, 'v' ;Bokstaven
mov bl, 250 ;Färgen på bokstaven
mov cx, 1 ;Skriv den 1 gång
int 10h ;Skriv ut den!
call tWait
mov ah, 0eh ;Funktion: Write character only at cursor
mov al, 'a' ;Bokstaven
mov bl, 245 ;Färgen på bokstaven
mov cx, 1 ;Skriv den 1 gång
int 10h ;Skriv ut den!
call tWait
mov ah, 0eh ;Funktion: Write character only at cursor
mov al, 't' ;Bokstaven
mov bl, 240 ;Färgen på bokstaven
mov cx, 1 ;Skriv den 1 gång
int 10h ;Skriv ut den!
call tWait
mov ah, 0eh ;Funktion: Write character only at cursor
mov al, 'a' ;Bokstaven
mov bl, 235 ;Färgen på bokstaven
mov cx, 1 ;Skriv den 1 gång
int 10h ;Skriv ut den!
call tWait
mov ah, 0eh ;Funktion: Write character only at cursor
mov al, 'r' ;Bokstaven
mov bl, 230 ;Färgen på bokstaven
mov cx, 1 ;Skriv den 1 gång
int 10h ;Skriv ut den!
call tWait
mov ah, 0eh ;Funktion: Write character only at cursor
mov al, '-' ;Bokstaven
mov bl, 225 ;Färgen på bokstaven
mov cx, 1 ;Skriv den 1 gång
int 10h ;Skriv ut den!
call tWait
@Scanloop:
in al,60h ;Scanna tangentbordet
cmp al,1 ;Är "escape" nertryckt?...
jne @ScanLoop ;...om inte, så hoppa till @Scanloop
ret
endp TheEnd
;----------------------
Start:
mov ax, @data ;Initiera DS till
mov ds, ax ;datasegmentets adress
mov es, ax
;---------------
; Koden
;---------------
mov ax, 13h ;Sätt grafikläge (320x200x256 : 64K videominne)
int 10h ;Yep!
mov si, offset spinPal ;Adressen till filnamnet
call LoadPal ;Ladda in paletten till minnet
mov dx, offset palbuf ;Adressen till paletten
call SetPal ;Byt palette
call SpinLogo ;Visa logo-animationen
call TheEnd
;---------------
mov ax, 0003h ;Tillbaks till textläge
int 10h ;Go!
mov al, 0h ;exit code (0 = ingen error)
exit_program:
mov ah,4ch ;quit & die
int 21h
end start
Sisådär nu var det klart ja hoppas att ni fattade nått av det där...
det var väk inte så svårt..:)
/-Unholy Avatar-
-----------------------------------------------------------------------
| [ /mode #wspa kick ] |
-----------------------------------------------------------------------
Jaha som sagt det e inte till mycket entusiasm här i WSPA det blir allt
mindre artiklar lr rättare sagt inga från vissa personer och andra gör
pyttelite om ej något så det börjar bli dax för en upprensning dessa
personer kommer därför att kickas från WSPA. Av en enhällig jury
bestående av mig =). Så dessa personer säger vi hejdå till.......
~pucko^ eller hu han nu stava jaja du har inte gjort nånting
så vi säger hejdå......
Cashman hej då...
Andra personer som ligger dåligt till på listan men inte kommer att
kickas än är följande.
4sst0r
Mr-Clean
/WSPA
-----------------------------------------------------------------------
| [ Join ] |
-----------------------------------------------------------------------
Vi har fått en ny medlem nämligen Mr Despot hoppas han kan vara till
hjälp med att fylla vårat e-zine med förhoppningsvis bra artiklar för
det e ju det vi vill. lr hur.
-----------------------------------------------------------------------
| [ Noteringar ] |
-----------------------------------------------------------------------
¤Det e Fallens Dagar 16-18 juli..i Trollhättan = rul!!!!!
¤Vi har 4 premunuranter Jippie :)
¤WSPA kanske ska gå ihop med en annan priiker grupp inom snart skriver
inte vilken för kommer det väl att bli ett jävla liv på nån. men
det e inte Phreak020 lr 07nio75, Mer om detta i nästa nummer.
¤Vi söker Ascii-artists som kan fixa till layouten
¤Även writers och sånt där
¤Behöver även nån som kan ta hand om hemsidan. isåfall skriv till
d0e@navy.org
-----------------------------------------------------------------------
| [ Slutord ] |
-----------------------------------------------------------------------
Jaha då var detta nummret slut och det var inte många artiklar vi fick
men det var mest för infos skull till dom i WSPA.
OBS!! Vi har flyttat ifrån Undernet till DAlnet besök oss på #wspa OBS!
Om ni vill börja premunuera skciak ett mail d0e@navy.org med subjekt
kakelung lr nått sånt...
www.wspa.cjb.net
-----------------------------------------------------------------------
| [ Slut ] |
-----------------------------------------------------------------------