SDL: Rollback to stable revision 9172.

git-svn-id: svn://kolibrios.org@9288 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
turbocat 2021-11-19 23:03:24 +00:00
parent 1a964f239f
commit 3fc184a141
13 changed files with 355 additions and 319 deletions

View File

@ -51,15 +51,16 @@ install: $(LIBNAME)
mv -f $(LIBNAME) $(SDK_DIR)/lib mv -f $(LIBNAME) $(SDK_DIR)/lib
$(LIBNAME).a: $(OBJS) $(LIBNAME).a: $(OBJS)
$(AR) -crs $(LIBNAME).a $(OBJS) $(MAKE) -C SYSCALL/src
$(AR) -crs $(LIBNAME).a $(OBJS) SYSCALL/src/os.o
$(LIBNAME).dll: libSDL.def $(OBJS) $(LIBNAME).dll: libSDL.def $(OBJS)
$(LD) $(LDFLAGS) -o $@ libSDL.def $(OBJS) $(LIBS) -ldll -lsound -lc.dll $(LD) $(LDFLAGS) -o $@ libSDL.def $(OBJS) SYSCALL/src/os.o $(LIBS) -ldll -lsound -lc.dll
$(STRIP) $@ $(STRIP) $@
%.o : %.asm Makefile %.o : %.asm Makefile
nasm -Ihermes -f coff $< nasm -f coff $<
%.o : %.c Makefile %.o : %.c Makefile
$(CC) $(CFLAGS) -o $@ $< $(CC) $(CFLAGS) -o $@ $<

View File

