Виж темите без отговор | Виж активните теми
Дата и час: Вто Май 30, 2023 10:54 am
Автор |
Съобщение |
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 11:48 am Мнения: 4029
|
 Re: Microchip
аман от шрифтове...
_________________main[-1u]={1};http://www.wizio.eu/
|
Чет Мар 16, 2023 11:09 am |
|
 |
palavrov
Ранг: Форумен бог
Регистриран на: Вто Окт 11, 2011 10:53 pm Мнения: 3561 Местоположение: Brussels / Пловдив
|
 Re: Microchip
Добре ти се е получило. Едно време т.е. 90-те бях направил едно ГУИ на Ц++ за ДОС и му бях вкарал сумата шрифтове - като почнеш от разните кирилизации, после през разни библиотеки с шрифтове и май и от бозата бях взаимствал един два. Бях си написал и редактор за "уникалния" формат на шрифтовете. Ама нито сорсовете ги знам къде са нито дали ще успее да се компилира и подкара след повече от 20 години. Всичко беше за Борланд Ц 3.1.
_________________ Мразя да мразя ...
Последна промяна palavrov на Чет Мар 16, 2023 1:10 pm, променена общо 1 път
|
Чет Мар 16, 2023 11:28 am |
|
 |
Н'бабане Гт'муан'га
Ранг: Форумен бог
Регистриран на: Сря Яну 25, 2012 8:14 am Мнения: 4097 Местоположение: Новата земя на племето Мутум'ба
|
 Re: Microchip
Как ги рисуваш, битмап или вектори?
_________________ За злоба може да се намери извинение, за умишлено плиткоумие - не
|
Чет Мар 16, 2023 12:57 pm |
|
 |
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 11:48 am Мнения: 4029
|
 Re: Microchip
за да не са мотам "откраднах" Адафрут GFX_drawChar() че има бол шрифтове в нета за да не мига дисплея имам фул фрейм буфер 320х240х2 на 50Hz рендер ( софта пише в рама, "рендера" ( drawFrameBuffer ) са оправя ) ... би се справил и с VGA ( и/или LCD ) ама нямам "хардуер" към монитора по принцип подкарах LVGL и се справя доста добре .... ама тряя да пиша FileManager от нулата с "джигитайска" документация и сe отказах плюс добава още 200к код "GUI-то" е манималистично - колкото избор кое, какво, как демек рисува ТФорм с надписи за 4 дисппея като кепчва клавиатурата от UART и "дребен" FileManager за избор на ромове
_________________main[-1u]={1};http://www.wizio.eu/
|
Чет Мар 16, 2023 2:42 pm |
|
 |
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 11:48 am Мнения: 4029
|
 Re: Microchip
