ogu sdl2 관련

SDL2 build

SDL2 는 현재 3가지 버젼이 존재합니다.

  1. ge2d 사용한 소스
  2. ge2d 를 사용하지 않은 소스
  3. libgou 를 사용한 소스

ge2d 로 구동한 소스 위치는 아래와 같습니다.

git clone -b 2.0.22 https://github.com/JohnnyonFlame/SDL-ge2d.git

ge2d 를 사용하지 않는 sdl2 소스는 아래와 같습니다.

git clone -b fbdev-noge2d https://github.com/JohnnyonFlame/SDL-ge2d.git

libgou 를 사용한 sdl2 소스는 아래와 같습니다.

git clone -b gou-dev https://github.com/OtherCrashOverride/SDL-ge2d.git


./configure --enable-video-opengles2 --disable-video-vulkan
make -j4

git clone -b gou-dev https://github.com/JohnnyonFlame/SDL-ge2d.git 에서 개선 되었다고 하지만 별 차이는 없었음

echo "performance" | sudo tee /sys/devices/system/cpu/cpufreq/policy2/scaling_governor

전체 dependency 는 아래와 같음

sudo apt-get install -y libx11-dev libsm-dev libxext-dev git cmake mercurial libudev-dev libdrm-dev zlib1g-dev pkg-config libasound2-dev libfreetype6-dev libx11-xcb1 libxcb-dri2-0 libglfw3-dev libgles2-mesa-dev mesa-utils-extra libegl1-mesa

sudo apt reinstall libegl-dev

헤더 파일 압축을 풀고

cp include/EGL_platform/platform_fbdev/* include/EGL
CFLAGS='-I/home/odroid/opengl-meson/include' ./configure --enable-video-mali  --disable-video-directfb --disable-directfb-shared

make -j4

ge2d 를 사용하지 않는 sdl2는 아래 환경 변수를 사용하여 화면 회전이 가능함

# Setup native display orientation for OGU
export SDL_MALI_ORIENTATION=1
# Setup application orientation (e.g. for "TATE Mode")
export SDL_MALI_ROTATION=0
# Final rotation is 'rotation = (SDL_MALI_ORIENTATION+SDL_MALI_ROTATION) % 4;'

위 소스는 아래 빌드 에러로 사용 못하고 있음

build error
In file included from /home/odroid/export/SDL-ge2d/src/video/mali-fbdev/SDL_maliopengles.c:8:
/home/odroid/export/SDL-ge2d/src/video/mali-fbdev/SDL_malivideo.h:28:25: error: field 'native_display' has incomplete type
   28 |     struct fbdev_window native_display;

아래 패키지 설치는 효과가 없음

sudo apt install glmark2-es2-wayland

생성된 라이브러리는 심볼릭 링크를 만들어 준다.

sudo ln -s -f libSDL2-2.0.so.0.22.0 libSDL2-2.0.so.0

sdl2.0을 사용하는 에뮬레이터를 빌드해 준다.

ge2d 사용한 코드에서는 src/video/mali-fbdev/SDL_maliopengles.c void MALI_Rotate_Blit(_THIS, SDL_Window *window, MALI_EGL_Surface *target, int rotation)

src/video/mali-fbdev/SDL_malivideo.c:

current_mode.w = data->vinfo.xres;
current_mode.h = data->vinfo.yres;

advmame build

git clone https://github.com/trngaje/advancemame.git

$ sudo apt-get update
$ sudo apt-get install build-essential git autoconf automake libsdl2-dev libasound2-dev libfreetype6-dev zlib1g-dev libexpat1-dev libslang2-dev libncurses5-dev

nbbatman 은 아래 에러를 출력하고 죽음 /lib/aarch64-linux-gnu/libc.so.6(__libc_start_main+0xe8) [0x7f89cd6e10] advmame(+0x7b05cc) [0x558eb965cc]

emuelec 에서 빌드하면 nbbatman 은 동작하지만 danceyes는 실행되지 않음 emuelec 에서 advmame 빌드 방법

PROJECT=Amlogic-ng ARCH=aarch64 DISTRO=EmuELEC scripts/build_mt advancemame

advmenu 분석 - 등록되어 있지 않은 조이패트를 추가하기 위해서는

/*
 * Include libretro definitions from:
 * https://github.com/libretro/retroarch-joypad-autoconfig/udev
 * and converted with joverride.python.
 */
#include "joverride.dat"
        };

advmame/advancemame/advance/linux$ python joverride.py odroidgo_joypad.cfg > j_odroidgou.dat

아래와 같이 생성이 됩니다.

/* odroidgo_joypad */
{ 0x484b, 0x1000, "odroidgo_joypad", 1, "a", JOYB_A },
{ 0x484b, 0x1000, "odroidgo_joypad", 0, "b", JOYB_B },
{ 0x484b, 0x1000, "odroidgo_joypad", 2, "x", JOYB_X },
{ 0x484b, 0x1000, "odroidgo_joypad", 3, "y", JOYB_Y },
{ 0x484b, 0x1000, "odroidgo_joypad", 4, "tl", JOYB_TL },
{ 0x484b, 0x1000, "odroidgo_joypad", 5, "tr", JOYB_TR },
{ 0x484b, 0x1000, "odroidgo_joypad", 6, "tl2", JOYB_TL2 },
{ 0x484b, 0x1000, "odroidgo_joypad", 7, "tr2", JOYB_TR2 },
{ 0x484b, 0x1000, "odroidgo_joypad", 14, "select", JOYB_SELECT },
{ 0x484b, 0x1000, "odroidgo_joypad", 15, "start", JOYB_START },

BTN_DPAD_UP / BTN_DPAD_DOWN / BTN_DPAD_LEFT / BTN_DPAD_RIGHT 는 어떻게 정의할 것인가?

gcc 버젼을 바꿔서 빌드 시도

gcc-7 버젼으로 시도

sudo apt-get install gcc-7 g++-7
CC=gcc-7 CXX=g++-7 ./configure --enable-video-opengles2 --disable-video-vulkan

gcc-4.7 버젼으로 시도 (ok)

sudo nano /etc/apt/sources.list
deb http://ports.ubuntu.com/ubuntu-ports xenial main
deb http://ports.ubuntu.com/ubuntu-ports xenial universe

sudo apt install gcc-4.7 g++-4.7 -y

CC=gcc-4.7 CXX=g++-4.7 ./configure --enable-video-opengles2 --disable-video-vulkan

참고:https://rottk.tistory.com/entry/Ubuntu-%EA%B5%AC%EB%B2%84%EC%A0%84-gcc-g-%EC%84%A4%EC%B9%98-%EB%B0%8F-%EA%B8%B0%EB%B3%B8%EB%B2%84%EC%A0%84-%EC%84%A0%ED%83%9D

retroarch build

retroarch dependency 확인

sudo apt-get install libudev-dev libxkbcommon-dev libsdl2-dev libasound2-dev libusb-1.0-0-dev libgles2-mesa-dev libgbm-dev libavcodec-dev libavformat-dev libavdevice-dev
sudo apt-get install libx11-xcb-dev libx11-xcb-dev libpulse-dev libvulkan-dev mali-fbdev

git clone https://github.com/libretro/RetroArch.git
git clone -b rgui_kor_bitmap_font_update https://github.com/trngaje/RetroArch.git

./configure --enable-opengles3 --enable-opengles --disable-x11 --enable-alsa --enable-udev  --enable-sdl2

동영상 녹화를 하기 위해서는 아래와 같이 configure 옵션이 추가되어야 합니다.

sudo apt-get install -y libudev-dev libxkbcommon-dev libsdl2-dev libasound2-dev libusb-1.0-0-dev libgles2-mesa-dev libgbm-dev libavcodec-dev libavformat-dev libavdevice-dev libx11-xcb-dev libx11-xcb-dev libpulse-dev libvulkan-dev ffmpeg


./configure --enable-alsa --enable-udev --disable-opengl1 --disable-opengl --enable-egl --enable-opengles --enable-opengles3 --disable-wayland --enable-sdl2  --enable-ffmpeg --disable-x11

menut show -> hide 시 freeze 되는 현상을 업애기 위해서는

alsa -> alsathread로 바꾸니 메뉴 hide 시 freeze되는 현상 사라짐

DinguxCommander 구동

DinguxCommander 에서는 키 값을 게임컨트롤 설정 값을 활용해서 구동하고 있습니다.

export SDL_GAMECONTROLLERCONFIG=”$(cat /home/odroid/controllerdb.txt)” odroid

openMSX build

gcc+10으로 빌드 필요함

