3 * Copyright (C) 2008 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/>.
26 #define SWMEM_PAGE 0x2000
28 #define SWMEM_LOW 0x500000
29 #define SWMEM_HIGH 0x800000
31 #define SWMEM_ARRAY (SWMEM_HIGH - SWMEM_LOW) / SWMEM_PAGE
33 #define SWMEM_PAGE_FREE 0x0
34 #define SWMEM_PAGE_USED 0x1
36 unsigned char swmempage
[SWMEM_ARRAY
];
38 void *swmalloc (unsigned size
)
42 for (i
= 0; i
< SWMEM_ARRAY
; i
++) {
43 if (swmempage
[i
] == SWMEM_PAGE_FREE
) { /* FREE */
45 if (size
> SWMEM_PAGE
) {
46 for (y
= 0; y
< (size
/SWMEM_PAGE
)+1; y
++) {
47 if (swmempage
[i
+y
] == SWMEM_PAGE_FREE
)
48 swmempage
[i
+y
] = SWMEM_PAGE_USED
;
58 swmempage
[i
] = SWMEM_PAGE_USED
;
65 return (void *) ((i
* SWMEM_PAGE
) + SWMEM_LOW
);
72 unsigned swfree (void *ptr
, unsigned size
)
74 unsigned i
= ((unsigned) ptr
- SWMEM_LOW
) / SWMEM_PAGE
;
77 if (swmempage
[i
] != SWMEM_PAGE_USED
)
80 if (size
> SWMEM_PAGE
) {
81 for (y
= 0; y
< (size
/SWMEM_PAGE
)+1; y
++) {
82 if (swmempage
[i
+y
] == SWMEM_PAGE_USED
)
83 swmempage
[i
+y
] = SWMEM_PAGE_FREE
;
88 swmempage
[i
] = SWMEM_PAGE_FREE
;
93 unsigned int swmem_init ()
95 memset (swmempage
, 0, SWMEM_ARRAY
);