@ -1,54 +0,0 @@
KTCC_DIR=../../../../../programs/develop/ktcc/trunk
CC = $(KTCC_DIR)/bin/kos32-tcc
AR = kos32-ar
LIBNAME=libSDL
endian_OBJS = endian/SDL_endian.o
file_OBJS = file/SDL_rwops.o
hermes_OBJS = hermes/mmxp2_32.o hermes/mmx_main.o hermes/x86p_16.o \
hermes/x86p_32.o hermes/x86_main.o
thread_OBJS = thread/SDL_syscond.o thread/SDL_sysmutex.o thread/SDL_syssem.o \
thread/SDL_systhread.o thread/SDL_thread.o
timer_OBJS = timer/SDL_timer.o timer/dummy/SDL_systimer.o
event_OBJS = events/SDL_active.o events/SDL_events.o events/SDL_expose.o \
events/SDL_keyboard.o events/SDL_mouse.o events/SDL_quit.o \
events/SDL_resize.o
video_OBJS = video/SDL_blit_0.o video/SDL_blit_1.o video/SDL_blit_A.o \
video/SDL_blit.o video/SDL_blit_N.o video/SDL_bmp.o \
video/SDL_cursor.o video/SDL_gamma.o video/SDL_pixels.o \
video/SDL_RLEaccel.o video/SDL_stretch.o video/SDL_surface.o \
video/SDL_video.o video/SDL_yuv.o video/SDL_yuv_mmx.o \
video/SDL_yuv_sw.o video/menuetos/SDL_menuetevents.o \
video/menuetos/SDL_menuetvideo.o
audio_OBJS = audio/SDL_kolibri_audio.o
curr_OBJS = SDL.o SDL_error.o SDL_fatal.o SDL_getenv.o
OBJS = $(endian_OBJS) $(file_OBJS) $(hermes_OBJS) $(thread_OBJS) \
$(timer_OBJS) $(event_OBJS) $(video_OBJS) $(curr_OBJS) $(audio_OBJS)
CFLAGS = -c -O2 -D_REENTRANT -I../include -I syscall/include -I. -DPACKAGE=\"SDL\" -DVERSION=\"1.2.2\" \
-fexpensive-optimizations -Wall -DENABLE_AUDIO -UDISABLE_AUDIO -DDISABLE_JOYSTICK \
-DDISABLE_CDROM -DDISABLE_THREADS -DENABLE_TIMERS \
-DUSE_ASMBLIT -Ihermes -Iaudio -Ivideo -Ievents \
-Ijoystick -Icdrom -Ithread -Itimer -Iendian -Ifile -DENABLE_KOLIBRIOS \
-DNO_SIGNAL_H -DDISABLE_STDIO -DNEED_SDL_GETENV -DENABLE_FILE -UDISABLE_FILE \
-D__KOLIBRIOS__ -DDEBUG_VIDEO \
-I$(KTCC_DIR)/libc.obj/include -I../../sound/include
all: $(LIBNAME).a
$(LIBNAME).a: $(OBJS)
$(AR) -crs $(LIBNAME).a $(OBJS)
%.o : %.asm Makefile
nasm -Ihermes -f elf32 $<
%.o : %.c Makefile
$(CC) $(CFLAGS) -o $@ $<
clean:
rm -f */*.o \ rm *.o \ rm */*/*.o

View File

@ -1,162 +0,0 @@
#ifndef SDL_kos
#define SDL_kos
#ifdef __cplusplus
extern "C" {
#endif
typedef unsigned char __u8;
typedef unsigned short __u16;
typedef unsigned long __u32;
#pragma pack(push)
struct process_table_entry
{
__u32 cpu_usage;
__u16 pos_in_windowing_stack;
__u16 win_stack_val_at_ecx;
__u16 reserved1;
char name[12];
__u32 memstart;
__u32 memused;
__u32 pid;
__u32 winx_start,winy_start;
__u32 winx_size,winy_size;
__u16 thread_state;
__u16 reserved2;
__u32 client_left,client_top,client_width,client_height;
__u8 window_state;
__u8 reserved3[1024-71];
};
typedef union{
unsigned val;
struct{
short h;
short w;
};
}__kos__screen_t;
#pragma pack(pop)
static inline
void __kos__define_window(__u16 x1,__u16 y1,__u16 xsize,__u16 ysize,
__u32 body_color,__u32 grab_color,__u32 frame_color)
{
__u32 a,b;
a=(x1<<16)|xsize;
b=(y1<<16)|ysize;
__asm__ __volatile__("int $0x40"::"a"(0),"b"(a),"c"(b),"d"(body_color),"S"(grab_color),
"D"(frame_color));
}
static inline void __kos__window_redraw(int status)
{
__asm__ __volatile__("int $0x40"::"a"(12),"b"(status));
}
static inline
void __kos__draw_bitmap(void *bitmap, int x, int y, int w, int h)
{
__asm__ __volatile__(
"int $0x40"
::"a"(7), "b"(bitmap),
"c"((w << 16) | h),
"d"((x << 16) | y));
}
static inline
int __kos__getkey(void)
{
__u16 __ret;
__asm__ __volatile__("int $0x40":"=a"(__ret):"0"(2));
if(!(__ret & 0xFF)) return (__ret>>8)&0xFF; else return 0;
}
static inline
int __kos__check_for_event(void)
{
__u32 __ret;
__asm__ __volatile__("int $0x40":"=a"(__ret):"0"(11));
return __ret;
}
static inline
int __kos__set_events_mask(__u32 mask)
{
__u32 val;
asm volatile ("int $0x40":"=a"(val):"a"(40), "b"(mask));
return val;
}
static inline
void __kos__delay100(int time)
{
__asm__ __volatile__(
"int $0x40"
::"a"(5), "b"(time)
:"memory");
};
static inline
int __kos__get_button_id()
{
__u32 val;
__asm__ __volatile__(
"int $0x40"
:"=a"(val)
:"a"(17)
);
return val>>8;
}
static inline
void __kos__change_window(int new_x, int new_y, int new_w, int new_h)
{
__asm__ __volatile__(
"int $0x40"
::"a"(67), "b"(new_x), "c"(new_y), "d"(new_w),"S"(new_h)
);
}
static inline
__kos__screen_t __kos__screen_size(void)
{
__kos__screen_t size;
__asm__ __volatile__(
"int $0x40"
:"=a"(size)
:"a"(14)
:"memory"
);
return size;
}
static inline
int __kos__get_skinh(void)
{
int res;
__asm__ ("int $0x40" : "=a"(res) : "a"(48),"b"(4));
return res;
}
static inline
void __kos__dbg_write_byte(const char ch){
__asm__ __volatile__(
"int $0x40"
::"a"(63), "b"(1), "c"(ch)
);
}
static inline
void __kos__dbg_write_str(const char* str){
while(*str){
__kos__dbg_write_byte(*str++);
}
}
#ifdef __cplusplus
}
#endif
#endif

View File

@ -0,0 +1,218 @@
#ifndef __GLIBC__MENUET_OS_H
#define __GLIBC__MENUET_OS_H
#ifdef __cplusplus
extern "C" {
#endif
typedef unsigned char __u8;
typedef unsigned short __u16;
typedef unsigned long __u32;
#pragma pack(push,1)
void __menuet__define_window(__u16 x1,__u16 y1,__u16 xsize,__u16 ysize,
__u32 body_color,__u32 grab_color,__u32 frame_color);
void __menuet__window_redraw(int status);
void __menuet__putpixel(__u32 x,__u32 y,__u32 color);
int __menuet__getkey(void);
__u32 __menuet__getsystemclock(void);
void __menuet__write_text(__u16 x,__u16 y,__u32 color,char * text,int len);
void __menuet__delay100(int m);
__u32 __menuet__open(char * name,char * data);
void __menuet__save(char * name,char * data,__u32 count);
void __menuet__putimage(__u16 x1,__u16 y1,__u16 xsize,__u16 ysize,char * image);
void __menuet__make_button(__u16 x1,__u16 y1,__u16 xsize,__u16 ysize,
int id,__u32 color);
int __menuet__get_button_id(void);
int __menuet__wait_for_event(void);
int __menuet__check_for_event(void);
void __menuet__bar(__u16 x1,__u16 y1,__u16 xsize,__u16 ysize,__u32 color);
void __menuet__sys_exit(void);
void * __menuet__exec_thread(void (* func_ptr)(void),__u32 stack_size,int * retp);
void __menuet__idle(void);
void __menuet__exec_ramdisk(char * filename,char * args,...);
void __menuet__exec_hd(char * filename,char * args,...);
struct process_table_entry
{
__u32 cpu_usage;
__u16 pos_in_windowing_stack;
__u16 win_stack_val_at_ecx;
__u16 reserved1;
char name[12];
__u32 memstart;
__u32 memused;
__u32 pid;
__u32 winx_start,winy_start;
__u32 winx_size,winy_size;
__u16 thread_state;
__u16 reserved2;
__u32 client_left,client_top,client_width,client_height;
__u8 window_state;
__u8 reserved3[1024-71];
};
#define PID_WHOAMI (-1)
int __menuet__get_process_table(struct process_table_entry * proctab,int pid);
void __menuet__get_screen_max(__u16 * x,__u16 * y);
#define BTYPE_TILE 1
#define BTYPE_STRETCH 2
void __menuet__set_background_size(__u32 xsz,__u32 ysz);
void __menuet__write_background_mem(__u32 pos,__u32 color);
void __menuet__draw_background(void);
void __menuet__set_background_draw_type(int type);
void __menuet__background_blockmove(char * src_ptr,__u32 bgr_dst,__u32 count);
void __menuet__reset_mpu401(void);
void __menuet__write_mpu401(__u8 d);
__u32 __menuet__get_date(void);
void __menuet__line(__u16 x1,__u16 y1,__u16 x2,__u16 y2,__u32 color);
void __menuet__set_bitfield_for_wanted_events(__u32 ev);
#define EVENT_REDRAW 0x00000001
#define EVENT_KEY 0x00000002
#define EVENT_BUTTON 0x00000004
#define EVENT_END_REQUEST 0x00000008
#define EVENT_DESKTOP_BACK_DRAW 0x00000010
#define EVENT_MOUSE_CHANGE 0x00000020
#define EVENT_IPC 0x00000040
#define EVENT_MOUSE_CURSOR_MASK 0x40000000 // the window does not receive mouse events if cursor outside window
#define EVENT_MOUSE_WINDOW_MASK 0x80000000 // inactive window does not receive mouse events
__u32 __menuet__get_irq_owner(__u32 irq);
int __menuet__get_data_read_by_irq(__u32 irq,__u32 * num_bytes_in_buf,__u8 * data);
int __menuet__send_data_to_device(__u16 port,__u8 val);
void __menuet__program_irq(void * intr_table,__u32 irq_num);
int __menuet__reserve_irq(int irqno);
int __menuet__free_irq(int irqno);
int __menuet__reserve_port_area(__u32 start,__u32 end);
int __menuet__free_port_area(__u32 start,__u32 end);
#define NAME_LEN 512
#define STC_READ 0
#define STC_WRITE 1
#define STC_APPEND 2
struct systree_info
{
__u32 command;
__u32 file_offset_low;
__u32 file_offset_high;
__u32 size;
__u32 data_pointer;
char _zero;
const char* nameptr;
};
struct systree_info2
{
__u32 command;
__u32 file_offset_low;
__u32 file_offset_high;
__u32 size;
__u32 data_pointer;
char name[NAME_LEN];
};
struct bdfe_time
{
__u8 seconds;
__u8 minutes;
__u8 hours;
__u8 reserved;
};
struct bdfe_date
{
__u8 day;
__u8 month;
__u16 year;
};
struct bdfe_item
{
__u32 attr;
__u8 nametype;
__u8 reserved[3];
struct bdfe_time ctime;
struct bdfe_date cdate;
struct bdfe_time atime;
struct bdfe_date adate;
struct bdfe_time mtime;
struct bdfe_date mdate;
__u32 filesize_low;
__u32 filesize_high;
};
int __kolibri__system_tree_access(struct systree_info * info);
int __kolibri__system_tree_access2(struct systree_info2 * info);
int __fslayer_open(char * name,int flags);
int __fslayer_close(int fd);
int __fslayer_lseek(int fd,int pos,int seek_type);
int __fslayer_tell(int fd);
int __fslayer_read(int fd,void * buffer,__u32 count);
int __fslayer_write(int fd,void * buffer,__u32 count);
typedef struct
{
__u8 lock;
__u8 resvd[3];
__u32 ptr_to_fmsg_pos;
/* Below is for message */
__u32 sender_pid;
__u32 msg_length;
} msgrcva_t /*__attribute__((packed))*/;
void send_message(int pid,void * msg_ptr,int message_size);
void define_receive_area(msgrcva_t * rcva_ptr,int size);
void __menuet__sound_load_block(char * blockptr);
void __menuet__sound_play_block(void);
void __menuet__dga_get_caps(int * xres,int * yres,int * bpp,int * bpscan);
void get_pci_version(__u8 * major,__u8 * minor);
void pci_get_last_bus(__u8 * last_bus);
void get_pci_access_mechanism(__u8 * mechanism);
void pci_write_config_byte(__u8 bus,__u8 dev,__u8 fn,__u8 reg,__u8 val);
void pci_write_config_word(__u8 bus,__u8 dev,__u8 fn,__u8 reg,__u16 val);
void pci_write_config_dword(__u8 bus,__u8 dev,__u8 fn,__u8 reg,__u32 val);
__u8 pci_read_config_byte(__u8 bus,__u8 dev,__u8 fn,__u8 reg);
__u16 pci_read_config_word(__u8 bus,__u8 dev,__u8 fn,__u8 reg);
__u32 pci_read_config_dword(__u8 bus,__u8 dev,__u8 fn,__u8 reg);
typedef struct{
char* name;
void* pointer;
} IMP_ENTRY;
typedef const IMP_ENTRY* IMP_TABLE;
IMP_TABLE __kolibri__cofflib_load(const char*);
__u32 __kolibri__cofflib_getproc(IMP_TABLE, const char*);
//int __kolibri__cofflib_link(FUNC*, IMP_TABLE);
static __inline__ void __menuet__debug_out_byte(const char ch){
__asm__ __volatile__ ("int $0x40"::"a"(63L),"b"(1L),"c"((__u8)ch));
}
void __menuet__debug_out(const char* str);
#define TIME_GETH(x) ((x)&0x000000FF)
#define TIME_GETM(x) ((((x)&0x00FF00)>>8)&0xFF)
#define TIME_GETS(x) ((((x)&0xFF0000)>>16)&0xFF)
#pragma pack(pop)
#ifdef __cplusplus
}
#endif
#endif

