Subversion Repositories NedoOS

Rev

Details | Last modification | View Log

Rev Author Line No. Line
835 alone 1
#include <evo.h>
2
#include "startup.h"    //этот файл генерируется автоматически при компиляции startup.asm
3
 
4
 
5
 
6
void memset(void* m,u8 b,u16 len) __naked
7
{
8
__asm
9
        ld hl,#2
10
        add hl,sp
11
        ld e,(hl)
12
        inc hl
13
        ld d,(hl)
14
        inc hl
15
        ld a,(hl)
16
        inc hl
17
        ld c,(hl)
18
        inc hl
19
        ld b,(hl)
20
 
21
        ex de,hl
22
        ld d,h
23
        ld e,l
24
        inc de
25
        dec bc
26
        ld (hl),a
27
        jp _FAST_LDIR
28
__endasm;
29
}
30
 
31
 
32
 
33
void memcpy(void* d,void* s,u16 len) __naked
34
{
35
__asm
36
        ld hl,#2
37
        add hl,sp
38
        ld e,(hl)
39
        inc hl
40
        ld d,(hl)
41
        push de
42
        inc hl
43
        ld e,(hl)
44
        inc hl
45
        ld d,(hl)
46
        inc hl
47
        ld c,(hl)
48
        inc hl
49
        ld b,(hl)
50
        ex de,hl
51
        pop de
52
        jp _FAST_LDIR
53
__endasm;
54
}
55
 
56
 
57
 
58
void border(u8 n) __naked
59
{
60
__asm
61
        ld hl,#2
62
        add hl,sp
63
        ld a,(hl)
64
        ld (_BORDERCOL),a
65
        ld c,a
66
        and #7
67
        bit 3,c
68
        jr nz,1$
69
        out (0xfe),a
70
        ret
71
1$:
72
        out (0xf6),a
73
        ret
74
__endasm;
75
}
76
 
77
 
78
 
79
void vsync(void) __naked
80
{
81
__asm
82
        halt
83
        ret
84
__endasm;
85
}
86
 
87
 
88
 
89
u8 joystick(void) __naked
90
{
91
__asm
92
        jp _JOYSTICK
93
__endasm;
94
}
95
 
96
 
97
 
98
void keyboard(u8* keys) __naked
99
{
100
__asm
101
        ld hl,#2
102
        add hl,sp
103
        ld e,(hl)
104
        inc hl
105
        ld d,(hl)
106
        jp _KEYBOARD
107
__endasm;
108
}
109
 
110
 
111
 
112
u8 mouse_pos(u8* x,u8* y) __naked
113
{
114
__asm
115
        ld hl,#2
116
        add hl,sp
117
        ld c,(hl)
118
        inc hl
119
        ld b,(hl)
120
        inc hl
121
        ld e,(hl)
122
        inc hl
123
        ld d,(hl)
124
        ld a,(_MOUSE_X)
125
        ld (bc),a
126
        ld a,(_MOUSE_Y)
127
        ld (de),a
128
        ld a,(_MOUSE_BTN)
129
        ld l,a
130
        ret
131
__endasm;
132
}
133
 
134
 
135
 
136
void mouse_set(u8 x,u8 y) __naked
137
{
138
__asm
139
        ld hl,#2
140
        add hl,sp
141
        ld a,(hl)
142
        ld (_MOUSE_X),a
143
        inc hl
144
        ld a,(hl)
145
        ld (_MOUSE_Y),a
146
        jp _MOUSE_APPLY_CLIP
147
__endasm;
148
}
149
 
150
 
151
 
152
void mouse_clip(u8 xmin,u8 ymin,u8 xmax,u8 ymax) __naked
153
{
154
__asm
155
        ld hl,#2
156
        add hl,sp
157
        ld a,(hl)
158
        ld (_MOUSE_CX1),a
159
        inc hl
160
        ld a,(hl)
161
        ld (_MOUSE_CY1),a
162
        inc hl
163
        ld a,(hl)
164
        ld (_MOUSE_CX2),a
165
        inc hl
166
        ld a,(hl)
167
        ld (_MOUSE_CY2),a
168
        jp _MOUSE_APPLY_CLIP
169
__endasm;
170
}
171
 
172
 
173
 
174
u8 mouse_delta(i8* x,i8* y) __naked
175
{
176
__asm
177
        ld hl,#2
178
        add hl,sp
179
        ld c,(hl)
180
        inc hl
181
        ld b,(hl)
182
        inc hl
183
        ld e,(hl)
184
        inc hl
185
        ld d,(hl)
186
        ld a,(_MOUSE_DX)
187
        ld (bc),a
188
        ld a,(_MOUSE_DY)
189
        ld (bc),a
190
        ld a,(_MOUSE_BTN)
191
        ld l,a
192
        ret
193
__endasm;
194
}
195
 
196
 
197
 
