-------------------------------------------------------------------------
|   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 lses bst med	 || Realese date:
			||		pico lr Wordpad		 ||  11/6 99
------------------||-------------------			 || Realese time:	
|		-=-Innehll-=-	        | 			 ||  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 ngot      |
|#Noteringar        | d0e       	  | |ansvar fr dessa texter som  |
|#Slutord           | d0e             | |publiseras hr eller vad des-|
--------------------------------------- |ssa kan anvndas till. Dessa |
						    |r endast till fr informati-|
 						    |on, Vi uppmanar igen till att|
		www.wspa.cjb.net		    |beg ngra brottsliga handl- |
						    |ingar. Om du ej hller med om|
		% % \ _^ /   ,^,  	    |detta s sluta med att lsa  |
	     % %  \>@@</   ((    	    |nu.                          |
	    =====  (..)    );) 		    -------------------------------
          |   |=  vv\^^^^ /   
          |   |/ /==  ))) )    <--- ivil Kn1rk4r drake --/ 
          \___/ ( ==/ )=< \   
               {{{)=(}}}(_}}} 
    
-----------------------------------------------------------------------	
| 								[ Ledare ]            |	
-----------------------------------------------------------------------
Jaha d var det dax fr en nytt nummer av WSPA nmligen #4. Och som
lyser mnga medlemmar med sin frnvaro. Det vrkar som vi fr brja med 
en lite upprensning hr. Det e vackert vder ute och det e sknt drfr
blir detta ett litet nummer iaf till artikelmssigt sett, man har helt
enkelt inte tid. Det e ju sommar. N nu brjar det bli vldigt varmt 
kanske dax fr bad eller ja vet inte..finns det ntt mer viktigt att
sga hmm...ja #wspa har flyttat till dalnet istllet frn undernet och
det var ett lyckat drag...tror jag hitills. Bahh och som vanligt vi 
behver mer writers annars kan nog dett bli ett utav dom sista nummren
av WSPA som kommer att skrivas (hhnej kommer alla att tnka nu :] )
Ger ut det hr nummret nu ganska kort efter #3 men det var fr jag
knde fr att skriva ntt och ge ut vilka medlemmar som e kickade.
N nu knner jag inte fr att skriva mer......
				
		Sup och ha det bra i Sommar /WSPA

-----------------------------------------------------------------------	
| 				   			      [ x86 - Part2 ]       |	
-----------------------------------------------------------------------
[Lite intro]

Ok hr kommer den sista delen i min artikel om x86 hoppas ni frstog 
ntt sen den frra delen Den hr gngen kommer vi att g igenom 
programmer BlackArt.exe det r ett program somjag gjort fr att 
visa er lite filfunktioner och grafik hanteringen i dos bland annat. 
Ja s det evl bara att forstta....frresten det finns en kompilerad 
version att hmta frn.
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 brjar med en Exe header som talar om vilket operativsystem som programmet 
r gjort fr, vart i filen den krbara maskinkoden brjar osv. Sedan kommer datasegmentet 
som innehller programmets data, som t ex  alla konstanter och variabler. Sist kommer 
kodsegmentet, som r sjlva programmet. Programmet r komprimerat och tar drfr bara 
2490 bytes, istllet fr 66734 bytes som bilden visar.


