14d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima/*
24d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   This is a little turbo C program that executes
34d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   several int10, and let you inspect the content
44d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   of the vgabios area
54d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
64d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   It is used to test the behavior of the vgabios
74d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima*/
84d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
94d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#include <stdio.h>
104d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#include <dos.h>
114d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#include <conio.h>
124d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
134d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
144d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimatypedef unsigned char  Bit8u;
154d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimatypedef unsigned short Bit16u;
164d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
174d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimatypedef struct
184d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{Bit8u initial;
194d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u current;
204d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit16u nbcols;
214d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit16u regen;
224d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit16u start;
234d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit16u curpos[8];
244d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u curtyp;
254d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u curpage;
264d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit16u crtc;
274d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit16u msr;
284d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit16u cgapal;
294d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u nbrows;
304d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit16u cheight;
314d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u ctl;
324d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u switches;
334d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u modeset;
344d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit8u dcc;
354d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit16u vsseg;
364d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima Bit16u vsoffset;
374d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima} BIOSAREA;
384d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
394d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimavoid int10ax0003(struct REGPACK *regs)
404d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{
414d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima regs->r_ax=0x0003;
424d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima intr(0x10,regs);
434d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima}
444d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
454d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimavoid int10ax02(struct REGPACK *regs)
464d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{
474d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima regs->r_ax=0x0200;
484d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima regs->r_bx=0x0000;
494d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima regs->r_dx=0x1710;
504d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima intr(0x10,regs);
514d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("We are now at 24/17");
524d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima}
534d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
544d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimavoid int10ax03(struct REGPACK *regs)
554d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{
564d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima regs->r_ax=0x0300;
574d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima regs->r_bx=0x0000;
584d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima intr(0x10,regs);
594d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("\nCursor is ax%04x cx%04x dx%04x\n",regs->r_ax,regs->r_cx,regs->r_dx);
604d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima}
614d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
624d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimavoid int10ax0501(struct REGPACK *regs)
634d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{
644d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima regs->r_ax=0x0501;
654d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima intr(0x10,regs);
664d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima regs->r_ax=0x0e61;
674d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima regs->r_bx=0x0000;
684d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima intr(0x10,regs);
694d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("We are now on page 2");
704d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima}
714d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
724d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimavoid int10ax0602(struct REGPACK *regs)
734d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{
744d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima regs->r_ax=0x0602;
754d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima regs->r_bx=0x0700;
764d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima regs->r_cx=0x0101;
774d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima regs->r_dx=0x0a0a;
784d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima intr(0x10,regs);
794d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("Scrolled 2 up");
804d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima}
814d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
824d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimavoid int10ax0702(struct REGPACK *regs)
834d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{
844d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima regs->r_ax=0x0702;
854d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima regs->r_bx=0x0700;
864d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima regs->r_cx=0x0101;
874d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima regs->r_dx=0x0a0a;
884d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima intr(0x10,regs);
894d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("Scrolled 2 down");
904d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima}
914d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
924d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimavoid int10ax08(struct REGPACK *regs)
934d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{
944d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima regs->r_ax=0x0800;
954d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima regs->r_bx=0x0000;
964d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima intr(0x10,regs);
974d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima}
984d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
994d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimavoid int10ax09(struct REGPACK *regs)
1004d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{
1014d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima char attr;
1024d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima regs->r_ax=0x0501;
1034d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima intr(0x10,regs);
1044d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima for(attr=0;attr<16;attr++)
1054d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  {printf("%02x ",attr);
1064d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   regs->r_ax=0x0961+attr;
1074d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   regs->r_bx=0x0100+attr;
1084d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   regs->r_cx=0x0016;
1094d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   intr(0x10,regs);
1104d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   printf("\n");
1114d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  }
1124d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima}
1134d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
1144d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimavoid int10ax0a(struct REGPACK *regs)
1154d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{
1164d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima regs->r_ax=0x0501;
1174d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima intr(0x10,regs);
1184d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima regs->r_ax=0x0a62;
1194d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima regs->r_bx=0x0101;
1204d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima regs->r_cx=0x0016;
1214d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima intr(0x10,regs);
1224d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima}
1234d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
1244d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimavoid int10ax0f(struct REGPACK *regs)
1254d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{
1264d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima regs->r_ax=0x0501;
1274d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima intr(0x10,regs);
1284d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima regs->r_ax=0x0f00;
1294d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima intr(0x10,regs);
1304d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima}
1314d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
1324d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimavoid int10ax1b(struct REGPACK *regs)
1334d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{unsigned char table[64];
1344d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima unsigned char far *ptable;
1354d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima int  i;
1364d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
1374d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima regs->r_ax=0x0501;
1384d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima intr(0x10,regs);
1394d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima regs->r_ax=0x1b00;
1404d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima regs->r_bx=0x0000;
1414d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima ptable=&table;
1424d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima regs->r_es=FP_SEG(ptable);
1434d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima regs->r_di=FP_OFF(ptable);
1444d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("Read state info in %04x:%04x\n",regs->r_es,regs->r_di);
1454d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima intr(0x10,regs);
1464d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
1474d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima for(i=0;i<64;i++)
1484d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  {if(i%16==0)printf("\n%02x ",i);
1494d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   printf("%02x ",table[i]);
1504d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  }
1514d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("\n");
1524d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima}
1534d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
1544d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimastatic unsigned char var[64];
1554d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
1564d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimavoid int10ax13(struct REGPACK *regs)
1574d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{unsigned char far *pvar;
1584d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
1594d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pvar=&var;
1604d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
1614d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima regs->r_ax=0x1300;
1624d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima regs->r_bx=0x000b;
1634d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima regs->r_dx=0x1010;
1644d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima regs->r_cx=0x0002;
1654d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima regs->r_es=FP_SEG(pvar);
1664d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima regs->r_bp=FP_OFF(pvar);
1674d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pokeb(regs->r_es,regs->r_bp,'t');
1684d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pokeb(regs->r_es,regs->r_bp+1,'b');
1694d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("Writing from %04x:%04x\n",regs->r_es,regs->r_bp);
1704d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima intr(0x10,regs);
1714d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
1724d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima}
1734d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
1744d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimavoid switch_50(struct REGPACK *regs)
1754d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{
1764d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima regs->r_ax=0x1202;
1774d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima regs->r_bx=0x3000;
1784d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima intr(0x10,regs);
1794d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima regs->r_ax=0x0003;
1804d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima intr(0x10,regs);
1814d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima regs->r_ax=0x1112;
1824d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima regs->r_bx=0x0000;
1834d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima intr(0x10,regs);
1844d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima}
1854d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
1864d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimachar exec_function(struct REGPACK *regs)
1874d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{char c;
1884d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
1894d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("--- Functions --------------------\n");
1904d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("a. int10 ax0003\t");
1914d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("b. int10 ax02\t");
1924d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("c. int10 ax03\t");
1934d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("d. int10 ax0501\n");
1944d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("e. int10 ax0602\t");
1954d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("f. int10 ax0702\t");
1964d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("g. int10 ax08\t");
1974d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("h. int10 ax09\t");
1984d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("i. int10 ax0a\n");
1994d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("j. int10 ax0f\t");
2004d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("k. int10 ax1b\t");
2014d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("l. int10 ax13\n");
2024d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("q. Quit\t");
2034d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("r. switch to 50 lines\n");
2044d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima c=getche();
2054d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
2064d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima switch(c)
2074d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  {case 'a':
2084d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima    int10ax0003(regs);
2094d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima    break;
2104d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   case 'b':
2114d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima    int10ax02(regs);
2124d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima    break;
2134d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   case 'c':
2144d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima    int10ax03(regs);
2154d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima    break;
2164d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   case 'd':
2174d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima    int10ax0501(regs);
2184d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima    break;
2194d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   case 'e':
2204d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima    int10ax0602(regs);
2214d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima    break;
2224d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   case 'f':
2234d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima    int10ax0702(regs);
2244d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima    break;
2254d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   case 'g':
2264d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima    int10ax08(regs);
2274d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima    break;
2284d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   case 'h':
2294d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima    int10ax09(regs);
2304d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima    break;
2314d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   case 'i':
2324d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima    int10ax0a(regs);
2334d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima    break;
2344d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   case 'j':
2354d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima    int10ax0f(regs);
2364d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima    break;
2374d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   case 'k':
2384d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima    int10ax1b(regs);
2394d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima    break;
2404d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   case 'l':
2414d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima    int10ax13(regs);
2424d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima    break;
2434d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   case 'q':
2444d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima    break;
2454d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   case 'r':
2464d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima    switch_50(regs);
2474d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima    break;
2484d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   default:
2494d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima    printf("No such function!\n");
2504d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  }
2514d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
2524d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima if(c=='q')return 1;
2534d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima while(kbhit()==0);
2544d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima c=getch();
2554d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
2564d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima return 0;
2574d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima}
2584d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
2594d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimavoid read_bios_area(BIOSAREA *biosarea)
2604d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{
2614d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima biosarea->initial=peekb(0x40,0x10);
2624d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima biosarea->current=peekb(0x40,0x49);
2634d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima biosarea->nbcols=peek(0x40,0x4a);
2644d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima biosarea->regen=peek(0x40,0x4c);
2654d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima biosarea->start=peek(0x40,0x4e);
2664d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima biosarea->curpos[0]=peek(0x40,0x50);
2674d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima biosarea->curpos[1]=peek(0x40,0x52);
2684d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima biosarea->curpos[2]=peek(0x40,0x54);
2694d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima biosarea->curpos[3]=peek(0x40,0x56);
2704d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima biosarea->curpos[4]=peek(0x40,0x58);
2714d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima biosarea->curpos[5]=peek(0x40,0x5a);
2724d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima biosarea->curpos[6]=peek(0x40,0x5c);
2734d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima biosarea->curpos[7]=peek(0x40,0x5e);
2744d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima biosarea->curtyp=peek(0x40,0x60);
2754d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima biosarea->curpage=peekb(0x40,0x62);
2764d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima biosarea->crtc=peek(0x40,0x63);
2774d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima biosarea->msr=peekb(0x40,0x65);
2784d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima biosarea->cgapal=peekb(0x40,0x66);
2794d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima biosarea->nbrows=peekb(0x40,0x84);
2804d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima biosarea->cheight=peek(0x40,0x85);
2814d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima biosarea->ctl=peekb(0x40,0x87);
2824d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima biosarea->switches=peekb(0x40,0x88);
2834d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima biosarea->modeset=peekb(0x40,0x89);
2844d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima biosarea->dcc=peekb(0x40,0x8a);
2854d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima biosarea->vsseg=peek(0x40,0xa8);
2864d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima biosarea->vsoffset=peek(0x40,0xaa);
2874d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima}
2884d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
2894d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimavoid show_bios_area(BIOSAREA *biosarea)
2904d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{
2914d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("--- BIOS area --------------------\n");
2924d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("initial : %02x\t",biosarea->initial);
2934d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("current : %02x\t",biosarea->current);
2944d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("nbcols  : %04x\t",biosarea->nbcols);
2954d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("regen   : %04x\t",biosarea->regen);
2964d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("start   : %04x\n",biosarea->start);
2974d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("curpos  : %04x %04x %04x %04x %04x %04x %04x %04x\n",
2984d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   biosarea->curpos[0], biosarea->curpos[1], biosarea->curpos[2], biosarea->curpos[3],
2994d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   biosarea->curpos[4], biosarea->curpos[5], biosarea->curpos[6], biosarea->curpos[7]);
3004d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("curtyp  : %04x\t",biosarea->curtyp);
3014d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("curpage : %02x\t",biosarea->curpage);
3024d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("crtc    : %04x\t",biosarea->crtc);
3034d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("msr     : %04x\n",biosarea->msr);
3044d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("cgapal  : %04x\t",biosarea->cgapal);
3054d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("nbrows-1: %02x\t",biosarea->nbrows);
3064d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("cheight : %04x\t",biosarea->cheight);
3074d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("ctl     : %02x\n",biosarea->ctl);
3084d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("switches: %02x\t",biosarea->switches);
3094d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("modeset : %02x\t",biosarea->modeset);
3104d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("dcc     : %02x\t",biosarea->dcc);
3114d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("vs      : %04x:%04x\n",biosarea->vsseg,biosarea->vsoffset);
3124d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima}
3134d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
3144d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimavoid show_regs(struct REGPACK *regs)
3154d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{
3164d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("--- Registers --------------------\n");
3174d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("ax %04x\t",regs->r_ax);
3184d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("bx %04x\t",regs->r_bx);
3194d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("cx %04x\t",regs->r_cx);
3204d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("dx %04x\t",regs->r_dx);
3214d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("ds %04x\t",regs->r_ds);
3224d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("si %04x\t",regs->r_si);
3234d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("es %04x\t",regs->r_es);
3244d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima printf("di %04x\n",regs->r_di);
3254d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima}
3264d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
3274d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimavoid reset_videomode()
3284d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{
3294d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima struct REGPACK regs;
3304d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
3314d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima regs.r_ax=0x0003;
3324d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima intr(0x10,&regs);
3334d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima}
3344d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
3354d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimavoid main()
3364d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima{
3374d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
3384d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima BIOSAREA biosarea;
3394d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima struct REGPACK regs;
3404d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
3414d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima directvideo=0;
3424d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
3434d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima while(1)
3444d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  {
3454d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   read_bios_area(&biosarea);
3464d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
3474d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   reset_videomode();
3484d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   show_bios_area(&biosarea);
3494d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   show_regs(&regs);
3504d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima
3514d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima   if(exec_function(&regs)!=0)break;
3524d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima  }
3534d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima}
354