Annotation of gforth/test/primtest.fs, revision 1.2
1.1 anton 1: \ test for Gforth primitives
2:
3: \ Copyright (C) 2003 Free Software Foundation, Inc.
4:
5: \ This file is part of Gforth.
6:
7: \ Gforth is free software; you can redistribute it and/or
8: \ modify it under the terms of the GNU General Public License
9: \ as published by the Free Software Foundation; either version 2
10: \ of the License, or (at your option) any later version.
11:
12: \ This program is distributed in the hope that it will be useful,
13: \ but WITHOUT ANY WARRANTY; without even the implied warranty of
14: \ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15: \ GNU General Public License for more details.
16:
17: \ You should have received a copy of the GNU General Public License
18: \ along with this program; if not, write to the Free Software
19: \ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
20:
21: Create mach-file here over 1+ allot place
22:
23: 0 [IF]
24: \ debugging: produce a relocation and a symbol table
25: s" rel-table" r/w create-file throw
26: Constant fd-relocation-table
27:
28: \ debuggging: produce a symbol table
29: s" sym-table" r/w create-file throw
30: Constant fd-symbol-table
31: [THEN]
32:
33:
34: bl word vocabulary find nip 0= [IF]
35: \ if search order stuff is missing assume we are compiling on a gforth
36: \ system and include it.
37: \ We want the files taken from our current gforth installation
38: \ so we don't include relatively to this file
39: require startup.fs
40: [THEN]
41:
42: \ include etags.fs
43:
44: include ./../cross.fs \ cross-compiler
45:
46: decimal
47:
48: has? kernel-start has? kernel-size makekernel
49: \ create image-header
50: has? header [IF]
51: here 1802 over
52: A, \ base address
53: 0 , \ checksum
54: 0 , \ image size (without tags)
55: has? kernel-size
56: , \ dict size
57: has? stack-size , \ data stack size
58: has? fstack-size , \ FP stack size
59: has? rstack-size , \ return stack size
60: has? lstack-size , \ locals stack size
61: 0 A, \ code entry point
62: 0 A, \ throw entry point
63: has? stack-size , \ unused (possibly tib stack size)
64: 0 , \ unused
65: 0 , \ data stack base
66: 0 , \ fp stack base
67: 0 , \ return stack base
68: 0 , \ locals stack base
69: [THEN]
70:
71: doc-off
72: has? prims [IF]
73: include ./../kernel/aliases.fs \ primitive aliases
74: [ELSE]
75: prims-include
76: undef-words
77: include prim.fs
78: all-words
79: [THEN]
80: doc-on
81:
82: has? header [IF]
83: 1802 <> [IF] .s cr .( header start address expected!) cr uffz [THEN]
84: AConstant image-header
85: : forthstart image-header @ ;
86: [THEN]
87:
88: \ 0 AConstant forthstart
89:
90: : emit ( c -- )
91: stdout emit-file drop ;
92:
93: : cr ( -- )
94: 10 emit ;
95:
96: : type ( addr u -- )
97: stdout write-file drop ;
98:
1.2 ! anton 99: char j constant char-j
! 100:
! 101: variable var-k
! 102: char k var-k !
! 103: defer my-emit
! 104: ' emit is my-emit
! 105: cell% 2* 0 0 field >body
! 106:
! 107: variable s0
! 108: : depth s0 @ sp@ cell+ - ;
! 109:
! 110: \ : myconst ( n -- )
! 111: \ create ,
! 112: \ does> ( -- n )
! 113: \ @ ;
! 114: \ char m myconst char-m
! 115:
! 116: : unloop-test ( -- )
! 117: 0 >r 0 >r unloop ;
! 118:
1.1 anton 119: : boot ( -- )
1.2 ! anton 120: sp@ s0 !
1.1 anton 121: [char] a stdout emit-file drop
122: [char] b emit
123: s" cde" type
124: ." fgh"
1.2 ! anton 125: [char] i ['] emit execute
! 126: ['] char-j execute emit
! 127: ['] var-k execute @ emit
! 128: \ !!douser
! 129: [char] l ['] my-emit execute
! 130: [char] l ['] my-emit ['] >body execute perform
! 131: \ !!dodoes ['] char-m execute emit
! 132: noop
! 133: [char] m ['] my-emit ['] execute dup execute
! 134: [char] m ['] 1+ execute emit
! 135: [char] o ['] my-emit >body perform
! 136: unloop-test ." p"
! 137: [char] q my-emit
! 138: \ !!does-exec
! 139: \ !! branch-lp+!#
! 140: ahead ." wrong" then ." r"
! 141: 0 if ." wrong" else ." s" then
! 142: 1 if ." t" else ." wrong" then
! 143: \ !! ?dup-?branch ?dup-0=-?branch
! 144: \ 0 ?dup-if ." wrong" drop else ." u" then
! 145: \ [char] v ?dup-if emit else ." wrong" then
1.1 anton 146: cr
1.2 ! anton 147: depth (bye) ;
1.1 anton 148:
149: \ Setup 13feb93py
150:
151: has? header [IF]
152: \ set image size
153: here image-header 2 cells + !
154: \ set image entry point
155: ' boot >body image-header 8 cells + A!
156: [ELSE]
157: >boot
158: [THEN]
159:
160: \ include ./../kernel/pass.fs \ pass pointers from cross to target
161:
162: .unresolved \ how did we do?
163:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>