clockworkpi

Custom D.E.O.T. V2.0+/Clockwork OS v0.5 image - With customised DEOT interface, Kernel 5.7, Optional 1400MHz OC, Debian 10 Buster, Retroarch 1.8.9, Mupen64+ plus more! (Current build: 200626)

Hello! Welcome to the forums!
Do you mean, a minute as in 60 seconds, or the figurative way of saying “a minute” being a few seconds after entering the launcher?
Are you referring to the refresh rate of the launcher, refresh rate of an emulator, or some kind of V-Sync issue within either?
Unfortunately I can’t see what your image you posted is. it’s just a thumbnail of an image.

Another thing it could be is the governor kicking in, changing the clock speed. Either that or the IO scheduler. That said, it shouldn’t fluctuate enough to have a visible change in clock frequency. Also, on build, the kernel was set to use the Performance governor, which should be having the clock speed fairly consistent.
Screen Shot 2020-03-15 at 9.38.21 pm
Screen Shot 2020-03-15 at 9.40.04 pm
Perhaps it could be something to do with background processes starting up. That said, I don’t experience this screen not refreshing well. I guess for now, if you could clarify what your symptoms are, I can look into it more.
For now, I’ll try writing my image to a completely different card. I use the stock grey and white 16GB cards that come with the Gameshell to test, since that is something I know that everyone has in common.

I was thinking of potentially using a different governor, but since the kernel config wasn’t made by me, i felt it disrespectful to the author to change things from stock. That said, I did change the boot splash screen. But that was something that was included as a stock Clockwork Pi asset. A lot of moral issues haha!

I suppose I could change up the kernel a bit, using a different governor, turn off all debugging features, and anything else that people might want changed.

One more thing! Is this something you experience with the stock 0.5 image too?

Hello
Thank you for a quick response.
Please find below to link with better quality videos
https://drive.google.com/drive/folders/1wuA3Cov01gzMy0l9F7j6WNPe_o1hv8MZ?usp=sharing

Answering your questions:

  1. by saying a minute, I wanted to highlight that the described issue disappears when I am using GameShell. I didn’t count time precisely, but I would say that issue is visible 60-120 seconds
  2. "Are you referring to the refresh rate of the launcher, … " - I am referring to the launcher
  3. I am using a Samsung 128GB EVO card, I also tried with Orginal GameShell SanDisk Ultra 16GB the same result.
  4. I flashed both cards using Etcher (1.5.79) on my MacBook
  5. " … you experience with the stock 0.5 image too" - to be honest, I didn’t try with 0.5 stock, but I am also curious If I will get the same issue. Let me try. I will come back to you.

Thanks for help
Cheers

1 Like

WOAH THAT IS STRANGE! I definitely don’t get anything like that!
I’m curious as to what revision board you have. It could be related.
Could you check that in settings>about, and post what it says under processor?
Both of my gameshells I’ve tested on are ARMv7 Processor rev 5 (v71).
Have you made any other mods to the system, re: battery upgrades or anything else?
Also, could you try and expand the image to take up the entire 128GB space? It should’t be the case, but it could be header related re: partition table.

For now, also try this.

Download this file.

Decompress and copy the contents of it to /home/cpi

Mount the boot partition with sudo mount /dev/mmcblk0p1 /boot

Move the files to the boot partition with:

sudo mv uImage /boot
sudo mv sun8i-r16-clockworkpi-cpi3.dtb /boot
sudo mv sun8i-r16-clockworkpi-cpi3-hdmi.dtb /boot

Reboot with sudo reboot

  1. Coming back to our previous discussion … you experience with the stock 0.5 image too"
  • I tried to build the image on my MacBook using Etcher (1.5.79)
    when I lunch it on my GameShell, it didn’t work. I saw only an initial screen with a clockwork logo. It was looping all over time.

  • then I’ve tried to create a bootable disk on windows 10 using.
    I successfully create it, and it works perfectly fine.

  • I thought that if I successfully created a bootable disk on Windows, I do it the same with image DEOT v2+ Build 200313. Unfortunately, that was the wrong direction.

Coming back to your questions

  1. " board you have."

  2. Have you made any other mods to the system, re: battery upgrades or anything else
    nope - all parts are original

  3. For now, also try this.
    I am following your instructions with below output.

cpi@clockworkpi:~$ sudo mount /dev/mmcblk0p1 /boot

cpi@clockworkpi:~$ sudo mv uImage /boot

mv: failed to preserve ownership for ‘/boot/uImage’: Operation not permitted

Thanks for getting back! :slight_smile:

  1. The stock 0.5 image needs to loop a few times for the initial auto expansion. Let it sit for a few minutes and see how it goes. Although, if it’s going to show the weird refresh problems, it would show it then as well.

I personally use a program called “Apple Pi Baker” for writing images on my MacBook. Ie it’s what I used ages ago for raspberry pi purposes. Give that a go. Not sure why making a bootable disk worked, since you’re writing an image sector by sector.

  1. Sounds like we have the same revision board. That said your DEOT front shell is different fo mine. Mine doesn’t have ”Dimenstional Engineering Technology” written above the speaker.

  2. I’m guessing you just got the gameshell, and have never used it before. Did the stock 0.4 DEOT image have the problem? And also when you got the 0.5 image working, did it have the problem?

  3. I think the file move still worked. Just ownership wasn’t preserved. It should still be there. Check the kernel version in settings>about. It should have gone up to 5.4.21. Any changes? I’ve written the image to another sandisk 32GB Card. Everything was fine. I’ll try on a 64GB and 128GB Card after work. I’m due for an upgrade anyway, what with the amount of DS and PSX emulation I’ve been doing lately.

Another thing to try is using the stock Grey and white 16GB sandisk SD card that came with the console.
I remember reading another user here (I think @adcockm) having troubles writing the stock 0.5 image to his 400GB card taking up the space.

Although not directly related, in order to get the first boot screen, I stripped the first 1M of the stock raw DEOT image and replaced them on the stock image. I’m in the process of hex editing it to determine where the start and finish of the boot splash image is, so that the partition table, and any other parts of the first 1M remain untouched.

For this reason, potentially larger SD cards become affected due to this. In testing just trimming the first 1M, I used the header from a 16GB image on a 32GB card. This resulted in a boot loop. As long as the header of the source matches the destination, seemingly all was well. If there is some extra indiscrepancy with larger SD cards, I would need to look into it further. This is why I assumed that by doing an expansion to take up the entire SD card space, the header would get updated accordingly.

I’ve just tested the same image on a 128GB Sandisk Ultra A1 card. All seems to be good. I haven’t got any A2 cards unfortunately. Hopefully someone else can test it if they use/own one.

Back on topic re: progress on the image:
In summary:

  1. Wonderswan icon colour fixed
  2. Made SCUMMVM games directory
  3. drastic.cfg modified for screen display
  4. mupen64plus.cfg modified with updated keybindings for C buttons
  5. Kernel 5.5.9 tested, and 1400MHz overclock tested.
  6. Include script to test out kernel and dtb clock settings, and change back
  7. Slight palette change to desktopbg.jpg to match the overall DEOT feel.
  8. Removal of LauncherGo and settings list item.
More info
  1. I made a change to the skin file slightly, for those wanting to just incrementally download things themselves. A small colour change to the Wonderswan icon, since the blue was a little bit off. Also, updating the main skin with all of the most current changes.
    https://drive.google.com/open?id=1nGaprKSo875NLkASRDpUkXUR4atnkD7F

  2. I forgot to add a directory called “SCUMMVM” in /home/cpi/games/
    Just add that, and then add SCUMMVM games to that if you use it.

  3. I also modified the drastic.cfg file slightly, after realising that some games on DS prefer to have the bottom screen as the main display, eg Dragon Quest VI. Some other DS games also have the screens tiled. I simply changed the behaviour of the screen switch using shift + A/B.