sudo apt install gcc-7 g++-7 gcc-8 g++-8 gcc-9 g++-9 gcc-10 g++-10
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 90 --slave /usr/bin/g++ g++ /usr/bin/g++-9 --slave /usr/bin/gcov gcov /usr/bin/gcov-9
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 80 --slave /usr/bin/g++ g++ /usr/bin/g++-8 --slave /usr/bin/gcov gcov /usr/bin/gcov-8
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 70 --slave /usr/bin/g++ g++ /usr/bin/g++-7 --slave /usr/bin/gcov gcov /usr/bin/gcov-7
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 50 --slave /usr/bin/g++ g++ /usr/bin/g++-10 --slave /usr/bin/gcov gcov /usr/bin/gcov-10
sudo update-alternatives --config gcc

$ sudo apt-get update
sudo apt install libfreetype6-dev
$ sudo apt-get install libglew-dev libao-dev libogg-dev libtheora-dev libxml2-dev libvorbis-dev tcl-dev
./configure
make

bios 추가 방법

$ cd .openMSX/share/
$ wget http://bjorn.kuiper.nu/upload/retropie/systemroms.zip
sudo apt install unzip
$ unzip systemroms.zip
$ rm systemroms.zip

drastic

binary 묶음을 복사해주면 바로 실행이 된다. sdl2 se2d 적용된 버젼을 사용하면 키 입력시 화면 바로 업데이트 안되는 문제점이 존재한다. sdl2 nose2d 버젼은 실행되지 않는다.

jstest 설치 및 키값 확인

sudo apt-get install -y jstest-gtk

4 : l, 5 : r, 6:l2, 7:r2 8 : up, 9: down, 10:left, 11:right, 12:exit 17:capture 13 : menu, 14 : select, 15 : start 16 : pause

mupen64plus build

sudo apt-get install cmake libsamplerate0-dev libspeexdsp-dev libsdl2-dev libpng-dev libfreetype6-dev fonts-freefont-ttf libboost-filesystem-dev libgles2-mesa-dev libglew-dev libglu1-mesa-dev

make all -j7 BITS=64 USE_GLES=1 NEW_DYNAREC=1 V=1 HOST_CPU=aarch64 PIE=1 OPTFLAGS="-O3 -flto"

화면은 표시되지만 느림

PPSSPP building

git clone https://github.com/hrydgard/ppsspp.git --recursive
cd ppsspp/ffmpeg
./linux_arm64.sh
cd ..
mkdir build && cd build
cmake -DUSING_EGL=OFF -DUSING_GLES2=ON -DUSE_FFMPEG=YES -DUSE_SYSTEM_FFMPEG=NO ../.
make -j4
strip PPSSPPSDL

한글 폰트를 적용하기 위해서는

cd ~/.config/ppsspp/PSP
mkdir flash0
cd flash0
mkdir font
cd font
WinSCP 로 /home/odroid/.config/ppsspp/PSP/flash0/font 경로에 jpn0.pgf파일을 복사

2023

rgb30 빌드 환경

1 분 소요

rgb30 기기를 위한 이미지는 크게 jelos와 arkos가 존재합니다. 각각 다른 빌드 환경에서 에뮬레이터/프론트엔드/코어를 빌드 합니다.

8bitdo m30 for linux

최대 1 분 소요

Press and hold for 5 sec. If LED blinks, the mode has changed. There are three modes that can be set, and they are as follows.

rgnano build sm64

최대 1 분 소요

빌드를 하기 위해서는 docker 환경 내에서 작업 합니다.

rgnano ffmpeg build

1 분 소요

ffmpeg, ffplay 를 구동하기 위한 빌드환경을 설명합니다.

rgnano build 환경

1 분 소요

rgnano 용 이미지는 2종 (anbernic 생산 버젼, funkey DrUm78 custom 버젼) 존재합니다. 빌드 환경이 서로 다르기 때문에 각각 빌드된 프로그램은 실행되지 않음

rgnano simplemenu 구동

1 분 소요

rgnano는 240x240 해상도를 갖고 있다. 하지만 simplemenu는 320x240, 640x480 테마만 가지고 있다. rgnano에서 simplemenu 프론트엔드를 적용하기 위해서 기존 테마를 가공한 필요가 있었다.

miyoo mini + advmenu ip 및 배터리 값 표시

최대 1 분 소요

휴대용 기기를 위한 ip 주소 값과 배터리 상태 값을 표시한다. advmenu.rc 상에서 값 읽는 스크립트를 자유롭게 바꿀 수 있게 설계 한다. 메뉴 일부분을 한글로 구현 한다. core와 에뮬레이터를 advmenu 메뉴를 통해 변경할 수 있다.

miyoo mini + docker

최대 1 분 소요

