summaryrefslogtreecommitdiff
path: root/jefs.s
diff options
context:
space:
mode:
Diffstat (limited to 'jefs.s')
-rw-r--r--jefs.s33
1 files changed, 29 insertions, 4 deletions
diff --git a/jefs.s b/jefs.s
index 4050289..b58c691 100644
--- a/jefs.s
+++ b/jefs.s
@@ -81,6 +81,7 @@
;; syscall
%assign __NR_read 0
%assign __NR_write 1
+%assign __NR_mprotect 10
%assign __NR_brk 12
%assign __NR_exit 60
;; }}}
@@ -100,11 +101,36 @@ _start:
mov r14, wstack ; point SP to top
mov qword [rs0], rsp
+ call zero_here
+
call interpret
mov rdi, 0
mov rax, __NR_exit
syscall
+; i could separate this but i wanna have do in forth. euj
+defword "0here", zero_here, 0
+ ; get current brk
+ xor rdi, rdi
+ mov rax, __NR_brk
+ syscall
+ mov qword [here], rax
+ mov qword [herestart], rax
+
+ ; expand it to 640k
+ add rax, 0x9c400
+ mov rdi, rax
+ mov rax, __NR_brk
+ syscall
+ mov qword [heremax], rax
+
+ mov rdx, 0x7 ; PROT_EXEC | PROT_READ | PROT_WRITE
+ mov rsi, 0x9c400
+ mov rdi, qword [here]
+ mov rax, __NR_mprotect
+ syscall
+ ret
+
defword "bye", bye, 0
mov rdi, 0
mov rax, __NR_exit
@@ -1177,14 +1203,13 @@ defvar "tib", tib, 0, initfile
defvar "#tib", num_tib, 0, initlen
defvar ">in", to_in, 0, 0
defvar "state", state, 0, interpreting
-defvar "here", here, 0, umem
+defvar "here", here, 0, 0
defvar "s0", s0, 0, wstack
-defvar "herestart", herestart, 0, umem ; beginning of user memory area
+defvar "herestart", herestart, 0, 0
defvar "rs0", rs0, 0, 0
-defvar "heremax", heremax, 0, umem_e ; ending of user memory area
+defvar "heremax", heremax, 0, 0 ; ending of user memory area
defvar "base", base, 0, 10
defvar "error", error, 0, 0
-; defvar "handler", handler, 0, brac_handler
defvalue "handler", handler, 0, brac_handler
defvar "latest", latest, 0, lfa_latest