3. Frenklad beskrivning av kllkoden
Programmet i sig r ganska enkelt. Det svra nr man programmerar i Assembler r att skriva 
alla funktioner som programmet ska anvnda. Rent teoretiskt sett s skulle man inte behva 
skriva ngra funktioner alls, men i praktiken tvivlar jag p att det skulle fungera, eftersom att 
det skulle bli fruktansvrt mycket kod, och vldigt svrt att hlla reda p vad som gr vad. En 
annan sak som r viktig tnka p, frutom att skriva s mnga funktioner som mjligt, r att 
kommentera s mycket av koden som mjligt. En helt okommenterad kllkod i Assembler r 
fruktansvrt svr att frst, ven fr den mest rutinerade programmeraren. Jag vgar nog pst 
att det inte finns nn som kan komma ihg vad alla olika interrupts och dylikt gr. Nja, vi 
gr vidare till det bifogade programmets kllkod. Programmet brjar 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 ndvndigt fr att kunna komma t alla variabler och liknande som programmet 
anvnder. Nsta steg i programmet r att anropa en DOS-funktion som ndrar grafiklget till 
320x200x256. I klartext betyder det att skrmen blir 320 pixlar bred, 200 pixlar hg och 
kan anvnda maximalt 256 frger.
mov ax, 13h
int 10h
Bland oss programmerare s r detta klassiska grafiklge fr DOS allmnt knt som mode 
13h. Nu nr vi har ndrat grafiklget r det dags att ladda in den palett som ska anvndas. 
Detta gr vi genom att frst flytta adressen till variabeln (spinPal) som hller 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 sjlva animationen. Det gr 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 frklara hur funktionerna r skrivna eftersom att 
det r ganska invecklat, och skulle ta upp mer papper n vad jag har rd med. Om du r 
intresserad av hur programmet fungerar i detalj, s kan du lsa den bifogade kllkoden, som 
fr vrigt r innehller kommentarer som beskriver vad varje rad gr, i nsta avsnitt. Nog om 
det. Vi fortstter med att anropa funktionen TheEnd.
call TheEnd
Precis som det framgr av namnet, s r det den sista funktionen i detta programmet. Den 
brjar med att scrolla upp fem partier av bilden, och suddar sedan ut resterande partier. 
Efter det skriver den ut bokstver i olika frger som bildar ord, som i sin tur bildar en mening. 
Tillsist s vntar den p att man ska trycka p tangenten Escape. Nr man har gjort det s 
ska programmet frst terg till textlge, och sedan avslutas. Det sker p fljande stt:
Flytta vrdet 0x0003 till ax (Accumulator) registret i minnet. Det kommer att anvndas som 
parameter till nsta interrupt.
mov ax, 0003h
Skicka interrupt 10h till processorn (en interrupt sger till processorn att sluta med det 
den gr och utfra en instruktion). Instruktionen 10h (0x10) r en CPU-genererad 
videofunktion. ax registrets lga byte (0x00) i ovanstende kod kommer att anvndas som den 
frsta parametern i instruktionen. Den frsta parametern (0x00) betyder att vi ska ndra 
grafiklge. Den andra parametern (0x03) r vilket grafiklge som vi ska ndra till. 0x03 str 
fr en 8x14 stor box i textlge (EGA).
int 10h
Det som terstr nu r att avsluta programmet. Det gr vi genom att frst flytta vrdet 0h 
(0x00) till ax (Accumulator) registrets lga byte (al).
mov al, 0h
Det vrdet kommer att anvndas som programmets returkod (Exit code) nr programmet 
avslutas. Returkoden anvnds fr att avgra om ett fel uppstod i programmet innan det 
avslutade. Vrdet 0x00 betyder att det inte uppstod nt fel. Nu ska vi flytta vrdet 0x4C till ax 
(Accumulator) registrets hga byte (ah).
mov ah, 4ch
Vrdet 0x4c kommer st fr en DOS-funktion (exit to DOS) som avslutar programmet, och 
det frgende vrdet (0x00) kommer att st fr programmets returkod som jag nmnde 
tidigare. Nu ska vi bara sga till processorn att den ska utfra DOS-funktionen. Det gr vi 
genom att skicka interrupt 21h till processorn.
Int 21h
Nu r programmet avslutat, och frhoppningsvis s har du frsttt p ett ungefr hur det 
fungerar.


4. Kllkoden
Om din hjrna inte har ftt nog av logik idag s ls 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 ifrn minnet till skrmen
;-------------------------------------------------------
;si=Adressen till bilden
;cx=Hjden p bilden
;dx=Bredden p bilden
;di=Bildens position p skrmen
;-------------------------------------------------------
;*******************************************************
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 skrmen...
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 skrmen
add di, bx                   	;Nsta rad
pop cx                      	;Ladda cx's vrde som sparades frut
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				;Frsta frgen
mov cx, 256				;Sista frgen
int 10h				;Execute!
endp SetPal






