libconfig.vd 3.53 KB
Newer Older
1
2
3
#ifndef LIBCONFIG_H
#define LIBCONFIG_H

Martin Ruckert's avatar
Martin Ruckert committed
4
/* This is the libconfig.h file for MMIX VD  rename to libconfig.h */
5
6
7
8
9
10
11
12
13
#ifdef WIN32
#pragma warning(disable : 4996)
#endif

/* define this if you need a local copy of mem_tetra ll */
#define MMIX_LOCAL_LL  mem_tetra *ll; /* current place in the simulated memory */

#define MMIX_STO(val,addr) (ll=mem_find(addr),ll->tet=(val).h,(ll+1)->tet=(val).l,true)
#define MMIX_STT(val,addr) (ll=mem_find(addr),ll->tet=(val).l,true)
Martin Ruckert's avatar
Martin Ruckert committed
14
#define MMIX_STW(val,addr) (ll=mem_find(addr),ll->tet=(ll->tet&(~(0xFFFF<<((2-((addr).l&0x2))<<3))))|(((val).l&0xFFFF)<<((2-((addr).l&0x2))<<3)),true)
15
16
17
18
#define MMIX_STB(val,addr) (ll=mem_find(addr),ll->tet=(ll->tet&(~(0xFF<<((3-((addr).l&0x3))<<3))))|(((val).l&0xFF)<<((3-((addr).l&0x3))<<3)),true)

#define MMIX_LDO(val,addr) (ll=mem_find(addr),(val).h=ll->tet,(val).l=(ll+1)->tet,true)
#define MMIX_LDT(val,addr) (ll=mem_find(addr),(val).h=0,(val).l=ll->tet,true)
Martin Ruckert's avatar
Martin Ruckert committed
19
#define MMIX_LDW(val,addr) (ll=mem_find(addr),(val).h=0,(val).l=(ll->tet>>(8*(2-((addr).l&2))))&0xFFFF,true)
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#define MMIX_LDB(val,addr) (ll=mem_find(addr),(val).h=0,(val).l=(ll->tet>>(8*(3-((addr).l&3))))&0xFF,true)

#define MMIX_STO_UNCACHED(val,addr) MMIX_STO(val,addr) 
#define MMIX_LDO_UNCACHED(val,addr) MMIX_LDO(val,addr)


#define MMIX_FETCH(inst,loc) (ll=mem_find(loc),inst=ll->tet,true)
#define MMIX_STORE_IVTC(virt,phys)
#define MMIX_STORE_DVTC(virt,phys)

#ifdef WIN32
#define	MMIX_DELAY(ms,d)  (Sleep(ms), d=(ms))
#else
#define	MMIX_DELAY(ms,d)  (usleep(1000*(ms)), d=(ms))
#endif

/* define this to check for external asynchronous interrupts*/
#define MMIX_GET_INTERRUPT

/* this code is executed when MMIX enters the handler for Ctrl-C */
#define   MMIX_CTRL_HANDLER

/* this code defines additional command line options */
#define MMIX_OPTIONS  

/* if MMIX_BOOT is defined, mmis-sim will boot from addres #8000...0000
   otherwise it will resume at Main */
#undef MMIX_BOOT

#ifdef _MMIXAL_
#undef MMIX_PRINT
#else
#define MMIX_PRINT
#endif

#ifdef MMIX_PRINT
extern int mmix_printf(FILE *f,char *format,...);
57
extern int mmix_vprintf(char *format, va_list vargs);
58
59
60
extern int mmix_fputc(int c, FILE *f);
#define printf(...) mmix_printf(stdout,__VA_ARGS__)
#define fprintf(file,...) mmix_printf(file,__VA_ARGS__)
61
#define vprintf(format,vargs) mmix_vprintf(format,vargs)
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#define fputc(c,f) mmix_fputc(c,f)
#endif

/* this action is executed when there is no mmo file on the command line */
#define MMIX_NO_FILE

/* define this to get the real TRAP implementation not the MMIXWARE fake TRAPS */
#undef MMIX_TRAP

/* this is the error display function */
#define MMIX_ERROR(f,m) fprintf(stderr,f,m)

/* define this if you need the tetra inside the mem_node */
#define MMIX_MEM_TET  tetra tet; /* the tetrabyte of simulated memory */

/* these are the functions for the instructions not implemented in the basic mmix simulator */
#define MMIX_WRITE_DCACHE() 
#define MMIX_CLEAR_ICACHE() 
#define MMIX_CLEAR_DCACHE() 
#define MMIX_UPDATE_VTC(w) zero_octa 
#define MMIX_CLEAR_DVTC() 
#define MMIX_CLEAR_IVTC() 
#define MMIX_PRELOAD_DCACHE(w,xx) 
#define MMIX_PRELOAD_ICACHE(w,xx) 
#define MMIX_STORE_DCACHE(w,xx) 
#define MMIX_DELETE_DCACHE(w,xx) 
#define MMIX_DELETE_ICACHE(w,xx) 

#define MMXIAL_LINE_TRUNCATED     fprintf(stderr,"(say `-b <number>' to increase the length of my input buffer)\n");



/* define this to record file line and location associations while assembling */
#define MMIXAL_LINE_LOC(file_no,line_no,cur_loc) add_line_loc(file_no,line_no,cur_loc)

#endif