#ifndef __MEM_H__ #define __MEM_H__ #define K 1024 #define M 1048576 typedef enum { Text, Data, Stack } Id; typedef enum { Byte, Half, Word } Size; typedef enum { C_READ, C_WRITE } c_rw; struct segment_t { Id segmentid; mem_addr base; /* starting address in virtual memory */ unsigned long size; /* size of the segment */ host_addr segment; /* starting address in real host */ }; typedef struct segment_t Segment; extern Segment segment[]; extern char Phys_Memory[]; extern mem_word *textseg; /* text segment */ extern unsigned long textsize; extern mem_word *dataseg; /* data segment */ extern unsigned long datasize; extern mem_word *stackseg; /* stack segment */ extern unsigned long stacksize; extern mem_addr pbreak; /* program break */ extern mem_addr pstaddress; /* program start address */ extern mem_addr sigtramp; /* address of the signal trampoline code */ /* mem.c */ extern host_addr mem_address(mem_addr,c_rw); extern host_addr mem_address_nullok(mem_addr,c_rw); extern mem_word read_mem_word(mem_addr); extern mem_half read_mem_half(mem_addr); extern mem_byte read_mem_byte(mem_addr); extern void set_mem_word(mem_addr, mem_word); extern void set_mem_half(mem_addr, mem_half); extern void set_mem_byte(mem_addr, mem_byte); extern void make_memory(unsigned long int, unsigned long int); extern void expand_data(long); extern void expand_stack(void); extern void setupstack(int, int, char *[], char *[]); #define rnr_mem_word(addr) *(mem_word *)mem_address(addr,C_READ) #define rnr_mem_half(addr) *(mem_half *)mem_address(addr,C_READ) #define rnr_mem_byte(addr) *(mem_byte *)mem_address(addr,C_READ) #define snr_mem_word(addr,value) *(mem_word*)mem_address(addr,C_WRITE)=(mem_word)value #define snr_mem_half(addr,value) *(mem_half*)mem_address(addr,C_WRITE)=(mem_half)value #define snr_mem_byte(addr,value) *(mem_byte*)mem_address(addr,C_WRITE)=(mem_byte)value #define read_mem_word(addr) rnr_mem_word(addr) #define read_mem_half(addr) rnr_mem_half(addr) #define read_mem_byte(addr) rnr_mem_byte(addr) #define set_mem_word(addr, value) snr_mem_word(addr, value) #define set_mem_half(addr, value) snr_mem_half(addr, value) #define set_mem_byte(addr, value) snr_mem_byte(addr, value) #endif __MEM_H__