-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathMEMMAP.4TH
More file actions
101 lines (88 loc) · 3.95 KB
/
MEMMAP.4TH
File metadata and controls
101 lines (88 loc) · 3.95 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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
57
58
59
60
61
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
98
99
100
101
// This file describes the memory structure of Common Forth 1.7XX
// Version 1.7
// Last update : 02/18/'97
// 11/15/'96 : Put |DATA-STACK under |RETURN-STACK, so that nesting
// C/FORTH call will not cause 'Stack underflow !' error since
// every nesting call switch data/return stack once.
// 02/09/'97 : Enlarge |FBUF-SAFETY|. Move constant BASE-ADDRESS to CF0.4TH .
// 02/18/'97 : STRUCT.4TH is modified for data alignments. No more padding
// field for data alignments.
: K ( n -- nK ) 1024 * ; 1 1 #PARMS MACRO
: M ( n -- nM ) [ 1024 K ] LITERAL * ; 1 1 #PARMS MACRO
4 M CONSTANT CF-MemorySpace
1024 CELL* CONSTANT |HASHTABLE| // Hash Table size
128 CELL* CONSTANT |USERS| // user space size 128 vars
256 16 + CONSTANT |FBUF-SAFETY|
64 CONSTANT #TASKS
64 CONSTANT #BUFFERS
// -----------------------------------------------------------
STRUCT: HighMemoryMap
4 K FIELD: |FORTH-VOCTABLE
16 FIELD: |END-FORTH-VOCTABLE
|USERS| #TASKS * FIELD: |USER-AREA // support 64 tasks
16 FIELD: |END-USER-AREA
// There are 256 bytes safety margin between two buffers.
4 K |FBUF-SAFETY| + FIELD: |TERMINAL-INPUT-BUFFER
#BUFFERS 1- 4 K |FBUF-SAFETY| + *
FIELD: |BUFFERS // 63 other buffers
32 FIELD: |END-BUFFERS
8 K #TASKS * FIELD: |RETURN-STACK
32 FIELD: |END-RETURN-STACK
8 K #TASKS * FIELD: |DATA-STACK
32 FIELD: |END-DATA-STACK
;STRUCT
// -----------------------------------------------------------
// --------------------------------------------------------------------------
STRUCT: CF-MemoryMap
// -------------- Startup Codes Area --------------------
4 K FIELD: |STARTUP-CODES
// -------------- Loader Environment --------------------
STRUCT: LoaderEnviron
WORD: |ARGC
WORD: |ARGV
WORD: |ENVP
WORD: |C(++)Linking() INVISIBLE
WORD: |C(++)EndLinking() INVISIBLE
WORD: |C(++)FarPatch INVISIBLE // Not used yet.
// Only CS, DS and ES, SS are setup by loader, all other registers
// are saved by CF's initial codes. This data structure is
// compatiable to DPMI funcion call $0300 .
// With INVOKEC.4TH , C function SimulateRealModeInterrupt
STRUCT: RegPair386:
WORD: |EDI
WORD: |ESI
WORD: |EBP // MUST be restored
WORD: |Reserved_zeros INVISIBLE
WORD: |EBX
WORD: |EDX
WORD: |ECX
WORD: |EAX
HWORD: |FLAGS
HWORD: |ES // * setup by loader
HWORD: |DS // * setup by loader
HWORD: |FS
HWORD: |GS
HWORD: |IP
HWORD: |CS // * setup by loader
HWORD: |SP
HWORD: |SS // * setup by loader
WORD: |ESP // MUST be restored
;STRUCT: |OriginalRegisters INVISIBLE // original reg. values
256 FIELD: |LoadingInfo INVISIBLE
// Conventional memory info : 07/10/'96..07/11/'96
WORD: |TransferBuf // real mode transfer buffer address
WORD: |TransferSiz // real mode transfer buffer size
WORD: |DOS-Selector // real mode selector
;STRUCT: |INIT-ENVIRON
// ------------- COLD Boot vector ------------------------
WORD: |COLD-VECTOR
// ------------- Code/Free/Head Space --------------------
CF-MemorySpace SIZEOF |STARTUP-CODES - SIZEOF LoaderEnviron -
SIZEOF |COLD-VECTOR - SIZEOF HighMemoryMap -
FIELD: |CODE&HEAD-SPACE
// ------------- User areas/Buffers/Stacks -----------------
HighMemoryMap |WORK-SPACE
;STRUCT
// --------------------------------------------------------------------------
BASE-ADDRESS |WORK-SPACE |END-FORTH-VOCTABLE CONSTANT HP0