Отговори на тема  [ 307 мнения ]  Отиди на страница Предишна  1 ... 10, 11, 12, 13, 14, 15, 16 ... 21  Следваща
Microchip 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 11:48 am
Мнения: 4719
Мнение Re: Microchip
аман от шрифтове...


Прикачени файлове:
IMG_20230316_110514.jpg
IMG_20230316_110514.jpg [ 664 KiB | Прегледано 698 пъти ]

_________________
main[-1u]={1};
Чет Мар 16, 2023 11:09 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Окт 11, 2011 10:53 pm
Мнения: 4197
Местоположение: Brussels / Пловдив
Мнение Re: Microchip
Добре ти се е получило. Едно време т.е. 90-те бях направил едно ГУИ на Ц++ за ДОС и му бях вкарал сумата шрифтове - като почнеш от разните кирилизации, после през разни библиотеки с шрифтове и май и от бозата бях взаимствал един два. Бях си написал и редактор за "уникалния" формат на шрифтовете. Ама нито сорсовете ги знам къде са нито дали ще успее да се компилира и подкара след повече от 20 години. Всичко беше за Борланд Ц 3.1.

_________________
Мразя да мразя ...


Последна промяна palavrov на Чет Мар 16, 2023 1:10 pm, променена общо 1 път



Чет Мар 16, 2023 11:28 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Яну 25, 2012 8:14 am
Мнения: 4621
Местоположение: Новата земя на племето Мутум'ба
Мнение Re: Microchip
Как ги рисуваш, битмап или вектори?

_________________
'просто' е технически синоним на 'красиво'


Чет Мар 16, 2023 12:57 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 11:48 am
Мнения: 4719
Мнение Re: Microchip
Цитат:
Как ги рисуваш, битмап или вектори?

за да не са мотам "откраднах" Адафрут GFX_drawChar() че има бол шрифтове в нета
за да не мига дисплея имам фул фрейм буфер 320х240х2 на 50Hz рендер ( софта пише в рама, "рендера" ( drawFrameBuffer ) са оправя )
... би се справил и с VGA ( и/или LCD ) ама нямам "хардуер" към монитора

по принцип подкарах LVGL и се справя доста добре .... ама тряя да пиша FileManager от нулата с "джигитайска" документация и сe отказах плюс добава още 200к код

"GUI-то" е манималистично - колкото избор кое, какво, как
демек рисува ТФорм с надписи за 4 дисппея като кепчва клавиатурата от UART
и "дребен" FileManager за избор на ромове

_________________
main[-1u]={1};


Чет Мар 16, 2023 2:42 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 11:48 am
Мнения: 4719
Мнение Re: Microchip
GUI-Муи е образно казано :D
това е старото - пише директно в 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};


Чет Мар 16, 2023 2:45 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Яну 25, 2012 8:14 am
Мнения: 4621
Местоположение: Новата земя на племето Мутум'ба
Мнение Re: Microchip
TheWizard написа:
за да не са мотам "откраднах" Адафрут GFX_drawChar() че има бол шрифтове в нета


Ах... точно от това се опасявах. :D
Техния модел никак не е добър защото слага всичките символи в една рамка, не поддържа лейъри и т.н.
Аз преди време когати пишех Rittle се сблъсках с тия проблеми и тогава на тяхната база наравих по-добра библиотека заедно с пълен фонт. После го ползвах и при други писания. Ето тук е последното, ако искаш да го "откраднеш": https://github.com/knivd/C.impl-extende ... graphics.c
А ето тук е описанието какво го прави тоя фонт по-добър: http://ello.cc/pages/fonts.html

_________________
'просто' е технически синоним на 'красиво'


Чет Мар 16, 2023 3:17 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Окт 11, 2011 10:53 pm
Мнения: 4197
Местоположение: Brussels / Пловдив
Мнение Re: Microchip
Като правите гуи-та за микроконтролери, защо не пробвате тази нова концепция - Dear ImGui - това е за ПеЦе-та варианта, но го има и за микроконтролери и общо взето като, че ли успява да вана най много функционалност в минимум код - главно заради различната концепция.

_________________
Мразя да мразя ...


Чет Мар 16, 2023 4:43 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 11:48 am
Мнения: 4719
Мнение Re: Microchip
грубо, с фрейм буфер изглежда така
https://www.youtube.com/watch?v=16aQmg_ohIM
( някой трепкания са ... "битка" с камерата )

_________________
main[-1u]={1};


Чет Мар 16, 2023 6:30 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 11:48 am
Мнения: 4719
Мнение Re: Microchip
нящо ми е "раждясало" флопито...


Прикачени файлове:
floppy.jpg
floppy.jpg [ 187.97 KiB | Прегледано 548 пъти ]

_________________
main[-1u]={1};
Нед Мар 19, 2023 5:51 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 11:48 am
Мнения: 4719
Мнение Re: Microchip
Фиуууу :D
Код:
[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};


Пон Мар 20, 2023 4:42 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 11:48 am
Мнения: 4719
Мнение Re: Microchip
TADA !!!


Прикачени файлове:
Aztec.jpg
Aztec.jpg [ 470.92 KiB | Прегледано 493 пъти ]

_________________
main[-1u]={1};
Пон Мар 20, 2023 5:10 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Фев 03, 2005 1:21 am
Мнения: 10621
Местоположение: София
Мнение Re: Microchip
Малко масълце на главите на флопито върши чудеса... :lol:


Пон Мар 20, 2023 5:30 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 11:48 am
Мнения: 4719
Мнение Re: Microchip
and rescue the beautiful Mariko.... :D
https://www.youtube.com/watch?v=iF6PAZEXxTQ

_________________
main[-1u]={1};


Пон Мар 20, 2023 6:45 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Яну 25, 2012 8:14 am
Мнения: 4621
Местоположение: Новата земя на племето Мутум'ба
Мнение Re: Microchip
Без звук ли е?

_________________
'просто' е технически синоним на 'красиво'


Пон Мар 20, 2023 7:33 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 11:48 am
Мнения: 4719
Мнение Re: Microchip
нямо "кино"... :)

_________________
main[-1u]={1};


Пон Мар 20, 2023 7:48 pm
Профил ICQ
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 307 мнения ]  Отиди на страница Предишна  1 ... 10, 11, 12, 13, 14, 15, 16 ... 21  Следваща

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 4 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни