931 lines
32 KiB
Plaintext
931 lines
32 KiB
Plaintext
-------------------------------------------------------------------------
|
|
| 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 ] |
|
|
----------------------------------------------------------------------- |