frameskip_type = 2
frameskip_value = 4
show_frame_counter = 0
screen_orientation = 2
screen_scaling = 2
screen_swap = 0
savestate_number = 0
fast_forward = 0
enable_sound = 1
clock_speed = 0
threaded_3d = 1
mirror_touch = 0
compress_savestates = 1
savestate_snapshot = 1
unzip_roms = 1
backup_in_savestates = 1
ignore_gamecard_limit = 0
frame_interval = 0
trim_roms = 1
fix_main_2d_screen = 0
disable_edge_marking = 0
hires_3d = 0
use_rtc_custom_time = 0
rtc_custom_time = 0
rtc_system_time = 0
firmware.username = DEOT
firmware.language = 1
firmware.favorite_color = 0
firmware.birthday_month = 1
firmware.birthday_day = 2
enable_cheats = 1
controls_a[CONTROL_INDEX_UP] = 338
controls_a[CONTROL_INDEX_DOWN] = 337
controls_a[CONTROL_INDEX_LEFT] = 336
controls_a[CONTROL_INDEX_RIGHT] = 335
controls_a[CONTROL_INDEX_A] = 107
controls_a[CONTROL_INDEX_B] = 106
controls_a[CONTROL_INDEX_X] = 105
controls_a[CONTROL_INDEX_Y] = 117
controls_a[CONTROL_INDEX_L] = 121
controls_a[CONTROL_INDEX_R] = 111
controls_a[CONTROL_INDEX_START] = 13
controls_a[CONTROL_INDEX_SELECT] = 32
controls_a[CONTROL_INDEX_HINGE] = 8
controls_a[CONTROL_INDEX_TOUCH_CURSOR_UP] =
controls_a[CONTROL_INDEX_TOUCH_CURSOR_DOWN] =
controls_a[CONTROL_INDEX_TOUCH_CURSOR_LEFT] =
controls_a[CONTROL_INDEX_TOUCH_CURSOR_RIGHT] =
controls_a[CONTROL_INDEX_TOUCH_CURSOR_PRESS] =
controls_a[CONTROL_INDEX_MENU] = 8
controls_a[CONTROL_INDEX_SAVE_STATE] =
controls_a[CONTROL_INDEX_LOAD_STATE] =
controls_a[CONTROL_INDEX_FAST_FORWARD] = 
controls_a[CONTROL_INDEX_SWAP_SCREENS] = 108
controls_a[CONTROL_INDEX_SWAP_ORIENTATION_A] = 
controls_a[CONTROL_INDEX_SWAP_ORIENTATION_B] = 104
controls_a[CONTROL_INDEX_LOAD_GAME] =
controls_a[CONTROL_INDEX_QUIT] =
controls_a[CONTROL_INDEX_UI_UP] = 338
controls_a[CONTROL_INDEX_UI_DOWN] =337
controls_a[CONTROL_INDEX_UI_LEFT] = 336
controls_a[CONTROL_INDEX_UI_RIGHT] = 335
controls_a[CONTROL_INDEX_UI_SELECT] = 107
controls_a[CONTROL_INDEX_UI_BACK] = 106
controls_a[CONTROL_INDEX_UI_EXIT] = 27
controls_a[CONTROL_INDEX_UI_PAGE_UP] = 111
controls_a[CONTROL_INDEX_UI_PAGE_DOWN] = 121
controls_a[CONTROL_INDEX_UI_SWITCH] = 32
controls_b[CONTROL_INDEX_UP] =
controls_b[CONTROL_INDEX_DOWN] =
controls_b[CONTROL_INDEX_LEFT] =
controls_b[CONTROL_INDEX_RIGHT] =
controls_b[CONTROL_INDEX_A] =
controls_b[CONTROL_INDEX_B] =
controls_b[CONTROL_INDEX_X] =
controls_b[CONTROL_INDEX_Y] =
controls_b[CONTROL_INDEX_L] =
controls_b[CONTROL_INDEX_R] =
controls_b[CONTROL_INDEX_START] =
controls_b[CONTROL_INDEX_SELECT] =
controls_b[CONTROL_INDEX_HINGE] =
controls_b[CONTROL_INDEX_TOUCH_CURSOR_UP] =
controls_b[CONTROL_INDEX_TOUCH_CURSOR_DOWN] =
controls_b[CONTROL_INDEX_TOUCH_CURSOR_LEFT] =
controls_b[CONTROL_INDEX_TOUCH_CURSOR_RIGHT] =
controls_b[CONTROL_INDEX_TOUCH_CURSOR_PRESS] =
controls_b[CONTROL_INDEX_MENU] =
controls_b[CONTROL_INDEX_SAVE_STATE] =
controls_b[CONTROL_INDEX_LOAD_STATE] =
controls_b[CONTROL_INDEX_FAST_FORWARD] =
controls_b[CONTROL_INDEX_SWAP_SCREENS] =
controls_b[CONTROL_INDEX_SWAP_ORIENTATION_A] =
controls_b[CONTROL_INDEX_SWAP_ORIENTATION_B] =
controls_b[CONTROL_INDEX_LOAD_GAME] =
controls_b[CONTROL_INDEX_QUIT] =
controls_b[CONTROL_INDEX_UI_UP] =
controls_b[CONTROL_INDEX_UI_DOWN] =
controls_b[CONTROL_INDEX_UI_LEFT] =
controls_b[CONTROL_INDEX_UI_RIGHT] =
controls_b[CONTROL_INDEX_UI_SELECT] =
controls_b[CONTROL_INDEX_UI_BACK] =
controls_b[CONTROL_INDEX_UI_EXIT] =
controls_b[CONTROL_INDEX_UI_PAGE_UP] =
controls_b[CONTROL_INDEX_UI_PAGE_DOWN] =
controls_b[CONTROL_INDEX_UI_SWITCH] =

If you haven’t already installed Drastic, give it a go. It works very well. See this post:
Desmume or MelonDS

  1. I’ve also modified the controls of mupen a little bit, just to make the C buttons match up more with the shift + ABXY buttons. C-Up and C-Down were mixed up.
# Mupen64Plus Configuration File
# This file is automatically read and written by the Mupen64Plus Core library

[64DD]

# Filename of the 64DD IPL ROM
IPL-ROM = ""
# Filename of the disk to load into Disk Drive
Disk = ""


[Audio-SDL]

# Mupen64Plus SDL Audio Plugin config parameter version number
Version = 1.000000
# Frequency which is used if rom doesn't want to change it
DEFAULT_FREQUENCY = 33600
# Swaps left and right channels
SWAP_CHANNELS = False
# Size of primary buffer in output samples. This is where audio is loaded after it's extracted from n64's memory.
PRIMARY_BUFFER_SIZE = 16384
# Fullness level target for Primary audio buffer, in equivalent output samples. This value must be larger than the SECONDARY_BUFFER_SIZE. Decreasing this value will reduce audio latency but requires a faster PC to avoid choppiness. Increasing this will increase audio latency but reduce the chance of drop-outs.
PRIMARY_BUFFER_TARGET = 2048
# Size of secondary buffer in output samples. This is SDL's hardware buffer. The SDL documentation states that this should be a power of two between 512 and 8192.
SECONDARY_BUFFER_SIZE = 1024
# Audio resampling algorithm. src-sinc-best-quality, src-sinc-medium-quality, src-sinc-fastest, src-zero-order-hold, src-linear, speex-fixed-{10-0}, trivial
RESAMPLE = "trivial"
# Volume control type: 1 = SDL (only affects Mupen64Plus output)  2 = OSS mixer (adjusts master PC volume)
VOLUME_CONTROL_TYPE = 1
# Percentage change each time the volume is increased or decreased
VOLUME_ADJUST = 5
# Default volume when a game is started.  Only used if VOLUME_CONTROL_TYPE is 1
VOLUME_DEFAULT = 80
# Synchronize Video/Audio
AUDIO_SYNC = False


