Subversion Repositories Kolibri OS

Rev

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

Rev 1814 Rev 1854
-
 
1
#ifndef AUTOBUILD
-
 
2
// autobuild does not create lang.h, but defines LANG_{RUS,ENG} directly
-
 
3
#include "lang.h"
-
 
4
#endif
-
 
5
 
1
#include "system/kolibri.h"
6
#include "system/kolibri.h"
2
#include "system/stdlib.h"
7
#include "system/stdlib.h"
3
#include "system/string.h"
8
#include "system/string.h"
4
#include "z80/z80.h"
9
#include "z80/z80.h"
5
#include "48.h"
10
#include "48.h"
6
 
11
 
7
#include "system/msgbox.c"
12
#include "system/msgbox.c"
8
 
13
 
9
///=============================
14
///=============================
10
 
15
 
11
#define TYPE_NO		0
16
#define TYPE_NO		0
12
#define TYPE_SNA	1
17
#define TYPE_SNA	1
13
#define TYPE_Z80	2
18
#define TYPE_Z80	2
14
 
19
 
15
#define SCREEN_LEN	3*3*256*192*3
20
#define SCREEN_LEN	3*3*256*192*3
16
 
21
 
17
char WND_CAPTION[] = {"e80 v0.5.1"};
22
char WND_CAPTION[] = {"e80 v0.5.1"};
18
 
23
 
19
extern char KOL_PARAM[256];
24
extern char KOL_PARAM[256];
20
extern char KOL_PATH[256];
25
extern char KOL_PATH[256];
21
 
26
 
22
char szBackup[256];
27
char szBackup[256];
23
char szScreen[256];
28
char szScreen[256];
24
 
29
 
25
int fila[5][5];
30
int fila[5][5];
26
int main_tecla, hay_tecla;
31
int main_tecla, hay_tecla;
27
int SSCS = 0;
32
int SSCS = 0;
28
 
33
 
29
int debug=0, scanl=0;
34
int debug=0, scanl=0;
30
int frame_counter;
35
int frame_counter;
31
int target_cycle;
36
int target_cycle;
32
Z80Regs spectrumZ80;
37
Z80Regs spectrumZ80;
33
 
38
 
34
char *screen;
39
char *screen;
35
unsigned screen_w, screen_h;
40
unsigned screen_w, screen_h;
36
#define  screen_a_w   512
41
#define  screen_a_w   512
37
#define  screen_a_h   384
42
#define  screen_a_h   384
38
int flash = 0;
43
int flash = 0;
39
unsigned time = 0;
44
unsigned time = 0;
40
 
45
 
41
///=============================
46
///=============================
42
 
47
 
43
#include "keyboard.c"
48
#include "keyboard.c"
44
 
49
 
45
///=============================
50
///=============================
46
 
51
 
47
int get_ext(char *filename)
52
int get_ext(char *filename)
48
{
53
{
49
 
54
 
50
return TYPE_SNA;
55
return TYPE_SNA;
51
}
56
}
52
 
57
 
53
///=============================
58
///=============================
54
 
59
 
55
void memory_print(Z80Regs *regs, char *filename)
60
void memory_print(Z80Regs *regs, char *filename)
56
{
61
{
57
kol_struct70 file;
62
kol_struct70 file;
58
 
63
 
59
file.p00 = 2;
64
file.p00 = 2;
60
file.p04 = 0;
65
file.p04 = 0;
61
file.p08 = 0;
66
file.p08 = 0;
62
file.p12 = 64*1024;
67
file.p12 = 64*1024;
63
file.p16 = (unsigned)(regs->RAM);
68
file.p16 = (unsigned)(regs->RAM);
64
file.p20 = 0;
69
file.p20 = 0;
65
file.p21 = filename;
70
file.p21 = filename;
66
 
71
 
67
kol_file_70(&file);
72
kol_file_70(&file);
68
}
73
}
69
 
74
 
70
 
75
 
71
///=============================
76
///=============================
72
 
77
 
73
void all_print(Z80Regs *regs, char *filename)
78
void all_print(Z80Regs *regs, char *filename)
74
{
79
{
75
kol_struct70 file;
80
kol_struct70 file;
76
 
81
 
77
file.p00 = 2;
82
file.p00 = 2;
78
file.p04 = 0;
83
file.p04 = 0;
79
file.p08 = 0;
84
file.p08 = 0;
80
file.p12 = sizeof (Z80Regs);
85
file.p12 = sizeof (Z80Regs);
81
file.p16 = (unsigned)regs;
86
file.p16 = (unsigned)regs;
82
file.p20 = 0;
87
file.p20 = 0;
83
file.p21 = filename;
88
file.p21 = filename;
84
 
89
 
85
kol_file_70(&file);
90
kol_file_70(&file);
86
}
91
}
87
 
92
 
88
///=============================
93
///=============================
89
 
94
 
90
void screen_print(Z80Regs *regs)
95
void screen_print(Z80Regs *regs)
91
{
96
{
92
 
97
 
93
kol_struct70 file;
98
kol_struct70 file;
94
 
99
 
95
char palette[]=
100
char palette[]=
96
	{
101
	{
97
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
102
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
98
	0xB0, 0x00, 0x00, 0xB0, 0x00, 0x00, 
103
	0xB0, 0x00, 0x00, 0xB0, 0x00, 0x00, 
99
	0x00, 0x00, 0xB0, 0x00, 0x00, 0xB0, 
104
	0x00, 0x00, 0xB0, 0x00, 0x00, 0xB0, 
100
	0xB0, 0x00, 0xB0, 0xB0, 0x00, 0xB0,
105
	0xB0, 0x00, 0xB0, 0xB0, 0x00, 0xB0,
101
	0x00, 0xB0, 0x00, 0x00, 0xB0, 0x00,
106
	0x00, 0xB0, 0x00, 0x00, 0xB0, 0x00,
102
	0xB0, 0xB0, 0x00, 0xB0, 0xB0, 0x00, 
107
	0xB0, 0xB0, 0x00, 0xB0, 0xB0, 0x00, 
103
	0x00, 0xB0, 0xB0, 0x00, 0xB0, 0xB0,
108
	0x00, 0xB0, 0xB0, 0x00, 0xB0, 0xB0,
104
	0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0,
109
	0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0,
105
 
110
 
106
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
111
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
107
	0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 
112
	0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 
108
	0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 
113
	0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 
109
	0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF,
114
	0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF,
110
	0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00,
115
	0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00,
111
	0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 
116
	0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 
112
	0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF,
117
	0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF,
113
	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
118
	0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
114
	};
119
	};
115
 
120
 
116
char *scr;
121
char *scr;
117
char *atr;
122
char *atr;
118
 
123
 
119
char a, c, s;
124
char a, c, s;
120
int i, j, k, l, m;
125
int i, j, k, l, m;
121
unsigned bri;
126
unsigned bri;
122
char *color;
127
char *color;
123
char *addr;
128
char *addr;
124
int n = 0;
129
int n = 0;
125
int z = 0;
130
int z = 0;
126
int x, y;
131
int x, y;
127
 
132
 
128
scr = malloc(6144);
133
scr = malloc(6144);
129
atr = malloc(768);
134
atr = malloc(768);
130
 
135
 
131
memcpy(scr, regs->RAM + 0x4000 , 6144);
136
memcpy(scr, regs->RAM + 0x4000 , 6144);
132
memcpy(atr, regs->RAM + 0x5800 , 768);
137
memcpy(atr, regs->RAM + 0x5800 , 768);
133
 
138
 
134
for (j = 0; j < 3 ; j++)
139
for (j = 0; j < 3 ; j++)
135
for (i = 0; i < 8; i++)
140
for (i = 0; i < 8; i++)
136
for (k = 0; k < 8; k++)
141
for (k = 0; k < 8; k++)
137
for (l = 0; l < 32; l++)
142
for (l = 0; l < 32; l++)
138
	{
143
	{
139
	c = scr[j*2048 + k*256 + i*32 + l];
144
	c = scr[j*2048 + k*256 + i*32 + l];
140
	for (m = 0; m < 8; m++)
145
	for (m = 0; m < 8; m++)
141
		{
146
		{
142
		s = (c & 128) >> 7;
147
		s = (c & 128) >> 7;
143
		a = atr[j*256 + i*32 + l];
148
		a = atr[j*256 + i*32 + l];
144
 
149
 
145
		if ( (a & 64) == 64 )
150
		if ( (a & 64) == 64 )
146
			bri = 8;
151
			bri = 8;
147
		else 
152
		else 
148
			bri = 0;
153
			bri = 0;
149
 
154
 
150
		if ( 0 == s )
155
		if ( 0 == s )
151
			{
156
			{
152
			if (!(flash && (128 == (a&128))))
157
			if (!(flash && (128 == (a&128))))
153
				color = &palette[6*(bri+((a>>3)&7))];
158
				color = &palette[6*(bri+((a>>3)&7))];
154
			else
159
			else
155
				color = &palette[6*(bri+(a&7))];
160
				color = &palette[6*(bri+(a&7))];
156
 
161
 
157
				addr = screen + 2*screen_a_w*3*z + 2*3*n;
162
				addr = screen + 2*screen_a_w*3*z + 2*3*n;
158
 
163
 
159
				for (y = 0; y < 2; y++)
164
				for (y = 0; y < 2; y++)
160
					memcpy( addr + y*screen_a_w*3, 
165
					memcpy( addr + y*screen_a_w*3, 
161
						color, 6);
166
						color, 6);
162
			}
167
			}
163
		else
168
		else
164
			{
169
			{
165
			if (!(flash && (128 == (a&128))))
170
			if (!(flash && (128 == (a&128))))
166
				color = &palette[6*(bri+(a&7))];
171
				color = &palette[6*(bri+(a&7))];
167
			else
172
			else
168
				color = &palette[6*(bri+((a>>3)&7))];
173
				color = &palette[6*(bri+((a>>3)&7))];
169
				
174
				
170
				addr = screen + 2*screen_a_w*3*z + 2*3*n;
175
				addr = screen + 2*screen_a_w*3*z + 2*3*n;
171
 
176
 
172
				for (y = 0; y < 2; y++)
177
				for (y = 0; y < 2; y++)
173
					memcpy( addr + y*screen_a_w*3, 
178
					memcpy( addr + y*screen_a_w*3, 
174
						color, 6);
179
						color, 6);
175
			}
180
			}
176
 
181
 
177
		n++;
182
		n++;
178
		if (256 == n)
183
		if (256 == n)
179
			{
184
			{
180
			n = 0;
185
			n = 0;
181
			z++;
186
			z++;
182
			}
187
			}
183
 
188
 
184
		c <<= 1;
189
		c <<= 1;
185
		}
190
		}
186
	}
191
	}
187
 
192
 
188
if ( 33 < (kol_time_tick() - time))
193
if ( 33 < (kol_time_tick() - time))
189
{
194
{
190
if (0 == flash)
195
if (0 == flash)
191
	flash = 1;
196
	flash = 1;
192
else 
197
else 
193
	flash = 0;
198
	flash = 0;
194
time = kol_time_tick();
199
time = kol_time_tick();
195
}
200
}
196
 
201
 
197
free(scr);
202
free(scr);
198
free(atr);
203
free(atr);
199
 
204
 
200
}
205
}
201
 
206
 
202
///=============================
207
///=============================
203
 
208
 
204
void memory_load_z80(Z80Regs *regs, char *filename)
209
void memory_load_z80(Z80Regs *regs, char *filename)
205
{
210
{
206
char header[30];
211
char header[30];
207
kol_struct70 file;
212
kol_struct70 file;
208
 
213
 
209
file.p00 = 0;
214
file.p00 = 0;
210
file.p04 = 0;
215
file.p04 = 0;
211
file.p08 = 0;
216
file.p08 = 0;
212
file.p12 = 30;
217
file.p12 = 30;
213
file.p16 = (unsigned) header;
218
file.p16 = (unsigned) header;
214
file.p20 = 0;
219
file.p20 = 0;
215
file.p21 = filename;
220
file.p21 = filename;
216
}
221
}
217
 
222
 
218
///=============================
223
///=============================
219
 
224
 
220
void memory_load_sna(Z80Regs *regs, char *filename)
225
void memory_load_sna(Z80Regs *regs, char *filename)
221
{
226
{
222
char buffer[27];
227
char buffer[27];
223
kol_struct70 file;
228
kol_struct70 file;
224
 
229
 
225
file.p00 = 0;
230
file.p00 = 0;
226
file.p04 = 0;
231
file.p04 = 0;
227
file.p08 = 0;
232
file.p08 = 0;
228
file.p12 = 27;
233
file.p12 = 27;
229
file.p16 = (unsigned) buffer;
234
file.p16 = (unsigned) buffer;
230
file.p20 = 0;
235
file.p20 = 0;
231
file.p21 = filename;
236
file.p21 = filename;
232
 
237
 
233
kol_file_70(&file);
238
kol_file_70(&file);
234
 
239
 
235
regs->I = buffer[ 0];
240
regs->I = buffer[ 0];
236
regs->HLs.B.l = buffer[ 1];
241
regs->HLs.B.l = buffer[ 1];
237
regs->HLs.B.h = buffer[ 2];
242
regs->HLs.B.h = buffer[ 2];
238
regs->DEs.B.l = buffer[ 3];
243
regs->DEs.B.l = buffer[ 3];
239
regs->DEs.B.h = buffer[ 4];
244
regs->DEs.B.h = buffer[ 4];
240
regs->BCs.B.l = buffer[ 5];
245
regs->BCs.B.l = buffer[ 5];
241
regs->BCs.B.h = buffer[ 6];
246
regs->BCs.B.h = buffer[ 6];
242
regs->AFs.B.l = buffer[ 7];
247
regs->AFs.B.l = buffer[ 7];
243
regs->AFs.B.h = buffer[ 8];
248
regs->AFs.B.h = buffer[ 8];
244
regs->HL.B.l  = buffer[ 9];
249
regs->HL.B.l  = buffer[ 9];
245
regs->HL.B.h  = buffer[10];
250
regs->HL.B.h  = buffer[10];
246
regs->DE.B.l  = buffer[11];
251
regs->DE.B.l  = buffer[11];
247
regs->DE.B.h  = buffer[12];
252
regs->DE.B.h  = buffer[12];
248
regs->BC.B.l  = buffer[13];
253
regs->BC.B.l  = buffer[13];
249
regs->BC.B.h  = buffer[14];
254
regs->BC.B.h  = buffer[14];
250
regs->IY.B.l = buffer[15];
255
regs->IY.B.l = buffer[15];
251
regs->IY.B.h = buffer[16];
256
regs->IY.B.h = buffer[16];
252
regs->IX.B.l = buffer[17];
257
regs->IX.B.l = buffer[17];
253
regs->IX.B.h = buffer[18];
258
regs->IX.B.h = buffer[18];
254
regs->IFF1 = regs->IFF2 = (buffer[19]&0x04) >>2;
259
regs->IFF1 = regs->IFF2 = (buffer[19]&0x04) >>2;
255
regs->R.W  = buffer[20];
260
regs->R.W  = buffer[20];
256
regs->AF.B.l = buffer[21];
261
regs->AF.B.l = buffer[21];
257
regs->AF.B.h = buffer[22];
262
regs->AF.B.h = buffer[22];
258
regs->SP.B.l =buffer[23];
263
regs->SP.B.l =buffer[23];
259
regs->SP.B.h =buffer[24];
264
regs->SP.B.h =buffer[24];
260
regs->IM = buffer[25];
265
regs->IM = buffer[25];
261
regs->BorderColor = buffer[26]; 
266
regs->BorderColor = buffer[26]; 
262
 
267
 
263
file.p00 = 0;
268
file.p00 = 0;
264
file.p04 = 27;
269
file.p04 = 27;
265
file.p08 = 0;
270
file.p08 = 0;
266
file.p12 = 0x4000*3;
271
file.p12 = 0x4000*3;
267
file.p16 = (unsigned) regs->RAM+16384;
272
file.p16 = (unsigned) regs->RAM+16384;
268
file.p20 = 0;
273
file.p20 = 0;
269
file.p21 = filename;
274
file.p21 = filename;
270
 
275
 
271
kol_file_70(&file);
276
kol_file_70(&file);
272
 
277
 
273
regs->PC.B.l = Z80MemRead(regs->SP.W, regs);
278
regs->PC.B.l = Z80MemRead(regs->SP.W, regs);
274
regs->SP.W++;
279
regs->SP.W++;
275
regs->PC.B.h = Z80MemRead(regs->SP.W, regs);
280
regs->PC.B.h = Z80MemRead(regs->SP.W, regs);
276
regs->SP.W++; 
281
regs->SP.W++; 
277
 
282
 
278
}
283
}
279
 
284
 
280
 
285
 
281
///=============================
286
///=============================
282
 
287
 
283
void memory_save_sna(Z80Regs *regs, char *filename)
288
void memory_save_sna(Z80Regs *regs, char *filename)
284
{
289
{
285
char buffer[27];
290
char buffer[27];
286
unsigned char sptmpl, sptmph;
291
unsigned char sptmpl, sptmph;
287
kol_struct70 file;
292
kol_struct70 file;
288
 
293
 
289
buffer[ 0] = regs->I;
294
buffer[ 0] = regs->I;
290
buffer[ 1] = regs->HLs.B.l;
295
buffer[ 1] = regs->HLs.B.l;
291
buffer[ 2] = regs->HLs.B.h;
296
buffer[ 2] = regs->HLs.B.h;
292
buffer[ 3] = regs->DEs.B.l;
297
buffer[ 3] = regs->DEs.B.l;
293
buffer[ 4] = regs->DEs.B.h;
298
buffer[ 4] = regs->DEs.B.h;
294
buffer[ 5] = regs->BCs.B.l;
299
buffer[ 5] = regs->BCs.B.l;
295
buffer[ 6] = regs->BCs.B.h;
300
buffer[ 6] = regs->BCs.B.h;
296
buffer[ 7] = regs->AFs.B.l;
301
buffer[ 7] = regs->AFs.B.l;
297
buffer[ 8] = regs->AFs.B.h;
302
buffer[ 8] = regs->AFs.B.h;
298
buffer[ 9] = regs->HL.B.l;
303
buffer[ 9] = regs->HL.B.l;
299
buffer[10] = regs->HL.B.h;
304
buffer[10] = regs->HL.B.h;
300
buffer[11] = regs->DE.B.l;
305
buffer[11] = regs->DE.B.l;
301
buffer[12] = regs->DE.B.h;
306
buffer[12] = regs->DE.B.h;
302
buffer[13] = regs->BC.B.l;
307
buffer[13] = regs->BC.B.l;
303
buffer[14] = regs->BC.B.h;
308
buffer[14] = regs->BC.B.h;
304
buffer[15] = regs->IY.B.l;
309
buffer[15] = regs->IY.B.l;
305
buffer[16] = regs->IY.B.h;
310
buffer[16] = regs->IY.B.h;
306
buffer[17] = regs->IX.B.l;
311
buffer[17] = regs->IX.B.l;
307
buffer[18] = regs->IX.B.h;
312
buffer[18] = regs->IX.B.h;
308
buffer[19] = regs->IFF1 << 2;
313
buffer[19] = regs->IFF1 << 2;
309
buffer[20] = regs->R.W & 0xFF;
314
buffer[20] = regs->R.W & 0xFF;
310
buffer[21] = regs->AF.B.l;
315
buffer[21] = regs->AF.B.l;
311
buffer[22] = regs->AF.B.h;
316
buffer[22] = regs->AF.B.h;
312
 
317
 
313
sptmpl = Z80MemRead( regs->SP.W-1, regs );
318
sptmpl = Z80MemRead( regs->SP.W-1, regs );
314
sptmph = Z80MemRead( regs->SP.W-2, regs );
319
sptmph = Z80MemRead( regs->SP.W-2, regs );
315
 
320
 
316
Z80MemWrite( --(regs->SP.W), regs->PC.B.h, regs);
321
Z80MemWrite( --(regs->SP.W), regs->PC.B.h, regs);
317
Z80MemWrite( --(regs->SP.W), regs->PC.B.l, regs);
322
Z80MemWrite( --(regs->SP.W), regs->PC.B.l, regs);
318
 
323
 
319
buffer[23] = regs->SP.B.l;
324
buffer[23] = regs->SP.B.l;
320
buffer[24] = regs->SP.B.h;
325
buffer[24] = regs->SP.B.h;
321
buffer[25] = regs->IM;
326
buffer[25] = regs->IM;
322
buffer[26] = regs->BorderColor; 
327
buffer[26] = regs->BorderColor; 
323
 
328
 
324
file.p00 = 2;
329
file.p00 = 2;
325
file.p04 = 0;
330
file.p04 = 0;
326
file.p08 = 0;
331
file.p08 = 0;
327
file.p12 = 27;
332
file.p12 = 27;
328
file.p16 = (unsigned) buffer;
333
file.p16 = (unsigned) buffer;
329
file.p20 = 0;
334
file.p20 = 0;
330
file.p21 = filename;
335
file.p21 = filename;
331
 
336
 
332
kol_file_70(&file);
337
kol_file_70(&file);
333
 
338
 
334
file.p00 = 3;
339
file.p00 = 3;
335
file.p04 = 27;
340
file.p04 = 27;
336
file.p08 = 0;
341
file.p08 = 0;
337
file.p12 = 0x4000*3;
342
file.p12 = 0x4000*3;
338
file.p16 = (unsigned) regs->RAM+16384;
343
file.p16 = (unsigned) regs->RAM+16384;
339
file.p20 = 0;
344
file.p20 = 0;
340
file.p21 = filename;
345
file.p21 = filename;
341
 
346
 
342
kol_file_70(&file);
347
kol_file_70(&file);
343
 
348
 
344
regs->SP.W += 2;
349
regs->SP.W += 2;
345
Z80MemWrite( regs->SP.W-1, sptmpl, regs );
350
Z80MemWrite( regs->SP.W-1, sptmpl, regs );
346
Z80MemWrite( regs->SP.W-2, sptmph, regs );
351
Z80MemWrite( regs->SP.W-2, sptmph, regs );
347
 
352
 
348
}
353
}
349
 
354
 
350
 
355
 
351
///=============================
356
///=============================
352
 
357
 
353
void memory_save_scr(Z80Regs *regs, char *filename)
358
void memory_save_scr(Z80Regs *regs, char *filename)
354
{
359
{
355
kol_struct70 file;
360
kol_struct70 file;
356
 
361
 
357
 
362
 
358
file.p00 = 2;
363
file.p00 = 2;
359
file.p04 = 0x4000;
364
file.p04 = 0x4000;
360
file.p08 = 0;
365
file.p08 = 0;
361
file.p12 = 6912;
366
file.p12 = 6912;
362
file.p16 = (unsigned) regs->RAM+16384;
367
file.p16 = (unsigned) regs->RAM+16384;
363
file.p20 = 0;
368
file.p20 = 0;
364
file.p21 = filename;
369
file.p21 = filename;
365
 
370
 
366
kol_file_70(&file);
371
kol_file_70(&file);
367
 
372
 
368
}
373
}
369
 
374
 
370
 
375
 
371
///=============================
376
///=============================
372
 
377
 
373
void wnd_draw()
378
void wnd_draw()
374
{
379
{
375
kol_paint_start();
380
kol_paint_start();
376
kol_wnd_define( (screen_w-540)/2, (screen_h-440)/2, 540, 440, 0x34b0b0b0);
381
kol_wnd_define( (screen_w-540)/2, (screen_h-440)/2, 540, 440, 0x34b0b0b0);
377
kol_wnd_caption(WND_CAPTION);
382
kol_wnd_caption(WND_CAPTION);
378
screen_print(&spectrumZ80);
383
screen_print(&spectrumZ80);
379
kol_paint_image((540 - screen_a_w)/2-5, 
384
kol_paint_image((540 - screen_a_w)/2-5, 
380
		(440 - screen_a_h-kol_skin_height())/2, 
385
		(440 - screen_a_h-kol_skin_height())/2, 
381
		screen_a_w, screen_a_h, screen);
386
		screen_a_w, screen_a_h, screen);
382
kol_paint_end();
387
kol_paint_end();
383
}
388
}
384
 
389
 
385
///=============================
390
///=============================
386
 
391
 
387
void kol_main()
392
void kol_main()
388
{
393
{
389
 
394
 
390
unsigned event;
395
unsigned event;
391
unsigned key;
396
unsigned key;
392
 
397
 
393
for (event = strlen(KOL_PATH); event > 0; --event)
398
for (event = strlen(KOL_PATH); event > 0; --event)
394
	if ( '/' == KOL_PATH[event] )
399
	if ( '/' == KOL_PATH[event] )
395
		{
400
		{
396
		KOL_PATH[event+1]=0;
401
		KOL_PATH[event+1]=0;
397
		break;
402
		break;
398
		}
403
		}
399
 
404
 
400
strcpy(szBackup, KOL_PATH);
405
strcpy(szBackup, KOL_PATH);
401
strcpy(szScreen, KOL_PATH);
406
strcpy(szScreen, KOL_PATH);
402
strcat(szBackup, "backup.sna");
407
strcat(szBackup, "backup.sna");
403
strcat(szScreen, "screen.scr");
408
strcat(szScreen, "screen.scr");
404
 
409
 
405
kol_screen_get_size(&screen_w, &screen_h);
410
kol_screen_get_size(&screen_w, &screen_h);
406
 
411
 
407
screen = malloc(SCREEN_LEN);
412
screen = malloc(SCREEN_LEN);
408
spectrumZ80.RAM = (char*) malloc(64*1024);
413
spectrumZ80.RAM = (char*) malloc(64*1024);
409
memcpy(spectrumZ80.RAM, BIOS48, 16*1024);
414
memcpy(spectrumZ80.RAM, BIOS48, 16*1024);
410
 
415
 
411
Z80Reset( &spectrumZ80, 69888 );
416
Z80Reset( &spectrumZ80, 69888 );
412
Z80FlagTables();
417
Z80FlagTables();
413
 
418
 
414
fila[1][1] = fila[1][2] = fila[2][2] = fila[3][2] = fila[4][2] =
419
fila[1][1] = fila[1][2] = fila[2][2] = fila[3][2] = fila[4][2] =
415
 fila[4][1] = fila[3][1] = fila[2][1] = 0xFF;
420
 fila[4][1] = fila[3][1] = fila[2][1] = 0xFF;
416
 
421
 
417
debug = 0;
422
debug = 0;
418
 
423
 
419
if (KOL_PARAM != NULL)
424
if (KOL_PARAM != NULL)
420
	{
425
	{
421
	int type = get_ext(KOL_PARAM);
426
	int type = get_ext(KOL_PARAM);
422
	
427
	
423
	if (TYPE_SNA == type)
428
	if (TYPE_SNA == type)
424
		memory_load_sna(&spectrumZ80, KOL_PARAM);
429
		memory_load_sna(&spectrumZ80, KOL_PARAM);
425
	}
430
	}
426
 
431
 
427
hay_tecla = main_tecla = 0;
432
hay_tecla = main_tecla = 0;
428
//keyboard_process(0);
433
//keyboard_process(0);
429
 
434
 
430
kol_key_mode_set(1);
435
kol_key_mode_set(1);
431
 
436
 
432
for (;;)
437
for (;;)
433
	{
438
	{
434
 
439
 
435
//	event = kol_event_check();
440
//	event = kol_event_check();
436
	event = kol_event_wait_time(1);
441
	event = kol_event_wait_time(1);
437
 
442
 
438
	switch (event)
443
	switch (event)
439
		{
444
		{
440
 
445
 
441
		case 1:
446
		case 1:
442
			wnd_draw();
447
			wnd_draw();
443
			break;
448
			break;
444
 
449
 
445
		case 2:
450
		case 2:
446
			key = (kol_key_get()>>8)&0xff;
451
			key = (kol_key_get()>>8)&0xff;
447
			
452
			
448
			switch (key)
453
			switch (key)
449
				{
454
				{
450
				case 60: // F2
455
				case 60: // F2
451
					if ( IDOK == MessageBox("Save snapshot?", 
456
					if ( IDOK == MessageBox("Save snapshot?", 
452
									WND_CAPTION, MB_OKCANCEL) )
457
									WND_CAPTION, MB_OKCANCEL) )
453
						memory_save_sna(&spectrumZ80, 
458
						memory_save_sna(&spectrumZ80, 
454
									szBackup);
459
									szBackup);
455
					break;
460
					break;
456
 
461
 
457
				case 61: // F3
462
				case 61: // F3
458
					if ( IDOK == MessageBox("Load snapshot?", 
463
					if ( IDOK == MessageBox("Load snapshot?", 
459
									WND_CAPTION, MB_OKCANCEL) )
464
									WND_CAPTION, MB_OKCANCEL) )
460
						memory_load_sna(&spectrumZ80, 
465
						memory_load_sna(&spectrumZ80, 
461
									szBackup);
466
									szBackup);
462
					break;
467
					break;
463
 
468
 
464
				case 62: // F4
469
				case 62: // F4
465
					if ( IDOK == MessageBox("Save screenshot?", 
470
					if ( IDOK == MessageBox("Save screenshot?", 
466
									WND_CAPTION, MB_OKCANCEL) )
471
									WND_CAPTION, MB_OKCANCEL) )
467
						memory_save_scr(&spectrumZ80, 
472
						memory_save_scr(&spectrumZ80, 
468
									szScreen);
473
									szScreen);
469
					break;
474
					break;
470
 
475
 
471
				case 88: // F12 Reset
476
				case 88: // F12 Reset
472
					if ( IDOK == MessageBox("Reset?", 
477
					if ( IDOK == MessageBox("Reset?", 
473
									WND_CAPTION, MB_OKCANCEL) )
478
									WND_CAPTION, MB_OKCANCEL) )
474
						{
479
						{
475
						Z80Reset( &spectrumZ80, 69888 );
480
						Z80Reset( &spectrumZ80, 69888 );
476
						Z80FlagTables();
481
						Z80FlagTables();
477
						fila[1][1] = fila[1][2] = 
482
						fila[1][1] = fila[1][2] = 
478
						fila[2][2] = fila[3][2] = 
483
						fila[2][2] = fila[3][2] = 
479
						fila[4][2] = fila[4][1] = 
484
						fila[4][2] = fila[4][1] = 
480
						fila[3][1] = fila[2][1] = 0xFF;
485
						fila[3][1] = fila[2][1] = 0xFF;
481
						}
486
						}
482
					break;
487
					break;
483
 
488
 
484
				default:
489
				default:
485
					keyboard_process(key);
490
					keyboard_process(key);
486
				};
491
				};
487
 
492
 
488
			break;
493
			break;
489
 
494
 
490
		case 3:
495
		case 3:
491
			if ( 1 == (kol_btn_get() & 0xff00)>>8 )
496
			if ( 1 == (kol_btn_get() & 0xff00)>>8 )
492
				{
497
				{
493
				free(screen);
498
				free(screen);
494
				free(spectrumZ80.RAM);
499
				free(spectrumZ80.RAM);
495
				kol_exit();
500
				kol_exit();
496
				}
501
				}
497
			break;
502
			break;
498
 
503
 
499
		default:
504
		default:
500
			if (0 == debug)
505
			if (0 == debug)
501
				{
506
				{
502
 
507
 
503
				Z80Run( &spectrumZ80, 224*64 ); 
508
				Z80Run( &spectrumZ80, 224*64 ); 
504
				for( scanl=0; scanl<192; scanl++ )
509
				for( scanl=0; scanl<192; scanl++ )
505
					Z80Run( &spectrumZ80, 224 ); 
510
					Z80Run( &spectrumZ80, 224 ); 
506
 
511
 
507
				Z80Run( &spectrumZ80, 224*56 ); 
512
				Z80Run( &spectrumZ80, 224*56 ); 
508
 
513
 
509
				if( target_cycle < 2 || frame_counter == 0 )
514
				if( target_cycle < 2 || frame_counter == 0 )
510
					{
515
					{
511
					screen_print(&spectrumZ80);
516
					screen_print(&spectrumZ80);
512
					kol_screen_wait_rr();
517
					kol_screen_wait_rr();
513
					kol_paint_image((540 - screen_a_w)/2-5, 
518
					kol_paint_image((540 - screen_a_w)/2-5, 
514
							(440 - screen_a_h-kol_skin_height())/2, 
519
							(440 - screen_a_h-kol_skin_height())/2, 
515
							screen_a_w, screen_a_h, screen);
520
							screen_a_w, screen_a_h, screen);
516
					}
521
					}
517
 
522
 
518
				while( target_cycle == 0 ) 
523
				while( target_cycle == 0 ) 
519
					{
524
					{
520
					target_cycle--;
525
					target_cycle--;
521
					frame_counter++;
526
					frame_counter++;
522
					}
527
					}
523
				}
528
				}
524
			break;
529
			break;
525
 
530
 
526
		};
531
		};
527
 
532
 
528
	}
533
	}
529
 
534
 
530
}
535
}
531
 
536
 
532
///=============================
537
///=============================