Copy Link
Add to Bookmark
Report

West Swede Priiker Alliated Nummer 04

  

-------------------------------------------------------------------------
| 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 ] |
-----------------------------------------------------------------------

← previous
next →
loading
sending ...
New to Neperos ? Sign Up for free
download Neperos App from Google Play
install Neperos as PWA

Let's discover also

Recent Articles

Recent Comments

Neperos cookies
This website uses cookies to store your preferences and improve the service. Cookies authorization will allow me and / or my partners to process personal data such as browsing behaviour.

By pressing OK you agree to the Terms of Service and acknowledge the Privacy Policy

By pressing REJECT you will be able to continue to use Neperos (like read articles or write comments) but some important cookies will not be set. This may affect certain features and functions of the platform.
OK
REJECT