View File

@ -0,0 +1,19 @@
CC = kos32-gcc
LD = kos32-ld
SDK_DIR = $(abspath ../../../../../)
CFLAGS = -c -fno-ident -O2 -fomit-frame-pointer -fno-ident -U__WIN32__ -U_Win32 -U_WIN32 -U__MINGW32__ -UWIN32
INCLUDES = -I ../include -I $(SDK_DIR)/sources/newlib/libc/include
SYSCALL_SRC := $(notdir $(wildcard *.c))
OBJECTS = $(patsubst %.c, %.o, $(SYSCALL_SRC))
default: $(patsubst %.c,%.o,$(SYSCALL_SRC))
%.o : %.c Makefile $(SYSCALL_SRC)
$(CC) $(CFLAGS) $(INCLUDES) -o $@ $<
clean:
rm *.o

View File

@ -0,0 +1,39 @@
#include <menuet/os.h>
void __menuet__define_window(__u16 x1,__u16 y1,__u16 xsize,__u16 ysize,
__u32 body_color,__u32 grab_color,__u32 frame_color)
{
__u32 a,b;
a=(x1<<16)|xsize;
b=(y1<<16)|ysize;
__asm__ __volatile__("int $0x40"::"a"(0),"b"(a),"c"(b),"d"(body_color),"S"(grab_color),
"D"(frame_color));
}
void __menuet__window_redraw(int status)
{
__asm__ __volatile__("int $0x40"::"a"(12),"b"(status));
}
void __menuet__putimage(__u16 x1,__u16 y1,__u16 xsize,__u16 ysize,char * image)
{
__u32 a,b;
a=(xsize<<16)|ysize;
b=(x1<<16)|y1;
__asm__ __volatile__("int $0x40"::"a"(7),"b"(image),"c"(a),"d"(b));
}
int __menuet__getkey(void)
{
__u16 __ret;
__asm__ __volatile__("int $0x40":"=a"(__ret):"0"(2));
if(!(__ret & 0xFF)) return (__ret>>8)&0xFF; else return 0;
}
int __menuet__check_for_event(void)
{
__u32 __ret;
__asm__ __volatile__("int $0x40":"=a"(__ret):"0"(11));
return __ret;
}

