Changeset a35b458 in mainline for uspace/srv/hid/output/port/ega.c
- Timestamp:
- 2018-03-02T20:10:49Z (7 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- f1380b7
- Parents:
- 3061bc1
- git-author:
- Jiří Zárevúcky <zarevucky.jiri@…> (2018-02-28 17:38:31)
- git-committer:
- Jiří Zárevúcky <zarevucky.jiri@…> (2018-03-02 20:10:49)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/hid/output/port/ega.c
r3061bc1 ra35b458 47 47 sysarg_t cols; 48 48 sysarg_t rows; 49 49 50 50 uint8_t style_normal; 51 51 uint8_t style_inverted; 52 52 53 53 size_t size; 54 54 uint8_t *addr; … … 60 60 { 61 61 uint8_t attr = 0; 62 62 63 63 switch (attrs.type) { 64 64 case CHAR_ATTR_STYLE: … … 81 81 attr = ((attrs.val.index.bgcolor & 7) << 4) | 82 82 (attrs.val.index.fgcolor & 7); 83 83 84 84 if (attrs.val.index.attr & CATTR_BRIGHT) 85 85 attr |= 0x08; 86 86 87 87 break; 88 88 case CHAR_ATTR_RGB: … … 91 91 break; 92 92 } 93 93 94 94 return attr; 95 95 } … … 105 105 { 106 106 uint8_t glyph; 107 107 108 108 if (ascii_check(field->ch)) 109 109 glyph = field->ch; 110 110 else 111 111 glyph = '?'; 112 112 113 113 uint8_t attr = attrs_attr(field->attrs); 114 114 115 115 ega.addr[FB_POS(col, row)] = glyph; 116 116 ega.addr[FB_POS(col, row) + 1] = attr; … … 143 143 /* Cursor position */ 144 144 uint16_t cursor = row * ega.cols + col; 145 145 146 146 pio_write_8(EGA_IO_BASE, 0x0e); 147 147 pio_write_8(EGA_IO_BASE + 1, (cursor >> 8) & 0xff); 148 148 pio_write_8(EGA_IO_BASE, 0x0f); 149 149 pio_write_8(EGA_IO_BASE + 1, cursor & 0xff); 150 150 151 151 /* Cursor visibility */ 152 152 pio_write_8(EGA_IO_BASE, 0x0a); 153 153 uint8_t stat = pio_read_8(EGA_IO_BASE + 1); 154 154 155 155 pio_write_8(EGA_IO_BASE, 0x0a); 156 156 157 157 if (visible) 158 158 pio_write_8(EGA_IO_BASE + 1, stat & (~(1 << 5))); … … 165 165 charfield_t *field = 166 166 chargrid_charfield_at(dev->backbuf, col, row); 167 167 168 168 draw_char(field, col, row); 169 169 } … … 189 189 if (rc != EOK) 190 190 present = false; 191 191 192 192 if (!present) 193 193 return ENOENT; 194 194 195 195 sysarg_t kind; 196 196 rc = sysinfo_get_value("fb.kind", &kind); 197 197 if (rc != EOK) 198 198 kind = (sysarg_t) -1; 199 199 200 200 if (kind != 2) 201 201 return EINVAL; 202 202 203 203 sysarg_t paddr; 204 204 rc = sysinfo_get_value("fb.address.physical", &paddr); 205 205 if (rc != EOK) 206 206 return rc; 207 207 208 208 rc = sysinfo_get_value("fb.width", &ega.cols); 209 209 if (rc != EOK) 210 210 return rc; 211 211 212 212 rc = sysinfo_get_value("fb.height", &ega.rows); 213 213 if (rc != EOK) 214 214 return rc; 215 215 216 216 rc = pio_enable((void*)EGA_IO_BASE, EGA_IO_SIZE, NULL); 217 217 if (rc != EOK) 218 218 return rc; 219 219 220 220 ega.size = (ega.cols * ega.rows) << 1; 221 221 ega.addr = AS_AREA_ANY; 222 222 223 223 rc = physmem_map(paddr, 224 224 ALIGN_UP(ega.size, PAGE_SIZE) >> PAGE_WIDTH, … … 226 226 if (rc != EOK) 227 227 return rc; 228 228 229 229 sysarg_t blinking; 230 230 rc = sysinfo_get_value("fb.blinking", &blinking); 231 231 if (rc != EOK) 232 232 blinking = false; 233 233 234 234 ega.style_normal = 0xf0; 235 235 ega.style_inverted = 0x0f; 236 236 237 237 if (blinking) { 238 238 ega.style_normal &= 0x77; 239 239 ega.style_inverted &= 0x77; 240 240 } 241 241 242 242 outdev_t *dev = outdev_register(&ega_ops, (void *) &ega); 243 243 if (dev == NULL) { … … 245 245 return EINVAL; 246 246 } 247 247 248 248 return EOK; 249 249 }
Note:
See TracChangeset
for help on using the changeset viewer.