mirror of
https://github.com/InvisibleUp/uvmac.git
synced 2024-11-21 15:34:08 +00:00
Start implementing "config mode" graphics
I still need to re-do most of the rendering system to throw out all the jank, but this feels like a half-decent start imo. Yes, every page is just a separate .png file. I'm lazy. That works.
This commit is contained in:
parent
5c930e348e
commit
fa4bbacf3a
BIN
gfx/bootdlg/base.png
Normal file
BIN
gfx/bootdlg/base.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.8 KiB |
BIN
gfx/bootdlg/model.png
Normal file
BIN
gfx/bootdlg/model.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.8 KiB |
BIN
gfx/bootdlg/model_se30.png
Normal file
BIN
gfx/bootdlg/model_se30.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.8 KiB |
BIN
gfx/bootdlg/start.png
Normal file
BIN
gfx/bootdlg/start.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.2 KiB |
48
meson.build
48
meson.build
@ -38,7 +38,7 @@ conf = configuration_data({
|
||||
# Enable about dialog
|
||||
'NeedDoAboutMsg': 1,
|
||||
# Enable Control Mode (options menu)
|
||||
'UseControlKeys': 1,
|
||||
'UseControlKeys': 0,
|
||||
# Include international characters for Control Mode
|
||||
'NeedIntlChars': 0,
|
||||
# Force keyboard to match Mac layout on Windows
|
||||
@ -131,34 +131,22 @@ MAC_SRC = {
|
||||
}
|
||||
|
||||
# User interface definitions
|
||||
UI_SRC = {
|
||||
'WIN32': [
|
||||
'src/UI/COMOSGLU.c',
|
||||
'src/UI/CONTROLM.c',
|
||||
'src/UI/WIN32/DBGLOG.c',
|
||||
'src/UI/WIN32/INTLKBRD.c',
|
||||
'src/UI/WIN32/KEYBOARD.c',
|
||||
'src/UI/WIN32/OSGLUWIN.c',
|
||||
'src/UI/WIN32/SOUND.c',
|
||||
'src/UI/WIN32/TIMEDATE.c',
|
||||
'rsrc/WIN32/main.rc',
|
||||
],
|
||||
'SDL2': [
|
||||
'src/UI/COMOSGLU.c',
|
||||
'src/UI/CONTROLM.c',
|
||||
'src/UI/SDL2/OSGLUSD2.c',
|
||||
#'src/UI/SDL2/CLIPBRD.c',
|
||||
'src/UI/SDL2/DBGLOG.c',
|
||||
'src/UI/SDL2/DRIVES.c',
|
||||
'src/UI/SDL2/INTL.c',
|
||||
'src/UI/SDL2/KEYBOARD.c',
|
||||
'src/UI/SDL2/MOUSE.c',
|
||||
'src/UI/SDL2/ROM.c',
|
||||
'src/UI/SDL2/SOUND.c',
|
||||
'src/UI/SDL2/TIMEDATE.c',
|
||||
'src/UI/SDL2/VIDEO.c',
|
||||
]
|
||||
}
|
||||
UI_SRC = [
|
||||
'src/UI/COMOSGLU.c',
|
||||
'src/UI/CONTROLM.c',
|
||||
'src/UI/CONFIGM.c',
|
||||
'src/UI/SDL2/OSGLUSD2.c',
|
||||
#'src/UI/SDL2/CLIPBRD.c',
|
||||
'src/UI/SDL2/DBGLOG.c',
|
||||
'src/UI/SDL2/DRIVES.c',
|
||||
'src/UI/SDL2/INTL.c',
|
||||
'src/UI/SDL2/KEYBOARD.c',
|
||||
'src/UI/SDL2/MOUSE.c',
|
||||
'src/UI/SDL2/ROM.c',
|
||||
'src/UI/SDL2/SOUND.c',
|
||||
'src/UI/SDL2/TIMEDATE.c',
|
||||
'src/UI/SDL2/VIDEO.c',
|
||||
]
|
||||
|
||||
EMU_SRC = [
|
||||
'src/PROGMAIN.c',
|
||||
@ -177,7 +165,7 @@ EMU_INC = include_directories([
|
||||
# Just gonna do an SDL2 Mac Plus for now
|
||||
executable(
|
||||
'microvmac',
|
||||
sources: MAC_SRC['Plus'] + UI_SRC['SDL2'] + EMU_SRC,
|
||||
sources: MAC_SRC['Plus'] + UI_SRC + EMU_SRC,
|
||||
dependencies: [lSDL2],
|
||||
include_directories: EMU_INC,
|
||||
)
|
||||
|
53
src/HW/SCREEN/SCRNMAPR.c
Normal file
53
src/HW/SCREEN/SCRNMAPR.c
Normal file
@ -0,0 +1,53 @@
|
||||
/*
|
||||
HW/SCREEN/SCRNMAPR.h
|
||||
|
||||
Copyright (C) 2012 Paul C. Pratt
|
||||
|
||||
You can redistribute this file and/or modify it under the terms
|
||||
of version 2 of the GNU General Public License as published by
|
||||
the Free Software Foundation. You should have received a copy
|
||||
of the license along with this file; see the file COPYING.
|
||||
|
||||
This file is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
license for more details.
|
||||
*/
|
||||
|
||||
/*
|
||||
SCReeN MAPpeR
|
||||
*/
|
||||
|
||||
#include "SCRNMAPR.h"
|
||||
#include <assert.h>
|
||||
|
||||
void ScrnMapr_DoMap(
|
||||
rect_t region, rect_t bounds,
|
||||
const color_t *src, color_t *dst,
|
||||
uint8_t src_depth, uint8_t dst_depth,
|
||||
const color_t *map, uint8_t scale
|
||||
) {
|
||||
/* check of parameters */
|
||||
assert(src_depth >= 0);
|
||||
assert(src_depth <= 3);
|
||||
assert(dst_depth >= src_depth);
|
||||
|
||||
/* define variables */
|
||||
int x, y, sx, sy; // loop vars
|
||||
uint16_t line_width = bounds.right - bounds.left;
|
||||
|
||||
for (y = region.top; y < region.bottom; y += 1)
|
||||
{
|
||||
for (sy = 0; sy < scale - 1; sy += 1)
|
||||
{
|
||||
for (x = region.left; x < region.right; x += 1)
|
||||
{
|
||||
color_t color = src[(y+sy)*line_width + x];
|
||||
for (sx = 0; sx < scale - 1; sx += 1)
|
||||
{
|
||||
dst[(y+sy)*line_width + x*scale + sx] = map[color];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,168 +1,19 @@
|
||||
/*
|
||||
HW/SCREEN/SCRNMAPR.h
|
||||
/* SCRNMAPR.h */
|
||||
#include <stdint.h>
|
||||
#pragma once
|
||||
|
||||
Copyright (C) 2012 Paul C. Pratt
|
||||
typedef struct {
|
||||
uint16_t top;
|
||||
uint16_t left;
|
||||
uint16_t right;
|
||||
uint16_t bottom;
|
||||
} rect_t;
|
||||
|
||||
You can redistribute this file and/or modify it under the terms
|
||||
of version 2 of the GNU General Public License as published by
|
||||
the Free Software Foundation. You should have received a copy
|
||||
of the license along with this file; see the file COPYING.
|
||||
typedef uint32_t color_t;
|
||||
|
||||
This file is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
license for more details.
|
||||
*/
|
||||
|
||||
/*
|
||||
SCReeN MAPpeR
|
||||
*/
|
||||
|
||||
/* required arguments for this template */
|
||||
|
||||
#ifndef ScrnMapr_DoMap /* procedure to be created by this template */
|
||||
#error "ScrnMapr_DoMap not defined"
|
||||
#endif
|
||||
#ifndef ScrnMapr_Src
|
||||
#error "ScrnMapr_Src not defined"
|
||||
#endif
|
||||
#ifndef ScrnMapr_Dst
|
||||
#error "ScrnMapr_Dst not defined"
|
||||
#endif
|
||||
#ifndef ScrnMapr_SrcDepth
|
||||
#error "ScrnMapr_SrcDepth not defined"
|
||||
#endif
|
||||
#ifndef ScrnMapr_DstDepth
|
||||
#error "ScrnMapr_DstDepth not defined"
|
||||
#endif
|
||||
#ifndef ScrnMapr_Map
|
||||
#error "ScrnMapr_Map not defined"
|
||||
#endif
|
||||
|
||||
/* optional argument for this template */
|
||||
|
||||
#ifndef ScrnMapr_Scale
|
||||
#define ScrnMapr_Scale 1
|
||||
#endif
|
||||
|
||||
/* check of parameters */
|
||||
|
||||
#if (ScrnMapr_SrcDepth < 0) || (ScrnMapr_SrcDepth > 3)
|
||||
#error "bad ScrnMapr_SrcDepth"
|
||||
#endif
|
||||
|
||||
#if (ScrnMapr_DstDepth < ScrnMapr_SrcDepth)
|
||||
#error "bad ScrnMapr_Dst"
|
||||
#endif
|
||||
|
||||
/* calculate a few things local to this template */
|
||||
|
||||
#define ScrnMapr_MapElSz \
|
||||
(ScrnMapr_Scale << (ScrnMapr_DstDepth - ScrnMapr_SrcDepth))
|
||||
|
||||
#if 0 == (ScrnMapr_MapElSz & 3)
|
||||
#define ScrnMapr_TranT uint32_t
|
||||
#define ScrnMapr_TranLn2Sz 2
|
||||
#elif 0 == (ScrnMapr_MapElSz & 1)
|
||||
#define ScrnMapr_TranT uint16_t
|
||||
#define ScrnMapr_TranLn2Sz 1
|
||||
#else
|
||||
#define ScrnMapr_TranT uint8_t
|
||||
#define ScrnMapr_TranLn2Sz 0
|
||||
#endif
|
||||
|
||||
#define ScrnMapr_TranN (ScrnMapr_MapElSz >> ScrnMapr_TranLn2Sz)
|
||||
|
||||
#define ScrnMapr_ScrnWB (vMacScreenWidth >> (3 - ScrnMapr_SrcDepth))
|
||||
|
||||
/* now define the procedure */
|
||||
|
||||
LOCALPROC ScrnMapr_DoMap(int16_t top, int16_t left,
|
||||
int16_t bottom, int16_t right)
|
||||
{
|
||||
int i;
|
||||
int j;
|
||||
#if (ScrnMapr_TranN > 4) || (ScrnMapr_Scale > 2)
|
||||
int k;
|
||||
#endif
|
||||
uint32_t t0;
|
||||
ScrnMapr_TranT *pMap;
|
||||
#if ScrnMapr_Scale > 1
|
||||
ScrnMapr_TranT *p3;
|
||||
#endif
|
||||
|
||||
uint16_t leftB = left >> (3 - ScrnMapr_SrcDepth);
|
||||
uint16_t rightB = (right + (1 << (3 - ScrnMapr_SrcDepth)) - 1)
|
||||
>> (3 - ScrnMapr_SrcDepth);
|
||||
uint16_t jn = rightB - leftB;
|
||||
uint16_t SrcSkip = ScrnMapr_ScrnWB - jn;
|
||||
uint8_t *pSrc = ((uint8_t *)ScrnMapr_Src)
|
||||
+ leftB + ScrnMapr_ScrnWB * (uint32_t)top;
|
||||
ScrnMapr_TranT *pDst = ((ScrnMapr_TranT *)ScrnMapr_Dst)
|
||||
+ ((leftB + ScrnMapr_ScrnWB * ScrnMapr_Scale * (uint32_t)top)
|
||||
* ScrnMapr_TranN);
|
||||
uint32_t DstSkip = SrcSkip * ScrnMapr_TranN;
|
||||
|
||||
for (i = bottom - top; --i >= 0; ) {
|
||||
#if ScrnMapr_Scale > 1
|
||||
p3 = pDst;
|
||||
#endif
|
||||
|
||||
for (j = jn; --j >= 0; ) {
|
||||
t0 = *pSrc++;
|
||||
pMap =
|
||||
&((ScrnMapr_TranT *)ScrnMapr_Map)[t0 * ScrnMapr_TranN];
|
||||
|
||||
#if ScrnMapr_TranN > 4
|
||||
for (k = ScrnMapr_TranN; --k >= 0; ) {
|
||||
*pDst++ = *pMap++;
|
||||
}
|
||||
#else
|
||||
|
||||
#if ScrnMapr_TranN >= 2
|
||||
*pDst++ = *pMap++;
|
||||
#endif
|
||||
#if ScrnMapr_TranN >= 3
|
||||
*pDst++ = *pMap++;
|
||||
#endif
|
||||
#if ScrnMapr_TranN >= 4
|
||||
*pDst++ = *pMap++;
|
||||
#endif
|
||||
*pDst++ = *pMap;
|
||||
|
||||
#endif /* ! ScrnMapr_TranN > 4 */
|
||||
|
||||
}
|
||||
pSrc += SrcSkip;
|
||||
pDst += DstSkip;
|
||||
|
||||
#if ScrnMapr_Scale > 1
|
||||
#if ScrnMapr_Scale > 2
|
||||
for (k = ScrnMapr_Scale - 1; --k >= 0; )
|
||||
#endif
|
||||
{
|
||||
pMap = p3;
|
||||
for (j = ScrnMapr_TranN * jn; --j >= 0; ) {
|
||||
*pDst++ = *pMap++;
|
||||
}
|
||||
pDst += DstSkip;
|
||||
}
|
||||
#endif /* ScrnMapr_Scale > 1 */
|
||||
}
|
||||
}
|
||||
|
||||
/* undefine template locals and parameters */
|
||||
|
||||
#undef ScrnMapr_ScrnWB
|
||||
#undef ScrnMapr_TranN
|
||||
#undef ScrnMapr_TranLn2Sz
|
||||
#undef ScrnMapr_TranT
|
||||
#undef ScrnMapr_MapElSz
|
||||
|
||||
#undef ScrnMapr_DoMap
|
||||
#undef ScrnMapr_Src
|
||||
#undef ScrnMapr_Dst
|
||||
#undef ScrnMapr_SrcDepth
|
||||
#undef ScrnMapr_DstDepth
|
||||
#undef ScrnMapr_Map
|
||||
#undef ScrnMapr_Scale
|
||||
// Copy a rectangular bitmap region, scaling and converting color depth as needed
|
||||
void ScrnMapr_DoMap(
|
||||
rect_t bounds,
|
||||
const uint8_t *src, uint8_t *dst, uint8_t src_depth, uint8_t dst_depth,
|
||||
const uint8_t *map, uint8_t scale
|
||||
);
|
||||
|
22
src/UI/CONFIGM.c
Normal file
22
src/UI/CONFIGM.c
Normal file
@ -0,0 +1,22 @@
|
||||
/*
|
||||
* CONFIG Mode
|
||||
*
|
||||
* A replacement for Control Mode, with prettier grapgics and actual settings
|
||||
*
|
||||
*/
|
||||
|
||||
#include <SDL2.h> // everything else is deprecated now
|
||||
#include <stdlib.h>
|
||||
#include <stdint.h>
|
||||
#include "CONFIGM.h"
|
||||
#include "UI/SDL2/OSGLUSD2.h"
|
||||
|
||||
/* -- Public Functions -- */
|
||||
|
||||
void ConfigMode_Tick()
|
||||
{
|
||||
// Get the screen context and just draw something there for now
|
||||
|
||||
SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);
|
||||
SDL_RenderDrawRect(renderer, {.x = 16, .y = 16, .w = 128, .h = 128});
|
||||
}
|
11
src/UI/CONFIGM.h
Normal file
11
src/UI/CONFIGM.h
Normal file
@ -0,0 +1,11 @@
|
||||
/*
|
||||
* CONFIG Mode
|
||||
*
|
||||
* A replacement for Control Mode, with prettier grapgics and actual settings
|
||||
*
|
||||
*/
|
||||
|
||||
/* -- functions -- */
|
||||
|
||||
// Run this once every frame, I guess
|
||||
void ConfigMode_Tick();
|
Loading…
Reference in New Issue
Block a user