From 7051ea8d4d28531e614a7632d43158dd1268786f Mon Sep 17 00:00:00 2001 From: Matheus Date: Sat, 8 Oct 2022 20:26:13 -0300 Subject: [PATCH] jinx: doomgeneric patch (I forgor) --- patches/doomgeneric/doomgeneric.patch | 213 ++++++++++++++++++++++++++ 1 file changed, 213 insertions(+) create mode 100644 patches/doomgeneric/doomgeneric.patch diff --git a/patches/doomgeneric/doomgeneric.patch b/patches/doomgeneric/doomgeneric.patch new file mode 100644 index 00000000..bd667e61 --- /dev/null +++ b/patches/doomgeneric/doomgeneric.patch @@ -0,0 +1,213 @@ +diff -ruN doomgeneric/doomgeneric/doomgeneric_astral.c Astral/sources/doomgeneric/doomgeneric/doomgeneric_astral.c +--- doomgeneric/doomgeneric/doomgeneric_astral.c 1969-12-31 21:00:00.000000000 -0300 ++++ Astral/sources/doomgeneric/doomgeneric/doomgeneric_astral.c 2022-09-30 20:08:30.023209330 -0300 +@@ -0,0 +1,185 @@ ++#include "doomkeys.h" ++ ++#include "doomgeneric.h" ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++static int fbfd; ++static int kbfd; ++static struct fb_var_screeninfo fbvs; ++static struct fb_fix_screeninfo fbfs; ++static void* frame; ++ ++static int seekordie(int fd, off_t offset, int whence){ ++ int ret = lseek(fd, offset, whence); ++ if(ret == -1){ ++ printf("doomgeneric: lseek failed on fd %d: %s", fd, strerror(errno)); ++ exit(errno); ++ } ++ return ret; ++} ++ ++static int ioctlordie(int fd, unsigned long request, void* arg){ ++ int ret = ioctl(fd, request, arg); ++ if(ret == -1){ ++ printf("doomgeneric: ioctl failed on fd %d: %s\n", fd, strerror(errno)); ++ exit(errno); ++ } ++ return ret; ++} ++ ++static int openordie(char* name, int flags, int mode){ ++ int fd = open(name, flags, mode); ++ if(fd == -1){ ++ printf("doomgeneric: failed to open %s: %s\n", name, strerror(errno)); ++ exit(errno); ++ } ++ return fd; ++} ++ ++static int writeordie(int fd, void* buff, size_t count){ ++ int writec = write(fd, buff, count); ++ if(writec == -1){ ++ printf("doomgeneric: write failed on fd %d: %s\n", fd, strerror(errno)); ++ exit(errno); ++ } ++ ++ return writec; ++} ++ ++static int readordie(int fd, void* buff, size_t count){ ++ int readc = read(fd, buff, count); ++ if(readc == -1){ ++ printf("doomgeneric: read failed on fd %d: %s\n", fd, strerror(errno)); ++ exit(errno); ++ } ++ return readc; ++} ++ ++ ++void DG_Init(){ ++ ++ // open needed files ++ ++ fbfd = openordie("/dev/fb0", O_WRONLY, 0); ++ kbfd = openordie("/dev/keyboard", O_RDONLY, 0); ++ ++ // get needed fb info ++ ++ ioctlordie(fbfd, FBIOGET_VSCREENINFO, &fbvs); ++ ioctlordie(fbfd, FBIOGET_FSCREENINFO, &fbfs); ++ ++ // clear fb ++ ++ frame = malloc(fbfs.smem_len); ++ if(!frame){ ++ printf("doomgeneric: %s", strerror(ENOMEM)); ++ exit(ENOMEM); ++ } ++ memset(frame, 0, fbfs.smem_len); ++ writeordie(fbfd, frame, fbfs.smem_len); ++ struct termios tty; ++ ++ // make tty raw and nonblocking ++ ++ tcgetattr(1, &tty); ++ cfmakeraw(&tty); ++ tty.c_cc[VMIN] = 0; ++ tcsetattr(1, 0, &tty); ++ ++} ++ ++void DG_DrawFrame(){ ++ // prepare the frame for writing ++ ++ // TODO handle bpp stuff ++ ++ seekordie(fbfd, 0, SEEK_SET); ++ ++ for(uintmax_t y = 0; y < DOOMGENERIC_RESY; ++y){ ++ uintptr_t foffset = 0; ++ foffset = fbfs.line_length * y; ++ memcpy(frame + foffset, DG_ScreenBuffer + DOOMGENERIC_RESX*y, DOOMGENERIC_RESX*4); ++ } ++ ++ writeordie(fbfd, frame, fbfs.smem_len); ++ ++} ++ ++typedef struct { ++ char ascii; ++ uintmax_t keycode; ++ int flags; ++} kbpacket_t; ++ ++#define KEYCODE_A 30 ++#define KEYCODE_S 31 ++#define KEYCODE_D 32 ++#define KEYCODE_W 17 ++#define KEYCODE_LEFTCTRL 29 ++#define KEYCODE_ENTER 28 ++#define KEYCODE_ESCAPE 1 ++#define KEYCODE_RIGHTSHIFT 54 ++#define KEYCODE_LEFTSHIFT 42 ++#define KEYCODE_SPACE 57 ++#define KEYCODE_RIGHTCTRL 97 ++#define KBPACKET_FLAGS_RELEASED 1 ++ ++ ++ ++int DG_GetKey(int* pressed, unsigned char* doomkey){ ++ kbpacket_t buff; ++ if(readordie(kbfd, &buff, sizeof(kbpacket_t)) == 0) ++ return 0; ++ char key; ++ switch(buff.keycode){ ++ case KEYCODE_A: ++ key = KEY_LEFTARROW; ++ break; ++ case KEYCODE_W: ++ key = KEY_UPARROW; ++ break; ++ case KEYCODE_S: ++ key = KEY_DOWNARROW; ++ break; ++ case KEYCODE_D: ++ key = KEY_RIGHTARROW; ++ break; ++ case KEYCODE_ENTER: ++ key = KEY_ENTER; ++ break; ++ case KEYCODE_LEFTCTRL: ++ case KEYCODE_RIGHTCTRL: ++ key = KEY_FIRE; ++ break; ++ case KEYCODE_LEFTSHIFT: ++ case KEYCODE_RIGHTSHIFT: ++ key = KEY_RSHIFT; ++ break; ++ case KEYCODE_ESCAPE: ++ key = KEY_ESCAPE; ++ break; ++ case KEYCODE_SPACE: ++ key = KEY_USE; ++ break; ++ default: ++ key = buff.ascii; ++ break; ++ } ++ *doomkey = key; ++ *pressed = buff.flags & KBPACKET_FLAGS_RELEASED ? 0 : 1; ++ return 1; ++} ++ ++void DG_SleepMs(uint32_t ms){} ++static int aa = 0; ++uint32_t DG_GetTicksMs(){return aa++;} ++void DG_SetWindowTitle(const char* title){} +diff -ruN doomgeneric/doomgeneric/Makefile Astral/sources/doomgeneric/doomgeneric/Makefile +--- doomgeneric/doomgeneric/Makefile 2022-10-08 20:18:58.119998127 -0300 ++++ Astral/sources/doomgeneric/doomgeneric/Makefile 2022-09-30 17:46:57.173278946 -0300 +@@ -12,17 +12,17 @@ + endif + + +-CC=clang # gcc or g++ ++CC=x86_64-astral-gcc + CFLAGS+=-ggdb3 -Os + LDFLAGS+=-Wl,--gc-sections + CFLAGS+=-ggdb3 -Wall -DNORMALUNIX -DLINUX -DSNDSERV -D_DEFAULT_SOURCE # -DUSEASM +-LIBS+=-lm -lc -lX11 ++LIBS+=-lm -lc + + # subdirectory for objects + OBJDIR=build + OUTPUT=doomgeneric + +-SRC_DOOM = i_main.o dummy.o am_map.o doomdef.o doomstat.o dstrings.o d_event.o d_items.o d_iwad.o d_loop.o d_main.o d_mode.o d_net.o f_finale.o f_wipe.o g_game.o hu_lib.o hu_stuff.o info.o i_cdmus.o i_endoom.o i_joystick.o i_scale.o i_sound.o i_system.o i_timer.o memio.o m_argv.o m_bbox.o m_cheat.o m_config.o m_controls.o m_fixed.o m_menu.o m_misc.o m_random.o p_ceilng.o p_doors.o p_enemy.o p_floor.o p_inter.o p_lights.o p_map.o p_maputl.o p_mobj.o p_plats.o p_pspr.o p_saveg.o p_setup.o p_sight.o p_spec.o p_switch.o p_telept.o p_tick.o p_user.o r_bsp.o r_data.o r_draw.o r_main.o r_plane.o r_segs.o r_sky.o r_things.o sha1.o sounds.o statdump.o st_lib.o st_stuff.o s_sound.o tables.o v_video.o wi_stuff.o w_checksum.o w_file.o w_main.o w_wad.o z_zone.o w_file_stdc.o i_input.o i_video.o doomgeneric.o doomgeneric_xlib.o ++SRC_DOOM = i_main.o dummy.o am_map.o doomdef.o doomstat.o dstrings.o d_event.o d_items.o d_iwad.o d_loop.o d_main.o d_mode.o d_net.o f_finale.o f_wipe.o g_game.o hu_lib.o hu_stuff.o info.o i_cdmus.o i_endoom.o i_joystick.o i_scale.o i_sound.o i_system.o i_timer.o memio.o m_argv.o m_bbox.o m_cheat.o m_config.o m_controls.o m_fixed.o m_menu.o m_misc.o m_random.o p_ceilng.o p_doors.o p_enemy.o p_floor.o p_inter.o p_lights.o p_map.o p_maputl.o p_mobj.o p_plats.o p_pspr.o p_saveg.o p_setup.o p_sight.o p_spec.o p_switch.o p_telept.o p_tick.o p_user.o r_bsp.o r_data.o r_draw.o r_main.o r_plane.o r_segs.o r_sky.o r_things.o sha1.o sounds.o statdump.o st_lib.o st_stuff.o s_sound.o tables.o v_video.o wi_stuff.o w_checksum.o w_file.o w_main.o w_wad.o z_zone.o w_file_stdc.o i_input.o i_video.o doomgeneric.o doomgeneric_astral.o + OBJS += $(addprefix $(OBJDIR)/, $(SRC_DOOM)) + + all: $(OUTPUT)