• Philosophical question

    From Jeff Chimene@21:1/5 to All on Sat Aug 13 10:03:36 2022
    As this is also referential to the late Dr. Ting, whose "Footsteps" inspires my current project, I ask the following question:

    "... what an innovation is the parallel bus architecture."
    Does the existence of the Novix machines make other Forth implementations a simulation? If so, does this extend to all TILs?
    I'm sure there other machines whose instruction sets don't need an assemble/link/load phase, but I can't think of one right now.
    Unless there was a predecessor to what Moore did, the Novix reduction to practice rendered every other Forth system a simulation.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Marcel Hendrix@21:1/5 to jchi...@gmail.com on Sat Aug 13 11:00:44 2022
    On Saturday, August 13, 2022 at 7:03:38 PM UTC+2, jchi...@gmail.com wrote:
    As this is also referential to the late Dr. Ting, whose "Footsteps" inspires my
    current project, I ask the following question:
    [..]
    Does the existence of the Novix machines make other Forth implementations
    a simulation?
    [..]
    Unless there was a predecessor to what Moore did, the Novix reduction to practice rendered every other Forth system a simulation.

    I think you have it backwards.
    Does the existence of industrial robots make (some) human beings a simulation?

    Maybe it could be argued in case of a Turing machine.

    -marcel

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Jeff Chimene@21:1/5 to Zbig on Sat Aug 13 11:33:33 2022
    On Saturday, August 13, 2022 at 11:24:42 AM UTC-7, Zbig wrote:
    Does the existence of the Novix machines make other Forth implementations a simulation? If so, does this extend to all TILs?
    Does the existence of integrated circuits make all the „discrete” electronic
    circuits a mere simulation of ICs?
    I should also point out that "mere" is doing a lot work in that sentence.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Jeff Chimene@21:1/5 to Marcel Hendrix on Sat Aug 13 11:29:32 2022
    On Saturday, August 13, 2022 at 11:00:45 AM UTC-7, Marcel Hendrix wrote:
    On Saturday, August 13, 2022 at 7:03:38 PM UTC+2, jchi...@gmail.com wrote:
    As this is also referential to the late Dr. Ting, whose "Footsteps" inspires my
    current project, I ask the following question:
    [..]
    Does the existence of the Novix machines make other Forth implementations a simulation?
    [..]
    Unless there was a predecessor to what Moore did, the Novix reduction to practice rendered every other Forth system a simulation.
    I think you have it backwards.
    Does the existence of industrial robots make (some) human beings a simulation?

    Maybe it could be argued in case of a Turing machine.

    -marcel
    Nice.
    However, these machines execute Forth as their instruction set. When Forth is running on another architecture, it's running using that machine's instruction set. Since the invention of the Novix product (unless it has a predecessor), we now have a
    machine that executes Forth as its instruction set. I can't think of another class of languages for which this is possible except TILs. Consider the PDP-11 instruction set and PDP-11 simulators. Anywhere that instruction set executes that is not a PDP-11,
    such a set is running on a simulator. In this case, the simulator(s) come into existence after the machine. In Forth's case, the machine that executes that instruction set came into existence after the language that expresses its instruction set

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Jeff Chimene@21:1/5 to Zbig on Sat Aug 13 11:31:22 2022
    On Saturday, August 13, 2022 at 11:24:42 AM UTC-7, Zbig wrote:
    Does the existence of the Novix machines make other Forth implementations a simulation? If so, does this extend to all TILs?
    Does the existence of integrated circuits make all the „discrete” electronic
    circuits a mere simulation of ICs?
    I think in a sense it does.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Zbig@21:1/5 to All on Sat Aug 13 11:24:41 2022
    Does the existence of the Novix machines make other Forth implementations a simulation? If so, does this extend to all TILs?

    Does the existence of integrated circuits make all the „discrete” electronic
    circuits a mere simulation of ICs?

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Jurgen Pitaske@21:1/5 to jchi...@gmail.com on Sat Aug 13 12:31:32 2022
    On Saturday, 13 August 2022 at 19:33:35 UTC+1, jchi...@gmail.com wrote:
    On Saturday, August 13, 2022 at 11:24:42 AM UTC-7, Zbig wrote:
    Does the existence of the Novix machines make other Forth implementations a simulation?
    If so, does this extend to all TILs?
    Does the existence of integrated circuits make all the „discrete” electronic
    circuits a mere simulation of ICs?
    I should also point out that "mere" is doing a lot work in that sentence.

    I am not sure what the basis of this discussion is.

    Who owns a NOVIX NC4000?

    Where can I buy one?

    Is there a NOVIX simulator somewhere, online, done in Javascript?
    Or for download to execute on my PC / RPI, else ?

    Where is the implementation in VHDL / Verilog as an alternative.
    I assume this would not be the real thing either????
    But I can execute something there on an FPGA?

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Paul Rubin@21:1/5 to Jurgen Pitaske on Sat Aug 13 12:49:56 2022
    Jurgen Pitaske <jpitaske@gmail.com> writes:
    Where is the implementation in VHDL / Verilog as an alternative.
    I assume this would not be the real thing either????
    But I can execute something there on an FPGA?

    There is the J1. But even an actual silicon Novix 4000 may only be a simulation, of the conjectured elementary "Forth particle" that
    triggered the Big Bang. It is supposed to be the source of all
    computation in the Universe.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Jeff Chimene@21:1/5 to jpit...@gmail.com on Sat Aug 13 12:59:07 2022
    On Saturday, August 13, 2022 at 12:31:34 PM UTC-7, jpit...@gmail.com wrote:
    On Saturday, 13 August 2022 at 19:33:35 UTC+1, jchi...@gmail.com wrote:
    On Saturday, August 13, 2022 at 11:24:42 AM UTC-7, Zbig wrote:
    Does the existence of the Novix machines make other Forth implementations a simulation?
    If so, does this extend to all TILs?
    Does the existence of integrated circuits make all the „discrete” electronic
    circuits a mere simulation of ICs?
    I should also point out that "mere" is doing a lot work in that sentence.
    I am not sure what the basis of this discussion is.

    Who owns a NOVIX NC4000?

    Where can I buy one?

    Is there a NOVIX simulator somewhere, online, done in Javascript?
    Or for download to execute on my PC / RPI, else ?

    Where is the implementation in VHDL / Verilog as an alternative.
    I assume this would not be the real thing either????
    But I can execute something there on an FPGA?

    I doubt there is a Novix 4000 simulator, in that it would have to replicate bugs in the original hardware design. Dr. Ting's book, "Footsteps In An Empty Valley" does a good job explaining this issue. A simulator for its successor, the Harris RTX line
    exists, and is called RTX2000_SIMULATOR.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Jeff Chimene@21:1/5 to Zbig on Sat Aug 13 12:54:08 2022
    On Saturday, August 13, 2022 at 11:24:42 AM UTC-7, Zbig wrote:
    Does the existence of the Novix machines make other Forth implementations a simulation? If so, does this extend to all TILs?
    Does the existence of integrated circuits make all the „discrete” electronic
    circuits a mere simulation of ICs?
    Thinking about it a bit more in this context, no. Because there is no intermediate form for such a hardware implementation, i.e. it's not a language.
    For this particular question the intermediate term refers to representing a Forth kernel in a non-Forth language. For example, atlast or fig-forth. Both Forth systems must be rendered in object code before they're useful. No such restriction exists in
    the case you describe. Both machines uniquely represent their function, in the sense that Forth executes directly on the Novix designs. In the hardware case, the IC is prior work, a legacy solution superceded by discrete circuits.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Jurgen Pitaske@21:1/5 to Paul Rubin on Sat Aug 13 13:12:29 2022
    On Saturday, 13 August 2022 at 20:49:58 UTC+1, Paul Rubin wrote:
    Jurgen Pitaske <jpit...@gmail.com> writes:
    Where is the implementation in VHDL / Verilog as an alternative.
    I assume this would not be the real thing either????
    But I can execute something there on an FPGA?

    There is the J1. But even an actual silicon Novix 4000 may only be a simulation, of the conjectured elementary "Forth particle" that
    triggered the Big Bang. It is supposed to be the source of all
    computation in the Universe.

    How close is the J1 to the NOVIX????

    And by the way - are you taking the Piss????????

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From dxforth@21:1/5 to Marcel Hendrix on Sun Aug 14 15:34:56 2022
    On 14/08/2022 04:00, Marcel Hendrix wrote:
    On Saturday, August 13, 2022 at 7:03:38 PM UTC+2, jchi...@gmail.com wrote:
    As this is also referential to the late Dr. Ting, whose "Footsteps" inspires my
    current project, I ask the following question:
    [..]
    Does the existence of the Novix machines make other Forth implementations
    a simulation?
    [..]
    Unless there was a predecessor to what Moore did, the Novix reduction to
    practice rendered every other Forth system a simulation.

    I think you have it backwards.
    Does the existence of industrial robots make (some) human beings a simulation?

    It made them redundant. Who can say it won't happen to (human) programmers.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Jurgen Pitaske@21:1/5 to jchi...@gmail.com on Sat Aug 13 23:21:30 2022
    On Saturday, 13 August 2022 at 18:03:38 UTC+1, jchi...@gmail.com wrote:
    As this is also referential to the late Dr. Ting, whose "Footsteps" inspires my current project, I ask the following question:

    "... what an innovation is the parallel bus architecture."
    Does the existence of the Novix machines make other Forth implementations a simulation? If so, does this extend to all TILs?
    I'm sure there other machines whose instruction sets don't need an assemble/link/load phase, but I can't think of one right now.
    Unless there was a predecessor to what Moore did, the Novix reduction to practice rendered every other Forth system a simulation.

    Ting's book this is related to https://www.amazon.co.uk/gp/product/B06X6JGM5L/ref=dbs_a_def_rwt_bibl_vppi_i21

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Jurgen Pitaske@21:1/5 to Jurgen Pitaske on Sun Aug 14 00:03:10 2022
    On Sunday, 14 August 2022 at 07:21:31 UTC+1, Jurgen Pitaske wrote:
    On Saturday, 13 August 2022 at 18:03:38 UTC+1, jchi...@gmail.com wrote:
    As this is also referential to the late Dr. Ting, whose "Footsteps" inspires my current project, I ask the following question:

    "... what an innovation is the parallel bus architecture."
    Does the existence of the Novix machines make other Forth implementations a simulation? If so, does this extend to all TILs?
    I'm sure there other machines whose instruction sets don't need an assemble/link/load phase, but I can't think of one right now.
    Unless there was a predecessor to what Moore did, the Novix reduction to practice rendered every other Forth system a simulation.
    Ting's book this is related to https://www.amazon.co.uk/gp/product/B06X6JGM5L/ref=dbs_a_def_rwt_bibl_vppi_i21

    or here for download as PDF from Ting's Offete Store http://www.forth.org/OffeteStore/4001-footstepsFinal.pdf

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Anton Ertl@21:1/5 to Jeff Chimene on Sun Aug 14 11:40:37 2022
    Jeff Chimene <jchimene@gmail.com> writes:
    Does the existence of the Novix machines make other Forth implementations a simulation?

    The Novix NC4016 is a CPU with an instruction set where some
    instructions correspond 1:1 with some Forth words. Chuck Moore's more
    recent CPU cores (e.g., c18) have an even stronger correspondence.

    However, Forth is a programming language, while Novix and c18 are CPU
    (cores) and there are a number of things in Forth that go beyond what
    CPU cores offer. E.g., the Forth words IF and THEN cooperate and
    compile a conditional branch from the IF to the THEN; there is nothing
    like THEN in the Novix or C18.

    Concerning the fact that there parts of Forth that have a 1:1
    correspondence to Novix or c18 instructions: I think there are also a
    number of PDP-11, VAX, 68000, or MSP430 instructions that correspond
    1:1 with some Forth words in a native-code system; does not really
    help much. You can write a simple (machine-Forth-like) Forth system
    that compiles many primitives to a fixed sequence of bytes, and it
    does not matter whether the bytes are part of one or several
    instructions (as Chuck Moore himself demonstrated with the 386 port of
    machine Forth).

    Unless there was a predecessor to what Moore did, the Novix reduction to practice rendered every other Forth system a simulation.

    Forth systems implement (a variant of) the Forth programming language;
    they don't simulate the Novix NC 4016.

    - anton
    --
    M. Anton Ertl http://www.complang.tuwien.ac.at/anton/home.html
    comp.lang.forth FAQs: http://www.complang.tuwien.ac.at/forth/faq/toc.html
    New standard: https://forth-standard.org/
    EuroForth 2022: https://euro.theforth.net

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Jeff Chimene@21:1/5 to Anton Ertl on Sun Aug 14 05:45:53 2022
    On Sunday, August 14, 2022 at 4:57:27 AM UTC-7, Anton Ertl wrote:
    Jeff Chimene <jchi...@gmail.com> writes:
    Does the existence of the Novix machines make other Forth implementations a simulation?
    The Novix NC4016 is a CPU with an instruction set where some
    instructions correspond 1:1 with some Forth words. Chuck Moore's more
    recent CPU cores (e.g., c18) have an even stronger correspondence.

    However, Forth is a programming language, while Novix and c18 are CPU
    (cores) and there are a number of things in Forth that go beyond what
    CPU cores offer. E.g., the Forth words IF and THEN cooperate and
    compile a conditional branch from the IF to the THEN; there is nothing
    like THEN in the Novix or C18.

    Concerning the fact that there parts of Forth that have a 1:1
    correspondence to Novix or c18 instructions: I think there are also a
    number of PDP-11, VAX, 68000, or MSP430 instructions that correspond
    1:1 with some Forth words in a native-code system; does not really
    help much. You can write a simple (machine-Forth-like) Forth system
    that compiles many primitives to a fixed sequence of bytes, and it
    does not matter whether the bytes are part of one or several
    instructions (as Chuck Moore himself demonstrated with the 386 port of machine Forth).
    Unless there was a predecessor to what Moore did, the Novix reduction to practice rendered every other Forth system a simulation.
    Forth systems implement (a variant of) the Forth programming language;
    they don't simulate the Novix NC 4016.

    - anton
    --
    M. Anton Ertl http://www.complang.tuwien.ac.at/anton/home.html comp.lang.forth FAQs: http://www.complang.tuwien.ac.at/forth/faq/toc.html
    New standard: https://forth-standard.org/
    EuroForth 2022: https://euro.theforth.net

    Thanks for taking the time to answer!

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Jeff Chimene@21:1/5 to Anton Ertl on Sun Aug 14 06:12:09 2022
    On Sunday, August 14, 2022 at 4:57:27 AM UTC-7, Anton Ertl wrote:
    Jeff Chimene <jchi...@gmail.com> writes:
    Does the existence of the Novix machines make other Forth implementations a simulation?
    The Novix NC4016 is a CPU with an instruction set where some
    instructions correspond 1:1 with some Forth words. Chuck Moore's more
    recent CPU cores (e.g., c18) have an even stronger correspondence.

    However, Forth is a programming language, while Novix and c18 are CPU (cores) and there are a number of things in Forth that go beyond what
    CPU cores offer. E.g., the Forth words IF and THEN cooperate and
    compile a conditional branch from the IF to the THEN; there is nothing
    like THEN in the Novix or C18.

    Concerning the fact that there parts of Forth that have a 1:1
    correspondence to Novix or c18 instructions: I think there are also a
    number of PDP-11, VAX, 68000, or MSP430 instructions that correspond
    1:1 with some Forth words in a native-code system; does not really
    help much. You can write a simple (machine-Forth-like) Forth system
    that compiles many primitives to a fixed sequence of bytes, and it
    does not matter whether the bytes are part of one or several
    instructions (as Chuck Moore himself demonstrated with the 386 port of machine Forth).
    Unless there was a predecessor to what Moore did, the Novix reduction to practice rendered every other Forth system a simulation.
    Forth systems implement (a variant of) the Forth programming language;
    they don't simulate the Novix NC 4016.

    - anton
    --
    M. Anton Ertl http://www.complang.tuwien.ac.at/anton/home.html comp.lang.forth FAQs: http://www.complang.tuwien.ac.at/forth/faq/toc.html New standard: https://forth-standard.org/
    EuroForth 2022: https://euro.theforth.net

    I want to correct my "other Forth system" phrase to "other Forth software-only systems", e.g. Gforth. The distinction I'm trying to define is that Forth has always been implemented as a language, requiring compilation to a target architecture. In the
    case of the Novix chips and their descendants, there is no such intermediate compilation required.

    Does that mean that your phrase "Forth systems implement ..." should be "Forth chips implement..."? If so, they certainly don't simulate the NC 4016, I didn't mean to imply they did.

    As you say, the chips don't implement IF or THEN. However, AppForth implements those words; I'm not sure if their absence in the hardware means the hardware implements a subset of the language. I've seen so many definitions of the language over time, I'm
    not sure what constitutes a set other than reduction to practice. I don't have a copy of he ANSI standard at hand, if that committee's work product is the answer.

    Anyway, I think this post, inspired as it was by a question posed by Lem's GOLEM XIV, is too philosophical for this forum. Thanks for reading!

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Jeff Chimene@21:1/5 to Heinrich Hohl on Sun Aug 14 07:05:45 2022
    On Sunday, August 14, 2022 at 6:59:03 AM UTC-7, Heinrich Hohl wrote:
    On Saturday, August 13, 2022 at 7:03:38 PM UTC+2, jchi...@gmail.com wrote:
    Does the existence of the Novix machines make other Forth implementations a simulation?
    This is almost correct. But the correct term is "Virtual Machine".

    This is from "Forth Programmer's Handbook" by Conklin & Rather:
    "A running Forth system presents to the programmer a virtual machine (VM), like a processor.
    It has two push-down stacks, code and data space, an Arithmetic Logic Unit (ALU) that executes
    instructions, and several registers."

    The Novix does not need to implement the VM in software because it is already available as hardware.

    Henry

    That's the answer. All other Forth implementations have always been virtual machines.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Heinrich Hohl@21:1/5 to jchi...@gmail.com on Sun Aug 14 06:59:01 2022
    On Saturday, August 13, 2022 at 7:03:38 PM UTC+2, jchi...@gmail.com wrote:
    Does the existence of the Novix machines make other Forth implementations a simulation?

    This is almost correct. But the correct term is "Virtual Machine".

    This is from "Forth Programmer's Handbook" by Conklin & Rather:
    "A running Forth system presents to the programmer a virtual machine (VM), like a processor.
    It has two push-down stacks, code and data space, an Arithmetic Logic Unit (ALU) that executes
    instructions, and several registers."

    The Novix does not need to implement the VM in software because it is already available as hardware.

    Henry

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Zbig@21:1/5 to All on Sun Aug 14 07:30:06 2022
    The Novix does not need to implement the VM in software because it is already available as hardware.

    Henry
    That's the answer. All other Forth implementations have always been virtual machines.

    The answer is false. Why?
    Because it was not these "simulations" that tried to imitate Novix, but the opposite was true: it was Novix that was modeled on these "simulations".

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Jeff Chimene@21:1/5 to Zbig on Sun Aug 14 08:14:11 2022
    On Sunday, August 14, 2022 at 7:30:07 AM UTC-7, Zbig wrote:
    The Novix does not need to implement the VM in software because it is already available as hardware.

    Henry
    That's the answer. All other Forth implementations have always been virtual machines.
    The answer is false. Why?
    Because it was not these "simulations" that tried to imitate Novix, but the opposite was true: it was Novix that was modeled on these "simulations".

    My original question was badly worded. I was unaware of the fact that all Forth kernels are, and always have been, Virtual Machines. The existence of the Novix chip does not change that Virtual quality.

    There's an interesting discussion on comp.os.vms about implementing an HPE Integrity simulator. The Integrity architecture, VLIW, has some similarity to the Novix architecture in that instruction decoding and execution are tightly coupled.

    The best compilers for the Integrity (they are compilers, not assemblers) need to be very good implementations of an Integrity Virtual Machine, where "good" is defined as producing code that keeps the machine busy. Turns out that's really hard to do.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Anton Ertl@21:1/5 to Jeff Chimene on Sun Aug 14 15:19:57 2022
    Jeff Chimene <jchimene@gmail.com> writes:
    The distinction I'm trying to define is that For=
    th has always been implemented as a language, requiring compilation to a ta= >rget architecture. In the case of the Novix chips and their descendants, th= >ere is no such intermediate compilation required.

    But there is: cmForth. Without cmForth you have to program the Novix
    as binary code. Chuck Moore went that way some years later for a
    time, but he did not use the name "Forth" for what he did at the time.
    The software he worked on was OKAD.

    - anton
    --
    M. Anton Ertl http://www.complang.tuwien.ac.at/anton/home.html
    comp.lang.forth FAQs: http://www.complang.tuwien.ac.at/forth/faq/toc.html
    New standard: https://forth-standard.org/
    EuroForth 2022: https://euro.theforth.net

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Jeff Chimene@21:1/5 to Anton Ertl on Sun Aug 14 08:39:16 2022
    On Sunday, August 14, 2022 at 8:25:22 AM UTC-7, Anton Ertl wrote:
    Jeff Chimene <jchi...@gmail.com> writes:
    The distinction I'm trying to define is that For=
    th has always been implemented as a language, requiring compilation to a ta= >rget architecture. In the case of the Novix chips and their descendants, th= >ere is no such intermediate compilation required.
    But there is: cmForth. Without cmForth you have to program the Novix
    as binary code. Chuck Moore went that way some years later for a
    time, but he did not use the name "Forth" for what he did at the time.
    The software he worked on was OKAD.
    - anton

    I'm not familiar with OKAD. AFAICT, the situation with cmForth is the same as AppForth for the RTX2001A. AppForth is capable of generating a ROM image using Turbo-C's MS-DOS I/O services. That image, loaded to ROM will be used by the RTX2001A .

    I think your point is that without a Virtual Machine, one would need a front panel (in the absence of boot ROM or some such input) device to boot an Actual Machine?

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Anton Ertl@21:1/5 to Jeff Chimene on Sun Aug 14 16:14:29 2022
    Jeff Chimene <jchimene@gmail.com> writes:
    AFAICT, the situation with cmForth is the same as AppForth for the RTX2001A. AppForth is capable of generating a ROM image using Turbo-C's MS-DOS I/O services. That image, loaded to ROM will be used by the RTX2001A .

    AFAIK, cmForth is a regular, interactive Forth system, not a
    cross-compiler.

    I think your point is that without a Virtual Machine, one would need a front panel (in the absence of boot ROM or some such input) device to boot an Actual Machine?

    What I mean is that without a Forth system like cmForth, you program
    the Novix not by writing, e.g.

    : squared dup + ;

    but by writing some Novix machine code in, say, octal; e.g.

    123456 , 654321 , 543210 , \ completely made up

    if you input the machine code in a Forth-like syntax. And yes, you
    would need some way to get that into the machine, but that's not my
    point.

    And in particular for the Novix NC4016, the machine code of even
    simple words like + is not a 1:1 mapping of the source code: Take a
    look at the following code from <https://github.com/ForthHub/cmFORTH/blob/combined/cmforth.fth> (I
    left the shadow screen away to stay withing line length conventions,
    but you can look at it by following the link):

    ( Binary operators) OCTAL
    : BINARY ( n n) CREATE , , DOES POP 77777 AND 2@
    ?CODE @ DUP IF @ DUP 117100 AND 107100 =
    OVER 177700 AND 157500 = OR IF ( v -!)
    DUP 107020 - IF SWAP DROP XOR DUP 700 AND 200 = IF
    500 XOR ELSE DUP 70000 AND 0= IF 20 XOR THEN THEN
    ?CODE @ ! EXIT THEN
    THEN THEN DROP ,C DROP ;
    : SHIFT ( n n) CREATE , , DOES POP 77777 AND 2@
    ?CODE @ ?DUP IF @ AND 100000 = WHILE ?CODE @ +! EXIT THEN
    DROP THEN 100000 XOR ,C ;
    COMPILER 7100 107020 BINARY DROP
    4100 103020 BINARY OR 2100 105020 BINARY XOR
    6100 101020 BINARY AND 3100 104020 BINARY +
    5100 106020 BINARY - 1100 102020 BINARY SWAP-
    2 171003 SHIFT 2* 1 171003 SHIFT 2/ 3 177003 SHIFT 0<

    It tells a lot about the distance between Forth and Novix machine code
    that I cannot easily tell from the code above to what machine code
    cmForth compiles a "+" if it does not combine it with anything else,
    and what kinds of combinations are possible.

    Concerning virtual machines: The classical threaded-code Forth systems
    were implemented with techniques that I call virtual-machine
    interpreters: In these systems the source code is compiled to
    threaded-code, and you can consider the threaded code consisting of virtual-machine instructions. E.g., IF is compiled to ?BRANCH
    followed by the target address; THEN sets the target address of the corresponding IF. But for simple native-code systems, there is no virtual-machine interpreter and nothing else that I would call a
    virtual machine.

    - anton
    --
    M. Anton Ertl http://www.complang.tuwien.ac.at/anton/home.html
    comp.lang.forth FAQs: http://www.complang.tuwien.ac.at/forth/faq/toc.html
    New standard: https://forth-standard.org/
    EuroForth 2022: https://euro.theforth.net

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Jeff Chimene@21:1/5 to Anton Ertl on Sun Aug 14 11:13:00 2022
    On Sunday, August 14, 2022 at 9:49:24 AM UTC-7, Anton Ertl wrote:
    Jeff Chimene <jchi...@gmail.com> writes:
    AFAICT, the situation with cmForth is the same as AppForth for the RTX2001A. AppForth is capable of generating a ROM image using Turbo-C's MS-DOS I/O services. That image, loaded to ROM will be used by the RTX2001A .
    AFAIK, cmForth is a regular, interactive Forth system, not a
    cross-compiler.

    Probably true. I'm not too familiar with it. "Footsteps" does a very good job of explaining it to me, esp MAX and MIN

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Jeff Chimene@21:1/5 to Anton Ertl on Sun Aug 14 11:11:23 2022
    On Sunday, August 14, 2022 at 9:49:24 AM UTC-7, Anton Ertl wrote:
    Jeff Chimene <jchi...@gmail.com> writes:
    AFAICT, the situation with cmForth is the same as AppForth for the RTX2001A. AppForth is capable of generating a ROM image using Turbo-C's MS-DOS I/O services. That image, loaded to ROM will be used by the RTX2001A .
    AFAIK, cmForth is a regular, interactive Forth system, not a
    cross-compiler.

    Probably true. I'm too familiar with it. "Footsteps" does a very good job of explaining it to me, esp MAX and MIN

    I think your point is that without a Virtual Machine, one would need a front panel (in the absence of boot ROM or some such input) device to boot an Actual Machine?
    What I mean is that without a Forth system like cmForth, you program
    the Novix not by writing, e.g.

    : squared dup + ;

    but by writing some Novix machine code in, say, octal; e.g.

    123456 , 654321 , 543210 , \ completely made up
    if you input the machine code in a Forth-like syntax.

    Agreed. I find that whole technique very annoying.
    AppForth generates a loadable ROM image, in the process generating inline instructions.

    And yes, you
    would need some way to get that into the machine, but that's not my
    point.

    Ok.

    And in particular for the Novix NC4016, the machine code of even
    simple words like + is not a 1:1 mapping of the source code: Take a
    look at the following code from <https://github.com/ForthHub/cmFORTH/blob/combined/cmforth.fth> (I
    left the shadow screen away to stay withing line length conventions,
    but you can look at it by following the link):

    <snip>

    Yeah, it's ugly.

    It tells a lot about the distance between Forth and Novix machine code
    that I cannot easily tell from the code above to what machine code
    cmForth compiles a "+" if it does not combine it with anything else,
    and what kinds of combinations are possible.

    Agreed. That's why I'd like to investigating the RTX2001A. It has a much better Forth (AppForth) for this purpose. It also uses the embedded machine code technique, but it's better structured, IMO.

    Concerning virtual machines: The classical threaded-code Forth systems
    were implemented with techniques that I call virtual-machine
    interpreters: In these systems the source code is compiled to
    threaded-code, and you can consider the threaded code consisting of virtual-machine instructions. E.g., IF is compiled to ?BRANCH
    followed by the target address; THEN sets the target address of the corresponding IF.

    This looks like fig-forth? I've also seen the term "indirect threaded code interpreter" applied to such.

    But for simple native-code systems, there is no virtual-machine interpreter and nothing else that I would call a virtual machine.

    I don't understand why they wouldn't be virtual. The instructions executed are those of the host machine, aren't they? To be clear, are you disagreeing with the earlier quote from "Forth Programmer's Handbook"?

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Heinrich Hohl@21:1/5 to Anton Ertl on Sun Aug 14 12:44:34 2022
    On Sunday, August 14, 2022 at 6:49:24 PM UTC+2, Anton Ertl wrote:
    But for simple native-code systems, there is no virtual-machine interpreter and nothing else that I would call a virtual machine.

    It is correct that native-code systems do no use a virtual machine interpreter. They execute the compiled binary code right away.

    But native-code systems still pretend to have a Virtual Machine when you write high level Forth code. For example, you can define

    : squared dup + ;

    although the underlying i386 processor does not know what DUP means.

    You can of course bypass the virtual machine compiler (= high level Forth compiler)
    by writing a CODE definition. In this case you must access the processor's registers
    directly, and VM commands such as DUP cannot be used.

    Henry

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Anton Ertl@21:1/5 to Heinrich Hohl on Sun Aug 14 21:07:45 2022
    Heinrich Hohl <hheinrich.hohl@gmail.com> writes:
    But native-code systems still pretend to have a Virtual Machine when you write >high level Forth code. For example, you can define

    : squared dup + ;

    although the underlying i386 processor does not know what DUP means.

    DUP is a Forth word. I see no point in introducing the concept of a
    virtual machine to explain it.

    - anton
    --
    M. Anton Ertl http://www.complang.tuwien.ac.at/anton/home.html
    comp.lang.forth FAQs: http://www.complang.tuwien.ac.at/forth/faq/toc.html
    New standard: https://forth-standard.org/
    EuroForth 2022: https://euro.theforth.net

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Anton Ertl@21:1/5 to Jeff Chimene on Sun Aug 14 20:55:44 2022
    Jeff Chimene <jchimene@gmail.com> writes:
    On Sunday, August 14, 2022 at 9:49:24 AM UTC-7, Anton Ertl wrote:
    Concerning virtual machines: The classical threaded-code Forth systems
    were implemented with techniques that I call virtual-machine
    interpreters: In these systems the source code is compiled to
    threaded-code, and you can consider the threaded code consisting of
    virtual-machine instructions. E.g., IF is compiled to ?BRANCH
    followed by the target address; THEN sets the target address of the
    corresponding IF.

    This looks like fig-forth?

    fig-Forth uses that, and many other Forth systems as well.

    I've also seen the term "indirect threaded code interpreter" applied to such.

    fig-Forth uses indirect-threaded code. Other systems use other
    techniques; e.g., Gforth uses hybrid direct/indirect-threaded code
    plus dynamic superinstructions.

    But for simple native-code systems, there is no virtual-machine interpreter and nothing else that I would call a virtual machine.

    I don't understand why they wouldn't be virtual. The instructions executed are those of the host machine, aren't they?

    Yes, so the instructions are real-machine instructions. And there is
    no intermediate representation that one could call virtual machine
    code. Apart from this meaning of "virtual machine" and the VMware
    one, there is also the meaning used by the C standard in describing
    what the C standard guarantees (and what it does not); that's an operational-semantics kind of view, and it basically means that the C
    standard is so complicated that they need to introduce a virtual
    machine to describe what happens. I don't think we need that for
    Forth, but I may be wrong.

    To be clear, are you disagreeing with the earlier quote from "Forth Programmer's Handbook"?

    Which quote?

    - anton
    --
    M. Anton Ertl http://www.complang.tuwien.ac.at/anton/home.html
    comp.lang.forth FAQs: http://www.complang.tuwien.ac.at/forth/faq/toc.html
    New standard: https://forth-standard.org/
    EuroForth 2022: https://euro.theforth.net

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Rick C@21:1/5 to Anton Ertl on Sun Aug 14 20:50:08 2022
    On Sunday, August 14, 2022 at 5:09:15 PM UTC-4, Anton Ertl wrote:
    Heinrich Hohl <hheinri...@gmail.com> writes:
    But native-code systems still pretend to have a Virtual Machine when you write
    high level Forth code. For example, you can define

    : squared dup + ;

    although the underlying i386 processor does not know what DUP means.
    DUP is a Forth word. I see no point in introducing the concept of a
    virtual machine to explain it.

    Huh? Forth *is* a virtual stack processor.

    What I find annoying is that every stack processor is termed a "Forth" CPU. Stack processors predated Forth.

    --

    Rick C.

    - Get 1,000 miles of free Supercharging
    - Tesla referral code - https://ts.la/richard11209

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From dxforth@21:1/5 to Rick C on Mon Aug 15 15:45:41 2022
    On 15/08/2022 13:50, Rick C wrote:
    On Sunday, August 14, 2022 at 5:09:15 PM UTC-4, Anton Ertl wrote:
    Heinrich Hohl <hheinri...@gmail.com> writes:
    But native-code systems still pretend to have a Virtual Machine when you write
    high level Forth code. For example, you can define

    : squared dup + ;

    although the underlying i386 processor does not know what DUP means.
    DUP is a Forth word. I see no point in introducing the concept of a
    virtual machine to explain it.

    Huh? Forth *is* a virtual stack processor.

    What I find annoying is that every stack processor is termed a "Forth" CPU.

    Is it?

    Stack processors predated Forth.


    Both are just labels. Just as a plant cares nothing for the taxonomy humans have placed upon it, so it may be with CPU's :)

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Stephen Pelc@21:1/5 to Jeff Chimene on Mon Aug 15 08:35:29 2022
    On 14 Aug 2022 at 20:11:23 CEST, "Jeff Chimene" <jchimene@gmail.com> wrote:

    Agreed. That's why I'd like to investigating the RTX2001A. It has a much better Forth (AppForth) for this purpose. It also uses the embedded machine code technique, but it's better structured, IMO.

    The MPE Forth 5 cross compiler with full source code is available from
    http://soton.mpeforth.com/downloads/VfxCommunity/
    It covers RTX2000, RTX2001 and RTX2010 and has manuals.

    Stephen

    --
    Stephen Pelc, stephen@vfxforth.com
    MicroProcessor Engineering, Ltd. - More Real, Less Time
    133 Hill Lane, Southampton SO15 5AF, England
    tel: +44 (0)23 8063 1441, +44 (0)78 0390 3612,
    +34 649 662 974
    http://www.mpeforth.com - free VFX Forth downloads

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Jose Morales@21:1/5 to dxforth on Mon Aug 15 15:09:28 2022
    On Monday, August 15, 2022 at 7:45:48 AM UTC+2, dxforth wrote:
    On 15/08/2022 13:50, Rick C wrote:
    On Sunday, August 14, 2022 at 5:09:15 PM UTC-4, Anton Ertl wrote:
    Heinrich Hohl <hheinri...@gmail.com> writes:
    But native-code systems still pretend to have a Virtual Machine when you write
    high level Forth code. For example, you can define

    : squared dup + ;

    although the underlying i386 processor does not know what DUP means.
    DUP is a Forth word. I see no point in introducing the concept of a
    virtual machine to explain it.

    Huh? Forth *is* a virtual stack processor.

    What I find annoying is that every stack processor is termed a "Forth" CPU.
    Is it?

    Stack processors predated Forth.


    Both are just labels. Just as a plant cares nothing for the taxonomy humans have placed upon it, so it may be with CPU's :)
    FWIW, See https://users.ece.cmu.edu/~koopman/stack_computers/stack_computers_book.pdf

    3.3.2 has a good summary on this…

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Wayne morellini@21:1/5 to jpit...@gmail.com on Tue Aug 23 00:28:54 2022
    On Sunday, August 14, 2022 at 5:31:34 AM UTC+10, jpit...@gmail.com wrote:
    On Saturday, 13 August 2022 at 19:33:35 UTC+1, jchi...@gmail.com wrote:
    On Saturday, August 13, 2022 at 11:24:42 AM UTC-7, Zbig wrote:
    Does the existence of the Novix machines make other Forth implementations a simulation?
    If so, does this extend to all TILs?
    Does the existence of integrated circuits make all the „discrete” electronic
    circuits a mere simulation of ICs?
    I should also point out that "mere" is doing a lot work in that sentence.
    I am not sure what the basis of this discussion is.

    Who owns a NOVIX NC4000?

    Where can I buy one?

    Is there a NOVIX simulator somewhere, online, done in Javascript?
    Or for download to execute on my PC / RPI, else ?

    Where is the implementation in VHDL / Verilog as an alternative.
    I assume this would not be the real thing either????
    But I can execute something there on an FPGA?

    A good question is, who owns the rights, maybe the Harris IP owners?
    It should be in the 3cent range by now, or at least a p16 should be.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Myron Plichota@21:1/5 to jchi...@gmail.com on Sat Sep 3 07:54:10 2022
    On Saturday, August 13, 2022 at 1:03:38 PM UTC-4, jchi...@gmail.com wrote:
    As this is also referential to the late Dr. Ting, whose "Footsteps" inspires my current project, I ask the following question:

    "... what an innovation is the parallel bus architecture."
    Does the existence of the Novix machines make other Forth implementations a simulation? If so, does this extend to all TILs?
    I'm sure there other machines whose instruction sets don't need an assemble/link/load phase, but I can't think of one right now.
    Unless there was a predecessor to what Moore did, the Novix reduction to practice rendered every other Forth system a simulation.

    I would say that every other Forth system might be a product of the designer's imagination that in modern times might be expressed and simulated via Icarus Verilog before attempting a fit to available silicon.

    Even on a hobby budget, one might progress from one project to another in the quest for the "ultimate" Forth CPU. Ancestor worship only gets you so far. One might learn and go beyond (as any benevolent ancestor like my pappy would encourage). CPU
    designers have the luxury of changing the rules of the game, and it is indeed just a game. Success goes up with experience, mostly because you learn to identify trouble before it's too late (or afterward).

    Some kind of object code assembler is required to generate the binaries for simulation test, and eventually, application code. I have found Python3 to be *very* convenient for that purpose despite the fact that the target CPU is a dual-stack machine that
    knows nothing of the Python this-or-that involved in generating said code.

    I have a special interest in Forth CPU design that accelerates DSP apps. Below is a generic FFT for the fx32i CPU. Assuming zero wait state RAM, a simulated 512-point solution (cp(fft)) executes in 313813 clock cycles (max clock frequency unknown). I
    have no idea how competitive this is with any existing 512-point FFT benchmarks.

    # generic Cooley-Tukey radix-2 DIT Fast Fourier Transform for the fx32i CPU
    # in-place complex FFT, bit-reversed input samples order, normal output harmonics order
    # requires prior defs of POINTS and PASSES, e.g. 512 and 9 respectively, POINTS = 2**PASSES, PASSES >= 3
    # beautiful juju is at work in the address calculation and loop control algorithms
    # CSZ = 4, cell size in bytes

    # bit-reverse index lookup table re: POINTS input samples acquisition lbl('Brev'); data([CSZ*bitrev(POINTS,PASSES,n) for n in range(POINTS)])

    # trig lookup tables
    lbl('Cos'); data([int(SMAX32*math.cos(n*math.tau/POINTS)) for n in range(POINTS)])
    lbl('Sin'); data([int(SMAX32*math.sin(n*math.tau/POINTS)) for n in range(POINTS)])

    # in-place data
    lbl('real'); data([0 for n in range(POINTS)])
    lbl('imag'); data([0 for n in range(POINTS)])

    # fft simple variables
    lbl('phase'); data([0]) # trig lookup tables index
    lbl('phinc'); data([0]) # trig phase increment
    lbl('offset'); data([0]) # re: low and high indices
    lbl('low'); data([0]) # data butterfly index
    lbl('high'); data([0]) # data butterfly index
    lbl('treal'); data([0]) # scratchpad
    lbl('timag'); data([0]) # scratchpad

    lbl('fft') # -- # in-place fft of real and imag arrays
    slit(CSZ); lst(offset)
    lit((POINTS*CSZ) >> 1); lst(phinc)
    slit(0) # -- pass
    _begin() # passes
    dup(); lit(PASSES); neq()
    _while()
    slit(0) # -- pass group
    _begin() # groups
    dup(); lit(POINTS*CSZ); neq()
    _while()
    dup(); lst(low)
    slit(0); dup(); lst(phase) # -- pass group butterfly
    _begin() # butterflies
    dup(); lld(offset); neq()
    _while()
    lld(low); lld(offset); add(); lst(high)
    # calculate treal
    lit(0x80000000); slit(0) # -- pass group butterfly round31 round63
    lld(phase); lald(Cos) # -- pass group butterfly round31 round63 cos
    lld(high); lald(real) # -- pass group butterfly round31 round63 cos real
    msop() # -- pass group butterfly sop31 sop63
    lld(phase); lald(Sin) # -- pass group butterfly sop31 sop63 sin
    lld(high); lald(imag) # -- pass group butterfly sop31 sop63 sin imag
    msop() # -- pass group butterfly sop31' sop63'
    lst(treal); drop() # -- pass group butterfly
    # calculate timag
    lit(0x80000000); slit(0) # -- pass group butterfly round31 round63
    lld(phase); lald(Cos) # -- pass group butterfly round31 round63 cos
    lld(high); lald(imag) # -- pass group butterfly round31 round63 cos imag
    msop() # -- pass group butterfly sop31 sop63
    lld(phase); lald(Sin); neg() # -- pass group butterfly sop31 sop63 -sin
    lld(high); lald(real) # -- pass group butterfly sop31 sop63 -sin real
    msop() # -- pass group butterfly sop31' sop63'
    lst(timag); drop() # -- pass group butterfly
    # update real[high] and real[low]
    lld(low); lald(real); asr() # -- pass group butterfly real[low]/2
    dup(); lld(treal); sub(); lld(high); last(real)
    lld(treal); add(); lld(low); last(real) # -- pass group butterfly
    # update imag[high] and imag[low]
    lld(low); lald(imag); asr() # -- pass group butterfly imag[low]/2
    dup(); lld(timag); sub(); lld(high); last(imag)
    lld(timag); add(); lld(low); last(imag) # -- pass group butterfly
    #
    lld(phase); lld(phinc); add(); lst(phase)
    lld(low); adk(CSZ); lst(low)
    adk(CSZ) # -- pass group butterfly'
    _repeat()
    drop() # -- pass group
    lld(offset); shl(); add() # -- pass group'
    _repeat()
    drop() # -- pass
    lld(offset); shl(); lst(offset)
    lld(phinc); shr(); lst(phinc)
    adk(1) # -- pass'
    _repeat()
    drop(); ret() # --
    lbl('fft_end') # for codespace calculation, 396 bytes at last audit

    The (infancy) implementation details (fx32i.zip) are at https://drive.google.com/file/d/1DkhBS2xLtZjMYlfuH9TWJUKvX3RMtVgJ/view?usp=sharing.
    tpox*.* are the top-level simulation control (tpox.prj, tpox.v, tpox_tb.v, tpox.py) and output (tpox.hex, tpox.log) files.

    I wonder how the reference CPU (fx32i_CPU.v, 611 lines of code) or a descendent would compare to 32-bit x86, ARM, and RISC_V re: silicon real estate and maximum reliable clock frequency, given common silicon design rules.

    I also wonder what Forth compiler developers think about the proffered instruction set and macros.

    fx32i presently has 6 opcodes in reserve for worthy causes, such as floating-point primitives.

    Code, data, and IO are currently viewed as a flat space of 4 Gbytes, suitable for embedded apps. A virtual memory strategy (redesign) might transplant this puppy to *nix land. IMHO, Nobel prizes in Software and a Planetary Feast Day would be the least
    honors deserved of the team that makes this happen, but I jest.

    Perhaps it's too late to take over the world with a new 32-bit Forth ISA, but it's a lot of fun to try anyway.

    "Jimbo is not James Bond" - an ancient koan
    - Myron Plichota

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Rick C@21:1/5 to Myron Plichota on Sat Sep 3 18:09:06 2022
    On Saturday, September 3, 2022 at 10:54:12 AM UTC-4, Myron Plichota wrote:
    On Saturday, August 13, 2022 at 1:03:38 PM UTC-4, jchi...@gmail.com wrote:
    As this is also referential to the late Dr. Ting, whose "Footsteps" inspires my current project, I ask the following question:

    "... what an innovation is the parallel bus architecture."
    Does the existence of the Novix machines make other Forth implementations a simulation? If so, does this extend to all TILs?
    I'm sure there other machines whose instruction sets don't need an assemble/link/load phase, but I can't think of one right now.
    Unless there was a predecessor to what Moore did, the Novix reduction to practice rendered every other Forth system a simulation.
    I would say that every other Forth system might be a product of the designer's imagination that in modern times might be expressed and simulated via Icarus Verilog before attempting a fit to available silicon.

    Even on a hobby budget, one might progress from one project to another in the quest for the "ultimate" Forth CPU. Ancestor worship only gets you so far. One might learn and go beyond (as any benevolent ancestor like my pappy would encourage). CPU
    designers have the luxury of changing the rules of the game, and it is indeed just a game. Success goes up with experience, mostly because you learn to identify trouble before it's too late (or afterward).

    Some kind of object code assembler is required to generate the binaries for simulation test, and eventually, application code. I have found Python3 to be *very* convenient for that purpose despite the fact that the target CPU is a dual-stack machine
    that knows nothing of the Python this-or-that involved in generating said code.

    I have a special interest in Forth CPU design that accelerates DSP apps. Below is a generic FFT for the fx32i CPU. Assuming zero wait state RAM, a simulated 512-point solution (cp(fft)) executes in 313813 clock cycles (max clock frequency unknown). I
    have no idea how competitive this is with any existing 512-point FFT benchmarks.

    If you want a fast FFT, you need a pair of multipliers and a pair of adders. This can be the basis of a butterfly processor. Then you can replicate this unit multiple times to process as many butterflies per second as you wish.

    There may be memory bottle necks. This works best if you have local fast memory and can move data to and from non-local memory fast enough to not slow the sequencing of the butterfly units. This has all been done before. In the end, processing
    technology moved so quickly, that general processors would outpace the custom designs in short order.

    I suppose it is pointless to ask what the application is? How fast do you need to process FFTs?

    I will mention that in general, a stack processor is not a good match to DSP that I've seen. Register files make things better, but the Forth benchmarks are always for a single test case (such as this FFT) while real DSP chips are called on to process a
    variety of tasks.

    --

    Rick C.

    - Get 1,000 miles of free Supercharging
    - Tesla referral code - https://ts.la/richard11209

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Myron Plichota@21:1/5 to gnuarm.del...@gmail.com on Sun Sep 4 16:26:49 2022
    On Saturday, September 3, 2022 at 9:09:08 PM UTC-4, gnuarm.del...@gmail.com wrote:
    On Saturday, September 3, 2022 at 10:54:12 AM UTC-4, Myron Plichota wrote:
    On Saturday, August 13, 2022 at 1:03:38 PM UTC-4, jchi...@gmail.com wrote:
    As this is also referential to the late Dr. Ting, whose "Footsteps" inspires my current project, I ask the following question:

    "... what an innovation is the parallel bus architecture."
    Does the existence of the Novix machines make other Forth implementations a simulation? If so, does this extend to all TILs?
    I'm sure there other machines whose instruction sets don't need an assemble/link/load phase, but I can't think of one right now.
    Unless there was a predecessor to what Moore did, the Novix reduction to practice rendered every other Forth system a simulation.
    I would say that every other Forth system might be a product of the designer's imagination that in modern times might be expressed and simulated via Icarus Verilog before attempting a fit to available silicon.

    Even on a hobby budget, one might progress from one project to another in the quest for the "ultimate" Forth CPU. Ancestor worship only gets you so far. One might learn and go beyond (as any benevolent ancestor like my pappy would encourage). CPU
    designers have the luxury of changing the rules of the game, and it is indeed just a game. Success goes up with experience, mostly because you learn to identify trouble before it's too late (or afterward).

    Some kind of object code assembler is required to generate the binaries for simulation test, and eventually, application code. I have found Python3 to be *very* convenient for that purpose despite the fact that the target CPU is a dual-stack machine
    that knows nothing of the Python this-or-that involved in generating said code.

    I have a special interest in Forth CPU design that accelerates DSP apps. Below is a generic FFT for the fx32i CPU. Assuming zero wait state RAM, a simulated 512-point solution (cp(fft)) executes in 313813 clock cycles (max clock frequency unknown). I
    have no idea how competitive this is with any existing 512-point FFT benchmarks.
    If you want a fast FFT, you need a pair of multipliers and a pair of adders. This can be the basis of a butterfly processor. Then you can replicate this unit multiple times to process as many butterflies per second as you wish.

    There may be memory bottle necks. This works best if you have local fast memory and can move data to and from non-local memory fast enough to not slow the sequencing of the butterfly units. This has all been done before. In the end, processing
    technology moved so quickly, that general processors would outpace the custom designs in short order.

    I suppose it is pointless to ask what the application is? How fast do you need to process FFTs?

    I will mention that in general, a stack processor is not a good match to DSP that I've seen. Register files make things better, but the Forth benchmarks are always for a single test case (such as this FFT) while real DSP chips are called on to process
    a variety of tasks.
    --

    Rick C.

    - Get 1,000 miles of free Supercharging
    - Tesla referral code - https://ts.la/richard11209
    I appreciate your ideas. Indeed true (e.g. Analog Devices Blackfin) DSPs demonstrate those precepts. However, fx32i is a von Neumann machine with the bottleneck of unified code/data/io space (4Gbytes). The multislot instruction format and instruction
    prefetch logic alleviates the instruction fetch penalty, and those slot instructions may freely access unified space, 1 read or write at a time.

    I've been using the 512-point FFT as a standard benchmark for the last 3 Forth CPU projects, just to compare the results among them. In all cases, address calculation overhead dwarfs the multiply/accumulate operation, whether implemented as an
    instruction or a move machine. I'm equally interested in improving the performance of general DSP algorithms other than the FFT, e.g. IIR, FIR, general convolution, neural weight, etc, and at the same time improving the performance of general code. I
    have no particular app in mind.

    Improvements from earlier projects:
    1) 32-bit data and byte addresses (byte addressing handles ASCII and UTF-8 character sequences)
    2) indexed addressing, e.g. ald ( adr1 adr2 -- m[adr1+adr2] ), ast ( d adr1 adr2 -- ) m[adr1+adr2] <- d
    3) short (6-bit k) slit(k), adk(k), sbk(k) instructions
    4) a rich set of comparison flag generators (beats canonical lit, add, and, xor sequences!)
    5) unsigned division and square root step instructions, interruptable in mid stream
    6) a revised set of multiply/accumulate instructions
    7) dadd and dsub instructions, goodbye carry/~borrow juju
    8) the time instruction

    Re: your closing paragraph, I agree that Forth is traditionally disadvantaged for DSP apps. That is precisely why an attempt to improve the situation has been made. I don't understand your apparent objection to a single (e.g. 512-point) FFT test case,
    since POINTS is *the* essential parameter for apples-to-apples comparison of FFT implementations. Also, to clarify the evil Python3 assembler state lurking behind proper use of the lib/fft.py module:

    1) one must define POINTS and PASSES before sucking in lib/fft.py via include('lib/fft.py')
    2) Brev, Cos, and Sin lookup tables are auto-generated
    3) the real and imag arrays are auto-generated, initially zeros
    4) many derived magic literal numbers are computed at assembly-time, run time inherits the solutions
    5) the fft procedure is generic in that the realized code size (fft_end - fft) is unaffected by POINTS and PASSES, due to the aforementioned magic literals computed at assembly time
    6) a new version of fft.py that facilitates more than 1 instance of 1 size is on the todo list, riffing on OOP ideas

    To revisit the concept of FFT benchmark comparisons, let us stipulate a short list:
    1) the FFT solution is in-place per Cooley-Tukey
    2) POINTS == 512
    3) numbers may be single or double-precision integer or floating-point, real, imaginary, or complex
    4) on entry, the fft procedure has no contrived code or data cache hits, and always operates on fresh input data
    5) any source language may be used

    The fx32i simulation reported 313813 elapsed clock cycles, so at 1 MHz, 0.313813 seconds would elapse. We have a calibration point.

    As I recall, desktop OS amenities usually report elapsed time in micro or nano seconds. If the system clock frequency is also known, then a complete comparison can be made after some simple arithmetic. I think I'll dust off my RPi400 and and investigate
    further in ARM C and Python3 before deciding whether or not to expend further effort in basic stack machine design.

    I am aware of rumours of 6 GHz Forth CPUs in the works by heavy hitters with (I presume) well-established connections with the TSMC FAEs. With the current political sabotage of the supply chain, perhaps those FAEs don't have much to do lately, and wouldn'
    t mind an unofficial go at an fx32i CPU core to stay warmed up. Then we would know the max clock frequency at current design rules. Just saying.

    - Myron Plichota

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)