198
void sfx_play(u8 sfx,i8 vol) __naked
199
{
200
__asm
201
        ld hl,#2
202
        add hl,sp
203
        ld b,(hl)
204
        inc hl
205
        ld c,(hl)
206
        jp _SFX_PLAY
207
__endasm;
208
}
209
 
210
 
211
 
212
void sfx_stop(void) __naked
213
{
214
__asm
215
        jp _SFX_STOP
216
__endasm;
217
}
218
 
219
 
220
 
221
void music_play(u8 mus) __naked
222
{
223
__asm
224
        ld hl,#2
225
        add hl,sp
226
        ld a,(hl)
227
        jp _MUSIC_PLAY
228
__endasm;
229
}
230
 
231
 
232
 
233
void music_stop(void) __naked
234
{
235
__asm
236
        jp _MUSIC_STOP
237
__endasm;
238
}
239
 
240
 
241
 
242
void sample_play(u8 sample) __naked
243
{
244
__asm
245
        ld hl,#2
246
        add hl,sp
247
        ld l,(hl)
248
        jp _SAMPLE_PLAY
249
__endasm;
250
}
251
 
252
 
253
 
254
u16 rand16(void) __naked
255
{
256
__asm
257
        ld hl,(1$)
258
        push hl
259
        srl h
260
        rr l
261
        ex de,hl
262
        ld hl,(2$)
263
        add hl,de
264
        ld (2$),hl
265
        ld a,l
266
        xor #15
267
        ld l,a
268
        ex de,hl
269
        pop hl
270
        sbc hl,de
271
        ld (1$),hl
272
        ret
273
 
274
1$:     .dw 1
275
2$:     .dw 5
276
 
277
__endasm;
278
}
279
 
280
 
281
 
282
void pal_clear(void) __naked
283
{
284
__asm
285
        ld hl,#_PALETTE
286
        ld bc,#0x1000
287
1$:
288
        ld (hl),c
289
        inc l
290
        djnz 1$
291
        ld a,h
292
        ld (_PALCHANGE),a
293
        ret
294
__endasm;
295
}
296
 
297
 
298
 
299
void pal_select(u8 id) __naked
300
{
301
__asm
302
        ld hl,#2
303
        add hl,sp
304
        ld a,(hl)
305
        jp _PAL_SELECT
306
__endasm;
307
}
308
 
309
 
310
 
311
void pal_bright(u8 bright) __naked
312
{
313
__asm
314
        ld hl,#2
315
        add hl,sp
316
        ld a,(hl)
317
        jp _PAL_BRIGHT
318
__endasm;
319
}
320
 
321
 
322
 
323
void pal_col(u8 id,u8 col) __naked
324
{
325
__asm
326
        ld hl,#2
327
        add hl,sp
328
        ld a,(hl)
329
        inc hl
330
        ld c,(hl)
331
        ld hl,#_PALETTE
332
        add a,l
333
        ld l,a
334
        ld a,c
335
        and #63
336
        ld (hl),a
337
        ld a,h
338
        ld (_PALCHANGE),a
339
        ret
340
__endasm;
341
}
342
 
343
 
344
 
345
void pal_copy(u8 id,u8* pal) __naked
346
{
347
__asm
348
        ld hl,#2
349
        add hl,sp
350
        ld a,(hl)
351
        inc hl
352
        ld e,(hl)
353
        inc hl
354
        ld d,(hl)
355
        jp _PAL_COPY
356
__endasm;
357
}
358
 
359
 
360
 
361
void pal_custom(u8* pal) __naked
362
{
363
__asm
364
        ld hl,#2
365
        add hl,sp
366
        ld a,(hl)
367
        inc hl
368
        ld h,(hl)
369
        ld l,a
370
        ld de,#_PALETTE
371
        ld b,#16
372
1$:
373
        ld a,(hl)
374
        and #63
375
        ld (de),a
376
        inc hl
377
        inc e
378
        djnz 1$
379
        ld a,d
380
        ld (_PALCHANGE),a
381
        ret
382
__endasm;
383
}
384
 
385
 
386
 
387
void draw_tile(u8 x,u8 y,u16 tile) __naked
388
{
389
__asm
390
        ld hl,#2
391
        add hl,sp
392
        ld c,(hl)
393
        inc hl
394
        ld b,(hl)
395
        inc hl
396
        ld e,(hl)
397
        inc hl
398
        ld d,(hl)
399
        jp _DRAW_TILE
400
__endasm;
401
}
402
 
403
 
404
 
405
void draw_tile_key(u8 x,u8 y,u16 tile) __naked
406
{
407
__asm
408
        ld hl,#2
409
        add hl,sp
410
        ld c,(hl)
411
        inc hl
412
        ld b,(hl)
413
        inc hl
414
        ld e,(hl)
415
        inc hl
416
        ld d,(hl)
417
        jp _DRAW_TILE_KEY
418
__endasm;
419
}
420
 
421
 
422
 
423
void draw_image(u8 x,u8 y,u8 id) __naked
424
{
425
__asm
426
 
427
        ld hl,#2
428
        add hl,sp
429
 
430
 
431
        push    ix
432
        ld      ix,#0
433
        add     ix,sp
434
 
435
        ld a,(_MEMSLOT2)
436
        push af
437
 
438
 
439
 
440
        ld c,(hl)
441
        inc hl
442
        ld b,(hl)
443
        inc hl
444
        ld a,(hl)
445
 
446
 
447
        call _DRAW_IMAGE
448
 
449
 
450
        pop af
451
        LD      BC, #0xbff7
452
    ld (_MEMSLOT2),a
453
    out (c),a
454
 
455
        pop ix
456
 
457
        ret
458
__endasm;
459
}
460
 
461
void draw_image_extra(u8 x,u8 y,u8 id,u8 width,u8 begx) __naked
462
{
463
__asm
464
        ld hl,#2
465
        add hl,sp ;cy=0
466
 
467
        push    ix
468
        ld      ix,#0
469
        add     ix,sp
470
 
471
        ld a,(_MEMSLOT2)
472
        push af
473
 
474
        ld c,(hl)
475
        inc hl
476
        ld b,(hl)
477
        inc hl
478
        ld a,(hl)
479
        inc hl
480
        ld e,(hl)
481
        inc hl
482
        ld d,(hl)
483
        scf
484
        call _DRAW_IMAGE
485
 
486
        pop af
487
        LD      BC, #0xbff7
488
    ld (_MEMSLOT2),a
489
    out (c),a
490
 
491
        pop ix
492
 
493
 
494
        ret
495
__endasm;
496
}
497
 
498
 
499
void clear_screen(u8 color) __naked
500
{
501
__asm
502
        ld hl,#2
503
        add hl,sp
504
        ld a,(hl)
505
        jp _CLEAR_SCREEN
506
__endasm;
507
}
508
 
509
 
510
 
511
void swap_screen(void) __naked
512
{
513
__asm
514
 
515
 
516
        jp _SWAP_SCREEN
517
 
518
__endasm;
519
}
520
 
521
 
522
 
523
void select_image(u8 id) __naked
524
{
525
__asm
526
        ld hl,#2
527
        add hl,sp
528
        ld l,(hl)
529
        jp _SELECT_IMAGE
530
__endasm;
531
}
532
 
533
 
534
 
535
void color_key(u8 col) __naked
536
{
537
__asm
538
        ld hl,#2
539
        add hl,sp
540
        ld c,(hl)
541
        jp _COLOR_KEY
542
__endasm;
543
}
544
 
545
 
546
 
547
void set_sprite(u8 id,u8 x,u8 y,u16 spr) __naked
548
{
549
__asm
550
        ld hl,#2
551
        add hl,sp
552
        ld a,(hl)       ;id
553
        inc hl
554
        ld c,(hl)       ;x
555
        inc hl
556
        ld b,(hl)       ;y
557
        inc hl
558
        ld e,(hl)       ;sprl
559
        inc hl
560
        ld d,(hl)       ;sprh
561
 
562
        add a,a
563
        add a,a
564
        ld l,a
565
        ld h,#_SPRQUEUE/256
566
 
567
        ld a,d          ;пересчёт номера спрайта
568
        cp #255
569
        jr z,1$
570
        add a,a
571
        add a,d
572
        ld d,a
573
1$:
574
        ld a,(_SCREENACTIVE)
575
        and #2
576
        jr nz,2$
577
        inc h
578
2$:
579
        ld (hl),d
580
        inc l
581
        ld (hl),e
582
        inc l
583
        ld (hl),b
584
        inc l
585
        ld (hl),c
586
        ret
587
__endasm;
588
}
589
 
590
 
591
 
592
void sprites_start(void) __naked
593
{
594
__asm
595
        jp _SPRITES_START
596
__endasm;
597
}
598
 
599
 
600
 
601
void sprites_stop(void) __naked
602
{
603
__asm
604
        jp _SPRITES_STOP
605
__endasm;
606
}
607
 
608
 
609
 
610
u32 time(void) __naked
611
{
612
__asm
613
        ld hl,#_TIME+3
614
        ld d,(hl)
615
        dec hl
616
        ld e,(hl)
617
        dec hl
618
        ld a,(hl)
619
        dec hl
620
        ld l,(hl)
621
        ld h,a
622
        ret
623
__endasm;
624
}
625
 
626
 
627
 
628
void delay(u16 time) __naked
629
{
630
__asm
631
 
632
 
633
        ld hl,#2
634
        add hl,sp
635
        ld c,(hl)
636
        inc hl
637
        ld b,(hl)
638
        ld a,b
639
        or c
640
        ret z
641
1$:
642
        halt
643
        dec bc
644
        ld a,b
645
        or c
646
        jr nz,1$
647
 
648
        ret
649
__endasm;
650
}