Compare commits

...

6 Commits

Author SHA1 Message Date
8d5a695ee4 Tube: add lang.inc in *.tup file 2025-03-11 22:53:48 +01:00
bd3ce6c50c Plasma: fix broken path in *.tup file 2025-03-11 22:53:48 +01:00
0f98b9c0e4 Firework: update 2025-03-11 22:53:48 +01:00
da1237a6d6 Fire, Tube: update 2025-03-11 22:53:48 +01:00
908e9eaa12 Plasma: update 2025-03-11 22:53:48 +01:00
2c496cfd05 Tube: update 2025-03-11 22:53:48 +01:00
17 changed files with 672 additions and 504 deletions

View File

@@ -456,13 +456,13 @@ tup.append_table(img_files, {
{"DEMOS/BCDCLK", VAR_PROGS .. "/demos/bcdclk/trunk/bcdclk"},
{"DEMOS/BUDHBROT", VAR_PROGS .. "/demos/buddhabrot/trunk/buddhabrot"},
{"DEMOS/EYES", VAR_PROGS .. "/demos/eyes/trunk/eyes"},
{"DEMOS/FIREWORK", VAR_PROGS .. "/demos/firework/trunk/firework"},
{"DEMOS/FIREWORK", VAR_PROGS .. "/demos/firework/firework"},
{"DEMOS/MOVBACK", VAR_PROGS .. "/demos/movback/trunk/movback"},
{"DEMOS/PLASMA", VAR_PROGS .. "/demos/plasma/trunk/plasma"},
{"DEMOS/PLASMA", VAR_PROGS .. "/demos/plasma/plasma"},
{"DEMOS/SPIRAL", VAR_PROGS .. "/demos/spiral/spiral"},
{"DEMOS/TINYFRAC", VAR_PROGS .. "/demos/tinyfrac/trunk/tinyfrac"},
{"DEMOS/TRANTEST", VAR_PROGS .. "/demos/trantest/trunk/trantest"},
{"DEMOS/TUBE", VAR_PROGS .. "/demos/tube/trunk/tube"},
{"DEMOS/TUBE", VAR_PROGS .. "/demos/tube/tube"},
{"DEMOS/UNVWATER", VAR_PROGS .. "/demos/unvwater/trunk/unvwater"},
{"DEMOS/WEB", VAR_PROGS .. "/demos/web/trunk/web"},
{"DEMOS/ZEROLINE", VAR_PROGS .. "/demos/zeroline/trunk/zeroline"},

View File

@@ -1,2 +1,2 @@
@fasm fire.asm fire
@fasm fire.asm fire
@pause

View File

@@ -1,82 +1,60 @@
;
; FIRE for MENUET - Compile with FASM
; Fire for Kolibri - Compile with FASM
;
use32
org 0
db 'MENUET01' ; 8 byte id
dd 1 ; header version
dd START ; program start
dd image_end ; image size
dd mem_end ; reguired amount of memory
dd stacktop
dd 0,0 ; no parameters, no path
org 0x0
db 'MENUET01' ; 8 byte id
dd 1 ; header version
dd START ; program start
dd I_END ; image size
dd mem_end ; reguired amount of memory
dd mem_end
dd 0,0 ; no parameters, no path
include '..\..\macros.inc'
include '..\..\KOSfuncs.inc'
Screen_W equ 480
include '..\..\..\macros.inc'
START:
red:
; ************************************************
; ********* WINDOW DEFINITIONS AND DRAW **********
; ************************************************
draw_window:
mov eax,12 ; tell os about redraw
mov ebx,1
mcall
mcall SF_REDRAW, SSF_BEGIN_DRAW
xor eax,eax ; define and draw window
mov ebx,100*65536+321
mov ecx,70*65536+222
mov edx,0x01000000
mov esi,0x00000000
mov edi,0x00000000
mcall
mcall SF_CREATE_WINDOW,<100,Screen_W+1>,<70,222>,0x01000000,0,0
mcall 13,0*65536+321,0*65536+30,0
mcall ,0*65536+1 ,0*65536+222
mcall ,321*65536+1,0*65536+223
mcall ,0*65536+321,222*65536+1
mcall SF_DRAW_RECT,<0,Screen_W+1>,<0,30>,0
mcall ,<0,1>,<0,222>
mcall ,<Screen_W+1,1>,<0,223>
mcall ,<0,Screen_W+1>,<222,1>
mcall SF_DRAW_TEXT,<(Screen_W-108)/2,8>,dword 0x00FFFFFF,text,textlen-text
mov al,4 ; 'FIRE FOR KOLIBRI'
mov ebx,106*65536+8
mov ecx,dword 0x00FFFFFF
mov edx,text
mov esi,textlen-text
mcall
mcall SF_DEFINE_BUTTON,<(Screen_W+1-19),12>,<5,12>,1,0x009a0000
mov al,8
mov ebx,(321-19)*65536+12 ; button start x & size
mov ecx,5*65536+12 ; button start y & size
mov edx,1 ; button number
mov esi,0x009a0000
mcall
mov ebx,ecx ;5*65536+12
inc edx
mcall
mov ebx,ecx ;5*65536+12
inc edx
mcall
mcall ,<18,12>
mov ebx,18*65536+12
inc edx
mcall
mcall ,<31,12>
mov ebx,31*65536+12
inc edx
mcall
mov al,12 ; tell os about redraw end
mov ebx,2
mcall
mcall SF_REDRAW, SSF_END_DRAW
sta: ; calculate fire image
mov esi, FireScreen+0x2300-80
mov ecx, 80
mov esi, FireScreen.end+Screen_W*3-Screen_W/4
mov ecx, Screen_W/4
mov eax, [FireSeed]
NEWLINE:
@@ -89,7 +67,7 @@ sta: ; calculate fire image
mov [FireSeed], eax
mov ecx, 0x2300-80
mov ecx, (Screen_W*200)/8+Screen_W*3-Screen_W/4
sub esi, ecx
xor edx, edx
xor eax, eax
@@ -103,7 +81,7 @@ sta: ; calculate fire image
add eax, edx
mov dl, [esi]
add eax, edx
mov dl, [esi + 80]
mov dl, [esi + Screen_W/4]
jmp typedone
notype1:
@@ -114,7 +92,7 @@ sta: ; calculate fire image
; mov dl, [esi - 2]
; add eax, edx
lea eax, [eax + edx*2]
mov dl, [esi + 78]
mov dl, [esi + Screen_W/4-2]
; notype2:
; type 2 is never used
@@ -124,7 +102,7 @@ sta: ; calculate fire image
; add eax, edx
; mov dl, [esi]
; add eax, edx
; mov dl, [esi + 80]
; mov dl, [esi + Screen_W/4]
; notype3:
typedone:
@@ -135,12 +113,10 @@ typedone:
ZERO:
mov [esi - 81], al
mov [esi - Screen_W/4-1], al
loop FIRELOOP
mov al, 5 ; in this moment always high 24 bits of eax are zero!
mov ebx,[delay]
mcall
mcall SF_SLEEP,[delay]
inc [calc]
cmp [calc], byte 2
@@ -169,7 +145,7 @@ typedone:
mov [edi+3],ecx
mov [edi+6],ecx
mov [edi+9],cx
lea ebx, [edi+320*3]
lea ebx, [edi+Screen_W*3]
mov [ebx+0],ecx
mov [ebx+3],ecx
mov [ebx+6],ecx
@@ -177,50 +153,43 @@ typedone:
add edi,12
inc edx
cmp edx,80
cmp edx,Screen_W/4
jnz nnl
xor edx,edx
add edi,320*3
add edi,Screen_W*3
nnl:
cmp esi,FireScreen+8000; 0x2000
cmp esi,FireScreen.end
jnz newc
mov al,7 ; display image
; high 24 bits of eax are zero!
pop ebx
mov ecx,4*80*65536+200
mov edx,1*65536+22
mcall
mcall SF_PUT_IMAGE,,<Screen_W,200>,<1,22>
nodrw:
mov eax,11 ; check if os wants to talk to us
mcall
mcall SF_CHECK_EVENT ; check if os wants to talk to us
dec eax
jz red
jz draw_window
cmp al, 3-1
jnz nob4
button: ; get button id
mov al,17
mcall
mcall SF_GET_BUTTON
shr eax, 8
dec eax
jnz noclose
or eax,-1 ; close this program
mcall
noclose:
jnz @f
mcall SF_TERMINATE_PROCESS ; close this program
@@:
dec eax ; change fire type
jnz nob2
jnz @f
xor [type], 1
nob2:
@@:
dec eax ; change delay
jnz nob3
jnz @f
xor [delay], 1
nob3:
@@:
dec eax ; change color
jnz nob4
@@ -233,7 +202,7 @@ typedone:
fcok:
mov [fcolor],eax
mov edi,ImageData
mov ecx,(320*600)/4
mov ecx,(Screen_W*200*3)/4
xor eax,eax
rep stosd
@@ -246,19 +215,23 @@ fcolor dd 2
xx db 'x'
type db 0
calc db 0
delay dd 0
delay dd 1
FireSeed dd 0x1234
text: db 'FIRE FOR KOLIBRI'
text: db 'Fire for Kolibri'
textlen:
I_END:
align 4
image_end:
FireScreen:
rb 0x2300
rb (Screen_W*200)/8 ;wisible fire
.end:
rb Screen_W*3 ;hidden fire (need for generation)
ImageData:
rb 320*200*3
rb Screen_W*200*3
; stack
align 512
rb 512
align 512
rb 512
stacktop:
mem_end:

View File

@@ -0,0 +1,2 @@
@fasm firework.asm firework
@pause

View File

@@ -21,9 +21,14 @@ use32
dd stacktop ; reserved=no extended header
dd 0, 0
include '../../../macros.inc'
SCREEN_WIDTH = 320
SCREEN_HEIGHT = 200
include '../../macros.inc'
include '../../KOSfuncs.inc'
SCREEN_WIDTH = 600 ;.. mod 8 == 0
Screen_W dd SCREEN_WIDTH
Screen_H dd 400
lost_bytes dd 0
SIMD equ SSE
SIMD_BYTES = 8
; SSE 8
@@ -46,41 +51,37 @@ PART_SIZE = 20
macro shade
{
local .lop
mov ecx, [Screen_H]
imul ecx, [Screen_W]
shr ecx, 3 ;ecx = Screen_W * Screen_H / SIMD_BYTES
mov edi, [buffer]
if SIMD eq SSE
mov ecx, SCREEN_WIDTH * SCREEN_HEIGHT / SIMD_BYTES
mov edi, buffer
movq mm1, qword [sub_mask]
.lop:
.lop:
movq mm0, [edi]
psubusb mm0, mm1
movq [edi], mm0
add edi, SIMD_BYTES
loop .lop
else if SIMD eq AVX
mov ecx, SCREEN_WIDTH * SCREEN_HEIGHT / SIMD_BYTES
mov edi, buffer
vmovdqa xmm1, xword [sub_mask]
.lop:
.lop:
vmovdqa xmm0, [edi]
vpsubusb xmm0, xmm0, xmm1
vmovdqa [edi], xmm0
add edi, SIMD_BYTES
loop .lop
else if SIMD eq AVX2
mov ecx, SCREEN_WIDTH * SCREEN_HEIGHT / SIMD_BYTES
mov edi, buffer
vmovdqa ymm1, yword [sub_mask]
.lop:
.lop:
vmovdqa ymm0, [edi]
vpsubusb ymm0, ymm0, ymm1
vmovdqa [edi], ymm0
add edi, SIMD_BYTES
loop .lop
else if SIMD eq AVX512
mov ecx, SCREEN_WIDTH * SCREEN_HEIGHT / SIMD_BYTES
mov edi, buffer
vmovdqa64 zmm1, zword [sub_mask]
.lop:
.lop:
vmovdqa64 zmm0, [edi]
vpsubusb zmm0, zmm0, zmm1
vmovdqa64 [edi], zmm0
@@ -91,10 +92,18 @@ end if
macro blur_prepare
{
mov ecx, (SCREEN_WIDTH * SCREEN_HEIGHT - SCREEN_WIDTH * 2 - SIMD_BYTES*2) / SIMD_BYTES
mov edi, buffer + SCREEN_WIDTH + SIMD_BYTES
mov ecx, [Screen_H]
dec ecx
dec ecx
imul ecx, [Screen_W]
sub ecx, SIMD_BYTES*2
shr ecx, 3 ;ecx = (Screen_W * (Screen_H - 2) - SIMD_BYTES*2) / SIMD_BYTES
mov edi, SIMD_BYTES
add edi, [buffer]
add edi, [Screen_W]
}
; eax = [Screen_W]
macro blur
{
local .lop
@@ -104,8 +113,10 @@ if SIMD eq SSE
movq mm1, [edi + 1]
movq mm2, [edi - 1]
movq mm3, mm0
movq mm4, [edi - SCREEN_WIDTH]
movq mm5, [edi + SCREEN_WIDTH]
neg eax
movq mm4, [edi + eax]
neg eax
movq mm5, [edi + eax]
pavgb mm0, mm1 ; mm0 = avg(cur,cur+1)
pavgb mm3, mm2 ; mm3 = avg(cur,cur-1)
@@ -120,11 +131,13 @@ else if SIMD eq AVX
.lop:
vmovdqa xmm0, [edi]
vmovdqa xmm1, xmm0
vmovdqa xmm2, [edi - SCREEN_WIDTH]
neg eax
vmovdqa xmm2, [edi + eax]
neg eax
vpavgb xmm0, xmm0, [edi + 1]
vpavgb xmm1, xmm1, [edi - 1]
vpavgb xmm2, xmm2, [edi + SCREEN_WIDTH]
vpavgb xmm2, xmm2, [edi + eax]
vpavgb xmm1, xmm1, xmm2
vpavgb xmm0, xmm0, xmm1
@@ -135,11 +148,13 @@ else if SIMD eq AVX2
.lop:
vmovdqa ymm0, [edi]
vmovdqa ymm1, ymm0
vmovdqa ymm2, [edi - SCREEN_WIDTH]
neg eax
vmovdqa ymm2, [edi + eax]
neg eax
vpavgb ymm0, ymm0, [edi + 1]
vpavgb ymm1, ymm1, [edi - 1]
vpavgb ymm2, ymm2, [edi + SCREEN_WIDTH]
vpavgb ymm2, ymm2, [edi + eax]
vpavgb ymm1, ymm1, ymm2
vpavgb ymm0, ymm0, ymm1
@@ -150,11 +165,13 @@ else if SIMD eq AVX512
.lop:
vmovdqa64 zmm0, [edi]
vmovdqa64 zmm1, zmm0
vmovdqa64 zmm2, [edi - SCREEN_WIDTH]
neg eax
vmovdqa64 zmm2, [edi + eax]
neg eax
vpavgb zmm0, zmm0, [edi + 1]
vpavgb zmm1, zmm1, [edi - 1]
vpavgb zmm2, zmm2, [edi + SCREEN_WIDTH]
vpavgb zmm2, zmm2, [edi + eax]
vpavgb zmm1, zmm1, zmm2
vpavgb zmm0, zmm0, zmm1
@@ -164,6 +181,7 @@ else if SIMD eq AVX512
end if
}
; eax = [Screen_W]
macro blur_right
{
local .lop
@@ -171,8 +189,8 @@ if SIMD eq SSE
.lop:
movq mm0, [edi]
movq mm1, [edi + 1]
movq mm2, [edi + SCREEN_WIDTH]
movq mm3, [edi + SCREEN_WIDTH + 1]
movq mm2, [edi + eax]
movq mm3, [edi + eax + 1]
pavgb mm0, mm1
pavgb mm3, mm2
pavgb mm0, mm3
@@ -182,30 +200,30 @@ if SIMD eq SSE
else if SIMD eq AVX
.lop:
vmovdqa xmm0, [edi]
vmovdqu xmm1, [edi + SCREEN_WIDTH + 1]
vpavgb xmm2, xmm0, [edi + 1]
vpavgb xmm3, xmm1, [edi + SCREEN_WIDTH]
vpavgb xmm4, xmm2, xmm3
vmovdqu xmm1, [edi + eax + 1]
vpavgb xmm2, xmm0, [edi + 1]
vpavgb xmm3, xmm1, [edi + eax]
vpavgb xmm4, xmm2, xmm3
vmovdqa [edi], xmm4
add edi, SIMD_BYTES
loop .lop
else if SIMD eq AVX2
.lop:
vmovdqa ymm0, [edi]
vmovdqu ymm1, [edi + SCREEN_WIDTH + 1]
vpavgb ymm2, ymm0, [edi + 1]
vpavgb ymm3, ymm1, [edi + SCREEN_WIDTH]
vpavgb ymm4, ymm2, ymm3
vmovdqu ymm1, [edi + eax + 1]
vpavgb ymm2, ymm0, [edi + 1]
vpavgb ymm3, ymm1, [edi + eax]
vpavgb ymm4, ymm2, ymm3
vmovdqa [edi], ymm4
add edi, SIMD_BYTES
loop .lop
else if SIMD eq AVX512
.lop:
vmovdqa64 zmm0, [edi]
vmovdqu64 zmm1, [edi + SCREEN_WIDTH + 1]
vmovdqu64 zmm1, [edi + eax + 1]
vpavgb zmm2, zmm0, [edi + 1]
vpavgb zmm3, zmm1, [edi + SCREEN_WIDTH]
vpavgb zmm4, zmm2, zmm3
vpavgb zmm3, zmm1, [edi + eax]
vpavgb zmm4, zmm2, zmm3
vmovdqa64 [edi], zmm4
add edi, SIMD_BYTES
loop .lop
@@ -217,12 +235,12 @@ STARTAPP:
init_palette:
mov edi, pal
xor eax, eax
red_loop:
@@:
stosd
stosd
add eax, 0x040000
and eax, 0xFFFFFF
jnz red_loop
jnz @b
mov eax, 63*4 SHL 16
@@:
@@ -231,11 +249,12 @@ red_loop:
add ax, 0x0404
jnc @b
;zero_buffer:
mov ecx, SCREEN_WIDTH * SCREEN_HEIGHT / 4
; mov edi, buffer
xor eax, eax
rep stosd
;init buffer
mcall SF_SYS_MISC,SSF_HEAP_INIT
mov ecx,[Screen_W]
imul ecx,[Screen_H]
mcall SF_SYS_MISC,SSF_MEM_ALLOC
mov [buffer],eax
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Main Functions
@@ -253,30 +272,63 @@ end virtual
jmp MAIN
align 4
OnResize:
mov ecx,[Screen_W]
imul ecx,[Screen_H]
;ecx = SCREEN_W*SCREEN_H
mcall SF_SYS_MISC,SSF_MEM_REALLOC,,[buffer]
ret
align 4
red:
mcall 9, proc_info, -1
x = 100
y = 70
xsize = SCREEN_WIDTH+9
ysize = SCREEN_HEIGHT+4
areacolor = 0x54224466
mov eax, 12 ; function 12:tell os about windowdraw
mov ebx, 1 ; 1, start of draw
int 0x40
mov eax, 48
mov ebx, 4
int 0x40
lea ecx, [(y SHL 16) + ysize + eax]
xor eax, eax ; function 0 : define and draw window
mov ebx, (x SHL 16) + xsize ; [x start] *65536 + [x size]
mov edx, areacolor ; color of work area RRGGBB
mov edi, window_title
int 0x40
mov eax, 12 ; end of redraw
mov ebx, 2
int 0x40
mcall SF_THREAD_INFO, proc_info, -1
areacolor = 0x53224466
mcall SF_REDRAW, SSF_BEGIN_DRAW
mcall SF_STYLE_SETTINGS, SSF_GET_SKIN_HEIGHT
add eax, 4
push eax ;for test resize
add eax, [Screen_H]
lea ecx, [(70 shl 16) + eax]
mov ebx, [Screen_W]
lea ebx, [(100 shl 16) + 9 + ebx]
mcall SF_CREATE_WINDOW,,, areacolor,, window_title
;test resize
pop eax
cmp dword[proc_info.box.height],0
je .resize_end
sub eax,[proc_info.box.height]
neg eax
cmp eax,[Screen_H]
je .end_h
cmp eax,32 ;min height
jge @f
mov eax,32
@@:
mov [Screen_H],eax
xor eax,eax
mov [Screen_W],eax
.end_h:
mov eax,[proc_info.box.width]
sub eax,9
mov [lost_bytes],eax
and eax,0xffff-(SIMD_BYTES-1)
cmp eax,[Screen_W]
je .resize_end
cmp eax,64 ;min width
jge @f
mov eax,64
@@:
mov [Screen_W],eax
call OnResize
.resize_end:
mcall SF_REDRAW, SSF_END_DRAW ; end of redraw
align 4
MAIN:
test [proc_info.wnd_state], 0x04
jnz still
@@ -291,11 +343,15 @@ MAIN:
cmp eax, 5
jb .new_particle
cmp eax, SCREEN_WIDTH - 5
mov edx, [Screen_W]
sub edx, 5
cmp eax, edx
jge .new_particle
cmp ebx, 5
jb .new_particle
cmp ebx, SCREEN_HEIGHT - 5
mov edx, [Screen_H]
sub edx, 5
cmp ebx, edx
jl .part_ok
.new_particle:
@@ -303,9 +359,11 @@ MAIN:
jmp .advance_particles
.part_ok:
imul edi, ebx, SCREEN_WIDTH
mov edi, ebx
imul edi, [Screen_W]
mov dl, [ebp+COLOR_OFFSET]
mov [buffer+eax+edi], dl
add eax,[buffer]
mov [eax+edi], dl
mov eax, [ebp+X_SPEED_OFFSET]
add [ebp+X_OFFSET], eax
@@ -324,6 +382,7 @@ MAIN:
shade
; jmp .copy_buffer_to_video
blur_prepare
mov eax, [Screen_W]
test dword [blur_right_flag] , 0x800000
jnz .do_blur_right
blur
@@ -339,36 +398,45 @@ MAIN:
.copy_buffer_to_video:
mcall 48, 4
lea edx, [(5 SHL 16) + eax]
mcall SF_STYLE_SETTINGS, SSF_GET_SKIN_HEIGHT
lea edx, [(5 shl 16) + eax]
push 8
pop esi
xor ebp, ebp
mov ecx, [Screen_W]
shl ecx, 16
add ecx, [Screen_H]
mcall SF_PUT_IMAGE_EXT, [buffer],,,, pal
mov eax, 65
mov ebx, buffer
mov ecx, (SCREEN_WIDTH SHL 16) + SCREEN_HEIGHT
push 8
pop esi
mov edi, pal
xor ebp, ebp
int 0x40
and [lost_bytes], SIMD_BYTES-1
jz still
mcall SF_STYLE_SETTINGS, SSF_GET_SKIN_HEIGHT
mov ecx, eax
shl ecx, 16
add ecx, [Screen_H]
mov ebx, [Screen_W]
add ebx, 5 ;left border
shl ebx, 16
add ebx, [lost_bytes]
xor edx, edx
mcall SF_DRAW_RECT
align 4
still:
mcall SF_WAIT_EVENT_TIMEOUT, 1
still:
mov eax, 11 ; Test if there is an event in the queue.
int 0x40
dec eax ; redraw request ?
jz red
dec eax ; key in buffer ?
jz key
dec eax ; button in buffer ?
jz button
jmp MAIN
dec eax ; redraw request ?
jz red
dec eax ; key in buffer ?
jz key
dec eax ; button in buffer ?
jz button
jmp MAIN
align 4
key:
mov eax, 2
int 0x40
mcall SF_GET_KEY
; cmp ah, 1 ; Test Esc in Scan
; je close_app
cmp ah, 27 ; Test Esc in ASCII
@@ -378,8 +446,7 @@ key:
button:
; we have only one button, close
close_app:
mov eax, -1 ; close this program
int 0x40
mcall SF_TERMINATE_PROCESS
init_particle:
rdtsc
@@ -389,7 +456,7 @@ init_particle:
call rand
cdq
;xor dx, dx
mov ebx, SCREEN_WIDTH
mov ebx, [Screen_W]
div ebx
shl edx, 6
mov [4 + global_x], edx
@@ -397,7 +464,7 @@ init_particle:
call rand
cdq
;xor dx, dx
mov ebx, SCREEN_HEIGHT
mov ebx, [Screen_H]
div ebx
shl edx, 6
mov [4 + global_y], edx
@@ -444,7 +511,8 @@ proc_info process_information
align 16
pal rb 256 * 4
align SIMD_BYTES
buffer rb SCREEN_WIDTH * SCREEN_HEIGHT
E_END:
rd 0x200
buffer dd 0
align 4
rd 1024
stacktop:
E_END:

View File

@@ -1,5 +1,5 @@
if tup.getconfig("NO_FASM") ~= "" then return end
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../../.." or tup.getconfig("HELPERDIR")
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../.." or tup.getconfig("HELPERDIR")
tup.include(HELPERDIR .. "/use_fasm.lua")
add_include(tup.getvariantdir())

View File

@@ -1,5 +1,5 @@
@erase lang.inc
@echo lang fix en_US >lang.inc
@fasm plasma.asm plasma
@erase lang.inc
@pause
@erase lang.inc
@echo lang fix en_US >lang.inc
@fasm plasma.asm plasma
@erase lang.inc
@pause

View File

@@ -1,5 +1,5 @@
@erase lang.inc
@echo lang fix ru_RU >lang.inc
@fasm plasma.asm plasma
@erase lang.inc
@pause
@erase lang.inc
@echo lang fix ru_RU >lang.inc
@fasm plasma.asm plasma
@erase lang.inc
@pause

View File

@@ -1,48 +1,112 @@
; Originally written by Jarek Pelczar
include "lang.inc"
include "..\..\..\macros.inc"
include "..\..\macros.inc"
include "..\..\KOSfuncs.inc"
WND_SIZE_X = 320
WND_SIZE_Y = 200
KOS_APP_START
WND_SIZE_X dd 640
WND_SIZE_Y dd 400
if lang eq ru_RU
title db '<27>« §¬ ',0
else
title db 'Plasma',0
end if
MEOS_APP_START
CODE
mcall SF_SYS_MISC,SSF_HEAP_INIT
mov ecx,[WND_SIZE_X]
imul ecx,[WND_SIZE_Y]
mcall SF_SYS_MISC,SSF_MEM_ALLOC
mov [virtual_screen_8],eax
fninit
mcall 40,101b
mcall SF_SET_EVENTS_MASK, 101b
call init_palette
call init_texture
jmp .paint_window
.event_loop:
mcall 23,1
mcall SF_WAIT_EVENT_TIMEOUT, 1
test eax,eax
je .draw_screen
dec eax
je .paint_window
or eax,-1
mcall
mcall SF_TERMINATE_PROCESS
.draw_screen:
xor ebp,ebp
mcall 65,virtual_screen_8,<WND_SIZE_X,WND_SIZE_Y>,0,8,_palette
mov ecx,[WND_SIZE_X]
shl ecx,16
add ecx,[WND_SIZE_Y]
mcall SF_PUT_IMAGE_EXT, [virtual_screen_8],,0,8,_palette
call rotate_pal
jmp .event_loop
.paint_window:
mcall 12,1
mcall SF_REDRAW, SSF_BEGIN_DRAW
mcall 48,4 ; get skin height
lea ecx,[eax + (110 shl 16) + WND_SIZE_Y + 4]
;if window resize
mcall SF_THREAD_INFO,procinfo,-1
cmp dword[procinfo.box.height],0
je .resize_end
mcall SF_STYLE_SETTINGS, SSF_GET_SKIN_HEIGHT
add eax,4
sub eax,[procinfo.box.height]
neg eax
cmp eax,[WND_SIZE_Y]
je .end_h
cmp eax,32 ;min height
jge @f
mov eax,32
@@:
mov [WND_SIZE_Y],eax
xor eax,eax
mov [WND_SIZE_X],eax
.end_h:
mov eax,[procinfo.box.width]
sub eax,9
cmp eax,[WND_SIZE_X]
je .resize_end
cmp eax,64 ;min width
jge @f
mov eax,64
@@:
mov [WND_SIZE_X],eax
call OnResize
call init_texture
.resize_end:
mcall SF_STYLE_SETTINGS, SSF_GET_SKIN_HEIGHT
lea ecx,[eax + (110 shl 16) + 4]
add ecx,[WND_SIZE_Y]
mov edi,title
mcall 0,<110,WND_SIZE_X+9>,,0x74000000
mov ebx,[WND_SIZE_X]
add ebx,(110 shl 16)+9
mcall SF_CREATE_WINDOW,,,0x73000000
xor ebp,ebp
mcall 65,virtual_screen_8,<WND_SIZE_X,WND_SIZE_Y>,0,8,_palette
xor ebp,ebp
mov ecx,[WND_SIZE_X]
shl ecx,16
add ecx,[WND_SIZE_Y]
mcall SF_PUT_IMAGE_EXT, [virtual_screen_8],,0,8,_palette
mcall 12,2
mcall SF_REDRAW, SSF_END_DRAW
jmp .event_loop
align 4
OnResize:
mov ecx,[WND_SIZE_X]
imul ecx,[WND_SIZE_Y]
mcall SF_SYS_MISC,SSF_MEM_ALLOC
mov [virtual_screen_8],eax
ret
align 4
init_palette:
mov edi,_palette
mov ecx,64
@@ -92,7 +156,7 @@ init_texture:
mov [_fpom16],180
fidiv [_fpom16]
fstp [_st_rad]
mov edi,virtual_screen_8
mov edi,[virtual_screen_8]
cdq
.itex_vertical:
xor ecx,ecx
@@ -120,10 +184,10 @@ init_texture:
inc eax
stosb
inc ecx
cmp ecx,WND_SIZE_X
cmp ecx,[WND_SIZE_X]
jne .itex_horizontal
inc edx
cmp edx,WND_SIZE_Y
cmp edx,[WND_SIZE_Y]
jne .itex_vertical
ret
@@ -141,7 +205,6 @@ rotate_pal:
DATA
_multiplier dd 63.5
title db 'Plasma',0
UDATA
_fpom32 rd 1
@@ -149,7 +212,7 @@ UDATA
_st_rad rd 1
_palette: rd 256
virtual_screen_8:
rb WND_SIZE_X*WND_SIZE_Y
virtual_screen_8 rd 1
procinfo process_information
MEOS_APP_END
KOS_APP_END

View File

@@ -0,0 +1,7 @@
if tup.getconfig("NO_FASM") ~= "" then return end
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../.." or tup.getconfig("HELPERDIR")
tup.include(HELPERDIR .. "/use_fasm.lua")
add_include(tup.getvariantdir())
tup.rule("echo lang fix " .. ((tup.getconfig("LANG") == "") and "en_US" or tup.getconfig("LANG")) .. " > %o", {"lang.inc"})
tup.rule({"tube.asm", extra_inputs = {"lang.inc"}}, FASM .. " %f %o " .. tup.getconfig("KPACK_CMD"), "tube")

View File

@@ -1,5 +1,5 @@
@erase lang.inc
@echo lang fix en_US >lang.inc
@fasm tube.asm tube
@erase lang.inc
@pause
@erase lang.inc
@echo lang fix en_US >lang.inc
@fasm tube.asm tube
@erase lang.inc
@pause

View File

@@ -1,5 +1,5 @@
@erase lang.inc
@echo lang fix ru_RU >lang.inc
@fasm tube.asm tube
@erase lang.inc
@pause
@erase lang.inc
@echo lang fix ru_RU >lang.inc
@fasm tube.asm tube
@erase lang.inc
@pause

View File

@@ -1,2 +0,0 @@
if tup.getconfig("NO_FASM") ~= "" then return end
tup.rule("tube.asm", "fasm %f %o " .. tup.getconfig("KPACK_CMD"), "tube")

View File

@@ -1,264 +0,0 @@
; (<28>) ( ) <20> ) ( ) 256b intro by baze/3SC for Syndeecate 2001
; <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> loveC: thanks, Serzh: eat my socks dude ;]
; ( ) ( ) ( ) ( ) e-mail: baze@stonline.sk, web: www.3SC.sk
; Menuet port by VT
appname equ 'TUBE - FPU'
use32
org 0x0
db 'MENUET01'
dd 0x01
dd START
dd I_END
dd 0x40000
dd 0x40000
dd 0,0
include '..\..\..\macros.inc'
START:
call draw_window
call init_tube
push ebx
still:
pop ebx
call MAIN
push ebx
mov eax,23
mov ebx,1
mcall
cmp eax,1
jne no_red
call draw_window
jmp still
no_red:
cmp eax,0
je still
or eax,-1
mcall
SCREEN equ 160
PIXBUF equ 200h
EYE equ EYE_P-2
MAIN:
add bh,10;8
mov edi,PIXBUF
fadd dword [di-PIXBUF+TEXUV-4]
push di
mov dx,-80
TUBEY:
mov bp,-160
TUBEX:
mov si,TEXUV
fild word [si-TEXUV+EYE]
mov [si],bp
fild word [si]
mov [si],dx
fild word [si]
mov cl,2
ROTATE:
fld st3
fsincos
fld st2
fmul st0,st1
fld st4
fmul st0,st3
db 0xde,0xe9 ; fsubp st1,st0
db 0xd9,0xcb ; fxch st3
fmulp st2,st0
fmulp st3,st0
faddp st2,st0
db 0xd9,0xca ; fxch st2
loop ROTATE
fld st1
db 0xdc,0xc8 ; fmul st0,st
fld st1
db 0xdc,0xc8 ; fmul st0,st
faddp st1,st0
fsqrt
db 0xde,0xfb ; fdivp st3,st0
fpatan
fimul word [si-4]
fistp word [si]
fimul word [si-4]
fistp word [si+1]
mov si,[si]
lea ax,[bx+si]
add al,ah
and al,64
mov al,-5
jz STORE_1
shl si,2
lea ax,[bx+si]
sub al,ah
mov al,-16
jns STORE_1
shl si,1
mov al,-48
STORE_1:
; add al,[ebx+esi+0x80000]
add [di],al
inc di
inc bp
cmp bp,160
EYE_P:
jnz TUBEX
inc dx
cmp dx,80
jnz TUBEY
call display_image
pop si
mov ch,SCREEN*320/256
BLUR:
inc si
sar byte [si],2
loop BLUR
ret
display_image:
pusha
mov esi,PIXBUF
mov edi,0x10000
newp:
movzx edx,byte [esi]
shl edx,4
; mov dh,dl
mov [edi],edx
add edi,3
inc esi
cmp esi,320*160+PIXBUF
jbe newp
mov eax,7
mov ecx,320*65536+160
xor edx,edx
mov ebx,0x10000
mcall
popa
ret
draw_window:
pusha
mcall 12, 1
mcall 48, 4 ;get skin width
lea ecx,[100*65536+164+eax]
xor eax,eax
mov ebx,100*65536+329
mov edx,0x74000000
mov edi,title
mcall
mcall 12, 2
popa
ret
title db appname,0
db 41,0,0xC3,0x3C
TEXUV:
init_tube:
mov ecx,256
PAL1:
mov dx,3C8h
mov ax,cx
inc dx
sar al,1
js PAL2
mul al
shr ax,6
PAL2:
mov al,0
jns PAL3
sub al,cl
shr al,1
shr al,1
PAL3:
mov bx,cx
mov [ebx+0x1000],bh
loop PAL1
mov ecx,256
TEX:
mov bx,cx
add ax,cx
rol ax,cl
mov dh,al
sar dh,5
adc dl,dh
adc dl,[ebx+255+0x1000]
shr dl,1
mov [ebx+0x1000],dl
not bh
mov [ebx+0x1000],dl
loop TEX
fninit
fldz
ret
I_END:

View File

@@ -0,0 +1,321 @@
; 256b intro by baze/3SC for Syndeecate 2001
; loveC: thanks, Serzh: eat my socks dude ;]
; e-mail: baze@stonline.sk, web: www.3SC.sk
; Menuet port by VT
use32
org 0
db 'MENUET01'
dd 1,START,image_end,memory_end,stacktop,0,0
include '../../macros.inc'
include '../../KOSfuncs.inc'
include 'lang.inc'
if lang eq ru_RU
title db '<27><>㡠 - FPU',0
else
title db 'Tube - FPU',0
end if
SCREEN_W dd 640-10 ;10 px for borders
SCREEN_H dd 400-10
align 4
START:
mcall SF_SYS_MISC,SSF_HEAP_INIT
mov ecx,[SCREEN_W]
imul ecx,[SCREEN_H]
;ecx = SCREEN_W*SCREEN_H
mcall SF_SYS_MISC,SSF_MEM_ALLOC
mov [PIXBUF],eax
mcall SF_SYS_MISC,SSF_MEM_ALLOC
mov [buf1],eax
lea ecx,[ecx+2*ecx]
mcall SF_SYS_MISC,SSF_MEM_ALLOC
mov [buf2],eax
call draw_window
call init_tube
push ebx
still:
pop ebx
call MAIN
push ebx
mcall SF_WAIT_EVENT_TIMEOUT,1
cmp eax,EV_REDRAW
jne no_red
call draw_window
jmp still
no_red:
or eax,eax
jz still
mcall SF_TERMINATE_PROCESS
align 4
OnResize:
mov ecx,[SCREEN_W]
imul ecx,[SCREEN_H]
;ecx = SCREEN_W*SCREEN_H
mcall SF_SYS_MISC,SSF_MEM_REALLOC,,[PIXBUF]
mov [PIXBUF],eax
mcall SF_SYS_MISC,SSF_MEM_REALLOC,,[buf1]
mov [buf1],eax
lea ecx,[ecx+2*ecx]
mcall SF_SYS_MISC,SSF_MEM_REALLOC,,[buf2]
mov [buf2],eax
ret
align 4
MAIN:
;edx - coord y
;ebp - coord x
;edi - pixel buffer
add ebx,10 shl 8
mov edi,[PIXBUF]
fadd dword [TEXUV-4]
push edi
mov edx,[SCREEN_H]
inc edx ;fix (height%2)==1
shr edx,1
neg edx ;edx=-SCREEN_H/2
align 4
TUBEY:
mov ebp,[SCREEN_W]
inc ebp ;fix (width%2)==1
shr ebp,1
neg ebp ;ebp=-SCREEN_W/2
align 4
TUBEX:
mov esi,TEXUV
fild dword [SCREEN_W]
fld1
fld1
faddp
fdivp ;st0=SCREEN_W/2
mov [esi],ebp
fild word [esi]
mov [esi],edx
fild word [esi]
mov cl,2
ROTATE:
fld st3
fsincos
fld st2
fmul st0,st1
fld st4
fmul st0,st3
fsubp st1,st0
fxch st3
fmulp st2,st0
fmulp st3,st0
faddp st2,st0
fxch st2
loop ROTATE
fld st1
db 0xdc,0xc8 ;fmul st0,st ?
fld st1
db 0xdc,0xc8 ;fmul st0,st ?
faddp st1,st0
fsqrt
fdivp st3,st0
fpatan
fimul word [esi-4]
fistp word [esi]
fimul word [esi-4]
fistp word [esi+1]
mov esi,[esi]
lea eax,[ebx+esi]
add al,ah
and al,64
mov al,-5
jz STORE_1
shl esi,2
lea eax,[ebx+esi]
sub al,ah
mov al,-16
jns STORE_1
shl esi,1
mov al,-48
STORE_1:
; add al,[ebx+esi+0x80000]
add [edi],al
inc edi
inc ebp
mov eax,[SCREEN_W]
shr eax,1 ;eax=SCREEN_W/2
cmp ebp,eax
jnz TUBEX
inc edx
mov eax,[SCREEN_H]
shr eax,1 ;eax=SCREEN_H/2
cmp edx,eax
jnz TUBEY
call display_image
pop esi
mov ecx,[SCREEN_W]
imul ecx,[SCREEN_H]
align 4
BLUR:
inc esi
sar byte [esi],2
loop BLUR
ret
align 4
display_image:
pusha
mov esi,[PIXBUF]
mov edi,[buf2]
mov eax,[SCREEN_W]
imul eax,[SCREEN_H]
add eax,esi
align 4
newp:
movzx edx,byte [esi]
shl edx,4
mov [edi],edx
add edi,3
inc esi
cmp esi,eax
jbe newp
xor edx,edx
mov ecx,[SCREEN_W]
shl ecx,16
add ecx,[SCREEN_H]
mcall SF_PUT_IMAGE,[buf2]
popa
ret
align 4
draw_window:
pusha
mcall SF_REDRAW, SSF_BEGIN_DRAW
mcall SF_STYLE_SETTINGS, SSF_GET_SKIN_HEIGHT
add eax,[SCREEN_H]
lea ecx,[100*65536+4+eax]
mov ebx,[SCREEN_W]
add ebx,(100 shl 16)+9
mcall SF_CREATE_WINDOW,,, 0x73000000,,title
mcall SF_THREAD_INFO,procinfo,-1
mcall SF_STYLE_SETTINGS, SSF_GET_SKIN_HEIGHT
add eax,4
sub eax,[procinfo.box.height]
neg eax
cmp eax,[SCREEN_H]
je .end_h
cmp eax,32 ;min height
jge @f
mov eax,32
@@:
mov [SCREEN_H],eax
xor eax,eax
mov [SCREEN_W],eax
.end_h:
mov eax,[procinfo.box.width]
sub eax,9
cmp eax,[SCREEN_W]
je .resize_end
cmp eax,64 ;min width
jge @f
mov eax,64
@@:
mov [SCREEN_W],eax
call OnResize
.resize_end:
mcall SF_REDRAW, SSF_END_DRAW
popa
ret
align 4
db 41,0,0xC3,0x3C
TEXUV:
rd 1
align 4
init_tube:
mov ecx,256
mov edi,[buf1]
PAL1:
mov edx,3C8h
mov eax,ecx
inc edx
sar al,1
js PAL2
mul al
shr ax,6
PAL2:
mov al,0
jns PAL3
sub al,cl
shr al,1
shr al,1
PAL3:
mov ebx,ecx
mov [ebx+edi],bh
loop PAL1
mov ecx,256
TEX:
mov bx,cx
add ax,cx
rol ax,cl
mov dh,al
sar dh,5
adc dl,dh
adc dl,[ebx+255+edi]
shr dl,1
mov [ebx+edi],dl
not bh
mov [ebx+edi],dl
loop TEX
fninit
fldz
ret
align 4
image_end:
PIXBUF rd 1
buf1 rd 1
buf2 rd 1
procinfo process_information
rb 1024
align 4
stacktop:
memory_end: