* Re: [PATCH] fbdev: i810: use appopriate log interface dev_info
From: Helge Deller @ 2025-12-02 19:24 UTC (permalink / raw)
To: Shi Hao, linux-fbdev; +Cc: dri-devel, linux-kernel, adaplas
In-Reply-To: <20251031080942.14112-1-i.shihao.999@gmail.com>
On 10/31/25 09:09, Shi Hao wrote:
> There were many printk log interfaces which do no had
> any KERN_INFO with them and they can be replaced with
> dev_info which will allow better log level handling
> making messages clear and manageable.
>
> No functional changes to the driver behavior are introduced.
> Only the logging method has been replaced as per modern
> kernel coding guidelines.
>
> Signed-off-by: Shi Hao <i.shihao.999@gmail.com>
> ---
> drivers/video/fbdev/i810/i810_main.c | 46 ++++++++++++++--------------
> 1 file changed, 23 insertions(+), 23 deletions(-)
applied.
I tweaked the patch a little more to drop the driver name as well
(which will be printed by the dev_*() functions).
Thanks!
Helge
^ permalink raw reply
* Re: [PATCH] fbdev/pxafb: Fix multiple clamped values in pxafb_adjust_timing
From: Helge Deller @ 2025-12-02 19:36 UTC (permalink / raw)
To: Thorsten Blum
Cc: Chelsy Ratnawat, Thomas Zimmermann, Andy Shevchenko, Raag Jadav,
linux-fbdev, dri-devel, linux-kernel
In-Reply-To: <C3FDBCE7-14D9-4999-B463-C2E3E384E7DB@linux.dev>
On 12/2/25 19:36, Thorsten Blum wrote:
> On 2. Dec 2025, at 19:28, Helge Deller wrote:
>> On 12/2/25 19:15, Thorsten Blum wrote:
>>> The variables were never clamped because the return value of clamp_val()
>>> was not used. Fix this by assigning the clamped values, and use clamp()
>>> instead of clamp_val().
>>> Cc: stable@vger.kernel.org
>>> Fixes: 3f16ff608a75 ("[ARM] pxafb: cleanup of the timing checking code")
>>> Signed-off-by: Thorsten Blum <thorsten.blum@linux.dev>
>>> ---
>>> drivers/video/fbdev/pxafb.c | 12 ++++++------
>>> 1 file changed, 6 insertions(+), 6 deletions(-)
>>
>> Thanks for the patch!
>> It looks good, so I'll include it in the fbdev tree.
>> Out of curiosity:
>> How did you notice? Do you actually have the hardware and tested it?
>
> I only compile-tested it.
>
> I stumbled upon another driver with the same bug and then used grep to
> search for other instances and found about 6 or 7, including this one.
Ok. But this then means, maybe the clamping isn't needed (since nobody complained),
or that nobody noticed because nobody uses the driver any longer.
Anyway, I believe the patch is correct, so I leave it in.
Thank you!
Helge
^ permalink raw reply
* Re: [PATCH] fbdev: ssd1307fb: fix potential page leak in ssd1307fb_probe()
From: Helge Deller @ 2025-12-02 19:49 UTC (permalink / raw)
To: Abdun Nihaal
Cc: niederp, maxime.ripard, tomi.valkeinen, linux-fbdev, dri-devel,
linux-kernel
In-Reply-To: <20251202191225.111661-1-nihaal@cse.iitm.ac.in>
On 12/2/25 20:12, Abdun Nihaal wrote:
> The page allocated for vmem using __get_free_pages() is not freed on the
> error paths after it. Fix that by adding a corresponding __free_pages()
> call to the error path.
>
> Fixes: facd94bc458a ("fbdev: ssd1307fb: Allocate page aligned video memory.")
> Signed-off-by: Abdun Nihaal <nihaal@cse.iitm.ac.in>
> ---
> Compile tested only. Not tested on hardware.
>
> drivers/video/fbdev/ssd1307fb.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/video/fbdev/ssd1307fb.c b/drivers/video/fbdev/ssd1307fb.c
> index aa6cc0a8151a..66da8a1a0941 100644
> --- a/drivers/video/fbdev/ssd1307fb.c
> +++ b/drivers/video/fbdev/ssd1307fb.c
> @@ -680,7 +680,7 @@ static int ssd1307fb_probe(struct i2c_client *client)
> if (!ssd1307fb_defio) {
> dev_err(dev, "Couldn't allocate deferred io.\n");
> ret = -ENOMEM;
> - goto fb_alloc_error;
> + goto fb_defio_error;
this goto jumps over the assignment of info->fix.smem_start, so...
...
> }
>
> ssd1307fb_defio->delay = HZ / refreshrate;
> @@ -757,6 +757,8 @@ static int ssd1307fb_probe(struct i2c_client *client)
> regulator_disable(par->vbat_reg);
> reset_oled_error:
> fb_deferred_io_cleanup(info);
> +fb_defio_error:
> + __free_pages(__va(info->fix.smem_start), get_order(info->fix.smem_len));
freeing info->fix.smem_start is wrong here as it was not initialized
to the value of vmem.
Please rework the patch.
Helge
^ permalink raw reply
* Re: [PATCH stable] fbdev: Fix out-of-bounds issue in sys_fillrect()
From: Helge Deller @ 2025-12-02 20:05 UTC (permalink / raw)
To: Gu Bowen; +Cc: linux-fbdev, dri-devel, Lu Jialin
In-Reply-To: <224e4e5b-14ae-411c-ad6c-f73c3b946ff8@huawei.com>
On 12/1/25 10:25, Gu Bowen wrote:
> Hi,
>
> On 11/15/2025 3:21 AM, Helge Deller wrote:
>>
>> That patch does not apply to git head. Can you try to reproduce
>> with git head?
>>
>
> fbdev has already been refactored by commit eabb03293087 ("fbdev:
> Refactoring the fbcon packed pixel drawing routines") on v6.15-rc1,
> so this issue no longer exists in the mainline version. Similar
> question has occurred in the past:
>
> https://syzkaller.appspot.com/bug?extid=66bde8e1e4161d4b2cca
>
> After the refactoring patch was merged, this issue did not reappear,
> but it still exists in the stable version.
Backporting commit eabb03293087 to 6.6 seems unrealistic.
So, maybe adding your patch to stable might make sense.
+ if (dst_offset < 0 || dst_offset >= p->fix.smem_len) {
+ pr_err("dst offset out of bound: dst_offset(%ld)", dst_offset);
+ return;
I don't like the pr_err() in here. I do understand that you want to print
that something wrong happened, but we are inside the console printing code.
I think we should just return in this case.
With that change we might ask Greg if he accepts this small patch for stable-6.6...
Helge
^ permalink raw reply
* [PATCH 6.12.y] drm, fbcon, vga_switcheroo: Avoid race condition in fbcon setup
From: Sasha Levin @ 2025-12-02 20:23 UTC (permalink / raw)
To: stable
Cc: Thomas Zimmermann, Javier Martinez Canillas, Alex Deucher,
dri-devel, nouveau, amd-gfx, linux-fbdev, Sasha Levin
In-Reply-To: <2025120119-edgy-recycled-bcfe@gregkh>
From: Thomas Zimmermann <tzimmermann@suse.de>
[ Upstream commit eb76d0f5553575599561010f24c277cc5b31d003 ]
Protect vga_switcheroo_client_fb_set() with console lock. Avoids OOB
access in fbcon_remap_all(). Without holding the console lock the call
races with switching outputs.
VGA switcheroo calls fbcon_remap_all() when switching clients. The fbcon
function uses struct fb_info.node, which is set by register_framebuffer().
As the fb-helper code currently sets up VGA switcheroo before registering
the framebuffer, the value of node is -1 and therefore not a legal value.
For example, fbcon uses the value within set_con2fb_map() [1] as an index
into an array.
Moving vga_switcheroo_client_fb_set() after register_framebuffer() can
result in VGA switching that does not switch fbcon correctly.
Therefore move vga_switcheroo_client_fb_set() under fbcon_fb_registered(),
which already holds the console lock. Fbdev calls fbcon_fb_registered()
from within register_framebuffer(). Serializes the helper with VGA
switcheroo's call to fbcon_remap_all().
Although vga_switcheroo_client_fb_set() takes an instance of struct fb_info
as parameter, it really only needs the contained fbcon state. Moving the
call to fbcon initialization is therefore cleaner than before. Only amdgpu,
i915, nouveau and radeon support vga_switcheroo. For all other drivers,
this change does nothing.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Link: https://elixir.bootlin.com/linux/v6.17/source/drivers/video/fbdev/core/fbcon.c#L2942 # [1]
Fixes: 6a9ee8af344e ("vga_switcheroo: initial implementation (v15)")
Acked-by: Javier Martinez Canillas <javierm@redhat.com>
Acked-by: Alex Deucher <alexander.deucher@amd.com>
Cc: dri-devel@lists.freedesktop.org
Cc: nouveau@lists.freedesktop.org
Cc: amd-gfx@lists.freedesktop.org
Cc: linux-fbdev@vger.kernel.org
Cc: <stable@vger.kernel.org> # v2.6.34+
Link: https://patch.msgid.link/20251105161549.98836-1-tzimmermann@suse.de
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/gpu/drm/drm_fb_helper.c | 6 ------
drivers/gpu/drm/i915/display/intel_fbdev.c | 6 ------
drivers/gpu/drm/radeon/radeon_fbdev.c | 5 -----
drivers/video/fbdev/core/fbcon.c | 9 +++++++++
4 files changed, 9 insertions(+), 17 deletions(-)
diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c
index b15ddbd65e7b5..a8971c4eb9f05 100644
--- a/drivers/gpu/drm/drm_fb_helper.c
+++ b/drivers/gpu/drm/drm_fb_helper.c
@@ -30,9 +30,7 @@
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
#include <linux/console.h>
-#include <linux/pci.h>
#include <linux/sysrq.h>
-#include <linux/vga_switcheroo.h>
#include <drm/drm_atomic.h>
#include <drm/drm_drv.h>
@@ -1637,10 +1635,6 @@ static int drm_fb_helper_single_fb_probe(struct drm_fb_helper *fb_helper)
strcpy(fb_helper->fb->comm, "[fbcon]");
- /* Set the fb info for vgaswitcheroo clients. Does nothing otherwise. */
- if (dev_is_pci(dev->dev))
- vga_switcheroo_client_fb_set(to_pci_dev(dev->dev), fb_helper->info);
-
return 0;
}
diff --git a/drivers/gpu/drm/i915/display/intel_fbdev.c b/drivers/gpu/drm/i915/display/intel_fbdev.c
index 49a1ac4f54919..337cc9fc31b19 100644
--- a/drivers/gpu/drm/i915/display/intel_fbdev.c
+++ b/drivers/gpu/drm/i915/display/intel_fbdev.c
@@ -589,11 +589,8 @@ static int intel_fbdev_restore_mode(struct drm_i915_private *dev_priv)
static void intel_fbdev_client_unregister(struct drm_client_dev *client)
{
struct drm_fb_helper *fb_helper = drm_fb_helper_from_client(client);
- struct drm_device *dev = fb_helper->dev;
- struct pci_dev *pdev = to_pci_dev(dev->dev);
if (fb_helper->info) {
- vga_switcheroo_client_fb_set(pdev, NULL);
drm_fb_helper_unregister_info(fb_helper);
} else {
drm_fb_helper_unprepare(fb_helper);
@@ -620,7 +617,6 @@ static int intel_fbdev_client_hotplug(struct drm_client_dev *client)
{
struct drm_fb_helper *fb_helper = drm_fb_helper_from_client(client);
struct drm_device *dev = client->dev;
- struct pci_dev *pdev = to_pci_dev(dev->dev);
int ret;
if (dev->fb_helper)
@@ -634,8 +630,6 @@ static int intel_fbdev_client_hotplug(struct drm_client_dev *client)
if (ret)
goto err_drm_fb_helper_fini;
- vga_switcheroo_client_fb_set(pdev, fb_helper->info);
-
return 0;
err_drm_fb_helper_fini:
diff --git a/drivers/gpu/drm/radeon/radeon_fbdev.c b/drivers/gpu/drm/radeon/radeon_fbdev.c
index fb70de29545c6..a197ba2f2717b 100644
--- a/drivers/gpu/drm/radeon/radeon_fbdev.c
+++ b/drivers/gpu/drm/radeon/radeon_fbdev.c
@@ -300,10 +300,8 @@ static void radeon_fbdev_client_unregister(struct drm_client_dev *client)
{
struct drm_fb_helper *fb_helper = drm_fb_helper_from_client(client);
struct drm_device *dev = fb_helper->dev;
- struct radeon_device *rdev = dev->dev_private;
if (fb_helper->info) {
- vga_switcheroo_client_fb_set(rdev->pdev, NULL);
drm_helper_force_disable_all(dev);
drm_fb_helper_unregister_info(fb_helper);
} else {
@@ -325,7 +323,6 @@ static int radeon_fbdev_client_hotplug(struct drm_client_dev *client)
{
struct drm_fb_helper *fb_helper = drm_fb_helper_from_client(client);
struct drm_device *dev = client->dev;
- struct radeon_device *rdev = dev->dev_private;
int ret;
if (dev->fb_helper)
@@ -342,8 +339,6 @@ static int radeon_fbdev_client_hotplug(struct drm_client_dev *client)
if (ret)
goto err_drm_fb_helper_fini;
- vga_switcheroo_client_fb_set(rdev->pdev, fb_helper->info);
-
return 0;
err_drm_fb_helper_fini:
diff --git a/drivers/video/fbdev/core/fbcon.c b/drivers/video/fbdev/core/fbcon.c
index 1fc1e47ae2b49..e681066736dea 100644
--- a/drivers/video/fbdev/core/fbcon.c
+++ b/drivers/video/fbdev/core/fbcon.c
@@ -65,6 +65,7 @@
#include <linux/string.h>
#include <linux/kd.h>
#include <linux/panic.h>
+#include <linux/pci.h>
#include <linux/printk.h>
#include <linux/slab.h>
#include <linux/fb.h>
@@ -77,6 +78,7 @@
#include <linux/interrupt.h>
#include <linux/crc32.h> /* For counting font checksums */
#include <linux/uaccess.h>
+#include <linux/vga_switcheroo.h>
#include <asm/irq.h>
#include "fbcon.h"
@@ -2894,6 +2896,9 @@ void fbcon_fb_unregistered(struct fb_info *info)
console_lock();
+ if (info->device && dev_is_pci(info->device))
+ vga_switcheroo_client_fb_set(to_pci_dev(info->device), NULL);
+
fbcon_registered_fb[info->node] = NULL;
fbcon_num_registered_fb--;
@@ -3027,6 +3032,10 @@ static int do_fb_registered(struct fb_info *info)
}
}
+ /* Set the fb info for vga_switcheroo clients. Does nothing otherwise. */
+ if (info->device && dev_is_pci(info->device))
+ vga_switcheroo_client_fb_set(to_pci_dev(info->device), info);
+
return ret;
}
--
2.51.0
^ permalink raw reply related
* Re: [PATCH] fbdev/pxafb: Fix multiple clamped values in pxafb_adjust_timing
From: David Laight @ 2025-12-02 20:32 UTC (permalink / raw)
To: Thorsten Blum
Cc: Helge Deller, Chelsy Ratnawat, Thomas Zimmermann, Andy Shevchenko,
Raag Jadav, linux-fbdev, dri-devel, linux-kernel
In-Reply-To: <C3FDBCE7-14D9-4999-B463-C2E3E384E7DB@linux.dev>
On Tue, 2 Dec 2025 19:36:17 +0100
Thorsten Blum <thorsten.blum@linux.dev> wrote:
> On 2. Dec 2025, at 19:28, Helge Deller wrote:
> > On 12/2/25 19:15, Thorsten Blum wrote:
> >> The variables were never clamped because the return value of clamp_val()
> >> was not used. Fix this by assigning the clamped values, and use clamp()
> >> instead of clamp_val().
> >> Cc: stable@vger.kernel.org
> >> Fixes: 3f16ff608a75 ("[ARM] pxafb: cleanup of the timing checking code")
> >> Signed-off-by: Thorsten Blum <thorsten.blum@linux.dev>
> >> ---
> >> drivers/video/fbdev/pxafb.c | 12 ++++++------
> >> 1 file changed, 6 insertions(+), 6 deletions(-)
> >
> > Thanks for the patch!
> > It looks good, so I'll include it in the fbdev tree.
> > Out of curiosity:
> > How did you notice? Do you actually have the hardware and tested it?
>
> I only compile-tested it.
>
> I stumbled upon another driver with the same bug and then used grep to
> search for other instances and found about 6 or 7, including this one.
I've just hacked minmax.h so clamp() and clamp_t() (and thus clamp_val())
are 'static inline u64 __must_check clamp(...)'.
Didn't find any in any other files.
But I think you missed some double error in the same file (nearby).
David
>
> Thanks,
> Thorsten
>
>
^ permalink raw reply
* Re: [PATCH stable] fbdev: Fix out-of-bounds issue in sys_fillrect()
From: Gu Bowen @ 2025-12-03 2:11 UTC (permalink / raw)
To: Helge Deller; +Cc: linux-fbdev, dri-devel, Lu Jialin
In-Reply-To: <aef7d5fd-2926-4c58-b720-4af58aa380d3@gmx.de>
On 12/3/2025 4:05 AM, Helge Deller wrote:
> Backporting commit eabb03293087 to 6.6 seems unrealistic.
> So, maybe adding your patch to stable might make sense.
>
> + if (dst_offset < 0 || dst_offset >= p->fix.smem_len) {
> + pr_err("dst offset out of bound: dst_offset(%ld)", dst_offset);
> + return;
>
> I don't like the pr_err() in here. I do understand that you want to print
> that something wrong happened, but we are inside the console printing code.
> I think we should just return in this case.
>
Oh, you are right, I should not add pr_err() in here. Maybe we can use
pr_info_once() instead if you don't mind.
I will send a new patch until I receive your feedback. Thanks!
BR,
Guber
^ permalink raw reply
* [PATCH v2] fbdev: ssd1307fb: fix potential page leak in ssd1307fb_probe()
From: Abdun Nihaal @ 2025-12-03 3:55 UTC (permalink / raw)
To: deller
Cc: Abdun Nihaal, niederp, tomi.valkeinen, linux-fbdev, dri-devel,
linux-kernel
The page allocated for vmem using __get_free_pages() is not freed on the
error paths after it. Fix that by adding a corresponding __free_pages()
call to the error path.
Fixes: facd94bc458a ("fbdev: ssd1307fb: Allocate page aligned video memory.")
Signed-off-by: Abdun Nihaal <nihaal@cse.iitm.ac.in>
---
Compile tested only. Not tested on hardware.
v1->v2:
- Fix incorrect call to __free_pages with uninitialized values as
pointed out by Helge Deller. Now, the patch uses vmem and vmem_size
which hold valid values at the goto site.
Thanks for catching. I'm sorry I overlooked this in v1.
v1 link: https://lore.kernel.org/all/20251202191225.111661-1-nihaal@cse.iitm.ac.in/
drivers/video/fbdev/ssd1307fb.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/drivers/video/fbdev/ssd1307fb.c b/drivers/video/fbdev/ssd1307fb.c
index aa6cc0a8151a..83dd31fa1fab 100644
--- a/drivers/video/fbdev/ssd1307fb.c
+++ b/drivers/video/fbdev/ssd1307fb.c
@@ -680,7 +680,7 @@ static int ssd1307fb_probe(struct i2c_client *client)
if (!ssd1307fb_defio) {
dev_err(dev, "Couldn't allocate deferred io.\n");
ret = -ENOMEM;
- goto fb_alloc_error;
+ goto fb_defio_error;
}
ssd1307fb_defio->delay = HZ / refreshrate;
@@ -757,6 +757,8 @@ static int ssd1307fb_probe(struct i2c_client *client)
regulator_disable(par->vbat_reg);
reset_oled_error:
fb_deferred_io_cleanup(info);
+fb_defio_error:
+ __free_pages(vmem, get_order(vmem_size));
fb_alloc_error:
framebuffer_release(info);
return ret;
--
2.43.0
^ permalink raw reply related
* Re: [PATCH] fonts: Add Terminus 10x18 console font
From: Thomas Zimmermann @ 2025-12-03 9:07 UTC (permalink / raw)
To: Helge Deller, Neilay Kharwadkar; +Cc: linux-fbdev, linux-kernel
In-Reply-To: <a4fb3f2d-df6c-4f81-be96-d23c72c94688@gmx.de>
Hi
Am 02.12.25 um 20:05 schrieb Helge Deller:
> On 11/17/25 11:04, Thomas Zimmermann wrote:
>> Am 16.11.25 um 20:20 schrieb Neilay Kharwadkar:
>>> Add a compile-in option for Terminus 10x18 bitmap console font
>>> to improve readability on modern laptop displays.
>>>
>>> On modern 13-16 inch laptop displays with high pixel density,
>>> common scaled resolutions like 1280x800 and 1440x900 are widely
>>> used.
>>>
>>> At these resolutions, VGA 8x16 is too small and difficult to
>>> read for extended periods, while Terminus 16x32 is too large,
>>> providing only 25-28 rows. The existing 10x18 font has poor
>>> readability.
>>>
>>> Terminus 10x18 provides improved readability with its clean,
>>> fixed-width design while maintaining practical row counts
>>> (44-50 rows).
>>>
>>> A comfortable and readable built-in font for early boot messages,
>>> kernel panics or whenever userspace is unavailable.
>>>
>>> The font was converted from standard Terminus ter-i18b.psf using
>>> psftools and formatted to match kernel font conventions.
>>>
>>> This patch is non-intrusive, no options are enabled by default
>>> so most users won't notice a thing.
>>
>> What is the font's license and who owns the copyright?
>
> Copyright seeems fine. According to [1] the font license is
> SIL OFL 1.1, which is FSF approved. And we already have the
> Terminus 16x32 font included in the linux kernel (CONFIG_FONT_TER16x32).
>
> I've applied this patch to the fbdev git tree.
> Thomas, let me know if you have additional concerns.
Not really. I just hope that not everyone's going to try to get their
favorite font into the kernel. There's a ioctl to load fonts from
userspace, which is preferred. But Terminus seems common enough to make
merging it reasonable.
Best regards
Thomas
>
> Thanks!
> Helge
>
> [1] https://terminus-font.sourceforge.net/
>
>
>
>>> Signed-off-by: Neilay Kharwadkar <neilaykharwadkar@gmail.com>
>>> ---
>>> include/linux/font.h | 4 +-
>>> lib/fonts/Kconfig | 12 +
>>> lib/fonts/Makefile | 1 +
>>> lib/fonts/font_ter10x18.c | 5143
>>> +++++++++++++++++++++++++++++++++++++
>>> lib/fonts/fonts.c | 3 +
>>> 5 files changed, 5162 insertions(+), 1 deletion(-)
>>> create mode 100644 lib/fonts/font_ter10x18.c
>>>
>>> diff --git a/include/linux/font.h b/include/linux/font.h
>>> index 81caffd51bb4..fd8625cd76b2 100644
>>> --- a/include/linux/font.h
>>> +++ b/include/linux/font.h
>>> @@ -35,6 +35,7 @@ struct font_desc {
>>> #define FONT6x10_IDX 10
>>> #define TER16x32_IDX 11
>>> #define FONT6x8_IDX 12
>>> +#define TER10x18_IDX 13
>>> extern const struct font_desc font_vga_8x8,
>>> font_vga_8x16,
>>> @@ -48,7 +49,8 @@ extern const struct font_desc font_vga_8x8,
>>> font_mini_4x6,
>>> font_6x10,
>>> font_ter_16x32,
>>> - font_6x8;
>>> + font_6x8,
>>> + font_ter_10x18;
>>> /* Find a font with a specific name */
>>> diff --git a/lib/fonts/Kconfig b/lib/fonts/Kconfig
>>> index ae59b5b4e225..7d03823e46dc 100644
>>> --- a/lib/fonts/Kconfig
>>> +++ b/lib/fonts/Kconfig
>>> @@ -112,6 +112,17 @@ config FONT_SUN12x22
>>> big letters (like the letters used in the SPARC PROM). If the
>>> standard font is unreadable for you, say Y, otherwise say N.
>>> +config FONT_TER10x18
>>> + bool "Terminus 10x18 font (not supported by all drivers)"
>>> + depends on FRAMEBUFFER_CONSOLE || DRM_PANIC
>>> + depends on !SPARC && FONTS || SPARC
>>> + help
>>> + Terminus Font is a clean, fixed width bitmap font, designed
>>> + for long (8 and more hours per day) work with computers.
>>> + This is the high resolution version made for use with 13-16"
>>> laptops.
>>> + It fits between the normal 8x16 font and Terminus 16x32.
>>> + If other fonts are unreadable for you, say Y, otherwise say N.
>>> +
>>> config FONT_TER16x32
>>> bool "Terminus 16x32 font (not supported by all drivers)"
>>> depends on FRAMEBUFFER_CONSOLE || DRM_PANIC
>>> @@ -140,6 +151,7 @@ config FONT_AUTOSELECT
>>> depends on !FONT_SUN8x16
>>> depends on !FONT_SUN12x22
>>> depends on !FONT_10x18
>>> + depends on !FONT_TER10x18
>>> depends on !FONT_TER16x32
>>> depends on !FONT_6x8
>>> select FONT_8x16
>>> diff --git a/lib/fonts/Makefile b/lib/fonts/Makefile
>>> index e16f68492174..30a85a4292fa 100644
>>> --- a/lib/fonts/Makefile
>>> +++ b/lib/fonts/Makefile
>>> @@ -14,6 +14,7 @@ font-objs-$(CONFIG_FONT_PEARL_8x8) +=
>>> font_pearl_8x8.o
>>> font-objs-$(CONFIG_FONT_ACORN_8x8) += font_acorn_8x8.o
>>> font-objs-$(CONFIG_FONT_MINI_4x6) += font_mini_4x6.o
>>> font-objs-$(CONFIG_FONT_6x10) += font_6x10.o
>>> +font-objs-$(CONFIG_FONT_TER10x18) += font_ter10x18.o
>>> font-objs-$(CONFIG_FONT_TER16x32) += font_ter16x32.o
>>> font-objs-$(CONFIG_FONT_6x8) += font_6x8.o
>>> diff --git a/lib/fonts/font_ter10x18.c b/lib/fonts/font_ter10x18.c
>>> new file mode 100644
>>> index 000000000000..80356e9d56c7
>>> --- /dev/null
>>> +++ b/lib/fonts/font_ter10x18.c
>>> @@ -0,0 +1,5143 @@
>>> +// SPDX-License-Identifier: GPL-2.0
>>> +#include <linux/font.h>
>>> +#include <linux/module.h>
>>> +
>>> +#define FONTDATAMAX 9216
>>> +
>>> +static const struct font_data fontdata_ter10x18 = {
>>> + { 0, 0, FONTDATAMAX, 0 }, {
>>> + /* 0 0x00 '^@' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 1 0x01 '^A' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0x80, 0x40, /* #--------# */
>>> + 0x80, 0x40, /* #--------# */
>>> + 0xb3, 0x40, /* #-##--##-# */
>>> + 0xb3, 0x40, /* #-##--##-# */
>>> + 0x80, 0x40, /* #--------# */
>>> + 0x80, 0x40, /* #--------# */
>>> + 0xbf, 0x40, /* #-######-# */
>>> + 0x9e, 0x40, /* #--####--# */
>>> + 0x80, 0x40, /* #--------# */
>>> + 0x80, 0x40, /* #--------# */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 2 0x02 '^B' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xcc, 0xc0, /* ##--##--## */
>>> + 0xcc, 0xc0, /* ##--##--## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xc0, 0xc0, /* ##------## */
>>> + 0xe1, 0xc0, /* ###----### */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 3 0x03 '^C' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x73, 0x80, /* -###--###- */
>>> + 0xf3, 0xc0, /* ####--#### */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x1e, 0x00, /* ---####--- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 4 0x04 '^D' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x1e, 0x00, /* ---####--- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x1e, 0x00, /* ---####--- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 5 0x05 '^E' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x1e, 0x00, /* ---####--- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x1e, 0x00, /* ---####--- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x6d, 0x80, /* -##-##-##- */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0x6d, 0x80, /* -##-##-##- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 6 0x06 '^F' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x1e, 0x00, /* ---####--- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0x6d, 0x80, /* -##-##-##- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 7 0x07 '^G' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x1e, 0x00, /* ---####--- */
>>> + 0x1e, 0x00, /* ---####--- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 8 0x08 '^H' */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xf3, 0xc0, /* ####--#### */
>>> + 0xe1, 0xc0, /* ###----### */
>>> + 0xe1, 0xc0, /* ###----### */
>>> + 0xf3, 0xc0, /* ####--#### */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> +
>>> + /* 9 0x09 '^I' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x1e, 0x00, /* ---####--- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x21, 0x00, /* --#----#-- */
>>> + 0x21, 0x00, /* --#----#-- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x1e, 0x00, /* ---####--- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 10 0x0a '^J' */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xe1, 0xc0, /* ###----### */
>>> + 0xcc, 0xc0, /* ##--##--## */
>>> + 0xde, 0xc0, /* ##-####-## */
>>> + 0xde, 0xc0, /* ##-####-## */
>>> + 0xcc, 0xc0, /* ##--##--## */
>>> + 0xe1, 0xc0, /* ###----### */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> +
>>> + /* 11 0x0b '^K' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x0f, 0x80, /* ----#####- */
>>> + 0x03, 0x80, /* ------###- */
>>> + 0x06, 0x80, /* -----##-#- */
>>> + 0x0c, 0x80, /* ----##--#- */
>>> + 0x3e, 0x00, /* --#####--- */
>>> + 0x63, 0x00, /* -##---##-- */
>>> + 0x63, 0x00, /* -##---##-- */
>>> + 0x63, 0x00, /* -##---##-- */
>>> + 0x63, 0x00, /* -##---##-- */
>>> + 0x63, 0x00, /* -##---##-- */
>>> + 0x63, 0x00, /* -##---##-- */
>>> + 0x3e, 0x00, /* --#####--- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 12 0x0c '^L' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 13 0x0d '^M' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x3f, 0x80, /* --#######- */
>>> + 0x31, 0x80, /* --##---##- */
>>> + 0x31, 0x80, /* --##---##- */
>>> + 0x3f, 0x80, /* --#######- */
>>> + 0x30, 0x00, /* --##------ */
>>> + 0x30, 0x00, /* --##------ */
>>> + 0x30, 0x00, /* --##------ */
>>> + 0x30, 0x00, /* --##------ */
>>> + 0x30, 0x00, /* --##------ */
>>> + 0x30, 0x00, /* --##------ */
>>> + 0xf0, 0x00, /* ####------ */
>>> + 0xe0, 0x00, /* ###------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 14 0x0e '^N' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x63, 0x80, /* -##---###- */
>>> + 0xe3, 0x00, /* ###---##-- */
>>> + 0xc0, 0x00, /* ##-------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 15 0x0f '^O' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0xcc, 0xc0, /* ##--##--## */
>>> + 0x6d, 0x80, /* -##-##-##- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x1e, 0x00, /* ---####--- */
>>> + 0xf3, 0xc0, /* ####--#### */
>>> + 0x1e, 0x00, /* ---####--- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x6d, 0x80, /* -##-##-##- */
>>> + 0xcc, 0xc0, /* ##--##--## */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 16 0x10 '^P' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0xc0, 0x00, /* ##-------- */
>>> + 0xf0, 0x00, /* ####------ */
>>> + 0xfc, 0x00, /* ######---- */
>>> + 0xff, 0x00, /* ########-- */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0x00, /* ########-- */
>>> + 0xfc, 0x00, /* ######---- */
>>> + 0xf0, 0x00, /* ####------ */
>>> + 0xc0, 0x00, /* ##-------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 17 0x11 '^Q' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0xc0, /* --------## */
>>> + 0x03, 0xc0, /* ------#### */
>>> + 0x0f, 0xc0, /* ----###### */
>>> + 0x3f, 0xc0, /* --######## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0x3f, 0xc0, /* --######## */
>>> + 0x0f, 0xc0, /* ----###### */
>>> + 0x03, 0xc0, /* ------#### */
>>> + 0x00, 0xc0, /* --------## */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 18 0x12 '^R' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x1e, 0x00, /* ---####--- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x6d, 0x80, /* -##-##-##- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x6d, 0x80, /* -##-##-##- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x1e, 0x00, /* ---####--- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 19 0x13 '^S' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 20 0x14 '^T' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x3f, 0x80, /* --#######- */
>>> + 0x6d, 0x80, /* -##-##-##- */
>>> + 0x6d, 0x80, /* -##-##-##- */
>>> + 0x6d, 0x80, /* -##-##-##- */
>>> + 0x6d, 0x80, /* -##-##-##- */
>>> + 0x6d, 0x80, /* -##-##-##- */
>>> + 0x3d, 0x80, /* --####-##- */
>>> + 0x0d, 0x80, /* ----##-##- */
>>> + 0x0d, 0x80, /* ----##-##- */
>>> + 0x0d, 0x80, /* ----##-##- */
>>> + 0x0d, 0x80, /* ----##-##- */
>>> + 0x0d, 0x80, /* ----##-##- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 21 0x15 '^U' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x1e, 0x00, /* ---####--- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x30, 0x00, /* --##------ */
>>> + 0x1c, 0x00, /* ---###---- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x1b, 0x00, /* ---##-##-- */
>>> + 0x0e, 0x00, /* ----###--- */
>>> + 0x03, 0x00, /* ------##-- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x1e, 0x00, /* ---####--- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 22 0x16 '^V' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0xff, 0x80, /* #########- */
>>> + 0xff, 0x80, /* #########- */
>>> + 0xff, 0x80, /* #########- */
>>> + 0xff, 0x80, /* #########- */
>>> + 0xff, 0x80, /* #########- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 23 0x17 '^W' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x1e, 0x00, /* ---####--- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x6d, 0x80, /* -##-##-##- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x6d, 0x80, /* -##-##-##- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x1e, 0x00, /* ---####--- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 24 0x18 '^X' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x1e, 0x00, /* ---####--- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x6d, 0x80, /* -##-##-##- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 25 0x19 '^Y' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x6d, 0x80, /* -##-##-##- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x1e, 0x00, /* ---####--- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 26 0x1a '^Z' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x04, 0x00, /* -----#---- */
>>> + 0x06, 0x00, /* -----##--- */
>>> + 0x03, 0x00, /* ------##-- */
>>> + 0xff, 0x80, /* #########- */
>>> + 0xff, 0x80, /* #########- */
>>> + 0x03, 0x00, /* ------##-- */
>>> + 0x06, 0x00, /* -----##--- */
>>> + 0x04, 0x00, /* -----#---- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 27 0x1b '^[' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x10, 0x00, /* ---#------ */
>>> + 0x30, 0x00, /* --##------ */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0xff, 0x80, /* #########- */
>>> + 0xff, 0x80, /* #########- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x30, 0x00, /* --##------ */
>>> + 0x10, 0x00, /* ---#------ */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 28 0x1c '^\' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 29 0x1d '^]' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x12, 0x00, /* ---#--#--- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x12, 0x00, /* ---#--#--- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 30 0x1e '^^' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x1e, 0x00, /* ---####--- */
>>> + 0x1e, 0x00, /* ---####--- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 31 0x1f '^_' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x1e, 0x00, /* ---####--- */
>>> + 0x1e, 0x00, /* ---####--- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 32 0x20 ' ' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 33 0x21 '!' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 34 0x22 '"' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 35 0x23 '#' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 36 0x24 '$' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x6d, 0x80, /* -##-##-##- */
>>> + 0x6c, 0x00, /* -##-##---- */
>>> + 0x6c, 0x00, /* -##-##---- */
>>> + 0x6c, 0x00, /* -##-##---- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x0d, 0x80, /* ----##-##- */
>>> + 0x0d, 0x80, /* ----##-##- */
>>> + 0x0d, 0x80, /* ----##-##- */
>>> + 0x6d, 0x80, /* -##-##-##- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 37 0x25 '%' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x73, 0x00, /* -###--##-- */
>>> + 0x53, 0x00, /* -#-#--##-- */
>>> + 0x76, 0x00, /* -###-##--- */
>>> + 0x06, 0x00, /* -----##--- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x18, 0x00, /* ---##----- */
>>> + 0x18, 0x00, /* ---##----- */
>>> + 0x30, 0x00, /* --##------ */
>>> + 0x37, 0x00, /* --##-###-- */
>>> + 0x65, 0x00, /* -##--#-#-- */
>>> + 0x67, 0x00, /* -##--###-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 38 0x26 '&' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x3c, 0x00, /* --####---- */
>>> + 0x66, 0x00, /* -##--##--- */
>>> + 0x66, 0x00, /* -##--##--- */
>>> + 0x66, 0x00, /* -##--##--- */
>>> + 0x3c, 0x00, /* --####---- */
>>> + 0x39, 0x80, /* --###--##- */
>>> + 0x6d, 0x80, /* -##-##-##- */
>>> + 0xc7, 0x00, /* ##---###-- */
>>> + 0xc3, 0x00, /* ##----##-- */
>>> + 0xc3, 0x00, /* ##----##-- */
>>> + 0x67, 0x80, /* -##--####- */
>>> + 0x3d, 0x80, /* --####-##- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 39 0x27 ''' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 40 0x28 '(' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x06, 0x00, /* -----##--- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x18, 0x00, /* ---##----- */
>>> + 0x18, 0x00, /* ---##----- */
>>> + 0x18, 0x00, /* ---##----- */
>>> + 0x18, 0x00, /* ---##----- */
>>> + 0x18, 0x00, /* ---##----- */
>>> + 0x18, 0x00, /* ---##----- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x06, 0x00, /* -----##--- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 41 0x29 ')' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x18, 0x00, /* ---##----- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x06, 0x00, /* -----##--- */
>>> + 0x06, 0x00, /* -----##--- */
>>> + 0x06, 0x00, /* -----##--- */
>>> + 0x06, 0x00, /* -----##--- */
>>> + 0x06, 0x00, /* -----##--- */
>>> + 0x06, 0x00, /* -----##--- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x18, 0x00, /* ---##----- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 42 0x2a '*' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x63, 0x00, /* -##---##-- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x1c, 0x00, /* ---###---- */
>>> + 0xff, 0x80, /* #########- */
>>> + 0x1c, 0x00, /* ---###---- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x63, 0x00, /* -##---##-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 43 0x2b '+' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 44 0x2c ',' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x18, 0x00, /* ---##----- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 45 0x2d '-' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 46 0x2e '.' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 47 0x2f '/' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x03, 0x00, /* ------##-- */
>>> + 0x03, 0x00, /* ------##-- */
>>> + 0x06, 0x00, /* -----##--- */
>>> + 0x06, 0x00, /* -----##--- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x18, 0x00, /* ---##----- */
>>> + 0x18, 0x00, /* ---##----- */
>>> + 0x30, 0x00, /* --##------ */
>>> + 0x30, 0x00, /* --##------ */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 48 0x30 '0' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x63, 0x80, /* -##---###- */
>>> + 0x67, 0x80, /* -##--####- */
>>> + 0x6d, 0x80, /* -##-##-##- */
>>> + 0x79, 0x80, /* -####--##- */
>>> + 0x71, 0x80, /* -###---##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 49 0x31 '1' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x1c, 0x00, /* ---###---- */
>>> + 0x3c, 0x00, /* --####---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 50 0x32 '2' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x01, 0x80, /* -------##- */
>>> + 0x03, 0x00, /* ------##-- */
>>> + 0x06, 0x00, /* -----##--- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x18, 0x00, /* ---##----- */
>>> + 0x30, 0x00, /* --##------ */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 51 0x33 '3' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x01, 0x80, /* -------##- */
>>> + 0x01, 0x80, /* -------##- */
>>> + 0x1f, 0x00, /* ---#####-- */
>>> + 0x01, 0x80, /* -------##- */
>>> + 0x01, 0x80, /* -------##- */
>>> + 0x01, 0x80, /* -------##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 52 0x34 '4' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x01, 0x80, /* -------##- */
>>> + 0x03, 0x80, /* ------###- */
>>> + 0x07, 0x80, /* -----####- */
>>> + 0x0d, 0x80, /* ----##-##- */
>>> + 0x19, 0x80, /* ---##--##- */
>>> + 0x31, 0x80, /* --##---##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0x01, 0x80, /* -------##- */
>>> + 0x01, 0x80, /* -------##- */
>>> + 0x01, 0x80, /* -------##- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 53 0x35 '5' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x7f, 0x00, /* -#######-- */
>>> + 0x01, 0x80, /* -------##- */
>>> + 0x01, 0x80, /* -------##- */
>>> + 0x01, 0x80, /* -------##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 54 0x36 '6' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x1f, 0x00, /* ---#####-- */
>>> + 0x30, 0x00, /* --##------ */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x7f, 0x00, /* -#######-- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 55 0x37 '7' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x01, 0x80, /* -------##- */
>>> + 0x03, 0x00, /* ------##-- */
>>> + 0x03, 0x00, /* ------##-- */
>>> + 0x06, 0x00, /* -----##--- */
>>> + 0x06, 0x00, /* -----##--- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 56 0x38 '8' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 57 0x39 '9' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x3f, 0x80, /* --#######- */
>>> + 0x01, 0x80, /* -------##- */
>>> + 0x01, 0x80, /* -------##- */
>>> + 0x01, 0x80, /* -------##- */
>>> + 0x03, 0x00, /* ------##-- */
>>> + 0x3e, 0x00, /* --#####--- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 58 0x3a ':' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 59 0x3b ';' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x18, 0x00, /* ---##----- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 60 0x3c '<' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x03, 0x00, /* ------##-- */
>>> + 0x06, 0x00, /* -----##--- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x18, 0x00, /* ---##----- */
>>> + 0x30, 0x00, /* --##------ */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x30, 0x00, /* --##------ */
>>> + 0x18, 0x00, /* ---##----- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x06, 0x00, /* -----##--- */
>>> + 0x03, 0x00, /* ------##-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 61 0x3d '=' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 62 0x3e '>' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x30, 0x00, /* --##------ */
>>> + 0x18, 0x00, /* ---##----- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x06, 0x00, /* -----##--- */
>>> + 0x03, 0x00, /* ------##-- */
>>> + 0x03, 0x00, /* ------##-- */
>>> + 0x06, 0x00, /* -----##--- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x18, 0x00, /* ---##----- */
>>> + 0x30, 0x00, /* --##------ */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 63 0x3f '?' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x1e, 0x00, /* ---####--- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x01, 0x80, /* -------##- */
>>> + 0x03, 0x00, /* ------##-- */
>>> + 0x06, 0x00, /* -----##--- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 64 0x40 '@' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x7f, 0x00, /* -#######-- */
>>> + 0xc1, 0x80, /* ##-----##- */
>>> + 0xc1, 0x80, /* ##-----##- */
>>> + 0xcf, 0x80, /* ##--#####- */
>>> + 0xd9, 0x80, /* ##-##--##- */
>>> + 0xd9, 0x80, /* ##-##--##- */
>>> + 0xd9, 0x80, /* ##-##--##- */
>>> + 0xd9, 0x80, /* ##-##--##- */
>>> + 0xcf, 0x80, /* ##--#####- */
>>> + 0xc0, 0x00, /* ##-------- */
>>> + 0xc0, 0x00, /* ##-------- */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 65 0x41 'A' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 66 0x42 'B' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x7f, 0x00, /* -#######-- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x7f, 0x00, /* -#######-- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x7f, 0x00, /* -#######-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 67 0x43 'C' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 68 0x44 'D' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x7e, 0x00, /* -######--- */
>>> + 0x63, 0x00, /* -##---##-- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x63, 0x00, /* -##---##-- */
>>> + 0x7e, 0x00, /* -######--- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 69 0x45 'E' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x7e, 0x00, /* -######--- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 70 0x46 'F' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x7e, 0x00, /* -######--- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 71 0x47 'G' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x67, 0x80, /* -##--####- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 72 0x48 'H' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 73 0x49 'I' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x1e, 0x00, /* ---####--- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x1e, 0x00, /* ---####--- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 74 0x4a 'J' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x07, 0x80, /* -----####- */
>>> + 0x03, 0x00, /* ------##-- */
>>> + 0x03, 0x00, /* ------##-- */
>>> + 0x03, 0x00, /* ------##-- */
>>> + 0x03, 0x00, /* ------##-- */
>>> + 0x03, 0x00, /* ------##-- */
>>> + 0x03, 0x00, /* ------##-- */
>>> + 0x03, 0x00, /* ------##-- */
>>> + 0x63, 0x00, /* -##---##-- */
>>> + 0x63, 0x00, /* -##---##-- */
>>> + 0x63, 0x00, /* -##---##-- */
>>> + 0x3e, 0x00, /* --#####--- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 75 0x4b 'K' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x63, 0x00, /* -##---##-- */
>>> + 0x66, 0x00, /* -##--##--- */
>>> + 0x6c, 0x00, /* -##-##---- */
>>> + 0x78, 0x00, /* -####----- */
>>> + 0x78, 0x00, /* -####----- */
>>> + 0x6c, 0x00, /* -##-##---- */
>>> + 0x66, 0x00, /* -##--##--- */
>>> + 0x63, 0x00, /* -##---##-- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 76 0x4c 'L' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 77 0x4d 'M' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x80, 0x80, /* #-------#- */
>>> + 0xc1, 0x80, /* ##-----##- */
>>> + 0xe3, 0x80, /* ###---###- */
>>> + 0xf7, 0x80, /* ####-####- */
>>> + 0xdd, 0x80, /* ##-###-##- */
>>> + 0xc9, 0x80, /* ##--#--##- */
>>> + 0xc1, 0x80, /* ##-----##- */
>>> + 0xc1, 0x80, /* ##-----##- */
>>> + 0xc1, 0x80, /* ##-----##- */
>>> + 0xc1, 0x80, /* ##-----##- */
>>> + 0xc1, 0x80, /* ##-----##- */
>>> + 0xc1, 0x80, /* ##-----##- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 78 0x4e 'N' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x71, 0x80, /* -###---##- */
>>> + 0x79, 0x80, /* -####--##- */
>>> + 0x6d, 0x80, /* -##-##-##- */
>>> + 0x67, 0x80, /* -##--####- */
>>> + 0x63, 0x80, /* -##---###- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 79 0x4f 'O' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 80 0x50 'P' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x7f, 0x00, /* -#######-- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x7f, 0x00, /* -#######-- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 81 0x51 'Q' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x67, 0x80, /* -##--####- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x03, 0x00, /* ------##-- */
>>> + 0x01, 0x80, /* -------##- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 82 0x52 'R' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x7f, 0x00, /* -#######-- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x7f, 0x00, /* -#######-- */
>>> + 0x78, 0x00, /* -####----- */
>>> + 0x6c, 0x00, /* -##-##---- */
>>> + 0x66, 0x00, /* -##--##--- */
>>> + 0x63, 0x00, /* -##---##-- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 83 0x53 'S' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x01, 0x80, /* -------##- */
>>> + 0x01, 0x80, /* -------##- */
>>> + 0x01, 0x80, /* -------##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 84 0x54 'T' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 85 0x55 'U' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 86 0x56 'V' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x1e, 0x00, /* ---####--- */
>>> + 0x1e, 0x00, /* ---####--- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 87 0x57 'W' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0xc1, 0x80, /* ##-----##- */
>>> + 0xc1, 0x80, /* ##-----##- */
>>> + 0xc1, 0x80, /* ##-----##- */
>>> + 0xc1, 0x80, /* ##-----##- */
>>> + 0xc1, 0x80, /* ##-----##- */
>>> + 0xc1, 0x80, /* ##-----##- */
>>> + 0xc9, 0x80, /* ##--#--##- */
>>> + 0xdd, 0x80, /* ##-###-##- */
>>> + 0xf7, 0x80, /* ####-####- */
>>> + 0xe3, 0x80, /* ###---###- */
>>> + 0xc1, 0x80, /* ##-----##- */
>>> + 0x80, 0x80, /* #-------#- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 88 0x58 'X' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x1e, 0x00, /* ---####--- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x1e, 0x00, /* ---####--- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 89 0x59 'Y' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x1e, 0x00, /* ---####--- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 90 0x5a 'Z' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0x01, 0x80, /* -------##- */
>>> + 0x01, 0x80, /* -------##- */
>>> + 0x03, 0x00, /* ------##-- */
>>> + 0x06, 0x00, /* -----##--- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x18, 0x00, /* ---##----- */
>>> + 0x30, 0x00, /* --##------ */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 91 0x5b '[' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x1e, 0x00, /* ---####--- */
>>> + 0x18, 0x00, /* ---##----- */
>>> + 0x18, 0x00, /* ---##----- */
>>> + 0x18, 0x00, /* ---##----- */
>>> + 0x18, 0x00, /* ---##----- */
>>> + 0x18, 0x00, /* ---##----- */
>>> + 0x18, 0x00, /* ---##----- */
>>> + 0x18, 0x00, /* ---##----- */
>>> + 0x18, 0x00, /* ---##----- */
>>> + 0x18, 0x00, /* ---##----- */
>>> + 0x18, 0x00, /* ---##----- */
>>> + 0x1e, 0x00, /* ---####--- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 92 0x5c '\' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x30, 0x00, /* --##------ */
>>> + 0x30, 0x00, /* --##------ */
>>> + 0x18, 0x00, /* ---##----- */
>>> + 0x18, 0x00, /* ---##----- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x06, 0x00, /* -----##--- */
>>> + 0x06, 0x00, /* -----##--- */
>>> + 0x03, 0x00, /* ------##-- */
>>> + 0x03, 0x00, /* ------##-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 93 0x5d ']' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x1e, 0x00, /* ---####--- */
>>> + 0x06, 0x00, /* -----##--- */
>>> + 0x06, 0x00, /* -----##--- */
>>> + 0x06, 0x00, /* -----##--- */
>>> + 0x06, 0x00, /* -----##--- */
>>> + 0x06, 0x00, /* -----##--- */
>>> + 0x06, 0x00, /* -----##--- */
>>> + 0x06, 0x00, /* -----##--- */
>>> + 0x06, 0x00, /* -----##--- */
>>> + 0x06, 0x00, /* -----##--- */
>>> + 0x06, 0x00, /* -----##--- */
>>> + 0x1e, 0x00, /* ---####--- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 94 0x5e '^' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x1e, 0x00, /* ---####--- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 95 0x5f '_' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 96 0x60 '`' */
>>> + 0x30, 0x00, /* --##------ */
>>> + 0x18, 0x00, /* ---##----- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 97 0x61 'a' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x01, 0x80, /* -------##- */
>>> + 0x01, 0x80, /* -------##- */
>>> + 0x3f, 0x80, /* --#######- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x3f, 0x80, /* --#######- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 98 0x62 'b' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x7f, 0x00, /* -#######-- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x7f, 0x00, /* -#######-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 99 0x63 'c' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 100 0x64 'd' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x01, 0x80, /* -------##- */
>>> + 0x01, 0x80, /* -------##- */
>>> + 0x01, 0x80, /* -------##- */
>>> + 0x3f, 0x80, /* --#######- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x3f, 0x80, /* --#######- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 101 0x65 'e' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 102 0x66 'f' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x07, 0x80, /* -----####- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 103 0x67 'g' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x3f, 0x80, /* --#######- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x3f, 0x80, /* --#######- */
>>> + 0x01, 0x80, /* -------##- */
>>> + 0x01, 0x80, /* -------##- */
>>> + 0x3f, 0x00, /* --######-- */
>>> +
>>> + /* 104 0x68 'h' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x7f, 0x00, /* -#######-- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 105 0x69 'i' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x1c, 0x00, /* ---###---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x1e, 0x00, /* ---####--- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 106 0x6a 'j' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x03, 0x00, /* ------##-- */
>>> + 0x03, 0x00, /* ------##-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x07, 0x00, /* -----###-- */
>>> + 0x03, 0x00, /* ------##-- */
>>> + 0x03, 0x00, /* ------##-- */
>>> + 0x03, 0x00, /* ------##-- */
>>> + 0x03, 0x00, /* ------##-- */
>>> + 0x03, 0x00, /* ------##-- */
>>> + 0x03, 0x00, /* ------##-- */
>>> + 0x03, 0x00, /* ------##-- */
>>> + 0x03, 0x00, /* ------##-- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x1e, 0x00, /* ---####--- */
>>> +
>>> + /* 107 0x6b 'k' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x63, 0x00, /* -##---##-- */
>>> + 0x66, 0x00, /* -##--##--- */
>>> + 0x6c, 0x00, /* -##-##---- */
>>> + 0x78, 0x00, /* -####----- */
>>> + 0x6c, 0x00, /* -##-##---- */
>>> + 0x66, 0x00, /* -##--##--- */
>>> + 0x63, 0x00, /* -##---##-- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 108 0x6c 'l' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x1c, 0x00, /* ---###---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x1e, 0x00, /* ---####--- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 109 0x6d 'm' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x7f, 0x00, /* -#######-- */
>>> + 0x6d, 0x80, /* -##-##-##- */
>>> + 0x6d, 0x80, /* -##-##-##- */
>>> + 0x6d, 0x80, /* -##-##-##- */
>>> + 0x6d, 0x80, /* -##-##-##- */
>>> + 0x6d, 0x80, /* -##-##-##- */
>>> + 0x6d, 0x80, /* -##-##-##- */
>>> + 0x6d, 0x80, /* -##-##-##- */
>>> + 0x6d, 0x80, /* -##-##-##- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 110 0x6e 'n' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x7f, 0x00, /* -#######-- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 111 0x6f 'o' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 112 0x70 'p' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x7f, 0x00, /* -#######-- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x7f, 0x00, /* -#######-- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> +
>>> + /* 113 0x71 'q' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x3f, 0x80, /* --#######- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x3f, 0x80, /* --#######- */
>>> + 0x01, 0x80, /* -------##- */
>>> + 0x01, 0x80, /* -------##- */
>>> + 0x01, 0x80, /* -------##- */
>>> +
>>> + /* 114 0x72 'r' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x6f, 0x80, /* -##-#####- */
>>> + 0x78, 0x00, /* -####----- */
>>> + 0x70, 0x00, /* -###------ */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 115 0x73 's' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x01, 0x80, /* -------##- */
>>> + 0x01, 0x80, /* -------##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 116 0x74 't' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x18, 0x00, /* ---##----- */
>>> + 0x18, 0x00, /* ---##----- */
>>> + 0x18, 0x00, /* ---##----- */
>>> + 0x7e, 0x00, /* -######--- */
>>> + 0x18, 0x00, /* ---##----- */
>>> + 0x18, 0x00, /* ---##----- */
>>> + 0x18, 0x00, /* ---##----- */
>>> + 0x18, 0x00, /* ---##----- */
>>> + 0x18, 0x00, /* ---##----- */
>>> + 0x18, 0x00, /* ---##----- */
>>> + 0x18, 0x00, /* ---##----- */
>>> + 0x0f, 0x00, /* ----####-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 117 0x75 'u' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x3f, 0x80, /* --#######- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 118 0x76 'v' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x1e, 0x00, /* ---####--- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 119 0x77 'w' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x6d, 0x80, /* -##-##-##- */
>>> + 0x6d, 0x80, /* -##-##-##- */
>>> + 0x6d, 0x80, /* -##-##-##- */
>>> + 0x6d, 0x80, /* -##-##-##- */
>>> + 0x6d, 0x80, /* -##-##-##- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 120 0x78 'x' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x1e, 0x00, /* ---####--- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x1e, 0x00, /* ---####--- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 121 0x79 'y' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x3f, 0x80, /* --#######- */
>>> + 0x01, 0x80, /* -------##- */
>>> + 0x01, 0x80, /* -------##- */
>>> + 0x3f, 0x00, /* --######-- */
>>> +
>>> + /* 122 0x7a 'z' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0x01, 0x80, /* -------##- */
>>> + 0x03, 0x00, /* ------##-- */
>>> + 0x06, 0x00, /* -----##--- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x18, 0x00, /* ---##----- */
>>> + 0x30, 0x00, /* --##------ */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 123 0x7b '{' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x07, 0x00, /* -----###-- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x38, 0x00, /* --###----- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x07, 0x00, /* -----###-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 124 0x7c '|' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 125 0x7d '}' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x38, 0x00, /* --###----- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x07, 0x00, /* -----###-- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x38, 0x00, /* --###----- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 126 0x7e '~' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x39, 0x80, /* --###--##- */
>>> + 0x6d, 0x80, /* -##-##-##- */
>>> + 0x6d, 0x80, /* -##-##-##- */
>>> + 0x67, 0x00, /* -##--###-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 127 0x7f '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x08, 0x00, /* ----#----- */
>>> + 0x1c, 0x00, /* ---###---- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x63, 0x00, /* -##---##-- */
>>> + 0xc1, 0x80, /* ##-----##- */
>>> + 0xc1, 0x80, /* ##-----##- */
>>> + 0xc1, 0x80, /* ##-----##- */
>>> + 0xc1, 0x80, /* ##-----##- */
>>> + 0xc1, 0x80, /* ##-----##- */
>>> + 0xff, 0x80, /* #########- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 128 0x80 '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x18, 0x00, /* ---##----- */
>>> +
>>> + /* 129 0x81 '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x3f, 0x80, /* --#######- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 130 0x82 '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x06, 0x00, /* -----##--- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 131 0x83 '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x1e, 0x00, /* ---####--- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x01, 0x80, /* -------##- */
>>> + 0x01, 0x80, /* -------##- */
>>> + 0x3f, 0x80, /* --#######- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x3f, 0x80, /* --#######- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 132 0x84 '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x01, 0x80, /* -------##- */
>>> + 0x01, 0x80, /* -------##- */
>>> + 0x3f, 0x80, /* --#######- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x3f, 0x80, /* --#######- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 133 0x85 '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x18, 0x00, /* ---##----- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x01, 0x80, /* -------##- */
>>> + 0x01, 0x80, /* -------##- */
>>> + 0x3f, 0x80, /* --#######- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x3f, 0x80, /* --#######- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 134 0x86 '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x1e, 0x00, /* ---####--- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x1e, 0x00, /* ---####--- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x01, 0x80, /* -------##- */
>>> + 0x01, 0x80, /* -------##- */
>>> + 0x3f, 0x80, /* --#######- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x3f, 0x80, /* --#######- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 135 0x87 '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x18, 0x00, /* ---##----- */
>>> +
>>> + /* 136 0x88 '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x1e, 0x00, /* ---####--- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 137 0x89 '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 138 0x8a '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x18, 0x00, /* ---##----- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 139 0x8b '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x1c, 0x00, /* ---###---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x1e, 0x00, /* ---####--- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 140 0x8c '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x1e, 0x00, /* ---####--- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x1c, 0x00, /* ---###---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x1e, 0x00, /* ---####--- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 141 0x8d '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x18, 0x00, /* ---##----- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x1c, 0x00, /* ---###---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x1e, 0x00, /* ---####--- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 142 0x8e '' */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 143 0x8f '' */
>>> + 0x1e, 0x00, /* ---####--- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x1e, 0x00, /* ---####--- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 144 0x90 '' */
>>> + 0x06, 0x00, /* -----##--- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x7e, 0x00, /* -######--- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 145 0x91 '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x7b, 0x80, /* -####-###- */
>>> + 0x0c, 0xc0, /* ----##--## */
>>> + 0x0c, 0xc0, /* ----##--## */
>>> + 0x7c, 0xc0, /* -#####--## */
>>> + 0xcf, 0xc0, /* ##--###### */
>>> + 0xcc, 0x00, /* ##--##---- */
>>> + 0xcc, 0x00, /* ##--##---- */
>>> + 0xcc, 0xc0, /* ##--##--## */
>>> + 0x77, 0x80, /* -###-####- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 146 0x92 '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x7f, 0xc0, /* -######### */
>>> + 0xc6, 0x00, /* ##---##--- */
>>> + 0xc6, 0x00, /* ##---##--- */
>>> + 0xc6, 0x00, /* ##---##--- */
>>> + 0xc6, 0x00, /* ##---##--- */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xc6, 0x00, /* ##---##--- */
>>> + 0xc6, 0x00, /* ##---##--- */
>>> + 0xc6, 0x00, /* ##---##--- */
>>> + 0xc6, 0x00, /* ##---##--- */
>>> + 0xc6, 0x00, /* ##---##--- */
>>> + 0xc7, 0xc0, /* ##---##### */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 147 0x93 '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x1e, 0x00, /* ---####--- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 148 0x94 '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 149 0x95 '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x18, 0x00, /* ---##----- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 150 0x96 '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x1e, 0x00, /* ---####--- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x3f, 0x80, /* --#######- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 151 0x97 '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x18, 0x00, /* ---##----- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x3f, 0x80, /* --#######- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 152 0x98 '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x3f, 0x80, /* --#######- */
>>> + 0x01, 0x80, /* -------##- */
>>> + 0x01, 0x80, /* -------##- */
>>> + 0x3f, 0x00, /* --######-- */
>>> +
>>> + /* 153 0x99 '' */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 154 0x9a '' */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 155 0x9b '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x6d, 0x80, /* -##-##-##- */
>>> + 0x6c, 0x00, /* -##-##---- */
>>> + 0x6c, 0x00, /* -##-##---- */
>>> + 0x6c, 0x00, /* -##-##---- */
>>> + 0x6c, 0x00, /* -##-##---- */
>>> + 0x6c, 0x00, /* -##-##---- */
>>> + 0x6d, 0x80, /* -##-##-##- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 156 0x9c '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x1e, 0x00, /* ---####--- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x30, 0x00, /* --##------ */
>>> + 0x30, 0x00, /* --##------ */
>>> + 0x30, 0x00, /* --##------ */
>>> + 0x7e, 0x00, /* -######--- */
>>> + 0x30, 0x00, /* --##------ */
>>> + 0x30, 0x00, /* --##------ */
>>> + 0x30, 0x00, /* --##------ */
>>> + 0x30, 0x00, /* --##------ */
>>> + 0x31, 0x80, /* --##---##- */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 157 0x9d '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x1e, 0x00, /* ---####--- */
>>> + 0x1e, 0x00, /* ---####--- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 158 0x9e '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0xf8, 0x00, /* #####----- */
>>> + 0xcc, 0x00, /* ##--##---- */
>>> + 0xcc, 0x00, /* ##--##---- */
>>> + 0xcc, 0x00, /* ##--##---- */
>>> + 0xcc, 0x00, /* ##--##---- */
>>> + 0xfb, 0x00, /* #####-##-- */
>>> + 0xc3, 0x00, /* ##----##-- */
>>> + 0xc7, 0x80, /* ##---####- */
>>> + 0xc3, 0x00, /* ##----##-- */
>>> + 0xc3, 0x00, /* ##----##-- */
>>> + 0xc3, 0x00, /* ##----##-- */
>>> + 0xc1, 0x80, /* ##-----##- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 159 0x9f '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x07, 0x00, /* -----###-- */
>>> + 0x0d, 0x80, /* ----##-##- */
>>> + 0x0d, 0x80, /* ----##-##- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x6c, 0x00, /* -##-##---- */
>>> + 0x6c, 0x00, /* -##-##---- */
>>> + 0x38, 0x00, /* --###----- */
>>> +
>>> + /* 160 0xa0 '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x06, 0x00, /* -----##--- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x01, 0x80, /* -------##- */
>>> + 0x01, 0x80, /* -------##- */
>>> + 0x3f, 0x80, /* --#######- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x3f, 0x80, /* --#######- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 161 0xa1 '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x06, 0x00, /* -----##--- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x1c, 0x00, /* ---###---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x1e, 0x00, /* ---####--- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 162 0xa2 '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x06, 0x00, /* -----##--- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 163 0xa3 '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x06, 0x00, /* -----##--- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x3f, 0x80, /* --#######- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 164 0xa4 '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x3b, 0x80, /* --###-###- */
>>> + 0x6e, 0x00, /* -##-###--- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x7f, 0x00, /* -#######-- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 165 0xa5 '' */
>>> + 0x3b, 0x80, /* --###-###- */
>>> + 0x6e, 0x00, /* -##-###--- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x71, 0x80, /* -###---##- */
>>> + 0x79, 0x80, /* -####--##- */
>>> + 0x6d, 0x80, /* -##-##-##- */
>>> + 0x67, 0x80, /* -##--####- */
>>> + 0x63, 0x80, /* -##---###- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 166 0xa6 '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x3e, 0x00, /* --#####--- */
>>> + 0x03, 0x00, /* ------##-- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x63, 0x00, /* -##---##-- */
>>> + 0x63, 0x00, /* -##---##-- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x7f, 0x00, /* -#######-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 167 0xa7 '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x3e, 0x00, /* --#####--- */
>>> + 0x63, 0x00, /* -##---##-- */
>>> + 0x63, 0x00, /* -##---##-- */
>>> + 0x63, 0x00, /* -##---##-- */
>>> + 0x63, 0x00, /* -##---##-- */
>>> + 0x3e, 0x00, /* --#####--- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x7f, 0x00, /* -#######-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 168 0xa8 '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x18, 0x00, /* ---##----- */
>>> + 0x30, 0x00, /* --##------ */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x1e, 0x00, /* ---####--- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 169 0xa9 '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 170 0xaa '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0x01, 0x80, /* -------##- */
>>> + 0x01, 0x80, /* -------##- */
>>> + 0x01, 0x80, /* -------##- */
>>> + 0x01, 0x80, /* -------##- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 171 0xab '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x30, 0x00, /* --##------ */
>>> + 0x70, 0x00, /* -###------ */
>>> + 0x30, 0x80, /* --##----#- */
>>> + 0x31, 0x80, /* --##---##- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x18, 0x00, /* ---##----- */
>>> + 0x37, 0x00, /* --##-###-- */
>>> + 0x6d, 0x80, /* -##-##-##- */
>>> + 0xc1, 0x80, /* ##-----##- */
>>> + 0x83, 0x00, /* #-----##-- */
>>> + 0x06, 0x00, /* -----##--- */
>>> + 0x0f, 0x80, /* ----#####- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 172 0xac '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x30, 0x00, /* --##------ */
>>> + 0x70, 0x00, /* -###------ */
>>> + 0x30, 0x80, /* --##----#- */
>>> + 0x31, 0x80, /* --##---##- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x19, 0x80, /* ---##--##- */
>>> + 0x33, 0x80, /* --##--###- */
>>> + 0x67, 0x80, /* -##--####- */
>>> + 0xcd, 0x80, /* ##--##-##- */
>>> + 0x8f, 0x80, /* #---#####- */
>>> + 0x01, 0x80, /* -------##- */
>>> + 0x01, 0x80, /* -------##- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 173 0xad '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 174 0xae '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x0c, 0xc0, /* ----##--## */
>>> + 0x19, 0x80, /* ---##--##- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x66, 0x00, /* -##--##--- */
>>> + 0xcc, 0x00, /* ##--##---- */
>>> + 0x66, 0x00, /* -##--##--- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x19, 0x80, /* ---##--##- */
>>> + 0x0c, 0xc0, /* ----##--## */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 175 0xaf '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0xcc, 0x00, /* ##--##---- */
>>> + 0x66, 0x00, /* -##--##--- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x19, 0x80, /* ---##--##- */
>>> + 0x0c, 0xc0, /* ----##--## */
>>> + 0x19, 0x80, /* ---##--##- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x66, 0x00, /* -##--##--- */
>>> + 0xcc, 0x00, /* ##--##---- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 176 0xb0 '' */
>>> + 0xaa, 0x80, /* #-#-#-#-#- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0xaa, 0x80, /* #-#-#-#-#- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0xaa, 0x80, /* #-#-#-#-#- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0xaa, 0x80, /* #-#-#-#-#- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0xaa, 0x80, /* #-#-#-#-#- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0xaa, 0x80, /* #-#-#-#-#- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0xaa, 0x80, /* #-#-#-#-#- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0xaa, 0x80, /* #-#-#-#-#- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0xaa, 0x80, /* #-#-#-#-#- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 177 0xb1 '' */
>>> + 0xaa, 0x80, /* #-#-#-#-#- */
>>> + 0x55, 0x40, /* -#-#-#-#-# */
>>> + 0xaa, 0x80, /* #-#-#-#-#- */
>>> + 0x55, 0x40, /* -#-#-#-#-# */
>>> + 0xaa, 0x80, /* #-#-#-#-#- */
>>> + 0x55, 0x40, /* -#-#-#-#-# */
>>> + 0xaa, 0x80, /* #-#-#-#-#- */
>>> + 0x55, 0x40, /* -#-#-#-#-# */
>>> + 0xaa, 0x80, /* #-#-#-#-#- */
>>> + 0x55, 0x40, /* -#-#-#-#-# */
>>> + 0xaa, 0x80, /* #-#-#-#-#- */
>>> + 0x55, 0x40, /* -#-#-#-#-# */
>>> + 0xaa, 0x80, /* #-#-#-#-#- */
>>> + 0x55, 0x40, /* -#-#-#-#-# */
>>> + 0xaa, 0x80, /* #-#-#-#-#- */
>>> + 0x55, 0x40, /* -#-#-#-#-# */
>>> + 0xaa, 0x80, /* #-#-#-#-#- */
>>> + 0x55, 0x40, /* -#-#-#-#-# */
>>> +
>>> + /* 178 0xb2 '' */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xaa, 0x80, /* #-#-#-#-#- */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xaa, 0x80, /* #-#-#-#-#- */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xaa, 0x80, /* #-#-#-#-#- */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xaa, 0x80, /* #-#-#-#-#- */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xaa, 0x80, /* #-#-#-#-#- */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xaa, 0x80, /* #-#-#-#-#- */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xaa, 0x80, /* #-#-#-#-#- */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xaa, 0x80, /* #-#-#-#-#- */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xaa, 0x80, /* #-#-#-#-#- */
>>> +
>>> + /* 179 0xb3 '' */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> +
>>> + /* 180 0xb4 '' */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0xfc, 0x00, /* ######---- */
>>> + 0xfc, 0x00, /* ######---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> +
>>> + /* 181 0xb5 '' */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0xfc, 0x00, /* ######---- */
>>> + 0xfc, 0x00, /* ######---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0xfc, 0x00, /* ######---- */
>>> + 0xfc, 0x00, /* ######---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> +
>>> + /* 182 0xb6 '' */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0xf6, 0x00, /* ####-##--- */
>>> + 0xf6, 0x00, /* ####-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> +
>>> + /* 183 0xb7 '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0xfe, 0x00, /* #######--- */
>>> + 0xfe, 0x00, /* #######--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> +
>>> + /* 184 0xb8 '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0xfc, 0x00, /* ######---- */
>>> + 0xfc, 0x00, /* ######---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0xfc, 0x00, /* ######---- */
>>> + 0xfc, 0x00, /* ######---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> +
>>> + /* 185 0xb9 '' */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0xf6, 0x00, /* ####-##--- */
>>> + 0xf6, 0x00, /* ####-##--- */
>>> + 0x06, 0x00, /* -----##--- */
>>> + 0xf6, 0x00, /* ####-##--- */
>>> + 0xf6, 0x00, /* ####-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> +
>>> + /* 186 0xba '' */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> +
>>> + /* 187 0xbb '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0xfe, 0x00, /* #######--- */
>>> + 0xfe, 0x00, /* #######--- */
>>> + 0x06, 0x00, /* -----##--- */
>>> + 0xf6, 0x00, /* ####-##--- */
>>> + 0xf6, 0x00, /* ####-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> +
>>> + /* 188 0xbc '' */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0xf6, 0x00, /* ####-##--- */
>>> + 0xf6, 0x00, /* ####-##--- */
>>> + 0x06, 0x00, /* -----##--- */
>>> + 0xfe, 0x00, /* #######--- */
>>> + 0xfe, 0x00, /* #######--- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 189 0xbd '' */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0xfe, 0x00, /* #######--- */
>>> + 0xfe, 0x00, /* #######--- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 190 0xbe '' */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0xfc, 0x00, /* ######---- */
>>> + 0xfc, 0x00, /* ######---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0xfc, 0x00, /* ######---- */
>>> + 0xfc, 0x00, /* ######---- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 191 0xbf '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0xfc, 0x00, /* ######---- */
>>> + 0xfc, 0x00, /* ######---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> +
>>> + /* 192 0xc0 '' */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0f, 0xc0, /* ----###### */
>>> + 0x0f, 0xc0, /* ----###### */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 193 0xc1 '' */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 194 0xc2 '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> +
>>> + /* 195 0xc3 '' */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0f, 0xc0, /* ----###### */
>>> + 0x0f, 0xc0, /* ----###### */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> +
>>> + /* 196 0xc4 '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 197 0xc5 '' */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> +
>>> + /* 198 0xc6 '' */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0f, 0xc0, /* ----###### */
>>> + 0x0f, 0xc0, /* ----###### */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0f, 0xc0, /* ----###### */
>>> + 0x0f, 0xc0, /* ----###### */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> +
>>> + /* 199 0xc7 '' */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x37, 0xc0, /* --##-##### */
>>> + 0x37, 0xc0, /* --##-##### */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> +
>>> + /* 200 0xc8 '' */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x37, 0xc0, /* --##-##### */
>>> + 0x37, 0xc0, /* --##-##### */
>>> + 0x30, 0x00, /* --##------ */
>>> + 0x3f, 0xc0, /* --######## */
>>> + 0x3f, 0xc0, /* --######## */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 201 0xc9 '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x3f, 0xc0, /* --######## */
>>> + 0x3f, 0xc0, /* --######## */
>>> + 0x30, 0x00, /* --##------ */
>>> + 0x37, 0xc0, /* --##-##### */
>>> + 0x37, 0xc0, /* --##-##### */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> +
>>> + /* 202 0xca '' */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0xf7, 0xc0, /* ####-##### */
>>> + 0xf7, 0xc0, /* ####-##### */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 203 0xcb '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0xf7, 0xc0, /* ####-##### */
>>> + 0xf7, 0xc0, /* ####-##### */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> +
>>> + /* 204 0xcc '' */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x37, 0xc0, /* --##-##### */
>>> + 0x37, 0xc0, /* --##-##### */
>>> + 0x30, 0x00, /* --##------ */
>>> + 0x37, 0xc0, /* --##-##### */
>>> + 0x37, 0xc0, /* --##-##### */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> +
>>> + /* 205 0xcd '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 206 0xce '' */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0xf7, 0xc0, /* ####-##### */
>>> + 0xf7, 0xc0, /* ####-##### */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0xf7, 0xc0, /* ####-##### */
>>> + 0xf7, 0xc0, /* ####-##### */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> +
>>> + /* 207 0xcf '' */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 208 0xd0 '' */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 209 0xd1 '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> +
>>> + /* 210 0xd2 '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> +
>>> + /* 211 0xd3 '' */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x3f, 0xc0, /* --######## */
>>> + 0x3f, 0xc0, /* --######## */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 212 0xd4 '' */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0f, 0xc0, /* ----###### */
>>> + 0x0f, 0xc0, /* ----###### */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0f, 0xc0, /* ----###### */
>>> + 0x0f, 0xc0, /* ----###### */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 213 0xd5 '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x0f, 0xc0, /* ----###### */
>>> + 0x0f, 0xc0, /* ----###### */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0f, 0xc0, /* ----###### */
>>> + 0x0f, 0xc0, /* ----###### */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> +
>>> + /* 214 0xd6 '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x3f, 0xc0, /* --######## */
>>> + 0x3f, 0xc0, /* --######## */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> +
>>> + /* 215 0xd7 '' */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> + 0x36, 0x00, /* --##-##--- */
>>> +
>>> + /* 216 0xd8 '' */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> +
>>> + /* 217 0xd9 '' */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0xfc, 0x00, /* ######---- */
>>> + 0xfc, 0x00, /* ######---- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 218 0xda '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x0f, 0xc0, /* ----###### */
>>> + 0x0f, 0xc0, /* ----###### */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> +
>>> + /* 219 0xdb '' */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> +
>>> + /* 220 0xdc '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> +
>>> + /* 221 0xdd '' */
>>> + 0xf8, 0x00, /* #####----- */
>>> + 0xf8, 0x00, /* #####----- */
>>> + 0xf8, 0x00, /* #####----- */
>>> + 0xf8, 0x00, /* #####----- */
>>> + 0xf8, 0x00, /* #####----- */
>>> + 0xf8, 0x00, /* #####----- */
>>> + 0xf8, 0x00, /* #####----- */
>>> + 0xf8, 0x00, /* #####----- */
>>> + 0xf8, 0x00, /* #####----- */
>>> + 0xf8, 0x00, /* #####----- */
>>> + 0xf8, 0x00, /* #####----- */
>>> + 0xf8, 0x00, /* #####----- */
>>> + 0xf8, 0x00, /* #####----- */
>>> + 0xf8, 0x00, /* #####----- */
>>> + 0xf8, 0x00, /* #####----- */
>>> + 0xf8, 0x00, /* #####----- */
>>> + 0xf8, 0x00, /* #####----- */
>>> + 0xf8, 0x00, /* #####----- */
>>> +
>>> + /* 222 0xde '' */
>>> + 0x07, 0xc0, /* -----##### */
>>> + 0x07, 0xc0, /* -----##### */
>>> + 0x07, 0xc0, /* -----##### */
>>> + 0x07, 0xc0, /* -----##### */
>>> + 0x07, 0xc0, /* -----##### */
>>> + 0x07, 0xc0, /* -----##### */
>>> + 0x07, 0xc0, /* -----##### */
>>> + 0x07, 0xc0, /* -----##### */
>>> + 0x07, 0xc0, /* -----##### */
>>> + 0x07, 0xc0, /* -----##### */
>>> + 0x07, 0xc0, /* -----##### */
>>> + 0x07, 0xc0, /* -----##### */
>>> + 0x07, 0xc0, /* -----##### */
>>> + 0x07, 0xc0, /* -----##### */
>>> + 0x07, 0xc0, /* -----##### */
>>> + 0x07, 0xc0, /* -----##### */
>>> + 0x07, 0xc0, /* -----##### */
>>> + 0x07, 0xc0, /* -----##### */
>>> +
>>> + /* 223 0xdf '' */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0xff, 0xc0, /* ########## */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 224 0xe0 '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x7d, 0x80, /* -#####-##- */
>>> + 0xc7, 0x00, /* ##---###-- */
>>> + 0xc6, 0x00, /* ##---##--- */
>>> + 0xc6, 0x00, /* ##---##--- */
>>> + 0xc6, 0x00, /* ##---##--- */
>>> + 0xc6, 0x00, /* ##---##--- */
>>> + 0xc6, 0x00, /* ##---##--- */
>>> + 0xc7, 0x00, /* ##---###-- */
>>> + 0x7d, 0x80, /* -#####-##- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 225 0xe1 '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x3e, 0x00, /* --#####--- */
>>> + 0x63, 0x00, /* -##---##-- */
>>> + 0x63, 0x00, /* -##---##-- */
>>> + 0x63, 0x00, /* -##---##-- */
>>> + 0x62, 0x00, /* -##---#--- */
>>> + 0x7f, 0x00, /* -#######-- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x7f, 0x00, /* -#######-- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> +
>>> + /* 226 0xe2 '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 227 0xe3 '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 228 0xe4 '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x30, 0x00, /* --##------ */
>>> + 0x18, 0x00, /* ---##----- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x06, 0x00, /* -----##--- */
>>> + 0x06, 0x00, /* -----##--- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x18, 0x00, /* ---##----- */
>>> + 0x30, 0x00, /* --##------ */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 229 0xe5 '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x1f, 0xc0, /* ---####### */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x1e, 0x00, /* ---####--- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 230 0xe6 '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x63, 0x80, /* -##---###- */
>>> + 0x7d, 0x80, /* -#####-##- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> +
>>> + /* 231 0xe7 '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x07, 0x00, /* -----###-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 232 0xe8 '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x6d, 0x80, /* -##-##-##- */
>>> + 0x6d, 0x80, /* -##-##-##- */
>>> + 0x6d, 0x80, /* -##-##-##- */
>>> + 0x6d, 0x80, /* -##-##-##- */
>>> + 0x6d, 0x80, /* -##-##-##- */
>>> + 0x6d, 0x80, /* -##-##-##- */
>>> + 0x6d, 0x80, /* -##-##-##- */
>>> + 0x6d, 0x80, /* -##-##-##- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 233 0xe9 '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x6d, 0x80, /* -##-##-##- */
>>> + 0x6d, 0x80, /* -##-##-##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 234 0xea '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x73, 0x80, /* -###--###- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 235 0xeb '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x18, 0x00, /* ---##----- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x1e, 0x00, /* ---####--- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x1e, 0x00, /* ---####--- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 236 0xec '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x6d, 0x80, /* -##-##-##- */
>>> + 0x6d, 0x80, /* -##-##-##- */
>>> + 0x6d, 0x80, /* -##-##-##- */
>>> + 0x6d, 0x80, /* -##-##-##- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 237 0xed '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x01, 0x80, /* -------##- */
>>> + 0x03, 0x00, /* ------##-- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x67, 0x80, /* -##--####- */
>>> + 0x6d, 0x80, /* -##-##-##- */
>>> + 0x6d, 0x80, /* -##-##-##- */
>>> + 0x6d, 0x80, /* -##-##-##- */
>>> + 0x79, 0x80, /* -####--##- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x30, 0x00, /* --##------ */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 238 0xee '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x1f, 0x80, /* ---######- */
>>> + 0x30, 0x00, /* --##------ */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x60, 0x00, /* -##------- */
>>> + 0x30, 0x00, /* --##------ */
>>> + 0x1f, 0x80, /* ---######- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 239 0xef '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x1e, 0x00, /* ---####--- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x61, 0x80, /* -##----##- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 240 0xf0 '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 241 0xf1 '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 242 0xf2 '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x30, 0x00, /* --##------ */
>>> + 0x18, 0x00, /* ---##----- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x06, 0x00, /* -----##--- */
>>> + 0x03, 0x00, /* ------##-- */
>>> + 0x03, 0x00, /* ------##-- */
>>> + 0x06, 0x00, /* -----##--- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x18, 0x00, /* ---##----- */
>>> + 0x30, 0x00, /* --##------ */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 243 0xf3 '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x03, 0x00, /* ------##-- */
>>> + 0x06, 0x00, /* -----##--- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x18, 0x00, /* ---##----- */
>>> + 0x30, 0x00, /* --##------ */
>>> + 0x30, 0x00, /* --##------ */
>>> + 0x18, 0x00, /* ---##----- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x06, 0x00, /* -----##--- */
>>> + 0x03, 0x00, /* ------##-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 244 0xf4 '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x07, 0x00, /* -----###-- */
>>> + 0x0d, 0x80, /* ----##-##- */
>>> + 0x0d, 0x80, /* ----##-##- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> +
>>> + /* 245 0xf5 '' */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x6c, 0x00, /* -##-##---- */
>>> + 0x6c, 0x00, /* -##-##---- */
>>> + 0x38, 0x00, /* --###----- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 246 0xf6 '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x7f, 0x80, /* -########- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 247 0xf7 '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x39, 0x80, /* --###--##- */
>>> + 0x6d, 0x80, /* -##-##-##- */
>>> + 0x67, 0x00, /* -##--###-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x39, 0x80, /* --###--##- */
>>> + 0x6d, 0x80, /* -##-##-##- */
>>> + 0x67, 0x00, /* -##--###-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 248 0xf8 '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x1e, 0x00, /* ---####--- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x1e, 0x00, /* ---####--- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 249 0xf9 '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x1c, 0x00, /* ---###---- */
>>> + 0x1c, 0x00, /* ---###---- */
>>> + 0x1c, 0x00, /* ---###---- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 250 0xfa '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 251 0xfb '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x03, 0x80, /* ------###- */
>>> + 0x03, 0x80, /* ------###- */
>>> + 0x03, 0x00, /* ------##-- */
>>> + 0x03, 0x00, /* ------##-- */
>>> + 0x03, 0x00, /* ------##-- */
>>> + 0x03, 0x00, /* ------##-- */
>>> + 0x03, 0x00, /* ------##-- */
>>> + 0x63, 0x00, /* -##---##-- */
>>> + 0x63, 0x00, /* -##---##-- */
>>> + 0x63, 0x00, /* -##---##-- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x1b, 0x00, /* ---##-##-- */
>>> + 0x0f, 0x00, /* ----####-- */
>>> + 0x07, 0x00, /* -----###-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 252 0xfc '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x3e, 0x00, /* --#####--- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 253 0xfd '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x1e, 0x00, /* ---####--- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x33, 0x00, /* --##--##-- */
>>> + 0x06, 0x00, /* -----##--- */
>>> + 0x0c, 0x00, /* ----##---- */
>>> + 0x18, 0x00, /* ---##----- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 254 0xfe '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x3f, 0x00, /* --######-- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +
>>> + /* 255 0xff '' */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> + 0x00, 0x00, /* ---------- */
>>> +} };
>>> +
>>> +
>>> +const struct font_desc font_ter_10x18 = {
>>> + .idx = TER10x18_IDX,
>>> + .name = "TER10x18",
>>> + .width = 10,
>>> + .height = 18,
>>> + .charcount = 256,
>>> + .data = fontdata_ter10x18.data,
>>> +#ifdef __sparc__
>>> + .pref = 5,
>>> +#else
>>> + .pref = -1,
>>> +#endif
>>> +};
>>> diff --git a/lib/fonts/fonts.c b/lib/fonts/fonts.c
>>> index 47e34950b665..a7f118b30171 100644
>>> --- a/lib/fonts/fonts.c
>>> +++ b/lib/fonts/fonts.c
>>> @@ -54,6 +54,9 @@ static const struct font_desc *fonts[] = {
>>> #ifdef CONFIG_FONT_6x10
>>> &font_6x10,
>>> #endif
>>> +#ifdef CONFIG_FONT_TER10x18
>>> + &font_ter_10x18,
>>> +#endif
>>> #ifdef CONFIG_FONT_TER16x32
>>> &font_ter_16x32,
>>> #endif
>>
>
>
--
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstr. 146, 90461 Nürnberg, Germany, www.suse.com
GF: Jochen Jaser, Andrew McDonald, Werner Knoblich, (HRB 36809, AG Nürnberg)
^ permalink raw reply
* Re: [PATCH] fbdev/pxafb: Fix multiple clamped values in pxafb_adjust_timing
From: Andy Shevchenko @ 2025-12-03 9:49 UTC (permalink / raw)
To: Helge Deller
Cc: Thorsten Blum, Chelsy Ratnawat, Thomas Zimmermann, Raag Jadav,
linux-fbdev, dri-devel, linux-kernel
In-Reply-To: <77ac64e5-709d-4eb5-8b47-9fc15e579d1a@gmx.de>
On Tue, Dec 02, 2025 at 08:36:08PM +0100, Helge Deller wrote:
> On 12/2/25 19:36, Thorsten Blum wrote:
> > On 2. Dec 2025, at 19:28, Helge Deller wrote:
> > > On 12/2/25 19:15, Thorsten Blum wrote:
...
> > > How did you notice? Do you actually have the hardware and tested it?
> >
> > I only compile-tested it.
> >
> > I stumbled upon another driver with the same bug and then used grep to
> > search for other instances and found about 6 or 7, including this one.
>
> Ok. But this then means, maybe the clamping isn't needed (since nobody complained),
> or that nobody noticed because nobody uses the driver any longer.
I think it's a combination of factors: 1) rarely people have this hardware,
especially nowadays, to run more or less new kernel; 2) there are no conditions
happened that this patch fixes in their environments; 3) something else I
missed.
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply
* Re: [PATCH] fbdev/pxafb: Fix multiple clamped values in pxafb_adjust_timing
From: Raag Jadav @ 2025-12-03 10:30 UTC (permalink / raw)
To: Andy Shevchenko
Cc: Helge Deller, Thorsten Blum, Chelsy Ratnawat, Thomas Zimmermann,
linux-fbdev, dri-devel, linux-kernel
In-Reply-To: <aTAHkxg1_LDzZNSb@smile.fi.intel.com>
On Wed, Dec 03, 2025 at 11:49:07AM +0200, Andy Shevchenko wrote:
> On Tue, Dec 02, 2025 at 08:36:08PM +0100, Helge Deller wrote:
> > On 12/2/25 19:36, Thorsten Blum wrote:
> > > On 2. Dec 2025, at 19:28, Helge Deller wrote:
> > > > On 12/2/25 19:15, Thorsten Blum wrote:
>
> ...
>
> > > > How did you notice? Do you actually have the hardware and tested it?
> > >
> > > I only compile-tested it.
> > >
> > > I stumbled upon another driver with the same bug and then used grep to
> > > search for other instances and found about 6 or 7, including this one.
> >
> > Ok. But this then means, maybe the clamping isn't needed (since nobody complained),
> > or that nobody noticed because nobody uses the driver any longer.
>
> I think it's a combination of factors: 1) rarely people have this hardware,
> especially nowadays, to run more or less new kernel; 2) there are no conditions
> happened that this patch fixes in their environments; 3) something else I
> missed.
I had a quick look at commit 3f16ff608a75 and seems like there wasn't much
happening either way.
Raag
^ permalink raw reply
* [PATCH 6.17 090/146] drm, fbcon, vga_switcheroo: Avoid race condition in fbcon setup
From: Greg Kroah-Hartman @ 2025-12-03 15:27 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Thomas Zimmermann,
Javier Martinez Canillas, Alex Deucher, dri-devel, nouveau,
amd-gfx, linux-fbdev
In-Reply-To: <20251203152346.456176474@linuxfoundation.org>
6.17-stable review patch. If anyone has any objections, please let me know.
------------------
From: Thomas Zimmermann <tzimmermann@suse.de>
commit eb76d0f5553575599561010f24c277cc5b31d003 upstream.
Protect vga_switcheroo_client_fb_set() with console lock. Avoids OOB
access in fbcon_remap_all(). Without holding the console lock the call
races with switching outputs.
VGA switcheroo calls fbcon_remap_all() when switching clients. The fbcon
function uses struct fb_info.node, which is set by register_framebuffer().
As the fb-helper code currently sets up VGA switcheroo before registering
the framebuffer, the value of node is -1 and therefore not a legal value.
For example, fbcon uses the value within set_con2fb_map() [1] as an index
into an array.
Moving vga_switcheroo_client_fb_set() after register_framebuffer() can
result in VGA switching that does not switch fbcon correctly.
Therefore move vga_switcheroo_client_fb_set() under fbcon_fb_registered(),
which already holds the console lock. Fbdev calls fbcon_fb_registered()
from within register_framebuffer(). Serializes the helper with VGA
switcheroo's call to fbcon_remap_all().
Although vga_switcheroo_client_fb_set() takes an instance of struct fb_info
as parameter, it really only needs the contained fbcon state. Moving the
call to fbcon initialization is therefore cleaner than before. Only amdgpu,
i915, nouveau and radeon support vga_switcheroo. For all other drivers,
this change does nothing.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Link: https://elixir.bootlin.com/linux/v6.17/source/drivers/video/fbdev/core/fbcon.c#L2942 # [1]
Fixes: 6a9ee8af344e ("vga_switcheroo: initial implementation (v15)")
Acked-by: Javier Martinez Canillas <javierm@redhat.com>
Acked-by: Alex Deucher <alexander.deucher@amd.com>
Cc: dri-devel@lists.freedesktop.org
Cc: nouveau@lists.freedesktop.org
Cc: amd-gfx@lists.freedesktop.org
Cc: linux-fbdev@vger.kernel.org
Cc: <stable@vger.kernel.org> # v2.6.34+
Link: https://patch.msgid.link/20251105161549.98836-1-tzimmermann@suse.de
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/gpu/drm/drm_fb_helper.c | 14 --------------
drivers/video/fbdev/core/fbcon.c | 9 +++++++++
2 files changed, 9 insertions(+), 14 deletions(-)
--- a/drivers/gpu/drm/drm_fb_helper.c
+++ b/drivers/gpu/drm/drm_fb_helper.c
@@ -31,9 +31,7 @@
#include <linux/console.h>
#include <linux/export.h>
-#include <linux/pci.h>
#include <linux/sysrq.h>
-#include <linux/vga_switcheroo.h>
#include <drm/drm_atomic.h>
#include <drm/drm_drv.h>
@@ -566,11 +564,6 @@ EXPORT_SYMBOL(drm_fb_helper_release_info
*/
void drm_fb_helper_unregister_info(struct drm_fb_helper *fb_helper)
{
- struct fb_info *info = fb_helper->info;
- struct device *dev = info->device;
-
- if (dev_is_pci(dev))
- vga_switcheroo_client_fb_set(to_pci_dev(dev), NULL);
unregister_framebuffer(fb_helper->info);
}
EXPORT_SYMBOL(drm_fb_helper_unregister_info);
@@ -1632,7 +1625,6 @@ static int drm_fb_helper_single_fb_probe
struct drm_client_dev *client = &fb_helper->client;
struct drm_device *dev = fb_helper->dev;
struct drm_fb_helper_surface_size sizes;
- struct fb_info *info;
int ret;
if (drm_WARN_ON(dev, !dev->driver->fbdev_probe))
@@ -1653,12 +1645,6 @@ static int drm_fb_helper_single_fb_probe
strcpy(fb_helper->fb->comm, "[fbcon]");
- info = fb_helper->info;
-
- /* Set the fb info for vgaswitcheroo clients. Does nothing otherwise. */
- if (dev_is_pci(info->device))
- vga_switcheroo_client_fb_set(to_pci_dev(info->device), info);
-
return 0;
}
--- a/drivers/video/fbdev/core/fbcon.c
+++ b/drivers/video/fbdev/core/fbcon.c
@@ -66,6 +66,7 @@
#include <linux/string.h>
#include <linux/kd.h>
#include <linux/panic.h>
+#include <linux/pci.h>
#include <linux/printk.h>
#include <linux/slab.h>
#include <linux/fb.h>
@@ -78,6 +79,7 @@
#include <linux/interrupt.h>
#include <linux/crc32.h> /* For counting font checksums */
#include <linux/uaccess.h>
+#include <linux/vga_switcheroo.h>
#include <asm/irq.h>
#include "fbcon.h"
@@ -2906,6 +2908,9 @@ void fbcon_fb_unregistered(struct fb_inf
console_lock();
+ if (info->device && dev_is_pci(info->device))
+ vga_switcheroo_client_fb_set(to_pci_dev(info->device), NULL);
+
fbcon_registered_fb[info->node] = NULL;
fbcon_num_registered_fb--;
@@ -3039,6 +3044,10 @@ static int do_fb_registered(struct fb_in
}
}
+ /* Set the fb info for vga_switcheroo clients. Does nothing otherwise. */
+ if (info->device && dev_is_pci(info->device))
+ vga_switcheroo_client_fb_set(to_pci_dev(info->device), info);
+
return ret;
}
^ permalink raw reply
* Re: [PATCH 6.12.y] drm, fbcon, vga_switcheroo: Avoid race condition in fbcon setup
From: Thomas Zimmermann @ 2025-12-03 16:50 UTC (permalink / raw)
To: Sasha Levin, stable
Cc: Javier Martinez Canillas, Alex Deucher, dri-devel, nouveau,
amd-gfx, linux-fbdev
In-Reply-To: <20251202202312.2505097-1-sashal@kernel.org>
Hi,
thank you for providing an updated patch.
Am 02.12.25 um 21:23 schrieb Sasha Levin:
> From: Thomas Zimmermann <tzimmermann@suse.de>
>
> [ Upstream commit eb76d0f5553575599561010f24c277cc5b31d003 ]
>
> Protect vga_switcheroo_client_fb_set() with console lock. Avoids OOB
> access in fbcon_remap_all(). Without holding the console lock the call
> races with switching outputs.
>
> VGA switcheroo calls fbcon_remap_all() when switching clients. The fbcon
> function uses struct fb_info.node, which is set by register_framebuffer().
> As the fb-helper code currently sets up VGA switcheroo before registering
> the framebuffer, the value of node is -1 and therefore not a legal value.
> For example, fbcon uses the value within set_con2fb_map() [1] as an index
> into an array.
>
> Moving vga_switcheroo_client_fb_set() after register_framebuffer() can
> result in VGA switching that does not switch fbcon correctly.
>
> Therefore move vga_switcheroo_client_fb_set() under fbcon_fb_registered(),
> which already holds the console lock. Fbdev calls fbcon_fb_registered()
> from within register_framebuffer(). Serializes the helper with VGA
> switcheroo's call to fbcon_remap_all().
>
> Although vga_switcheroo_client_fb_set() takes an instance of struct fb_info
> as parameter, it really only needs the contained fbcon state. Moving the
> call to fbcon initialization is therefore cleaner than before. Only amdgpu,
> i915, nouveau and radeon support vga_switcheroo. For all other drivers,
> this change does nothing.
>
> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
> Link: https://elixir.bootlin.com/linux/v6.17/source/drivers/video/fbdev/core/fbcon.c#L2942 # [1]
> Fixes: 6a9ee8af344e ("vga_switcheroo: initial implementation (v15)")
> Acked-by: Javier Martinez Canillas <javierm@redhat.com>
> Acked-by: Alex Deucher <alexander.deucher@amd.com>
> Cc: dri-devel@lists.freedesktop.org
> Cc: nouveau@lists.freedesktop.org
> Cc: amd-gfx@lists.freedesktop.org
> Cc: linux-fbdev@vger.kernel.org
> Cc: <stable@vger.kernel.org> # v2.6.34+
> Link: https://patch.msgid.link/20251105161549.98836-1-tzimmermann@suse.de
> Signed-off-by: Sasha Levin <sashal@kernel.org>
Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>
> ---
> drivers/gpu/drm/drm_fb_helper.c | 6 ------
> drivers/gpu/drm/i915/display/intel_fbdev.c | 6 ------
> drivers/gpu/drm/radeon/radeon_fbdev.c | 5 -----
> drivers/video/fbdev/core/fbcon.c | 9 +++++++++
> 4 files changed, 9 insertions(+), 17 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c
> index b15ddbd65e7b5..a8971c4eb9f05 100644
> --- a/drivers/gpu/drm/drm_fb_helper.c
> +++ b/drivers/gpu/drm/drm_fb_helper.c
> @@ -30,9 +30,7 @@
> #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
>
> #include <linux/console.h>
> -#include <linux/pci.h>
> #include <linux/sysrq.h>
> -#include <linux/vga_switcheroo.h>
>
> #include <drm/drm_atomic.h>
> #include <drm/drm_drv.h>
> @@ -1637,10 +1635,6 @@ static int drm_fb_helper_single_fb_probe(struct drm_fb_helper *fb_helper)
>
> strcpy(fb_helper->fb->comm, "[fbcon]");
>
> - /* Set the fb info for vgaswitcheroo clients. Does nothing otherwise. */
> - if (dev_is_pci(dev->dev))
> - vga_switcheroo_client_fb_set(to_pci_dev(dev->dev), fb_helper->info);
> -
> return 0;
> }
>
> diff --git a/drivers/gpu/drm/i915/display/intel_fbdev.c b/drivers/gpu/drm/i915/display/intel_fbdev.c
> index 49a1ac4f54919..337cc9fc31b19 100644
> --- a/drivers/gpu/drm/i915/display/intel_fbdev.c
> +++ b/drivers/gpu/drm/i915/display/intel_fbdev.c
> @@ -589,11 +589,8 @@ static int intel_fbdev_restore_mode(struct drm_i915_private *dev_priv)
> static void intel_fbdev_client_unregister(struct drm_client_dev *client)
> {
> struct drm_fb_helper *fb_helper = drm_fb_helper_from_client(client);
> - struct drm_device *dev = fb_helper->dev;
> - struct pci_dev *pdev = to_pci_dev(dev->dev);
>
> if (fb_helper->info) {
> - vga_switcheroo_client_fb_set(pdev, NULL);
> drm_fb_helper_unregister_info(fb_helper);
> } else {
> drm_fb_helper_unprepare(fb_helper);
> @@ -620,7 +617,6 @@ static int intel_fbdev_client_hotplug(struct drm_client_dev *client)
> {
> struct drm_fb_helper *fb_helper = drm_fb_helper_from_client(client);
> struct drm_device *dev = client->dev;
> - struct pci_dev *pdev = to_pci_dev(dev->dev);
> int ret;
>
> if (dev->fb_helper)
> @@ -634,8 +630,6 @@ static int intel_fbdev_client_hotplug(struct drm_client_dev *client)
> if (ret)
> goto err_drm_fb_helper_fini;
>
> - vga_switcheroo_client_fb_set(pdev, fb_helper->info);
> -
> return 0;
>
> err_drm_fb_helper_fini:
> diff --git a/drivers/gpu/drm/radeon/radeon_fbdev.c b/drivers/gpu/drm/radeon/radeon_fbdev.c
> index fb70de29545c6..a197ba2f2717b 100644
> --- a/drivers/gpu/drm/radeon/radeon_fbdev.c
> +++ b/drivers/gpu/drm/radeon/radeon_fbdev.c
> @@ -300,10 +300,8 @@ static void radeon_fbdev_client_unregister(struct drm_client_dev *client)
> {
> struct drm_fb_helper *fb_helper = drm_fb_helper_from_client(client);
> struct drm_device *dev = fb_helper->dev;
> - struct radeon_device *rdev = dev->dev_private;
>
> if (fb_helper->info) {
> - vga_switcheroo_client_fb_set(rdev->pdev, NULL);
> drm_helper_force_disable_all(dev);
> drm_fb_helper_unregister_info(fb_helper);
> } else {
> @@ -325,7 +323,6 @@ static int radeon_fbdev_client_hotplug(struct drm_client_dev *client)
> {
> struct drm_fb_helper *fb_helper = drm_fb_helper_from_client(client);
> struct drm_device *dev = client->dev;
> - struct radeon_device *rdev = dev->dev_private;
> int ret;
>
> if (dev->fb_helper)
> @@ -342,8 +339,6 @@ static int radeon_fbdev_client_hotplug(struct drm_client_dev *client)
> if (ret)
> goto err_drm_fb_helper_fini;
>
> - vga_switcheroo_client_fb_set(rdev->pdev, fb_helper->info);
> -
> return 0;
>
> err_drm_fb_helper_fini:
> diff --git a/drivers/video/fbdev/core/fbcon.c b/drivers/video/fbdev/core/fbcon.c
> index 1fc1e47ae2b49..e681066736dea 100644
> --- a/drivers/video/fbdev/core/fbcon.c
> +++ b/drivers/video/fbdev/core/fbcon.c
> @@ -65,6 +65,7 @@
> #include <linux/string.h>
> #include <linux/kd.h>
> #include <linux/panic.h>
> +#include <linux/pci.h>
> #include <linux/printk.h>
> #include <linux/slab.h>
> #include <linux/fb.h>
> @@ -77,6 +78,7 @@
> #include <linux/interrupt.h>
> #include <linux/crc32.h> /* For counting font checksums */
> #include <linux/uaccess.h>
> +#include <linux/vga_switcheroo.h>
> #include <asm/irq.h>
>
> #include "fbcon.h"
> @@ -2894,6 +2896,9 @@ void fbcon_fb_unregistered(struct fb_info *info)
>
> console_lock();
>
> + if (info->device && dev_is_pci(info->device))
> + vga_switcheroo_client_fb_set(to_pci_dev(info->device), NULL);
> +
> fbcon_registered_fb[info->node] = NULL;
> fbcon_num_registered_fb--;
>
> @@ -3027,6 +3032,10 @@ static int do_fb_registered(struct fb_info *info)
> }
> }
>
> + /* Set the fb info for vga_switcheroo clients. Does nothing otherwise. */
> + if (info->device && dev_is_pci(info->device))
> + vga_switcheroo_client_fb_set(to_pci_dev(info->device), info);
> +
> return ret;
> }
>
--
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstr. 146, 90461 Nürnberg, Germany, www.suse.com
GF: Jochen Jaser, Andrew McDonald, Werner Knoblich, (HRB 36809, AG Nürnberg)
^ permalink raw reply
* [PATCH 6.12 126/132] drm, fbcon, vga_switcheroo: Avoid race condition in fbcon setup
From: Greg Kroah-Hartman @ 2025-12-03 15:30 UTC (permalink / raw)
To: stable
Cc: Greg Kroah-Hartman, patches, Thomas Zimmermann,
Javier Martinez Canillas, Alex Deucher, dri-devel, nouveau,
amd-gfx, linux-fbdev, Sasha Levin
In-Reply-To: <20251203152343.285859633@linuxfoundation.org>
6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Thomas Zimmermann <tzimmermann@suse.de>
[ Upstream commit eb76d0f5553575599561010f24c277cc5b31d003 ]
Protect vga_switcheroo_client_fb_set() with console lock. Avoids OOB
access in fbcon_remap_all(). Without holding the console lock the call
races with switching outputs.
VGA switcheroo calls fbcon_remap_all() when switching clients. The fbcon
function uses struct fb_info.node, which is set by register_framebuffer().
As the fb-helper code currently sets up VGA switcheroo before registering
the framebuffer, the value of node is -1 and therefore not a legal value.
For example, fbcon uses the value within set_con2fb_map() [1] as an index
into an array.
Moving vga_switcheroo_client_fb_set() after register_framebuffer() can
result in VGA switching that does not switch fbcon correctly.
Therefore move vga_switcheroo_client_fb_set() under fbcon_fb_registered(),
which already holds the console lock. Fbdev calls fbcon_fb_registered()
from within register_framebuffer(). Serializes the helper with VGA
switcheroo's call to fbcon_remap_all().
Although vga_switcheroo_client_fb_set() takes an instance of struct fb_info
as parameter, it really only needs the contained fbcon state. Moving the
call to fbcon initialization is therefore cleaner than before. Only amdgpu,
i915, nouveau and radeon support vga_switcheroo. For all other drivers,
this change does nothing.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Link: https://elixir.bootlin.com/linux/v6.17/source/drivers/video/fbdev/core/fbcon.c#L2942 # [1]
Fixes: 6a9ee8af344e ("vga_switcheroo: initial implementation (v15)")
Acked-by: Javier Martinez Canillas <javierm@redhat.com>
Acked-by: Alex Deucher <alexander.deucher@amd.com>
Cc: dri-devel@lists.freedesktop.org
Cc: nouveau@lists.freedesktop.org
Cc: amd-gfx@lists.freedesktop.org
Cc: linux-fbdev@vger.kernel.org
Cc: <stable@vger.kernel.org> # v2.6.34+
Link: https://patch.msgid.link/20251105161549.98836-1-tzimmermann@suse.de
Signed-off-by: Sasha Levin <sashal@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/gpu/drm/drm_fb_helper.c | 6 ------
drivers/gpu/drm/i915/display/intel_fbdev.c | 6 ------
drivers/gpu/drm/radeon/radeon_fbdev.c | 5 -----
drivers/video/fbdev/core/fbcon.c | 9 +++++++++
4 files changed, 9 insertions(+), 17 deletions(-)
--- a/drivers/gpu/drm/drm_fb_helper.c
+++ b/drivers/gpu/drm/drm_fb_helper.c
@@ -30,9 +30,7 @@
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
#include <linux/console.h>
-#include <linux/pci.h>
#include <linux/sysrq.h>
-#include <linux/vga_switcheroo.h>
#include <drm/drm_atomic.h>
#include <drm/drm_drv.h>
@@ -1637,10 +1635,6 @@ static int drm_fb_helper_single_fb_probe
strcpy(fb_helper->fb->comm, "[fbcon]");
- /* Set the fb info for vgaswitcheroo clients. Does nothing otherwise. */
- if (dev_is_pci(dev->dev))
- vga_switcheroo_client_fb_set(to_pci_dev(dev->dev), fb_helper->info);
-
return 0;
}
--- a/drivers/gpu/drm/i915/display/intel_fbdev.c
+++ b/drivers/gpu/drm/i915/display/intel_fbdev.c
@@ -589,11 +589,8 @@ static int intel_fbdev_restore_mode(stru
static void intel_fbdev_client_unregister(struct drm_client_dev *client)
{
struct drm_fb_helper *fb_helper = drm_fb_helper_from_client(client);
- struct drm_device *dev = fb_helper->dev;
- struct pci_dev *pdev = to_pci_dev(dev->dev);
if (fb_helper->info) {
- vga_switcheroo_client_fb_set(pdev, NULL);
drm_fb_helper_unregister_info(fb_helper);
} else {
drm_fb_helper_unprepare(fb_helper);
@@ -620,7 +617,6 @@ static int intel_fbdev_client_hotplug(st
{
struct drm_fb_helper *fb_helper = drm_fb_helper_from_client(client);
struct drm_device *dev = client->dev;
- struct pci_dev *pdev = to_pci_dev(dev->dev);
int ret;
if (dev->fb_helper)
@@ -634,8 +630,6 @@ static int intel_fbdev_client_hotplug(st
if (ret)
goto err_drm_fb_helper_fini;
- vga_switcheroo_client_fb_set(pdev, fb_helper->info);
-
return 0;
err_drm_fb_helper_fini:
--- a/drivers/gpu/drm/radeon/radeon_fbdev.c
+++ b/drivers/gpu/drm/radeon/radeon_fbdev.c
@@ -300,10 +300,8 @@ static void radeon_fbdev_client_unregist
{
struct drm_fb_helper *fb_helper = drm_fb_helper_from_client(client);
struct drm_device *dev = fb_helper->dev;
- struct radeon_device *rdev = dev->dev_private;
if (fb_helper->info) {
- vga_switcheroo_client_fb_set(rdev->pdev, NULL);
drm_helper_force_disable_all(dev);
drm_fb_helper_unregister_info(fb_helper);
} else {
@@ -325,7 +323,6 @@ static int radeon_fbdev_client_hotplug(s
{
struct drm_fb_helper *fb_helper = drm_fb_helper_from_client(client);
struct drm_device *dev = client->dev;
- struct radeon_device *rdev = dev->dev_private;
int ret;
if (dev->fb_helper)
@@ -342,8 +339,6 @@ static int radeon_fbdev_client_hotplug(s
if (ret)
goto err_drm_fb_helper_fini;
- vga_switcheroo_client_fb_set(rdev->pdev, fb_helper->info);
-
return 0;
err_drm_fb_helper_fini:
--- a/drivers/video/fbdev/core/fbcon.c
+++ b/drivers/video/fbdev/core/fbcon.c
@@ -65,6 +65,7 @@
#include <linux/string.h>
#include <linux/kd.h>
#include <linux/panic.h>
+#include <linux/pci.h>
#include <linux/printk.h>
#include <linux/slab.h>
#include <linux/fb.h>
@@ -77,6 +78,7 @@
#include <linux/interrupt.h>
#include <linux/crc32.h> /* For counting font checksums */
#include <linux/uaccess.h>
+#include <linux/vga_switcheroo.h>
#include <asm/irq.h>
#include "fbcon.h"
@@ -2894,6 +2896,9 @@ void fbcon_fb_unregistered(struct fb_inf
console_lock();
+ if (info->device && dev_is_pci(info->device))
+ vga_switcheroo_client_fb_set(to_pci_dev(info->device), NULL);
+
fbcon_registered_fb[info->node] = NULL;
fbcon_num_registered_fb--;
@@ -3027,6 +3032,10 @@ static int do_fb_registered(struct fb_in
}
}
+ /* Set the fb info for vga_switcheroo clients. Does nothing otherwise. */
+ if (info->device && dev_is_pci(info->device))
+ vga_switcheroo_client_fb_set(to_pci_dev(info->device), info);
+
return ret;
}
^ permalink raw reply
* Re: [PATCH 6.12 126/132] drm, fbcon, vga_switcheroo: Avoid race condition in fbcon setup
From: Thomas Zimmermann @ 2025-12-03 17:15 UTC (permalink / raw)
To: Greg Kroah-Hartman, stable
Cc: patches, Javier Martinez Canillas, Alex Deucher, dri-devel,
nouveau, amd-gfx, linux-fbdev, Sasha Levin
In-Reply-To: <20251203152347.982336576@linuxfoundation.org>
Hi,
thank you for making the updated patch.
Am 03.12.25 um 16:30 schrieb Greg Kroah-Hartman:
> 6.12-stable review patch. If anyone has any objections, please let me know.
>
> ------------------
>
> From: Thomas Zimmermann <tzimmermann@suse.de>
>
> [ Upstream commit eb76d0f5553575599561010f24c277cc5b31d003 ]
>
> Protect vga_switcheroo_client_fb_set() with console lock. Avoids OOB
> access in fbcon_remap_all(). Without holding the console lock the call
> races with switching outputs.
>
> VGA switcheroo calls fbcon_remap_all() when switching clients. The fbcon
> function uses struct fb_info.node, which is set by register_framebuffer().
> As the fb-helper code currently sets up VGA switcheroo before registering
> the framebuffer, the value of node is -1 and therefore not a legal value.
> For example, fbcon uses the value within set_con2fb_map() [1] as an index
> into an array.
>
> Moving vga_switcheroo_client_fb_set() after register_framebuffer() can
> result in VGA switching that does not switch fbcon correctly.
>
> Therefore move vga_switcheroo_client_fb_set() under fbcon_fb_registered(),
> which already holds the console lock. Fbdev calls fbcon_fb_registered()
> from within register_framebuffer(). Serializes the helper with VGA
> switcheroo's call to fbcon_remap_all().
>
> Although vga_switcheroo_client_fb_set() takes an instance of struct fb_info
> as parameter, it really only needs the contained fbcon state. Moving the
> call to fbcon initialization is therefore cleaner than before. Only amdgpu,
> i915, nouveau and radeon support vga_switcheroo. For all other drivers,
> this change does nothing.
>
> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
> Link: https://elixir.bootlin.com/linux/v6.17/source/drivers/video/fbdev/core/fbcon.c#L2942 # [1]
> Fixes: 6a9ee8af344e ("vga_switcheroo: initial implementation (v15)")
> Acked-by: Javier Martinez Canillas <javierm@redhat.com>
> Acked-by: Alex Deucher <alexander.deucher@amd.com>
> Cc: dri-devel@lists.freedesktop.org
> Cc: nouveau@lists.freedesktop.org
> Cc: amd-gfx@lists.freedesktop.org
> Cc: linux-fbdev@vger.kernel.org
> Cc: <stable@vger.kernel.org> # v2.6.34+
> Link: https://patch.msgid.link/20251105161549.98836-1-tzimmermann@suse.de
> Signed-off-by: Sasha Levin <sashal@kernel.org>
> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>
> ---
> drivers/gpu/drm/drm_fb_helper.c | 6 ------
> drivers/gpu/drm/i915/display/intel_fbdev.c | 6 ------
> drivers/gpu/drm/radeon/radeon_fbdev.c | 5 -----
> drivers/video/fbdev/core/fbcon.c | 9 +++++++++
> 4 files changed, 9 insertions(+), 17 deletions(-)
>
> --- a/drivers/gpu/drm/drm_fb_helper.c
> +++ b/drivers/gpu/drm/drm_fb_helper.c
> @@ -30,9 +30,7 @@
> #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
>
> #include <linux/console.h>
> -#include <linux/pci.h>
> #include <linux/sysrq.h>
> -#include <linux/vga_switcheroo.h>
>
> #include <drm/drm_atomic.h>
> #include <drm/drm_drv.h>
> @@ -1637,10 +1635,6 @@ static int drm_fb_helper_single_fb_probe
>
> strcpy(fb_helper->fb->comm, "[fbcon]");
>
> - /* Set the fb info for vgaswitcheroo clients. Does nothing otherwise. */
> - if (dev_is_pci(dev->dev))
> - vga_switcheroo_client_fb_set(to_pci_dev(dev->dev), fb_helper->info);
> -
> return 0;
> }
>
> --- a/drivers/gpu/drm/i915/display/intel_fbdev.c
> +++ b/drivers/gpu/drm/i915/display/intel_fbdev.c
> @@ -589,11 +589,8 @@ static int intel_fbdev_restore_mode(stru
> static void intel_fbdev_client_unregister(struct drm_client_dev *client)
> {
> struct drm_fb_helper *fb_helper = drm_fb_helper_from_client(client);
> - struct drm_device *dev = fb_helper->dev;
> - struct pci_dev *pdev = to_pci_dev(dev->dev);
>
> if (fb_helper->info) {
> - vga_switcheroo_client_fb_set(pdev, NULL);
> drm_fb_helper_unregister_info(fb_helper);
> } else {
> drm_fb_helper_unprepare(fb_helper);
> @@ -620,7 +617,6 @@ static int intel_fbdev_client_hotplug(st
> {
> struct drm_fb_helper *fb_helper = drm_fb_helper_from_client(client);
> struct drm_device *dev = client->dev;
> - struct pci_dev *pdev = to_pci_dev(dev->dev);
> int ret;
>
> if (dev->fb_helper)
> @@ -634,8 +630,6 @@ static int intel_fbdev_client_hotplug(st
> if (ret)
> goto err_drm_fb_helper_fini;
>
> - vga_switcheroo_client_fb_set(pdev, fb_helper->info);
> -
> return 0;
>
> err_drm_fb_helper_fini:
> --- a/drivers/gpu/drm/radeon/radeon_fbdev.c
> +++ b/drivers/gpu/drm/radeon/radeon_fbdev.c
> @@ -300,10 +300,8 @@ static void radeon_fbdev_client_unregist
> {
> struct drm_fb_helper *fb_helper = drm_fb_helper_from_client(client);
> struct drm_device *dev = fb_helper->dev;
> - struct radeon_device *rdev = dev->dev_private;
>
> if (fb_helper->info) {
> - vga_switcheroo_client_fb_set(rdev->pdev, NULL);
> drm_helper_force_disable_all(dev);
> drm_fb_helper_unregister_info(fb_helper);
> } else {
> @@ -325,7 +323,6 @@ static int radeon_fbdev_client_hotplug(s
> {
> struct drm_fb_helper *fb_helper = drm_fb_helper_from_client(client);
> struct drm_device *dev = client->dev;
> - struct radeon_device *rdev = dev->dev_private;
> int ret;
>
> if (dev->fb_helper)
> @@ -342,8 +339,6 @@ static int radeon_fbdev_client_hotplug(s
> if (ret)
> goto err_drm_fb_helper_fini;
>
> - vga_switcheroo_client_fb_set(rdev->pdev, fb_helper->info);
> -
> return 0;
>
> err_drm_fb_helper_fini:
> --- a/drivers/video/fbdev/core/fbcon.c
> +++ b/drivers/video/fbdev/core/fbcon.c
> @@ -65,6 +65,7 @@
> #include <linux/string.h>
> #include <linux/kd.h>
> #include <linux/panic.h>
> +#include <linux/pci.h>
> #include <linux/printk.h>
> #include <linux/slab.h>
> #include <linux/fb.h>
> @@ -77,6 +78,7 @@
> #include <linux/interrupt.h>
> #include <linux/crc32.h> /* For counting font checksums */
> #include <linux/uaccess.h>
> +#include <linux/vga_switcheroo.h>
> #include <asm/irq.h>
>
> #include "fbcon.h"
> @@ -2894,6 +2896,9 @@ void fbcon_fb_unregistered(struct fb_inf
>
> console_lock();
>
> + if (info->device && dev_is_pci(info->device))
> + vga_switcheroo_client_fb_set(to_pci_dev(info->device), NULL);
> +
> fbcon_registered_fb[info->node] = NULL;
> fbcon_num_registered_fb--;
>
> @@ -3027,6 +3032,10 @@ static int do_fb_registered(struct fb_in
> }
> }
>
> + /* Set the fb info for vga_switcheroo clients. Does nothing otherwise. */
> + if (info->device && dev_is_pci(info->device))
> + vga_switcheroo_client_fb_set(to_pci_dev(info->device), info);
> +
> return ret;
> }
>
>
>
>
--
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstr. 146, 90461 Nürnberg, Germany, www.suse.com
GF: Jochen Jaser, Andrew McDonald, Werner Knoblich, (HRB 36809, AG Nürnberg)
^ permalink raw reply
* Re: [PATCH v3 0/9] arch,sysfb,efi: Support EDID on non-x86 EFI systems
From: Ard Biesheuvel @ 2025-12-04 9:17 UTC (permalink / raw)
To: Thomas Zimmermann
Cc: Richard Lyu, javierm, arnd, helgaas, x86, linux-arm-kernel,
linux-kernel, linux-efi, loongarch, linux-riscv, dri-devel,
linux-hyperv, linux-pci, linux-fbdev
In-Reply-To: <fc4ea259-3389-46e2-b860-972aa8179507@suse.de>
On Thu, 27 Nov 2025 at 08:43, Thomas Zimmermann <tzimmermann@suse.de> wrote:
>
> Hi
>
> Am 27.11.25 um 03:20 schrieb Richard Lyu:
> > Hi Thomas,
> >
> > I am attempting to test this patch series but encountered merge conflicts when applying it to various trees.
> > Could you please clarify the specific base commit (or branch/tag) this series was generated against?
>
> Thanks for testing.
>
> >
> > When testing on the next branch on commits 7a2ff00 and e41ef37, I hit a conflict on PATCH v3 4/9:
> > patching file drivers/pci/vgaarb.c
> > Hunk #2 FAILED at 557.
> > 1 out of 2 hunks FAILED -- rejects in file drivers/pci/vgaarb.c
> >
> > When testing against 3a86608 (Linux 6.18-rc1), the following conflicts occurred:
> > patching file drivers/gpu/drm/sysfb/efidrm.c
> > Hunk #1 FAILED at 24.
> > 1 out of 2 hunks FAILED -- rejects in file drivers/gpu/drm/sysfb/efidrm.c
> > patching file drivers/gpu/drm/sysfb/vesadrm.c
> > Hunk #1 FAILED at 25.
> > 1 out of 2 hunks FAILED -- rejects in file drivers/gpu/drm/sysfb/vesadrm.c
> >
> > Please let me know the correct base, and I will retest.
>
> It's in the cover letter: d724c6f85e80a23ed46b7ebc6e38b527c09d64f5 The
> commit is in linux-next. The idea is that the EFI tree can pick up the
> changes easily in the next cycle. linux-next seemed like the best
> choice. Best regards Thomas
Thanks. I will queue this up as soon as -rc1 is released.
^ permalink raw reply
* [PATCH v5 2/2] mfd: cgbc: Add support for backlight
From: Petri Karhula via B4 Relay @ 2025-12-04 14:35 UTC (permalink / raw)
To: Thomas Richard, Lee Jones, Daniel Thompson, Jingoo Han,
Helge Deller
Cc: linux-kernel, dri-devel, linux-fbdev, Petri Karhula
In-Reply-To: <20251204-cgbc-backlight-v5-0-26f1be6a69c3@novatron.fi>
From: Petri Karhula <petri.karhula@novatron.fi>
The Board Controller has control for display backlight.
Add backlight cell for the cgbc-backlight driver which
adds support for backlight brightness control.
Signed-off-by: Petri Karhula <petri.karhula@novatron.fi>
---
drivers/mfd/cgbc-core.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/mfd/cgbc-core.c b/drivers/mfd/cgbc-core.c
index 4782ff1114a9..10bb4b414c34 100644
--- a/drivers/mfd/cgbc-core.c
+++ b/drivers/mfd/cgbc-core.c
@@ -237,6 +237,7 @@ static struct mfd_cell cgbc_devs[] = {
{ .name = "cgbc-i2c", .id = 1 },
{ .name = "cgbc-i2c", .id = 2 },
{ .name = "cgbc-hwmon" },
+ { .name = "cgbc-backlight" },
};
static int cgbc_map(struct cgbc_device_data *cgbc)
--
2.34.1
^ permalink raw reply related
* [PATCH v5 0/2] Backlight driver to control backlight behind Congatec Board Controller.
From: Petri Karhula via B4 Relay @ 2025-12-04 14:35 UTC (permalink / raw)
To: Thomas Richard, Lee Jones, Daniel Thompson, Jingoo Han,
Helge Deller
Cc: linux-kernel, dri-devel, linux-fbdev, Petri Karhula
This driver provides backlight brightness control through the Linux
backlight subsystem. It communicates with the board controller to
adjust LCD backlight using PWM signals. Communication is done
through Congatec Board Controller core driver.
Signed-off-by: Petri Karhula <petri.karhula@novatron.fi>
---
Changes in v5:
- Added current and requested brightnesses to verification error message.
- Link to v4: https://lore.kernel.org/r/20251127-cgbc-backlight-v4-0-626523b7173d@novatron.fi
Changes in v4:
- Factor out brightness read into a helper
- Set backlight_properties.scale to BACKLIGHT_SCALE_LINEAR
- Link to v3: https://lore.kernel.org/r/20251125-cgbc-backlight-v3-0-18ae42689411@novatron.fi
Changes in v3:
- Fixed review comments and simplified the structure of the driver
- Link to v2: https://lore.kernel.org/r/20251119-cgbc-backlight-v2-0-4d4edd7ca662@novatron.fi
Changes in v2:
- Separated Board Controller core driver change into its own patch
- Link to v1: https://lore.kernel.org/r/20251118-cgbc-backlight-v1-1-cc6ac5301034@novatron.fi
---
Petri Karhula (2):
backlight: Add Congatec Board Controller (CGBC) backlight support
mfd: cgbc: Add support for backlight
drivers/mfd/cgbc-core.c | 1 +
drivers/video/backlight/Kconfig | 11 +++
drivers/video/backlight/Makefile | 1 +
drivers/video/backlight/cgbc_bl.c | 180 ++++++++++++++++++++++++++++++++++++++
4 files changed, 193 insertions(+)
---
base-commit: 7d0a66e4bb9081d75c82ec4957c50034cb0ea449
change-id: 20251118-cgbc-backlight-35c1109db0b8
Best regards,
--
Petri Karhula <petri.karhula@novatron.fi>
^ permalink raw reply
* [PATCH v5 1/2] backlight: Add Congatec Board Controller (CGBC) backlight support
From: Petri Karhula via B4 Relay @ 2025-12-04 14:35 UTC (permalink / raw)
To: Thomas Richard, Lee Jones, Daniel Thompson, Jingoo Han,
Helge Deller
Cc: linux-kernel, dri-devel, linux-fbdev, Petri Karhula
In-Reply-To: <20251204-cgbc-backlight-v5-0-26f1be6a69c3@novatron.fi>
From: Petri Karhula <petri.karhula@novatron.fi>
This driver provides backlight brightness control through the Linux
backlight subsystem. It communicates with the board controller to
adjust LCD backlight using PWM signals. Communication is done
through Congatec Board Controller core driver.
Signed-off-by: Petri Karhula <petri.karhula@novatron.fi>
---
drivers/video/backlight/Kconfig | 11 +++
drivers/video/backlight/Makefile | 1 +
drivers/video/backlight/cgbc_bl.c | 180 ++++++++++++++++++++++++++++++++++++++
3 files changed, 192 insertions(+)
diff --git a/drivers/video/backlight/Kconfig b/drivers/video/backlight/Kconfig
index d9374d208cee..702f3b8ed036 100644
--- a/drivers/video/backlight/Kconfig
+++ b/drivers/video/backlight/Kconfig
@@ -249,6 +249,17 @@ config BACKLIGHT_PWM
If you have a LCD backlight adjustable by PWM, say Y to enable
this driver.
+config BACKLIGHT_CGBC
+ tristate "Congatec Board Controller (CGBC) backlight support"
+ depends on MFD_CGBC && X86
+ help
+ Say Y here to enable support for LCD backlight control on Congatec
+ x86-based boards via the CGBC (Congatec Board Controller).
+
+ This driver provides backlight brightness control through the Linux
+ backlight subsystem. It communicates with the board controller to
+ adjust LCD backlight using PWM signals.
+
config BACKLIGHT_DA903X
tristate "Backlight Driver for DA9030/DA9034 using WLED"
depends on PMIC_DA903X
diff --git a/drivers/video/backlight/Makefile b/drivers/video/backlight/Makefile
index dfbb169bf6ea..0169fd8873ed 100644
--- a/drivers/video/backlight/Makefile
+++ b/drivers/video/backlight/Makefile
@@ -27,6 +27,7 @@ obj-$(CONFIG_BACKLIGHT_APPLE_DWI) += apple_dwi_bl.o
obj-$(CONFIG_BACKLIGHT_AS3711) += as3711_bl.o
obj-$(CONFIG_BACKLIGHT_BD6107) += bd6107.o
obj-$(CONFIG_BACKLIGHT_CLASS_DEVICE) += backlight.o
+obj-$(CONFIG_BACKLIGHT_CGBC) += cgbc_bl.o
obj-$(CONFIG_BACKLIGHT_DA903X) += da903x_bl.o
obj-$(CONFIG_BACKLIGHT_DA9052) += da9052_bl.o
obj-$(CONFIG_BACKLIGHT_EP93XX) += ep93xx_bl.o
diff --git a/drivers/video/backlight/cgbc_bl.c b/drivers/video/backlight/cgbc_bl.c
new file mode 100644
index 000000000000..ab27e14338a8
--- /dev/null
+++ b/drivers/video/backlight/cgbc_bl.c
@@ -0,0 +1,180 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Congatec Board Controller (CGBC) Backlight Driver
+ *
+ * This driver provides backlight control for LCD displays connected to
+ * Congatec boards via the CGBC (Congatec Board Controller). It integrates
+ * with the Linux backlight subsystem and communicates with hardware through
+ * the cgbc-core module.
+ *
+ * Copyright (C) 2025 Novatron Oy
+ *
+ * Author: Petri Karhula <petri.karhula@novatron.fi>
+ */
+
+#include <linux/backlight.h>
+#include <linux/bitfield.h>
+#include <linux/bits.h>
+#include <linux/mfd/cgbc.h>
+#include <linux/module.h>
+#include <linux/platform_device.h>
+
+#define BLT_PWM_DUTY_MASK GENMASK(6, 0)
+
+/* CGBC command for PWM brightness control*/
+#define CGBC_CMD_BLT0_PWM 0x75
+
+#define CGBC_BL_MAX_BRIGHTNESS 100
+
+/**
+ * CGBC backlight driver data
+ * @dev: Pointer to the platform device
+ * @cgbc: Pointer to the parent CGBC device data
+ * @current_brightness: Current brightness level (0-100)
+ */
+struct cgbc_bl_data {
+ struct device *dev;
+ struct cgbc_device_data *cgbc;
+ unsigned int current_brightness;
+};
+
+static int cgbc_bl_read_brightness(struct cgbc_bl_data *bl_data)
+{
+ u8 cmd_buf[4] = { CGBC_CMD_BLT0_PWM };
+ u8 reply_buf[3];
+ int ret;
+
+ ret = cgbc_command(bl_data->cgbc, cmd_buf, sizeof(cmd_buf),
+ reply_buf, sizeof(reply_buf), NULL);
+ if (ret < 0)
+ return ret;
+
+ /*
+ * Get only PWM duty factor percentage,
+ * ignore polarity inversion bit (bit 7)
+ */
+ bl_data->current_brightness = FIELD_GET(BLT_PWM_DUTY_MASK, reply_buf[0]);
+
+ return 0;
+}
+
+static int cgbc_bl_update_status(struct backlight_device *bl)
+{
+ struct cgbc_bl_data *bl_data = bl_get_data(bl);
+ u8 cmd_buf[4] = { CGBC_CMD_BLT0_PWM };
+ u8 reply_buf[3];
+ u8 brightness;
+ int ret;
+
+ brightness = backlight_get_brightness(bl);
+
+ if (brightness != bl_data->current_brightness) {
+ /* Read the current values */
+ ret = cgbc_command(bl_data->cgbc, cmd_buf, sizeof(cmd_buf), reply_buf,
+ sizeof(reply_buf), NULL);
+ if (ret < 0) {
+ dev_err(bl_data->dev, "Failed to read PWM settings: %d\n", ret);
+ return ret;
+ }
+
+ /*
+ * Prepare command buffer for writing new settings. Only 2nd byte is changed
+ * to set new brightness (PWM duty cycle %). Other values (polarity, frequency)
+ * are preserved from the read values.
+ */
+ cmd_buf[1] = (reply_buf[0] & ~BLT_PWM_DUTY_MASK) |
+ FIELD_PREP(BLT_PWM_DUTY_MASK, brightness);
+ cmd_buf[2] = reply_buf[1];
+ cmd_buf[3] = reply_buf[2];
+
+ ret = cgbc_command(bl_data->cgbc, cmd_buf, sizeof(cmd_buf), reply_buf,
+ sizeof(reply_buf), NULL);
+ if (ret < 0) {
+ dev_err(bl_data->dev, "Failed to set brightness: %d\n", ret);
+ return ret;
+ }
+
+ bl_data->current_brightness = reply_buf[0] & BLT_PWM_DUTY_MASK;
+
+ /* Verify the setting was applied correctly */
+ if (bl_data->current_brightness != brightness) {
+ dev_err(bl_data->dev,
+ "Brightness setting verification failed (got %u, expected %u)\n",
+ bl_data->current_brightness, (unsigned int)brightness);
+ return -EIO;
+ }
+ }
+
+ return 0;
+}
+
+static int cgbc_bl_get_brightness(struct backlight_device *bl)
+{
+ struct cgbc_bl_data *bl_data = bl_get_data(bl);
+ int ret;
+
+ ret = cgbc_bl_read_brightness(bl_data);
+ if (ret < 0) {
+ dev_err(bl_data->dev, "Failed to read brightness: %d\n", ret);
+ return ret;
+ }
+
+ return bl_data->current_brightness;
+}
+
+static const struct backlight_ops cgbc_bl_ops = {
+ .options = BL_CORE_SUSPENDRESUME,
+ .update_status = cgbc_bl_update_status,
+ .get_brightness = cgbc_bl_get_brightness,
+};
+
+static int cgbc_bl_probe(struct platform_device *pdev)
+{
+ struct cgbc_device_data *cgbc = dev_get_drvdata(pdev->dev.parent);
+ struct backlight_properties props = { };
+ struct backlight_device *bl_dev;
+ struct cgbc_bl_data *bl_data;
+ int ret;
+
+ bl_data = devm_kzalloc(&pdev->dev, sizeof(*bl_data), GFP_KERNEL);
+ if (!bl_data)
+ return -ENOMEM;
+
+ bl_data->dev = &pdev->dev;
+ bl_data->cgbc = cgbc;
+
+ ret = cgbc_bl_read_brightness(bl_data);
+ if (ret < 0)
+ return dev_err_probe(&pdev->dev, ret,
+ "Failed to read initial brightness\n");
+
+ props.type = BACKLIGHT_PLATFORM;
+ props.max_brightness = CGBC_BL_MAX_BRIGHTNESS;
+ props.brightness = bl_data->current_brightness;
+ props.scale = BACKLIGHT_SCALE_LINEAR;
+
+ bl_dev = devm_backlight_device_register(&pdev->dev, "cgbc-backlight",
+ &pdev->dev, bl_data,
+ &cgbc_bl_ops, &props);
+ if (IS_ERR(bl_dev))
+ return dev_err_probe(&pdev->dev, PTR_ERR(bl_dev),
+ "Failed to register backlight device\n");
+
+ platform_set_drvdata(pdev, bl_data);
+
+ return 0;
+}
+
+static struct platform_driver cgbc_bl_driver = {
+ .driver = {
+ .name = "cgbc-backlight",
+ },
+ .probe = cgbc_bl_probe,
+};
+
+module_platform_driver(cgbc_bl_driver);
+
+MODULE_AUTHOR("Petri Karhula <petri.karhula@novatron.fi>");
+MODULE_DESCRIPTION("Congatec Board Controller (CGBC) Backlight Driver");
+MODULE_LICENSE("GPL");
+MODULE_ALIAS("platform:cgbc-backlight");
--
2.34.1
^ permalink raw reply related
* [PATCH] staging: sm750fb: Fix alignment in sm750_hw_cursor_set_size call
From: Karthikeya @ 2025-12-04 15:01 UTC (permalink / raw)
To: sudipm.mukherjee, teddy.wang, gregkh
Cc: linux-fbdev, linux-staging, linux-kernel, Karthikeya
Align the arguments of the sm750_hw_cursor_set_size function call
with the opening parenthesis.
This fixes a checkpatch.pl CHECK warning:
'Alignment should match open parenthesis'
Signed-off-by: Karthikeya <garagakarthikeya2007@gmail.com>
---
drivers/staging/sm750fb/sm750.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/staging/sm750fb/sm750.c b/drivers/staging/sm750fb/sm750.c
index 3659af7e5..9740f2705 100644
--- a/drivers/staging/sm750fb/sm750.c
+++ b/drivers/staging/sm750fb/sm750.c
@@ -121,8 +121,8 @@ static int lynxfb_ops_cursor(struct fb_info *info, struct fb_cursor *fbcursor)
sm750_hw_cursor_disable(cursor);
if (fbcursor->set & FB_CUR_SETSIZE)
sm750_hw_cursor_set_size(cursor,
- fbcursor->image.width,
- fbcursor->image.height);
+ fbcursor->image.width,
+ fbcursor->image.height);
if (fbcursor->set & FB_CUR_SETPOS)
sm750_hw_cursor_set_pos(cursor,
--
2.52.0
^ permalink raw reply related
* Re: [PATCH v6 2/4] backlight: add max25014atg backlight
From: Daniel Thompson @ 2025-12-04 16:17 UTC (permalink / raw)
To: maudspierings
Cc: Lee Jones, Daniel Thompson, Jingoo Han, Pavel Machek, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Helge Deller, Shawn Guo,
Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam,
Liam Girdwood, Mark Brown, dri-devel, linux-leds, devicetree,
linux-kernel, linux-fbdev, imx, linux-arm-kernel
In-Reply-To: <20251201-max25014-v6-2-88e3ac8112ff@gocontroll.com>
On Mon, Dec 01, 2025 at 12:53:21PM +0100, Maud Spierings via B4 Relay wrote:
> From: Maud Spierings <maudspierings@gocontroll.com>
>
> The Maxim MAX25014 is a 4-channel automotive grade backlight driver IC
> with integrated boost controller.
>
> Signed-off-by: Maud Spierings <maudspierings@gocontroll.com>
> <snip>
> +static int max25014_check_errors(struct max25014 *maxim)
> +{
> + uint32_t val;
> + uint8_t i;
> + int ret;
> +
> + ret = regmap_read(maxim->regmap, MAX25014_OPEN, &val);
> + if (ret)
> + return ret;
> + if (val) {
> + dev_err(&maxim->client->dev, "Open led strings detected on:\n");
> + for (i = 0; i < 4; i++) {
> + if (val & 1 << i)
> + dev_err(&maxim->client->dev, "string %d\n", i + 1);
> + }
> + return -EIO;
> + }
> +
> + ret = regmap_read(maxim->regmap, MAX25014_SHORT_GND, &val);
> + if (ret)
> + return ret;
> + if (val) {
> + dev_err(&maxim->client->dev, "Short to ground detected on:\n");
> + for (i = 0; i < 4; i++) {
> + if (val & 1 << i)
> + dev_err(&maxim->client->dev, "string %d\n", i + 1);
> + }
> + return -EIO;
> + }
> +
> + ret = regmap_read(maxim->regmap, MAX25014_SHORT_GND, &val);
Shouldn't this be MAX25014_SHORT_LED?
> + if (ret)
> + return ret;
> + if (val) {
> + dev_err(&maxim->client->dev, "Shorted led detected on:\n");
> + for (i = 0; i < 4; i++) {
> + if (val & 1 << i)
> + dev_err(&maxim->client->dev, "string %d\n", i + 1);
> + }
> + return -EIO;
> + }
> +
> + ret = regmap_read(maxim->regmap, MAX25014_DIAG, &val);
> + if (ret)
> + return ret;
> + /*
> + * The HW_RST bit always starts at 1 after power up.
> + * It is reset on first read, does not indicate an error.
> + */
> + if (val && val != MAX25014_DIAG_HW_RST) {
> + if (val & MAX25014_DIAG_OT)
> + dev_err(&maxim->client->dev,
> + "Overtemperature shutdown\n");
> + if (val & MAX25014_DIAG_OTW)
> + dev_err(&maxim->client->dev,
> + "Chip is getting too hot (>125C)\n");
> + if (val & MAX25014_DIAG_BSTOV)
> + dev_err(&maxim->client->dev,
> + "Boost converter overvoltage\n");
> + if (val & MAX25014_DIAG_BSTUV)
> + dev_err(&maxim->client->dev,
> + "Boost converter undervoltage\n");
> + if (val & MAX25014_DIAG_IREFOOR)
> + dev_err(&maxim->client->dev, "IREF out of range\n");
> + return -EIO;
> + }
> + return 0;
> +}
> +
> +/*
> + * 1. disable unused strings
> + * 2. set dim mode
> + * 3. set setting register
> + * 4. enable the backlight
> + */
> +static int max25014_configure(struct max25014 *maxim, int initial_state)
> +{
> + uint32_t val;
> + int ret;
> +
> + /*
> + * Strings can only be disabled when MAX25014_ISET_ENA == 0, check if
> + * it needs to be changed at all to prevent the backlight flashing when
> + * it is configured correctly by the bootloader
> + */
Attach the comment to the if statement rather than the read.
> + ret = regmap_read(maxim->regmap, MAX25014_DISABLE, &val);
> + if (ret)
> + return ret;
> +
> + if (!((val & MAX25014_DISABLE_DIS_MASK) == maxim->strings_mask)) {
> + if (initial_state == BACKLIGHT_POWER_ON) {
> + ret = regmap_write(maxim->regmap, MAX25014_ISET, 0);
> + if (ret)
> + return ret;
> + }
> + ret = regmap_write(maxim->regmap, MAX25014_DISABLE, maxim->strings_mask);
> + if (ret)
> + return ret;
> + }
> +
> + ret = regmap_write(maxim->regmap, MAX25014_IMODE, MAX25014_IMODE_HDIM);
> + if (ret)
> + return ret;
> +
> + ret = regmap_read(maxim->regmap, MAX25014_SETTING, &val);
> + if (ret)
> + return ret;
> +
> + ret = regmap_write(maxim->regmap, MAX25014_SETTING,
> + val & ~MAX25014_SETTING_FPWM);
> + if (ret)
> + return ret;
> +
> + ret = regmap_write(maxim->regmap, MAX25014_ISET,
> + maxim->iset | MAX25014_ISET_ENA |
> + MAX25014_ISET_PSEN);
> + return ret;
> +}
> +
> +static int max25014_update_status(struct backlight_device *bl_dev)
> +{
> + struct max25014 *maxim = bl_get_data(bl_dev);
> + uint32_t reg;
> + int ret;
> +
> + if (backlight_is_blank(maxim->bl))
> + bl_dev->props.brightness = 0;
This isn't right. Why would you change the backlight level just because
it is currently blanked (and sorry I missed this one last time).
> +
> + reg = TON_STEP * bl_dev->props.brightness;
The correct way to honour blanking is just go call
backlight_get_brightness() instead of reading the property directly.
> +
> + /*
> + * 18 bit number lowest, 2 bits in first register,
> + * next lowest 8 in the L register, next 8 in the H register
> + * Seemingly setting the strength of only one string controls all of
> + * them, individual settings don't affect the outcome.
> + */
> +
> + ret = regmap_write(maxim->regmap, MAX25014_TON_1_4_LSB, reg & 0b00000011);
> + if (ret != 0)
> + return ret;
> + ret = regmap_write(maxim->regmap, MAX25014_TON1L, (reg >> 2) & 0b11111111);
> + if (ret != 0)
> + return ret;
> + return regmap_write(maxim->regmap, MAX25014_TON1H, (reg >> 10) & 0b11111111);
> +}
> +
> +static const struct backlight_ops max25014_bl_ops = {
> + .options = BL_CORE_SUSPENDRESUME,
> + .update_status = max25014_update_status,
> +};
> +
> +static int max25014_parse_dt(struct max25014 *maxim,
> + uint32_t *initial_brightness)
> +{
> + struct device *dev = &maxim->client->dev;
> + struct device_node *node = dev->of_node;
> + struct fwnode_handle *child;
> + uint32_t strings[4];
> + int res, i;
> +
> + if (!node)
> + return dev_err_probe(dev, -EINVAL, "no platform data\n");
> +
> + child = device_get_next_child_node(dev, NULL);
> + if (child) {
> + res = fwnode_property_count_u32(child, "led-sources");
> + if (res > 0) {
> + fwnode_property_read_u32_array(child, "led-sources",
> + strings, res);
> +
> + /* set all strings as disabled, then enable those in led-sources*/
> + maxim->strings_mask = 0xf;
> + for (i = 0; i < res; i++) {
> + if (strings[i] <= 4)
> + maxim->strings_mask &= ~BIT(strings[i]);
> + }
> + }
> +
> + fwnode_property_read_u32(child, "default-brightness",
> + initial_brightness);
> +
> + fwnode_handle_put(child);
> + }
> +
> + maxim->iset = MAX25014_ISET_DEFAULT_100;
> + of_property_read_u32(node, "maxim,iset", &maxim->iset);
> +
> + if (maxim->iset > 15)
> + return dev_err_probe(dev, -EINVAL,
> + "Invalid iset, should be a value from 0-15, entered was %d\n",
> + maxim->iset);
> +
> + if (*initial_brightness > 100)
> + return dev_err_probe(dev, -EINVAL,
> + "Invalid initial brightness, should be a value from 0-100, entered was %d\n",
> + *initial_brightness);
> +
> + return 0;
> +}
> +
> +static int max25014_probe(struct i2c_client *cl)
> +{
> + const struct i2c_device_id *id = i2c_client_get_device_id(cl);
> + struct backlight_properties props;
> + uint32_t initial_brightness = 50;
> + struct backlight_device *bl;
> + struct max25014 *maxim;
> + int ret;
> +
> + maxim = devm_kzalloc(&cl->dev, sizeof(struct max25014), GFP_KERNEL);
> + if (!maxim)
> + return -ENOMEM;
> +
> + maxim->client = cl;
> +
> + ret = max25014_parse_dt(maxim, &initial_brightness);
> + if (ret)
> + return ret;
> +
> + maxim->vin = devm_regulator_get(&maxim->client->dev, "power");
> + if (IS_ERR(maxim->vin)) {
> + return dev_err_probe(&maxim->client->dev, PTR_ERR(maxim->vin),
> + "failed to get power-supply");
> + }
> +
> + ret = regulator_enable(maxim->vin);
> + if (ret)
> + return dev_err_probe(&maxim->client->dev, ret,
> + "failed to enable power-supply\n");
Can this use devm_regulator_get_enable()?
> +
> + maxim->enable = devm_gpiod_get_optional(&maxim->client->dev, "enable",
> + GPIOD_OUT_HIGH);
> + if (IS_ERR(maxim->enable)) {
> + ret = dev_err_probe(&maxim->client->dev, PTR_ERR(maxim->enable),
> + "failed to get enable gpio\n");
> + goto disable_vin;
> + }
> +
> + /* Datasheet Electrical Characteristics tSTARTUP 2ms */
> + fsleep(2000);
> +
> + maxim->regmap = devm_regmap_init_i2c(cl, &max25014_regmap_config);
> + if (IS_ERR(maxim->regmap)) {
> + ret = dev_err_probe(&maxim->client->dev, PTR_ERR(maxim->regmap),
> + "failed to initialize the i2c regmap\n");
> + goto disable_full;
> + }
> +
> + i2c_set_clientdata(cl, maxim);
> +
> + ret = max25014_check_errors(maxim);
> + if (ret) { /* error is already reported in the above function */
> + goto disable_full;
> + }
> +
> + ret = max25014_initial_power_state(maxim);
> + if (ret < 0) {
> + dev_err_probe(&maxim->client->dev, ret, "Could not get enabled state\n");
> + goto disable_full;
> + }
> +
> + memset(&props, 0, sizeof(struct backlight_properties));
> + props.type = BACKLIGHT_PLATFORM;
> + props.max_brightness = MAX_BRIGHTNESS;
> + props.brightness = initial_brightness;
> + props.scale = BACKLIGHT_SCALE_LINEAR;
> + props.power = ret;
> +
> + ret = max25014_configure(maxim, ret);
> + if (ret) {
> + dev_err_probe(&maxim->client->dev, ret, "device config error");
> + goto disable_full;
> + }
> +
> + bl = devm_backlight_device_register(&maxim->client->dev, id->name,
> + &maxim->client->dev, maxim,
> + &max25014_bl_ops, &props);
> + if (IS_ERR(bl)) {
> + ret = dev_err_probe(&maxim->client->dev, PTR_ERR(bl),
> + "failed to register backlight\n");
> + goto disable_full;
> + }
> +
> + maxim->bl = bl;
> +
> + backlight_update_status(maxim->bl);
> +
> + return 0;
> +
> +disable_full:
> + gpiod_set_value_cansleep(maxim->enable, 0);
Why is this needed? It was only ever set by devm_gpiod_get_optional().
> +disable_vin:
> + regulator_disable(maxim->vin);
This is also not needed if you use devm_regulator_get_enable().
> + return ret;
> +}
Daniel.
^ permalink raw reply
* Re: [PATCH v5 1/2] backlight: Add Congatec Board Controller (CGBC) backlight support
From: Daniel Thompson @ 2025-12-04 16:31 UTC (permalink / raw)
To: petri.karhula
Cc: Thomas Richard, Lee Jones, Jingoo Han, Helge Deller, linux-kernel,
dri-devel, linux-fbdev
In-Reply-To: <20251204-cgbc-backlight-v5-1-26f1be6a69c3@novatron.fi>
On Thu, Dec 04, 2025 at 02:35:26PM +0000, Petri Karhula via B4 Relay wrote:
> From: Petri Karhula <petri.karhula@novatron.fi>
>
> This driver provides backlight brightness control through the Linux
> backlight subsystem. It communicates with the board controller to
> adjust LCD backlight using PWM signals. Communication is done
> through Congatec Board Controller core driver.
>
> Signed-off-by: Petri Karhula <petri.karhula@novatron.fi>
Didn't I already share a Reviewed-by: for this?
Unless you have made changes big enough to invalidate the review then
you should collect tags offered on previous versions (if you do ever
disregard a tag there should be a note about why). For details see:
https://docs.kernel.org/process/submitting-patches.html#using-reported-by-tested-by-reviewed-by-suggested-by-and-fixes
Please don't forget to collect the tags if there is a v6 but, for now:
Reviewed-by: Daniel Thompson (RISCstar) <danielt@kernel.org>
Daniel.
^ permalink raw reply
* [PATCH v4 0/3] Introduce support for C linked list interfacing and GPU Buddy bindings
From: Joel Fernandes @ 2025-12-04 21:51 UTC (permalink / raw)
To: linux-kernel, rust-for-linux, dri-devel, Danilo Krummrich,
David Airlie
Cc: Alexandre Courbot, Alistair Popple, Miguel Ojeda, Alex Gaynor,
Boqun Feng, Gary Guo, Björn Roy Baron, Benno Lossin,
Andreas Hindborg, Alice Ryhl, Trevor Gross, Simona Vetter,
Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, John Hubbard,
Timur Tabi, joel, Elle Rhumsaa, Daniel Almeida, Andrea Righi,
Philipp Stanner, nouveau, Zhi Wang, Christian König,
Jonathan Corbet, Alex Deucher, Jani Nikula, Joonas Lahtinen,
Rodrigo Vivi, Tvrtko Ursulin, Huang Rui, Matthew Auld,
Matthew Brost, Lucas De Marchi, Thomas Hellström,
Helge Deller, Edwin Peer, linux-doc, amd-gfx, intel-gfx, intel-xe,
linux-fbdev, Joel Fernandes
This series combines a number of other series which build up to the same goal:
to make it possible to use DRM buddy from nova-core rust code. See links to the
different series below.
The git tree with all patches can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/jfern/linux.git (tag: clist-buddy-v4-20251204)
Changes for v4:
- Combined the clist and drm buddy series:
- A rust module (CList) to access circular linked lists from rust code.
- DRM buddy allocator bindings that were originally part of RFC.
- DRM buddy allocator one level up to drivers/gpu/ so it can be used by
GPU drivers (example, nova-core) that have usecases other than DRM.
- Add Rust bindings for the GPU buddy allocator.
Notes from past cover letters about CList:
Introduction
============
This patchset introduces an interface to iterate over doubly circular linked
lists used in the kernel (allocated by C kernel code). The main usecase is
iterating over the list of blocks provided by the GPU buddy allocator.
The series also moves the DRM buddy allocator one level up and adds Rust
bindings for it, enabling GPU drivers like nova-core to use it.
A question may arise: Why not use rust list.rs for this?
=========================================================
Rust's list.rs is used to provide safe intrusive lists for Rust-allocated
items. In doing so, it takes ownership of the items in the list and the links
between list items. However, the usecase for GPU buddy allocator bindings, the
C side allocates the items in the list, and also links the list together. Due
to this, there is an ownership conflict making list.rs not the best abstraction
for this usecase. What we need is a view of the list, not ownership of it.
Further, the list links in a bindings usecase may come from C allocated
objects, not from the Rust side.
Link to v2 (clist only): https://lore.kernel.org/all/20251111171315.2196103-4-joelagnelf@nvidia.com/
Notes and patches about DRM buddy code movement and DRM buddy bindings:
Link to RFC: https://lore.kernel.org/all/20251030190613.1224287-1-joelagnelf@nvidia.com/
Link to DRM buddy move discussion: https://lore.kernel.org/all/20251124234432.1988476-1-joelagnelf@nvidia.com/
Joel Fernandes (3):
rust: clist: Add support to interface with C linked lists
gpu: Move DRM buddy allocator one level up
rust: gpu: Add GPU buddy allocator bindings
Documentation/gpu/drm-mm.rst | 10 +-
MAINTAINERS | 7 +
drivers/gpu/Kconfig | 13 +
drivers/gpu/Makefile | 2 +
drivers/gpu/buddy.c | 1310 +++++++++++++++++
drivers/gpu/drm/Kconfig | 1 +
drivers/gpu/drm/Kconfig.debug | 4 +-
drivers/gpu/drm/amd/amdgpu/Kconfig | 1 +
drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c | 2 +-
.../gpu/drm/amd/amdgpu/amdgpu_res_cursor.h | 12 +-
drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c | 80 +-
drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.h | 20 +-
drivers/gpu/drm/drm_buddy.c | 1287 +---------------
drivers/gpu/drm/i915/Kconfig | 1 +
drivers/gpu/drm/i915/i915_scatterlist.c | 10 +-
drivers/gpu/drm/i915/i915_ttm_buddy_manager.c | 55 +-
drivers/gpu/drm/i915/i915_ttm_buddy_manager.h | 6 +-
.../drm/i915/selftests/intel_memory_region.c | 20 +-
drivers/gpu/drm/tests/Makefile | 1 -
.../gpu/drm/ttm/tests/ttm_bo_validate_test.c | 5 +-
drivers/gpu/drm/ttm/tests/ttm_mock_manager.c | 18 +-
drivers/gpu/drm/ttm/tests/ttm_mock_manager.h | 4 +-
drivers/gpu/drm/xe/Kconfig | 1 +
drivers/gpu/drm/xe/xe_res_cursor.h | 34 +-
drivers/gpu/drm/xe/xe_svm.c | 12 +-
drivers/gpu/drm/xe/xe_ttm_vram_mgr.c | 73 +-
drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h | 4 +-
drivers/gpu/tests/Makefile | 3 +
.../gpu_buddy_test.c} | 390 ++---
drivers/gpu/tests/gpu_random.c | 48 +
drivers/gpu/tests/gpu_random.h | 28 +
drivers/video/Kconfig | 2 +
include/drm/drm_buddy.h | 163 +-
include/linux/gpu_buddy.h | 177 +++
rust/bindings/bindings_helper.h | 11 +
rust/helpers/gpu.c | 23 +
rust/helpers/helpers.c | 2 +
rust/helpers/list.c | 12 +
rust/kernel/clist.rs | 357 +++++
rust/kernel/gpu/buddy.rs | 527 +++++++
rust/kernel/gpu/mod.rs | 5 +
rust/kernel/lib.rs | 3 +
42 files changed, 2944 insertions(+), 1800 deletions(-)
create mode 100644 drivers/gpu/Kconfig
create mode 100644 drivers/gpu/buddy.c
create mode 100644 drivers/gpu/tests/Makefile
rename drivers/gpu/{drm/tests/drm_buddy_test.c => tests/gpu_buddy_test.c} (68%)
create mode 100644 drivers/gpu/tests/gpu_random.c
create mode 100644 drivers/gpu/tests/gpu_random.h
create mode 100644 include/linux/gpu_buddy.h
create mode 100644 rust/helpers/gpu.c
create mode 100644 rust/helpers/list.c
create mode 100644 rust/kernel/clist.rs
create mode 100644 rust/kernel/gpu/buddy.rs
create mode 100644 rust/kernel/gpu/mod.rs
--
2.34.1
^ permalink raw reply
* [PATCH v4 1/3] rust: clist: Add support to interface with C linked lists
From: Joel Fernandes @ 2025-12-04 21:51 UTC (permalink / raw)
To: linux-kernel, rust-for-linux, dri-devel, Danilo Krummrich,
David Airlie
Cc: Alexandre Courbot, Alistair Popple, Miguel Ojeda, Alex Gaynor,
Boqun Feng, Gary Guo, Björn Roy Baron, Benno Lossin,
Andreas Hindborg, Alice Ryhl, Trevor Gross, Simona Vetter,
Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, John Hubbard,
Timur Tabi, joel, Elle Rhumsaa, Daniel Almeida, Andrea Righi,
Philipp Stanner, nouveau, Zhi Wang, Christian König,
Jonathan Corbet, Alex Deucher, Jani Nikula, Joonas Lahtinen,
Rodrigo Vivi, Tvrtko Ursulin, Huang Rui, Matthew Auld,
Matthew Brost, Lucas De Marchi, Thomas Hellström,
Helge Deller, Edwin Peer, linux-doc, amd-gfx, intel-gfx, intel-xe,
linux-fbdev, Joel Fernandes
In-Reply-To: <20251204215129.2357292-1-joelagnelf@nvidia.com>
Add a new module `clist` for working with C's doubly circular linked
lists. Provide low-level iteration over list nodes.
Typed iteration over actual items is provided with a `clist_create`
macro to assist in creation of the `Clist` type.
Signed-off-by: Joel Fernandes <joelagnelf@nvidia.com>
---
MAINTAINERS | 7 +
rust/helpers/helpers.c | 1 +
rust/helpers/list.c | 12 ++
rust/kernel/clist.rs | 357 +++++++++++++++++++++++++++++++++++++++++
rust/kernel/lib.rs | 1 +
5 files changed, 378 insertions(+)
create mode 100644 rust/helpers/list.c
create mode 100644 rust/kernel/clist.rs
diff --git a/MAINTAINERS b/MAINTAINERS
index 5f7aa6a8a9a1..fb2ff877b6d1 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -22666,6 +22666,13 @@ F: rust/kernel/init.rs
F: rust/pin-init/
K: \bpin-init\b|pin_init\b|PinInit
+RUST TO C LIST INTERFACES
+M: Joel Fernandes <joelagnelf@nvidia.com>
+M: Alexandre Courbot <acourbot@nvidia.com>
+L: rust-for-linux@vger.kernel.org
+S: Maintained
+F: rust/kernel/clist.rs
+
RXRPC SOCKETS (AF_RXRPC)
M: David Howells <dhowells@redhat.com>
M: Marc Dionne <marc.dionne@auristor.com>
diff --git a/rust/helpers/helpers.c b/rust/helpers/helpers.c
index 79c72762ad9c..634fa2386bbb 100644
--- a/rust/helpers/helpers.c
+++ b/rust/helpers/helpers.c
@@ -32,6 +32,7 @@
#include "io.c"
#include "jump_label.c"
#include "kunit.c"
+#include "list.c"
#include "maple_tree.c"
#include "mm.c"
#include "mutex.c"
diff --git a/rust/helpers/list.c b/rust/helpers/list.c
new file mode 100644
index 000000000000..6044979c7a2e
--- /dev/null
+++ b/rust/helpers/list.c
@@ -0,0 +1,12 @@
+// SPDX-License-Identifier: GPL-2.0
+
+/*
+ * Helpers for C Circular doubly linked list implementation.
+ */
+
+#include <linux/list.h>
+
+void rust_helper_list_add_tail(struct list_head *new, struct list_head *head)
+{
+ list_add_tail(new, head);
+}
diff --git a/rust/kernel/clist.rs b/rust/kernel/clist.rs
new file mode 100644
index 000000000000..b4ee3149903a
--- /dev/null
+++ b/rust/kernel/clist.rs
@@ -0,0 +1,357 @@
+// SPDX-License-Identifier: GPL-2.0
+
+//! A C doubly circular intrusive linked list interface for rust code.
+//!
+//! # Examples
+//!
+//! ```
+//! use kernel::{
+//! bindings,
+//! clist::init_list_head,
+//! clist_create,
+//! types::Opaque, //
+//! };
+//! # // Create test list with values (0, 10, 20) - normally done by C code but it is
+//! # // emulated here for doctests using the C bindings.
+//! # use core::mem::MaybeUninit;
+//! #
+//! # /// C struct with embedded `list_head` (typically will be allocated by C code).
+//! # #[repr(C)]
+//! # pub(crate) struct SampleItemC {
+//! # pub value: i32,
+//! # pub link: bindings::list_head,
+//! # }
+//! #
+//! # let mut head = MaybeUninit::<bindings::list_head>::uninit();
+//! #
+//! # let head = head.as_mut_ptr();
+//! # // SAFETY: head and all the items are test objects allocated in this scope.
+//! # unsafe { init_list_head(head) };
+//! #
+//! # let mut items = [
+//! # MaybeUninit::<SampleItemC>::uninit(),
+//! # MaybeUninit::<SampleItemC>::uninit(),
+//! # MaybeUninit::<SampleItemC>::uninit(),
+//! # ];
+//! #
+//! # for (i, item) in items.iter_mut().enumerate() {
+//! # let ptr = item.as_mut_ptr();
+//! # // SAFETY: pointers are to allocated test objects with a list_head field.
+//! # unsafe {
+//! # (*ptr).value = i as i32 * 10;
+//! # // addr_of_mut!() computes address of link directly as link is uninitialized.
+//! # init_list_head(core::ptr::addr_of_mut!((*ptr).link));
+//! # bindings::list_add_tail(&mut (*ptr).link, head);
+//! # }
+//! # }
+//!
+//! // Rust wrapper for the C struct.
+//! // The list item struct in this example is defined in C code as:
+//! // struct SampleItemC {
+//! // int value;
+//! // struct list_head link;
+//! // };
+//! //
+//! #[repr(transparent)]
+//! pub(crate) struct Item(Opaque<SampleItemC>);
+//!
+//! impl Item {
+//! pub(crate) fn value(&self) -> i32 {
+//! // SAFETY: [`Item`] has same layout as [`SampleItemC`].
+//! unsafe { (*self.0.get()).value }
+//! }
+//! }
+//!
+//! // Create typed [`CList`] from sentinel head.
+//! // SAFETY: head is valid, items are [`SampleItemC`] with embedded `link` field.
+//! let list = unsafe { clist_create!(head, Item, SampleItemC, link) };
+//!
+//! // Iterate directly over typed items.
+//! let mut found_0 = false;
+//! let mut found_10 = false;
+//! let mut found_20 = false;
+//!
+//! for item in list.iter() {
+//! let val = item.value();
+//! if val == 0 { found_0 = true; }
+//! if val == 10 { found_10 = true; }
+//! if val == 20 { found_20 = true; }
+//! }
+//!
+//! assert!(found_0 && found_10 && found_20);
+//! ```
+
+use core::{
+ iter::FusedIterator,
+ marker::PhantomData, //
+};
+
+use crate::{
+ bindings,
+ types::Opaque, //
+};
+
+use pin_init::PinInit;
+
+/// Initialize a `list_head` object to point to itself.
+///
+/// # Safety
+///
+/// `list` must be a valid pointer to a `list_head` object.
+#[inline]
+pub unsafe fn init_list_head(list: *mut bindings::list_head) {
+ // SAFETY: Caller guarantees `list` is a valid pointer to a `list_head`.
+ unsafe {
+ (*list).next = list;
+ (*list).prev = list;
+ }
+}
+
+/// Wraps a `list_head` object for use in intrusive linked lists.
+///
+/// # Invariants
+///
+/// - [`CListHead`] represents an allocated and valid `list_head` structure.
+/// - Once a ClistHead is created in Rust, it will not be modified by non-Rust code.
+/// - All `list_head` for individual items are not modified for the lifetime of [`CListHead`].
+#[repr(transparent)]
+pub struct CListHead(Opaque<bindings::list_head>);
+
+impl CListHead {
+ /// Create a `&CListHead` reference from a raw `list_head` pointer.
+ ///
+ /// # Safety
+ ///
+ /// - `ptr` must be a valid pointer to an allocated and initialized `list_head` structure.
+ /// - `ptr` must remain valid and unmodified for the lifetime `'a`.
+ #[inline]
+ pub unsafe fn from_raw<'a>(ptr: *mut bindings::list_head) -> &'a Self {
+ // SAFETY:
+ // - [`CListHead`] has same layout as `list_head`.
+ // - `ptr` is valid and unmodified for 'a.
+ unsafe { &*ptr.cast() }
+ }
+
+ /// Get the raw `list_head` pointer.
+ #[inline]
+ pub fn as_raw(&self) -> *mut bindings::list_head {
+ self.0.get()
+ }
+
+ /// Get the next [`CListHead`] in the list.
+ #[inline]
+ pub fn next(&self) -> &Self {
+ let raw = self.as_raw();
+ // SAFETY:
+ // - `self.as_raw()` is valid per type invariants.
+ // - The `next` pointer is guaranteed to be non-NULL.
+ unsafe { Self::from_raw((*raw).next) }
+ }
+
+ /// Get the previous [`CListHead`] in the list.
+ #[inline]
+ pub fn prev(&self) -> &Self {
+ let raw = self.as_raw();
+ // SAFETY:
+ // - self.as_raw() is valid per type invariants.
+ // - The `prev` pointer is guaranteed to be non-NULL.
+ unsafe { Self::from_raw((*raw).prev) }
+ }
+
+ /// Check if this node is linked in a list (not isolated).
+ #[inline]
+ pub fn is_linked(&self) -> bool {
+ let raw = self.as_raw();
+ // SAFETY: self.as_raw() is valid per type invariants.
+ unsafe { (*raw).next != raw && (*raw).prev != raw }
+ }
+
+ /// Fallible pin-initializer that initializes and then calls user closure.
+ ///
+ /// Initializes the list head first, then passes `&CListHead` to the closure.
+ /// This hides the raw FFI pointer from the user.
+ pub fn try_init<E>(
+ init_func: impl FnOnce(&CListHead) -> Result<(), E>,
+ ) -> impl PinInit<Self, E> {
+ // SAFETY: init_list_head initializes the list_head to point to itself.
+ // After initialization, we create a reference to pass to the closure.
+ unsafe {
+ pin_init::pin_init_from_closure(move |slot: *mut Self| {
+ init_list_head(slot.cast());
+ // SAFETY: slot is now initialized, safe to create reference.
+ init_func(&*slot)
+ })
+ }
+ }
+}
+
+// SAFETY: [`CListHead`] can be sent to any thread.
+unsafe impl Send for CListHead {}
+
+// SAFETY: [`CListHead`] can be shared among threads as it is not modified
+// by non-Rust code per type invariants.
+unsafe impl Sync for CListHead {}
+
+impl PartialEq for CListHead {
+ fn eq(&self, other: &Self) -> bool {
+ self.as_raw() == other.as_raw()
+ }
+}
+
+impl Eq for CListHead {}
+
+/// Low-level iterator over `list_head` nodes.
+///
+/// An iterator used to iterate over a C intrusive linked list (`list_head`). Caller has to
+/// perform conversion of returned [`CListHead`] to an item (using `container_of` macro or similar).
+///
+/// # Invariants
+///
+/// [`CListHeadIter`] is iterating over an allocated, initialized and valid list.
+struct CListHeadIter<'a> {
+ current_head: &'a CListHead,
+ list_head: &'a CListHead,
+}
+
+impl<'a> Iterator for CListHeadIter<'a> {
+ type Item = &'a CListHead;
+
+ #[inline]
+ fn next(&mut self) -> Option<Self::Item> {
+ // Advance to next node.
+ let next = self.current_head.next();
+
+ // Check if we've circled back to the sentinel head.
+ if next == self.list_head {
+ None
+ } else {
+ self.current_head = next;
+ Some(self.current_head)
+ }
+ }
+}
+
+impl<'a> FusedIterator for CListHeadIter<'a> {}
+
+/// A typed C linked list with a sentinel head.
+///
+/// A sentinel head represents the entire linked list and can be used for
+/// iteration over items of type `T`, it is not associated with a specific item.
+///
+/// The const generic `OFFSET` specifies the byte offset of the `list_head` field within
+/// the struct that `T` wraps.
+///
+/// # Invariants
+///
+/// - `head` is an allocated and valid C `list_head` structure that is the list's sentinel.
+/// - `OFFSET` is the byte offset of the `list_head` field within the struct that `T` wraps.
+/// - All the list's `list_head` nodes are allocated and have valid next/prev pointers.
+/// - The underlying `list_head` (and entire list) is not modified for the lifetime `'a`.
+pub struct CList<'a, T, const OFFSET: usize> {
+ head: &'a CListHead,
+ _phantom: PhantomData<&'a T>,
+}
+
+impl<'a, T, const OFFSET: usize> CList<'a, T, OFFSET> {
+ /// Create a typed [`CList`] from a raw sentinel `list_head` pointer.
+ ///
+ /// # Safety
+ ///
+ /// - `ptr` must be a valid pointer to an allocated and initialized `list_head` structure
+ /// representing a list sentinel.
+ /// - `ptr` must remain valid and unmodified for the lifetime `'a`.
+ /// - The list must contain items where the `list_head` field is at byte offset `OFFSET`.
+ /// - `T` must be `#[repr(transparent)]` over the C struct.
+ #[inline]
+ pub unsafe fn from_raw(ptr: *mut bindings::list_head) -> Self {
+ Self {
+ // SAFETY: Caller guarantees `ptr` is a valid, sentinel `list_head` object.
+ head: unsafe { CListHead::from_raw(ptr) },
+ _phantom: PhantomData,
+ }
+ }
+
+ /// Get the raw sentinel `list_head` pointer.
+ #[inline]
+ pub fn as_raw(&self) -> *mut bindings::list_head {
+ self.head.as_raw()
+ }
+
+ /// Check if the list is empty.
+ #[inline]
+ pub fn is_empty(&self) -> bool {
+ let raw = self.as_raw();
+ // SAFETY: self.as_raw() is valid per type invariants.
+ unsafe { (*raw).next == raw }
+ }
+
+ /// Create an iterator over typed items.
+ #[inline]
+ pub fn iter(&self) -> CListIter<'a, T, OFFSET> {
+ CListIter {
+ head_iter: CListHeadIter {
+ current_head: self.head,
+ list_head: self.head,
+ },
+ _phantom: PhantomData,
+ }
+ }
+}
+
+/// High-level iterator over typed list items.
+pub struct CListIter<'a, T, const OFFSET: usize> {
+ head_iter: CListHeadIter<'a>,
+ _phantom: PhantomData<&'a T>,
+}
+
+impl<'a, T, const OFFSET: usize> Iterator for CListIter<'a, T, OFFSET> {
+ type Item = &'a T;
+
+ fn next(&mut self) -> Option<Self::Item> {
+ let head = self.head_iter.next()?;
+
+ // Convert to item using OFFSET.
+ // SAFETY: `item_ptr` calculation from `OFFSET` (calculated using offset_of!)
+ // is valid per invariants.
+ Some(unsafe { &*head.as_raw().byte_sub(OFFSET).cast::<T>() })
+ }
+}
+
+impl<'a, T, const OFFSET: usize> FusedIterator for CListIter<'a, T, OFFSET> {}
+
+/// Create a C doubly-circular linked list interface [`CList`] from a raw `list_head` pointer.
+///
+/// This macro creates a [`CList<T, OFFSET>`] that can iterate over items of type `$rust_type`
+/// linked via the `$field` field in the underlying C struct `$c_type`.
+///
+/// # Arguments
+///
+/// - `$head`: Raw pointer to the sentinel `list_head` object (`*mut bindings::list_head`).
+/// - `$rust_type`: Each item's rust wrapper type.
+/// - `$c_type`: Each item's C struct type that contains the embedded `list_head`.
+/// - `$field`: The name of the `list_head` field within the C struct.
+///
+/// # Safety
+///
+/// The caller must ensure:
+/// - `$head` is a valid, initialized sentinel `list_head` pointing to a list that remains
+/// unmodified for the lifetime of the rust [`CList`].
+/// - The list contains items of type `$c_type` linked via an embedded `$field`.
+/// - `$rust_type` is `#[repr(transparent)]` over `$c_type` or has compatible layout.
+/// - The macro is called from an unsafe block.
+///
+/// # Examples
+///
+/// Refer to the examples in the [`crate::clist`] module documentation.
+#[macro_export]
+macro_rules! clist_create {
+ ($head:expr, $rust_type:ty, $c_type:ty, $($field:tt).+) => {{
+ // Compile-time check that field path is a list_head.
+ let _: fn(*const $c_type) -> *const $crate::bindings::list_head =
+ |p| ::core::ptr::addr_of!((*p).$($field).+);
+
+ // Calculate offset and create `CList`.
+ const OFFSET: usize = ::core::mem::offset_of!($c_type, $($field).+);
+ $crate::clist::CList::<$rust_type, OFFSET>::from_raw($head)
+ }};
+}
diff --git a/rust/kernel/lib.rs b/rust/kernel/lib.rs
index c2eea9a2a345..b69cc5ed3b59 100644
--- a/rust/kernel/lib.rs
+++ b/rust/kernel/lib.rs
@@ -72,6 +72,7 @@
pub mod bug;
#[doc(hidden)]
pub mod build_assert;
+pub mod clist;
pub mod clk;
#[cfg(CONFIG_CONFIGFS_FS)]
pub mod configfs;
--
2.34.1
^ permalink raw reply related
* [PATCH v4 3/3] rust: gpu: Add GPU buddy allocator bindings
From: Joel Fernandes @ 2025-12-04 21:51 UTC (permalink / raw)
To: linux-kernel, rust-for-linux, dri-devel, Danilo Krummrich,
David Airlie
Cc: Alexandre Courbot, Alistair Popple, Miguel Ojeda, Alex Gaynor,
Boqun Feng, Gary Guo, Björn Roy Baron, Benno Lossin,
Andreas Hindborg, Alice Ryhl, Trevor Gross, Simona Vetter,
Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, John Hubbard,
Timur Tabi, joel, Elle Rhumsaa, Daniel Almeida, Andrea Righi,
Philipp Stanner, nouveau, Zhi Wang, Christian König,
Jonathan Corbet, Alex Deucher, Jani Nikula, Joonas Lahtinen,
Rodrigo Vivi, Tvrtko Ursulin, Huang Rui, Matthew Auld,
Matthew Brost, Lucas De Marchi, Thomas Hellström,
Helge Deller, Edwin Peer, linux-doc, amd-gfx, intel-gfx, intel-xe,
linux-fbdev, Joel Fernandes
In-Reply-To: <20251204215129.2357292-1-joelagnelf@nvidia.com>
Add safe Rust abstractions over the Linux kernel's GPU buddy
allocator for physical memory management. The GPU buddy allocator
implements a binary buddy system for useful for GPU physical memory
allocation. nova-core will use it for physical memory allocation.
Signed-off-by: Joel Fernandes <joelagnelf@nvidia.com>
---
rust/bindings/bindings_helper.h | 11 +
rust/helpers/gpu.c | 23 ++
rust/helpers/helpers.c | 1 +
rust/kernel/gpu/buddy.rs | 527 ++++++++++++++++++++++++++++++++
rust/kernel/gpu/mod.rs | 5 +
rust/kernel/lib.rs | 2 +
6 files changed, 569 insertions(+)
create mode 100644 rust/helpers/gpu.c
create mode 100644 rust/kernel/gpu/buddy.rs
create mode 100644 rust/kernel/gpu/mod.rs
diff --git a/rust/bindings/bindings_helper.h b/rust/bindings/bindings_helper.h
index 6b973589a546..86a7e304b7ab 100644
--- a/rust/bindings/bindings_helper.h
+++ b/rust/bindings/bindings_helper.h
@@ -29,6 +29,7 @@
#include <linux/hrtimer_types.h>
#include <linux/acpi.h>
+#include <linux/gpu_buddy.h>
#include <drm/drm_device.h>
#include <drm/drm_drv.h>
#include <drm/drm_file.h>
@@ -112,6 +113,16 @@ const gfp_t RUST_CONST_HELPER_XA_FLAGS_ALLOC = XA_FLAGS_ALLOC;
const gfp_t RUST_CONST_HELPER_XA_FLAGS_ALLOC1 = XA_FLAGS_ALLOC1;
const vm_flags_t RUST_CONST_HELPER_VM_MERGEABLE = VM_MERGEABLE;
+#if IS_ENABLED(CONFIG_GPU_BUDDY)
+const unsigned long RUST_CONST_HELPER_GPU_BUDDY_RANGE_ALLOCATION = GPU_BUDDY_RANGE_ALLOCATION;
+const unsigned long RUST_CONST_HELPER_GPU_BUDDY_TOPDOWN_ALLOCATION = GPU_BUDDY_TOPDOWN_ALLOCATION;
+const unsigned long RUST_CONST_HELPER_GPU_BUDDY_CONTIGUOUS_ALLOCATION =
+ GPU_BUDDY_CONTIGUOUS_ALLOCATION;
+const unsigned long RUST_CONST_HELPER_GPU_BUDDY_CLEAR_ALLOCATION = GPU_BUDDY_CLEAR_ALLOCATION;
+const unsigned long RUST_CONST_HELPER_GPU_BUDDY_CLEARED = GPU_BUDDY_CLEARED;
+const unsigned long RUST_CONST_HELPER_GPU_BUDDY_TRIM_DISABLE = GPU_BUDDY_TRIM_DISABLE;
+#endif
+
#if IS_ENABLED(CONFIG_ANDROID_BINDER_IPC_RUST)
#include "../../drivers/android/binder/rust_binder.h"
#include "../../drivers/android/binder/rust_binder_events.h"
diff --git a/rust/helpers/gpu.c b/rust/helpers/gpu.c
new file mode 100644
index 000000000000..415836b86abf
--- /dev/null
+++ b/rust/helpers/gpu.c
@@ -0,0 +1,23 @@
+// SPDX-License-Identifier: GPL-2.0
+
+#include <linux/gpu_buddy.h>
+
+#ifdef CONFIG_GPU_BUDDY
+
+u64 rust_helper_gpu_buddy_block_offset(const struct gpu_buddy_block *block)
+{
+ return gpu_buddy_block_offset(block);
+}
+
+unsigned int rust_helper_gpu_buddy_block_order(struct gpu_buddy_block *block)
+{
+ return gpu_buddy_block_order(block);
+}
+
+u64 rust_helper_gpu_buddy_block_size(struct gpu_buddy *mm,
+ struct gpu_buddy_block *block)
+{
+ return gpu_buddy_block_size(mm, block);
+}
+
+#endif /* CONFIG_GPU_BUDDY */
diff --git a/rust/helpers/helpers.c b/rust/helpers/helpers.c
index 634fa2386bbb..6db7c4c25afa 100644
--- a/rust/helpers/helpers.c
+++ b/rust/helpers/helpers.c
@@ -29,6 +29,7 @@
#include "err.c"
#include "irq.c"
#include "fs.c"
+#include "gpu.c"
#include "io.c"
#include "jump_label.c"
#include "kunit.c"
diff --git a/rust/kernel/gpu/buddy.rs b/rust/kernel/gpu/buddy.rs
new file mode 100644
index 000000000000..3e1a9617e6aa
--- /dev/null
+++ b/rust/kernel/gpu/buddy.rs
@@ -0,0 +1,527 @@
+// SPDX-License-Identifier: GPL-2.0
+
+//! GPU buddy allocator bindings.
+//!
+//! C header: [`include/linux/gpu_buddy.h`](srctree/include/linux/gpu_buddy.h)
+//!
+//! This module provides Rust abstractions over the Linux kernel's GPU buddy
+//! allocator, which implements a binary buddy memory allocator.
+//!
+//! The buddy allocator manages a contiguous address space and allocates blocks
+//! in power-of-two sizes, useful for GPU physical memory management.
+//!
+//! # Examples
+//!
+//! ```
+//! use kernel::{
+//! gpu::buddy::{BuddyFlags, GpuBuddy, GpuBuddyAllocParams, GpuBuddyParams},
+//! prelude::*,
+//! sizes::*, //
+//! };
+//!
+//! // Create a 1GB buddy allocator with 4KB minimum chunk size.
+//! let mut buddy = GpuBuddy::new(GpuBuddyParams {
+//! physical_memory_size_bytes: SZ_1G as u64,
+//! chunk_size_bytes: SZ_4K as u64,
+//! })?;
+//!
+//! // Verify initial state.
+//! assert_eq!(buddy.size(), SZ_1G as u64);
+//! assert_eq!(buddy.chunk_size(), SZ_4K as u64);
+//! let initial_free = buddy.free_memory_bytes();
+//!
+//! // Base allocation params - reused across tests with field overrides.
+//! let params = GpuBuddyAllocParams {
+//! start_range_address: 0,
+//! end_range_address: 0, // Entire range.
+//! size_bytes: SZ_16M as u64,
+//! min_block_size_bytes: SZ_16M as u64,
+//! buddy_flags: BuddyFlags::try_new(BuddyFlags::RANGE_ALLOCATION)?,
+//! };
+//!
+//! // Test top-down allocation (allocates from highest addresses).
+//! let topdown = buddy.alloc_blocks(GpuBuddyAllocParams {
+//! buddy_flags: BuddyFlags::try_new(BuddyFlags::TOPDOWN_ALLOCATION)?,
+//! ..params
+//! })?;
+//! assert_eq!(buddy.free_memory_bytes(), initial_free - SZ_16M as u64);
+//!
+//! for block in topdown.iter() {
+//! assert_eq!(block.offset(), (SZ_1G - SZ_16M) as u64);
+//! assert_eq!(block.order(), 12); // 2^12 pages
+//! assert_eq!(block.size(), SZ_16M as u64);
+//! }
+//! drop(topdown);
+//! assert_eq!(buddy.free_memory_bytes(), initial_free);
+//!
+//! // Allocate 16MB - should result in a single 16MB block at offset 0.
+//! let allocated = buddy.alloc_blocks(params)?;
+//! assert_eq!(buddy.free_memory_bytes(), initial_free - SZ_16M as u64);
+//!
+//! for block in allocated.iter() {
+//! assert_eq!(block.offset(), 0);
+//! assert_eq!(block.order(), 12); // 2^12 pages
+//! assert_eq!(block.size(), SZ_16M as u64);
+//! }
+//! drop(allocated);
+//! assert_eq!(buddy.free_memory_bytes(), initial_free);
+//!
+//! // Test non-contiguous allocation with fragmented memory.
+//! // Create fragmentation by allocating 4MB blocks at [0,4M) and [8M,12M).
+//! let params_4m = GpuBuddyAllocParams {
+//! end_range_address: SZ_4M as u64,
+//! size_bytes: SZ_4M as u64,
+//! min_block_size_bytes: SZ_4M as u64,
+//! ..params
+//! };
+//! let frag1 = buddy.alloc_blocks(params_4m)?;
+//! assert_eq!(buddy.free_memory_bytes(), initial_free - SZ_4M as u64);
+//!
+//! let frag2 = buddy.alloc_blocks(GpuBuddyAllocParams {
+//! start_range_address: SZ_8M as u64,
+//! end_range_address: (SZ_8M + SZ_4M) as u64,
+//! ..params_4m
+//! })?;
+//! assert_eq!(buddy.free_memory_bytes(), initial_free - SZ_8M as u64);
+//!
+//! // Allocate 8MB without CONTIGUOUS - should return 2 blocks from the holes.
+//! let fragmented = buddy.alloc_blocks(GpuBuddyAllocParams {
+//! end_range_address: SZ_16M as u64,
+//! size_bytes: SZ_8M as u64,
+//! min_block_size_bytes: SZ_4M as u64,
+//! ..params
+//! })?;
+//! assert_eq!(buddy.free_memory_bytes(), initial_free - (SZ_16M) as u64);
+//!
+//! let (mut count, mut total) = (0u32, 0u64);
+//! for block in fragmented.iter() {
+//! // The 8MB allocation should return 2 blocks, each 4MB.
+//! assert_eq!(block.size(), SZ_4M as u64);
+//! total += block.size();
+//! count += 1;
+//! }
+//! assert_eq!(total, SZ_8M as u64);
+//! assert_eq!(count, 2);
+//! drop(fragmented);
+//! drop(frag2);
+//! drop(frag1);
+//! assert_eq!(buddy.free_memory_bytes(), initial_free);
+//!
+//! // Test CONTIGUOUS failure when only fragmented space available.
+//! // Create a small buddy allocator with only 16MB of memory.
+//! let mut small = GpuBuddy::new(GpuBuddyParams {
+//! physical_memory_size_bytes: SZ_16M as u64,
+//! chunk_size_bytes: SZ_4K as u64,
+//! })?;
+//!
+//! // Allocate 4MB blocks at [0,4M) and [8M,12M) to create fragmented memory.
+//! let hole1 = small.alloc_blocks(params_4m)?;
+//! let hole2 = small.alloc_blocks(GpuBuddyAllocParams {
+//! start_range_address: SZ_8M as u64,
+//! end_range_address: (SZ_8M + SZ_4M) as u64,
+//! ..params_4m
+//! })?;
+//!
+//! // 8MB contiguous should fail - only two non-contiguous 4MB holes exist.
+//! let result = small.alloc_blocks(GpuBuddyAllocParams {
+//! size_bytes: SZ_8M as u64,
+//! min_block_size_bytes: SZ_4M as u64,
+//! buddy_flags: BuddyFlags::try_new(BuddyFlags::CONTIGUOUS_ALLOCATION)?,
+//! ..params
+//! });
+//! assert!(result.is_err());
+//! drop(hole2);
+//! drop(hole1);
+//!
+//! # Ok::<(), Error>(())
+//! ```
+
+use crate::{
+ bindings,
+ clist::CListHead,
+ clist_create,
+ error::to_result,
+ new_mutex,
+ prelude::*,
+ sync::{
+ lock::mutex::MutexGuard,
+ Arc,
+ Mutex, //
+ },
+ types::Opaque,
+};
+
+/// Flags for GPU buddy allocator operations.
+///
+/// These flags control the allocation behavior of the buddy allocator.
+#[derive(Clone, Copy, Default, PartialEq, Eq)]
+pub struct BuddyFlags(usize);
+
+impl BuddyFlags {
+ /// Range-based allocation from start to end addresses.
+ pub const RANGE_ALLOCATION: usize = bindings::GPU_BUDDY_RANGE_ALLOCATION;
+
+ /// Allocate from top of address space downward.
+ pub const TOPDOWN_ALLOCATION: usize = bindings::GPU_BUDDY_TOPDOWN_ALLOCATION;
+
+ /// Allocate physically contiguous blocks.
+ pub const CONTIGUOUS_ALLOCATION: usize = bindings::GPU_BUDDY_CONTIGUOUS_ALLOCATION;
+
+ /// Request allocation from the cleared (zeroed) memory. The zero'ing is not
+ /// done by the allocator, but by the caller before freeing old blocks.
+ pub const CLEAR_ALLOCATION: usize = bindings::GPU_BUDDY_CLEAR_ALLOCATION;
+
+ /// Disable trimming of partially used blocks.
+ pub const TRIM_DISABLE: usize = bindings::GPU_BUDDY_TRIM_DISABLE;
+
+ /// Mark blocks as cleared (zeroed) when freeing. When set during free,
+ /// indicates that the caller has already zeroed the memory.
+ pub const CLEARED: usize = bindings::GPU_BUDDY_CLEARED;
+
+ /// Create [`BuddyFlags`] from a raw value with validation.
+ ///
+ /// Use `|` operator to combine flags if needed, before calling this method.
+ pub fn try_new(flags: usize) -> Result<Self> {
+ // Flags must not exceed u32::MAX to satisfy the GPU buddy allocator C API.
+ if flags > u32::MAX as usize {
+ return Err(EINVAL);
+ }
+
+ // `TOPDOWN_ALLOCATION` only works without `RANGE_ALLOCATION`. When both are
+ // set, `TOPDOWN_ALLOCATION` is silently ignored by the allocator. Reject this.
+ if (flags & Self::RANGE_ALLOCATION) != 0 && (flags & Self::TOPDOWN_ALLOCATION) != 0 {
+ return Err(EINVAL);
+ }
+
+ Ok(Self(flags))
+ }
+
+ /// Get raw value of the flags.
+ pub(crate) fn as_raw(self) -> usize {
+ self.0
+ }
+}
+
+/// Parameters for creating a GPU buddy allocator.
+#[derive(Clone, Copy)]
+pub struct GpuBuddyParams {
+ /// Total physical memory size managed by the allocator in bytes.
+ pub physical_memory_size_bytes: u64,
+ /// Minimum allocation unit / chunk size in bytes, must be >= 4KB.
+ pub chunk_size_bytes: u64,
+}
+
+/// Parameters for allocating blocks from a GPU buddy allocator.
+#[derive(Clone, Copy)]
+pub struct GpuBuddyAllocParams {
+ /// Start of allocation range in bytes. Use 0 for beginning.
+ pub start_range_address: u64,
+ /// End of allocation range in bytes. Use 0 for entire range.
+ pub end_range_address: u64,
+ /// Total size to allocate in bytes.
+ pub size_bytes: u64,
+ /// Minimum block size for fragmented allocations in bytes.
+ pub min_block_size_bytes: u64,
+ /// Buddy allocator behavior flags.
+ pub buddy_flags: BuddyFlags,
+}
+
+/// Inner structure holding the actual buddy allocator.
+///
+/// # Synchronization
+///
+/// The C `gpu_buddy` API requires synchronization (see `include/linux/gpu_buddy.h`).
+/// The internal [`GpuBuddyGuard`] ensures that the lock is held for all
+/// allocator and free operations, preventing races between concurrent allocations
+/// and the freeing that occurs when [`AllocatedBlocks`] is dropped.
+///
+/// # Invariants
+///
+/// The inner [`Opaque`] contains a valid, initialized buddy allocator.
+#[pin_data(PinnedDrop)]
+struct GpuBuddyInner {
+ #[pin]
+ inner: Opaque<bindings::gpu_buddy>,
+ #[pin]
+ lock: Mutex<()>,
+}
+
+impl GpuBuddyInner {
+ /// Create a pin-initializer for the buddy allocator.
+ fn new(params: &GpuBuddyParams) -> impl PinInit<Self, Error> {
+ let size = params.physical_memory_size_bytes;
+ let chunk_size = params.chunk_size_bytes;
+
+ try_pin_init!(Self {
+ inner <- Opaque::try_ffi_init(|ptr| {
+ // SAFETY: ptr points to valid uninitialized memory from the pin-init
+ // infrastructure. gpu_buddy_init will initialize the structure.
+ to_result(unsafe { bindings::gpu_buddy_init(ptr, size, chunk_size) })
+ }),
+ lock <- new_mutex!(()),
+ })
+ }
+
+ /// Lock the mutex and return a guard for accessing the allocator.
+ fn lock(&self) -> GpuBuddyGuard<'_> {
+ GpuBuddyGuard {
+ inner: self,
+ _guard: self.lock.lock(),
+ }
+ }
+}
+
+#[pinned_drop]
+impl PinnedDrop for GpuBuddyInner {
+ fn drop(self: Pin<&mut Self>) {
+ let guard = self.lock();
+
+ // SAFETY: guard provides exclusive access to the allocator.
+ unsafe {
+ bindings::gpu_buddy_fini(guard.as_raw());
+ }
+ }
+}
+
+// SAFETY: [`GpuBuddyInner`] can be sent between threads.
+unsafe impl Send for GpuBuddyInner {}
+
+// SAFETY: [`GpuBuddyInner`] is `Sync` because the internal [`GpuBuddyGuard`]
+// serializes all access to the C allocator, preventing data races.
+unsafe impl Sync for GpuBuddyInner {}
+
+/// Guard that proves the lock is held, enabling access to the allocator.
+///
+/// # Invariants
+///
+/// The inner `_guard` holds the lock for the duration of this guard's lifetime.
+pub(crate) struct GpuBuddyGuard<'a> {
+ inner: &'a GpuBuddyInner,
+ _guard: MutexGuard<'a, ()>,
+}
+
+impl GpuBuddyGuard<'_> {
+ /// Get a raw pointer to the underlying C `gpu_buddy` structure.
+ fn as_raw(&self) -> *mut bindings::gpu_buddy {
+ self.inner.inner.get()
+ }
+}
+
+/// GPU buddy allocator instance.
+///
+/// This structure wraps the C `gpu_buddy` allocator using reference counting.
+/// The allocator is automatically cleaned up when all references are dropped.
+///
+/// # Invariants
+///
+/// The inner [`Arc`] points to a valid, initialized GPU buddy allocator.
+pub struct GpuBuddy(Arc<GpuBuddyInner>);
+
+impl GpuBuddy {
+ /// Create a new buddy allocator.
+ ///
+ /// Creates a buddy allocator that manages a contiguous address space of the given
+ /// size, with the specified minimum allocation unit (chunk_size must be at least 4KB).
+ pub fn new(params: GpuBuddyParams) -> Result<Self> {
+ Ok(Self(Arc::pin_init(
+ GpuBuddyInner::new(¶ms),
+ GFP_KERNEL,
+ )?))
+ }
+
+ /// Get the chunk size (minimum allocation unit).
+ pub fn chunk_size(&self) -> u64 {
+ let guard = self.0.lock();
+ // SAFETY: guard provides exclusive access to the allocator.
+ unsafe { (*guard.as_raw()).chunk_size }
+ }
+
+ /// Get the total managed size.
+ pub fn size(&self) -> u64 {
+ let guard = self.0.lock();
+ // SAFETY: guard provides exclusive access to the allocator.
+ unsafe { (*guard.as_raw()).size }
+ }
+
+ /// Get the available (free) memory in bytes.
+ pub fn free_memory_bytes(&self) -> u64 {
+ let guard = self.0.lock();
+ // SAFETY: guard provides exclusive access to the allocator.
+ unsafe { (*guard.as_raw()).avail }
+ }
+
+ /// Allocate blocks from the buddy allocator.
+ ///
+ /// Returns an [`Arc<AllocatedBlocks>`] structure that owns the allocated blocks
+ /// and automatically frees them when all references are dropped.
+ pub fn alloc_blocks(&mut self, params: GpuBuddyAllocParams) -> Result<Arc<AllocatedBlocks>> {
+ let buddy_arc = Arc::clone(&self.0);
+
+ // Create pin-initializer that initializes list and allocates blocks.
+ let init = try_pin_init!(AllocatedBlocks {
+ list <- CListHead::try_init(|list| {
+ // Lock while allocating to serialize with concurrent frees.
+ let guard = buddy_arc.lock();
+
+ // SAFETY: guard provides exclusive access, list is initialized.
+ to_result(unsafe {
+ bindings::gpu_buddy_alloc_blocks(
+ guard.as_raw(),
+ params.start_range_address,
+ params.end_range_address,
+ params.size_bytes,
+ params.min_block_size_bytes,
+ list.as_raw(),
+ params.buddy_flags.as_raw(),
+ )
+ })
+ }),
+ buddy: Arc::clone(&buddy_arc),
+ flags: params.buddy_flags,
+ });
+
+ Arc::pin_init(init, GFP_KERNEL)
+ }
+}
+
+/// Allocated blocks from the buddy allocator with automatic cleanup.
+///
+/// This structure owns a list of allocated blocks and ensures they are
+/// automatically freed when dropped. Use `iter()` to iterate over all
+/// allocated [`Block`] structures.
+///
+/// # Invariants
+///
+/// - `list` is an initialized, valid list head containing allocated blocks.
+/// - `buddy` references a valid [`GpuBuddyInner`].
+#[pin_data(PinnedDrop)]
+pub struct AllocatedBlocks {
+ #[pin]
+ list: CListHead,
+ buddy: Arc<GpuBuddyInner>,
+ flags: BuddyFlags,
+}
+
+impl AllocatedBlocks {
+ /// Check if the block list is empty.
+ pub fn is_empty(&self) -> bool {
+ // An empty list head points to itself.
+ !self.list.is_linked()
+ }
+
+ /// Iterate over allocated blocks.
+ ///
+ /// Returns an iterator yielding [`AllocatedBlock`] references. The blocks
+ /// are only valid for the duration of the borrow of `self`.
+ pub fn iter(&self) -> impl Iterator<Item = AllocatedBlock<'_>> + '_ {
+ // SAFETY: list contains gpu_buddy_block items linked via __bindgen_anon_1.link.
+ let clist = unsafe {
+ clist_create!(
+ self.list.as_raw(),
+ Block,
+ bindings::gpu_buddy_block,
+ __bindgen_anon_1.link
+ )
+ };
+
+ clist
+ .iter()
+ .map(|block| AllocatedBlock { block, alloc: self })
+ }
+}
+
+#[pinned_drop]
+impl PinnedDrop for AllocatedBlocks {
+ fn drop(self: Pin<&mut Self>) {
+ let guard = self.buddy.lock();
+
+ // SAFETY:
+ // - list is valid per the type's invariants.
+ // - guard provides exclusive access to the allocator.
+ // CAST: BuddyFlags were validated to fit in u32 at construction.
+ unsafe {
+ bindings::gpu_buddy_free_list(
+ guard.as_raw(),
+ self.list.as_raw(),
+ self.flags.as_raw() as u32,
+ );
+ }
+ }
+}
+
+/// A GPU buddy block.
+///
+/// Transparent wrapper over C `gpu_buddy_block` structure. This type is returned
+/// as references from [`CListIter`] during iteration over [`AllocatedBlocks`].
+///
+/// # Invariants
+///
+/// The inner [`Opaque`] contains a valid, allocated `gpu_buddy_block`.
+#[repr(transparent)]
+pub struct Block(Opaque<bindings::gpu_buddy_block>);
+
+impl Block {
+ /// Get a raw pointer to the underlying C block.
+ fn as_raw(&self) -> *mut bindings::gpu_buddy_block {
+ self.0.get()
+ }
+
+ /// Get the block's offset in the address space.
+ pub(crate) fn offset(&self) -> u64 {
+ // SAFETY: self.as_raw() is valid per the type's invariants.
+ unsafe { bindings::gpu_buddy_block_offset(self.as_raw()) }
+ }
+
+ /// Get the block order.
+ pub(crate) fn order(&self) -> u32 {
+ // SAFETY: self.as_raw() is valid per the type's invariants.
+ unsafe { bindings::gpu_buddy_block_order(self.as_raw()) }
+ }
+}
+
+// SAFETY: `Block` is a transparent wrapper over `gpu_buddy_block` which is not
+// modified after allocation. It can be safely sent between threads.
+unsafe impl Send for Block {}
+
+// SAFETY: `Block` is a transparent wrapper over `gpu_buddy_block` which is not
+// modified after allocation. It can be safely shared among threads.
+unsafe impl Sync for Block {}
+
+/// An allocated block with access to the buddy allocator.
+///
+/// This wrapper holds references to the block and the allocation list,
+/// enabling the `size()` method which requires the allocator.
+///
+/// # Invariants
+///
+/// - `block` is a valid reference to an allocated [`Block`].
+/// - `alloc` is a valid reference to the [`AllocatedBlocks`] that owns this block.
+pub struct AllocatedBlock<'a> {
+ block: &'a Block,
+ alloc: &'a AllocatedBlocks,
+}
+
+impl AllocatedBlock<'_> {
+ /// Get the block's offset in the address space.
+ pub fn offset(&self) -> u64 {
+ self.block.offset()
+ }
+
+ /// Get the block order (size = chunk_size << order).
+ pub fn order(&self) -> u32 {
+ self.block.order()
+ }
+
+ /// Get the block's size in bytes.
+ pub fn size(&self) -> u64 {
+ // Acquire guard to calculate block size since it is calculated from
+ // the chunk size, which requires access to the allocator. While the chunk size
+ // cannot change after initialization, we still need the guard to gain access
+ // to the allocator's pointer.
+ let guard = self.alloc.buddy.lock();
+ // SAFETY:
+ // - Guard provides exclusive access to the allocator.
+ // - `block.as_raw()` is a valid pointer per the type's invariants.
+ unsafe { bindings::gpu_buddy_block_size(guard.as_raw(), self.block.as_raw()) }
+ }
+}
diff --git a/rust/kernel/gpu/mod.rs b/rust/kernel/gpu/mod.rs
new file mode 100644
index 000000000000..8f25e6367edc
--- /dev/null
+++ b/rust/kernel/gpu/mod.rs
@@ -0,0 +1,5 @@
+// SPDX-License-Identifier: GPL-2.0
+
+//! GPU subsystem abstractions.
+
+pub mod buddy;
diff --git a/rust/kernel/lib.rs b/rust/kernel/lib.rs
index b69cc5ed3b59..850cbbf4c3e7 100644
--- a/rust/kernel/lib.rs
+++ b/rust/kernel/lib.rs
@@ -95,6 +95,8 @@
pub mod firmware;
pub mod fmt;
pub mod fs;
+#[cfg(CONFIG_GPU_BUDDY)]
+pub mod gpu;
pub mod id_pool;
pub mod init;
pub mod io;
--
2.34.1
^ permalink raw reply related
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox