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