GUI-Муи е образно казано това е старото - пише директно в LCD ... преправям го към FrameBufer "render"  |  |  |  | Код: // https://github.com/newdigate/rgb565_colors
#include "common.h" #include "LCD/hal_lcd.h" #include "LCD/gfxfont.h" extern void (*HMAIN)(message_t *); void setup_3d(); void loop_3d();
#define FONT_H 16
typedef void (*TKH)(message_t *);
typedef struct { uint16_t x, y, w, h; uint16_t Color; TKH handler; } TOBJ;
typedef struct { int Size; uint16_t Color, bgColor; GFXfont *gfxFont; } TFONT;
typedef struct { TOBJ o; char Caption[32]; TFONT Font; } TFORM;
TFORM *TFORM_Create(TKH handler) { TFORM *f = calloc(sizeof(TFORM), 1); f->o.handler = handler; f->o.w = lcd_get_width(); f->o.h = lcd_get_height(); f->o.Color = LCD_WHITE; f->Font.Size = 2; f->Font.Color = LCD_WHITE; f->Font.bgColor = LCD_BLUE; strncpy(f->Caption, "Form", 32); return f; }
void TFORM_Draw(TFORM *f) { if (f) { lcd_fillRect(f->o.x, f->o.y, f->o.w, f->o.h, f->o.Color); lcd_drawFastHLine(f->o.x, f->o.y, f->o.w, LCD_BLUE); lcd_drawFastHLine(f->o.x, f->o.h - 1, f->o.w, LCD_BLUE); lcd_drawFastVLine(f->o.x, f->o.y, f->o.h, LCD_BLUE); lcd_drawFastVLine(f->o.w - 1, f->o.y, f->o.h - 1, LCD_BLUE); if (f->Font.gfxFont == NULL) { lcd_drawFastHLine(f->o.x, f->Font.Size * 8 + 10, f->o.w, LCD_BLUE); lcd_fillRect(f->o.x + 2, f->o.y + 2, f->o.w - 4, f->Font.Size * 8 + 10, LCD_BLUE); } lcd_setTextColor(LCD_WHITE, LCD_BLUE); lcd_setTextSize(f->Font.Size, f->Font.Size); lcd_setCursor(10, 8); lcd_print(f->Caption); } }
void TFORM_Show(TFORM *f, TKH *h) { *h = f->o.handler; TFORM_Draw(f); }
/////////////////////////////////////////////////////////////////////////////// static void hMain(message_t *m); static void hManager(message_t *m); static void hAbout(message_t *m);
void ShowMain(); void ShowAbout(); void ShowAplle(); void ShowNes();
static TFORM *fApple; static TFORM *fNes; static TFORM *fMain; static TFORM *fAbout; static int cursor = 0;
void GUI_Init() { cursor = 0;
fMain = TFORM_Create(hMain); strncpy(fMain->Caption, "MOS 6502 PIC32MZ Emulator", 32);
fApple = TFORM_Create(hManager); strncpy(fApple->Caption, "APPLE II Select ROM", 32);
fNes = TFORM_Create(hManager); strncpy(fNes->Caption, "NES Select ROM", 32);
fAbout = TFORM_Create(hAbout); strncpy(fAbout->Caption, "ABOUT", 32); }
#define MENU_TEXT_MAX 4 static const char *txtMenu[MENU_TEXT_MAX] = {"APPLE", "NINTENDO", "DEMO", "ABOUT"};
#define SELECTED_COLOR 0xB6DD
#define MENU_COLOR_N LCD_WHITE #define MENU_COLOR_I LCD_BLACK #define MENU_LINE_X 30 #define MENU_LINE_Y 50 #define MENU_LINE_W 200 #define MENU_LINE_H 30
void drawMenuLine(int i, int X, int Y) { Y = Y + i * MENU_LINE_H; if (i == cursor) { lcd_fillRect(X, Y, MENU_LINE_W, MENU_LINE_H, SELECTED_COLOR); lcd_setTextColor(0, SELECTED_COLOR); } else { lcd_fillRect(X, Y, MENU_LINE_W, MENU_LINE_H, MENU_COLOR_I); lcd_setTextColor(-1, 0); } lcd_setCursor(X + 10, Y + (MENU_LINE_H - FONT_H) / 2); lcd_print((char *)txtMenu[i]); }
void drawMenu() { for (int index = 0; index < MENU_TEXT_MAX; index++) drawMenuLine(index, MENU_LINE_X, MENU_LINE_Y); }
void menuUP() { cursor--; if (cursor < 1) cursor = 0; drawMenu(); }
void menuDN() { cursor++; if (cursor > 3) cursor = 3; drawMenu(); }
static void hMain(message_t *m) { // printf("[] %s\n", __FUNCTION__); switch (m->m) { case MSG_KEY: switch (m->p) { case KEY_UP: // UP menuUP(); break; case KEY_DOWN: // DOWN menuDN(); break; case KEY_RIGHT: // RIGHT if (cursor == 3) { ShowAbout(); } else if (cursor == 2) { setup_3d(); loop_3d(); } else if (cursor == 1) { ShowNes(); } else if (cursor == 0) { ShowAplle(); } break; } break; } }
void ShowMain() { TFORM_Show(fMain, &HMAIN); lcd_drawRect(MENU_LINE_X - 8, MENU_LINE_Y - 8, MENU_LINE_W + 16, (MENU_LINE_H * MENU_TEXT_MAX) + 16, LCD_BLUE); drawMenu(); }
static void hAbout(message_t *m) { if (m->p == KEY_LEFT) // LEFT ShowMain(); }
void ShowAbout() { TFORM_Show(fAbout, &HMAIN); lcd_setTextColor(0, -1);
int y = 50; lcd_setCursor(20, y); lcd_print("MOS 6502 EMULATOR"); y += 40;
lcd_setCursor(50, y); lcd_print("MICROCHIP PIC32MZ"); y += 20;
lcd_setCursor(50, y); lcd_print("DISPLAY ILI9341");
lcd_setTextColor(0x781F, -1); lcd_setCursor(10, 200); lcd_print("WizIO 2023 Georgi Angelov"); }
///////////////////////////////////////////////////////////////////////////////
static int list_count = 0; struct node { char *str; struct node *next; }; struct node *head = NULL;
void list_free() { for (struct node *current = head; current; current = current->next) { free(current->str); free(current); } head = NULL; list_count = 0; }
void list_append(const char *str) { if (str) { struct node *current = head; struct node *prev = NULL; for (; current; current = current->next) { prev = current; continue; }
current = calloc(sizeof(struct node), 1); ASSERT(current); current->str = malloc(strlen(str) + 1); ASSERT(current->str); strcpy(current->str, str); list_count++;
if (prev) prev->next = current; else head = current; } }
void list_print() { struct node *current = head; for (; current; current = current->next) { printf("< %s >\n", current->str); } }
char *list_get_index(int i) { struct node *current = head; for (; current; current = current->next) if (0 == i--) return current->str; return NULL; }
unsigned int list_get_all(const char *path, const char *find) { unsigned int res; DIR dir; FILINFO info; list_free(); if (0 == (res = f_findfirst(&dir, &info, path, find))) { while (res == FR_OK && info.fname[0]) { // printf("[] %d [ %s ]\n", res, info.fname); list_append(info.fname); res = f_findnext(&dir, &info); } } f_closedir(&dir); return list_count; }
/////////////////////////////////////////////////////////////////////////////// #define MAN_LINE_X 10 #define MAN_LINE_Y 38 #define MAN_LINE_W 300 #define MAN_LINE_H 20
static int man_cursor = 0, list_cursor = 0; static int list_max;
static char *currentPath; static char selectedFileName[256]; static void selectFile(char *filename) { strcpy(selectedFileName, currentPath); strcat(selectedFileName, filename); lcd_setCursor(10, 218); lcd_setTextColor(0, -1); // int len = strlen(selectedFileName); // CUT NAME lcd_fillRect(3, 208, 315, 30, LCD_WHITE); // clear status bar lcd_print(selectedFileName); }
void drawListLine(char *txt, int pos, int X, int Y) { Y = Y + pos * MAN_LINE_H; if (pos == man_cursor) { selectFile(txt); lcd_fillRect(X, Y, MAN_LINE_W, MAN_LINE_H, SELECTED_COLOR); lcd_setTextColor(0, SELECTED_COLOR); } else { lcd_fillRect(X, Y, MAN_LINE_W, MAN_LINE_H, 0); lcd_setTextColor(-1, 0); } lcd_setCursor(X + 10, Y + (MAN_LINE_H - FONT_H) / 2); if (txt) lcd_print(txt); }
void drawList() { for (int pos = 0; pos < list_max; pos++) { char *txt = list_get_index(pos + list_cursor); drawListLine(txt, pos, MAN_LINE_X, MAN_LINE_Y); } }
void manUP() { if (--man_cursor < 1) { man_cursor = 0; if (--list_cursor < 1) list_cursor = 0; } drawList(); }
void manDN() { if (++man_cursor > 7) { list_cursor++; man_cursor = 7; } if (list_cursor > list_count - list_max) list_cursor = list_count - list_max; drawList(); }
static void run() { extern char *NES_ROM; if (strstr(selectedFileName, ".nes")) { FIL file; if (f_open(&file, selectedFileName, FA_READ)) { printf("[ERROR] %s( open )\n", __FUNCTION__); return; } int rd, size = f_size(&file); printf("[NES] File: %s ( %d )\n", selectedFileName, size); if ((NES_ROM = malloc(size))) { if (f_read(&file, NES_ROM, size, (UINT *)&rd) && rd != size) { printf("[ERROR] %s( read )\n", __FUNCTION__); free(NES_ROM); NES_ROM = NULL; } } // delay(1000); nofrendo_main(0, NULL); } else { } }
static void hManager(message_t *m) { switch (m->m) { case MSG_KEY: switch (m->p) { case KEY_UP: manUP(); break; case KEY_DOWN: manDN(); break; case KEY_LEFT: ShowMain(); break; case KEY_RIGHT: run(); break; } } }
void ShowAplle() { currentPath = "TESTb/"; man_cursor = 0; list_cursor = 0; TFORM_Show(fApple, &HMAIN); lcd_drawRect(MAN_LINE_X - 8, MAN_LINE_Y - 8, MAN_LINE_W + 16, (MAN_LINE_H * 8) + 16, LCD_BLUE); lcd_drawRect(2, 207, 316, 31, LCD_BLUE); // status bar list_get_all("TESTb/", "*.txt"); drawList(); }
void ShowNes() { currentPath = "NES/"; man_cursor = 0; list_cursor = 0; TFORM_Show(fNes, &HMAIN); lcd_drawRect(MAN_LINE_X - 8, MAN_LINE_Y - 8, MAN_LINE_W + 16, (MAN_LINE_H * 8) + 16, LCD_BLUE); lcd_drawRect(2, 207, 316, 31, LCD_BLUE); // status bar list_get_all("NES/", "*.nes"); // list_print(); list_max = list_count < 8 ? list_count : 8; drawList(); }
|  |  |  |  |
_________________main[-1u]={1};http://www.wizio.eu/
|
Чет Мар 16, 2023 2:45 pm |
|
 |
Н'бабане Гт'муан'га
Ранг: Форумен бог
Регистриран на: Сря Яну 25, 2012 8:14 am Мнения: 4097 Местоположение: Новата земя на племето Мутум'ба
|
 Re: Microchip
Ах... точно от това се опасявах. Техния модел никак не е добър защото слага всичките символи в една рамка, не поддържа лейъри и т.н. Аз преди време когати пишех Rittle се сблъсках с тия проблеми и тогава на тяхната база наравих по-добра библиотека заедно с пълен фонт. После го ползвах и при други писания. Ето тук е последното, ако искаш да го "откраднеш": https://github.com/knivd/C.impl-extende ... graphics.cА ето тук е описанието какво го прави тоя фонт по-добър: http://ello.cc/pages/fonts.html
_________________ За злоба може да се намери извинение, за умишлено плиткоумие - не
|
Чет Мар 16, 2023 3:17 pm |
|
 |
palavrov
Ранг: Форумен бог
Регистриран на: Вто Окт 11, 2011 10:53 pm Мнения: 3561 Местоположение: Brussels / Пловдив
|
 Re: Microchip
Като правите гуи-та за микроконтролери, защо не пробвате тази нова концепция - Dear ImGui - това е за ПеЦе-та варианта, но го има и за микроконтролери и общо взето като, че ли успява да вана най много функционалност в минимум код - главно заради различната концепция.
_________________ Мразя да мразя ...
|
Чет Мар 16, 2023 4:43 pm |
|
 |
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 11:48 am Мнения: 4029
|
 Re: Microchip
грубо, с фрейм буфер изглежда така https://www.youtube.com/watch?v=16aQmg_ohIM( някой трепкания са ... "битка" с камерата )
_________________main[-1u]={1};http://www.wizio.eu/
|
Чет Мар 16, 2023 6:30 pm |
|
 |
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 11:48 am Мнения: 4029
|
 Re: Microchip
нящо ми е "раждясало" флопито...
_________________main[-1u]={1};http://www.wizio.eu/
|
Нед Мар 19, 2023 5:51 pm |
|
 |
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 11:48 am Мнения: 4029
|
 Re: Microchip
Фиуууу  |  |  |  | Код: [SD] Initialization succeded
eMMu 2023 WizIO
[BLINK] BEGIN [TERM] BEGIN [LCD] BEGIN [MAIN] BEGIN [MAIN] MSG_LCD_READY [CPU] BIOS: 'ROM_8M.bin' [BIN] Loading: 'EMU/ROM/ROM_8M.bin' [BIN] Size: 0x3000 [CPU] CHAR: 'VIDEO_ROM_8C.bin' [BIN] Loading: 'EMU/ROM/VIDEO_ROM_8C.bin' [BIN] Size: 0x1000 [DISK] DiskLoadRom: SLOT:6 [TASK] MCU [DISK] READ: C607 -- DiskControlStepper() -- Track 00 phases 8 phase 3 on address $C0E7 -- Newtrack 0 -- READ Track: 0, Sector: 15, Block: 15 -- READ Track: 0, Sector: 14, Block: 14 -- READ Track: 0, Sector: 13, Block: 13 -- READ Track: 0, Sector: 12, Block: 12 -- READ Track: 0, Sector: 11, Block: 11 -- READ Track: 0, Sector: 10, Block: 10 -- READ Track: 0, Sector: 9, Block: 9 -- READ Track: 0, Sector: 8, Block: 8 -- READ Track: 0, Sector: 7, Block: 7 -- READ Track: 0, Sector: 6, Block: 6 -- READ Track: 0, Sector: 5, Block: 5 -- READ Track: 0, Sector: 4, Block: 4 -- READ Track: 0, Sector: 3, Block: 3 -- READ Track: 0, Sector: 2, Block: 2 -- READ Track: 0, Sector: 1, Block: 1 -- READ Track: 0, Sector: 0, Block: 0 ....
|  |  |  |  |
_________________main[-1u]={1};http://www.wizio.eu/
|
Пон Мар 20, 2023 4:42 pm |
|
 |
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 11:48 am Мнения: 4029
|
 Re: Microchip
TADA !!!
_________________main[-1u]={1};http://www.wizio.eu/
|
Пон Мар 20, 2023 5:10 pm |
|
 |
itso.t
Ранг: Форумен бог
Регистриран на: Чет Фев 03, 2005 1:21 am Мнения: 9860 Местоположение: София
|
 Re: Microchip
Малко масълце на главите на флопито върши чудеса... 
|
Пон Мар 20, 2023 5:30 pm |
|
 |
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 11:48 am Мнения: 4029
|
 Re: Microchip
_________________main[-1u]={1};http://www.wizio.eu/
|
Пон Мар 20, 2023 6:45 pm |
|
 |
Н'бабане Гт'муан'га
Ранг: Форумен бог
Регистриран на: Сря Яну 25, 2012 8:14 am Мнения: 4097 Местоположение: Новата земя на племето Мутум'ба
|
 Re: Microchip
Без звук ли е?
_________________ За злоба може да се намери извинение, за умишлено плиткоумие - не
|
Пон Мар 20, 2023 7:33 pm |
|
 |
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 11:48 am Мнения: 4029
|
 Re: Microchip
нямо "кино"... 
_________________main[-1u]={1};http://www.wizio.eu/
|
Пон Мар 20, 2023 7:48 pm |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 4 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|