From 2fd4c800862e145194e9acd7cdb46f5a944bec11 Mon Sep 17 00:00:00 2001 From: TruePac Date: Sat, 16 Jun 2018 19:04:04 +0300 Subject: [PATCH 01/17] parity check --- part_1/parity.frt | 1 + 1 file changed, 1 insertion(+) create mode 100644 part_1/parity.frt diff --git a/part_1/parity.frt b/part_1/parity.frt new file mode 100644 index 0000000..5e59f03 --- /dev/null +++ b/part_1/parity.frt @@ -0,0 +1 @@ +: iseven 2 % not ; \ No newline at end of file From 9e8b381f730b189f3258174ea585aec6ffe0fdfb Mon Sep 17 00:00:00 2001 From: TruePac Date: Fri, 22 Jun 2018 22:09:30 +0300 Subject: [PATCH 02/17] forthress finally working + some words parity word fixed + prime check word --- .gitignore | 3 - Makefile | 47 --------- doc-engine.frt | 74 -------------- documentation.frt | 14 --- LICENSE => forthress/LICENSE | 0 forthress/Makefile | 30 ++++++ README.md => forthress/README.md | 20 ++-- forthress/bin/forthress | Bin 0 -> 21240 bytes diagnostics.frt => forthress/diagnostics.frt | 0 fib.frt => forthress/fib.frt | 6 ++ hash.frt => forthress/hash.frt | 0 heap.frt => forthress/heap.frt | 0 .../managed-string.frt | 4 +- mmap.frt => forthress/mmap.frt | 0 forthress/obj/forthress.o | Bin 0 -> 28496 bytes forthress/obj/util.o | Bin 0 -> 6112 bytes forthress/part1/parity.frt | 1 + forthress/part1/prime.frt | 11 ++ recursion.frt => forthress/recursion.frt | 0 .../runtime-meta.frt | 0 {src => forthress/src}/forthress.asm | 0 {src => forthress/src}/macro.inc | 0 {src => forthress/src}/util.asm | 0 {src => forthress/src}/util.inc | 0 {src => forthress/src}/words.inc | 52 ---------- start => forthress/start | 0 stdlib.frt => forthress/stdlib.frt | 96 ++++-------------- string.frt => forthress/string.frt | 4 +- part_1/parity.frt | 1 - 29 files changed, 81 insertions(+), 282 deletions(-) delete mode 100644 .gitignore delete mode 100644 Makefile delete mode 100644 doc-engine.frt delete mode 100644 documentation.frt rename LICENSE => forthress/LICENSE (100%) create mode 100644 forthress/Makefile rename README.md => forthress/README.md (96%) create mode 100644 forthress/bin/forthress rename diagnostics.frt => forthress/diagnostics.frt (100%) rename fib.frt => forthress/fib.frt (93%) rename hash.frt => forthress/hash.frt (100%) rename heap.frt => forthress/heap.frt (100%) rename managed-string.frt => forthress/managed-string.frt (58%) rename mmap.frt => forthress/mmap.frt (100%) create mode 100644 forthress/obj/forthress.o create mode 100644 forthress/obj/util.o create mode 100644 forthress/part1/parity.frt create mode 100644 forthress/part1/prime.frt rename recursion.frt => forthress/recursion.frt (100%) rename runtime-meta.frt => forthress/runtime-meta.frt (100%) rename {src => forthress/src}/forthress.asm (100%) rename {src => forthress/src}/macro.inc (100%) rename {src => forthress/src}/util.asm (100%) rename {src => forthress/src}/util.inc (100%) rename {src => forthress/src}/words.inc (91%) rename start => forthress/start (100%) mode change 100755 => 100644 rename stdlib.frt => forthress/stdlib.frt (81%) rename string.frt => forthress/string.frt (91%) delete mode 100644 part_1/parity.frt diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 4832c3b..0000000 --- a/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -bin/ -obj/ -*.swp diff --git a/Makefile b/Makefile deleted file mode 100644 index c4bd48c..0000000 --- a/Makefile +++ /dev/null @@ -1,47 +0,0 @@ -# ------------------------------------------------ -# Forthress, a Forth dialect -# -# Author: igorjirkov@gmail.com -# Date : 02-04-2018 -# -# ------------------------------------------------ - -ASM = nasm -ASMFLAGS = -felf64 -g -Isrc/ - - -NATIVE_CALLS_SUPPORT=1 - -# This feature allows you to call functions from libc and other shared libraries. -# You get support for native calls by address and dlsym. -ifdef NATIVE_CALLS_SUPPORT -LINKERFLAGS = -nostdlib -LIBS = -ldl -LINKER = gcc -ASMFLAGS += -DNATIVE_CALLS -else -LINKER = ld -LINKERFLAGS = -LIBS = -endif - - -all: bin/forthress - -bin/forthress: obj/forthress.o obj/util.o - mkdir -p bin - $(LINKER) -o bin/forthress $(LINKERFLAGS) -o bin/forthress obj/forthress.o obj/util.o $(LIBS) - -obj/forthress.o: src/forthress.asm src/macro.inc src/words.inc src/util.inc - mkdir -p obj - $(ASM) $(ASMFLAGS) src/forthress.asm -o obj/forthress.o - -obj/util.o: src/util.inc src/util.asm - mkdir -p obj - $(ASM) $(ASMFLAGS) src/util.asm -o obj/util.o - -clean: - rm -rf build obj - -.PHONY: clean - diff --git a/doc-engine.frt b/doc-engine.frt deleted file mode 100644 index 99212f4..0000000 --- a/doc-engine.frt +++ /dev/null @@ -1,74 +0,0 @@ -( -This file implements Forthress documentation engine. To use it, place a -string on the stack before defining a new word, and use `wit-doc` after -semicolon to create documentation entry for the last word defined. -) - -global doc-start -0 doc-start ! - -struct - cell% field >doc-next - cell% field >doc-addr - cell% field >doc-string -end-struct doc-header% - -( word-address docstring ) -: doc-word - swap - doc-header% allot >r - swap - r@ >doc-string ! - doc-start @ r@ >doc-next ! - r@ >doc-addr ! - r> doc-start ! -; - -( string - ) -: with-doc last_word @ cfa swap doc-word ; - -g" -( addr - doc-header? ) -Given an XT of a word, finds a relevant `doc-header` in the documentation DB -" -: doc-find - doc-start @ - repeat - dup 0 = if 2drop 0 1 ( return 0 ) - else - 2dup >doc-addr @ = if - swap drop 1 - else >doc-next @ 0 - then - then - until -; with-doc - -g" -( addr - ) -Display documentation for the word address -" -: doc-show dup doc-find dup if - >doc-string @ dup if - cr - ." # Documentation for " swap ? cr - prints cr - ." ------" cr - else 2drop ." Error: empty documentation string " then - else drop ." No documentation for " ? cr then -; with-doc - -g" -Alias for `doc-show` -" -: ?? doc-show ; with-doc - -' doc-word g" -( word-address docstring ) -Document an existing word with a documenting string. Prefer using global strings for that matter. -" doc-word - -' doc-start g" -Global variable storing the address of documentation database. -The database itself is a linked list of `doc-header` structures. -" doc-word diff --git a/documentation.frt b/documentation.frt deleted file mode 100644 index c8ea719..0000000 --- a/documentation.frt +++ /dev/null @@ -1,14 +0,0 @@ -' dup g" -( a - a a ) -Duplicate the cell on top of the stack. -" doc-word - -' drop g" -( a -- ) -Drop the topmost element of the stack -" doc-word - -' swap g" -( a b -- b a ) -Swap two topmost elements of the stack -" doc-word diff --git a/LICENSE b/forthress/LICENSE similarity index 100% rename from LICENSE rename to forthress/LICENSE diff --git a/forthress/Makefile b/forthress/Makefile new file mode 100644 index 0000000..0b4912f --- /dev/null +++ b/forthress/Makefile @@ -0,0 +1,30 @@ +# ------------------------------------------------ +# Forthress, a Forth dialect +# +# Author: igorjirkov@gmail.com +# Date : 15-10-2016 +# +# ------------------------------------------------ + +ASM = nasm +FLAGS = -felf64 -g -Isrc/ +LINKER = ld + +all: bin/forthress + +bin/forthress: obj/forthress.o obj/util.o + mkdir -p bin + ld -o bin/forthress obj/forthress.o obj/util.o + +obj/forthress.o: src/forthress.asm src/macro.inc src/words.inc src/util.inc + mkdir -p obj + $(ASM) $(FLAGS) src/forthress.asm -o obj/forthress.o + +obj/util.o: src/util.inc src/util.asm + mkdir -p obj + $(ASM) $(FLAGS) src/util.asm -o obj/util.o +clean: + rm -rf build obj + +.PHONY: clean + diff --git a/README.md b/forthress/README.md similarity index 96% rename from README.md rename to forthress/README.md index e5734f7..54ed208 100644 --- a/README.md +++ b/forthress/README.md @@ -33,12 +33,12 @@ Programming: C, Assembly, and Program Execution on Intel x86-64 Architecture"](h * `dup` ( a -- a a ) * `rot` ( a b c -- b c a ) * Arithmetic: - * `+` ( x y-- [ x + y ] ) - * `*` ( x y-- [ x * y ] ) - * `/` ( x y-- [ x / y ] ) - * `%` ( x y-- [ x mod y ] ) - * `-` ( x y-- [x - y] ) - * `<` ( x y-- [x < y] ) + * `+` ( y x -- [ x + y ] ) + * `*` ( y x -- [ x * y ] ) + * `/` ( y x -- [ x / y ] ) + * `%` ( y x -- [ x mod y ] ) + * `-` ( y x -- [x - y] ) + * `<` ( y x -- [x < y] ) * Logic: * `not` ( a -- a' ) a' = 0 if a != 0 @@ -142,12 +142,12 @@ Prints a certain amount of characters from string. ( addr -- value ) Fetch value from memory. * `!` - ( val addr -- ) + ( addr val -- ) Store value by address. -* `c!` - ( char addr -- ) +* `!c` + ( addr char -- ) Store one byte by address. -* `c@` +* `@c` ( addr -- char ) Read one byte starting at addr. * `,` diff --git a/forthress/bin/forthress b/forthress/bin/forthress new file mode 100644 index 0000000000000000000000000000000000000000..6d3f9d1d52793e186eb3121a8d7cd183a5ffad06 GIT binary patch literal 21240 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 b@a&4F_k6`9{KvLmb3#meta-is-value ! -: string-show ." Str: " QUOTE emit prints QUOTE emit ." \"" ; +: string-show ." Str: " QUOTE prints QUOTE ." \"" ; ' string-show string >meta-printer ! : m" ' h" execute compiling if ' dup , ' string , ' manage , - else dup string manage then ; IMMEDIATE + else dup string manage then ; diff --git a/mmap.frt b/forthress/mmap.frt similarity index 100% rename from mmap.frt rename to forthress/mmap.frt diff --git a/forthress/obj/forthress.o b/forthress/obj/forthress.o new file mode 100644 index 0000000000000000000000000000000000000000..3bc3391484145cc46a370d86d1bfb8ba3fd2df98 GIT binary patch literal 28496 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 literal 0 HcmV?d00001 diff --git a/forthress/obj/util.o b/forthress/obj/util.o new file mode 100644 index 0000000000000000000000000000000000000000..8135aca8efb7a303ee67bd7acc6f6370e70d677b GIT binary patch literal 6112 zcmbW5e{ht=9mXF*_*rZ+mO@&sjYt)1xF$#?(32+dRbMo;*rI`!CLGC;L@$?k_ohIl zcxZ4EpcXr{Lv5sK%Z!Z0N-NrwVmUbEmv%(7Q>MicXB@pYFcTdpbn1BBec#=0E)SXh z(Ve+_pU<=3{l2^V?z?-*!?)MoQ7~#0Y#D|57$WNeRYTI~Don)aJoo>T`d<3OnbHM8 zzVVc{ka(P8-F__jCrtY|4W^jlu29VP)*)5qMt4&@rNdNJZ*Da#a*Ju-XDY|2+9LI_ z{Vy@mpI6tB?q9A4rpjG(Lqgo3Vr)*of%!_AiL>|7F}f=@*7~!Q$2oP1KGS}SnOOTA zZ2L(%NR>+U8L|I*u&R7AxX8C{Z;fgtCRoV3R+;v;AG%6UiEYo%(KdA}(y8z`cw^jL zdf-B4|3p<$=k~mx)q`)y)Mfvk%jN3bo`d~*)cf^U(U^?eb4kVA5BJft#cuAk>VDnK ztvI>h;$Z4{xpKOvx*O7+=d$}$YxmJZB^h@^Zq2c}{WDcuwpW=A?!~tU`ZtaX&-4lg zO5EI$tnQ(E@szvaq*v(X4rWx(GB$DAtvFU&^x~wV>eRo>6D8_> z>ZqGLFz}Y!b3C(g+`O@!s#8bY+~KZt=b+zjKbh)oMcUmI{(`y@+@AOL27_6WslIPv z#lPyZr**f&rQU_`MDK&}72dh<1n(bRX>Vptcj24`xx;nYy(Z!+6){ysd`d+WsfbT3 zSpV_IDybUE8#RXu=cw$LYI{DcuFq_o+C9bexYxc{= z=k>bU_`DDF8vil>I`s9d@t+*Be09|L&yau0_hxM;p-8d~t?`DHO;F3Y zHQwA1i^iM1mf;kNwYPVW6^%EcL$&Z4;?Y&H)_BxVV@o7qWRTH7rwYxJLCPS3UlU0r zqYcAUDB0Q^kE*-as!%kMXjjR74)TdK`G#2c&kQO0U}q$j98RHlI}*`IQ-j}MU#)6S zGzFekq3S$clc#U9i5lBG)|lsT-dy#Dd-NQvTe zg)R^V^Gs8jg5uyhd`|Rq)!Os(d+Ox(GTM-(J8zwdOh9|{RrL@-37gm>*8Po{uxN6yJi1&)YCdA{zeRn z-h@k{H{(B|e_%HgmFIC3=*>hG2S3DU(OY590S7;ZJ~M)tZF1f^>Pb%&|49^y{u%UH z62$l7O3_bYvgqxYBKqej5#5L2T-W{i1+EtVm$*jsuTUy_2d0UB8urY0uoE-He+D;+ z{x!-(??Q#>XA%59(D(ffW{dwEZV|m3m7;%(d7^)Zu;}NZ&&y!!dr&3%1=NUs5sv8J z;||gNSSWfgzApMD*xxLUTFv)~pT<(r2e3@^LDY+W8TQ-bQTq zA)9YE)$b#=dxnjFlj_e9pCz{MrfqNEH_P@NvTWZ4%XWQRwrke1U3->m&GWOogt&>g zgLo}*H}O{DKH^=({-1AZPHcY;QT++x)5KZg^ThT?l+8cM{HU^ALOh+goH$JE5-%oR zP8=g%P25Gig}9e^C-ENQH1Vs%r-&K#HGY##FfMj@gm}7#4W@g zaf)~|@iyWe#Jh?25g#RfllTnrS>j8?g@wTeVdt}$_-f)A#IuR3h--p4=7&Cl6ClQwrPbV%X4ime?i;0&L$B0)GcM)$P?j_zy tyoWeV{3`J&;&+J$i9aG9KX&;1P9`oTE+eiac8C`dFC%Ut_J~u&{{?ynLfZfU literal 0 HcmV?d00001 diff --git a/forthress/part1/parity.frt b/forthress/part1/parity.frt new file mode 100644 index 0000000..bff8d42 --- /dev/null +++ b/forthress/part1/parity.frt @@ -0,0 +1 @@ +: is_even 2 % not ; IMMEDIATE diff --git a/forthress/part1/prime.frt b/forthress/part1/prime.frt new file mode 100644 index 0000000..e8cbf86 --- /dev/null +++ b/forthress/part1/prime.frt @@ -0,0 +1,11 @@ +: is_prime + dup 2 < if ." Incorrect argument. Must be positive integer greater than 1" else + 1 >r + repeat + dup + r> 1 + dup >r + % 0 = + until + r> = + then +; IMMEDIATE diff --git a/recursion.frt b/forthress/recursion.frt similarity index 100% rename from recursion.frt rename to forthress/recursion.frt diff --git a/runtime-meta.frt b/forthress/runtime-meta.frt similarity index 100% rename from runtime-meta.frt rename to forthress/runtime-meta.frt diff --git a/src/forthress.asm b/forthress/src/forthress.asm similarity index 100% rename from src/forthress.asm rename to forthress/src/forthress.asm diff --git a/src/macro.inc b/forthress/src/macro.inc similarity index 100% rename from src/macro.inc rename to forthress/src/macro.inc diff --git a/src/util.asm b/forthress/src/util.asm similarity index 100% rename from src/util.asm rename to forthress/src/util.asm diff --git a/src/util.inc b/forthress/src/util.inc similarity index 100% rename from src/util.inc rename to forthress/src/util.inc diff --git a/src/words.inc b/forthress/src/words.inc similarity index 91% rename from src/words.inc rename to forthress/src/words.inc index a542869..433c4e0 100644 --- a/src/words.inc +++ b/forthress/src/words.inc @@ -382,58 +382,6 @@ native "syscall", syscall push rdx jmp next -%ifdef NATIVE_CALLS - -extern dlsym -native "p_dlsym", p_dlsym - push dlsym - jmp next - - -; Experimental feature: native call -; The stack should hold these values, in this order -; ( function* rdi rsi rdx rcx r8 r9 rax xmm0 xmm1 xmm2 xmm3 xmm4 xmm5 xmm6 xmm7 ) -; After that, the stack will hold these values: -; ( rax rdx xmm0 xmm1 ) -; This way you can call everything even functions with variable arguments count. -; Notice, that you can pass additional integer/pointer arguments on stack, as -; Forthress data stack corresponds to the hardware stack! -native "ncall", ncall - pop rax, - movq xmm7, rax - pop rax - movq xmm6, rax - pop rax - movq xmm5, rax - pop rax - movq xmm4, rax - pop rax - movq xmm3, rax - pop rax - movq xmm2, rax - pop rax - movq xmm1, rax - pop rax - movq xmm0, rax - pop rax - pop r9 - pop r8 - pop rcx - pop rdx - pop rsi - pop rdi - add rsp, 8 - call [rsp-8] - push rax - push rdx - movq rcx, xmm0 - push rcx - movq rcx, xmm1 - push rcx - jmp next - -%endif - ; Jump to a location. Location is an absolute address ; Branch is a compile-only word. native "branch", branch diff --git a/start b/forthress/start old mode 100755 new mode 100644 similarity index 100% rename from start rename to forthress/start diff --git a/stdlib.frt b/forthress/stdlib.frt similarity index 81% rename from stdlib.frt rename to forthress/stdlib.frt index b465da3..76595d3 100644 --- a/stdlib.frt +++ b/forthress/stdlib.frt @@ -1,15 +1,6 @@ -: IMMEDIATE last_word @ cfa 1 - dup c@ 1 or swap c! ; +: > < not ; -: rot >r swap r> swap ; -: -rot swap >r swap r> ; - -: over >r dup r> swap ; -: 2dup over over ; - -: <> = not ; -: <= 2dup < -rot = lor ; -: > <= not ; -: >= < not ; +: IMMEDIATE last_word @ cfa 1 - dup @ 1 or swap c! ; : cell% 8 ; @@ -17,8 +8,6 @@ : KB 1024 * ; : MB KB KB ; -: allot dp @ swap over + dp ! ; - : begin here ; IMMEDIATE : again ' branch , , ; IMMEDIATE @@ -30,52 +19,14 @@ : repeat here ; IMMEDIATE : until ' 0branch , , ; IMMEDIATE - -: for - ' swap , - ' >r , - ' >r , -here ' r> , - ' r> , - ' 2dup , - ' >r , - ' >r , - ' < , - ' 0branch , -here 0 , - swap ; IMMEDIATE - -: endfor - ' r> , - ' lit , 1 , - ' + , - ' >r , - ' branch , - , here swap ! - ' r> , - ' drop , - ' r> , - ' drop , - -; IMMEDIATE +: for ' >r , here ' dup , ' r@ , ' > , ' 0branch , here 0 , swap ; IMMEDIATE +: endfor ' r> , ' lit , 1 , ' + , ' >r , ' branch , , here swap ! ' r> , ; IMMEDIATE : do ' swap , ' >r , ' >r , here ; IMMEDIATE -: loop - ' r> , - ' lit , 1 , - ' + , - ' dup , - ' r@ , - ' < , - ' not , - ' swap , - ' >r , - ' 0branch , , - ' r> , - ' drop , - ' r> , - ' drop , +: loop ' r> , ' lit , 1 , ' + , ' dup , ' r@ , ' < , ' not , ' swap , ' >r , ' 0branch , , +' r> , ' drop , +' r> , ' drop , ; IMMEDIATE @@ -92,7 +43,12 @@ here 0 , ( Now we can define comments :) +( a b c -- b c a ) +: rot >r swap r> swap ; +: -rot swap >r swap r> ; +: over >r dup r> swap ; +: 2dup over over ; : 2drop drop drop ; : 2over >r >r dup r> swap r> swap ; : case 0 ; IMMEDIATE @@ -100,6 +56,10 @@ here 0 , : endof ' else execute ; IMMEDIATE : endcase ' drop , dup if repeat ' then execute dup not until drop then ; IMMEDIATE +: <> = not ; +: <= 2dup < -rot = lor ; +: >= 2dup > -rot = lor ; + ( num from to -- 1/0) : in-range rot swap over >= -rot <= land ; @@ -122,7 +82,7 @@ then ; : cr 10 emit ; -: QUOTE 34 ; +: QUOTE 34 emit ; : _" compiling if @@ -169,20 +129,6 @@ readce dup 34 = if drop 1 else emit 0 then until then ; IMMEDIATE -: g" - dp @ - - repeat - readce dup 34 = if - drop 0 1 allot c! 1 - else 1 allot c! 0 then - until - - compiling if - ' lit , , - then ; IMMEDIATE - - : ." ' " execute compiling if ' prints , then ; IMMEDIATE : read-digit readc dup .' 0 .' 9 in-range if .' 0 - else drop -1 then ; @@ -261,6 +207,8 @@ compnumber r@ file-close r> drop ; +( cells - addr ) +: allot dp @ swap over + dp ! ; : global inbuf word drop 0 inbuf create ' docol @ , ' lit , cell% allot , ' exit , ; : constant inbuf word drop 0 inbuf create ' docol @ , ' lit , , ' exit , ; @@ -271,8 +219,6 @@ compnumber : end-struct constant ; include diagnostics.frt -include doc-engine.frt -include documentation.frt 16 MB ( heap size ) include heap.frt @@ -296,7 +242,3 @@ include managed-string.frt ." Forthress -- a tiny Forth from scratch > (c) Igor Zhirkov 2017-2018 " cr -include fib.frt - -include native.frt - diff --git a/string.frt b/forthress/string.frt similarity index 91% rename from string.frt rename to forthress/string.frt index cc54f5b..b12a0c2 100644 --- a/string.frt +++ b/forthress/string.frt @@ -54,7 +54,7 @@ ( string in heap ) : h" compiling not if 0 - repeat readc dup QUOTE = if + repeat readc dup .' " = if ( " syntax highlight fix ) drop dup dp @ + 0 swap c! 1 + heap-alloc dup dp @ string-copy 1 @@ -65,7 +65,7 @@ then until else -' " execute ' string-new , +' " execute ' dup , ' string-new , then ; IMMEDIATE diff --git a/part_1/parity.frt b/part_1/parity.frt deleted file mode 100644 index 5e59f03..0000000 --- a/part_1/parity.frt +++ /dev/null @@ -1 +0,0 @@ -: iseven 2 % not ; \ No newline at end of file From 49fd32ece0c52a75d1685f103cbcdaed85e56447 Mon Sep 17 00:00:00 2001 From: TruePac Date: Fri, 22 Jun 2018 23:03:50 +0300 Subject: [PATCH 03/17] concat word --- forthress/part1/concat.frt | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 forthress/part1/concat.frt diff --git a/forthress/part1/concat.frt b/forthress/part1/concat.frt new file mode 100644 index 0000000..1adbe68 --- /dev/null +++ b/forthress/part1/concat.frt @@ -0,0 +1,19 @@ +: cp + repeat + over over + c@ swap c! + 1 + swap 1 + swap + dup c@ not + until +; + +: cat + over count over count + 1 + + heap-alloc + rot over + >r + cp drop swap + cp drop 0 swap + c! + r> prints +; IMMEDIATE \ No newline at end of file From c346ac7aa7f247b4533b47e525f3370c8c81bac0 Mon Sep 17 00:00:00 2001 From: TruePac Date: Sat, 23 Jun 2018 01:28:57 +0300 Subject: [PATCH 04/17] words for collatz sequence --- forthress/part1/collatz_sequence.frt | 30 ++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 forthress/part1/collatz_sequence.frt diff --git a/forthress/part1/collatz_sequence.frt b/forthress/part1/collatz_sequence.frt new file mode 100644 index 0000000..627d767 --- /dev/null +++ b/forthress/part1/collatz_sequence.frt @@ -0,0 +1,30 @@ +: is_even 2 % not ; + +: inc 1 + ; + +: collatz + dup 1 < if drop ." Illegal argument. Number must be positive integer" + else + dup >r + repeat + dup 1 > if + dup is_even if + dup 2 / + else + dup 3 * inc + then + else 1 + then + dup 1 = until + then + r> +; IMMEDIATE + +: print_collatz + >r + repeat + dup . ." " + r@ = + until + cr r> drop +; \ No newline at end of file From de203202aa63924f63c94828bc636bb3b31ddbf8 Mon Sep 17 00:00:00 2001 From: TruePac Date: Mon, 25 Jun 2018 02:36:37 +0300 Subject: [PATCH 05/17] forth word interpreter + basic words --- forthress/part_2/Makefile | 36 +++++ forthress/part_2/bin/forthress | Bin 0 -> 11632 bytes forthress/part_2/forthress.asm | 123 +++++++++++++++ forthress/part_2/macro.inc | 62 ++++++++ forthress/part_2/obj/forthress.o | Bin 0 -> 13088 bytes forthress/part_2/obj/util.o | Bin 0 -> 7168 bytes forthress/part_2/start | 1 + forthress/part_2/stdlib.frt | 0 forthress/part_2/util.asm | 248 +++++++++++++++++++++++++++++++ forthress/part_2/util.inc | 21 +++ forthress/part_2/words.inc | 129 ++++++++++++++++ 11 files changed, 620 insertions(+) create mode 100644 forthress/part_2/Makefile create mode 100644 forthress/part_2/bin/forthress create mode 100644 forthress/part_2/forthress.asm create mode 100644 forthress/part_2/macro.inc create mode 100644 forthress/part_2/obj/forthress.o create mode 100644 forthress/part_2/obj/util.o create mode 100644 forthress/part_2/start create mode 100644 forthress/part_2/stdlib.frt create mode 100644 forthress/part_2/util.asm create mode 100644 forthress/part_2/util.inc create mode 100644 forthress/part_2/words.inc diff --git a/forthress/part_2/Makefile b/forthress/part_2/Makefile new file mode 100644 index 0000000..acb36b2 --- /dev/null +++ b/forthress/part_2/Makefile @@ -0,0 +1,36 @@ +ASM = nasm +ASMFLAGS = -felf64 -g -I + + +NATIVE_CALLS_SUPPORT=1 + +ifdef NATIVE_CALLS_SUPPORT +LINKERFLAGS = -nostdlib +LIBS = -ldl +LINKER = gcc +ASMFLAGS += -DNATIVE_CALLS +else +LINKER = ld +LINKERFLAGS = +LIBS = +endif + + +all: bin/forthress + +bin/forthress: obj/forthress.o obj/util.o + mkdir -p bin + $(LINKER) -o bin/forthress $(LINKERFLAGS) -o bin/forthress obj/forthress.o obj/util.o $(LIBS) + +obj/forthress.o: forthress.asm macro.inc words.inc util.inc + mkdir -p obj + $(ASM) $(ASMFLAGS) forthress.asm -o obj/forthress.o + +obj/util.o: util.inc util.asm + mkdir -p obj + $(ASM) $(ASMFLAGS) util.asm -o obj/util.o + +clean: + rm -rf build obj + +.PHONY: clean \ No newline at end of file diff --git a/forthress/part_2/bin/forthress b/forthress/part_2/bin/forthress new file mode 100644 index 0000000000000000000000000000000000000000..a83dc87cb2e85c5b2aa75e8ccc78d627eaeb8f1c GIT binary patch literal 11632 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 literal 0 HcmV?d00001 diff --git a/forthress/part_2/forthress.asm b/forthress/part_2/forthress.asm new file mode 100644 index 0000000..0d1b05e --- /dev/null +++ b/forthress/part_2/forthress.asm @@ -0,0 +1,123 @@ +global _start +global last_word + +%include "util.inc" +%include "macro.inc" + +%define w r15 +%define pc r14 +%define rstack r13 + +%define is_immediate 1 +%define is_branch 2 + +section .rodata +msg_stack_underflow: db 'stack underflow',10, 0 +msg_word_undefined: db 'no such word',10, 0 + +section .data +program_stub: dq 0 +xt_interpreter: dq .interpreter +.interpreter: dq interpreter_loop +current_word: times 256 db 0, 0 +stack_head: dq 0 +p_cmp_flag: dq 0 +state: dq 0 + +section .bss +user_memory: resq 65536 +user_dict: resq 65536 +return_stack: resq 1024 + +section .text +%include "words.inc" + +next: + mov w, pc + add pc, 8 + mov w, [w] + jmp [w] + +interpreter_loop: + mov rsi, 256 + mov rdi, current_word + call read_word + test rdx, rdx + jz .exit + mov rdi, rax + call find_word + cmp byte [state], 0 + jne .compile + test rax, rax + jz .not_word + mov rdi, rax + call cfa + +.interpret_word: + mov [program_stub], rax + mov pc, program_stub + jmp next + +.not_word: + mov rdi, current_word + call parse_int + test rdx, rdx + jz .not_found + push rax + jmp interpreter_loop + +.not_found: + mov rdi, msg_word_undefined + call print_string + jmp interpreter_loop + +.compile: + test rax, rax + jz .not_word_compile + mov rdi, rax + call cfa + lea rdx, [rax - 1] + movzx rdx, byte [rdx] + mov [p_cmp_flag], rdx + cmp rdx, is_immediate + je .interpret_word + mov rdx, [here] + mov [rdx], rax + add qword [here], 8 + jmp interpreter_loop + +.not_word_compile: + mov rdi, current_word + call parse_int + test rdx, rdx + jz .not_found + cmp byte[p_cmp_flag], is_branch + je .branch + mov rcx, xt_lit + mov rdx, [here] + mov qword[rdx], rcx + add qword[here], 8 + mov rdx, [here] + mov [rdx], rax + add qword[here], 8 + jmp interpreter_loop + +.branch: + mov rdx, [here] + mov [rdx], rax + add qword [here], 8 + jmp interpreter_loop + +.exit: + xor rdi, rdi + call exit + +_start: + mov rstack, return_stack + mov [stack_head], rsp + mov pc, xt_interpreter + jmp next + +section .data +here: dq user_dict +last_word: dq _lw diff --git a/forthress/part_2/macro.inc b/forthress/part_2/macro.inc new file mode 100644 index 0000000..db26d7f --- /dev/null +++ b/forthress/part_2/macro.inc @@ -0,0 +1,62 @@ +%define _lw 0 +%macro native 3 + section .data + wh_ %+ %2 : dq _lw + db %1, 0 + db %3 + + %define _lw wh_%+ %2 + xt_ %+ %2 : dq i_ %+ %2 + section .text + i_ %+ %2: +%endmacro + +%macro native 2 +native %1, %2, 0 +%endmacro + +%macro colon 3 +section .data + wh_ %+ %2 : dq _lw + %define _lw wh_ %+ %2 + str_ %+ %2: + db %1, 0 + db %3 + + xt_ %+ %2 : dq i_docol +%endmacro + +%macro colon 2 +colon %1, %2, 0 +%endmacro + +%macro rpush 1 + sub rstack, 8 + mov qword [rstack], %1 +%endmacro + +%macro rpop 1 + mov %1, qword [rstack] + add rstack, 8 +%endmacro + + +%macro const 2 +%defstr %%__cnst_str %1 +native %%__cnst_str, %1 + mov rax, %2 + push rax + jmp next +%endmacro + + +%macro branch 1 +dq xt_branch +dq %1 +%endmacro + +%macro branch0 1 +dq xt_branch0 +dq %1 +%endmacro + diff --git a/forthress/part_2/obj/forthress.o b/forthress/part_2/obj/forthress.o new file mode 100644 index 0000000000000000000000000000000000000000..d5467bc54874cb4a7fcb3ceff38e7b07a96dcc37 GIT binary patch literal 13088 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 Z2>(C7tk2;Fk2QFL!L6hSMM2bGGmM z^}hFh?*0C__kOk?&Mv+&ZO9O~G6dISfSe2D4@j%?F&aY$x&NOuW0@b06i*A{jij*Y z#3MAD{=>=dvi+Z=o5`ehS7_$3O_TL@pl?un3WxE!-VSw9%Wm7>v%!by+Ohh_%|FYw z{)E0>Zu}g35g*?-ndctQp^SrJc*+hIbQ19cFA(N><1HtBdZg9a%cRr$~og z5;hNPSjk%So+@sSrzY&R92nWN=z@NNL;Agzc$zko9eKKQhFKl9gvuj+1R+1#=p$5L zS?|~Rkz2HCS{__2*F~!%u92;X+@c#Jq-#R;#`>SdJgan^OHkpHsvA0_`y>%T<)f2{vD`Pt?{==&O#x(-xM zw*Ex&XIOtO`8Qj?k^Cy_ZzR9T`kTl%3-5AkdtAz=#@f3oMn6m;5WO zpH7cLSwBqv9P7u(zuWqo$=_i8$HZ}YRT4>Ns2gx905Fk|(sjH8M zFH)iUs%5dL9>rCKqIGpOI(UkMcp`1Q0XFlqw-mjtAyQp`F@<6^sEbC*!>ReERO(rX z3KazP#tjt?(l@w3Wi_=;sHlpS2TxH{FqHwUsA3AbXs`$6?a~-R2rOzm;A+E-z5{B;4Mo zFcEGYDtt!Pp3>RN$Lx3tli+e9h0o~`+_<0DBRD-p)~7-U+2Vf@sY6h+LXI9GC`fsDLv|~;@^bjqURtcdM?cVW{SeM z&=^Rqzl|o*^RQC%0^A{bA(}R8-6E#9fEV#w6Di*@qIicx&cp% z{vMtYy#mjQZp5ENH{qb@@8d<$E8)&&h1=03ely$|pl~N%6Mq%{EV>1M5#5T{MX$zj z(Rbm5=pW&v=r+71dJSA2ps*JI5dR)IZxrr@Ih#yTSdYFyYP|vdqVGeHSC}?GmOmtv zev4^lGtouiCm1UF0l0HZ;Xw=+e~aWF3ctW;@wXyF^e>Sq`XP)J{VR+Uy$$Ak490yJ zS)zZ9t3*G738J^-8qvQ&kPDePKZ;L@{}?8U{w*en-ia@W{ylaifQ$_E> zG|{_po#-bJN?Gf0t(yPbQv0tcd3jyYtA!cjt{`pV~JQuOr?>?DlOJZzt7v61zRt zwLe1j-NdJf-CpMUyZy1};x6K2#6864h++S==bq;n;w<8c#5u%y#2)cH;-$pZ#ErzQ#OsMS6K^NpMI0wS zM0}L^6mcK%2gD Date: Mon, 25 Jun 2018 15:06:19 +0300 Subject: [PATCH 06/17] arifmetics block + bug fixes --- forthress/part_2/bin/forthress | Bin 11632 -> 12737 bytes forthress/part_2/forthress.asm | 8 ++--- forthress/part_2/obj/forthress.o | Bin 13088 -> 14992 bytes forthress/part_2/words.inc | 52 +++++++++++++++++++++++++++++++ 4 files changed, 56 insertions(+), 4 deletions(-) diff --git a/forthress/part_2/bin/forthress b/forthress/part_2/bin/forthress index a83dc87cb2e85c5b2aa75e8ccc78d627eaeb8f1c..b0ebaeaa693beab01a02dd544e0c947cc52e6d2e 100644 GIT binary patch literal 12737 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 diff --git a/forthress/part_2/forthress.asm b/forthress/part_2/forthress.asm index 0d1b05e..fa22f5e 100644 --- a/forthress/part_2/forthress.asm +++ b/forthress/part_2/forthress.asm @@ -49,7 +49,7 @@ interpreter_loop: cmp byte [state], 0 jne .compile test rax, rax - jz .not_word + jz .undef mov rdi, rax call cfa @@ -58,7 +58,7 @@ interpreter_loop: mov pc, program_stub jmp next -.not_word: +.undef: mov rdi, current_word call parse_int test rdx, rdx @@ -73,7 +73,7 @@ interpreter_loop: .compile: test rax, rax - jz .not_word_compile + jz .not_compile mov rdi, rax call cfa lea rdx, [rax - 1] @@ -86,7 +86,7 @@ interpreter_loop: add qword [here], 8 jmp interpreter_loop -.not_word_compile: +.not_compile: mov rdi, current_word call parse_int test rdx, rdx diff --git a/forthress/part_2/obj/forthress.o b/forthress/part_2/obj/forthress.o index d5467bc54874cb4a7fcb3ceff38e7b07a96dcc37..d6abc98737402c23a847e794b2af1794058adeab 100644 GIT binary patch literal 14992 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 diff --git a/forthress/part_2/words.inc b/forthress/part_2/words.inc index 9c46e3f..cc52539 100644 --- a/forthress/part_2/words.inc +++ b/forthress/part_2/words.inc @@ -94,6 +94,8 @@ error_underflow: call print_string jmp next +;basics block + ;Print top of stack native ".", dot cmp rsp, [stack_head] @@ -124,6 +126,56 @@ native "drop", drop pop rax jmp next +; arifmetics block + +;(xy - [x + y]) +native "+", plus + pop rax + add [rsp], rax + jmp next + +;(xy - [x - y]) +native "-", min + pop rax + sub [rsp], rax + jmp next + +;(xy - [x * y]) +native "*", mult + pop rax + pop rdx + imul rax, r8 + push rax + jmp next + +;(xy - [x / y]) +native "/", div + pop rax + pop r8 + mov rdx, 0 + idiv r8 + push rax + jmp next + +;(yx - [x mod y]) +native "%", mod + pop rcx + pop rax + cqo + idiv rcx + push rdx + jmp next + +;(xy - [x < y]) +native "<", less + pop rax + pop rcx + cmp rcx, rax + setl al + movzx rax, al + push rax + jmp next + From 836c398448edce1063b81f02746272c24064d998 Mon Sep 17 00:00:00 2001 From: TruePac Date: Mon, 25 Jun 2018 15:04:03 +0300 Subject: [PATCH 07/17] delete bin folder --- forthress/bin/forthress | Bin 21240 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 forthress/bin/forthress diff --git a/forthress/bin/forthress b/forthress/bin/forthress deleted file mode 100644 index 6d3f9d1d52793e186eb3121a8d7cd183a5ffad06..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21240 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 b@a&4F_k6`9{KvLmb3# Date: Mon, 25 Jun 2018 15:04:30 +0300 Subject: [PATCH 08/17] delete forthress.o --- forthress/obj/forthress.o | Bin 28496 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 forthress/obj/forthress.o diff --git a/forthress/obj/forthress.o b/forthress/obj/forthress.o deleted file mode 100644 index 3bc3391484145cc46a370d86d1bfb8ba3fd2df98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28496 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 From c58f08d40dbfa8a6f7e8c7137fd47d4679465b93 Mon Sep 17 00:00:00 2001 From: TruePac Date: Mon, 25 Jun 2018 15:04:47 +0300 Subject: [PATCH 09/17] delete util.o --- forthress/obj/util.o | Bin 6112 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 forthress/obj/util.o diff --git a/forthress/obj/util.o b/forthress/obj/util.o deleted file mode 100644 index 8135aca8efb7a303ee67bd7acc6f6370e70d677b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6112 zcmbW5e{ht=9mXF*_*rZ+mO@&sjYt)1xF$#?(32+dRbMo;*rI`!CLGC;L@$?k_ohIl zcxZ4EpcXr{Lv5sK%Z!Z0N-NrwVmUbEmv%(7Q>MicXB@pYFcTdpbn1BBec#=0E)SXh z(Ve+_pU<=3{l2^V?z?-*!?)MoQ7~#0Y#D|57$WNeRYTI~Don)aJoo>T`d<3OnbHM8 zzVVc{ka(P8-F__jCrtY|4W^jlu29VP)*)5qMt4&@rNdNJZ*Da#a*Ju-XDY|2+9LI_ z{Vy@mpI6tB?q9A4rpjG(Lqgo3Vr)*of%!_AiL>|7F}f=@*7~!Q$2oP1KGS}SnOOTA zZ2L(%NR>+U8L|I*u&R7AxX8C{Z;fgtCRoV3R+;v;AG%6UiEYo%(KdA}(y8z`cw^jL zdf-B4|3p<$=k~mx)q`)y)Mfvk%jN3bo`d~*)cf^U(U^?eb4kVA5BJft#cuAk>VDnK ztvI>h;$Z4{xpKOvx*O7+=d$}$YxmJZB^h@^Zq2c}{WDcuwpW=A?!~tU`ZtaX&-4lg zO5EI$tnQ(E@szvaq*v(X4rWx(GB$DAtvFU&^x~wV>eRo>6D8_> z>ZqGLFz}Y!b3C(g+`O@!s#8bY+~KZt=b+zjKbh)oMcUmI{(`y@+@AOL27_6WslIPv z#lPyZr**f&rQU_`MDK&}72dh<1n(bRX>Vptcj24`xx;nYy(Z!+6){ysd`d+WsfbT3 zSpV_IDybUE8#RXu=cw$LYI{DcuFq_o+C9bexYxc{= z=k>bU_`DDF8vil>I`s9d@t+*Be09|L&yau0_hxM;p-8d~t?`DHO;F3Y zHQwA1i^iM1mf;kNwYPVW6^%EcL$&Z4;?Y&H)_BxVV@o7qWRTH7rwYxJLCPS3UlU0r zqYcAUDB0Q^kE*-as!%kMXjjR74)TdK`G#2c&kQO0U}q$j98RHlI}*`IQ-j}MU#)6S zGzFekq3S$clc#U9i5lBG)|lsT-dy#Dd-NQvTe zg)R^V^Gs8jg5uyhd`|Rq)!Os(d+Ox(GTM-(J8zwdOh9|{RrL@-37gm>*8Po{uxN6yJi1&)YCdA{zeRn z-h@k{H{(B|e_%HgmFIC3=*>hG2S3DU(OY590S7;ZJ~M)tZF1f^>Pb%&|49^y{u%UH z62$l7O3_bYvgqxYBKqej5#5L2T-W{i1+EtVm$*jsuTUy_2d0UB8urY0uoE-He+D;+ z{x!-(??Q#>XA%59(D(ffW{dwEZV|m3m7;%(d7^)Zu;}NZ&&y!!dr&3%1=NUs5sv8J z;||gNSSWfgzApMD*xxLUTFv)~pT<(r2e3@^LDY+W8TQ-bQTq zA)9YE)$b#=dxnjFlj_e9pCz{MrfqNEH_P@NvTWZ4%XWQRwrke1U3->m&GWOogt&>g zgLo}*H}O{DKH^=({-1AZPHcY;QT++x)5KZg^ThT?l+8cM{HU^ALOh+goH$JE5-%oR zP8=g%P25Gig}9e^C-ENQH1Vs%r-&K#HGY##FfMj@gm}7#4W@g zaf)~|@iyWe#Jh?25g#RfllTnrS>j8?g@wTeVdt}$_-f)A#IuR3h--p4=7&Cl6ClQwrPbV%X4ime?i;0&L$B0)GcM)$P?j_zy tyoWeV{3`J&;&+J$i9aG9KX&;1P9`oTE+eiac8C`dFC%Ut_J~u&{{?ynLfZfU From c97bbb0987f718383ef816f5134da387fac497ca Mon Sep 17 00:00:00 2001 From: TruePac Date: Mon, 25 Jun 2018 19:24:38 +0300 Subject: [PATCH 10/17] logical and bitwice blocks --- forthress/part_2/words.inc | 63 +++++++++++++++++++++++++++++++++++++- 1 file changed, 62 insertions(+), 1 deletion(-) diff --git a/forthress/part_2/words.inc b/forthress/part_2/words.inc index cc52539..a9a6707 100644 --- a/forthress/part_2/words.inc +++ b/forthress/part_2/words.inc @@ -174,7 +174,68 @@ native "<", less setl al movzx rax, al push rax - jmp next + jmp next + +;logic block + +;(a - a') a'= 0 if a!= 0 a'= 1 if a==0 +native "not", not + pop rax + test rax, rax + je .yes + push 0 + jmp next + .yes: push 1 + jmp next + +; (ab - c) c=1 if a==b c=0 if a!=b +native "=", equals + pop rax + pop rcx + cmp rax, rcx + sete al + movzx rax, al + push rax + jmp next + +;logical and +native "land", land + pop rax + pop rdx + test rax, rax + jz .no + push rdx + jmp next +.no: + push rax + jmp next + +;logical or +native "lor", lor + pop rax + pop rdx + test rax, rax + jnz .yes + push rdx + jmp next +.yes: + push rax + jmp next + +;bitwice block + +;bitwice and +native "and", and + pop rax + and [rsp], rax + jmp next + +;bitwice or +native "or", or + pop rax + or [rsp], rax + jmp next + From 77867d60d59847f0c0aefab66b5f52efdf156f07 Mon Sep 17 00:00:00 2001 From: TruePac Date: Mon, 25 Jun 2018 19:43:31 +0300 Subject: [PATCH 11/17] return stack operations --- forthress/part_2/words.inc | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/forthress/part_2/words.inc b/forthress/part_2/words.inc index a9a6707..9d75b25 100644 --- a/forthress/part_2/words.inc +++ b/forthress/part_2/words.inc @@ -236,6 +236,27 @@ native "or", or or [rsp], rax jmp next +;return stack operations + +; Push from return stack into data stack +native "r>", push_r + rpop rax + push rax + jmp next + +; Pop from data stack into return stack +native ">r", pop_r + pop rax + rpush rax + jmp next + +; Non-destructive copy from the top of return stack to the top of data stack +native "r@", copy_rs + mov rax, [rstack] + push rax + jmp next + + From 18b49245c4a99a1ad5a4469b2318f5eb8ae9a7d1 Mon Sep 17 00:00:00 2001 From: TruePac Date: Mon, 25 Jun 2018 19:52:10 +0300 Subject: [PATCH 12/17] memory operations --- forthress/part_2/words.inc | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/forthress/part_2/words.inc b/forthress/part_2/words.inc index 9d75b25..b38f38b 100644 --- a/forthress/part_2/words.inc +++ b/forthress/part_2/words.inc @@ -255,7 +255,41 @@ native "r@", copy_rs mov rax, [rstack] push rax jmp next - + +;Memory operations + +;(val addr --) Store value by address +native "!", put_int + pop rax + pop rdx + mov [rax], rdx + jmp next + +;(char addr --) Store one byte by address +native "c!", put_char + pop rax + pop rdx + mov [rax], dl + jmp next + +;(addr -- value) Fetch value from memory +native "@", get_int + pop rax + mov rax, [rax] + push rax + jmp next + +;(addr -- char) Read one byte starting at addr +native "c@", get_char + pop rax + movzx rax, byte [rax] + push rax + jmp next + + + + + From 349330964953876b856aeeffa5fccc3ada771a7c Mon Sep 17 00:00:00 2001 From: TruePac Date: Mon, 25 Jun 2018 21:04:04 +0300 Subject: [PATCH 13/17] IO words --- forthress/part_2/words.inc | 76 ++++++++++++++++++++++++++++++++++---- 1 file changed, 68 insertions(+), 8 deletions(-) diff --git a/forthress/part_2/words.inc b/forthress/part_2/words.inc index b38f38b..51d60b7 100644 --- a/forthress/part_2/words.inc +++ b/forthress/part_2/words.inc @@ -96,14 +96,6 @@ error_underflow: ;basics block -;Print top of stack -native ".", dot - cmp rsp, [stack_head] - jge error_underflow - pop rdi - call print_int - jmp next - ; (ab - ba) native "swap", swap pop rax @@ -286,6 +278,74 @@ native "c@", get_char push rax jmp next +;Input-Output + +;Print top of stack +native ".", dot + cmp rsp, [stack_head] + jge error_underflow + pop rdi + call print_int + jmp next + +;Print stack +native ".S", print_stack + mov rax, rsp + .loop: + cmp rax, [stack_head] + jge next + mov rdi, [rax] + push rax + call print_int + call print_newline + pop rax + add rax, 8 + jmp .loop + +; (str -- len ) Accepts a null-terminated string, calculates its length. +native "count", count + pop rdi + call string_length + push rax + jmp next + +; ( str cnt -- ) Prints a certain amount of characters from string. +native "printc", printc + mov rax, 1 + mov rdi, 1 + pop rsi + pop rdx + syscall + jmp next + +;( c -- ) Outputs a single character to stdout +native "emit", emit + pop rdi + call print_char + jmp next + + ; ( addr -- len ) Reads word from stdin and stores it starting at address addr. +native "word", word + pop rdi + call read_word + push rdx + jmp next + +;( str -- len num ) Parses an integer from string +native "number", number + call read_word + mov rax, rdi + call parse_int + push rax + jmp next + + ;( addr -- ) Prints a null-terminated string. +native "prints", prints + pop rdi + call print_string + jmp next + + From e91739206b240a7729b00f01444017d3e9188b3e Mon Sep 17 00:00:00 2001 From: TruePac Date: Mon, 25 Jun 2018 21:30:18 +0300 Subject: [PATCH 14/17] bootstrap words support + some bootstrap words + bug fixes --- forthress/part_2/stdlib.frt | 2 ++ forthress/part_2/words.inc | 22 ++++++++++++++++++---- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/forthress/part_2/stdlib.frt b/forthress/part_2/stdlib.frt index e69de29..7c11b8a 100644 --- a/forthress/part_2/stdlib.frt +++ b/forthress/part_2/stdlib.frt @@ -0,0 +1,2 @@ +: rot >r swap r> swap ; +: ' inbuf dup word drop find ; \ No newline at end of file diff --git a/forthress/part_2/words.inc b/forthress/part_2/words.inc index 51d60b7..2289dce 100644 --- a/forthress/part_2/words.inc +++ b/forthress/part_2/words.inc @@ -59,8 +59,22 @@ native "create", create mov [here], rsi jmp next - +colon ":", colon +.restart: + dq xt_inbuf, xt_word + branch0 .restart + dq xt_lit, 0, xt_inbuf, xt_create + dq xt_lit, 1, xt_state, xt_put_int + dq xt_lit, i_docol, xt_comma + dq xt_exit + +colon ";", semicolon, 1 + dq xt_lit, 0, xt_state, xt_put_int + dq xt_lit, xt_exit, xt_comma + dq xt_exit + ; utils block + native "find", find pop rdi call find_word @@ -89,7 +103,7 @@ native "bye", bye mov rax, 60 syscall -error_underflow: +stack_underflow: mov rdi, msg_stack_underflow call print_string jmp next @@ -114,7 +128,7 @@ native "dup", dup ; drop top of stack native "drop", drop cmp rsp, [stack_head] - jge error_underflow + jge stack_underflow pop rax jmp next @@ -283,7 +297,7 @@ native "c@", get_char ;Print top of stack native ".", dot cmp rsp, [stack_head] - jge error_underflow + jge stack_underflow pop rdi call print_int jmp next From 74978d68e59fcc6a8b4372f15bf502863200fc00 Mon Sep 17 00:00:00 2001 From: TruePac Date: Mon, 25 Jun 2018 21:52:24 +0300 Subject: [PATCH 15/17] more words in stdlib + improvements --- forthress/part_2/forthress.asm | 2 +- forthress/part_2/stdlib.frt | 4 +++- forthress/part_2/words.inc | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/forthress/part_2/forthress.asm b/forthress/part_2/forthress.asm index fa22f5e..8a46c16 100644 --- a/forthress/part_2/forthress.asm +++ b/forthress/part_2/forthress.asm @@ -25,7 +25,7 @@ p_cmp_flag: dq 0 state: dq 0 section .bss -user_memory: resq 65536 +user_mem: resq 65536 user_dict: resq 65536 return_stack: resq 1024 diff --git a/forthress/part_2/stdlib.frt b/forthress/part_2/stdlib.frt index 7c11b8a..da13208 100644 --- a/forthress/part_2/stdlib.frt +++ b/forthress/part_2/stdlib.frt @@ -1,2 +1,4 @@ +: ' inbuf dup word drop find ; : rot >r swap r> swap ; -: ' inbuf dup word drop find ; \ No newline at end of file +: -rot swap >r swap r> ; +: over >r dup r> swap ; diff --git a/forthress/part_2/words.inc b/forthress/part_2/words.inc index 2289dce..c060491 100644 --- a/forthress/part_2/words.inc +++ b/forthress/part_2/words.inc @@ -1,6 +1,6 @@ ;Block of constants const inbuf, current_word - const mem, user_memory + const mem, user_mem const state, state const here, [here] const last_word, last_word From c91e70b57b65d99140852a90ed964be6f5e507e4 Mon Sep 17 00:00:00 2001 From: TruePac Date: Wed, 27 Jun 2018 22:56:58 +0300 Subject: [PATCH 16/17] Documentation --- forthress/documentation.frt | 132 ++++++++++++++++++++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100644 forthress/documentation.frt diff --git a/forthress/documentation.frt b/forthress/documentation.frt new file mode 100644 index 0000000..eb8c859 --- /dev/null +++ b/forthress/documentation.frt @@ -0,0 +1,132 @@ +' dup g" +( a - a a ) +Duplicate the cell on top of the stack. +" doc-word + +' drop g" +( a -- ) +Drop the topmost element of the stack. +" doc-word + +' swap g" +( a b -- b a ) +Swap two topmost elements of the stack. +" doc-word + +' 2over g" +( a b c -- a b c a ) +Copy third element from the top of the stack to the top of the stack. +" doc-word + +' 2drop g" +( a b -- ) +Drop 2 elements from the top of the stack. +" doc-word + +' ( g" +Start a comment. Reads from input stream until ) symbol. +" doc-word + +' readc g" +Read char from input stream. +" doc-word + +' readc@ g" +Read char from an open fd. +" doc-word + +' sys-write g" +Perform write syscall. +" doc-word + +' sys-read g" +Perform read syscall. +" doc-word + +' sys-write-no g" + Constant used in sys-write. +" doc-word + +' sys-read-no g" +Constant used in sys-read. +" doc-word + +' loop g" +End of do ... loop block. do loop block reads limit and index from the top of the stack and repeats block of code between do and loop (limit - index) times. +" doc-word + +' do g" +Begin of do ... loop block. do loop block reads limit and index from the top of the stack and repeats block of code between do and loop (limit - index) times. +" doc-word + +' endfor g" +End of for ... endfor block. Similar to do ... loop block, but will perform at least once if index is more than limit. +" doc-word + +' for g" +Begin of for ... endfor block. Similar to do ... loop block, but will perform at least once if index is more than limit. +" doc-word + +' until g" +End of repeat ... until block. At the end of each iteration, checks number at the top of the stack? If it is 0, then remove it and start the loop again; if not zero, then remove it and exit the loop. +" doc-word + +' repeat g" +Begin of repeat ... until block. At the end of each iteration, checks number at the top of the stack? If it is 0, then remove it and start the loop again; if not zero, then remove it and exit the loop. +" doc-word + +' endif g" +Exit if ... then block. +" doc-word + +' then g" +End of if ... then block. +" doc-word + +' else g" +Used indide if ... then block. Perform the body if the top of the stack is zero. +" doc-word + +' if g" +Begin of if ... then block. Perform the body if the top of the stack is non-zero. +" doc-word + +' again g" +Performs unconditional branch to the previous begin block. +" doc-word + +' begin g" +Begin of begin ... again block. +" doc-word + +' allot g" +Accept the number of bytes to allocate in the global data area. +" doc-word + +' KB g" +( a -- a * 1024) +Multiply the topmost element of the stack by 1024. +" doc-word + +' MB g" +( a -- a * 1048576) +Multiply the topmost element of the stack by 1024 twice. +" doc-word + + + + + + + + + + + + + + + + + + From b553580bc3a33f2429c8cfb4c96470c7c99ec60c Mon Sep 17 00:00:00 2001 From: TruePac Date: Wed, 27 Jun 2018 23:16:09 +0300 Subject: [PATCH 17/17] documentation fixed --- forthress/documentation.frt | 20 +------------------- 1 file changed, 1 insertion(+), 19 deletions(-) diff --git a/forthress/documentation.frt b/forthress/documentation.frt index eb8c859..030d98a 100644 --- a/forthress/documentation.frt +++ b/forthress/documentation.frt @@ -111,22 +111,4 @@ Multiply the topmost element of the stack by 1024. ' MB g" ( a -- a * 1048576) Multiply the topmost element of the stack by 1024 twice. -" doc-word - - - - - - - - - - - - - - - - - - +" doc-word \ No newline at end of file