-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathREADME.TXT
863 lines (690 loc) · 36.4 KB
/
README.TXT
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
º Common Forth Experiment Version 1.668 Release Notes : º
ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
ÄÄÄÄÄÄÄÄÄÄ
Warranty
ÍÍÍÍÍÍÍÍÍÍ
This software is distributed WITHOUT ANY WARRANTY.
I prevented using any low-level operations like BIOS disk I/O,
since my major goal is to build a common environment which can use
other sources outside FORTH world and treat them like FORTH
( Abstract Common Forth ), so I/O performance is not my first
consideration.
Common Forth is implemented as macro-expansion subroutine threaded
which means the compiled code is fast enough. Besides, many optimizations
will be done in the future. Therefore, whenever you can prevent CODE
words, don't use them, for portabiliby's sake.
And I haven't met any serious problem yet. Several successful projects
have been implemented with this system, with the supporting of C(++)
libraries ( such as database library : CodeBase ). The whole system goes
in protected mode, many illegal operations should abort the whole system.
However that's depended on the underlying DOS-extender. So I believe
your normal programming and operation won't cause any problem. But be
careful not to enter any infinite loop in your program, it is not always
possible to CTRL-BREAK those operations. For all those low-level I/O
operations, that's depended on the underlying DOS extender, which might
again based on VCPI or DPMI.
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
You must realize that this is an experiment system and contains many
prototypes . So far, they works fine.
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
ÄÄÄÄÄÄÄÄÄÄÄ
Copyright
ÍÍÍÍÍÍÍÍÍÍÍ
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ Note that a PART of this software is protected by GNU's General ³
³ Public License ( the loader itself . ) See the detail file ³
³ descriptions below. For those not protected programs, all rights ³
³ are reserved by Luke Lee. ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
The whole system is written by Luke Lee since 1991, currently public
domain but not for commercial use. The system kernel CF0.4TH itself is
derived from 16bit subroutine threaded eForth . You are welcome to
distribute them but not for profit . Of course any target codes you wrote
belongs to yourself, you can release a turnkey system or just include
your source with the WHOLE SYSTEM WITH ALL DOCUMENTS, or just release your
source code. You can charge fee for your codes but not for any other part
of this system, even you made some modifications, ( except ONLY for your
ALMOST COMPLETE REWRITTEN ) . Besides, any turnkey system that provide
the functions which implemented in this system cannot be charged. For
example, if you include the assembler/disassembler code in your turnkey
system, and 'run through' the assembler/disassembler for assembling/
disassembling, the outputs itself is not chargable. If your turnkey
system provides only user-interface for DIRECT MANIPULATION of those
tools, it cannot be charged. The term 'run through' applies to all tools
except for the kernel codes in CF0.4TH . However the term 'run through'
itself is quite ambiguous, don't worry, just USE YOUR CONSCIENCE and
you will know what to do. Just don't charge fee for codes not belongs
to yourself.
ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
º þ ABSOLUTELY FORBID to use in ANY military purpose except for Taiwan's º
º self-defence; even for testing things irrelevant to any weapon. º
º þ NEVER use it for ANYTHING relevant to ANY military purpose. º
º þ ANY violation to this rule will be treated as much serious problem º
º than encroach on my copyright, though I might not have legal ways to º
º stop this but this is never to forgive. º
º þ Use other's FORTH system for your military purpose but NOT MINE . º
ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Sell Your Product
ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
The best way is that you can sell your product ( not include any
portion of this system ) and declare that they need this system for
execution environment ( tell them the version too. ). And tell them
how to obtain this system. Just like you release MS-DOS executable
applications without releasing the copyrighted MS-DOS itself.
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Compatibility
ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
There is no guarantee that your application written in this system
would be compatible with next released Common Forth. This system changes
RAPIDLY ! Of course you might think this system useless since it change
so fast. However, you should remember that this is an experiment version.
This system will be settled down and be compatible with ANSI standard
after version 2.0 . Before v2.0, I won't follow any standard except mine.
o eForth version :
This system is derived originally from the following eForth :
Subroutine threaded eForth; Version. 1.0, 1991
by Richard E. Haskell
Dept. of Computer Science and Engineering
Oakland University
Rochester, Michigan 48309
which based on
eForth 1.0 by Bill Muench and C. H. Ting, 1990
Much of the code is derived from the following sources:
8086 figForth by Thomas Newman, 1981 and Joe smith, 1983
aFORTH by John Rible
bFORTH by Bill Muench
o GNU is the trademark of Free Software Foundation.
o MS-DOS is the product of Microsoft Cooperations .
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Note that this system is CASE-SENSITIVE ! !
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
What's Different ?
ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
What are the differences between CF and other Forth systems ?
1. High performance Stack Expression : ( Common Forth Unique )
Input/output parameter and local variables without headache for
DUP, SWAP, OVER, TUCK, NIP, ROT ... and still keeps the performance
since it does not use extra codes to access local variables
and input/output parameters, and it never move these data into
return stack, they are just move to top of data stack (TOS) when they
are needed ( just like PICK ) and move TOS into the cell where they
are assigned. It is a prototype version. New algorithm will be
applied in new version which will compile SWAP, DUP ... directly.
See HI.4TH, STKEXPR.4TH for stack parameter and local variable
examples .
2. Subroutine threaded with macro expansion :
Fastest Forth system implementation method. In the future, many
other optimizations will be implemented.
Use SEE.4TH or DISASM.4TH to see the compiled code.
3. Short-cut Boolean evaluation available : ( Common Forth Unique )
T/F ANDTHEN T/F ANDTHEN .... THEN-AND
T/F ORELSE T/F ORELSE .... ELSE-OR
See SHORTCUT.4TH for usage and examples.
4. FORTH call C(++) and C(++) call FORTH :
Since the loader is written by DJGPP ( GNU C++ for PC ), all the
C(++) functions it used could be called by FORTH with INFIX syntax !
See INVOKEC.4TH. ( OO features are not implemented yet. )
And another feature is that after your FORTH program starts, you
can interpret FORTH words within your C(++) function ! See INVOKEC.H
for 'forth_interpret(...)' function. About C(++) actually 'CALL'
FORTH words, not just interpreting every time, this facility will be
implemented later.
See DEMO_C.4TH for examples of FORTH calls C .
5. Data structure oriented implementation :
Most of the data structures are defined by STRUCT: ... ;STRUCT ,
UNION: ... ;UNION , including the memory map and head structure
which makes it easier to understand this system.
See STRUCT.4TH and MEMMAP.4TH and CPU80486.4TH for examples.
For unions, see GRX.4TH for examples.
6. A very syntax-clear 80486 assembler and disassembler (CPU80486.4TH),
both PREFIX and POSTFIX syntax are provided and has exactly
the same syntax except for that the memonic can be put before operands
or after them.
SEE VERIFY.4TH and VERIFYPO.4TH for prefix / postfix examples .
7. A very fast multitasking system with different mechanism and minimum
overhead ( much much faster than a single INT instruction in protected
mode ! ).
( MULTASK.4TH )
8. A very simple meta-compilation mechanism without H: T: ...
In fact, except for user variables, the meta-compiler implements
almost no-thing for supporting meta-compilation.
( CFMETA.4TH )
9. Support one CREATE with multiple DOES> .
See the definition of FIELD: in STRUCT.4TH, and ARRAY: in HI.4TH.
10. A powerful discompiler ( SEE.4TH ), multiple exit loops like :
BEGIN ...
WHILE ...
WHILE ...
UNTIL ...
ELSE ...
THEN ...
ELSE ...
THEN ...
could always be discompiled successfully.
11. Compatible with Chinese system ( such as ETen, 01 ... ).
That's why it is case-sensitive.
12. Assertion tools for your debugging version program.
See #IF.4TH and ASSERT.4TH .
13. No floating point stack, all floating goes to data stack. I believe
2 stack is enough for one FORTH task. Besides, multitasking won't cause
any problem in this way since there could be many tasks computing
floating on stack at the same time. There is only one format :
64-bit IEEE floating point. Each floating number occupies 2 cells,
just like double precision integer. Many floating operations goes
through INVOKEC.4TH with C(++) function calls, but 387FLOAT.4TH
use 387 instructions.
See FLOAT.4TH and 387FLOAT.4TH . And the demo program 3DR.4TH.
14. Pure graphics mode operation. Cursor is emulated by multitasking with
a CursorTask. A standard graphics interface have been defined which
means that you can write portable programs which could be executed
under other Common Forth environments ( like Watcom's loader . ) For
example, a demonstration program 3DRp.4TH by Sam Chen is now running
under GO32+DJGPP(V1), RUN386+WATCOM and PMODE/W+WATCOM.
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Running this System
ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
If your system support VESA BIOS calls, set the following environment
for GO32 :
Example:
SET GO32=driver F:/cf/vesadrv.vdr gw 640 gh 480 nc 256
ÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÂÄÄ- ÄÄÂÄÄ- ÄÄÂÄÄÄ-
³ ³ ³ ³
³ ³ ³ ÀÄ- default number of
³ ³ ³ colors in graphics mode
³ ³ ³
³ ³ ÀÄ- default number of pixels of
³ ³ screen height in graphics mode
³ ³
³ ÀÄ- default number of pixels of screen
³ width in graphics mode.
³
ÀÄÄ Any driver in the .\DRIVERS subdirectory, choose your
suitable driver . Try VIDEOID.EXE written by Bob Berry
and find out what kind of driver you need.
( The maximum number of colors is 32768. )
SET GRXFONT=G:\gcc\contrib\libgrx\allfonts
or GRX.4TH will search for .\FONTS for appropriate fonts. Without fonts,
you cannot see text under GRX's graphics mode.
You should have at least 3 files to run this system :
CF.EXE + CF.IMG + CF.HED .
( or GO32.EXE + CF. + CF.IMG + CF.HED . )
Execute CF.EXE to run this system ( or "GO32 CF" ) .
There are several other drivers now included in the DRIVERS subdirectory,
which belongs to GNU. You can use them instead of using 'vesadrv.vdr'.
! NOTE ! Each time you FSAVE, the original CF.IMG !
! and CF.HED will be overwritten without !
! any backup. So backup them first in case !
! your FSAVEed system won't work. !
! Two files for solving this problem : !
! CF_IMG.BAK and CF_HED.BAK !
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
User Manual MANUAL.DOC
ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
An user manual is now included in this version named MANUAL.DOC, and
I must appologize that my English might not be good enough. However it
should be of some use. This file is still under construction.
There are a few parts of that manual, including basic operations,
word summary, turnkey systems, meta-compilation, assembly programming
and how to include your C programs .
ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
º Detail Descriptions for this system : º
ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
About DOS Extenders
ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
This release version use GO32 for DOS Extender. See README.G32 and
README.DJ for extra details, for its full source, download DJGPP V1 .
Before version 1.60, the Common Forth system image is executed under
Phar Lap's DOS Extender : RUN386.EXE . Version 1.60 is meta-compiled
from version 1.59 under Phar Lap's RUN386.EXE . Now there are another
version for Watcom C/C++ which can use PMODE/W , RUN386 ... for its
DOS Extender.
From version 1.60, the whole system is executed under DJGPP's public
domain DOS Extender GO32.EXE, with an 80387 emulator. Virtual memory is
supported by GO32, so you can run it under DOS with only 512k RAM but
with very very terrible performance . But for 4M memory, its performance
is quite good.
See README.DJ for DJGPP's info.
GO32.EXE + EMU387 : DJGPP's public domain DOS Extender with
80387 emulator.
( + VESADRV.VDR : if you have VESA BIOS, graphics modes defined by
vesa will be available. For other video cards,
use the appropriate driver in the .\DRIVERS )
* There is a bug in GO32 while opening file with read/write mode or
write only mode, I have already fixed it and rebuild GO32.EXE by
Borland C++ 3.1.
INVOKEC.H + BIND.H
+ EXTENDED.CC .. : Vendor dependent C library. Include your C functions
only here !
+ INVOKEC.CC ... : ANSI C standard library. (System independent)
+ CF.CC : Loader's source code.
SECTIONS.LD : Command file for GCC's linker : "ld.exe" .
It defines the memory layout of CF.
CF : Use GCC to compile CF.CC ( use CYCLE.BAT or MAKEFILE )
CF.EXE : GO32.EXE + CF = CF.EXE ( use BIND.BAT )
.\DRIVERS\*.* : Video drivers for GO32.
.\FONTS\*.* : Several fonts for GRX.
Note : VIDEOID.EXE in .\DRIVERS is a public domain program written
by Bob Berry . See VIDEOID.DOC for detail.
! Notice ! The programs listed above ( CF.CC + SECTIONS.LD + CF + CF.EXE ) !
! ÍÍÍÍÍÍÍÍ and any other program released by GNU ( GO32 + EMU387 ... ) !
! are protected under GNU's copyleft license. !
! !
! But all Forth programs listed below contains not a single byte !
! from GNU's code, they are originally derived from 16bit !
! eForth . The image itself is originally executed under PHAR !
! LAP's RUN386 DOS Extender, and for any source codes listed !
! below contains NOT A LITTLE CODE FROM GNU's RELEASED programs. !
! Except for the interface program definitions which is complete !
! compatible with DJGPP's library ( might also be compatible !
! with other C(++) compilers ). For all other programs, they are !
! all derived ( meta-compiled ) by previous Common Forth from !
! version to version. And the Common Forth itself is derived !
! from the subroutine threaded 16bit eForth by Richard E. Haskell. !
! !
! Thus for these programs not protected by GNU's General Public !
! License, copyrights are reserved by Luke Lee. See the first !
! paragraph of this README.TXT file. Maybe someday I will release !
! them according to GNU's General Public License . !
! !
! These programs which are not copylefted by GNU can be executed !
! under any other DOS Extender ( Portability ) with proper !
! environment setting or with some other kind of meta compilation. !
! They are all in source level or in machine code level with no !
! invocation to GNU's code. You can execute them without DJGPP. !
! But for DJGPP interface programs such as GRX.4TH , they !
! won't be able to be executed without LIBGRX's code . Of course, !
! you can write your own C(++) graphics library which is source !
! level compatiable with LIBGRX. !
! !
! ! Notice ! Please refer to GNU's General Public License for using GNU's !
! library. !
You can use any other C(++) compiler to write a loader in order to load
the following codes into your operating system.
CF.INI : Initialization program, just like AUTOEXEC.BAT .
CF.IMG : Common Forth Code/Data image file.
CF.HED : Common Forth Head image file.
CF_IMG.BAK
CF_HED.BAK : Backup file for current image, incase you accentially
deletes them or FSAVE a system which cannot executes
normally. Just do :
COPY CF_IMG.BAK CF.IMG
COPY CF_HED.BAK CF.HED
to restore original system.
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
High Level Forth Modules
ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
You don't have to FLOAD or NEEDS these modules yourself, they have already
been FLOADed previously.
HI.4TH : Miscellaneous words and other high level definition module
loading program. It is used only when the target system
has just been Meta-compiled, not until you FLOAD HI.4TH
you can't do SAVE-SYSTEM ( FSAVE ) or WORDS or FORGET ....
STRUCT.4TH : Simple data structure defining words, nesting data
structures and unions are also supported, the Forth head
structure is now defined this way to reduce the requirement
for accessing fields by specifying the offset value directly.
For example, you might have to use "10 +" to access the
field with offset 10 in a data structure, this is not a
good programming habit and may result in unpredictable
bugs, now use STRUCT: and ;STRUCT to define structures
will help you preventing such kind of problems.
MEMMAP.4TH : System memory description, use STRUCT: and ;STRUCT to
describe memory map.
CASE.4TH : CASE ... OF ... ENDOF ... ENDCASE structure.
DOLOOP.4TH : DO ... LOOP and ?DO ... LOOP. ( +LOOP, LEAVE and ?LEAVE
are also included ).
VOCAB.4TH : Vocabulary words. Note: The word ".VOCS" replace the name
in F-PC : "VOCS" .
MULTASK.4TH : A very fast multitasking system for Common Forth; unlike any
other FORTH systems, its execution mechanism is not a jump;
and sleep tasks will cause no delay since there is no jump
instructions to jump through them. (prototype)
I use circular double linked-list to implement this. It's
usage is still the same as other Forth systems but the
internal mechanism is different.
STKEXPR.4TH : Introduced in Common Forth 1.2, the stack expression for
data stack. There is no need to put local variables in
return stack. Read the file for more examples. (prototype)
From CF 1.48, it supported one CREATE and multiple DOES> .
In fact, in previous versions, you could use single CREATE
and multiple DOES> before you FLOAD STKEXPR.4TH; now it is
available even if STKEXPR.4TH is FLOADed .
( Example : FIELD: in STRUCT.4TH )
Some stack balance checking has already been implemented.
Now compiling words doesn't have to care about how to
maintain a correct value of the local stack pointer . You
don't even have to know what the 'compiling time local stack
pointer' is.
FSAVE.4TH : Save system, FSAVE is the alias for SAVE-SYSTEM, it will
create 2 image files, one named CF.IMG which stores the
code space of your system; another named CF.HED which
stores the head space of your system. If you are building
a turnkey system, just drop the CF.HED . (prototype)
SHORTCUT.4TH : My creation. In fact, this idea came from ADA language;
in ADA, if you don't specifically use 'ANDTHEN' and 'ORELSE'
, all Boolean evaluation will be treated as full evaluation.
Now I introduce ANDTHEN ... THEN-AND and ORELSE ... ELSE-OR
control structure for FORTH .
KEYBUF.4TH : Command history recording tools, with a simple line editor.
Its function is very similar to DOSKEY.COM in MSDOS 5.0.
(prototype)
TRACER.4TH : A simple debugging tool. Stack depth checking before enter/
leave some Forth word, execution sequence displaying and
data stack frame displaying. (prototype)
Reference to TRACER.4TH for detail help.
Ex. TRACER ON
FLOAD HANOI.4TH
TRACING ON
4 TOWER-OF-HANOI // See the result !
TRACER/RESET
#IF.4TH : Conditional compilation .
Syntax :
... #IF ... #ELSE ... #ENDIF
ASSERT.4TH : Assertion making tool. For testing program's assertion.
(prototype)
Like :
ASSERT{
ArrayIndex LowerBound UpperBound BETWEEN
}?ASSERT" Array index exceed boundary."
A variable named NODEBUG is used to control the compiling
process, if you use 'NODEBUG ON' , ASSERT{ won't lay down
any code. In short, it's function is just like <assert.h>
in C(++) language.
---------------------------------------------------------------------
* Not like those modules listed above which are loaded by HI.4TH, the
following files should be FLOADed explicitly .
---------------------------------------------------------------------
ALLTOOLS.4TH : FLOAD this file will eventually FLOAD some of the following
tools below, just for your convenience .
Note that it takes a lot of memory since SEE will grow
VERY fast for building the 'macro recoginaztion tree',
the algorithm and data structure will be modified later
and it will save at least 80% memory wasted in one-way
branching tree nodes.
CPU80486.4TH : A complete 80486 assembler, including both 16-bit mode and
32-bit mode, use USE16 and USE32 to switch between them.
Both PREFIX and POSTFIX syntax are implemented. The
default setting is prefix syntax . If you wants to use
postfix syntax, just type in " POSTFIX SYNTAX " . In the
PREFIX SYNTAX setting, postfix syntax could be used either !
But for macro definition and inline definitions, you have
to use postfix syntax.
All instructions and addressing modes are supported
( except for ESC ), only valid instructions with appropriate
addressing modes are accepted by this assembler, all
other combinations will be treated as error. So you don't
have to worry about that it might generate some illegal
instructions. All legal instructions and addressing modes
have already been checked by PHAR-LAP debugger ( I also found
some bugs in 386DEBUG while disassembling ) and Turbo
assembler/debugger.
However, I strongly suggest you use DISASM.4TH to examine
the assembled codes since I don't guarantee that all
possible errors in your code word would be detected by this
assembler. So it is possible that some of your errors will
not be reported on screen.
The syntax is very clear and uniform,
for example :
PREFIX SYNTAX
// default setting, allow both PREFIX and POSTFIX syntax
// INSTRUCTION DESTINATION SOURCE
MOV { VARIABLE-NAME } EAX
MOV { EAX ESI + } 234 #
JMP ' FORTH-NAME #
JMPF 1234 # ABCDDCBA #
CALLF { ADDRESS }
POSTFIX SYNTAX
// DESTINATION SOURCE INSTRUCTION
{ VARIABLE-NAME } EAX MOV
{ EAX ESI + } 234 # MOV
' FORTH-NAME # JMP
1234 # ABCDDCBA # JMPF
{ ADDRESS } CALLF
For each instruction, refer to VERIFY.4TH for a correct
syntax.
Now global labels are also implemented now, forward
references are also allowed. See VERIFY.4TH for usage.
From version 1.55, CPU80486.4TH also includes a complete
80486 disassembler.
Advantage of postfix notation :
1. Meet the concept of data-flow.
2. Easy to used in colon definitions in order to compile
some codes, for example, a macro ( for postfix syntax
only ) :
ALSO ASSEMBLER ALSO FORTH DEFINITIONS
: T EAX ; : SP EBP ;
: $PUSHT
SP { SP 4 - } LEA
{ SP } T MOV ;
PREVIOUS PREVIOUS
CODE: TEST ( -- 5 )
$PUSHT
T 5 # MOV
RET
;CODE
3. Since this system is a macro expansion subroutine threaded
Forth system, the execution speed is much faster than
direct threaded codes ( except for screen I/O , disk I/O ),
so you should implement your Forth program with high level
words whenever possible.
( Try :
DECIMAL
: TEST 1000000 FOR 4311 431 + DROP NEXT ;
TEST
in 80486-50 CPU, this takes about 1/2 second )
þ NOTE: It is NOT public domain, you could use it to
write assembly for your own application, the target code
is of course yours but the assembler/disassembler itself
is copyrighted and cannot be used for commercial use. You
are agree to distribute it but not for profit.
DISASM.4TH : An output program using CPU80486.4TH's disassembler .
There are two kinds of output format, one is "CFASM-LOOK",
which is the default setting; the other is "MASM-LOOK".
Using CFASM-LOOK will make the outputs looks exactly
the same as CPU80486.4TH syntax ; yet using MASM-LOOK
will makes it looks like MASM syntax .
VERIFY.4TH : This file is written originally for debugging the assembler,
since all the instructions have already been verified, it
now become a valuable reference for a correct syntax for
each instruction . There is another version named VERIFYPO.4TH
for POSTFIX SYNTAX.
INVOKEC.4TH : C++ function invoking tool. This is THE ONLY feature in
this system. You could even use infix C syntax to invoke
C functions, like :
cprintf( Z$" %d %d" , a , b );
Refer to DEMO_C.4TH for detail.
(prototype)
SEE.4TH : A powerful discompiler. The discompiling process never need
the disassembler ( DISASM.4TH + CPU80486.4TH ), but if it
fail to discompile any word it will invoke the disassembler
to display it. That's why it needs DISASM.4TH. The
discompiling process never invoke assembler/disassembler.
Many complex control structure have already been
implemented. Currently the following control structure
cannot be seen yet, it will soon be modified.
DO ...
WHILE
...
LOOP
...
ELSE 3RDROP
...
THEN
FLOAT.4TH : Floating point operations. It will load INVOKEC.4TH first.
Before you FLOADing this package, numbers like "1.234" are
illegal. Now "1.234" will be converted into 64bit floating
on data stack. You can use 'F.' or 'E.' ... to display it.
387FLOAT.4TH : Like FLOAT.4TH but faster since it use 80387 instructions
directly. However, I cannot guarntee that all floating
point exceptions will be handled. If you are seeking for
safer floating point package, use FLOAT.4TH instead.
GRX.4TH : Graphics mode interface implemented according to DJGPP's
GRX library. Please reference to LIBGRX.DOC for a manual
for GRX library functions .
GRAPHICS.4TH : A prelimiliary release of Common Forth Standard Graphics
Interface. Follow this standard interface and your graphics
program will works under other environments like Watcom's
graphics library ( of course, runs under watcom's execution
environment ).
Use 'GRAPHICS-MODE' to enter graphics mode,
Use 'TEXT-MODE' to return text mode. Please reference to
MANUAL.DOC .
DOSCMD.4TH : Commonly used DOS words like DIR , COPY , CD ...
CHINESE.4TH : A Chinese System for Common Forth, support Eten System,
and Chinese input facility have not been implemented yet .
For its usage please refers to MANUAL.DOC.
KEYTABLE.4TH : A keyboard mapping tools, remap your keyborard or perform
some special action on special key-stroke.
SPOOLER.4TH : A background spooler for printing, it's a good sample
program for multitasking. A new version is implemented,
now the printer output is thru BIOS calls, and it will
check for printer busy to achieve minimum delay for
faster printers.
LOG.4TH : A very useful tool for logging terminal texts, written by
Sam Chen and modified by Luke Lee for graphics mode. It's
especially useful while debugging. For example :
FLOAD LOG.4TH
LOGTO HANOI.LOG
TRACER ON
FLOAD HANOI.4TH
TRACER OFF TRACING ON
4 TOWER-OF-HANOI
LOGEND
DOS EDIT HANOI.LOG
DBG1652.4TH : An assembly level debugger for Common Forth v1.652 written by
Sam Chen, not fully implemented yet.
If you see wired characters in source code, it is Chinese
Big-5 code.
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Meta Compilation Modules
ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
Please reference to MANUAL.DOC or CFMETA.4TH for details.
CFMETA.4TH : Meta compiler.
CF0.4TH : Common Forth 1.6X source code.
CFMETA : Automatical meta-compilation
META2 : For automatical meta pass 2.
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Demonstration Programs
ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
* Many other demonstration programs are included in .\SAMPLES subdirectory.
DEMO_C.4TH : Demonstration program for writing C function calls.
Also demonstrates floating point numbers.
DEMO_SEE.4TH : Demonstration program to use SEE .
DEMO_GRX.4TH : Only partially implemented, demonstrates the minimal power
of GRX library and GRX text-emulation .
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
3DROTATE.4TH : A program written by George Mai, and I just port it
to this system. It's a good example for demonstrating
multitasking, graphics facility and the performance
of floating operations.
3DR.4TH : A facinating rewritten version by Sam Chen, try it and
you will be surprised. Total eight background tasks (
including the cusor-task ) and one forground task.
This program is written specifically for DJGPP+GRX.
3DRP.4TH : A portable version for 3DR by Sam Chen, I just modify
it for standard graphics library GRAPHICS.4TH, this
program can be executed under different environments :
DJGPP+GO32, WATCOM+PHARLAP and WATCOM+PMODE/W .
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
HANOI.4TH : A demonstration for recursive programs and Stack Expression,
you will see the much more readable FORTH word
TOWER-OF-HANOI, compare it with the old-styled FORTH
TOWER-OF-HANOI0 and you will realize how elegant and how
clear you can express your FORTH program with the unique
Stack Expression for Common Forth.
FIB.4TH : Another demonstration program for stack expression, it is
recommended that you should not use integer greater than
30 ( type in "30 FIB" ), or you might have to wait for
a VERY LONG time.
KEYBUF.4TH : You could treat this tool as another demonstration program,
It use a lot of Stack Expression, including using them in
CASE ... ENDCASE structure.
ROMAN.4TH : An example from Thinking Forth, I implement it with different
way, but I believe the implementation in Thinking Forth is
much better since I use CASE structure to prevent calculation.
* For other sample programs, refers to .\SAMPLES subdirectory.
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Turnkey System Building
ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
In this version, you can build your turnkey application now, there are
several files supporting this :
RKSEARCH.4TH : Robin-Karp string searching algorithm, in this algorithm,
a good prime number is very important, I use 8388593
for CONSTANT RKMagic , if you can find a better prime
number, please tell me, it will speed up this algorithm.
TURNKEY.4TH : There are three versions for this, for DJGPP+GO32,
for WATCOM+PHARLAP and for WATCOM+PMODE/W, the only
difference is this word :
: TurnkeySystemFiles (( -- $name1 $name2 ))
$" GO32.EXE" $" TURNKEY." // GO32 version.
// $" STUB386.EXE" $" TURNKEY." // Phar Lap RUN386
// $" NUL" $" CF.EXE" // PMode/W version
; 0 2 #PARMS
comment out the other versions and leave the one you need,
and you can build your turnkey application according to
the C/C++ compiler you are using.
T3DRP.4TH : A sample turnkey program for 3DRP.4TH,
which can be executed under different platforms :
DJGPP+GO32 , WATCOM+PHARLAP and WATCOM+PMODE/W .
Try this :
F:\CF>CF FLOAD T3DRP.4TH BYE
and it will build 3DRP.EXE, 3DRP.IMG and 3DRP.HED.
You can release the 3DRP.EXE as your application.
T3DR.4TH : A sample turnkey building program for 3DR.4TH,
try this :
F:\CF>CF FLOAD T3DR.4TH BYE
and it will build 3DR.EXE, 3DR.IMG and 3DR.HED.
You can release the 3DR.EXE as your application.
THANOI.4TH : A sample program for HANOI.4TH .
CF FLOAD THANOI.4TH BYE
will build HANOI.EXE, HANOI.IMG and HANOI.HED.
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
About MetaForth v1.0
ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
In the sub-directory MF, it contains a tiny 32-bit Forth system
named 'MetaForth'. The purpose for this system is for 'teaching'
meta-compilation. This system might not have pratical use but
should serve good for teaching's purpose.
No documentation for this system yet, sorry.
The complete meta-compiling procedure is :
A) Executable needed : CF v1.654 or above, GO32.EXE+MF.
Source needed : MFMETA.4TH and MF.MF
B) Steps : Copy the MetaForth source to your working directory,
for example, F:\CF :
B.1) Meta compilation from Common Forth to Meta Forth.
1. F:\CF>CF.EXE
2. FLOAD MFMETA.4TH
3. FSAVE MF.BIN BYE
- - - - - - - - - - - - - - -
B.2) Meta compiling MetaForth itself.
4. F:\CF>GO32 MF
5. HERE META
6. $180000 META
7. FSAVE MF.BIN BYE
goto step 4. to meta again. (just like RIFORTH)
Demonstration programs for MetaForth :
HI.MF : Miscellaneous hi-level definitions for MetaForth.
HANOI.MF : Tower-of-Hanoi .
FIB.MF : Fibonacci number .
TEST.MF : Several testing .
How to run :
1. GO32 MF
2. FLOAD HI.MF
3. FLOAD TEST.MF
4. FLOAD HANOI.MF
5. 4 TOWER-OF-HANOI
6. FLOAD FIB.MF
7. .FIBSEQ
Note :
1. MF. is build from MAKEFILE with DJGPP.
2. MF.EXE is a turnkey system build from MF.4TH . Just like
the above turnkey applications you have seen.
eMail address : comforth@ms2.hinet.net
þ P.S. Mail me only bugs since I might not have time to reply your
letter, please. And Thanks.
10/09/'97 Luke Lee
. ú ú ù ù ùùùÄ ÄÄ ÄÄÄ ÄÄÄÄ ÄÄÄÄÄÄ ÄÄÄÄÄÄÄ ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