Subversion Repositories Kolibri OS

Rev

Rev 109 | Rev 485 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
31 halyavin 1
include "lang.inc"
2
include "macros.inc"
3
 
4
WND_SIZE_X		= 320
5
WND_SIZE_Y		= 200
6
 
7
VC_DELTA = 1
8
HC_DELTA = 2
9
 
10
MEOS_APP_START
11
CODE
12
    fninit
13
    call init_sinus_table
14
    call init_background
15
    call init_palette
16
    mov eax,40
17
    mov ebx,101b
18
    int 0x40
19
    jmp .paint_window
20
 
21
.event_loop:
22
    mov eax,23
23
    mov ebx,1
24
    int 0x40
25
 
26
    test eax,eax
27
    je .draw_screen
28
    dec eax
29
    je .paint_window
30
 
31
    or  eax,-1
32
    int 0x40
33
 
34
.draw_screen:
35
    add word [ver_counter],VC_DELTA
36
    add word [hor_counter],HC_DELTA
37
    call handle_animation
38
    mov eax,7
39
    mov ebx,virtual_screen_32
40
    mov ecx,(WND_SIZE_X shl 16)+WND_SIZE_Y
316 heavyiron 41
    xor edx,edx
31 halyavin 42
    int 0x40
43
    jmp .event_loop
44
 
45
.paint_window:
46
    mov eax,12
47
    mov ebx,1
48
    int 0x40
49
 
50
    xor eax,eax
51
    mov ebx,(100 shl 16)+(WND_SIZE_X+9)
52
    mov ecx,(100 shl 16)+(WND_SIZE_Y+28)
316 heavyiron 53
    mov edx,0x33000000
54
    mov edi,header
31 halyavin 55
    int 0x40
56
 
57
    mov eax,7
58
    mov ebx,virtual_screen_32
59
    mov ecx,(WND_SIZE_X shl 16)+WND_SIZE_Y
316 heavyiron 60
    xor edx,edx
31 halyavin 61
    int 0x40
62
 
63
    mov eax,12
64
    mov ebx,2
65
    int 0x40
66
 
67
    jmp .event_loop
68
 
69
init_palette:
70
    mov ecx,256
71
    mov edi,_palette
72
    xor eax,eax
73
.next_pal:
74
    mov al,ah
75
    shr al,2
76
    stosb
77
    stosb
78
    stosb
79
    inc edi
80
    inc ah
81
    loop .next_pal
82
    ret
83
 
84
init_sinus_table:
85
    sub esp,4
86
    mov ecx,256
87
    mov edi,sinetable
88
.sin_loop:
89
    fld dword [esp]
90
    fld st0
91
    fsin
92
    fmul [scale_sin]
93
    fistp word [edi]
94
    fadd [delta_angle]
95
    fstp dword [esp]
96
    add edi,2
97
    loop .sin_loop
98
    add esp,4
99
    ret
100
 
101
init_background:
102
    mov edi,background
103
    xor edx,edx
104
.ib_vertical:
105
    xor ecx,ecx
106
.ib_horizontal:
107
    mov eax,ecx
108
    xor eax,edx
109
    stosb
110
    inc ecx
111
    cmp ecx,256
112
    jne .ib_horizontal
113
    inc edx
114
    cmp edx,256
115
    jne .ib_vertical
116
    ret
117
 
118
s_OFFX		= 0
119
s_OFFY		= 2
120
 
121
handle_animation:
122
    sub esp,4
123
    mov ebx,[ver_counter]
124
    and ebx,255
125
    add ebx,ebx
126
    mov ax,[sinetable+ebx]
127
    mov [esp+s_OFFY],ax
128
    mov ebx,[hor_counter]
129
    and ebx,255
130
    add ebx,ebx
131
    mov ax,[sinetable+ebx]
132
    mov [esp+s_OFFX],ax
133
    mov edi,virtual_screen_32
134
    mov edx,WND_SIZE_Y-1
135
.a_ver:
136
    mov ecx,WND_SIZE_X-1
137
    mov bx,[esp+s_OFFY]
138
    add bx,dx
139
    and ebx,255
140
    shl ebx,8
141
.a_hor:
142
    mov ax,[esp+s_OFFX]
143
    add ax,cx
144
    and eax,255
145
    lea esi,[background+ebx+eax]
146
    mov al,[esi]
147
    and eax,0xff
148
    mov eax,[_palette+eax*4]
149
    stosw
150
    shr eax,16
151
    stosb
152
    dec ecx
153
    jge .a_hor
154
    dec edx
155
    jge .a_ver
156
    add esp,4
157
    ret
158
 
159
DATA
160
  delta_angle dd 0.0245436926066		; pi/128
161
  scale_sin dd 128.0
162
 
316 heavyiron 163
  header      db 'MoveBack',0
31 halyavin 164
 
165
UDATA
166
  ver_counter dd ?
167
  hor_counter dd ?
168
 
169
  _palette:	rd 256
170
 
171
  virtual_screen_32:
172
  	rb WND_SIZE_X*WND_SIZE_Y*3
173
 
174
  background:
175
  	rb 256*256
176
 
177
  sinetable:
178
  	rw 256
179
 
180
MEOS_APP_END