diff options
Diffstat (limited to 'qemu/roms/vgabios/tests/testbios.c')
-rw-r--r-- | qemu/roms/vgabios/tests/testbios.c | 353 |
1 files changed, 0 insertions, 353 deletions
diff --git a/qemu/roms/vgabios/tests/testbios.c b/qemu/roms/vgabios/tests/testbios.c deleted file mode 100644 index 99da5a65f..000000000 --- a/qemu/roms/vgabios/tests/testbios.c +++ /dev/null @@ -1,353 +0,0 @@ -/*
- This is a little turbo C program that executes
- several int10, and let you inspect the content
- of the vgabios area
-
- It is used to test the behavior of the vgabios
-*/
-
-#include <stdio.h>
-#include <dos.h>
-#include <conio.h>
-
-
-typedef unsigned char Bit8u;
-typedef unsigned short Bit16u;
-
-typedef struct
-{Bit8u initial;
- Bit8u current;
- Bit16u nbcols;
- Bit16u regen;
- Bit16u start;
- Bit16u curpos[8];
- Bit8u curtyp;
- Bit8u curpage;
- Bit16u crtc;
- Bit16u msr;
- Bit16u cgapal;
- Bit8u nbrows;
- Bit16u cheight;
- Bit8u ctl;
- Bit8u switches;
- Bit8u modeset;
- Bit8u dcc;
- Bit16u vsseg;
- Bit16u vsoffset;
-} BIOSAREA;
-
-void int10ax0003(struct REGPACK *regs)
-{
- regs->r_ax=0x0003;
- intr(0x10,regs);
-}
-
-void int10ax02(struct REGPACK *regs)
-{
- regs->r_ax=0x0200;
- regs->r_bx=0x0000;
- regs->r_dx=0x1710;
- intr(0x10,regs);
- printf("We are now at 24/17");
-}
-
-void int10ax03(struct REGPACK *regs)
-{
- regs->r_ax=0x0300;
- regs->r_bx=0x0000;
- intr(0x10,regs);
- printf("\nCursor is ax%04x cx%04x dx%04x\n",regs->r_ax,regs->r_cx,regs->r_dx);
-}
-
-void int10ax0501(struct REGPACK *regs)
-{
- regs->r_ax=0x0501;
- intr(0x10,regs);
- regs->r_ax=0x0e61;
- regs->r_bx=0x0000;
- intr(0x10,regs);
- printf("We are now on page 2");
-}
-
-void int10ax0602(struct REGPACK *regs)
-{
- regs->r_ax=0x0602;
- regs->r_bx=0x0700;
- regs->r_cx=0x0101;
- regs->r_dx=0x0a0a;
- intr(0x10,regs);
- printf("Scrolled 2 up");
-}
-
-void int10ax0702(struct REGPACK *regs)
-{
- regs->r_ax=0x0702;
- regs->r_bx=0x0700;
- regs->r_cx=0x0101;
- regs->r_dx=0x0a0a;
- intr(0x10,regs);
- printf("Scrolled 2 down");
-}
-
-void int10ax08(struct REGPACK *regs)
-{
- regs->r_ax=0x0800;
- regs->r_bx=0x0000;
- intr(0x10,regs);
-}
-
-void int10ax09(struct REGPACK *regs)
-{
- char attr;
- regs->r_ax=0x0501;
- intr(0x10,regs);
- for(attr=0;attr<16;attr++)
- {printf("%02x ",attr);
- regs->r_ax=0x0961+attr;
- regs->r_bx=0x0100+attr;
- regs->r_cx=0x0016;
- intr(0x10,regs);
- printf("\n");
- }
-}
-
-void int10ax0a(struct REGPACK *regs)
-{
- regs->r_ax=0x0501;
- intr(0x10,regs);
- regs->r_ax=0x0a62;
- regs->r_bx=0x0101;
- regs->r_cx=0x0016;
- intr(0x10,regs);
-}
-
-void int10ax0f(struct REGPACK *regs)
-{
- regs->r_ax=0x0501;
- intr(0x10,regs);
- regs->r_ax=0x0f00;
- intr(0x10,regs);
-}
-
-void int10ax1b(struct REGPACK *regs)
-{unsigned char table[64];
- unsigned char far *ptable;
- int i;
-
- regs->r_ax=0x0501;
- intr(0x10,regs);
- regs->r_ax=0x1b00;
- regs->r_bx=0x0000;
- ptable=&table;
- regs->r_es=FP_SEG(ptable);
- regs->r_di=FP_OFF(ptable);
- printf("Read state info in %04x:%04x\n",regs->r_es,regs->r_di);
- intr(0x10,regs);
-
- for(i=0;i<64;i++)
- {if(i%16==0)printf("\n%02x ",i);
- printf("%02x ",table[i]);
- }
- printf("\n");
-}
-
-static unsigned char var[64];
-
-void int10ax13(struct REGPACK *regs)
-{unsigned char far *pvar;
-
- pvar=&var;
-
- regs->r_ax=0x1300;
- regs->r_bx=0x000b;
- regs->r_dx=0x1010;
- regs->r_cx=0x0002;
- regs->r_es=FP_SEG(pvar);
- regs->r_bp=FP_OFF(pvar);
- pokeb(regs->r_es,regs->r_bp,'t');
- pokeb(regs->r_es,regs->r_bp+1,'b');
- printf("Writing from %04x:%04x\n",regs->r_es,regs->r_bp);
- intr(0x10,regs);
-
-}
-
-void switch_50(struct REGPACK *regs)
-{
- regs->r_ax=0x1202;
- regs->r_bx=0x3000;
- intr(0x10,regs);
- regs->r_ax=0x0003;
- intr(0x10,regs);
- regs->r_ax=0x1112;
- regs->r_bx=0x0000;
- intr(0x10,regs);
-}
-
-char exec_function(struct REGPACK *regs)
-{char c;
-
- printf("--- Functions --------------------\n");
- printf("a. int10 ax0003\t");
- printf("b. int10 ax02\t");
- printf("c. int10 ax03\t");
- printf("d. int10 ax0501\n");
- printf("e. int10 ax0602\t");
- printf("f. int10 ax0702\t");
- printf("g. int10 ax08\t");
- printf("h. int10 ax09\t");
- printf("i. int10 ax0a\n");
- printf("j. int10 ax0f\t");
- printf("k. int10 ax1b\t");
- printf("l. int10 ax13\n");
- printf("q. Quit\t");
- printf("r. switch to 50 lines\n");
- c=getche();
-
- switch(c)
- {case 'a':
- int10ax0003(regs);
- break;
- case 'b':
- int10ax02(regs);
- break;
- case 'c':
- int10ax03(regs);
- break;
- case 'd':
- int10ax0501(regs);
- break;
- case 'e':
- int10ax0602(regs);
- break;
- case 'f':
- int10ax0702(regs);
- break;
- case 'g':
- int10ax08(regs);
- break;
- case 'h':
- int10ax09(regs);
- break;
- case 'i':
- int10ax0a(regs);
- break;
- case 'j':
- int10ax0f(regs);
- break;
- case 'k':
- int10ax1b(regs);
- break;
- case 'l':
- int10ax13(regs);
- break;
- case 'q':
- break;
- case 'r':
- switch_50(regs);
- break;
- default:
- printf("No such function!\n");
- }
-
- if(c=='q')return 1;
- while(kbhit()==0);
- c=getch();
-
- return 0;
-}
-
-void read_bios_area(BIOSAREA *biosarea)
-{
- biosarea->initial=peekb(0x40,0x10);
- biosarea->current=peekb(0x40,0x49);
- biosarea->nbcols=peek(0x40,0x4a);
- biosarea->regen=peek(0x40,0x4c);
- biosarea->start=peek(0x40,0x4e);
- biosarea->curpos[0]=peek(0x40,0x50);
- biosarea->curpos[1]=peek(0x40,0x52);
- biosarea->curpos[2]=peek(0x40,0x54);
- biosarea->curpos[3]=peek(0x40,0x56);
- biosarea->curpos[4]=peek(0x40,0x58);
- biosarea->curpos[5]=peek(0x40,0x5a);
- biosarea->curpos[6]=peek(0x40,0x5c);
- biosarea->curpos[7]=peek(0x40,0x5e);
- biosarea->curtyp=peek(0x40,0x60);
- biosarea->curpage=peekb(0x40,0x62);
- biosarea->crtc=peek(0x40,0x63);
- biosarea->msr=peekb(0x40,0x65);
- biosarea->cgapal=peekb(0x40,0x66);
- biosarea->nbrows=peekb(0x40,0x84);
- biosarea->cheight=peek(0x40,0x85);
- biosarea->ctl=peekb(0x40,0x87);
- biosarea->switches=peekb(0x40,0x88);
- biosarea->modeset=peekb(0x40,0x89);
- biosarea->dcc=peekb(0x40,0x8a);
- biosarea->vsseg=peek(0x40,0xa8);
- biosarea->vsoffset=peek(0x40,0xaa);
-}
-
-void show_bios_area(BIOSAREA *biosarea)
-{
- printf("--- BIOS area --------------------\n");
- printf("initial : %02x\t",biosarea->initial);
- printf("current : %02x\t",biosarea->current);
- printf("nbcols : %04x\t",biosarea->nbcols);
- printf("regen : %04x\t",biosarea->regen);
- printf("start : %04x\n",biosarea->start);
- printf("curpos : %04x %04x %04x %04x %04x %04x %04x %04x\n",
- biosarea->curpos[0], biosarea->curpos[1], biosarea->curpos[2], biosarea->curpos[3],
- biosarea->curpos[4], biosarea->curpos[5], biosarea->curpos[6], biosarea->curpos[7]);
- printf("curtyp : %04x\t",biosarea->curtyp);
- printf("curpage : %02x\t",biosarea->curpage);
- printf("crtc : %04x\t",biosarea->crtc);
- printf("msr : %04x\n",biosarea->msr);
- printf("cgapal : %04x\t",biosarea->cgapal);
- printf("nbrows-1: %02x\t",biosarea->nbrows);
- printf("cheight : %04x\t",biosarea->cheight);
- printf("ctl : %02x\n",biosarea->ctl);
- printf("switches: %02x\t",biosarea->switches);
- printf("modeset : %02x\t",biosarea->modeset);
- printf("dcc : %02x\t",biosarea->dcc);
- printf("vs : %04x:%04x\n",biosarea->vsseg,biosarea->vsoffset);
-}
-
-void show_regs(struct REGPACK *regs)
-{
- printf("--- Registers --------------------\n");
- printf("ax %04x\t",regs->r_ax);
- printf("bx %04x\t",regs->r_bx);
- printf("cx %04x\t",regs->r_cx);
- printf("dx %04x\t",regs->r_dx);
- printf("ds %04x\t",regs->r_ds);
- printf("si %04x\t",regs->r_si);
- printf("es %04x\t",regs->r_es);
- printf("di %04x\n",regs->r_di);
-}
-
-void reset_videomode()
-{
- struct REGPACK regs;
-
- regs.r_ax=0x0003;
- intr(0x10,®s);
-}
-
-void main()
-{
-
- BIOSAREA biosarea;
- struct REGPACK regs;
-
- directvideo=0;
-
- while(1)
- {
- read_bios_area(&biosarea);
-
- reset_videomode();
- show_bios_area(&biosarea);
- show_regs(®s);
-
- if(exec_function(®s)!=0)break;
- }
-}
|