Haron foo
/
Q_nolkiaJapanese_3_tryBaikaku
MaryOB
Moled.cpp@0:4ef525e32ebc, 2011-07-18 (annotated)
- Committer:
- s_s_s
- Date:
- Mon Jul 18 01:30:20 2011 +0000
- Revision:
- 0:4ef525e32ebc
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
s_s_s | 0:4ef525e32ebc | 1 | /* mbed Nokia LCD Library |
s_s_s | 0:4ef525e32ebc | 2 | * Copyright (c) 2007-2010, sford |
s_s_s | 0:4ef525e32ebc | 3 | */ |
s_s_s | 0:4ef525e32ebc | 4 | |
s_s_s | 0:4ef525e32ebc | 5 | #include "Moled.h" |
s_s_s | 0:4ef525e32ebc | 6 | #include "small_font.h" |
s_s_s | 0:4ef525e32ebc | 7 | #include "mbed.h" |
s_s_s | 0:4ef525e32ebc | 8 | |
s_s_s | 0:4ef525e32ebc | 9 | #define Moled_ROWS 15 |
s_s_s | 0:4ef525e32ebc | 10 | #define Moled_COLS 16 |
s_s_s | 0:4ef525e32ebc | 11 | #define Moled_WIDTH 128 |
s_s_s | 0:4ef525e32ebc | 12 | #define Moled_HEIGHT 128 |
s_s_s | 0:4ef525e32ebc | 13 | #define Moled_FREQUENCY 20000000 |
s_s_s | 0:4ef525e32ebc | 14 | |
s_s_s | 0:4ef525e32ebc | 15 | #define countof(x) ( sizeof(x) / sizeof(x[0]) ) //for Japanese |
s_s_s | 0:4ef525e32ebc | 16 | |
s_s_s | 0:4ef525e32ebc | 17 | /** Constants for power() function */ |
s_s_s | 0:4ef525e32ebc | 18 | enum { |
s_s_s | 0:4ef525e32ebc | 19 | OFF = 0, /**< : to turning-OFF */ |
s_s_s | 0:4ef525e32ebc | 20 | ON /**< : to turning-ON */ |
s_s_s | 0:4ef525e32ebc | 21 | }; |
s_s_s | 0:4ef525e32ebc | 22 | |
s_s_s | 0:4ef525e32ebc | 23 | |
s_s_s | 0:4ef525e32ebc | 24 | bool kstate = false; //for Japnaese |
s_s_s | 0:4ef525e32ebc | 25 | unsigned int kbuf; //for Japanese |
s_s_s | 0:4ef525e32ebc | 26 | |
s_s_s | 0:4ef525e32ebc | 27 | Moled::Moled(PinName mosi, PinName sclk, PinName cs, PinName rst, PinName power) |
s_s_s | 0:4ef525e32ebc | 28 | : _spi(mosi, NC, sclk) |
s_s_s | 0:4ef525e32ebc | 29 | , _rst(rst) |
s_s_s | 0:4ef525e32ebc | 30 | , _cs(cs) |
s_s_s | 0:4ef525e32ebc | 31 | , _power(power){ |
s_s_s | 0:4ef525e32ebc | 32 | //power( ON ); |
s_s_s | 0:4ef525e32ebc | 33 | _power=1; |
s_s_s | 0:4ef525e32ebc | 34 | _row = 0; |
s_s_s | 0:4ef525e32ebc | 35 | _column = 0; |
s_s_s | 0:4ef525e32ebc | 36 | _foreground = 0x00FFFFFF; |
s_s_s | 0:4ef525e32ebc | 37 | _background = 0x00000000; |
s_s_s | 0:4ef525e32ebc | 38 | _yokosize = 1; //1:8x8 2:bai x bai |
s_s_s | 0:4ef525e32ebc | 39 | _tatesize = 1;// |
s_s_s | 0:4ef525e32ebc | 40 | reset(); |
s_s_s | 0:4ef525e32ebc | 41 | } |
s_s_s | 0:4ef525e32ebc | 42 | |
s_s_s | 0:4ef525e32ebc | 43 | void Moled::reset() { |
s_s_s | 0:4ef525e32ebc | 44 | |
s_s_s | 0:4ef525e32ebc | 45 | #define GAMMA_LUT_SIZE 63 |
s_s_s | 0:4ef525e32ebc | 46 | unsigned char gamma_LUT[ GAMMA_LUT_SIZE ]; |
s_s_s | 0:4ef525e32ebc | 47 | |
s_s_s | 0:4ef525e32ebc | 48 | for ( int i = 0; i < GAMMA_LUT_SIZE; i++ ) |
s_s_s | 0:4ef525e32ebc | 49 | gamma_LUT[ i ] = (unsigned char)(powf( ((float)i / 62.0), (1.0 / 0.58) ) * 178.0 + 2.0); |
s_s_s | 0:4ef525e32ebc | 50 | |
s_s_s | 0:4ef525e32ebc | 51 | // setup the SPI interface and bring display out of reset |
s_s_s | 0:4ef525e32ebc | 52 | |
s_s_s | 0:4ef525e32ebc | 53 | _cs = 1; |
s_s_s | 0:4ef525e32ebc | 54 | _rst = 0; |
s_s_s | 0:4ef525e32ebc | 55 | _spi.format(9); wait_ms(10); |
s_s_s | 0:4ef525e32ebc | 56 | _spi.frequency(Moled_FREQUENCY); wait_ms(10); |
s_s_s | 0:4ef525e32ebc | 57 | _rst = 1; wait_ms(10); |
s_s_s | 0:4ef525e32ebc | 58 | |
s_s_s | 0:4ef525e32ebc | 59 | _cs = 0; |
s_s_s | 0:4ef525e32ebc | 60 | |
s_s_s | 0:4ef525e32ebc | 61 | //initalize |
s_s_s | 0:4ef525e32ebc | 62 | _power=0; |
s_s_s | 0:4ef525e32ebc | 63 | command( SET_DISPLAY_MODE_ALL_OFF ); |
s_s_s | 0:4ef525e32ebc | 64 | command( SET_COMMAND_LOCK ); |
s_s_s | 0:4ef525e32ebc | 65 | data( 0x12 ); |
s_s_s | 0:4ef525e32ebc | 66 | |
s_s_s | 0:4ef525e32ebc | 67 | command( SET_COMMAND_LOCK ); |
s_s_s | 0:4ef525e32ebc | 68 | data( 0xb1 ); |
s_s_s | 0:4ef525e32ebc | 69 | |
s_s_s | 0:4ef525e32ebc | 70 | command( SET_SLEEP_MODE_ON ); |
s_s_s | 0:4ef525e32ebc | 71 | |
s_s_s | 0:4ef525e32ebc | 72 | command( FRONT_CLOCK_DRIVER_OSC_FREQ ); |
s_s_s | 0:4ef525e32ebc | 73 | data( 0xF1 ); |
s_s_s | 0:4ef525e32ebc | 74 | |
s_s_s | 0:4ef525e32ebc | 75 | command( SET_MUX_RATIO ); |
s_s_s | 0:4ef525e32ebc | 76 | data( 0x7F ); |
s_s_s | 0:4ef525e32ebc | 77 | |
s_s_s | 0:4ef525e32ebc | 78 | command( SET_DISPAY_OFFSET ); |
s_s_s | 0:4ef525e32ebc | 79 | data( 0x00 ); |
s_s_s | 0:4ef525e32ebc | 80 | |
s_s_s | 0:4ef525e32ebc | 81 | command( SET_DISPAY_START_LINE ); |
s_s_s | 0:4ef525e32ebc | 82 | data( 0x00 ); |
s_s_s | 0:4ef525e32ebc | 83 | |
s_s_s | 0:4ef525e32ebc | 84 | command( SET_REMAP_COLOR_DEPTH ); |
s_s_s | 0:4ef525e32ebc | 85 | data( 0x74 ); |
s_s_s | 0:4ef525e32ebc | 86 | |
s_s_s | 0:4ef525e32ebc | 87 | command( SET_GPIO ); |
s_s_s | 0:4ef525e32ebc | 88 | data( 0x00); |
s_s_s | 0:4ef525e32ebc | 89 | |
s_s_s | 0:4ef525e32ebc | 90 | command( FUNCTION_SELECTION ); |
s_s_s | 0:4ef525e32ebc | 91 | data( 0x01 ); |
s_s_s | 0:4ef525e32ebc | 92 | |
s_s_s | 0:4ef525e32ebc | 93 | command( SET_SEGMENT_LOW_VOLTAGE ); |
s_s_s | 0:4ef525e32ebc | 94 | data( 0xA0 ); |
s_s_s | 0:4ef525e32ebc | 95 | data( 0xB5 ); |
s_s_s | 0:4ef525e32ebc | 96 | data( 0x55 ); |
s_s_s | 0:4ef525e32ebc | 97 | |
s_s_s | 0:4ef525e32ebc | 98 | command( SET_CONTRAST_CURRENT_FOR_COLOR_ABC ); |
s_s_s | 0:4ef525e32ebc | 99 | data( 0xC8 ); |
s_s_s | 0:4ef525e32ebc | 100 | data( 0x80 ); |
s_s_s | 0:4ef525e32ebc | 101 | data( 0xC8 ); |
s_s_s | 0:4ef525e32ebc | 102 | |
s_s_s | 0:4ef525e32ebc | 103 | command( MASTER_CONTRAST_CURRENT_CONTROL ); |
s_s_s | 0:4ef525e32ebc | 104 | data( 0x0F ); |
s_s_s | 0:4ef525e32ebc | 105 | |
s_s_s | 0:4ef525e32ebc | 106 | command( LOOKUP_TABLE_FOR_GRAYSCALE_PULSE_WIDTH ); |
s_s_s | 0:4ef525e32ebc | 107 | for ( int i = 0; i < GAMMA_LUT_SIZE; i++ ) |
s_s_s | 0:4ef525e32ebc | 108 | data( gamma_LUT[ i ] ); |
s_s_s | 0:4ef525e32ebc | 109 | |
s_s_s | 0:4ef525e32ebc | 110 | command( SET_RESET_PRECHARGE_PERIOD ); |
s_s_s | 0:4ef525e32ebc | 111 | data( 0x32 ); |
s_s_s | 0:4ef525e32ebc | 112 | |
s_s_s | 0:4ef525e32ebc | 113 | command( ENHANCE_DRIVING_SCHEME_CAPABILITY ); |
s_s_s | 0:4ef525e32ebc | 114 | data( 0x04 ); |
s_s_s | 0:4ef525e32ebc | 115 | data( 0x00 ); |
s_s_s | 0:4ef525e32ebc | 116 | data( 0x00 ); |
s_s_s | 0:4ef525e32ebc | 117 | |
s_s_s | 0:4ef525e32ebc | 118 | command( SET_PRECHARGE_VOLTAGE ); |
s_s_s | 0:4ef525e32ebc | 119 | data( 0x17 ); |
s_s_s | 0:4ef525e32ebc | 120 | |
s_s_s | 0:4ef525e32ebc | 121 | command( SET_SECOND_PRECHARGE_VOLTAGE ); |
s_s_s | 0:4ef525e32ebc | 122 | data( 0x01 ); |
s_s_s | 0:4ef525e32ebc | 123 | |
s_s_s | 0:4ef525e32ebc | 124 | command( SET_VCOMH_VOLTAGE ); |
s_s_s | 0:4ef525e32ebc | 125 | data( 0x05 ); |
s_s_s | 0:4ef525e32ebc | 126 | |
s_s_s | 0:4ef525e32ebc | 127 | command( SET_DISPLAY_MODE_RESET ); |
s_s_s | 0:4ef525e32ebc | 128 | |
s_s_s | 0:4ef525e32ebc | 129 | #if 0 |
s_s_s | 0:4ef525e32ebc | 130 | command( SET_COLUMN_ADDRESS ); |
s_s_s | 0:4ef525e32ebc | 131 | data( 0x00 ); |
s_s_s | 0:4ef525e32ebc | 132 | data( 0x7F ); |
s_s_s | 0:4ef525e32ebc | 133 | |
s_s_s | 0:4ef525e32ebc | 134 | command( SET_ROW_ADDRESS ); |
s_s_s | 0:4ef525e32ebc | 135 | data( 0x00 ); |
s_s_s | 0:4ef525e32ebc | 136 | data( 0x7F); |
s_s_s | 0:4ef525e32ebc | 137 | |
s_s_s | 0:4ef525e32ebc | 138 | command( WRITE_RAM_COMMAND ); |
s_s_s | 0:4ef525e32ebc | 139 | for ( int i = 0; i < WIDTH * HEIGHT; i++ ) |
s_s_s | 0:4ef525e32ebc | 140 | data( 0x00 ); |
s_s_s | 0:4ef525e32ebc | 141 | #endif |
s_s_s | 0:4ef525e32ebc | 142 | //cls(); |
s_s_s | 0:4ef525e32ebc | 143 | _power=1; |
s_s_s | 0:4ef525e32ebc | 144 | wait_ms( 200 ); |
s_s_s | 0:4ef525e32ebc | 145 | command( SET_SLEEP_MODE_OFF ); |
s_s_s | 0:4ef525e32ebc | 146 | |
s_s_s | 0:4ef525e32ebc | 147 | // _cs = 1; |
s_s_s | 0:4ef525e32ebc | 148 | |
s_s_s | 0:4ef525e32ebc | 149 | } // void Moled::reset() |
s_s_s | 0:4ef525e32ebc | 150 | |
s_s_s | 0:4ef525e32ebc | 151 | |
s_s_s | 0:4ef525e32ebc | 152 | void Moled::command(int value) { |
s_s_s | 0:4ef525e32ebc | 153 | _spi.write(value & 0xFF); |
s_s_s | 0:4ef525e32ebc | 154 | } |
s_s_s | 0:4ef525e32ebc | 155 | |
s_s_s | 0:4ef525e32ebc | 156 | void Moled::data(int value) { |
s_s_s | 0:4ef525e32ebc | 157 | _spi.write(value | 0x100); |
s_s_s | 0:4ef525e32ebc | 158 | } |
s_s_s | 0:4ef525e32ebc | 159 | |
s_s_s | 0:4ef525e32ebc | 160 | void Moled::_window( int x, int y, int width, int height ) { |
s_s_s | 0:4ef525e32ebc | 161 | int x1 = x + 0; |
s_s_s | 0:4ef525e32ebc | 162 | int y1 = y + 0; |
s_s_s | 0:4ef525e32ebc | 163 | int x2 = x1 + width - 1; |
s_s_s | 0:4ef525e32ebc | 164 | int y2 = y1 + height - 1; |
s_s_s | 0:4ef525e32ebc | 165 | |
s_s_s | 0:4ef525e32ebc | 166 | command( SET_COLUMN_ADDRESS ); |
s_s_s | 0:4ef525e32ebc | 167 | data( x1 ); |
s_s_s | 0:4ef525e32ebc | 168 | data( x2 ); |
s_s_s | 0:4ef525e32ebc | 169 | command( SET_ROW_ADDRESS ); |
s_s_s | 0:4ef525e32ebc | 170 | data( y1 ); |
s_s_s | 0:4ef525e32ebc | 171 | data( y2 ); |
s_s_s | 0:4ef525e32ebc | 172 | command( WRITE_RAM_COMMAND ); |
s_s_s | 0:4ef525e32ebc | 173 | } |
s_s_s | 0:4ef525e32ebc | 174 | void Moled::window( int x, int y, int width, int height ) { |
s_s_s | 0:4ef525e32ebc | 175 | _cs = 0; |
s_s_s | 0:4ef525e32ebc | 176 | _window( x, y, width, height ); |
s_s_s | 0:4ef525e32ebc | 177 | _cs = 1; |
s_s_s | 0:4ef525e32ebc | 178 | } |
s_s_s | 0:4ef525e32ebc | 179 | |
s_s_s | 0:4ef525e32ebc | 180 | void Moled::_putp(int colour) { |
s_s_s | 0:4ef525e32ebc | 181 | |
s_s_s | 0:4ef525e32ebc | 182 | int cnv = 0; |
s_s_s | 0:4ef525e32ebc | 183 | |
s_s_s | 0:4ef525e32ebc | 184 | cnv = (colour >> 8) & 0xf800; |
s_s_s | 0:4ef525e32ebc | 185 | cnv |= (colour >> 5) & 0x07e0; |
s_s_s | 0:4ef525e32ebc | 186 | cnv |= (colour >> 3) & 0x001f; |
s_s_s | 0:4ef525e32ebc | 187 | |
s_s_s | 0:4ef525e32ebc | 188 | data( cnv >> 8); |
s_s_s | 0:4ef525e32ebc | 189 | data( cnv ); |
s_s_s | 0:4ef525e32ebc | 190 | } |
s_s_s | 0:4ef525e32ebc | 191 | |
s_s_s | 0:4ef525e32ebc | 192 | |
s_s_s | 0:4ef525e32ebc | 193 | void Moled::locate(int column, int row) { |
s_s_s | 0:4ef525e32ebc | 194 | _column = column; |
s_s_s | 0:4ef525e32ebc | 195 | _row = row; |
s_s_s | 0:4ef525e32ebc | 196 | } |
s_s_s | 0:4ef525e32ebc | 197 | void Moled::fontsize(int yoko,int tate){ |
s_s_s | 0:4ef525e32ebc | 198 | _yokosize=yoko; |
s_s_s | 0:4ef525e32ebc | 199 | _tatesize=tate; |
s_s_s | 0:4ef525e32ebc | 200 | } |
s_s_s | 0:4ef525e32ebc | 201 | |
s_s_s | 0:4ef525e32ebc | 202 | void Moled::newline() { |
s_s_s | 0:4ef525e32ebc | 203 | _column = 0; |
s_s_s | 0:4ef525e32ebc | 204 | _row++; |
s_s_s | 0:4ef525e32ebc | 205 | if (_row >= Moled_ROWS) { |
s_s_s | 0:4ef525e32ebc | 206 | _row = 0; |
s_s_s | 0:4ef525e32ebc | 207 | } |
s_s_s | 0:4ef525e32ebc | 208 | } |
s_s_s | 0:4ef525e32ebc | 209 | |
s_s_s | 0:4ef525e32ebc | 210 | unsigned int Moled::findface(unsigned short c) { |
s_s_s | 0:4ef525e32ebc | 211 | unsigned int p = 0; |
s_s_s | 0:4ef525e32ebc | 212 | int i, sum; |
s_s_s | 0:4ef525e32ebc | 213 | for (sum = i = 0; i < countof(font8table); i++) { |
s_s_s | 0:4ef525e32ebc | 214 | if (font8table[i].start <= c && c <= font8table[i].end) { |
s_s_s | 0:4ef525e32ebc | 215 | p = (sum + c - font8table[i].start); |
s_s_s | 0:4ef525e32ebc | 216 | break; |
s_s_s | 0:4ef525e32ebc | 217 | } |
s_s_s | 0:4ef525e32ebc | 218 | sum += font8table[i].end - font8table[i].start + 1; |
s_s_s | 0:4ef525e32ebc | 219 | } |
s_s_s | 0:4ef525e32ebc | 220 | return p; |
s_s_s | 0:4ef525e32ebc | 221 | } |
s_s_s | 0:4ef525e32ebc | 222 | |
s_s_s | 0:4ef525e32ebc | 223 | int Moled::_putc(int value) { |
s_s_s | 0:4ef525e32ebc | 224 | int x = _column * 8 ; // FIXME: Char sizes |
s_s_s | 0:4ef525e32ebc | 225 | int y = _row * 8; |
s_s_s | 0:4ef525e32ebc | 226 | |
s_s_s | 0:4ef525e32ebc | 227 | if(value == '\n') { |
s_s_s | 0:4ef525e32ebc | 228 | newline(); |
s_s_s | 0:4ef525e32ebc | 229 | } else if (kstate) { // 2nd byte of shift-jis |
s_s_s | 0:4ef525e32ebc | 230 | kstate = false; |
s_s_s | 0:4ef525e32ebc | 231 | int p = findface(kbuf << 8 | value); |
s_s_s | 0:4ef525e32ebc | 232 | bitblit(x + 1, y + 1, 8,8, (char*)&(FontLookup[p][0])); |
s_s_s | 0:4ef525e32ebc | 233 | |
s_s_s | 0:4ef525e32ebc | 234 | //printf("%x %x",( kbuf << 8 | value),p); //for debug |
s_s_s | 0:4ef525e32ebc | 235 | _column++; |
s_s_s | 0:4ef525e32ebc | 236 | if (_column >= Moled_COLS) { |
s_s_s | 0:4ef525e32ebc | 237 | _row++; |
s_s_s | 0:4ef525e32ebc | 238 | _column = 0; |
s_s_s | 0:4ef525e32ebc | 239 | } |
s_s_s | 0:4ef525e32ebc | 240 | if (_row >= Moled_ROWS) { |
s_s_s | 0:4ef525e32ebc | 241 | _row = 0; |
s_s_s | 0:4ef525e32ebc | 242 | } |
s_s_s | 0:4ef525e32ebc | 243 | } else if ((0x81 <= value && value <= 0x9f) || (0xe0 <= value && value <= 0xfc)) { // 1st byte of shift-jis |
s_s_s | 0:4ef525e32ebc | 244 | kstate = true; |
s_s_s | 0:4ef525e32ebc | 245 | kbuf = value; |
s_s_s | 0:4ef525e32ebc | 246 | } else { |
s_s_s | 0:4ef525e32ebc | 247 | bitblit(x + 1, y + 1, 8, 8, (char*)&(FontLookup_ABC[value-32][0])); |
s_s_s | 0:4ef525e32ebc | 248 | _column++; |
s_s_s | 0:4ef525e32ebc | 249 | if (_column >= Moled_COLS) { |
s_s_s | 0:4ef525e32ebc | 250 | _row++; |
s_s_s | 0:4ef525e32ebc | 251 | _column = 0; |
s_s_s | 0:4ef525e32ebc | 252 | } |
s_s_s | 0:4ef525e32ebc | 253 | if (_row >= Moled_ROWS) { |
s_s_s | 0:4ef525e32ebc | 254 | _row = 0; |
s_s_s | 0:4ef525e32ebc | 255 | } |
s_s_s | 0:4ef525e32ebc | 256 | } |
s_s_s | 0:4ef525e32ebc | 257 | |
s_s_s | 0:4ef525e32ebc | 258 | return value; |
s_s_s | 0:4ef525e32ebc | 259 | } |
s_s_s | 0:4ef525e32ebc | 260 | |
s_s_s | 0:4ef525e32ebc | 261 | void Moled::cls() { |
s_s_s | 0:4ef525e32ebc | 262 | fill(0, 0, Moled_WIDTH, Moled_HEIGHT, _background); |
s_s_s | 0:4ef525e32ebc | 263 | _row = 0; |
s_s_s | 0:4ef525e32ebc | 264 | _column = 0; |
s_s_s | 0:4ef525e32ebc | 265 | } |
s_s_s | 0:4ef525e32ebc | 266 | |
s_s_s | 0:4ef525e32ebc | 267 | void Moled::putp(int colour) { |
s_s_s | 0:4ef525e32ebc | 268 | _cs = 0; |
s_s_s | 0:4ef525e32ebc | 269 | _putp(colour); |
s_s_s | 0:4ef525e32ebc | 270 | _cs = 1; |
s_s_s | 0:4ef525e32ebc | 271 | } |
s_s_s | 0:4ef525e32ebc | 272 | |
s_s_s | 0:4ef525e32ebc | 273 | void Moled::pixel(int x, int y, int colour) { |
s_s_s | 0:4ef525e32ebc | 274 | _cs = 0; |
s_s_s | 0:4ef525e32ebc | 275 | _window(x, y, 1, 1); |
s_s_s | 0:4ef525e32ebc | 276 | _putp(colour); |
s_s_s | 0:4ef525e32ebc | 277 | _cs = 1; |
s_s_s | 0:4ef525e32ebc | 278 | } |
s_s_s | 0:4ef525e32ebc | 279 | |
s_s_s | 0:4ef525e32ebc | 280 | void Moled::fill(int x, int y, int width, int height, int colour) { |
s_s_s | 0:4ef525e32ebc | 281 | _cs = 0; |
s_s_s | 0:4ef525e32ebc | 282 | _window(x, y, width, height); |
s_s_s | 0:4ef525e32ebc | 283 | for (int i=0; i<width*height; i++) { |
s_s_s | 0:4ef525e32ebc | 284 | _putp(colour); |
s_s_s | 0:4ef525e32ebc | 285 | } |
s_s_s | 0:4ef525e32ebc | 286 | _window(0, 0, Moled_WIDTH, Moled_HEIGHT); |
s_s_s | 0:4ef525e32ebc | 287 | _cs = 1; |
s_s_s | 0:4ef525e32ebc | 288 | } |
s_s_s | 0:4ef525e32ebc | 289 | |
s_s_s | 0:4ef525e32ebc | 290 | void Moled::blit(int x, int y, int width, int height, const int* colour) { |
s_s_s | 0:4ef525e32ebc | 291 | _cs = 0; |
s_s_s | 0:4ef525e32ebc | 292 | _window(x, y, width, height); |
s_s_s | 0:4ef525e32ebc | 293 | for (int i=0; i<width*height; i++) { |
s_s_s | 0:4ef525e32ebc | 294 | _putp(colour[i]); |
s_s_s | 0:4ef525e32ebc | 295 | } |
s_s_s | 0:4ef525e32ebc | 296 | _window(0, 0, Moled_WIDTH, Moled_HEIGHT); |
s_s_s | 0:4ef525e32ebc | 297 | _cs = 1; |
s_s_s | 0:4ef525e32ebc | 298 | } |
s_s_s | 0:4ef525e32ebc | 299 | |
s_s_s | 0:4ef525e32ebc | 300 | void Moled::bitblit(int x, int y, int width, int height, const char* bitstream) { |
s_s_s | 0:4ef525e32ebc | 301 | /* |
s_s_s | 0:4ef525e32ebc | 302 | _cs = 0; |
s_s_s | 0:4ef525e32ebc | 303 | _window(x, y, width*2, height); //add *2 |
s_s_s | 0:4ef525e32ebc | 304 | for (int i=0; i<height*width; i++) { |
s_s_s | 0:4ef525e32ebc | 305 | int byte = i / 8; |
s_s_s | 0:4ef525e32ebc | 306 | int bit = i % 8; |
s_s_s | 0:4ef525e32ebc | 307 | int colour = ((bitstream[byte] << bit) & 0x80) ? _foreground : _background; |
s_s_s | 0:4ef525e32ebc | 308 | _putp(colour); // add shu 7/17 |
s_s_s | 0:4ef525e32ebc | 309 | _putp(colour); |
s_s_s | 0:4ef525e32ebc | 310 | } |
s_s_s | 0:4ef525e32ebc | 311 | _window(0, 0, _width, _height); |
s_s_s | 0:4ef525e32ebc | 312 | _cs = 1; |
s_s_s | 0:4ef525e32ebc | 313 | */ |
s_s_s | 0:4ef525e32ebc | 314 | _cs = 0; |
s_s_s | 0:4ef525e32ebc | 315 | int ii=0; |
s_s_s | 0:4ef525e32ebc | 316 | _window(x*_yokosize, y*_tatesize, width*_yokosize, height*_tatesize); //add *2 |
s_s_s | 0:4ef525e32ebc | 317 | for (int i=0; i<height*_tatesize; i++) { |
s_s_s | 0:4ef525e32ebc | 318 | ii=i/_tatesize; |
s_s_s | 0:4ef525e32ebc | 319 | for (int j=0;j<width;j++){ |
s_s_s | 0:4ef525e32ebc | 320 | int byte = (ii*width+j) / 8; |
s_s_s | 0:4ef525e32ebc | 321 | int bit = (ii*width+j) % 8; |
s_s_s | 0:4ef525e32ebc | 322 | int colour = ((bitstream[byte] << bit) & 0x80) ? _foreground : _background; |
s_s_s | 0:4ef525e32ebc | 323 | for (int jj=0;jj<_yokosize;jj++){ |
s_s_s | 0:4ef525e32ebc | 324 | _putp(colour); |
s_s_s | 0:4ef525e32ebc | 325 | } |
s_s_s | 0:4ef525e32ebc | 326 | } |
s_s_s | 0:4ef525e32ebc | 327 | |
s_s_s | 0:4ef525e32ebc | 328 | } |
s_s_s | 0:4ef525e32ebc | 329 | } |
s_s_s | 0:4ef525e32ebc | 330 | |
s_s_s | 0:4ef525e32ebc | 331 | |
s_s_s | 0:4ef525e32ebc | 332 | void Moled::foreground(int c) { |
s_s_s | 0:4ef525e32ebc | 333 | _foreground = c; |
s_s_s | 0:4ef525e32ebc | 334 | } |
s_s_s | 0:4ef525e32ebc | 335 | |
s_s_s | 0:4ef525e32ebc | 336 | void Moled::background(int c) { |
s_s_s | 0:4ef525e32ebc | 337 | _background = c; |
s_s_s | 0:4ef525e32ebc | 338 | } |
s_s_s | 0:4ef525e32ebc | 339 | |
s_s_s | 0:4ef525e32ebc | 340 | int Moled::width() { |
s_s_s | 0:4ef525e32ebc | 341 | return Moled_WIDTH; |
s_s_s | 0:4ef525e32ebc | 342 | } |
s_s_s | 0:4ef525e32ebc | 343 | |
s_s_s | 0:4ef525e32ebc | 344 | int Moled::height() { |
s_s_s | 0:4ef525e32ebc | 345 | return Moled_HEIGHT; |
s_s_s | 0:4ef525e32ebc | 346 | } |
s_s_s | 0:4ef525e32ebc | 347 | |
s_s_s | 0:4ef525e32ebc | 348 | int Moled::columns() { |
s_s_s | 0:4ef525e32ebc | 349 | return Moled_COLS; |
s_s_s | 0:4ef525e32ebc | 350 | } |
s_s_s | 0:4ef525e32ebc | 351 | |
s_s_s | 0:4ef525e32ebc | 352 | int Moled::rows() { |
s_s_s | 0:4ef525e32ebc | 353 | return Moled_ROWS; |
s_s_s | 0:4ef525e32ebc | 354 | } |