00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef _GEL_DISPLAY_RAW_H
00023 #define _GEL_DISPLAY_RAW_H
00024
00025 #include <sys/param.h>
00026 #include <stddef.h>
00027
00028 #ifdef __cplusplus
00029 extern "C" {
00030 #endif
00031
00037
00038 extern const gdm_mask _gdm_bitmask[];
00039
00040 extern const gdm_mask _gdm_start_mask[];
00041
00042 extern const gdm_mask _gdm_end_mask[];
00043
00044 extern const gdm_mask _gdm_ibitmask[];
00045
00046
00047 extern void _gdm_plot (struct gdm_display* dp, unsigned short x,
00048 unsigned short y);
00049
00050 extern void _gdm_fill_rectangle (struct gdm_display* dp, unsigned short x,
00051 unsigned short y, unsigned short width,
00052 unsigned short height);
00053
00054 extern void _gdm_touch_line (gdm_line* l, unsigned short x);
00055
00056 extern inline void _gdm_touch_line (gdm_line* l, unsigned short x)
00057 {
00058 l->touched |= _gdm_bitmask[x >> 4];
00059 }
00060
00061 extern void _gdm_do_refresh (struct gdm_display* dp, struct gdm_line* l,
00062 unsigned short x_first, unsigned short x_last);
00063
00064 extern int _gdm_refresh_line (gdm_display* dp, gdm_line* l, gdm_line* screen);
00065
00066
00067 extern gdm_line* _gdm_get_raw_line (gdm_display* dp, unsigned short y);
00068
00069 extern inline gdm_line* _gdm_get_raw_line (gdm_display* dp, unsigned short y)
00070 {
00071 return dp->lines[y >> 3];
00072 }
00073
00083 extern void _gdm_raw_plot (gdm_display* dp, unsigned char* data,
00084 unsigned char mask);
00085
00086 extern void inline _gdm_raw_plot (gdm_display* dp, unsigned char* data,
00087 unsigned char mask)
00088 {
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099 dp->mask = mask;
00100 __asm__ __volatile__ ("ldab 0,%0 ; Get data[0]\n"
00101 "\torab %a2,%1 ; Or operation\n"
00102 "\tandb %a3,%1 ; restrict to or_mode\n"
00103 "\tldaa 0,%0\n"
00104 "\teora %a2,%1 ; Xor operation\n"
00105 "\tanda %a4,%1 ; restrict to xor_mode\n"
00106 "\taba ; Merge xor and or results\n"
00107 "\tldab %a2,%1\n"
00108 "\tcomb\n"
00109 "\tandb 0,%0 ; And operation\n"
00110 "\tandb %a5,%1\n"
00111 "\taba ; Merge with others\n"
00112 "\tstaa 0,%0 ; Save in data[0]"
00113 : : "A"(data), "A"(dp),
00114 "i"(offsetof(gdm_display, mask)),
00115 "i"(offsetof(gdm_display, or_mask)),
00116 "i"(offsetof(gdm_display, xor_mask)),
00117 "i"(offsetof(gdm_display, and_mask))
00118 : "d");
00119 }
00120
00121
00122 #ifdef __cplusplus
00123 };
00124 #endif
00125 #endif