View File

@ -2,7 +2,7 @@ if tup.getconfig("NO_GCC") ~= "" or tup.getconfig("NO_NASM") ~= "" then return e
tup.include("../../../../../programs/use_gcc.lua") tup.include("../../../../../programs/use_gcc.lua")
tup.include("../../../../../programs/use_newlib.lua") tup.include("../../../../../programs/use_newlib.lua")
tup.include("../../../../../programs/use_sound.lua") tup.include("../../../../../programs/use_sound.lua")
INCLUDES = INCLUDES .. " -I. -I../include -Ihermes -Iaudio -Ivideo -Ievents -Ijoystick -Icdrom -Ithread -Itimer -Iendian -Ifile -Isyscall/include" INCLUDES = INCLUDES .. " -I. -I../include -Ihermes -Iaudio -Ivideo -Ievents -Ijoystick -Icdrom -Ithread -Itimer -Iendian -Ifile -ISYSCALL/include"
CFLAGS = CFLAGS .. ' -D_REENTRANT -DPACKAGE=\"SDL\" -DVERSION=\"1.2.2\"' CFLAGS = CFLAGS .. ' -D_REENTRANT -DPACKAGE=\"SDL\" -DVERSION=\"1.2.2\"'
CFLAGS = CFLAGS .. ' -DENABLE_AUDIO -UDISABLE_AUDIO -DDISABLE_JOYSTICK' CFLAGS = CFLAGS .. ' -DENABLE_AUDIO -UDISABLE_AUDIO -DDISABLE_JOYSTICK'
CFLAGS = CFLAGS .. ' -DDISABLE_CDROM -DDISABLE_THREADS -DENABLE_TIMERS' CFLAGS = CFLAGS .. ' -DDISABLE_CDROM -DDISABLE_THREADS -DENABLE_TIMERS'
@ -21,12 +21,13 @@ FOLDERS = {
"timer/dummy/", "timer/dummy/",
"video/", "video/",
"video/menuetos/", "video/menuetos/",
"SYSCALL/src/"
} }
for i,v in ipairs(FOLDERS) do for i,v in ipairs(FOLDERS) do
compile_gcc(v .. "*.c", v .. "%B.o") compile_gcc(v .. "*.c", v .. "%B.o")
tup.append_table(OBJS, tup.append_table(OBJS,
tup.foreach_rule(v .. "*.asm", "nasm -i hermes -f coff -o %o %f", v .. "%B.o") tup.foreach_rule(v .. "*.asm", "nasm -f coff -Ihermes -o %o %f", v .. "%B.o")
) )
end end
tup.rule(OBJS, "kos32-ar rcs %o %f", {"../../../lib/libSDLn.a", "../../../lib/<libSDLn>"}) tup.rule(OBJS, "kos32-ar rcs %o %f", {"../../../lib/libSDLn.a", "../../../lib/<libSDLn>"})

View File

@ -1,12 +1,11 @@
#include "SDL_audio.h" #include "SDL_audio.h"
#include <SDL_kos.h> #include <kos32sys.h>
#include <menuet/os.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <sound.h> #include <sound.h>
#include <stdio.h> #include <stdio.h>
extern void SDL_printf(const char * fmt,...);
static void GetNotify(__u32* event) static void GetNotify(__u32* event)
{ {
__asm__("int $0x40" :: "a"(68),"b"(14),"c"(event)); __asm__("int $0x40" :: "a"(68),"b"(14),"c"(event));
@ -144,7 +143,7 @@ static void audio_thread(void)
} }
} }
if (bPaused) if (bPaused)
__kos__delay100(5); delay(5);
else else
{ {
GetNotify(event); GetNotify(event);

View File

@ -33,7 +33,7 @@ static char rcsid =
#include "SDL_error.h" #include "SDL_error.h"
#include "SDL_timer.h" #include "SDL_timer.h"
#include "SDL_timer_c.h" #include "SDL_timer_c.h"
#include "SDL_kos.h" #include "kos32sys.h"
#if _POSIX_THREAD_SYSCALL_SOFT #if _POSIX_THREAD_SYSCALL_SOFT
#include <pthread.h> #include <pthread.h>
@ -88,7 +88,7 @@ Uint32 SDL_GetTicks (void)
void SDL_Delay(unsigned ms){ void SDL_Delay(unsigned ms){
unsigned start = SDL_GetTicks(); unsigned start = SDL_GetTicks();
do{ do{
__kos__delay100(1); delay(1);
}while (SDL_GetTicks()-start < ms); }while (SDL_GetTicks()-start < ms);
} }

View File

@ -1,5 +1,5 @@
#include <SDL_kos.h> #include <menuet/os.h>
//#include <kos32sys.h> #include <kos32sys.h>
#include <stdlib.h> #include <stdlib.h>
#include <stdio.h> #include <stdio.h>
#include "SDL.h" #include "SDL.h"
@ -164,7 +164,7 @@ void MenuetOS_PumpEvents(_THIS)
static int ext_code=0; static int ext_code=0;
static __u8 old_mode=0; static __u8 old_mode=0;
for (;;) { for (;;) {
i=__kos__check_for_event(); i=__menuet__check_for_event();
switch(i) switch(i)
{ {
case 0: case 0:
@ -173,7 +173,7 @@ void MenuetOS_PumpEvents(_THIS)
MenuetOS_SDL_RepaintWnd(); MenuetOS_SDL_RepaintWnd();
break; break;
case 2: case 2:
key.scancode = __kos__getkey(); key.scancode = __menuet__getkey();
if (key.scancode == 0xE0 || key.scancode == 0xE1) if (key.scancode == 0xE0 || key.scancode == 0xE1)
{ext_code=key.scancode;break;} {ext_code=key.scancode;break;}
if (ext_code == 0xE1 && (key.scancode & 0x7F) == 0x1D) break; if (ext_code == 0xE1 && (key.scancode & 0x7F) == 0x1D) break;
@ -200,7 +200,7 @@ void MenuetOS_PumpEvents(_THIS)
SDL_PrivateKeyboard(code,&key); SDL_PrivateKeyboard(code,&key);
break; break;
case 3: case 3:
if(__kos__get_button_id()==1) exit(0); if(get_os_button()==1) exit(0);
break; break;
case 6: { case 6: {
int __tmp,mx,my; int __tmp,mx,my;

View File

@ -1,6 +1,7 @@
#include <stdlib.h> #include <stdlib.h>
#include <stdio.h> #include <stdio.h>
#include <SDL_kos.h> #include <menuet/os.h>
#include <kos32sys.h>
#include "SDL.h" #include "SDL.h"
#include "SDL_error.h" #include "SDL_error.h"
#include "SDL_video.h" #include "SDL_video.h"
@ -23,10 +24,20 @@ static int null_cursor;
static int IsStyle4Available=0; static int IsStyle4Available=0;
#endif #endif
void kol_define_window(unsigned short x1,unsigned short y1,unsigned short xsize,unsigned short ysize,
unsigned long body_color,unsigned long grab_color,unsigned long frame_color)
{
unsigned long a,b;
a=(x1<<16)|xsize;
b=(y1<<16)|ysize;
__asm__ __volatile__("int $0x40"::"a"(0),"b"(a),"c"(b),"d"(body_color),"S"(grab_color),
"D"(frame_color));
}
void MenuetOS_SDL_RepaintWnd(void) void MenuetOS_SDL_RepaintWnd(void)
{ {
__kos__window_redraw(1); begin_draw();
__kos__define_window(1, 1, vm_suf->hidden->win_size_x+9,vm_suf->hidden->win_size_y+__kos__get_skinh()+4, kol_define_window(1,1,vm_suf->hidden->win_size_x+9,vm_suf->hidden->win_size_y+get_skin_height()+4,
#ifdef KEEP_OBSOLETE_STYLE3 #ifdef KEEP_OBSOLETE_STYLE3
IsStyle4Available?0x34000000:0x33000000 IsStyle4Available?0x34000000:0x33000000
#else #else
@ -37,9 +48,9 @@ void MenuetOS_SDL_RepaintWnd(void)
// __asm__ __volatile__("int3"); // __asm__ __volatile__("int3");
if(vm_suf && vm_suf->hidden->__video_buffer) if(vm_suf && vm_suf->hidden->__video_buffer)
__kos__draw_bitmap(vm_suf->hidden->__video_buffer, 0,0, draw_bitmap(vm_suf->hidden->__video_buffer, 0,0,
vm_suf->hidden->win_size_x,vm_suf->hidden->win_size_y); vm_suf->hidden->win_size_x,vm_suf->hidden->win_size_y);
__kos__window_redraw(2); end_draw();
} }
static int MenuetOS_AllocHWSurface(_THIS,SDL_Surface * surface) static int MenuetOS_AllocHWSurface(_THIS,SDL_Surface * surface)
@ -64,7 +75,7 @@ static void MenuetOS_DirectUpdate(_THIS,int numrects,SDL_Rect * rects)
{ {
if(numrects) if(numrects)
{ {
__kos__draw_bitmap(this->hidden->__video_buffer, 0,0, draw_bitmap(this->hidden->__video_buffer, 0,0,
vm_suf->hidden->win_size_x,vm_suf->hidden->win_size_y); vm_suf->hidden->win_size_x,vm_suf->hidden->win_size_y);
} }
} }
@ -105,7 +116,21 @@ SDL_Surface * MenuetOS_SetVideoMode(_THIS, SDL_Surface *current, int width, int
char info[100]; char info[100];
sprintf(info, "width = %d, height = %d, pitch = %d, bpp = %d\n", current->w, current->h, current->pitch, bpp); sprintf(info, "width = %d, height = %d, pitch = %d, bpp = %d\n", current->w, current->h, current->pitch, bpp);
__kos__dbg_write_str(info);
void debug_board_write_byte(const char ch){
__asm__ __volatile__(
"int $0x40"
:
:"a"(63), "b"(1), "c"(ch));
}
void debug_board_write_str(const char* str){
while(*str)
debug_board_write_byte(*str++);
}
debug_board_write_str(info);
// __asm__ __volatile__("int3"); // __asm__ __volatile__("int3");
current->pixels=this->hidden->__video_buffer=realloc(this->hidden->__video_buffer, current->pixels=this->hidden->__video_buffer=realloc(this->hidden->__video_buffer,
@ -124,14 +149,15 @@ SDL_Surface * MenuetOS_SetVideoMode(_THIS, SDL_Surface *current, int width, int
if (was_initialized) if (was_initialized)
{ {
unsigned newheight = height+__kos__get_skinh()+4; unsigned newheight = height+get_skin_height+4;
unsigned newwidth = width+9; unsigned newwidth = width+9;
__kos__change_window(-1, -1, newwidth, newheight); sys_change_window(-1, -1, newwidth, newheight);
} }
else else
{ {
__kos__set_events_mask(0x27);
set_wanted_events_mask(0x27);
was_initialized=1; was_initialized=1;
MenuetOS_SDL_RepaintWnd(); MenuetOS_SDL_RepaintWnd();
} }
@ -199,7 +225,7 @@ static int MenuetOS_VideoInit(_THIS,SDL_PixelFormat * vformat)
static int MenuetOS_FlipHWSurface(_THIS,SDL_Surface * surface) static int MenuetOS_FlipHWSurface(_THIS,SDL_Surface * surface)
{ {
__kos__draw_bitmap(surface->pixels, 0,0,surface->w,surface->h); draw_bitmap(surface->pixels, 0,0,surface->w,surface->h);
return 0; return 0;
} }

View File

@ -14,8 +14,8 @@ default: fire
fire: $(OBJECTS) Makefile fire: $(OBJECTS) Makefile
$(CC) $(CFLAGS) $(INCLUDES) -o sdltest.o sdltest.c $(CC) $(CFLAGS) $(INCLUDES) -o sdltest.o sdltest.c
$(CC) $(CFLAGS) $(INCLUDES) -o testbitmap.o testbitmap.c $(CC) $(CFLAGS) $(INCLUDES) -o testbitmap.o testbitmap.c
$(LD) $(LDFLAGS) $(LIBPATH) --subsystem native -o sdltest sdltest.o -lgcc -lSDLn -lc.dll -lsound $(LD) $(LDFLAGS) $(LIBPATH) --subsystem native -o sdltest sdltest.o -lgcc -lSDL -lc.dll -lc -lsound
$(LD) $(LDFLAGS) $(LIBPATH) --subsystem native -o testbitmap testbitmap.o -lgcc -lSDLn -lc.dll -lsound $(LD) $(LDFLAGS) $(LIBPATH) --subsystem native -o testbitmap testbitmap.o -lgcc -lSDL -lc.dll -lc -lsound
kos32-strip -s sdltest -o sdltest kos32-strip -s sdltest -o sdltest
kos32-strip -s testbitmap -o testbitmap kos32-strip -s testbitmap -o testbitmap
objcopy testbitmap -O binary objcopy testbitmap -O binary

View File

@ -1,79 +1,28 @@
#include "SDL.h" #include "SDL.h"
#include <stdlib.h> #include <stdlib.h>
#define WIDTH 640
#define HEIGHT 480
#define BPP 4
#define DEPTH 32
void setpixel(SDL_Surface *screen, int x, int y, Uint8 r, Uint8 g, Uint8 b)
{
Uint32 *pixmem32;
Uint32 colour;
colour = SDL_MapRGB( screen->format, r, g, b );
pixmem32 = (Uint32*) screen->pixels + y + x;
*pixmem32 = colour;
}
void DrawScreen(SDL_Surface* screen, int h)
{
int x, y, ytimesw;
if(SDL_MUSTLOCK(screen))
{
if(SDL_LockSurface(screen) < 0) return;
}
for(y = 0; y < screen->h; y++ )
{
ytimesw = y*screen->pitch/BPP;
for( x = 0; x < screen->w; x++ )
{
setpixel(screen, x, ytimesw, (x*x)/256+3*y+h, (y*y)/256+x+h, h);
}
}
if(SDL_MUSTLOCK(screen)) SDL_UnlockSurface(screen);
SDL_Flip(screen);
}
int main(int argc, char* argv[])
{
SDL_Surface* screen; SDL_Surface* screen;
static int done = 0;
int main()
{
SDL_Event event; SDL_Event event;
if(SDL_Init(SDL_INIT_VIDEO) < 0) exit(0);
int keypress = 0; atexit(SDL_Quit);
int h=0; screen = SDL_SetVideoMode(320, 200, 8, SDL_SWSURFACE);
while(!done)
if (SDL_Init(SDL_INIT_VIDEO) < 0 ) return 1;
if (!(screen = SDL_SetVideoMode(WIDTH, HEIGHT, DEPTH, SDL_FULLSCREEN|SDL_HWSURFACE)))
{ {
SDL_Quit();
return 1;
}
while(!keypress)
{
DrawScreen(screen,h++);
while(SDL_PollEvent(&event)) while(SDL_PollEvent(&event))
{ {
switch(event.type) switch(event.type)
{ {
case SDL_QUIT:
keypress = 1;
break;
case SDL_KEYDOWN: case SDL_KEYDOWN:
keypress = 1; case SDL_QUIT:
done=1;
break;
default:
break; break;
} }
} }
} }
SDL_Quit();
return 0;
} }