;³===========================================================================³ ;³ W E S S K O ' S M E L O D Y E S ³ ;³ PROUDLY PRESENTS ³ ;³---===::::::[[[[[[[[[[[[ 5 1 2 ]]]]]]]]]::::::::=======---------³ ;³---------------------------------------------------------------------------³ ;³(it's exactly 512 bytes. I know the name is already used. But damned, the ³ ;³demoscene isn't comercial, is it?) ³ ;³ ³ ;³ Hi there!, ³ ;³it's Duke Nukem speaking. As you see-nothing's feeling new. I realised that³ ;³as i have 2 Gb free on my harddisk, it's no use in making 256 byte demos - ³ ;³size is important for the number-maniac guys only. And here's my bootsector³ ;³intro (well, it's bootsector, really. Though, i shall recommend you not to ³ ;³install it in your bootsector-as long as the operating system you use needs³ ;³it). The intro basically shows two things- ³ ;³1. Writing on screen in 13h videomode without interrupts; ³ ;³2. Full-screen blur (just on horizontal lines, but...) ³ ;³I decided not to add comments in the procedures. Nevertheless there are ³ ;³such in the main program(see below). ³ ;³ (something about the size)-the intro basically is 398 bytes, but i ³ ;³realised i shouldn't make people respect for less bytes-usually not works ³ ;³and it's not nice. So i filled the useless bytes with such useless text. ³ ;³P. S. I recommend you to open the .COM file with text editor :) ³ ;³===========================================================================³ IDEAL ;Compile with TASM 3.1 or better MODEL TINY P286N ;save 3 bytes with this ;EQUATES videoseg equ 0a000h ;put some constants, for a good style chtable_seg equ 0f000h chtable_offset equ 0fa6eh DATASEG ;a succession of 8 ASCIIZ strings follows: str1 db "Welcome to my",0,"4096 bit intro!",0,"It requires no RIVA TNT",0,"or K7 to run it...",0,"It just works...",0,"So, enjoy:)",0,"VeSsKo/WeSsKo'S MeLoDyEs",0,"Wo R U Waitin' 4...hit a K",0 CODESEG org 100h ;set origin for com file Start: jmp Short Begun ;here follows a message-jump after it db "Virus" ;well, antivirus programs should not catch this... begun: ;set videomode mov ax,13h int 10h ;initpalette mov dx,3c8h mov cx,63 @_10: mov al,cl out dx,al inc dx out dx,al ;colors 63ö0-gragient gray for the text out dx,al out dx,al dec dx loop @_10 mov si,offset str1 ;ds:si points the beginning of the string mov cx,8 ;there are 8 seperate messages @mainloop: mov bx,8 sub bx,cx ;message line=msgNo*8+40 shl bx,3 ; add bx,40 mov ax,80 ;message col =80 always mov dx,63 ;message's color is 63-highest gray call putstring ;call the proc push cx ;perform another cycle-save cx mov cx,25 ;do blurfullscreen 25 times:) @Blurloop: call blurfullscreen ;no parameters required loop @blurloop ;and so 25 times pop cx ;pop cx for the other loop loop @mainloop ;in fact- the mainloop @endless: call BlurFullScreen ;blur it... mov ax,0B00h ;test for keypress int 21h cmp al,0 je @endless ;...until keypressed ;that's why the last message is "Wo R U Waitin' 4...hit a K" mov ax,0700h ;read tha key int 21h ;use dos mov ax,3 ;then restore 80x25x16col text mode int 10h ;use bios mov ax,4c00h ;and terminate program int 21h ;DOS again... ;THAT'S ALL FOLKS!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!:) ;------------------------------- ;PROC putstring ;-draws a ASCIIZ string ; in 13h videomode ;INPUT ;AX=x ;BX=y ;DX=color ;DS:SI point the beginning ;of ASCIIZ string ;OUTPUT:none ;------------------------------- PROC Putstring push cx cld push ax mov ax,videoseg mov es,ax mov ax,bx mov bx,320 push dx imul bx pop dx pop bx add ax,bx mov di,ax @10: mov bl,[ds:si] inc si cmp bl,0 je @ende push ds push si mov ax,chtable_seg mov ds,ax mov si,chtable_offset mov al,bl xor ah,ah shl ax,3 add si,ax mov cx,8 @11: push cx cld lodsb mov bx,ax mov cx,8 @12: dec cx mov ax,1 shl ax,cl test bx,ax jz @NULL mov ax,dx jmp SHORT @AFTER @NULL: mov ax,0 @AFTER: inc cx cld stosb loop @12 add di,312 pop cx loop @11 sub di,2552 pop si pop ds jmp @10 @ende: pop cx ret ENDP PutString ;----------------------------- ;PROC BlurFullScreeen ;Blurs complete screen's ;horizontal lines using buffer ;INPUT,OUTPUT:none ;----------------------------- PROC BlurFullScreen ;F2 the registers push ds push si push cx mov ax,videoseg mov ds,ax sub ah,10h mov es,ax xor si,si xor di,di xor bx,bx mov cx,64000 cld @daloop: xor ax,ax dec si lodsb mov bl,[ds:si] add ax,bx add ax,bx inc si mov bl,[ds:si] add ax,bx shr ax,2 stosb loop @daloop xor di,di xor si,si push ds push es pop ds pop es mov cx,32000 cld rep movsw ;F3 the registers pop cx pop si pop ds ret ENDP BlurFullScreen db 13,10,"Hi, code junker!",13,10,"As you see, the intro was below 400" db " bytes, so i had to fill the remaining somehow.",13,10 END start