Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

278 lines
4.9 KiB

#include "insignia.h"
#include "host_def.h"
#if !defined(NTVDM) || (defined(NTVDM) && !defined(X86GFX) )
/*
* SccsID @(#)ega_tracer.c 1.7 8/25/93 Copyright Insignia Solutions
* Set of routines to output all accesses to the EGA, in a form that
* can be read in & executed by the stand-alone EGA.
*
*/
#ifdef EGA_DUMP
#include <stdio.h>
#include TypesH
#include "xt.h"
#include "sas.h"
#include "gmi.h"
#include "egatrace.h"
#include "egaports.h"
#include "gfx_upd.h"
#include CpuH
IMPORT VOID host_applClose IPT0();
static FILE *dump_file;
mem_handlers dump_writes;
static void putl(addr,dest_file)
byte *addr;
FILE *dest_file;
{
sys_addr addr_m = addr-M;
putc(addr_m & 0xff,dest_file);
addr_m >>= 8;
putc(addr_m & 0xff,dest_file);
addr_m >>= 8;
putc(addr_m & 0xff,dest_file);
}
dump_inb(port)
int port;
{
putc(INB,dump_file);
putc(port & 0xff,dump_file);
putc((port>>8) & 0xff,dump_file);
}
dump_inw(port)
int port;
{
putc(INW,dump_file);
putc(port & 0xff,dump_file);
putc((port>>8) & 0xff,dump_file);
}
dump_outb(port,value)
int port,value;
{
putc(OUTB,dump_file);
putc(port & 0xff,dump_file);
putc((port>>8) & 0xff,dump_file);
putc(value,dump_file);
}
dump_outw(port,value)
int port,value;
{
putc(OUTW,dump_file);
putc(port & 0xff,dump_file);
putc((port>>8) & 0xff,dump_file);
putc(value & 0xff,dump_file);
putc((value >> 8),dump_file);
}
boolean dump_b_write(addr)
host_addr addr;
{
putc(WRITE_BYTE,dump_file);
putl(addr,dump_file);
putc(*addr,dump_file);
(*dump_writes.b_write)(addr);
}
boolean dump_w_write(addr)
host_addr addr;
{
putc(WRITE_WORD,dump_file);
putl(addr,dump_file);
putc(*addr,dump_file);
putc(*(addr+1),dump_file);
(*dump_writes.w_write)(addr);
}
boolean dump_b_fill(l_addr,h_addr)
host_addr l_addr,h_addr;
{
putc(FILL_BYTE,dump_file);
putl(l_addr,dump_file);
putl(h_addr,dump_file);
putc(*l_addr,dump_file);
(*dump_writes.b_fill)(l_addr,h_addr);
}
boolean dump_w_fill(l_addr,h_addr)
host_addr l_addr,h_addr;
{
putc(FILL_WORD,dump_file);
putl(l_addr,dump_file);
putl(h_addr,dump_file);
putc(*l_addr,dump_file);
putc(*(l_addr+1),dump_file);
(*dump_writes.w_fill)(l_addr,h_addr);
}
boolean dump_b_move(l_addr,h_addr)
host_addr l_addr,h_addr;
{
host_addr i;
putc(MOVE_BYTE,dump_file);
putl(l_addr,dump_file);
putl(h_addr,dump_file);
putl(haddr_of_src_string,dump_file);
for(i=l_addr;i<=h_addr;i++)
{
putc(*i,dump_file);
}
(*dump_writes.b_move)(l_addr,h_addr);
}
boolean dump_w_move(l_addr,h_addr)
host_addr l_addr,h_addr;
{
host_addr i;
putc(MOVE_BYTE,dump_file);
putl(l_addr,dump_file);
putl(h_addr,dump_file);
putl(haddr_of_src_string,dump_file);
for(i=l_addr;i<=h_addr;i++)
{
putc(*i,dump_file);
}
(*dump_writes.w_move)(l_addr,h_addr);
}
dump_tick()
{
putc(TICK,dump_file);
}
dump_scroll(mode,direction,video_addr,video_off,video_cols,lr,tc,rd,cd,lines,attr)
byte mode,direction;
sys_addr video_addr;
word video_off,video_cols;
byte lr,tc,rd,cd,lines,attr;
{
putc(SCROLL,dump_file);
putc(mode,dump_file);
putc(direction,dump_file);
putl(video_addr,dump_file);
putc(video_off,dump_file);
putc(video_off >> 8,dump_file);
putc(video_cols,dump_file);
putc(lr,dump_file);
putc(tc,dump_file);
putc(rd,dump_file);
putc(cd,dump_file);
putc(lines,dump_file);
putc(attr,dump_file);
}
static void recalc_dump(),byte_read_dump(),word_read_dump(),string_read_dump();
struct READ_POINTERS
{
void (*recalc_read) ();
void (*byte_read) ();
void (*word_read) ();
void (*string_read) ();
} dump_read_pointers = { recalc_dump, byte_read_dump, word_read_dump,
string_read_dump };
extern struct READ_POINTERS read_pointers;
/*
* cpu read handlers
* rely on C being called if read_pointer.xxxx_read
* does not point at byte_read_mode0
*/
static void recalc_dump()
{
printf("recalc dump called!!!\n");
}
static void byte_read_dump(addr)
byte *addr;
{
putc(READ_BYTE,dump_file);
putl(addr,dump_file);
(*dump_read_pointers.byte_read)(addr);
}
static void word_read_dump(addr)
byte *addr;
{
putc(READ_WORD,dump_file);
putl(addr,dump_file);
(*dump_read_pointers.word_read)(addr);
}
static void string_read_dump(laddr,haddr)
byte *laddr,*haddr;
{
putc(READ_STRING,dump_file);
putl(laddr,dump_file);
putl(haddr,dump_file);
putc(getDF(),dump_file);
(*dump_read_pointers.string_read)(laddr,haddr);
}
dump_read_pointers_init()
{
read_pointers = dump_read_pointers;
}
dump_change_read_pointers(ptr)
struct READ_POINTERS *ptr;
{
dump_read_pointers = *ptr;
}
static mem_handlers catch_writes =
{dump_b_write,dump_w_write,dump_b_fill,dump_w_fill,dump_b_move,dump_w_move};
void dump_add_checkpoint()
{
putc(CHECKPT,dump_file);
}
dump_init(file_name,type)
char *file_name;
char type;
{
dump_file = fopen(file_name,"w");
if(dump_file == NULL)
{
host_applClose();
printf("ARRGGH can't open %s\n",file_name);
exit(1);
}
putc(type,dump_file);
dump_writes = vid_handlers;
gmi_define_mem(VIDEO,&catch_writes);
}
dump_end()
{
fclose(dump_file);
}
#endif
#endif /* !NTVDM | (NTVDM & !X86GFX) */