3 * Copyright (C) 2007 Tomas 'ZeXx86' Jedrzejek (zexx86@gmail.com)
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 3 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
22 void *memcpy (void *dst_ptr
, const void *src_ptr
, unsigned count
)
24 void *ret_val
= dst_ptr
;
25 const char *src
= (const char *)src_ptr
;
26 char *dst
= (char *)dst_ptr
;
29 for(; count
!= 0; count
--)
36 asm volatile ("movl $4, %%eax;"
38 "int $0x80;" :: "g" (c
));
43 asm volatile ("movl $3, %%eax;"
45 "int $0x80;" :: "g" (s
));
48 void settextcolor (int t
, int f
)
50 asm volatile ("movl $5, %%eax;"
53 "int $0x80;" :: "g" (t
), "g" (f
));
56 void gotoxy (unsigned x
, unsigned y
)
58 asm volatile ("movl $7, %%eax;"
61 "int $0x80;" :: "g" (x
), "g" (y
));
64 unsigned char getkey ()
66 asm volatile ("movl $7, %eax;");
67 asm volatile ("int $0x80;");
69 unsigned short *memptr
= (unsigned short *) 0x9000;
70 unsigned short *where
= memptr
;
75 unsigned char getch ()
77 asm volatile ("movl $2, %eax;");
78 asm volatile ("int $0x80;");
79 //asm volatile ("movl %%edx, %0;" : "=g" (c) :: "%edx");
81 unsigned short *memptr
= (unsigned short *) 0x9000;
82 unsigned short *where
= memptr
;
89 asm volatile ("movl $6, %eax;"
93 void putstr (char *str
)
96 //for (i = 0; i != 4; i++)
103 unsigned key_pressed (int keycode
)
105 int scancode
= getkey ();
107 if (scancode
== keycode
)
110 if (scancode
== keycode
+128)
116 int main () // like main in a normal C program
210 settextcolor (15, 1);
376 settextcolor (10, 0);
378 unsigned char key
= 0;
380 if (key_pressed (ESC
))