;*******************************************************************
;WaitVrt: Vntar p en vertical retrace fr att undvika "flickering"
;-------------------------------------------------------------------
;-------------------------------------------------------------------
;*******************************************************************
proc WaitVrt	                
mov dx, 3dah    	      	;Color graphics adapterns portadress 

Vrt:
in al, dx				;Ls ifrn porten
test al, 1000b			;r det en vertical retrace?...
jnz Vrt				;...s hoppa till Vrt

NoVrt:
in al, dx				;Ls ifrn 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) frn 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		;Stng filen!
ret		;Klart...
endp LoadPic






;*****************************************************
;LoadPal: Laddar in en palette frn 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 lsas...
mov dx, offset palbuf	;...till palbuf
int 21h		;Go!
mov ah, 3eh		;Funktion: Close file
mov bx, [palFile]	;Flytta "filehandle" till bx
int 21h		;Stng filen!
ret		;Klart...
endp LoadPal


;*************************************************************************
;CalSpinF: Rknar ut vilken bild som r nsta "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: Vntar i en "tick" (fr att sla ner)
;--------------------------------------------
;--------------------------------------------
proc tWait
xor ax, ax			;Funktion: Get system time
int 1ah			;Get it!
mov [Tick], dx		;Flytta "tiden" till Tick
add [Tick], 1			;Lgg 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 nsta frame i minnet
call tWait			;Vnta...
call WaitVrt			;Vnta p en vertical retrace
mov si, offset spinbuf		;Adressen till bilden
mov dx, 320			;Bredden
mov cx, 200			;Hjden
xor di, di			;Positionen p skrmen
call MoveToScreen		;Visa den!
mov ax, 0100h                   		;Funktion: Read keyboard buffer
int 16h                         		;Execute!
jnz @Done			;Hoppa till @Done ifall nn 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 vnstra hrnet
mov dl, 1			;Kolumn lngst ner i hgra hrnet
mov dh, 255			;Rad lngst ner i hgra hrnet
xor bh, bh			;Attribut fr 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 vnstra hrnet
mov dl, 255			;Kolumn lngst ner i hgra hrnet
mov dh, 1			;Rad lngst ner i hgra hrnet
xor bh, bh			;Attribut fr 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 mnga bytes? (Hela skrmen)
xor ax, ax			;Fyll dom med nollor (svart)
rep stosw			;Clear screen!
;***Skriv ut lite brte***
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			;Frgen p bokstaven
mov cx, 1			;Skriv den 1 gng
int 10h			;Skriv ut den!
call tWait			;Vnta...
mov ah, 0eh			;Funktion: Write character only at cursor
mov al, 'o'			;Bokstaven
mov bl, 105			;Frgen p bokstaven
mov cx, 1			;Skriv den 1 gng
int 10h			;Skriv ut den!
call tWait			;Vnta...
mov ah, 0eh			;Funktion: Write character only at cursor
mov al, 'd'			;Bokstaven
mov bl, 110			;Frgen p bokstaven
mov cx, 1			;Skriv den 1 gng
int 10h			;Skriv ut den!
call tWait			;Vnta...
mov ah, 0eh			;Funktion: Write character only at cursor
mov al, 'e'			;Bokstaven
mov bl, 115			;Frgen p bokstaven
mov cx, 1			;Skriv den 1 gng
int 10h			;Skriv ut den!
call tWait			;Vnta...
mov ah, 0eh			;Funktion: Write character only at cursor
mov al, 'd'			;Bokstaven
mov bl, 120			;Frgen p bokstaven
mov cx, 1			;Skriv den 1 gng
int 10h			;Skriv ut den!
call tWait			;Vnta...
mov ah, 0eh			;Funktion: Write character only at cursor
mov al, ' '			;Bokstaven
mov bl, 255			;Frgen p bokstaven
mov cx, 1			;Skriv den 1 gng
int 10h			;Skriv ut den!
call tWait			;Vnta...
mov ah, 0eh			;Funktion: Write character only at cursor
mov al, 'i'			;Bokstaven
mov bl, 125			;Frgen p bokstaven
mov cx, 1			;Skriv den 1 gng
int 10h			;Skriv ut den!
call tWait			;Vnta...
mov ah, 0eh			;Funktion: Write character only at cursor
mov al, 'n'			;Bokstaven
mov bl, 130			;Frgen p bokstaven
mov cx, 1			;Skriv den 1 gng
int 10h			;Skriv ut den!
call tWait			;Vnta...
mov ah, 0eh			;Funktion: Write character only at cursor
mov al, ' '			;Bokstaven
mov bl, 255			;Frgen p bokstaven
mov cx, 1			;Skriv den 1 gng
int 10h			;Skriv ut den!
call tWait			;Vnta...
mov ah, 0eh			;Funktion: Write character only at cursor
mov al, 'p'			;Bokstaven
mov bl, 135			;Frgen p bokstaven
mov cx, 1			;Skriv den 1 gng
int 10h			;Skriv ut den!
call tWait			;Vnta...
mov ah, 0eh			;Funktion: Write character only at cursor
mov al, 'u'			;Bokstaven
mov bl, 140			;Frgen p bokstaven
mov cx, 1			;Skriv den 1 gng
int 10h			;Skriv ut den!
call tWait			;Vnta...
mov ah, 0eh			;Funktion: Write character only at cursor
mov al, 'r'			;Bokstaven
mov bl, 145			;Frgen p bokstaven
mov cx, 1			;Skriv den 1 gng
int 10h			;Skriv ut den!
call tWait			;Vnta...
mov ah, 0eh			;Funktion: Write character only at cursor
mov al, 'e'			;Bokstaven
mov bl, 150			;Frgen p bokstaven
mov cx, 1			;Skriv den 1 gng
int 10h			;Skriv ut den!
call tWait			;Vnta...
mov ah, 0eh			;Funktion: Write character only at cursor
mov al, ' '			;Bokstaven
mov bl, 255			;Frgen p bokstaven
mov cx, 1			;Skriv den 1 gng
int 10h			;Skriv ut den!
call tWait			;Vnta...
mov ah, 0eh			;Funktion: Write character only at cursor
mov al, 'x'			;Bokstaven
mov bl, 155			;Frgen p bokstaven
mov cx, 1			;Skriv den 1 gng
int 10h			;Skriv ut den!
call tWait			;Vnta...
mov ah, 0eh			;Funktion: Write character only at cursor
mov al, '8'			;Bokstaven
mov bl, 160			;Frgen p bokstaven
mov cx, 1			;Skriv den 1 gng
int 10h			;Skriv ut den!
call tWait			;Vnta...
mov ah, 0eh			;Funktion: Write character only at cursor
mov al, '6'			;Bokstaven
mov bl, 165			;Frgen p bokstaven
mov cx, 1			;Skriv den 1 gng
int 10h			;Skriv ut den!
call tWait			;Vnta...
mov ah, 0eh			;Funktion: Write character only at cursor
mov al, ' '			;Bokstaven
mov bl, 255			;Frgen p bokstaven
mov cx, 1			;Skriv den 1 gng
int 10h			;Skriv ut den!
call tWait			;Vnta...
mov ah, 0eh			;Funktion: Write character only at cursor
mov al, 'A'			;Bokstaven
mov bl, 170			;Frgen p bokstaven
mov cx, 1			;Skriv den 1 gng
int 10h			;Skriv ut den!
call tWait			;Vnta...
mov ah, 0eh			;Funktion: Write character only at cursor
mov al, 's'			;Bokstaven
mov bl, 175			;Frgen p bokstaven
mov cx, 1			;Skriv den 1 gng
int 10h			;Skriv ut den!
call tWait			;Vnta...
mov ah, 0eh			;Funktion: Write character only at cursor
mov al, 's'			;Bokstaven
mov bl, 180			;Frgen p bokstaven
mov cx, 1			;Skriv den 1 gng
int 10h			;Skriv ut den!
call tWait			;Vnta...
mov ah, 0eh			;Funktion: Write character only at cursor
mov al, 'e'			;Bokstaven
mov bl, 185			;Frgen p bokstaven
mov cx, 1			;Skriv den 1 gng
int 10h			;Skriv ut den!
call tWait			;Vnta...
mov ah, 0eh			;Funktion: Write character only at cursor
mov al, 'm'			;Bokstaven
mov bl, 190			;Frgen p bokstaven
mov cx, 1			;Skriv den 1 gng
int 10h			;Skriv ut den!
call tWait			;Vnta...
mov ah, 0eh			;Funktion: Write character only at cursor
mov al, 'b'			;Bokstaven
mov bl, 195			;Frgen p bokstaven
mov cx, 1			;Skriv den 1 gng
int 10h			;Skriv ut den!
call tWait			;Vnta...
mov ah, 0eh			;Funktion: Write character only at cursor
mov al, 'l'			;Bokstaven
mov bl, 200			;Frgen p bokstaven
mov cx, 1			;Skriv den 1 gng
int 10h			;Skriv ut den!
call tWait			;Vnta...
mov ah, 0eh			;Funktion: Write character only at cursor
mov al, 'y'			;Bokstaven
mov bl, 205			;Frgen p bokstaven
mov cx, 1			;Skriv den 1 gng
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			;Vnta...
mov ah, 0eh			;Funktion: Write character only at cursor
mov al, 'B'			;Bokstaven
mov bl, 210			;Frgen p bokstaven
mov cx, 1			;Skriv den 1 gng
int 10h			;Skriv ut den!
call tWait
mov ah, 0eh			;Funktion: Write character only at cursor
mov al, 'y'			;Bokstaven
mov bl, 215			;Frgen p bokstaven
mov cx, 1			;Skriv den 1 gng
int 10h			;Skriv ut den!
call tWait
mov ah, 0eh			;Funktion: Write character only at cursor
mov al, ' '			;Bokstaven
mov bl, 255			;Frgen p bokstaven
mov cx, 1			;Skriv den 1 gng
int 10h			;Skriv ut den!
call tWait
mov ah, 0eh			;Funktion: Write character only at cursor
mov al, '-'			;Bokstaven
mov bl, 220			;Frgen p bokstaven
mov cx, 1			;Skriv den 1 gng
int 10h			;Skriv ut den!
call tWait
mov ah, 0eh			;Funktion: Write character only at cursor
mov al, 'U'			;Bokstaven
mov bl, 225			;Frgen p bokstaven
mov cx, 1			;Skriv den 1 gng
int 10h			;Skriv ut den!
call tWait
mov ah, 0eh			;Funktion: Write character only at cursor
mov al, 'n'			;Bokstaven
mov bl, 230			;Frgen p bokstaven
mov cx, 1			;Skriv den 1 gng
int 10h			;Skriv ut den!
call tWait
mov ah, 0eh			;Funktion: Write character only at cursor
mov al, 'h'			;Bokstaven
mov bl, 235			;Frgen p bokstaven
mov cx, 1			;Skriv den 1 gng
int 10h			;Skriv ut den!
call tWait
mov ah, 0eh			;Funktion: Write character only at cursor
mov al, 'o'			;Bokstaven
mov bl, 240			;Frgen p bokstaven
mov cx, 1			;Skriv den 1 gng
int 10h			;Skriv ut den!
call tWait
mov ah, 0eh			;Funktion: Write character only at cursor
mov al, 'l'			;Bokstaven
mov bl, 245			;Frgen p bokstaven
mov cx, 1			;Skriv den 1 gng
int 10h			;Skriv ut den!
call tWait
mov ah, 0eh			;Funktion: Write character only at cursor
mov al, 'y'			;Bokstaven
mov bl, 250			;Frgen p bokstaven
mov cx, 1			;Skriv den 1 gng
int 10h			;Skriv ut den!
call tWait
mov ah, 0eh			;Funktion: Write character only at cursor
mov al, ' '			;Bokstaven
mov bl, 255			;Frgen p bokstaven
mov cx, 1			;Skriv den 1 gng
int 10h			;Skriv ut den!
call tWait
mov ah, 0eh			;Funktion: Write character only at cursor
mov al, 'A'			;Bokstaven
mov bl, 255			;Frgen p bokstaven
mov cx, 1			;Skriv den 1 gng
int 10h			;Skriv ut den!
call tWait
mov ah, 0eh			;Funktion: Write character only at cursor
mov al, 'v'			;Bokstaven
mov bl, 250			;Frgen p bokstaven
mov cx, 1			;Skriv den 1 gng
int 10h			;Skriv ut den!
call tWait
mov ah, 0eh			;Funktion: Write character only at cursor
mov al, 'a'			;Bokstaven
mov bl, 245			;Frgen p bokstaven
mov cx, 1			;Skriv den 1 gng
int 10h			;Skriv ut den!
call tWait
mov ah, 0eh			;Funktion: Write character only at cursor
mov al, 't'			;Bokstaven
mov bl, 240			;Frgen p bokstaven
mov cx, 1			;Skriv den 1 gng
int 10h			;Skriv ut den!
call tWait
mov ah, 0eh			;Funktion: Write character only at cursor
mov al, 'a'			;Bokstaven
mov bl, 235			;Frgen p bokstaven
mov cx, 1			;Skriv den 1 gng
int 10h			;Skriv ut den!
call tWait
mov ah, 0eh			;Funktion: Write character only at cursor
mov al, 'r'			;Bokstaven
mov bl, 230			;Frgen p bokstaven
mov cx, 1			;Skriv den 1 gng
int 10h			;Skriv ut den!
call tWait
mov ah, 0eh			;Funktion: Write character only at cursor
mov al, '-'			;Bokstaven
mov bl, 225			;Frgen p bokstaven
mov cx, 1			;Skriv den 1 gng
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			;Stt grafiklge (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 textlge
int 10h			;Go!

mov al, 0h           		;exit code (0 = ingen error)

exit_program:

mov ah,4ch           		;quit & die
int 21h

end     start

Sisdr nu var det klart ja hoppas att ni fattade ntt av det dr...
det var vk inte s svrt..:)
				 
                           /-Unholy Avatar-