[Core]

# Mupen64Plus Core config parameter set version number.  Please don't change this version number.
Version = 1.010000
# Draw on-screen display if True, otherwise don't draw OSD
OnScreenDisplay = False
# Use Pure Interpreter if 0, Cached Interpreter if 1, or Dynamic Recompiler if 2 or more
R4300Emulator = 2
# Disable compiled jump commands in dynamic recompiler (should be set to False)
NoCompiledJump = False
# Disable 4MB expansion RAM pack. May be necessary for some games
DisableExtraMem = True
# Increment the save state slot after each save operation
AutoStateSlotIncrement = False
# Activate the R4300 debugger when ROM execution begins, if core was built with Debugger support
EnableDebugger = False
# Save state slot (0-9) to use when saving/loading the emulator state
CurrentStateSlot = 0
# Path to directory where screenshots are saved. If this is blank, the default value of ${UserDataPath}/screenshot will be used
ScreenshotPath = ""
# Path to directory where emulator save states (snapshots) are saved. If this is blank, the default value of ${UserDataPath}/save will be used
SaveStatePath = ""
# Path to directory where SRAM/EEPROM data (in-game saves) are stored. If this is blank, the default value of ${UserDataPath}/save will be used
SaveSRAMPath = ""
# Path to a directory to search when looking for shared data files
SharedDataPath = ""
# Force number of cycles per emulated instruction
CountPerOp = 0
# Randomize PI/SI Interrupt Timing
RandomizeInterrupt = True
# Duration of SI DMA (-1: use per game settings)
SiDmaDuration = -1
# Gameboy Camera Video Capture backend
GbCameraVideoCaptureBackend1 = ""


[CoreEvents]

# Mupen64Plus CoreEvents config parameter set version number.  Please don't change this version number.
Version = 1.000000
# SDL keysym for stopping the emulator
Kbd Mapping Stop = 8
# SDL keysym for switching between fullscreen/windowed modes
Kbd Mapping Fullscreen = 0
# SDL keysym for saving the emulator state
Kbd Mapping Save State = 269
# SDL keysym for loading the emulator state
Kbd Mapping Load State = 270
# SDL keysym for advancing the save state slot
Kbd Mapping Increment Slot = 0
# SDL keysym for resetting the emulator
Kbd Mapping Reset = 290
# SDL keysym for slowing down the emulator
Kbd Mapping Speed Down = 291
# SDL keysym for speeding up the emulator
Kbd Mapping Speed Up = 292
# SDL keysym for taking a screenshot
Kbd Mapping Screenshot = 293
# SDL keysym for pausing the emulator
Kbd Mapping Pause = 112
# SDL keysym for muting/unmuting the sound
Kbd Mapping Mute = 109
# SDL keysym for increasing the volume
Kbd Mapping Increase Volume = 93
# SDL keysym for decreasing the volume
Kbd Mapping Decrease Volume = 91
# SDL keysym for temporarily going really fast
Kbd Mapping Fast Forward = 27
# SDL keysym for advancing by one frame when paused
Kbd Mapping Frame Advance = 47
# SDL keysym for pressing the game shark button
Kbd Mapping Gameshark = 103
# Joystick event string for stopping the emulator
Joy Mapping Stop = ""
# Joystick event string for switching between fullscreen/windowed modes
Joy Mapping Fullscreen = ""
# Joystick event string for saving the emulator state
Joy Mapping Save State = ""
# Joystick event string for loading the emulator state
Joy Mapping Load State = ""
# Joystick event string for advancing the save state slot
Joy Mapping Increment Slot = ""
# Joystick event string for resetting the emulator
Joy Mapping Reset = ""
# Joystick event string for slowing down the emulator
Joy Mapping Speed Down = ""
# Joystick event string for speeding up the emulator
Joy Mapping Speed Up = ""
# Joystick event string for taking a screenshot
Joy Mapping Screenshot = ""
# Joystick event string for pausing the emulator
Joy Mapping Pause = ""
# Joystick event string for muting/unmuting the sound
Joy Mapping Mute = ""
# Joystick event string for increasing the volume
Joy Mapping Increase Volume = ""
# Joystick event string for decreasing the volume
Joy Mapping Decrease Volume = ""
# Joystick event string for fast-forward
Joy Mapping Fast Forward = ""
# Joystick event string for advancing by one frame when paused
Joy Mapping Frame Advance = ""
# Joystick event string for pressing the game shark button
Joy Mapping Gameshark = ""


[Input-SDL-Control1]

# Mupen64Plus SDL Input Plugin config parameter version number.  Please don't change this version number.
version = 2.000000
# Controller configuration mode: 0=Fully Manual, 1=Auto with named SDL Device, 2=Fully automatic
mode = 0
# Specifies which joystick is bound to this controller: -1=No joystick, 0 or more= SDL Joystick number
device = -1
# SDL joystick name (or Keyboard)
name = "Keyboard"
# Specifies whether this controller is 'plugged in' to the simulated N64
plugged = True
# Specifies which type of expansion pak is in the controller: 1=None, 2=Mem pak, 4=Transfer pak, 5=Rumble pak
plugin = 2
# If True, then mouse buttons may be used with this controller
mouse = False
# Scaling factor for mouse movements.  For X, Y axes.
MouseSensitivity = "2.00,2.00"
# The minimum absolute value of the SDL analog joystick axis to move the N64 controller axis value from 0.  For X, Y axes.
AnalogDeadzone = "4096,4096"
# An absolute value of the SDL joystick axis >= AnalogPeak will saturate the N64 controller axis value (at 80).  For X, Y axes. For each axis, this must be greater than the corresponding AnalogDeadzone value
AnalogPeak = "32768,32768"
# Digital button configuration mappings
DPad R = "key(100)"
DPad L = "key(97)"
DPad D = "key(115)"
DPad U = "key(119)"
Start = "key(13)"
Z Trig = "key(105)"
B Button = "key(117)"
A Button = "key(106)"
C Button R = "key(108)"
C Button L = "key(121)"
C Button D = "key(104)"
C Button U = "key(111)"
R Trig = "key(107)"
L Trig = "key(32)"
Mempak switch = "key(44)"
Rumblepak switch = "key(46)"
# Analog axis configuration mappings
X Axis = "key(276,275)"
Y Axis = "key(273,274)"


[Input-SDL-Control2]

# Mupen64Plus SDL Input Plugin config parameter version number.  Please don't change this version number.
version = 2.000000
# Controller configuration mode: 0=Fully Manual, 1=Auto with named SDL Device, 2=Fully automatic
mode = 2
# Specifies which joystick is bound to this controller: -1=No joystick, 0 or more= SDL Joystick number
device = -1
# SDL joystick name (or Keyboard)
name = ""
# Specifies whether this controller is 'plugged in' to the simulated N64
plugged = False
# Specifies which type of expansion pak is in the controller: 1=None, 2=Mem pak, 4=Transfer pak, 5=Rumble pak
plugin = 2
# If True, then mouse buttons may be used with this controller
mouse = False
# Scaling factor for mouse movements.  For X, Y axes.
MouseSensitivity = "2.00,2.00"
# The minimum absolute value of the SDL analog joystick axis to move the N64 controller axis value from 0.  For X, Y axes.
AnalogDeadzone = "4096,4096"
# An absolute value of the SDL joystick axis >= AnalogPeak will saturate the N64 controller axis value (at 80).  For X, Y axes. For each axis, this must be greater than the corresponding AnalogDeadzone value
AnalogPeak = "32768,32768"
# Digital button configuration mappings
DPad R = ""
DPad L = ""
DPad D = ""
DPad U = ""
Start = ""
Z Trig = ""
B Button = ""
A Button = ""
C Button R = ""
C Button L = ""
C Button D = ""
C Button U = ""
R Trig = ""
L Trig = ""
Mempak switch = ""
Rumblepak switch = ""
# Analog axis configuration mappings
X Axis = ""
Y Axis = ""


