Statistics

Members: 1927
News: 293
Web Links: 1
Visitors: 3933245

Who's Online

We have 1 guest online
Damn Vulnerable LinuxDamn Vulnerable Linux (DVL) is a Linux-based (modified Damn Small Linux) tool for IT-Security & IT-Anti- Security and Attack & Defense. [CLICK HERE FOR MORE INFOS! ]

Featured Conference Video

T16-Recon2006-Joe_Stewart-OllyBonE.gif OllyBone - Semi-Automatic Unpacking on IA-32. View the conference video here!
Home arrow Submit Your Paper!
Fire Demo ported to Linux SVGAlib
User Rating: / 0
PoorBest 
Written by Jan Wagemakers   


In APJ4 there was a little nice fire demo written in DOS assembly language. I have ported this program to Linux assembly language. It is written in the AT&T-syntax (GNU assembler) and makes use of SVGAlib.

My main goal of porting this program to Linux was to show that it can be done. So, I have not optimized this program. For example, things like 'call ioperm' can also be done by making use of int 0x80; quite possibly making use of int 0x80 will make the program smaller. More information about int 0x80 is available at Konstantin Boldyshev's webpage [{http://lightning.voshod.com/asm}].

With SVGALib you can access the screen memory directly, just like you would write to A000:0000 in a DOS asm-program.

I like to thank 'paranoya' for his explanation about how to make use of SVGAlib. Anyway, enough blablabla, here is the source ;-)

 

 

# fire.s : fire.asm of apj 4 ported to Linux/SVGAlib ========================== # gcc -o fire fire.s -lvga
.globl main

.type main,@function
main:

        pushl %ebp
movl %esp,%ebp
call vga_init           # Init vga
pushl $5
call vga_setmode        # set mode to 5 = 320x200x256
addl $4,%esp
pushl $0
call vga_setpage        # Point to page 0 (There is only 1 page)
addl $4,%esp
pushl $0x3c8            # Get IOpermission, starting from 3c8h
pushl $2                # to 3c9h
pushl $1                # Turn On value
call ioperm
addl $12,%esp
pushl $0x60             # Get IOpermission, for 60h : keyboard
pushl $1
Pushl $1
call ioperm
addl $12,%esp
inb $0x60,%al           # Read current value of keyboard
movb %al,key
movw $0x3c8,%dx
movw $0,%ax
outb %al,%dx
incw %dx
lus:
outb %al,%dx
outb %al,%dx
outb %al,%dx
incw %ax
jnz lus
movl graph_mem,%ebx
Mainloop

movl $1280,%esi # mov si,1280 ; movl $0x5d00,%ecx # mov ch,5dh ; y-pos, the less the faster demo pushl %esi # push si pushl %ecx # push cx

Sloop

movb (%ebx,%esi),%al # lodsb incl %esi #

        addb (%ebx,%esi),%al    # al,[si]                 ; pick color and
addb 320(%ebx,%esi),%al # add     al,[si+320]     ; pick one more and
shrb $2,%al             # shr     al,2
movb %al,-960(%ebx,%esi) # mov     [si-960],al     ; put color
loop Sloop
popl %edi               # pop di
popl %ecx               # pop cx
Randoml

mulw 1(%ebx,%edi) # mul word ptr [di+1] ; 'random' routine. incw %ax movw %ax,(%ebx,%edi) #stosw incl %edi incl %edi loop Randoml

        inb $0x60,%al
cmpb key,%al
jz Mainloop
pushl $0
call exit
addl $4,%esp
movl %ebp,%esp
popl %ebp
ret

.data
key:

.byte 0
# =============================================================================