mm+ 용 에뮬레이터를 빌드하기 위해서는 아래 toolchain을 사용해야 합니다. build 확인된 commit 시점으로 이동합니다.

miyoo mini + key value

최대 1 분 소요

miyoo mini + generates keyboard value when press each button. button value is below.

ogu linapple 구동

1 분 소요

linapple은 sdl1.2 기반으로 구현되어 있습니다. ogu에서 구동하기 위해서는 sdl2.0으로 변경 필요합니다.

ogu bluealsa 설치

1 분 소요

bt a2dp sink 출력을 하기 위해서는 pulseaudio를 설치해야 합니다만, bt 오디오 출력이 없어도 일정 수준으로 cpu를 사용하고 있기 때문에 다른 대안 중에 하나가 bluealsa 입니다.

ogu xpadneo 구동

3 분 소요

BT gamepad에서 진동 기능을 사용하려면 xpadneo를 설치해야 합니다. 기기 내에 linuxheader 를 설치 하고

ogu dosbox pure 로 windows95/98 설치

1 분 소요

ogu 에서 windows 95/98 용 프로그램을 실행하기 위해서는 dosbox pure를 사용하여 windows 95/98을 설치해야 합니다. 설치하기 위한 hdd.img 를 만들고, window 95/98 cd를 설치한 후, 원하는 게임롬과 함께 windows 95/98 os...

ogu flycast

1 분 소요

libretro core github에 있는 flycast 동작이 이상합니다. 개선을 위해 보다 최신 github 소스를 사용해 봅니다

맨 위로 이동 ↑

2022

ogu devilutionX 구동

최대 1 분 소요

diablo 이미지를 구동하기 위한 엔진입니다. 아래 방법으로 빌드 할 수 있습니다. docker 환경에서 빌드 가능합니다.

ogu gl4es

최대 1 분 소요

64bit / 32bit 모두 빌드 가능합니다.

ogu box86,box64

최대 1 분 소요

pc linux 용 x86/x64 를 arm 기기에서 실행하기 위해서는 box86,box64 가 필요합니다.

ogu sdcard 인식문제 해결 방법

2 분 소요

v1.1 (2022/09/26) ubuntu 20.04 기본 이미지에서는 reboot 시 sdcard 인식되지 않는 문제를 해결하기 위해서는 uboot와 kernel을 수정해야 합니다.

ogu mame current

최대 1 분 소요

mame는 빌드시 memory를 많이 필요로 하기 때문에 빌드 중간에 멈추는 현상을 방지하려면 사전에 swap 메모리 확보가 필요합니다.

ogu backup image

최대 1 분 소요

recovery mode 진입 : l2 + r2 + power 키로 전원을 키면 recovery mode로 진입한다.

ogu log

최대 1 분 소요

불필요한 log 가 쌓이는 것을 막기 위해서는 사이즈 제한을 해야 합니다.

ogu openbor

최대 1 분 소요

sudo apt install libvpx-dev libvorbisidec-dev git clone https://github.com/DCurrent/openbor

ogu easyrpg

최대 1 분 소요

easyrpg standalone 사용방법

ogu toolchain

1 분 소요

pc 환경에서 ogu 소스를 빌드하기 위해서는 toolchain을 설치해야 합니다. pc에서 빌드해야 하는 소스는 linux kernel과 uboot 이 있습니다.

ogu core build

최대 1 분 소요

retroarch core build 관련해서 정리해 봅니다.

ogu attractmode

최대 1 분 소요

ogu 장치에 맞게 attracmode 구동을 위한 sfml 라이브러리를 변경합니다.

ogu libgo2 코드 libgou로 수정

최대 1 분 소요

libgo2 로 작성된 코드를 libgou로 대체하기. retrorun go2와 gou 코드를 비교하여 기존에 작성된 코드를 수정한다.

ogu 자동실행 구문 수정

1 분 소요

ubuntu 에서 부팅시 자동으로 emulationstation을 실행해 주고 있으나, killall 로 죽여도 살아나기 때문에 개발에는 적합하지 않아 수정해 줍니다.

miyoo-mini rumble motor 제어 방법

2 분 소요

기술 관련 전문 (motor 테스트 앱에 포함되어 있는 pdf 에 적혀 있는 내용을 내마음 대로 번역해 보았습니다.)

하루전날 테스트

최대 1 분 소요

Welcome 포스팅이 되지 않아 하루전날 파일 생성해서 테스트 해봅니다.

맨 위로 이동 ↑