[Input-SDL-Control3]

# Mupen64Plus SDL Input Plugin config parameter version number.  Please don't change this version number.
version = 2.000000
# Controller configuration mode: 0=Fully Manual, 1=Auto with named SDL Device, 2=Fully automatic
mode = 2
# Specifies which joystick is bound to this controller: -1=No joystick, 0 or more= SDL Joystick number
device = -1
# SDL joystick name (or Keyboard)
name = ""
# Specifies whether this controller is 'plugged in' to the simulated N64
plugged = False
# Specifies which type of expansion pak is in the controller: 1=None, 2=Mem pak, 4=Transfer pak, 5=Rumble pak
plugin = 2
# If True, then mouse buttons may be used with this controller
mouse = False
# Scaling factor for mouse movements.  For X, Y axes.
MouseSensitivity = "2.00,2.00"
# The minimum absolute value of the SDL analog joystick axis to move the N64 controller axis value from 0.  For X, Y axes.
AnalogDeadzone = "4096,4096"
# An absolute value of the SDL joystick axis >= AnalogPeak will saturate the N64 controller axis value (at 80).  For X, Y axes. For each axis, this must be greater than the corresponding AnalogDeadzone value
AnalogPeak = "32768,32768"
# Digital button configuration mappings
DPad R = ""
DPad L = ""
DPad D = ""
DPad U = ""
Start = ""
Z Trig = ""
B Button = ""
A Button = ""
C Button R = ""
C Button L = ""
C Button D = ""
C Button U = ""
R Trig = ""
L Trig = ""
Mempak switch = ""
Rumblepak switch = ""
# Analog axis configuration mappings
X Axis = ""
Y Axis = ""


[Input-SDL-Control4]

# Mupen64Plus SDL Input Plugin config parameter version number.  Please don't change this version number.
version = 2.000000
# Controller configuration mode: 0=Fully Manual, 1=Auto with named SDL Device, 2=Fully automatic
mode = 2
# Specifies which joystick is bound to this controller: -1=No joystick, 0 or more= SDL Joystick number
device = -1
# SDL joystick name (or Keyboard)
name = ""
# Specifies whether this controller is 'plugged in' to the simulated N64
plugged = False
# Specifies which type of expansion pak is in the controller: 1=None, 2=Mem pak, 4=Transfer pak, 5=Rumble pak
plugin = 2
# If True, then mouse buttons may be used with this controller
mouse = False
# Scaling factor for mouse movements.  For X, Y axes.
MouseSensitivity = "2.00,2.00"
# The minimum absolute value of the SDL analog joystick axis to move the N64 controller axis value from 0.  For X, Y axes.
AnalogDeadzone = "4096,4096"
# An absolute value of the SDL joystick axis >= AnalogPeak will saturate the N64 controller axis value (at 80).  For X, Y axes. For each axis, this must be greater than the corresponding AnalogDeadzone value
AnalogPeak = "32768,32768"
# Digital button configuration mappings
DPad R = ""
DPad L = ""
DPad D = ""
DPad U = ""
Start = ""
Z Trig = ""
B Button = ""
A Button = ""
C Button R = ""
C Button L = ""
C Button D = ""
C Button U = ""
R Trig = ""
L Trig = ""
Mempak switch = ""
Rumblepak switch = ""
# Analog axis configuration mappings
X Axis = ""
Y Axis = ""


[Rsp-HLE]

# Mupen64Plus RSP HLE Plugin config parameter version number
Version = 1.000000
# Path to a RSP plugin which will be used when encountering an unknown ucode.You can disable this by letting an empty string.
RspFallback = ""
# Send display lists to the graphics plugin
DisplayListToGraphicsPlugin = True
# Send audio lists to the audio plugin
AudioListToAudioPlugin = False


[Transferpak]

# Filename of the GB ROM to load into transferpak 1
GB-rom-1 = ""
# Filename of the GB RAM to load into transferpak 1
GB-ram-1 = ""
# Filename of the GB ROM to load into transferpak 2
GB-rom-2 = ""
# Filename of the GB RAM to load into transferpak 2
GB-ram-2 = ""
# Filename of the GB ROM to load into transferpak 3
GB-rom-3 = ""
# Filename of the GB RAM to load into transferpak 3
GB-ram-3 = ""
# Filename of the GB ROM to load into transferpak 4
GB-rom-4 = ""
# Filename of the GB RAM to load into transferpak 4
GB-ram-4 = ""


[UI-Console]

# Mupen64Plus UI-Console config parameter set version number.  Please don't change this version number.
Version = 1.000000
# Directory in which to search for plugins
PluginDir = "/usr/local/lib/mupen64plus/"
# Filename of video plugin
VideoPlugin = "mupen64plus-video-rice.so"
# Filename of audio plugin
AudioPlugin = "mupen64plus-audio-sdl.so"
# Filename of input plugin
InputPlugin = "mupen64plus-input-sdl.so"
# Filename of RSP plugin
RspPlugin = "mupen64plus-rsp-hle.so"


[Video-General]

# Use fullscreen mode if True, or windowed mode if False
Fullscreen = True
# Width of output window or fullscreen width
ScreenWidth = 320
# Height of output window or fullscreen height
ScreenHeight = 240
# If true, activate the SDL_GL_SWAP_CONTROL attribute
VerticalSync = True


[Video-Rice]

# Mupen64Plus Rice Video Plugin config parameter version number
Version = 1
# Frame Buffer Emulation (0=ROM default, 1=disable)
FrameBufferSetting = 0
# Frequency to write back the frame buffer (0=every frame, 1=every other frame, etc)
FrameBufferWriteBackControl = 0
# Render-to-texture emulation (0=none, 1=ignore, 2=normal, 3=write back, 4=write back and reload)
RenderToTexture = 4
# Control when the screen will be updated (0=ROM default, 1=VI origin update, 2=VI origin change, 3=CI change, 4=first CI change, 5=first primitive draw, 6=before screen clear, 7=after screen drawn)
ScreenUpdateSetting = 4
# Force to use normal alpha blender
NormalAlphaBlender = False
# Use a faster algorithm to speed up texture loading and CRC computation
FastTextureLoading = False
# Use different texture coordinate clamping code
AccurateTextureMapping = False
# Force emulated frame buffers to be in N64 native resolution
InN64Resolution = 3
# Try to reduce Video RAM usage (should never be used)
SaveVRAM = False
# Enable this option to have better render-to-texture quality
DoubleSizeForSmallTxtrBuf = 4
# Force to use normal color combiner
DefaultCombinerDisable = False
# Enable game-specific settings from INI file
EnableHacks = False
# If enabled, graphics will be drawn in WinFrame mode instead of solid and texture mode
WinFrameMode = False
# N64 Texture Memory Full Emulation (may fix some games, may break others)
FullTMEMEmulation = False
# Enable vertex clipper for fog operations
OpenGLVertexClipper = False
# Enable/Disable SSE optimizations for capable CPUs
EnableSSE = True
# If this option is enabled, the plugin will skip every other frame
SkipFrame = False
# If enabled, texture enhancement will be done only for TxtRect ucode
TexRectOnly = False
# If enabled, texture enhancement will be done only for textures width+height<=128
SmallTextureOnly = False
# Select hi-resolution textures based only on the CRC and ignore format+size information (Glide64 compatibility)
LoadHiResCRCOnly = True
# Enable hi-resolution texture file loading
LoadHiResTextures = False
# Enable texture dumping
DumpTexturesToFiles = False
# Display On-screen FPS
ShowFPS = False
# Use Mipmapping? 0=no, 1=nearest, 2=bilinear, 3=trilinear
Mipmapping = 0
# Enable, Disable fog generation (0=Disable, 1=Enable)
FogMethod = 0
# Force to use texture filtering or not (0=auto: n64 choose, 1=force no filtering, 2=force filtering)
ForceTextureFilter = 0
# Primary texture enhancement filter (0=None, 1=2X, 2=2XSAI, 3=HQ2X, 4=LQ2X, 5=HQ4X, 6=Sharpen, 7=Sharpen More, 8=External, 9=Mirrored)
TextureEnhancement = 0
# Secondary texture enhancement filter (0 = none, 1-4 = filtered)
TextureEnhancementControl = 0
# Color bit depth to use for textures (0=default, 1=32 bits, 2=16 bits)
TextureQuality = 2
# Z-buffer depth (only 16 or 32)
OpenGLDepthBufferSetting = 16
# Enable/Disable MultiSampling (0=off, 2,4,8,16=quality)
MultiSampling = 0
# Color bit depth for rendering window (0=32 bits, 1=16 bits)
ColorQuality = 0
# OpenGL level to support (0=auto, 1=OGL_FRAGMENT_PROGRAM)
OpenGLRenderSetting = 0
# Enable/Disable Anisotropic Filtering for Mipmapping (0=no filtering, 2-16=quality). This is uneffective if Mipmapping is 0. If the given value is to high to be supported by your graphic card, the value will be the highest value your graphic card can support. Better result with Trilinear filtering
AnisotropicFiltering = 0
# If true, use polygon offset values specified below
ForcePolygonOffset = False
# Specifies a scale factor that is used to create a variable depth offset for each polygon
PolygonOffsetFactor = 0.000000
# Is multiplied by an implementation-specific value to create a constant depth offset
PolygonOffsetUnits = 0.000000
  1. I’m mucking around with the 5.5.9 kernel, just to see how the schedutil governor behaves.
    Hopefully we can get 1400GHz to be somewhat standardised and not be too much of a power drain.
    Running 5.5.9 at 1400MHz is very nice. Without the OC, dragon quest VI on DS runs very choppy at times, especially with fog. Likewise, banjo Kazooie has slow downs when too many models appear on screen at once. The kernel/OC combo basically addresses both. Zelda Ocarina of Time on Mupen is now VERY playable.

  2. I’ve made a simple script to copy whatever kernel and dtb file into the boot partition to let you set each up respectively. Maybe I should release the next version with stock speeds/kernel, with the option of enabling the newer and faster combo as a test.

Here’s a link to the small script: (Note: This is purely for testing! It is an overclock after all, and I can’t guarantee what the results of using this will be)
https://drive.google.com/open?id=1x1_jhFIaBlrRvuugzQNVMvZ25hVot4Qg
Copy the 07_Clockspeed and 08_Kernel folders to /home/cpi/apps/Menu/60_Utils/, then give all of the *.sh scripts the executable bit, ie chmod +x filename.sh (if they need it - they shouldn’t)
Running each will overwrite whatever is in your boot partition, so as a precaution backup before using this. This script doesn’t back up your original kernel/dtb file. As the name of each script would suggest, it goes between the stock Kernel versions 5.4.21 (The version on the current 2003131 build is 5.4.20, so this is a small incremental upgrade) and the current latest stable 5.5.9. I wouldn’t normally recommend using an untested new kernel; instead preferring to use old stable. But this image is about pushing limits, and testing what the newest things are.
Likewise, it has scripts for going between 1008MHz (stock) and an experimental overclocked 1400MHz. This is using the work of @Joao_Manoel as seen here: (with a few modifications, eg extra governors, custom boot screen etc.)
1.2GHz and beyond

For more information re: how to manually change clock speeds etc, check out here:
https://wiki.archlinux.org/index.php/CPU_frequency_scaling
@adcockm - That could be useful for what you were asking in this post.
Custom D.E.O.T. V2.0+/Clockwork OS v0.5 image - With customised DEOT interface, Kernel 5.4.20, Debian 10 Buster, Retroarch 1.8.4, Mupen64+ plus more! (Current build: 200313)

  1. Just for contiguity, I changed the palette of the desktopbg.jpg file, normally only visible while connected via HDMI. My OCD was getting the better of me, and I needed it changed. The file goes in /home/cpi/launcher/sys.py/gameshell/wallpaper/ and also resides in /home/cpi/skins/DEOT/sys.py/gameshell/wallpaper/ but doesn’t appear to serve any function here.
    Here’s what it looks like. (it used to be an orange palette, and was clashing HORRIBLE with the DEOT colours.

  2. I just loaded up the launcher go for fun. Boy was I in for a shock. Compared to the main launcher, the Launched go had some major lag issues. There was no wrap around cursor. Input would be delayed. Frame rate of moving items was very slow. I remember hearing of potential removal in a future official image. I may just take the liberty of removing it earlier, along with the removal of the “switch to launcher go” settings list item. I don’t think it will be too missed, since it hasn’t been maintained for a long time.

I don’t see this being that big an update, so won’t make an update any time soon. I’ll provide info on how to do changes, where they are somewhat significant. Eg, potential Kernel changes etc.

A lot of my evenings where I would normally rehearse and perform (I’m a musician) are freed up due to the recent pandemic etc, so I will be a lot more free to mess about with the gameshell. I’ll start focussing on getting the Settings pages to be closer to the stock DEOT image.

I’m also thinking, as good as the DEOT image is, this might be a good opportunity to make an original graphical UI. Even one based on a different launcher.

I do wonder, are most of the people who use this image a) those who own a DEOT gameshell wanting to have the DEOT theme, b) those who just like the darker theme, c) people who like the maintained features, d) people wanting a out of box pre-set up OS, e) people just wanting something different. It would be interesting to know for future releases.

Why have you chosen to download and use this custom community image?

  • I’m a DEOT owner who wanted an updated DEOT OS
  • I just like a darker theme
  • I like to see maintained features
  • I want an out of box preset OS
  • I just want something different
  • Other

0 voters

2 Likes

Since maintained features are a high point for this image, I will upload my progress as it happens, whenever I can. Of course, as I always have, I’ll provide instructions and thought processes so that you don’t necessarily need to download the latest one; instead applying the updates yourself.

Here we go!

DEOT v2+ Build 200318
18th of March 2020

  • Wonderswan icon colour fixed
  • Made SCUMMVM games directory
  • drastic.cfg modified for screen display
  • mupen64plus.cfg modified with updated keybindings for C buttons
  • Kernel 5.5.9 tested, and 1400MHz overclock tested.
  • Include script to test out kernel and dtb clock settings, and change back
  • Slight palette change to desktopbg.jpg to match the overall DEOT feel.

As usual, I will upload the image to the initial post of this thread.


Shortly after, I’ll upload it to Mega.

I haven’t removed the LauncherGo and related settings page entry, as I didn’t have time, would have rushed it, and could have made a mistake. It’s not that big a thing anyway. :slight_smile:
Also, I’ll be shrinking my images down, zeroing the empty space, and applying an auto expand script in future as well. At the very least, it will make writing the image to SD faster.

2 Likes

Thanks for updating it. I wonder if I can just apply things in your previous comment instead of re-frash newest image.
I’m currently at build 200313, mainly use GS for Snes + GBA emulators and Pico-8 dev. I read your changelog and only want to try out new kernel.

One more thing, I see in your 07_Clockspeed folder, there was file named 1800, while shell script pointed to 1008. :smiley:

1 Like

OH. MY. GOODNESS!!! Thank you so much for pointing this out!!! Ahhh!! I would not have noticed this!!! Okay. I am going to have to reupload the image I think. This is a worthy thing. Otherwise it’s a one way street to an overclock. That said, once you go to 1400, seriously; you won’t look back. ;). I just put it there as a contingency plan, in case you did.

You 100% can just apply things from my comment. I put them there for that exact reason. I didn’t make a script based change, or something based on warehouse, because I know something will break when someone tries to apply it to an existing image with unknown variables. This way, you can see exactly what you’re doing and how you’re doing it.

I actually keep a separate card for mucking around on (it gets wiped a lot) a card kept pristine reflecting the current build, and my day to day build with a few extra games that I basically test, and modify. When they show promise to be included, they get added to my pristine gold master ready for uploading.

The good news is 200313 came with an updated Debian 10 Buster. Only because it’s what I’ve tested, but I remember reading some features included within the kernel are either available only on the current stable current Debian build, or on an SID release. You’ll have to cross reference kernel features to find out which things work with what build.

For the record, the main things I was experimenting with was different governors for CPU scaling. A couple of new ones popped up in this kernel release. What I could get from most of them however was that the launcher only appears to play nice when you have it set to performance.

I haven’t tried all of them yet, but at least with it ondemand and scedutil I would get extremely sluggish scrolling. Kind of like how slow it is when connected via HDMI. This is using both the TWM and DWM window managers. I thought that might have been the cause. I might try interactive next when I get home.

If you do decide to test further, and update to Debian 11 Bullseye, you may need to run a few extra scripts to ensure Lima drivers remain working. You can find exactly what I ran looking in /home/cpi/.bash_history. I left it there for that exact reason.

Again, thank you so much for letting me know of the typo! I knew I released it prematurely! :smiley:

1 Like

IMPORTANT! If you downloaded the 200318 build earlier today, either redownload it, or edit the file in 07_Clockspeed from 1800 to 1008. See above.

I have uploaded a new version aptly named the same thing, ie build 200318. I didn’t call it anythign else, because according to my click-o-meter, I don’t think anyone downloaded the initial one yet.

I have made another build 200319, with a significantly smaller footprint. I finally got around to setting up a proper linux environment, so did what I should have done a long time ago. I’ve essentially defragmented the image, zeroed the empty space, and shrunk the image size down to half the size. I’ve also applied guu’s autoexpansion script, which means it should behave identically to the official 0.5 image re: filling up all the space. I will continue to provide one with and without, since I recall some users having troubles with the expansion taking up the entirety of their larger capacity SD cards. Consider this a test version to see if I actually applied the above correctly.

Also, haha! It’s 3.14GB. Ah, if only I uploaded this on the 14th of March! It would have been the perfect Pi day contribution!

And now the Mega download link is up, if you want a faster download. It’s in the first post of this thread as usual. And don’t forget - be patient the first time it boots up. I’d almost even consider plugging it into power while doing so. Who knows what could happen if you lost power partway through expanding the partition? Well, not much since you’re basically starting fresh anyway. :slight_smile:

1 Like

And of course I end up doing something new tonight AFTER I upload the above image!

Good news! I got the stock settings page items working.
They’re the ones featured in this promotional material on the top right two panels. (I have no idea where that Loading screen comes from - I’ve never seen it!)

Here are the details.

I was right, regarding referenced fonts not lining up.

Initially, what I tried was substituting the referenced font names with the stock font names of 0.5. The DEOT OS uses the Eurostile font a lot, whereas stock 0.5 doesn’t.
Needless to say, the launcher wouldn’t progress if any changes were made.

I didn’t want to touch the /home/cpi/launcher/sys.py/UI/skin_manager.py, since being within the launcher directory, it would get overwritten with the stock version upon updating, which would cause problems re: the launcher not loading.

But realistically, if the skin_manager.py was going to get updated/replaced with stock, chances are the /home/cpi/launcher/Menu/GameShell/10_Settings/ would also get completely overwritten, preventing the launcher freeze happening.

That and the fact that we haven’t seen a launcher update for a while. So I went ahead and modified the skin_manager.py file like this:

# -*- coding: utf-8 -*-

import pygame
import config
import ConfigParser

from util_funcs  import FileExists

class CaseConfigParser(ConfigParser.SafeConfigParser):
    def optionxform(self, optionstr):
        return optionstr

class SkinManager(object):
    """
    _HighColor = pygame.Color(51,166,255) # #33a6ff
    _TextColor = pygame.Color(83,83,83) # #535353
    _FrontColor = pygame.Color(131,199,219) ## light blue,#83c7db
    _URLColor  = pygame.Color(51,166,255) ## blue more #33a6ff
    _LineColor = pygame.Color(169,169,169)  # #a9a9a9
    _TitleBgColor = pygame.Color(228,228,228)  # #e4e4e4
    _ActiveColor = pygame.Color(175,90,0) ## light brown  #af5a00
    """
    
    _Colors = {}
    _Config = None
    _Fonts = {}
    DefaultSkin = "../skin/default"

    def __init__(self):
        self.Init()

    def ConvertToRGB(self,hexstr):
        
        h = hexstr.lstrip('#')
        return tuple(int(h[i:i+2], 16) for i in (0, 2 ,4))
    
    def Init(self):
        if not SkinManager._Colors:
            self.SetColors()
        if not SkinManager._Fonts:
            self.SetFonts()
    
    def SetFonts(self):
        if not pygame.font.get_init():
            pygame.font.init()
            
        skinpath = config.SKIN+"/truetype"
        fonts_path = {}
        fonts_path["varela"]   = "%s/VarelaRound-Regular.ttf" % skinpath
        print(fonts_path["varela"])
        fonts_path["veramono"] = "%s/VeraMono.ttf" % skinpath
        fonts_path["noto"]     = "%s/NotoSansMono-Regular.ttf" % skinpath
        fonts_path["notocjk"]     = "%s/NotoSansCJK-Regular.ttf" % skinpath
     	fonts_path["Eurostile"] = "%s/EurostileMN-Medium.pfb.ttf" %skinpath
        fonts_path["EurostileBold"] = "%s/EurostileMN-ExtendedBold.pfb.ttf" % skinpath
        
        
        self._Fonts["EurostileBold13"]  = pygame.font.Font(fonts_path["EurostileBold"],13)        
        self._Fonts["EurostileBold30"]  = pygame.font.Font(fonts_path["EurostileBold"],30)
        
        for i in range(10,29):
          self._Fonts["varela%d"%i] = pygame.font.Font(fonts_path["Eurostile"],i)
          
        self._Fonts["Eurostile34"] = pygame.font.Font(fonts_path["Eurostile"],34)
        self._Fonts["Eurostile40"] = pygame.font.Font(fonts_path["Eurostile"],40)
        self._Fonts["Eurostile120"] = pygame.font.Font(fonts_path["Eurostile"],120)
        

        for i in range(10,29):
          self._Fonts["varela%d"%i] = pygame.font.Font(fonts_path["varela"],i)
          
        self._Fonts["varela34"] = pygame.font.Font(fonts_path["varela"],34)
        self._Fonts["varela40"] = pygame.font.Font(fonts_path["varela"],40)
        self._Fonts["varela120"] = pygame.font.Font(fonts_path["varela"],120)
        
        for i in range(10,26):
            self._Fonts["veramono%d"%i] = pygame.font.Font(fonts_path["veramono"],i)
        
        for i in range(10,28):
            self._Fonts["notosansmono%d"%i] = pygame.font.Font(fonts_path["noto"],i)

        for i in range(10,28):
            self._Fonts["notosanscjk%d"%i] = pygame.font.Font(fonts_path["notocjk"],i)
    
        self._Fonts["arial"] = pygame.font.SysFont("arial",16)
        
    def SetColors(self):
        Colors = {}
        Colors["High"] = pygame.Color(51, 166, 255)
        Colors["Text"] = pygame.Color(83, 83, 83)
        Colors["ReadOnlyText"] = pygame.Color(130,130,130)
        Colors["Front"] = pygame.Color(131, 199, 219)
        Colors["URL"] = pygame.Color(51, 166, 255)
        Colors["Line"] = pygame.Color(169, 169, 169)
        Colors["TitleBg"] = pygame.Color(228, 228, 228)
        Colors["Active"] = pygame.Color(175, 90, 0)
        Colors["Disabled"] = pygame.Color(204, 204, 204)
        Colors["White"] = pygame.Color(255, 255, 255)
        Colors["Black"] = pygame.Color(0, 0, 0)

        SkinManager._Colors = Colors

        self._Config = CaseConfigParser()

        fname = config.SKIN+"/config.ini"

        try:
            self._Config.read(fname)
        except Exception, e:
            print("read skin config.cfg error %s" % str(e))
            return
        else:
            if "Colors" in self._Config.sections():
                colour_opts = self._Config.options("Colors")
