Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/genarch/src/drivers/ega/ega.c

    ra35b458 r63e27ef  
    6363typedef struct {
    6464        IRQ_SPINLOCK_DECLARE(lock);
    65 
     65       
    6666        parea_t parea;
    67 
     67       
    6868        uint32_t cursor;
    6969        uint8_t *addr;
     
    8686        if ((ch >= 0x0000) && (ch <= 0x007f))
    8787                return ch;
    88 
     88       
    8989        if (ch == 0x00a0)
    9090                return 255;
    91 
     91       
    9292        if (ch == 0x00a1)
    9393                return 173;
    94 
     94       
    9595        if ((ch >= 0x00a2) && (ch <= 0x00a3))
    9696                return (ch - 7);
    97 
     97       
    9898        if (ch == 0x00a5)
    9999                return 157;
    100 
     100       
    101101        if (ch == 0x00aa)
    102102                return 166;
    103 
     103       
    104104        if (ch == 0x00ab)
    105105                return 174;
    106 
     106       
    107107        if (ch == 0x00ac)
    108108                return 170;
    109 
     109       
    110110        if (ch == 0x00b0)
    111111                return 248;
    112 
     112       
    113113        if (ch == 0x00b1)
    114114                return 241;
    115 
     115       
    116116        if (ch == 0x00b2)
    117117                return 253;
    118 
     118       
    119119        if (ch == 0x00b5)
    120120                return 230;
    121 
     121       
    122122        if (ch == 0x00b7)
    123123                return 250;
    124 
     124       
    125125        if (ch == 0x00ba)
    126126                return 167;
    127 
     127       
    128128        if (ch == 0x00bb)
    129129                return 175;
    130 
     130       
    131131        if (ch == 0x00bc)
    132132                return 172;
    133 
     133       
    134134        if (ch == 0x00bd)
    135135                return 171;
    136 
     136       
    137137        if (ch == 0x00bf)
    138138                return 168;
    139 
     139       
    140140        if ((ch >= 0x00c4) && (ch <= 0x00c5))
    141141                return (ch - 54);
    142 
     142       
    143143        if (ch == 0x00c6)
    144144                return 146;
    145 
     145       
    146146        if (ch == 0x00c7)
    147147                return 128;
    148 
     148       
    149149        if (ch == 0x00c9)
    150150                return 144;
    151 
     151       
    152152        if (ch == 0x00d1)
    153153                return 165;
    154 
     154       
    155155        if (ch == 0x00d6)
    156156                return 153;
    157 
     157       
    158158        if (ch == 0x00dc)
    159159                return 154;
    160 
     160       
    161161        if (ch == 0x00df)
    162162                return 225;
    163 
     163       
    164164        if (ch == 0x00e0)
    165165                return 133;
    166 
     166       
    167167        if (ch == 0x00e1)
    168168                return 160;
    169 
     169       
    170170        if (ch == 0x00e2)
    171171                return 131;
    172 
     172       
    173173        if (ch == 0x00e4)
    174174                return 132;
    175 
     175       
    176176        if (ch == 0x00e5)
    177177                return 134;
    178 
     178       
    179179        if (ch == 0x00e6)
    180180                return 145;
    181 
     181       
    182182        if (ch == 0x00e7)
    183183                return 135;
    184 
     184       
    185185        if (ch == 0x00e8)
    186186                return 138;
    187 
     187       
    188188        if (ch == 0x00e9)
    189189                return 130;
    190 
     190       
    191191        if ((ch >= 0x00ea) && (ch <= 0x00eb))
    192192                return (ch - 98);
    193 
     193       
    194194        if (ch == 0x00ec)
    195195                return 141;
    196 
     196       
    197197        if (ch == 0x00ed)
    198198                return 161;
    199 
     199       
    200200        if (ch == 0x00ee)
    201201                return 140;
    202 
     202       
    203203        if (ch == 0x00ef)
    204204                return 139;
    205 
     205       
    206206        if (ch == 0x00f1)
    207207                return 164;
    208 
     208       
    209209        if (ch == 0x00f2)
    210210                return 149;
    211 
     211       
    212212        if (ch == 0x00f3)
    213213                return 162;
    214 
     214       
    215215        if (ch == 0x00f4)
    216216                return 147;
    217 
     217       
    218218        if (ch == 0x00f6)
    219219                return 148;
    220 
     220       
    221221        if (ch == 0x00f7)
    222222                return 246;
    223 
     223       
    224224        if (ch == 0x00f9)
    225225                return 151;
    226 
     226       
    227227        if (ch == 0x00fa)
    228228                return 163;
    229 
     229       
    230230        if (ch == 0x00fb)
    231231                return 150;
    232 
     232       
    233233        if (ch == 0x00fc)
    234234                return 129;
    235 
     235       
    236236        if (ch == 0x00ff)
    237237                return 152;
    238 
     238       
    239239        if (ch == 0x0192)
    240240                return 159;
    241 
     241       
    242242        if (ch == 0x0393)
    243243                return 226;
    244 
     244       
    245245        if (ch == 0x0398)
    246246                return 233;
    247 
     247       
    248248        if (ch == 0x03a3)
    249249                return 228;
    250 
     250       
    251251        if (ch == 0x03a6)
    252252                return 232;
    253 
     253       
    254254        if (ch == 0x03a9)
    255255                return 234;
    256 
     256       
    257257        if (ch == 0x03b1)
    258258                return 224;
    259 
     259       
    260260        if (ch == 0x03b4)
    261261                return 235;
    262 
     262       
    263263        if (ch == 0x03b5)
    264264                return 238;
    265 
     265       
    266266        if (ch == 0x03c0)
    267267                return 227;
    268 
     268       
    269269        if (ch == 0x03c3)
    270270                return 229;
    271 
     271       
    272272        if (ch == 0x03c4)
    273273                return 231;
    274 
     274       
    275275        if (ch == 0x03c6)
    276276                return 237;
    277 
     277       
    278278        if (ch == 0x207f)
    279279                return 252;
    280 
     280       
    281281        if (ch == 0x20a7)
    282282                return 158;
    283 
     283       
    284284        if (ch == 0x2219)
    285285                return 249;
    286 
     286       
    287287        if (ch == 0x221a)
    288288                return 251;
    289 
     289       
    290290        if (ch == 0x221e)
    291291                return 236;
    292 
     292       
    293293        if (ch == 0x2229)
    294294                return 239;
    295 
     295       
    296296        if (ch == 0x2248)
    297297                return 247;
    298 
     298       
    299299        if (ch == 0x2261)
    300300                return 240;
    301 
     301       
    302302        if (ch == 0x2264)
    303303                return 243;
    304 
     304       
    305305        if (ch == 0x2265)
    306306                return 242;
    307 
     307       
    308308        if (ch == 0x2310)
    309309                return 169;
    310 
     310       
    311311        if ((ch >= 0x2320) && (ch <= 0x2321))
    312312                return (ch - 8748);
    313 
     313       
    314314        if (ch == 0x2500)
    315315                return 196;
    316 
     316       
    317317        if (ch == 0x2502)
    318318                return 179;
    319 
     319       
    320320        if (ch == 0x250c)
    321321                return 218;
    322 
     322       
    323323        if (ch == 0x2510)
    324324                return 191;
    325 
     325       
    326326        if (ch == 0x2514)
    327327                return 192;
    328 
     328       
    329329        if (ch == 0x2518)
    330330                return 217;
    331 
     331       
    332332        if (ch == 0x251c)
    333333                return 195;
    334 
     334       
    335335        if (ch == 0x2524)
    336336                return 180;
    337 
     337       
    338338        if (ch == 0x252c)
    339339                return 194;
    340 
     340       
    341341        if (ch == 0x2534)
    342342                return 193;
    343 
     343       
    344344        if (ch == 0x253c)
    345345                return 197;
    346 
     346       
    347347        if (ch == 0x2550)
    348348                return 205;
    349 
     349       
    350350        if (ch == 0x2551)
    351351                return 186;
    352 
     352       
    353353        if ((ch >= 0x2552) && (ch <= 0x2553))
    354354                return (ch - 9341);
    355 
     355       
    356356        if (ch == 0x2554)
    357357                return 201;
    358 
     358       
    359359        if (ch == 0x2555)
    360360                return 184;
    361 
     361       
    362362        if (ch == 0x2556)
    363363                return 183;
    364 
     364       
    365365        if (ch == 0x2557)
    366366                return 187;
    367 
     367       
    368368        if (ch == 0x2558)
    369369                return 212;
    370 
     370       
    371371        if (ch == 0x2559)
    372372                return 211;
    373 
     373       
    374374        if (ch == 0x255a)
    375375                return 200;
    376 
     376       
    377377        if (ch == 0x255b)
    378378                return 190;
    379 
     379       
    380380        if (ch == 0x255c)
    381381                return 189;
    382 
     382       
    383383        if (ch == 0x255d)
    384384                return 188;
    385 
     385       
    386386        if ((ch >= 0x255e) && (ch <= 0x255f))
    387387                return (ch - 9368);
    388 
     388       
    389389        if (ch == 0x2560)
    390390                return 204;
    391 
     391       
    392392        if ((ch >= 0x2561) && (ch <= 0x2562))
    393393                return (ch - 9388);
    394 
     394       
    395395        if (ch == 0x2563)
    396396                return 185;
    397 
     397       
    398398        if ((ch >= 0x2564) && (ch <= 0x2565))
    399399                return (ch - 9363);
    400 
     400       
    401401        if (ch == 0x2566)
    402402                return 203;
    403 
     403       
    404404        if ((ch >= 0x2567) && (ch <= 0x2568))
    405405                return (ch - 9368);
    406 
     406       
    407407        if (ch == 0x2569)
    408408                return 202;
    409 
     409       
    410410        if (ch == 0x256a)
    411411                return 216;
    412 
     412       
    413413        if (ch == 0x256b)
    414414                return 215;
    415 
     415       
    416416        if (ch == 0x256c)
    417417                return 206;
    418 
     418       
    419419        if (ch == 0x2580)
    420420                return 223;
    421 
     421       
    422422        if (ch == 0x2584)
    423423                return 220;
    424 
     424       
    425425        if (ch == 0x2588)
    426426                return 219;
    427 
     427       
    428428        if (ch == 0x258c)
    429429                return 221;
    430 
     430       
    431431        if (ch == 0x2590)
    432432                return 222;
    433 
     433       
    434434        if ((ch >= 0x2591) && (ch <= 0x2593))
    435435                return (ch - 9441);
    436 
     436       
    437437        return 256;
    438438}
     
    445445        if (instance->cursor < EGA_SCREEN)
    446446                return;
    447 
     447       
    448448        memmove((void *) instance->backbuf,
    449449            (void *) (instance->backbuf + EGA_COLS * 2),
     
    451451        memsetw(instance->backbuf + (EGA_SCREEN - EGA_COLS) * 2,
    452452            EGA_COLS, EMPTY_CHAR);
    453 
     453       
    454454        if ((!instance->parea.mapped) || (console_override)) {
    455455                memmove((void *) instance->addr,
     
    459459                    EGA_COLS, EMPTY_CHAR);
    460460        }
    461 
     461       
    462462        instance->cursor = instance->cursor - EGA_COLS;
    463463}
     
    492492                pio_write_8(instance->base + EGA_INDEX_REG, 0x0f);
    493493                uint8_t lo = pio_read_8(instance->base + EGA_DATA_REG);
    494 
     494               
    495495                instance->cursor = (hi << 8) | lo;
    496496        } else
    497497                instance->cursor = 0;
    498 
     498       
    499499        if (instance->cursor >= EGA_SCREEN)
    500500                instance->cursor = 0;
    501 
     501       
    502502        if ((instance->cursor % EGA_COLS) != 0)
    503503                instance->cursor =
    504504                    (instance->cursor + EGA_COLS) - instance->cursor % EGA_COLS;
    505 
     505       
    506506        memsetw(instance->backbuf + instance->cursor * 2,
    507507            EGA_SCREEN - instance->cursor, EMPTY_CHAR);
    508 
     508       
    509509        if ((!instance->parea.mapped) || (console_override))
    510510                memsetw(instance->addr + instance->cursor * 2,
    511511                    EGA_SCREEN - instance->cursor, EMPTY_CHAR);
    512 
     512       
    513513        ega_check_cursor(instance);
    514514        ega_move_cursor(instance);
     
    521521        uint8_t glyph;
    522522        uint8_t style;
    523 
     523       
    524524        if ((index >> 8)) {
    525525                glyph = U_SPECIAL;
     
    529529                style = STYLE;
    530530        }
    531 
     531       
    532532        instance->backbuf[instance->cursor * 2] = glyph;
    533533        instance->backbuf[instance->cursor * 2 + 1] = style;
    534 
     534       
    535535        if ((!instance->parea.mapped) || (console_override)) {
    536536                instance->addr[instance->cursor * 2] = glyph;
     
    542542{
    543543        ega_instance_t *instance = (ega_instance_t *) dev->data;
    544 
     544       
    545545        irq_spinlock_lock(&instance->lock, true);
    546 
     546       
    547547        switch (ch) {
    548548        case '\n':
     
    565565        ega_check_cursor(instance);
    566566        ega_move_cursor(instance);
    567 
     567       
    568568        irq_spinlock_unlock(&instance->lock, true);
    569569}
     
    572572{
    573573        ega_instance_t *instance = (ega_instance_t *) dev->data;
    574 
     574       
    575575        irq_spinlock_lock(&instance->lock, true);
    576 
     576       
    577577        memcpy(instance->addr, instance->backbuf, EGA_VRAM_SIZE);
    578578        ega_move_cursor(instance);
    579579        ega_show_cursor(instance);
    580 
     580       
    581581        irq_spinlock_unlock(&instance->lock, true);
    582582}
     
    587587        if (!egadev)
    588588                return NULL;
    589 
     589       
    590590        ega_instance_t *instance = malloc(sizeof(ega_instance_t), FRAME_ATOMIC);
    591591        if (!instance) {
     
    593593                return NULL;
    594594        }
    595 
     595       
    596596        outdev_initialize("egadev", egadev, &egadev_ops);
    597597        egadev->data = instance;
    598 
     598       
    599599        irq_spinlock_initialize(&instance->lock, "*ega.instance.lock");
    600 
     600       
    601601        instance->base = base;
    602602        instance->addr = (uint8_t *) km_map(addr, EGA_VRAM_SIZE,
     
    608608                return NULL;
    609609        }
    610 
     610       
    611611        instance->backbuf = (uint8_t *) malloc(EGA_VRAM_SIZE, 0);
    612612        if (!instance->backbuf) {
     
    616616                return NULL;
    617617        }
    618 
     618       
    619619        link_initialize(&instance->parea.link);
    620620        instance->parea.pbase = addr;
     
    623623        instance->parea.mapped = false;
    624624        ddi_parea_register(&instance->parea);
    625 
     625       
    626626        /* Synchronize the back buffer and cursor position. */
    627627        memcpy(instance->backbuf, instance->addr, EGA_VRAM_SIZE);
    628628        ega_sync_cursor(instance);
    629 
     629       
    630630        if (!fb_exported) {
    631631                /*
     
    640640                sysinfo_set_item_val("fb.blinking", NULL, true);
    641641                sysinfo_set_item_val("fb.address.physical", NULL, addr);
    642 
     642               
    643643                fb_exported = true;
    644644        }
    645 
     645       
    646646        return egadev;
    647647}
Note: See TracChangeset for help on using the changeset viewer.