pouët.net

fhofr by b-state

; fhofr - 106b\128b trash-intro for cc2oi5 by wbc \\ b-state 2q.o8.7df
; yeah, compofiller - wait for more c00ler intros on function'15! ;)
; greets to everyone

slow   equ 0   ; change for 1 for slower version 
               ; (if former flies out on your machine)
               ; i.e on my p200mmx fast version works on 70fps
               ; and slow is really sloooooooooooooweeeeeeeeeeeeeerrrrr... %)

format binary
org    100h

start:
    cld
    mov   bh, 0A0h
    mov   es, bx
    
    mov   bh, 80h
    mov   ds, bx      ;buffer1
if slow = 0
    mov   bh, 70h
    mov   fs, bx      ;buffer2
end if
    mov   al, 13h
    int   10h
    
    mov   dx, 3C8h
    xor   ax, ax
    out   dx, al
    inc   dl
    mov   cx, 256
    xor   bx, bx
@palloop:
    mov   al, bl
    shr   al, 2
    out   dx, al
    out   dx, al
    out   dx, al
    inc   bl
    loop  @palloop
    
    ;assume BX = 0, CX = 0 (coincidence? i don't think so ;)
    xor   ax, ax
@clrloop:
    mov   byte [ds:bx], al
if slow   
    mov   byte [es:bx], al
else
    mov   byte [fs:bx], al
end if
    inc   bx
    loop  @clrloop
    
    xor   bp, bp
mainloop:    
    mov   dl, 0DAh
retr2:
    in	  al, dx
    and   al, 8
    jnz   retr2    
retr1:
    in	  al, dx
    and   al, 8
    jz	  retr1
 
if slow = 0
    xor   di, di
    mov   cx, 16000
@fliploop:
    mov   eax, dword [fs:di]
    stosd
    loop  @fliploop
end if
    
    mov   ax, bp
    mov   di, 32160
    mov   byte [ds:di], al
    mov   di, 320
    mov   cx, 64000 - 320*2
    
@pixloop:
    mov   al, [ds:di]
    xor   al, [ds:di-320]
    xor   al, [ds:di+320]
    xor   al, [ds:di-1]
    xor   al, [ds:di+1]
if slow
    stosb
else
    mov   [fs:di], al
    inc   di
end if
    loop  @pixloop

if slow    
    push  es
else
    push  fs
end if    
    push  ds
if slow    
    pop  es
else
    pop  fs
end if 
    pop   ds
    
    inc   bp
    
    mov   ah, 1
    int   16h
    jz	  mainloop
    
    ret

; phew ;)