#                print(colour_opts)
                for i in SkinManager._Colors:
                    if i in colour_opts:
                        try:
                            SkinManager._Colors[i] = self.ConvertToRGB(
                                self._Config.get("Colors", i))
                        except Exception, e:
                            print("error in ConvertToRGB %s" % str(e))
                            continue
    
    def GiveFont(self,name):
        return SkinManager._Fonts[name]
        
    def GiveColor(self,name):
        if name in SkinManager._Colors:
            return SkinManager._Colors[name]
        else:
            return  pygame.Color(255,0,0)
    
    def GiveIcon(self,orig_file_or_dir): ## return is string,not Surface
        #doing a wrapper for items under /home/cpi/apps/Menu/*, to be like Menu/GameShell/*
        if orig_file_or_dir.startswith("/home/cpi/apps/Menu"):
            orig_file_or_dir = orig_file_or_dir.replace("/home/cpi/apps/Menu/","../Menu/GameShell/")
    
        if orig_file_or_dir.startswith(".."):
            ret  = orig_file_or_dir.replace("..",config.SKIN)
            if FileExists(ret) == False:
                ret = orig_file_or_dir.replace("..",self.DefaultSkin)
        else:
            ret = config.SKIN+"/sys.py/"+orig_file_or_dir
            if FileExists(ret) == False:
                ret = self.DefaultSkin+"/sys.py/"+orig_file_or_dir
    
        if FileExists( ret ):
            return ret
        else:  ## if not existed both in default or custom skin ,return where it is
            return orig_file_or_dir
            
    def GiveWallpaper(self,png_name):
        #first SKIN/wallpapers/xxxx.png
        #second ../skin/default/wallpapers/xxxx.png
        #finnal gameshell/wallpaper/xxxx.png
        #loading.png,seeyou.png,updating.png,gameover.png,desktopbg.png
        wlp = "/wallpaper/"
        if FileExists(config.SKIN+wlp+png_name):
            return config.SKIN+wlp+png_name
        elif FileExists(self.DefaultSkin+wlp+png_name):
            return self.DefaultSkin+wlp+png_name
        else:
            return "gameshell/wallpaper/"+png_name
            
        
            
##global MySkinManager Handler
MySkinManager = None

def InitMySkinManager():
    global MySkinManager
    if MySkinManager == None:
        MySkinManager = SkinManager()
    

InitMySkinManager()

I simply added more font choices, and reference names to the list, without removing anything.
This allows us to now use these customised settings menu items.

  • Airplane
  • Brightness
  • Sound
  • Storage

While I was at it, I removed LauncherGo entirely.
I removed the directory /home/cpi/launcher/Menu/GameShell/10_Settings/LauncherGo/ , and went ahead and removed /home/cpi/launchergo/
And then I commented out the entry within the settings menu like so:

# -*- coding: utf-8 -*- 

import pygame
import sys

from libs.roundrects import aa_round_rect

## local UI import
from UI.constants import Width,Height
from UI.page   import Page,PageSelector
from UI.label  import Label
from UI.util_funcs import midRect,FileExists
from UI.keys_def   import CurKeys, IsKeyStartOrA, IsKeyMenuOrB
from UI.scroller   import ListScroller
from UI.skin_manager import MySkinManager
from UI.lang_manager import MyLangManager
from UI.info_page_selector import InfoPageSelector

from list_item  import ListItem

import myvars

class ListPage(Page):

    _Icons = {}
    _Selector=None
    
    _FootMsg = ["Nav","","","Back","Enter"]
    _MyList = []
    _ListFontObj = MyLangManager.TrFont("varela15")

    _Scroller = None
    
    def __init__(self):
        Page.__init__(self)
        self._Icons = {}
        self._CanvasHWND = None
        self._MyList = []
        
    def Init(self):
        self._PosX = self._Index * self._Screen._Width
        self._Width = self._Screen._Width
        self._Height = self._Screen._Height

        self._CanvasHWND = self._Screen._CanvasHWND

        ps = InfoPageSelector()
        ps._Parent = self
        ps._PosX = 2
        self._Ps = ps
        self._PsIndex = 0
        
        #                ""   pkgname, label
        alist         = [["","Airplane","Airplane Mode"],
                         ["","PowerOptions","Power Options"],
                         ["","Wifi","Wi-Fi"],
                         ["","Bluetooth","Bluetooth"],
                         ["","Sound","Sound  Volume"],
                         ["","Brightness","BackLight Brightness"],
                         ["","Storage",""],
                         ["","Time","Timezone"],
                         ["","Languages","Languages"],
                         ["","Notification","Notification"],
                         ["","Update", ""],
                         ["","Cores", "Retroarch cores manager"],
                         ["","About",  "About"],
                         ["","PowerOFF","Power OFF"],
                         ["","ButtonsLayout","Buttons Layout"],
                         #["","LauncherGo","Switch to LauncherGo"],
                         ["","Lima","GPU Driver Switch"],
                         ["","GateWay","Network Gateway Switch"]]

        start_x  = 0
        start_y  = 0

        
        sys.path.append(myvars.basepath)# add self as import path
        for i,v in enumerate(alist):
            li = ListItem()
            li._Parent = self
            li._PosX   = start_x
            li._PosY   = start_y + i*ListItem._Height
            li._Width  = Width
            li._Fonts["normal"] = self._ListFontObj

            if v[2] != "":
                li.Init(v[2])
            else:
                li.Init(v[1])
            
            #if v[1] == "Wifi" or v[1] == "Sound" or v[1] == "Brightness" or v[1] == "Storage" or v[1] == "Update" or v[1] == "About" or v[1] == "PowerOFF" or v[1] == "HelloWorld":
            if FileExists(myvars.basepath+"/"+ v[1]):
                li._LinkObj = __import__(v[1])
                init_cb   = getattr(li._LinkObj,"Init",None)
                if init_cb != None:
                    if callable(init_cb):
                        li._LinkObj.Init(self._Screen)
                
                self._MyList.append(li)

        self._Scroller = ListScroller()
        self._Scroller._Parent = self
        self._Scroller._PosX = self._Width - 10
        self._Scroller._PosY = 2
        self._Scroller.Init()

    def Click(self):
        cur_li = self._MyList[self._PsIndex]
        if cur_li._LinkObj != None:
            api_cb = getattr(cur_li._LinkObj,"API",None)
            if api_cb != None:
                if callable(api_cb):
                    cur_li._LinkObj.API(self._Screen)

        
    def KeyDown(self,event):
        if IsKeyMenuOrB(event.key):
            self.ReturnToUpLevelPage()
            self._Screen.Draw()
            self._Screen.SwapAndShow()
        
        if event.key == CurKeys["Up"]:
            self.ScrollUp()
            self._Screen.Draw()
            self._Screen.SwapAndShow()
        if event.key == CurKeys["Down"]:
            self.ScrollDown()
            self._Screen.Draw()
            self._Screen.SwapAndShow()
        

        if IsKeyStartOrA(event.key):
            self.Click()
            
    def Draw(self):
        self.ClearCanvas()

        if len(self._MyList) * ListItem._Height > self._Height:
            self._Ps._Width = self._Width - 11
            
            self._Ps.Draw()
            
            for i in self._MyList:
                i.Draw()
        
            self._Scroller.UpdateSize( len(self._MyList)*ListItem._Height, self._PsIndex*ListItem._Height)
            self._Scroller.Draw()
        else:
            self._Ps._Width = self._Width
            self._Ps.Draw()
            for i in self._MyList:
                i.Draw()

