//This is the main TempleOS header file //for data structures and classes. //There is no code in this file. //The internal types are U16i,I32i, etc. //They are defined $LK,"internal_types_table","MN:internal_types_table"$. //Holy C has a feature where a //union structure is treated as a //whole if no member is specified. //See $LK-A,"::/TempleOS/Demo/SubIntAccess.CPP"$. public U16i union U16 { I8i i8[2]; U8i u8[2]; }; public I16i union I16 { I8i i8[2]; U8i u8[2]; }; public U32i union U32 { I8i i8[4]; U8i u8[4]; I16 i16[2]; U16 u16[2]; }; public I32i union I32 { I8i i8[4]; U8i u8[4]; I16 i16[2]; U16 u16[2]; }; public U64i union U64 { I8i i8[8]; U8i u8[8]; I16 i16[4]; U16 u16[4]; I32 i32[2]; U32 u32[2]; }; public I64i union I64 { I8i i8[8]; U8i u8[8]; I16 i16[4]; U16 u16[4]; I32 i32[2]; U32 u32[2]; }; public class Complex { F64 x,y; }; public class CD2I32 //two dimensional pt { I32 x,y; }; public class CD3I32 //three dimensional pt { I32 x,y,z; }; public class CD2I64 //two dimensional pt { I64 x,y; }; public class CD3I64 //three dimensional pt { I64 x,y,z; }; public class CD2 //two dimensional pt { F64 x,y; }; public class CD3 //three dimensional pt { F64 x,y,z; }; public class CQue { CQue *next,*last; }; #define NULL 0 #define TRUE 1 #define FALSE 0 #define ON 1 #define OFF 0 #define Bool I8 #define MAX_U8 0xFF #define MIN_U8 0 #define MAX_I8 0x7F #define MIN_I8 (-0x80) #define MAX_U16 0xFFFF #define MIN_U16 0 #define MAX_I16 0x7FFF #define MIN_I16 (-0x8000) #define MAX_U32 0xFFFFFFFF #define MIN_U32 0 #define MAX_I32 0x7FFFFFFF #define MIN_I32 (-0x80000000) #define MAX_U64 0xFFFFFFFFFFFFFFFF //(Int to F64 conversion is signed) #define MAX_U64_F64 (0x43F0000000000000(F64)) #define MIN_U64 0 #define MAX_I64 0x7FFFFFFFFFFFFFFF #define MIN_I64 (-0x8000000000000000) #define MAX_F64 (0x7FEFFFFFFFFFFFFF(F64)) #define MIN_F64 (0xFFEFFFFFFFFFFFFF(F64)) #define inf (0x7FF0000000000000(F64)) #define ì (0x7FF0000000000000(F64)) #define pi (0x400921FB54442D18(F64)) #define ã (0x400921FB54442D18(F64)) #define exp_1 (0x4005BF0A8B145769(F64)) //The number "e" #define log2_10 (0x400A934F0979A371(F64)) #define log2_e (0x3FF71547652B82FE(F64)) #define log10_2 (0x3FD34413509F79FF(F64)) #define loge_2 (0x3FE62E42FEFA39EF(F64)) #define sqrt2 (0x3FF6A09E667F3BCD(F64)) #define eps (0x3CB0000000000000(F64)) #define INVALID_PTR MAX_I64 #define INVALID_CLUSTER -1 //x86 opcodes #define OC_OP_SIZE_PREFIX 0x66 #define OC_ADDR_SIZE_PREFIX 0x67 #define OC_LOCK_PREFIX 0xF0 #define OC_NOP 0x90 #define OC_BPT 0xCC #define OC_CALL 0xE8 #define OC_JMP_REL8 0xEB //Function Stack Frame #define SF_RBP 0x00 #define SF_RIP 0x08 #define SF_ARG1 0x10 #define SF_ARG2 0x18 #define SF_ARG3 0x20 #define SF_ARG4 0x28 #define SF_ARG5 0x30 #define SF_ARG6 0x38 #define SF_ARG7 0x40 #define SF_ARG8 0x48 extern class CTask; extern class CDoc; extern class CCPU; extern class CHashClass; extern class CHashFun; extern class CExeImportExport; extern class CHeapCtrl; extern class CExeHeapGlbl; extern class CDC; extern class CSrvCtrl; extern class CIntermediateCode; #define QUE_VECT_U8_CNT 512 class CQueVectU8 { CQueVectU8 *next,*last; I64 total_cnt,node_cnt,min_index; U8 body[QUE_VECT_U8_CNT]; }; public class CFifoU8 { U8 *buf; I64 mask,in_ptr,out_ptr; }; public class CFifoI64 { I64 *buf; I64 mask,in_ptr,out_ptr; }; #define TF_HH24_MM_SS 0 #define TF_HH24_MM 1 #define TF_HH12_MM_SS_AM 2 #define TF_HH12_MM_AM 3 #define TF_HH12_MM_SSA 4 #define TF_HH12_MMA 5 #define TF_H_M 6 #define TF_H_M_S 7 #define TF_D_H_M 8 #define TF_D_H_M_S 9 #define TF_D_H_M_Sh 10 #define TF_H_M_Sh 11 #define TF_Sh 12 #define TF_M_Sh 13 #define TF_H_M_Sh2 14 #define TF_D_H_M_Sht 15 #define TF_H_M_Sht 16 #define TF_Sht 17 #define TF_M_Sht 18 #define TF_H_M_Sht2 19 #define TF_HH24 20 #define TF_MM 21 #define TF_SS 22 #define TF_NUM 23 #define DF_MM_DD_YY 0 #define DF_MM_DD 1 #define DF_wek_MM_DD 2 #define DF_wek_MM_DD_YY 3 #define DF_MM_DD_YYYY 4 #define DF_wek_MM_DD_YYYY 5 #define DF_mon_DD 6 #define DF_wek_mon_DD 7 #define DF_mon_DD_YYYY 8 #define DF_wek_mon_DD_YYYY 9 #define DF_month_DD 10 #define DF_week_month_DD 11 #define DF_month_DD_YYYY 12 #define DF_week_month_DD_YYYY 13 #define DF_DD_MM_YY 14 #define DF_DD_MM 15 #define DF_wek_DD_MM 16 #define DF_wek_DD_MM_YY 17 #define DF_DD_MM_YYYY 18 #define DF_wek_DD_MM_YYYY 19 #define DF_DD_mon 20 #define DF_wek_DD_mon 21 #define DF_DD_mon_YYYY 22 #define DF_wek_DD_mon_YYYY 23 #define DF_DD_month 24 #define DF_week_DD_month 25 #define DF_DD_month_YYYY 26 #define DF_week_DD_month_YYYY 27 #define DF_YY_MM_DD 28 #define DF_YYYY_MM_DD 29 #define DF_YYMMDD 30 #define DF_YYYYMMDD 31 #define DF_MMDDYY 32 #define DF_MMDDYYYY 33 #define DF_wek 34 #define DF_week 35 #define DF_mon 36 #define DF_month 37 #define DF_YYYY_mon 38 #define DF_YYYY_month 39 #define DF_YY_mon 40 #define DF_YY_month 41 #define DF_mon_YYYY 42 #define DF_month_YYYY 43 #define DF_mon_YY 44 #define DF_month_YY 45 #define DF_YY 46 #define DF_YYYY 47 #define DF_D 48 #define DF_M 49 #define DF_Y 50 #define DF_D2 51 #define DF_M2 52 #define DF_Y2 53 #define DF_D3 54 #define DF_M3 55 #define DF_Y3 56 #define DF_NUM 57 #define CDATE_YEAR_DAYS 365.24225 #define CDATE_YEAR_DAYS_INT 36524225 #define CDATE_BASE_DAY_OF_WEEK 0 public I64 class CDate { U32 time; I32 date; }; public class COrder2D3 { F64 x,y,z,DxDt,DyDt,DzDt; }; #define MSF_INACTIVE 1 #define MSF_FIXED 2 public class CMass { CMass *next,*last; COrder2D3 *state,*DstateDt; U0 start_saved_area; U32 flags,num; F64 mass,drag_profile_factor; U0 saved_state; F64 x,y,z,DxDt,DyDt,DzDt; U0 end_saved_area; }; #define SSF_INACTIVE 1 #define SSF_NO_COMPRESSION 2 #define SSF_NO_TENSION 4 public class CSpring { CSpring *next,*last; CMass *end1,*end2; F64 f,displacement; //set for you to check U0 start_saved_area; U32 flags,num, end1_num,end2_num; F64 constant,rest_len; U0 end_saved_area; }; //Ordinary Differential Equations #define ODEF_HAS_MASSES 1 #define ODEF_PAUSED 2 #define ODEF_STARTED 4 #define ODE_SIGNATURE_VAL 'ODES' public class CMathODE { CMathODE *next,*last; U32 ode_signature,pad; I64 flags,n,n_internal; CMass *next_mass,*last_mass; CSpring *next_spring,*last_spring; F64 drag_v; //drag proportional to velocity F64 drag_v2; //drag proportional to velocity squared F64 drag_v3; //drag proportional to velocity cubed F64 acceleration_limit; //This clips acceleration F64 base_t; F64 t,t_scale; F64 h,h_min,h_max; //This is not precise, just a ballpark //TempleOS CMathODE's are for video games //not science. It bails if it takes //too long. F64 min_tolerance,max_tolerance; F64 tolerance_internal; F64 *array_base; F64 *state; F64 *state_internal; F64 *DstateDt; F64 *state_scale; F64 *initial_state; F64 *temp0,*temp1,*temp2,*temp3, *temp4,*temp5,*temp6,*temp7; CTask *mem_task,*win_task; U0 (*derivative)(CMathODE *o,F64 t,F64 *state,F64 *DstateDt); I64 user_data; }; class CBinFile { /* See $LK,"Bin File Header Generation","FF:::/TempleOS/Compiler/CmpMain.CPP,TEMPLEOS_XSUM"$ by compiler. Bin files have this 16-byte header, followed by code, followed by loader patch table. See $LK,"Loader Patch Table Generation","FF:::/TempleOS/Compiler/CmpMain.CPP,EIE_MODULE_ALIGNMENT"$ and $LK,"BinRep","MN:BinRep"$(). */ U16 jmp; U16 type; U32 loader_patch_table_offset; U32 file_size; U32 xsum; }; class CBinFilePatchTableWithoutOrg { U8 eie_module_alignment; U32 module_alignment; U8 zero1; U8 eie_abs_addr; U32 abs_addres_cnt; U8 zero2; U32 abs_addres[1]; }; class CBinFilePatchTableWithOrg { U8 eie_module_alignment; U32 module_alignment; U8 zero1; U8 eie_module_org; U32 module_org; U8 zero2; U8 eie_abs_addr; U32 abs_addres_cnt; U8 zero3; U32 abs_addres[1]; }; //IDT entry types #define IDTET_TASK 0x05 #define IDTET_IRQ 0x0E #define IDTET_TRAP 0x0F //Same as IRQ but doesnt do CLI. //Interrupts //0x00-0x1F are reserved by Intel #define I_DIVIDE_BY_ZERO 0x00 #define I_SINGLE_STEP 0x01 #define I_NMI 0x02 #define I_BPT 0x03 #define I_PAGE_FAULT 0x0E //0x20-0x2F are used for hardware #define I_TIMER 0x20 //Software Interrupts #define I_MP_CRASH 0x30 #define I_WAKE 0x31 #define I_DBG 0x32 //See $LK,"ST_INT_NAMES","MN:ST_INT_NAMES"$ //You might want to start backward from //0xFF for your own interrupts. #define I_USER 0x40 #define MP_MAX_PROCESSORS 64 #define SYS_START_CR0 0x0031 #define RFLAGf_CARRY 0 #define RFLAGf_PARITY 2 #define RFLAGf_AUX_CARRY 4 #define RFLAGf_ZERO 6 #define RFLAGf_SIGN 7 #define RFLAGf_TRAP 8 //Single Step #define RFLAGf_INT 9 #define RFLAGf_DIR 10 #define RFLAGf_OVERFLOW 11 #define RFLAGf_IOPL0 12 // I/O Privilege Level #define RFLAGf_IOPL1 13 #define RFLAGf_NESTED_TASK 14 #define RFLAGf_RESUME 16 #define RFLAGf_V8086 17 #define RFLAGf_ALIGN_CHECK 18 #define RFLAGf_VINT 19 //Virtual Interrupt #define RFLAGf_VINT_PENDING 20 #define RFLAGf_ID 21 #define SYS_START_RFLAGS 0x0000 #define SYS_NORMAL_RFLAGS (1< (Exit and Save) #define DOCEF1_QUIT 0x2000 //Send (Abort) #define DOCEF1_LEFT_X 0x4000 #define DOCEF1_CENTER_X 0x8000 #define DOCEF1_RIGHT_X 0x10000 #define DOCEF1_TOP_Y 0x20000 #define DOCEF1_CENTER_Y 0x40000 #define DOCEF1_BOTTOM_Y 0x80000 #define DOCEF1_SHIFTED_X 0x100000 #define DOCEF1_SHIFTED_Y 0x200000 #define DOCEF1_SCROLLING_X 0x400000 #define DOCEF1_SCROLLING_Y 0x800000 //HL...UL #define DOCEF1_HAS_BORDER 0x100000000 #define DOCEF1_SOLID_BORDER 0x200000000 #define DOCEF1_BORDER_PLOT 0x400000000 #define DOCEF1_CHECKED_COLLAPSED 0x800000000 //checked or collapsed #define DOCEF1_CHECK_COLLAPSABLE 0x1000000000 #define DOCEF1_REFRESH_DATA 0x2000000000 #define DOCEF1_DATA_IS_PTR 0x4000000000 #define DOCEF1_HAS_TERMINATOR 0x8000000000 #define DOCEF1_ZERO_BASED 0x10000000000 #define DOCEF1_HOLD 0x20000000000 #define DOCEF1_TREE 0x40000000000 #define DOCEF1_SKIP 0x80000000000 #define DOCEF1_ALIAS 0x100000000000 #define DOCEF1_POPUP 0x200000000000 #define DOCEF1_PAGE_REL_Y 0x400000000000 #define DOCEF1_MARGIN_REL_X 0x800000000000 #define DOCEF1_FROM_START 0x1000000000000 #define DOCEF1_SKIP_IN_FORM 0x2000000000000 #define DOCEF1_WIDTH 0x4000000000000 #define DOCEF1_HEIGHT 0x8000000000000 #define DOCEF1_HARD_SKIP 0x10000000000000 #define DOCEF1_FILTER_SKIP 0x20000000000000 #define DOCEF1_NO_CLICK_ON 0x40000000000000 #define DOCEF1_DONT_DRAW 0x80000000000000 //only works on sprites #define DOCEF1_UPDATE_DATA 0x100000000000000 #define DOCEF1_U8 0x200000000000000 #define DOCEF1_U16 0x400000000000000 #define DOCEF1_U32 0x800000000000000 #define DOCEF1_U64 0x1000000000000000 #define DOCEF1_DEFINE 0x2000000000000000 #define DOCEF1_WIN_REL 0x4000000000000000 #define DOCEF1_HTML_LINK 0x8000000000000000 #define DOCEF2_BIN_PTR_LINK 0x1 #define DOCEG1_DONT_EDIT (DOCEF1_TAG_CB|DOCEF1_DEFINE|DOCEF1_HTML_LINK|DOCEF1_SCROLLING_X) #define DOCEG2_DONT_EDIT DOCEF2_BIN_PTR_LINK //These are identical to Doc flags #define DOCEF1_HIGHLIGHT 0x1000000 #define DOCEF1_LOCK_TO_PAGE 0x2000000 #define DOCEF1_LOCK_TO_CENTER 0x4000000 #define DOCEF1_WORD_WRAP 0x8000000 #define DOCEF1_BLINK ATTRF_BLINK #define DOCEF1_INVERT ATTRF_INVERT #define DOCEF1_SELECTED ATTRF_SELECTED #define DOCEF1_UNDERLINE ATTRF_UNDERLINE #define DOCEf1_HIGHLIGHT 24 #define DOCEf1_LOCK_TO_PAGE 25 #define DOCEf1_LOCK_TO_CENTER 26 #define DOCEf1_WORD_WRAP 27 #define DOCEf1_BLINK ATTRf_BLINK #define DOCEf1_INVERT ATTRf_INVERT #define DOCEf1_SELECTED ATTRf_SELECTED #define DOCEf1_UNDERLINE ATTRf_UNDERLINE #define DOCEf1_AUX_STR 0 #define DOCEf1_LINK 1 #define DOCEf1_LEFT_CB 2 #define DOCEf1_LEFT_EXP 3 #define DOCEf1_LEFT_MACRO 4 #define DOCEf1_LEFT_AUTO 5 #define DOCEf1_RIGHT_CB 6 #define DOCEf1_RIGHT_EXP 7 #define DOCEf1_RIGHT_MACRO 8 #define DOCEf1_RIGHT_AUTO 9 #define DOCEf1_TAG_CB 10 #define DOCEf1_HAS_BIN 11 #define DOCEf1_ESC 12 //Send (Exit and Save) #define DOCEf1_QUIT 13 //Send (Abort) #define DOCEf1_LEFT_X 14 #define DOCEf1_CENTER_X 15 #define DOCEf1_RIGHT_X 16 #define DOCEf1_TOP_Y 17 #define DOCEf1_CENTER_Y 18 #define DOCEf1_BOTTOM_Y 19 #define DOCEf1_SHIFTED_X 20 #define DOCEf1_SHIFTED_Y 21 #define DOCEf1_SCROLLING_X 22 #define DOCEf1_SCROLLING_Y 23 //HL...UL #define DOCEf1_HAS_BORDER 32 #define DOCEf1_SOLID_BORDER 33 #define DOCEf1_BORDER_PLOT 34 #define DOCEf1_CHECKED_COLLAPSED 35 #define DOCEf1_CHECK_COLLAPSABLE 36 //checked or collapsed #define DOCEf1_REFRESH_DATA 37 #define DOCEf1_DATA_IS_PTR 38 #define DOCEf1_HAS_TERMINATOR 39 #define DOCEf1_ZERO_BASED 40 #define DOCEf1_HOLD 41 #define DOCEf1_TREE 42 #define DOCEf1_SKIP 43 #define DOCEf1_ALIAS 44 #define DOCEf1_POPUP 45 #define DOCEf1_PAGE_REL_Y 46 #define DOCEf1_MARGIN_REL_X 47 #define DOCEf1_FROM_START 48 #define DOCEf1_SKIP_IN_FORM 49 #define DOCEf1_WIDTH 50 #define DOCEf1_HEIGHT 51 #define DOCEf1_HARD_SKIP 52 #define DOCEf1_FILTER_SKIP 53 #define DOCEf1_NO_CLICK_ON 54 #define DOCEf1_DONT_DRAW 55 //only works on sprites #define DOCEf1_UPDATE_DATA 56 #define DOCEf1_U8 57 #define DOCEf1_U16 58 #define DOCEf1_U32 59 #define DOCEf1_U64 60 #define DOCEf1_DEFINE 61 #define DOCEf1_WIN_REL 62 #define DOCEf1_HTML_LINK 63 #define DOCEf1_NUM_FLAGS 64 #define DOCEf2_BIN_PTR_LINK 0 #define DOCEf2_NUM_FLAGS 1 #define DOCBT_GENERIC_DATA 1 #define DOCBT_CSPRITE 2 #define DOCBT_DEBUG_LINES 3 public class CDocBin { CDocBin *next,*last; I32 temp_use_cnt,renum_num; U8 *tag; U0 start; U32 type,num,flags,size,use_cnt; U8 *data; }; #define DOC_SCROLL_SPEED 8 #define DOCSS_NORMAL 0 #define DOCSS_SINGLE_QUOTE 1 #define DOCSS_DBL_QUOTE 2 #define DOCSS_COMMENT 3 #define DOCSS_CPP_Z_COMMENT 4 #define DOCSSF_BPT 8 #define TERM_ATTR_TEXT WHITE<<4+BLUE #define TERM_ATTR_BORDER WHITE<<4+LTBLUE #define DOC_ATTR_DFT_TEXT WHITE<<4+BLACK #define DOC_COLOR_ALT_TEXT LTGRAY #define DOC_COLOR_LINK RED #define DOC_COLOR_MACRO LTBLUE #define DOC_COLOR_ANCHOR DKGRAY #define DOC_COLOR_HIDDEN DKGRAY #define DOC_COLOR_TREE PURPLE #define DOC_COLOR_PMT GREEN #define DOC_COLOR_BIN CYAN #define DOC_COLOR_KEYWORD BLUE #define DOC_COLOR_KEYWORD2 LTRED #define DOC_COLOR_COMMENT GREEN #define DOC_COLOR_QUOTE BROWN public class CDocSettings { CDocSettings *next,*last; U0 start; I16 left_margin,right_margin,indent; U16 page_len,header,footer; I8 shifted_x,shifted_y; U8 state,comment_depth,paren_depth,brace_depth; U8 cur_text_attr,dft_text_attr; }; #define DOC_DFT MIN_I32 public class CDocEntryBase { //This is a shortened structure for //cmds like the text cmd which //don't require the full CDocEntry structure. CDocEntryBase *next,*last; U8 *tag; union { U8 type_u8; //this stores the code U32 type; //these store attr flags }; I32 page_line_num; I64 flags1,flags2; I32 x,y; U32 min_col,max_col; //These are here to allow recalculating the Doc //from a pt other than the beginning. Without //these, you do not know the current state. //Margins will change to allow multiple columns //of text on the same page. (cursor move back up the page.) CDocSettings *settings; I64 user_data; }; public class CDocEntry:CDocEntryBase { union { I64 attr; I64 cursor_x_offset; I64 (*left_cb)(CDoc *doc,CDocEntry *doc_e); I64 left_exp; }; U8 *left_macro; union { I64 cursor_y_offset; I64 (*right_cb)(CDoc *doc,CDocEntry *doc_e); I64 right_exp; }; U8 *right_macro; U8 *(*tag_cb)(CDoc *doc,CDocEntry *doc_e, CTask *mem_task); U8 *define_str; U8 *aux_str; U8 *bin_ptr_link; U8 *html_link; U8 *my_fmt_data; I64 hex_ed_width; union { I32 scroll_len; I32 width; } union { I32 len; I32 height; } I32 bin_num; I32 pad; CDocBin *bin_data; U8 *data; }; //$LK,"DocFormDo","MN:DocFormDo"$() $LK,"DocMenuDo","MN:DocMenuDo"$() $LK,"DocDo","MN:DocDo"$() $LK,"PopUpMenu","MN:PopUpMenu"$() #define DOF_MIN_SIZE 1 #define DOF_INTERCEPT_TASK_END 2 #define DOF_DONT_HOME 4 #define DOF_WIN_MAX 8 #define DOF_DONT_TEXT_ATTR 16 class CEdFindText { U8 find_text[136] fmtstr "$$DA-P,135,\"Find :%s\"$$\n"; U8 replace_text[136] fmtstr "$$DA-P,135,\"Replace :%s\"$$\n"; Bool replace fmtstr "$$CB,\"Replace\"$$\n"; Bool scan_fwd fmtstr "$$CB,\"Fwd\"$$\n"; Bool scan_selected_text fmtstr "$$CB,\"Selection\"$$\n"; Bool match_case fmtstr "$$CB,\"Match Case\"$$\n"; Bool whole_labels fmtstr "$$CB,\"Whole Labels\"$$\n"; Bool local_var fmtstr "$$CB,\"Rename Local Var\"$$\n"; Bool pmt; U8 pad; I64 filter_lines fmtstr "$$DA,131, \"Filter Lines:%d\"$$\n"; }; class CEdFileName { U8 name[256] fmtstr "$$DA-P,255,\"File Name:%s\"$$"; }; //$LK,"Ed","MN:Ed"$() #define EDF_BAIL 1 #define EDF_COLLAPSE 2 #define EDF_UNCOLLAPSE 4 #define EDf_BAIL 0 #define EDf_COLLAPSE 1 #define EDf_UNCOLLAPSE 2 // DOC header flags #define DOCF_OVERSTRIKE 0x1 #define DOCF_PLAIN_TEXT 0x2 #define DOCF_PLAIN_TEXT_WITH_TABS 0x4 //has '\t', not DOCT_TAB #define DOCF_MIN_SIZE 0x8 #define DOCF_NO_CURSOR 0x10 // Makes DocInsStr remove #define DOCF_IN_DOLLAR 0x20 #define DOCF_MORE 0x40 #define DOCF_FORM 0x80 #define DOCF_DBL_DOLLARS 0x100 #define DOCF_NULL_GRAB_SCROLL 0x200 #define DOCF_BACKWARD_MOVEMENT 0x400 #define DOCF_HAS_SONG 0x800 #define DOCF_UNDO_DIRTY 0x1000 #define DOCF_ALLOW_UNDO 0x2000 #define DOCF_SUPERSCRIPT_MODE 0x4000 #define DOCF_SUBSCRIPT_MODE 0x8000 #define DOCF_DONT_SWAP_OUT 0x10000 #define DOCF_DONT_SHOW 0x20000 #define DOCF_DO_FULL_REFRESH 0x40000 #define DOCF_BREAK_UNLOCKED 0x80000 #define DOCF_BORDER_DOC 0x100000 #define DOCF_HIDE_CURSOR 0x200000 //use $LK,"DocCursor","MN:DocCursor"$ //2 unused flags #define DOCF_HIGHLIGHT DOCEF1_HIGHLIGHT #define DOCF_LOCK_TO_PAGE DOCEF1_LOCK_TO_PAGE #define DOCF_LOCK_TO_CENTER DOCEF1_LOCK_TO_CENTER #define DOCF_WORD_WRAP DOCEF1_WORD_WRAP #define DOCF_BLINK DOCEF1_BLINK #define DOCF_INVERT DOCEF1_INVERT #define DOCF_SELECTED DOCEF1_SELECTED #define DOCF_UNDERLINE DOCEF1_UNDERLINE #define DOCF_CARRIAGE_RETURN 0x100000000 #define DOCF_NO_SCROLL_BARS 0x200000000 //use $LK,"DocScroll","MN:DocScroll"$ #define DOCf_OVERSTRIKE 0 #define DOCf_PLAIN_TEXT 1 #define DOCf_PLAIN_TEXT_WITH_TABS 2 //has '\t', not DOCT_TAB #define DOCf_MIN_SIZE 3 #define DOCf_NO_CURSOR 4 // Makes DocInsStr remove #define DOCf_IN_DOLLAR 5 #define DOCf_MORE 6 #define DOCf_FORM 7 #define DOCf_DBL_DOLLARS 8 #define DOCf_NULL_GRAB_SCROLL 9 #define DOCf_BACKWARD_MOVEMENT 10 #define DOCf_HAS_SONG 11 #define DOCf_UNDO_DIRTY 12 #define DOCf_ALLOW_UNDO 13 #define DOCf_SUPERSCRIPT_MODE 14 #define DOCf_SUBSCRIPT_MODE 15 #define DOCf_DONT_SWAP_OUT 16 #define DOCf_DONT_SHOW 17 #define DOCf_DO_FULL_REFRESH 18 #define DOCf_BREAK_UNLOCKED 19 #define DOCf_BORDER_DOC 20 #define DOCf_HIDE_CURSOR 21 //use $LK,"DocCursor","MN:DocCursor"$ //2 unused flags #define DOCf_HIGHLIGHT DOCEf1_HIGHLIGHT #define DOCf_LOCK_TO_PAGE DOCEf1_LOCK_TO_PAGE #define DOCf_LOCK_TO_CENTER DOCEf1_LOCK_TO_CENTER #define DOCf_WORD_WRAP DOCEf1_WORD_WRAP #define DOCf_BLINK DOCEf1_BLINK #define DOCf_INVERT DOCEf1_INVERT #define DOCf_SELECTED DOCEf1_SELECTED #define DOCf_UNDERLINE DOCEf1_UNDERLINE #define DOCf_CARRIAGE_RETURN 32 #define DOCf_NO_SCROLL_BARS 33 //locked flags #define DOClf_LOCKED 0 class CDocUndo { CDocUndo *next,*last; I64 size; I64 doc_flags; I64 time_stamp; U8 *body; }; //See $LK,"DocMenuDo","MN:DocMenuDo"$() #define DOCM_CANCEL (-1) #define DOC_SIGNATURE_VAL 'DocS' #define DOC_RECALC_ALL 0 #define DOC_RECALC_PARTIAL 1 #define DOC_RECALC_FIND_CURSOR 2 #define DOC_RECALC_TO_SCREEN 3 public class CDoc //Linked Text File header { //See $LK,"Doc","HI:Doc"$ for documentation. CDocEntryBase root; U8 *dummy_display; I64 flags,locked_flags; CDocEntry *cur_entry,*old_cur_entry; I32 cur_data_col,old_cur_data_col, line_start_col,cur_top_line_num; I64 swap_out_time; I32 ext_ascii_val,ext_ascii_cnt; I32 dollar_buf_size,dollar_buf_ptr; U8 *dollar_buf; CTask *win_task,*mem_task; CDocEntry *recalc_start; I32 page_line_num; I32 x,y,min_x,max_x,min_y,max_y; I32 undo_cnt; I64 line,col,best_d; I64 old_win_top,old_win_bottom, old_win_left,old_win_right; I64 cmd_U8; U32 doc_signature; I32 max_entries,ww_lines_back,cur_bin_num; I64 refresh_cnt; CTask *owning_task; CEdFindText *find_replace; I32 start_x,start_y; U8 *cur_sprite; //not document num, but num in a CSprite collection I64 cur_sprite_elem_num; CEdFileName filename; I64 file_attr; I64 (*left_click_link)(CDoc *doc,CDocEntry *doc_e); I64 (*right_click_link)(CDoc *doc,CDocEntry *doc_e); U8 *user_put_data; Bool (*user_put_key)(CDoc *doc,U8 *data,I64 ch,I64 sc); Bool (*user_put_s)(CDoc *doc,U8 *data,U8 *st); CDoc *parent_doc; U8 desc[8]; //Be careful -- only 7 characters and terminator CDocBin bin_root; //size & 7 ==4 CDocSettings settings_root; //size & 7 ==4 CDocUndo undo_root; I64 user_data; U0 pad;#assert !($$&7) //(compiler lags one token) }; //MGetS flags #define GETSF_SHIFT_ESC_EXIT 1 //This kills task on #define GETSF_WITH_NEW_LINE 2 //Compiler Options // Use $LK,"OptOn","MN:OptOn"$() $LK,"OptOff","MN:OptOff"$() //You might need to do #exe {OptOn();} //Note: The #exe statement is lexed-ahead, so it takes effect earlier than you might expect. #define OPTf_ECHO 0x00 #define OPTf_LEX_TRACE 0x01 #define OPTf_PARSE_TRACE 0x02 #define OPTf_OPT_TRACE 0x03 #define OPTf_COMPILE_TRACE 0x04 #define OPTf_WARN_UNUSED_VAR 0x10 //Applied to funs, not statements #define OPTf_WARN_PAREN 0x11 //Warn unnecessary parens #define OPTf_WARN_DUP_TYPES 0x12 //Warn dup local var type statements #define OPTf_EXTERNS_TO_IMPORTS 0x20 #define OPTf_KEEP_PRIVATE 0x21 #define OPTf_NO_REG_VAR 0x22 //Applied to funs, not statements #define OPTf_REPLACE_SYMS 0x23 #define OPTf_GLBLS_ON_DATA_HEAP 0x24 //Disable 10-byte float consts for ã,log2_10,log10_2,loge_2 #define OPTf_NO_BUILTIN_CONST 0x25 //Applied to funs, not statements #define OPTf_USE_LIT64 0x26 //Not completely implemented #define OPTF_ECHO (1<float conversions) I64 cur_ic_float_op_num,last_ic_float_op_num; CIntermediateCode *last_float_op_ic; Bool last_dont_pushable,last_dont_popable,last_float_op_pos, dont_push_float,pad[4]; CLexCodeBlkCtrl cbh; CAsmCtrl *a; I64 a_depth; U0 end_of_zeroed_members; CLexFile lfns[LFN_CNT]; CLexFile stk[LFN_STK_CNT]; U0 pad;#assert !($$&7) //(compiler lags one token) }; class CPCIDev { CPCIDev *next,*last; U16 vendor,dev_id; U8 bus,dev,fun,pad; U8 sub_code,base_code,pad[6]; U8 *vendor_str,*dev_id_str; }; #define TEMPLEOS_XSUM 0xA5CF3796 #define FILENAME_MASK_JIT "*.CPP*;*.HPP*" #define FILENAME_MASK_AOT "*.CPP*;*.HPP*;*.PRJ*" #define FILENAME_MASK_SRC "*.CPP*;*.HPP*;*.AUT*;*.PRJ*" #define FILENAME_MASK_TXT FILENAME_MASK_SRC ";*.TXT*;*.LOG*" #define FILENAME_MASK_GRA "*.GRA*;*.BMP*" public class CMBRPrt { U8 active; //0x80=active 0x00=inactive U8 start_head; U16 start_cyl; U8 type; U8 end_head; U16 end_cyl; U32 offset; //Sects between MBR and first sect U32 size; //Sects in partition }; public class CMasterBoot { U8 boot_code[440]; U32 media_id; U16 zero; CMBRPrt p[4]; U16 signature; //AA55 }; public class CBootStruct { U8 jump_and_nop[3]; U8 signature; //MBR_PT_REDSEA=0x88 U16 U8s_per_sect; U16 sects_per_cluster; I64 sects; I64 root_cluster; U32 bitmap_sects; U32 unique_id; U8 code[478]; U16 signature2; //0xAA55 }; class CFAT32Boot { U8 jump_and_nop[3]; U8 oem_name[8]; U16 bytes_per_sect; U8 sects_per_cluster; U16 reserved_sects; U8 copies_of_fat; U16 max_root_dir_entries; //Not used U16 old_sects_in_prt; //Not used U8 media_desc; //F64 for hard disk U16 old_sects_per_fat; //Not used U16 sects_per_track; U16 num_heads; U32 hidden_sects; U32 sects; U32 sects_per_fat; U16 flags; U16 version; U32 root_cluster; U16 file_system_info_sect; U16 backup_boot_sect; U8 reserved[12]; U8 log_drv_num; U8 unused; U8 ext_signature; //0x29 U32 serial_num; U8 vol_name[11]; U8 fat_name[8]; U8 code[420]; U16 signature; }; class CFAT32FileInfoSect { U32 signature1; U8 unknown[480]; U32 signature2; U32 free_clusters; U32 most_recently_allocated; U8 reserved[12]; U32 signature3; }; class CFAT32DirEntry { U8 name[11]; U8 attr; U8 NTres; U8 CrtTimeTenth; U16 CrtTime; U16 CrtDate; U16 LstAccDate; U16 cluster_hi; U16 WrtTime; U16 WrtDate; U16 cluster_lo; U32 size; }; class CFAT32DirEntryLong { U8 ord; U16 name1[5]; U8 attr; U8 type; U8 xsum; U16 name2[6]; U16 zero; U16 name3[2]; }; #define FAT32_ENTRIES_PER_BLK (BLK_SIZE/sizeof(CFAT32DirEntry)) public class CPalindromeU16 { U16 little,big; }; public class CPalindromeU32 { U32 little,big; }; class CATAPITrack { U16 track_info_len; U8 track_lo; U8 session_lo; U8 reserved; U16 misc1; U8 misc2; U32 track_start; U32 next_writable; U32 free_blks; union { U32 fixed_packet_size; U32 blocking_factor; }; union { U32 track_size; U32 rzone_end; }; U32 last_recorded; U8 track_hi; U8 session_hi; U16 reserved; U32 read_compatibility; U32 next_layer_jmp; U32 last_layer_jmp; }; //ISO1 is ISO9660 //ISO2 is ISO13490 //ISO3 is ISO13346 class CISO1Date { U8 year,mon,day,hour,min,sec,sec100; }; class CISO1DirEntry { U8 len; U8 ext_attr_len; CPalindromeU32 loc; CPalindromeU32 size; CISO1Date date; U8 flags; U8 file_unit_size; U8 interleave; CPalindromeU16 vol_seq_num; U8 name_len; U8 name; }; class CISO1PathEntry { U8 name_len; U8 zero; U32 blk; U16 parent_entry_num; U16 name[1]; //Aligned to U16 boundries }; //9660 #define ISO1T_BOOT_RECORD 0 #define ISO1T_PRI_VOL_DESC 1 #define ISO1T_SUPPLEMENTARY_DESC 2 #define ISO1T_VOL_PRT_DESC 3 #define ISO1T_TERMINATOR 255 class CISO1PriDesc { U8 type; U8 id[5]; U8 version; U8 unused1; U8 system_id[32]; U8 vol_id[32]; U8 unused2[8]; CPalindromeU32 vol_space_size; U8 unused3[32]; CPalindromeU16 vol_set_size; CPalindromeU16 vol_seq_num; CPalindromeU16 log_block_size; CPalindromeU32 path_table_size; U32 type_l_path_table; U32 opt_type_l_path_table; U32 type_m_path_table; U32 opt_type_m_path_table; CISO1DirEntry root_dir_record; U8 vol_set_id[128]; U8 publisher_id[128]; U8 preparer_id[128]; U8 application_id[128]; U8 copyright_file_id[37]; U8 abstract_file_id[37]; U8 bibliographic_file_id[37]; U8 creation_date[17]; U8 modification_date[17]; U8 expiration_date[17]; U8 effective_date[17]; U8 file_structure_version; U8 unused4; U8 application_data[512]; U8 unused5[653]; }; #define ISO1_BASE_YEAR 1900 //media types #define MT_CD 1 #define MT_DVD 2 public class CDateStruct { U8 sec10000,sec100,sec,min,hour; U8 day_of_week,day_of_mon,mon; I32 year; }; //CDirEntry flags (Used by $LK,"FileMgr","MN:FileMgr"$()) #define DEF_PROCESSED 1 #define DEF_REMOVABLE 2 #define DEF_NOT_INITIALIZED 4 #define CDIR_FILENAME_LEN 26 public class CDirEntry { CDirEntry *next,*parent,*sub; U8 *full_name; I64 flags; I64 user_data; U0 start; U16 attr; U8 name[CDIR_FILENAME_LEN]; U32 xsum; I64 cluster; I64 size; I64 expanded_size; CDate datetime; }; #define CDIR_SIZE (sizeof(CDirEntry)-offset(CDirEntry.start)) //See $LK,"ST_BLKDEV_TYPES","MN:ST_BLKDEV_TYPES"$ #define BDT_NULL 0 #define BDT_RAM 1 #define BDT_ATA 2 #define BDT_ATAPI 3 #define BDT_NUM_TYPES 4 #define BDF_REMOVABLE 0x001 #define BDF_INITIALIZED 0x002 #define BDF_READ_ONLY 0x004 #define BDF_READ_ONLY_OVERRIDE 0x008 #define BDF_LAST_WAS_WRITE 0x010 #define BDF_READ_CACHE 0x020 #define BDF_FMT 0x040 #define BDF_INIT_IN_PROGRESS 0x080 #define BDF_EXT_SIZE 0x100 #define BDf_REMOVABLE 0 #define BDf_INITIALIZED 1 #define BDf_READ_ONLY 2 #define BDf_READ_ONLY_OVERRIDE 3 #define BDf_LAST_WAS_WRITE 4 #define BDf_READ_CACHE 5 #define BDf_FMT 6 #define BDf_INIT_IN_PROGRESS 7 #define BDf_EXT_SIZE 8 //locked flags #define BDlf_LOCKED 0 #define NUM_BLKDEVS 32 #define BD_SIGNATURE_VAL 'BDSV' public class CBlkDev { CBlkDev *lock_fwding; I64 locked_flags; U32 type,flags; U32 bd_signature; U8 first_drv_let,unit,pad[2]; U32 base0,base1; U16 read_freq,write_freq; U32 blk_size; I64 offset,min_blk,max_blk; U16 *dev_id_record; U8 *RAM_dsk; CTask *owning_task; F64 last_time; U32 max_reads,max_writes; }; class CATARep { CATARep *next; I64 num,type,base0,base1,unit,irq; }; //Partition locked flags #define Plf_LOCKED 0 //See $LK,"ST_PRT_TYPES","MN:ST_PRT_TYPES"$ #define PT_NULL 0 #define PT_REDSEA 1 //Supported #define PT_FAT32 2 //Supported except for short names, to some degree #define PT_ISO9660 3 //Supported (CD-ROM) #define PT_ISO13490 4 //Not Supported (CD-ROM) #define PT_ISO13346 5 //Not Supported (CD-ROM) #define PT_NTFS 6 //Not Supported #define PT_UNKNOWN 7 #define PT_NUM_TYPES 8 #define PTf_DISABLE 31 //High bit of type is disable #define MBR_PT_FAT12 0x01 #define MBR_PT_FAT32a 0x0B #define MBR_PT_FAT32b 0x0C #define MBR_PT_FAT32c 0x1B #define MBR_PT_FAT32d 0x1C #define MBR_PT_FAT32e 0x8B #define MBR_PT_FAT32f 0x8C #define MBR_PT_NTFS 0x07 #define MBR_PT_REDSEA 0x88 public class CFreeLst { CFreeLst *next,*last; I64 start,size; }; #define NUM_PRTS 32 #define PRT_SIGNATURE_VAL 'PTSV' public class CPrt { //Don't access ->drive directly in case a drive has been remapped. //Use $LK,"Prt2Drv","MN:Prt2Drv"$(). I64 locked_flags; U32 type, //Bit31 is used as a disable, since it will be unknown flags; //Flags not used at the moment U32 pt_signature; U8 drv_let,text_attr,pad[2]; I64 offset; I64 size; I64 file_system_info_sect; I64 map1,map2; I64 root_cluster; I64 data; I64 spc; //sects_per_cluster CTask *owning_task; CBlkDev *bdev; CFAT32FileInfoSect *fis; I64 num_buffered_map_blks; I64 cur_map_blk_num; U32 *cur_map_blk; U8 *buffered_map_dirty_bits; CFreeLst *next_free,*last_free; Bool (*rblks)(CPrt *p,U8 *buf,I64 blk,I64 cnt); Bool (*wblks)(CPrt *p,U8 *buf,I64 blk,I64 cnt); }; #define DSK_CACHE_HASH_SIZE 0x2000 public class CCacheBlk { CCacheBlk *next_lru,*last_lru; CCacheBlk *next_hash,*last_hash; CPrt *p; I64 blk; U8 body[BLK_SIZE]; }; #define EXCEPT_LOCAL 0 // good for narrow scope user handling #define EXCEPT_BREAK 1 #define EXCEPT_OUT_OF_MEM 2 #define EXCEPT_DIVIDE_BY_ZERO 3 #define EXCEPT_FLOATING 4 #define EXCEPT_COMPILER 5 #define EXCEPT_UNDEF_DEFINE 6 #define EXCEPT_UNDEF_EXTERN 7 #define EXCEPT_FILE 8 #define EXCEPT_ARC_XSUM 9 #define EXCEPT_PRT 10 #define EXCEPT_BLKDEV 11 #define EXCEPT_GRAPHICS 12 #define EXCEPT_SPRINTF 13 #define EXCEPT_GETF 14 #define EXCEPT_BIN_MODULE 15 #define EXCEPT_MULTICORE 16 #define EXCEPT_FUF 17 #define EXCEPT_FLAGS 18 //$LK,"EXCEPT_DEFINE","FF:::/TempleOS/Kernel/Define1a.CPP,ST_EXCEPT"$ class CExcept { CExcept *next,*last; I64 handler_catch,handler_untry; I64 rsp,rbp,rflags; I64 rsi,rdi,r10,r11, r12,r13,r14,r15; }; #define MBS_USED_SIGNATURE_VAL 'MBUs' #define MBS_UNUSED_SIGNATURE_VAL 'MBUn' class CMemBlk { CMemBlk *next,*last; U32 mb_signature; U32 pages; }; #define MRT_UNUSED 0 #define MRT_RAM 1 #define MRT_DEV 2 class CMemRange { CMemRange *next,*last; U32 type,flags; U8 *base; I64 size; }; #define _CFG_HEAP_DBG FALSE #if _CFG_HEAP_DBG class CMemUnusedAllocated { CHeapCtrl *hc; U8 *caller1,*caller2; CMemUnusedAllocated *next; I64 size; }; class CMemUsedAllocated { CHeapCtrl *hc; U8 *caller1,*caller2; CMemUsedAllocated *next,*last; I64 size; U0 start; }; #else class CMemUnusedAllocated { U0 hc; U0 caller1,caller2; CMemUnusedAllocated *next; I64 size; }; class CMemUsedAllocated { CHeapCtrl *hc; U0 caller1,caller2; U0 next,last; I64 size; U0 start; }; #endif //TempleOS does not mess with page tables after it //identity-maps them during boot -- $LK,"SYS_INIT_MEM","MN:SYS_INIT_MEM"$. //$LK,"PAGE_SIZE","MN:PAGE_SIZE"$ is arbitrary, and is not related to CPU hardware. //I need some unit for memory allocation so I invented "$LK,"PAGE_SIZE","MN:PAGE_SIZE"$". // //All virtual addresses are identical to physical, always. //There is no high kernel memory because RAM's physical //addresses are low. (All motherboards that I know of //put RAM in low addresses of 64-bit address space.) //It's ring-0-only so all (or none) is kernel, remember. // //2 Meg hardware pages are use except the first 2 Meg. //0xA0000-0xBFFFF must be write thru. Hardware pages //don't matter except the caching bit. Remember, it is ring-0-only //and identity-mapped! Do I need to repeat? //Ring-0-only and 100% identity-mapped, all the time. // //All code is placed in just the lowest 2 Gig, so the CALL REL32 //instruction always works. It never changes out of ring-0, remember, //so I don't need to waste cycles on use SYSCALL or software interrupts. //Everything just uses CALL REL32. #define PAGE_BITS 9 #define PAGE_SIZE (1<answers[0]) #define ans0 (Fs->answers[0]) #define ans1 (Fs->answers[1]) #define ans2 (Fs->answers[2]) #define ans3 (Fs->answers[3]) #define ansf (Fs->answers[0](F64)) #define ansf0 (Fs->answers[0](F64)) #define ansf1 (Fs->answers[1](F64)) #define ansf2 (Fs->answers[2](F64)) #define ansf3 (Fs->answers[3](F64)) #define KBD_PORT 0x60 #define KBD_CTRL 0x64 #define CH_CTRLA 0x01 #define CH_CTRLB 0x02 #define CH_CTRLC 0x03 #define CH_CTRLD 0x04 #define CH_CTRLE 0x05 #define CH_CTRLF 0x06 #define CH_CTRLG 0x07 #define CH_CTRLH 0x08 #define CH_CTRLI 0x09 #define CH_CTRLJ 0x0A #define CH_CTRLK 0x0B #define CH_CTRLL 0x0C #define CH_CTRLM 0x0D #define CH_CTRLN 0x0E #define CH_CTRLO 0x0F #define CH_CTRLP 0x10 #define CH_CTRLQ 0x11 #define CH_CTRLR 0x12 #define CH_CTRLS 0x13 #define CH_CTRLT 0x14 #define CH_CTRLU 0x15 #define CH_CTRLV 0x16 #define CH_CTRLW 0x17 #define CH_CTRLX 0x18 #define CH_CTRLY 0x19 #define CH_CTRLZ 0x1A #define CH_CURSOR 0x05 #define CH_BACKSPACE 0x08 #define CH_FORM_FEED 0x0C #define CH_ESC 0x1B #define CH_SHIFT_ESC 0x1C #define CH_SHIFT_SPACE 0x1F #define CH_SPACE 0x20 //Scan code flags #define SCf_E0_PREFIX 7 #define SCf_KEY_UP 8 #define SCf_SHIFT 9 #define SCf_CTRL 10 #define SCf_ALT 11 #define SCf_CAPS 12 #define SCf_NUM 13 #define SCf_SCROLL 14 #define SCf_NEW_KEY 15 #define SCf_IP_L_DOWN 16 #define SCf_IP_R_DOWN 17 #define SCf_DELETE 18 #define SCf_INS 19 #define SCf_KEY_DESC 31 #define SCF_E0_PREFIX (1<rax #define _RBX Fs->rbx #define _RCX Fs->rcx #define _RDX Fs->rdx #define _RSI Fs->rsi #define _RDI Fs->rdi #define _RBP Fs->rbp #define _RSP Fs->rsp #define _RIP Fs->rip #define _R8 Fs->r8 #define _R9 Fs->r9 #define _R10 Fs->r10 #define _R11 Fs->r11 #define _R12 Fs->r12 #define _R13 Fs->r13 #define _R14 Fs->r14 #define _R15 Fs->r15 #define CREG_RAX 0 #define CREG_RCX 1 #define CREG_RDX 2 #define CREG_RBX 3 #define CREG_RSP 4 #define CREG_RBP 5 #define CREG_RSI 6 #define CREG_RDI 7 #define CREG_RIP 16 //Used by compiler, not really it's num //Be careful: RBPu8, RSPu8, RSIu8, RDIu8 are 20-24 #define CREG_NONE 32 //noreg flag sets it to this #define CREG_ALLOC 33 //reg flag sets it to this #define CREG_UNDEF MIN_I8 #define CALWAYS_CLOBBERED_MASK 0x003F //RAX,RCX,RDX,RBX,RBP,RSP #define CSTK_TEMPS_MASK 0x0300 //R8,R9 #define CREG_VARS_MASK 0xCCC0 //RSI,RDI,R10,R11,R14,R15 #define CREG_NON_PTR_MASK 0x3000 //R12,R13 #define PUSH_C_REGS PUSH RAX PUSH RCX PUSH RDX PUSH RBX PUSH R8 PUSH R9 #define POP_C_REGS POP R9 POP R8 POP RBX POP RDX POP RCX POP RAX #define PUSH_REGS PUSH RAX PUSH RCX PUSH RDX PUSH RBX PUSH RBP PUSH RSI \ PUSH RDI PUSH R8 PUSH R9 PUSH R10 PUSH R11 PUSH R12 PUSH R13 PUSH R14 PUSH R15 #define POP_REGS POP R15 POP R14 POP R13 POP R12 POP R11 POP R10 POP R9 \ POP R8 POP RDI POP RSI POP RBP POP RBX POP RDX POP RCX POP RAX #define MAPPED_MEM_SPACE 0x2000000000 //Arbitrarily set to 128 Gig #define PAGE_TABLE_BASE 0x100000 #define NUM_PML1 1 //First 2 Meg are 4K resolution #define NUM_PML2 (MAPPED_MEM_SPACE>>(9+21)) #define NUM_PML3 1 #define NUM_PML4 1 #define PAGE_TABLE_SIZE (NUM_PML1+NUM_PML2+NUM_PML3+NUM_PML4)*0x1000 #define PROTECTED_LOW_PAGE_LIMIT 0x6FFF #define ST_ERR_ST "$$FG,LTRED$$$$BK,1$$ERROR:$$FG$$$$BK,0$$ " #define ST_WARN_ST "$$FG,RED$$$$BK,1$$WARNING:$$FG$$$$BK,0$$ " class CSndData { CSndData *next,*last; F64 freq; //Hz F64 time_stamp; }; //sys_raw_dc_flags flags #define RDCF_IN_DOLLAR 1 #define RDCF_LAST_DOLLAR 2 #define RDCF_SHOW_DOLLAR 4 #define RDCF_SCROLL 8 //Input ptr types #define IP_NULL 0 #define IP_MOUSE 1 #define PSECT_CACHE_SIZE 256 class CPSectCache { I64 base,limit; F64 time_stamp; U8 str[1]; //PSECT_CACHE_STR_LEN $$=64; }; #define PSECT_CACHE_STR_LEN (sizeof(CPSectCache)-offset(CPSectCache.str))