| #include <stdio.h> |
| #include <stdlib.h> |
| #include <time.h> |
| #include "msdos.h" |
| #include "wine.h" |
| |
| static BYTE cmosaddress; |
| |
| static BYTE cmosimage[64] = { |
| 0x27, 0x34, 0x31, 0x47, 0x16, 0x15, 0x00, 0x01, |
| 0x04, 0x94, 0x26, 0x02, 0x50, 0x80, 0x00, 0x00, |
| 0x40, 0xb1, 0x00, 0x9c, 0x01, 0x80, 0x02, 0x00, |
| 0x1c, 0x00, 0x00, 0xad, 0x02, 0x10, 0x00, 0x00, |
| 0x08, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x00, |
| 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x03, 0x58, |
| 0x00, 0x1c, 0x19, 0x81, 0x00, 0x0e, 0x00, 0x80, |
| 0x1b, 0x7b, 0x21, 0x00, 0x00, 0x00, 0x05, 0x5f }; |
| |
| void inportb(struct sigcontext_struct *context) |
| { |
| fprintf(stderr, "IO: inb (%x)\n", EDX & 0xffff); |
| |
| switch(EDX & 0xffff) |
| { |
| case 0x70: |
| EAX = (EAX & 0xffffff00L) | cmosaddress; |
| break; |
| case 0x71: |
| EAX = (EAX & 0xffffff00L) | cmosimage[cmosaddress & 0x3f]; |
| break; |
| default: |
| } |
| } |
| |
| void inport(struct sigcontext_struct *context) |
| { |
| fprintf(stderr, "IO: in (%x)\n", EDX & 0xffff); |
| |
| EAX = (EAX & 0xffff0000L) | 0xffff; |
| } |
| |
| void outportb(struct sigcontext_struct *context) |
| { |
| fprintf(stderr, "IO: outb (%x), %x\n", EDX & 0xffff, EAX & 0xff); |
| |
| switch (EDX & 0xffff) |
| { |
| case 0x70: |
| cmosaddress = EAX & 0xff; |
| break; |
| case 0x71: |
| cmosimage[cmosaddress & 0x3f] = EAX & 0xff; |
| break; |
| default: |
| } |
| } |
| |
| void outport(struct sigcontext_struct *context) |
| { |
| fprintf(stderr, "IO: out (%x), %x\n", EDX & 0xffff, EAX & 0xffff); |
| } |