We’re getting much closer to the DEOT settings! ALMOST. The settings pages for Airplane and Storage still causes the system to freeze. The Sound and Brightness pages however work beautifully!

Other things that were bugging me were the shapes of certain objects, such as the scroll bar, text highlighter and OSD of the volume bars. These are basically all contained in /home/cpi/launcher/sys.py.UI/ . For the most part, I just substituted the files from the DEOT stock image.
The scroller is controlled by scroller.py
I couldn’t work out the text highlighter. I tried slider.py, to no avail.
The OSD of the volume bars is controller by above_all_patch.py, however substituting it in prevents the launcher from progressing.

Anyway, that’s where I’m at. This could prove to be useful information for someone else wanting to modify the interface. I can possibly provide a script to allow people to try installing this. But really, this is just an aesthetic thing that serves no purpose, and something that could later on down the track break detrimentally. I’m going to test it A LOT!
Here’s a link to the files I replaced, along with backups of the original ones in case you want to try things out for yourself. The files with the asterisk next to them are the problematic items.
https://drive.google.com/open?id=1gf97OddpWn9JjSfM7A3UhxtN0tvYnWvQ

For those of you in Europe, good news! @Wizz has just uploaded the two latest builds to his Europe based server. You can find them in the first post of this thread:

And just reiterating, They’re both practically the same. Just the 200319 version is a smaller image, and automatically will expand upon boot. It’s my first time modifying the OS as such, and although I have thoroughly tested it, can’t guarantee there won’t be any issues. There shouldn’t be, but that kind of thinking is a sure shot way to find out you’ve made a mistake.

So it seems that there are at least 3 cases of people experiencing flickering screens with the latest build.
The main things changes are:

  1. Kernel
  2. Debian 10 Buster
  3. Re-installed Lima/Mesa to restore usage on Buster

I’ve tested it on multiple cards, and on two Gameshell systems. Both of them are the R16 variant, but not the R16J.

Here are some discussions about it.

For now, @yong, @Veronica and anyone else on the know, is there anyway do specifically order a gameshell with a known R16J? I would love to have one in order to test things. Also if you have any idea on the proportions of the CPI with the R16 and R16J and I guess any other variants of the board? I would very much love to get my hands on one, specifically for testing features.

Here’s the initial thread.

I just want to replace or reinstall the Lima driver to the stcok image have. May be you can tell me the step, I will try it . My device mainboard is R16J

lima is included into the kernel, but you could reinstall mesa

latest arch got latest mesa & kernel got beta lima 1.1 if you want made a try

1 Like

hey So the scan disk I have is
SanDisk Ultra PLUS 128 GB micro SD XC V10 A1

1 Like

Yes one more here, I’m using a sandisk extreme 128gb :S

1 Like

Exactly my thinking. The kernel was upgraded to 5.4.20, using @shell’s config. That’s the one that’s set as the default kernel. The optional kernel is 5.5.90. Possibly rolling back to the stock 5.3.6 kernel, including the older driver could fix this.

That said, the kernel portion of the Lima driver has been (I believe) standardised since 5.2.
https://linux-sunxi.org/Mali
This makes me believe it’s not from the drivers used in the kernel, but something else.

The Mesa installed was using this method, mainly using your words of advice @r043v.
Does GameShell Actually Use FBTurbo?
It’s using Mesa 20.0, ie this version:
https://www.phoronix.com/scan.php?page=news_item&px=Mesa-20.0-Released
This was installed over an updated Debian 10 Buster build.

I will certainly try downloading and updating to the beta Lima 1.1 drivers, but without a board that exhibits the symptoms, I have no idea if it would be effective or not.
Here’s some resources:

I’m wondering, has the flickering only started since the latest 200318/200319 builds? @guu - I remember talking to you about the reasons for including a uImage.5.4.6 on the stock 0.5 image boot partition, despite using 5.3.6. You said it was to do with incompatibility with some boards. Was this flickering the kind of incompatibility you were talking about?

@shell - while making your latest config for the 5.4.20 kernel (the one that I’m using by default) did you experience any problems re: flickering, going between changes? I’m finding it perfect, but again it sounds like there’s an inconsistency between boards. I believe the variants include either a R16 or R16J. You can check which one you have, looking at the physical board. It is writing on one of the larger chips.

A poll would be a good gauge on how people are experiencing the latest changes.

Describe your experience

  • I’m using a R16 board.
  • I’m using a R16J board.
  • I’m experiencing flickering at startup.
  • The flickering is only during the boot splash screens.
  • The flickering stays indefinitely.
  • The flickering stops after a minute.
  • I’m not experiencing flickering at all.

0 voters

@Larry_Covington - thanks for getting back. You’re using EXACTLY the same card as me. Can I confirm, you said in the other thread that everything worked fine on another card. Was this correct? And if so, what kind of card was it? This is exciting and baffling!

@1115 Thanks for letting me know which bird revision you’ve got. Ahh you have a R16J! Both of mine are just R16! I think we’re getting closer to solving the problem, meaning that I may need to release 2 versions. As mentioned above I don’t think we need to roll back FHD entire Mesa libraries, but just the kernel. Here are some instructions to return to the stock 5.3.6 kernel from a stock clockwork OS 0.5. This means you will lose the splash screen.
Download this: https://drive.google.com/file/d/1LknqAy6vfIs5vTIKhsB_0MNUw548NS-u/view?usp=drivesdk
From memory there are two directories: one with the stock 0.5 kernel files, and one with the stock deot v1 kernel files.
Copy the contents of the stock 0.5 kernel files to /home/cpi/
Mount the boot partition with sudo mount /dev/mmcblk0p1 /boot
Move the files with

sudo mv uImage /boot
sudo mv sun8i-r16-clockworkpi-cpi3.dtb /boot
sudo mv sun8i-r16-clockworkpi-cpi3-hdmi.dtb /boot

Reboot with sudo reboot
Please let me know if it works! If it does, I will make a new build including this as a kernel option.

Just saying, if anyone wants to swap boards, ie your R16J for my R16, I would be happy to do so, for the furthering of development. You get a working board; I get something to test on to help the community. It’s a win win scenario! Let me know!

According to @Veronica , the R16 and R16J are meant to be the same; just different batches.


Perhaps they aren’t as similar as we thought?

@yong and @Veronica - is there any way you can help me out, specifically checking to see if a gameshell that I acquire from you is a R16J board?

The 5.4.20 kernel works fine for me.As you mentioned,the lima driver stabilized since kernel 5.2,and didn’t change much after that.So there may be some other reasons.
I have only one GameShell which has R16-J board,so I don’t know if R16 boards have issues or not,the shop who’s selling R16 chip told me that there’s no difference between R16 and R16-J processor,so maybe someone in Clockwork can tell is there any other difference between two boards.

1 Like

OK, it’s worked, when I replaced files in /boot with you give me those. But when I change the kernel with the OS builtin kernel change, all of those bug come back agaiin.

2 Likes