-----------------------------------------------------------------------	
| 				   			      [ /mode #wspa kick ]  |	
-----------------------------------------------------------------------

Jaha som sagt det e inte till mycket entusiasm hr i WSPA det blir allt
mindre artiklar lr rttare sagt inga frn vissa personer och andra gr
pyttelite om ej ngot s det brjar bli dax fr en upprensning dessa
personer kommer drfr att kickas frn WSPA. Av en enhllig jury 
bestende av mig =). S dessa personer sger vi hejd till.......

~pucko^ 	eller hu han nu stava jaja du har inte gjort nnting
		s vi sger hejd......

Cashman	hej d...


Andra personer som ligger dligt till p listan men inte kommer att
kickas n r fljande.

4sst0r
Mr-Clean

				/WSPA

-----------------------------------------------------------------------	
| 				   			      [ Join ]              |	
-----------------------------------------------------------------------

Vi har ftt en ny medlem nmligen Mr Despot hoppas han kan vara till 
hjlp med att fylla vrat e-zine med frhoppningsvis bra artiklar fr
det e ju det vi vill. lr hur.


-----------------------------------------------------------------------	
| 				   			      [ Noteringar ]        |	
-----------------------------------------------------------------------

Det e Fallens Dagar 16-18 juli..i Trollhttan = rul!!!!!
Vi har 4 premunuranter Jippie :)
WSPA kanske ska g ihop med en annan priiker grupp inom snart skriver
	inte vilken fr kommer det vl att bli ett jvla liv p nn. men
	det e inte Phreak020 lr 07nio75, Mer om detta i nsta nummer.
Vi sker Ascii-artists som kan fixa till layouten
ven writers och snt dr
Behver ven nn som kan ta hand om hemsidan. isfall skriv till 
	d0e@navy.org

-----------------------------------------------------------------------	
| 				   			      [ Slutord ]           |	
-----------------------------------------------------------------------

Jaha d var detta nummret slut och det var inte mnga artiklar vi fick
men det var mest fr infos skull till dom i WSPA.
OBS!! Vi har flyttat ifrn Undernet till DAlnet besk oss p #wspa OBS!
Om ni vill brja premunuera skciak ett mail d0e@navy.org med subjekt 
kakelung lr ntt snt...
www.wspa.cjb.net

-----------------------------------------------------------------------	
| 				   			      [ Slut ]              |	
-----------------------------------------------------------------------