From e24fbabce2afb0f6451af93c974cacd103452f97 Mon Sep 17 00:00:00 2001 From: Andrew Dunai Date: Wed, 14 Feb 2024 02:30:59 +0200 Subject: [PATCH] doom: update README --- firmware-doom/lib/doomgeneric/README.md | 82 ++++++------------- .../lib/doomgeneric/{ => src}/README.TXT | 0 firmware-doom/lib/doomgeneric/src/README.md | 67 +++++++++++++++ 3 files changed, 93 insertions(+), 56 deletions(-) rename firmware-doom/lib/doomgeneric/{ => src}/README.TXT (100%) create mode 100644 firmware-doom/lib/doomgeneric/src/README.md diff --git a/firmware-doom/lib/doomgeneric/README.md b/firmware-doom/lib/doomgeneric/README.md index dabfabab..f5b0aa6c 100644 --- a/firmware-doom/lib/doomgeneric/README.md +++ b/firmware-doom/lib/doomgeneric/README.md @@ -1,67 +1,37 @@ -# doomgeneric -The purpose of doomgeneric is to make porting Doom easier. -Of course Doom is already portable but with doomgeneric it is possible with just a few functions. +# Doom Generic (Lilka edition) -To try it you will need a WAD file (game data). If you don't own the game, shareware version is freely available (doom1.wad). +Ця бібліотека містить модифікований код з . -# porting -Create a file named doomgeneric_yourplatform.c and just implement these functions to suit your platform. -* DG_Init -* DG_DrawFrame -* DG_SleepMs -* DG_GetTicksMs -* DG_GetKey +Оскільки ESP32-S3 має всього 400 КБ SRAM, деякі масиви не поміщаються в RAM, і їх потрібно динамічно ініціалізувати в heap всередині PSRAM. +Тому найважливіша зміна - це заміна деяких стекових алокацій пам'яті на динамічну (malloc/free), наприклад: -|Functions |Description| -|---------------------|-----------| -|DG_Init |Initialize your platfrom (create window, framebuffer, etc...). -|DG_DrawFrame |Frame is ready in DG_ScreenBuffer. Copy it to your platform's screen. -|DG_SleepMs |Sleep in milliseconds. -|DG_GetTicksMs |The ticks passed since launch in milliseconds. -|DG_GetKey |Provide keyboard events. -|DG_SetWindowTitle |Not required. This is for setting the window title as Doom sets this from WAD file. +```cpp +// До: -### main loop -At start, call doomgeneric_Create(). +#define MAXVISPLANES 128 +visplane_t visplanes[MAXVISPLANES]; +#define MAXOPENINGS SCREENWIDTH*64 +short openings[MAXOPENINGS]; -In a loop, call doomgeneric_Tick(). +// Після: -In simplest form: -``` -int main(int argc, char **argv) +#define MAXVISPLANES 128 +visplane_t* visplanes; +#define MAXOPENINGS SCREENWIDTH*64 +short* openings; + +void R_AllocPlanes (void) { - doomgeneric_Create(argc, argv); + visplanes = malloc (sizeof(visplane_t) * MAXVISPLANES); + openings = malloc (sizeof(short) * MAXOPENINGS); +} - while (1) - { - doomgeneric_Tick(); - } - - return 0; +void R_FreePlanes (void) +{ + free (visplanes); + free (openings); } ``` -# sound -Sound is much harder to implement! If you need sound, take a look at SDL port. It fully supports sound and music! Where to start? Define FEATURE_SOUND, assign DG_sound_module and DG_music_module. - -# platforms -Ported platforms include Windows, X11, SDL, emscripten. Just look at (doomgeneric_win.c, doomgeneric_xlib.c, doomgeneric_sdl.c). -Makefiles provided for each platform. - -## emscripten -You can try it directly here: -https://ozkl.github.io/doomgeneric/ - -emscripten port is based on SDL port, so it supports sound and music! For music, timidity backend is used. - -## Windows -![Windows](screenshots/windows.png) - -## X11 - Ubuntu -![Ubuntu](screenshots/ubuntu.png) - -## X11 - FreeBSD -![FreeBSD](screenshots/freebsd.png) - -## SDL -![SDL](screenshots/sdl.png) +Повний перелік нових алокацій знаходиться в <./d_alloc.c>. +Він викликається в <./doomgeneric.c>. diff --git a/firmware-doom/lib/doomgeneric/README.TXT b/firmware-doom/lib/doomgeneric/src/README.TXT similarity index 100% rename from firmware-doom/lib/doomgeneric/README.TXT rename to firmware-doom/lib/doomgeneric/src/README.TXT diff --git a/firmware-doom/lib/doomgeneric/src/README.md b/firmware-doom/lib/doomgeneric/src/README.md new file mode 100644 index 00000000..dabfabab --- /dev/null +++ b/firmware-doom/lib/doomgeneric/src/README.md @@ -0,0 +1,67 @@ +# doomgeneric +The purpose of doomgeneric is to make porting Doom easier. +Of course Doom is already portable but with doomgeneric it is possible with just a few functions. + +To try it you will need a WAD file (game data). If you don't own the game, shareware version is freely available (doom1.wad). + +# porting +Create a file named doomgeneric_yourplatform.c and just implement these functions to suit your platform. +* DG_Init +* DG_DrawFrame +* DG_SleepMs +* DG_GetTicksMs +* DG_GetKey + +|Functions |Description| +|---------------------|-----------| +|DG_Init |Initialize your platfrom (create window, framebuffer, etc...). +|DG_DrawFrame |Frame is ready in DG_ScreenBuffer. Copy it to your platform's screen. +|DG_SleepMs |Sleep in milliseconds. +|DG_GetTicksMs |The ticks passed since launch in milliseconds. +|DG_GetKey |Provide keyboard events. +|DG_SetWindowTitle |Not required. This is for setting the window title as Doom sets this from WAD file. + +### main loop +At start, call doomgeneric_Create(). + +In a loop, call doomgeneric_Tick(). + +In simplest form: +``` +int main(int argc, char **argv) +{ + doomgeneric_Create(argc, argv); + + while (1) + { + doomgeneric_Tick(); + } + + return 0; +} +``` + +# sound +Sound is much harder to implement! If you need sound, take a look at SDL port. It fully supports sound and music! Where to start? Define FEATURE_SOUND, assign DG_sound_module and DG_music_module. + +# platforms +Ported platforms include Windows, X11, SDL, emscripten. Just look at (doomgeneric_win.c, doomgeneric_xlib.c, doomgeneric_sdl.c). +Makefiles provided for each platform. + +## emscripten +You can try it directly here: +https://ozkl.github.io/doomgeneric/ + +emscripten port is based on SDL port, so it supports sound and music! For music, timidity backend is used. + +## Windows +![Windows](screenshots/windows.png) + +## X11 - Ubuntu +![Ubuntu](screenshots/ubuntu.png) + +## X11 - FreeBSD +![FreeBSD](screenshots/freebsd.png) + +## SDL +![SDL](screenshots/sdl.png)