Subversion Repositories Kolibri OS

Rev

Rev 316 | Rev 2029 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

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