diff --git a/r65emu.h b/r65emu.h index c5765d4..26dd1cc 100644 --- a/r65emu.h +++ b/r65emu.h @@ -8,6 +8,7 @@ #include "spiram.h" #include "prom.h" #include "ps2drv.h" +#include "utftdisplay.h" #include "hardware.h" #endif diff --git a/utftdisplay.cpp b/utftdisplay.cpp new file mode 100644 index 0000000..077d729 --- /dev/null +++ b/utftdisplay.cpp @@ -0,0 +1,50 @@ +#include + +#include "memory.h" +#include "utftdisplay.h" + +extern UTFT utft; + +void UTFTDisplay::begin(unsigned bg, unsigned fg) { + _bg = bg; + _fg = fg; + _dx = utft.getDisplayXSize(); + _dy = utft.getDisplayYSize(); + _cx = utft.getFontXsize(); + _cy = utft.getFontYsize(); + _oxs = _dx; +} + +void UTFTDisplay::clear() { + utft.fillScr(_bg); +} + +void UTFTDisplay::error(char *s) +{ + utft.setColor(_fg); + char *lines[5]; + int l = 0; + for (char *p = s, *q = s; *p; p++) + if (*p == '\n') { + *p++ = 0; + lines[l++] = q; + q = p; + } + unsigned y = (_dy - l*_cy)/2; + for (int i = 0; i < l; i++) { + char *p = lines[i]; + unsigned x = (_dx - strlen(p)*_cx)/2; + utft.print(p, x, y); + y += _cy; + } +} + +void UTFTDisplay::status(const char *s) +{ + utft.setColor(_fg); + unsigned y = _dy - _cy, n = strlen(s), xs = _dx - n*_cx; + for (unsigned x = _oxs; x < xs; x += _cx) + utft.print(" ", x, y); + utft.print(s, xs, y); + _oxs = xs; +} diff --git a/utftdisplay.h b/utftdisplay.h new file mode 100644 index 0000000..cfb81ee --- /dev/null +++ b/utftdisplay.h @@ -0,0 +1,19 @@ +#ifndef _UTFT_DISPLAY_H +#define _UTFT_DISPLAY_H + +class Stream; + +class UTFTDisplay: public Memory::Device { +public: + void begin(unsigned bg, unsigned fg); + void clear(); + void error(char *); + void status(const char *); + +protected: + UTFTDisplay(unsigned size): Memory::Device(size) {} + + unsigned _bg, _fg, _cx, _cy, _dx, _dy, _oxs; +}; + +#endif