• =?UTF-8?B?SXMgaXQgYW5vdGhlciDigJ50cmFkaXRpb27igJ0gKGZpZy1Gb3J0aCBmb3Ige

    From Zbig@21:1/5 to All on Tue May 17 15:31:23 2022
    My guess is „it is”, still I'd like to become 100% sure.

    Here's the „NEXT” of that mentioned fig-Forth:

    NEXT: LODSW
    MOV BX,AX
    NEXT1: MOV DX,BX
    INC DX
    JMP [BX]

    (BTW: anyone could tell me, how should I paste code here to avoid deformation?) So if I'm correct DX works as Forth's „W” register here.
    My question is: then why is it incremented at that moment? And actually it's just half-incremented, since we need cell-stepped incrementation, not by single byte.
    My suspicion seems to be confirmed by DOCOL's code (and by similarly looking code of other „DO”-s):
    DOCOL: INC DX
    DEC BP
    DEC BP
    MOV [BP],SI
    MOV SI,DX
    JMP NEXT
    From what I understand, incremention of „W” has been splitted into two stages. If I made this, I'd rather insert two INCs into „DOCOL”, leaving original value of „W” untouched (if it may be needed anywhere; it does contain the address of
    currently processed word anyway).
    Does that „split-action” have any merits behind it? Or is it just on the rule: „well, someone years ago made it this way, and then all the followers copied that because it worked doing no harm”?

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From dxforth@21:1/5 to Zbig on Wed May 18 13:57:09 2022
    On 18/05/2022 08:31, Zbig wrote:
    My guess is „it is”, still I'd like to become 100% sure.

    Here's the „NEXT” of that mentioned fig-Forth:

    NEXT: LODSW
    MOV BX,AX
    NEXT1: MOV DX,BX
    INC DX
    JMP [BX]

    (BTW: anyone could tell me, how should I paste code here to avoid deformation?)
    So if I'm correct DX works as Forth's „W” register here.
    My question is: then why is it incremented at that moment? And actually it's just half-incremented, since we need cell-stepped incrementation, not by single byte.
    My suspicion seems to be confirmed by DOCOL's code (and by similarly looking code of other „DO”-s):
    DOCOL: INC DX
    DEC BP
    DEC BP
    MOV [BP],SI
    MOV SI,DX
    JMP NEXT
    From what I understand, incremention of „W” has been splitted into two stages. If I made this, I'd rather insert two INCs into „DOCOL”, leaving original value of „W” untouched (if it may be needed anywhere; it does contain the address of
    currently processed word anyway).
    Does that „split-action” have any merits behind it? Or is it just on the rule: „well, someone years ago made it this way, and then all the followers copied that because it worked doing no harm”?

    For 8-bit processors NEXT looked like this:

    ; 8080 FIG-FORTH

    NEXT LDAX B ;(W) <- ((IP))
    INX B ;(IP) <- (IP)+2
    MOV L,A
    LDAX B
    INX B
    MOV H,A ;(HL) <- CFA
    NEXT1 MOV E,M ;(PC) <- ((W))
    INX H
    MOV D,M
    XCHG
    PCHL ;NOTE: (DE) <- CFA+1

    Incrementing W in NEXT by at least one was unavoidable. It would have aided portability to have W point to the same place in every FIG implementation.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Anton Ertl@21:1/5 to Zbig on Wed May 18 05:35:53 2022
    Zbig <zbigniew2011@gmail.com> writes:
    My guess is =E2=80=9Eit is=E2=80=9D, still I'd like to become 100% sure.

    Here's the =E2=80=9ENEXT=E2=80=9D of that mentioned fig-Forth:

    NEXT: LODSW
    MOV BX,AX
    NEXT1: MOV DX,BX
    INC DX
    JMP [BX]

    (BTW: anyone could tell me, how should I paste code here to avoid deformati= >on?)

    Use a proper newsreader rathjer than Google Groups. If you use Google
    Groups, use only ASCII, and keep the line lengths <75 chars. Even
    then Google will do some mangling, but far less.

    So if I'm correct DX works as Forth's =E2=80=9EW=E2=80=9D register here.
    My question is: then why is it incremented at that moment? And actually it'= >s just half-incremented, since we need cell-stepped incrementation, not by = >single byte.
    My suspicion seems to be confirmed by DOCOL's code (and by similarly lookin= >g code of other =E2=80=9EDO=E2=80=9D-s):
    DOCOL: INC DX
    DEC BP
    DEC BP
    MOV [BP],SI
    MOV SI,DX
    JMP NEXT
    From what I understand, incremention of =E2=80=9EW=E2=80=9D has been splitt= >ed into two stages. If I made this, I'd rather insert two INCs into =E2=80= >=9EDOCOL=E2=80=9D, leaving original value of =E2=80=9EW=E2=80=9D untouched = >(if it may be needed anywhere; it does contain the address of currently pro= >cessed word anyway).
    Does that =E2=80=9Esplit-action=E2=80=9D have any merits behind it?

    Good question. Zech's book hasa table of various NEXTs and DOCOLs in
    fig-Forth implementations on various architectures, and they are all
    over the place; some increment W in NEXT, some in DOCOL, and some
    split it.

    Advantage of doing it in NEXT: Less code; you don't need the
    incrementing code replicated in DOCOL, DOVAR, maybe DOCON, DODOES.

    Disadvantage of doing it in NEXT: It costs time that is wasted if the
    next word does not use W (primitives), or can do it cheaper as part of
    an addressing mode (maybe DOCON, DODOES).

    Unless I need to save the last byte, I would not put it in NEXT on the
    8086.

    - 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: http://www.forth200x.org/forth200x.html
    EuroForth 2021: https://euro.theforth.net/2021

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From dxforth@21:1/5 to Anton Ertl on Wed May 18 17:14:58 2022
    On 18/05/2022 15:54, Anton Ertl wrote:
    dxforth <dxforth@gmail.com> writes:
    ; 8080 FIG-FORTH

    NEXT LDAX B ;(W) <- ((IP))
    INX B ;(IP) <- (IP)+2
    MOV L,A
    LDAX B
    INX B
    MOV H,A ;(HL) <- CFA
    NEXT1 MOV E,M ;(PC) <- ((W))
    INX H
    MOV D,M
    XCHG
    PCHL ;NOTE: (DE) <- CFA+1

    Incrementing W in NEXT by at least one was unavoidable.

    Why?

    Do you know of an 8080 NEXT that's at least as fast that didn't?

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Anton Ertl@21:1/5 to dxforth on Wed May 18 05:54:45 2022
    dxforth <dxforth@gmail.com> writes:
    ; 8080 FIG-FORTH

    NEXT LDAX B ;(W) <- ((IP))
    INX B ;(IP) <- (IP)+2
    MOV L,A
    LDAX B
    INX B
    MOV H,A ;(HL) <- CFA
    NEXT1 MOV E,M ;(PC) <- ((W))
    INX H
    MOV D,M
    XCHG
    PCHL ;NOTE: (DE) <- CFA+1

    Incrementing W in NEXT by at least one was unavoidable.

    Why?

    It would have aided
    portability to have W point to the same place in every FIG implementation.

    If the 8086 porter started with the 8080 port, that would explain the
    decision to increment by 1 on the 8086: just do it like the 8080, then translate all the doers 1:1, too. Less potential for introducing
    bugs.

    Here we have 6502 fig-Forth from <https://github.com/ForthHub/FIG-Forth/blob/master/fig.fth>:

    SCR # 13
    8 LABEL NEXT ( EXECUTE NEXT FORTH ADDRESS, MOVING IP *)
    9 1 # LDY, IP )Y LDA, W 1+ STA, ( FETCH CODE ADDRESS )
    10 DEY, IP )Y LDA, W STA,
    11 CLC, IP LDA, 2 # ADC, IP STA, ( MOVE IP AHEAD )
    12 CS IF, IP 1+ INC, THEN,
    13 W 1 - JMP, ( JUMP INDIR. VIA W THRU CODE FIELD TO CODE )
    14

    SCR # 33
    2 : : ( CREATE NEW COLON-DEFINITION UNTIL ';' *)
    3 ?EXEC !CSP CURRENT @ CONTEXT !
    4 CREATE ] ;CODE IMMEDIATE
    5 IP 1+ LDA, PHA, IP LDA, PHA, CLC, W LDA, 2 # ADC,
    6 IP STA, TYA, W 1+ ADC, IP 1+ STA, NEXT JMP,

    We see that W is not incremented in NEXT (the indirect jump would not
    work if it was), and that W+2 is stored into IP in DOCOL.

    - 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: http://www.forth200x.org/forth200x.html
    EuroForth 2021: https://euro.theforth.net/2021

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From none) (albert@21:1/5 to Anton Ertl on Wed May 18 11:46:35 2022
    In article <2022May18.110600@mips.complang.tuwien.ac.at>,
    Anton Ertl <anton@mips.complang.tuwien.ac.at> wrote:
    dxforth <dxforth@gmail.com> writes:
    On 18/05/2022 15:54, Anton Ertl wrote:
    dxforth <dxforth@gmail.com> writes:
    ; 8080 FIG-FORTH

    NEXT LDAX B ;(W) <- ((IP))
    INX B ;(IP) <- (IP)+2
    MOV L,A
    LDAX B
    INX B
    MOV H,A ;(HL) <- CFA
    NEXT1 MOV E,M ;(PC) <- ((W))
    INX H
    MOV D,M
    XCHG
    PCHL ;NOTE: (DE) <- CFA+1

    Incrementing W in NEXT by at least one was unavoidable.

    Why?

    Do you know of an 8080 NEXT that's at least as fast that didn't?

    I don't know much about the 8080, so I would be interested in an
    explanation.

    Looking at it again, I see

    NEXT1 MOV E,M ;(PC) <- ((W))
    INX H
    MOV D,M

    So is M another name for (HL)? And H is the low-order byte of HL (and
    the CFAs never straddle 256-byte boundaries, which is also necessary
    on the 6502). In that case it's clear why W is incremented by 1.

    You are on the right track. On the 8080 you can only access memory by
    HL. The memory pointed to was called M. You can load stuff in single
    byte quantities.
    So this is typical 8080 idiom to load DE (register pair almost a 16 bit register) via HL.

    INX H however increments the HL pointer, not H.
    (You'd use INR H to accomplish that. )
    So there is no caveat for 256-byte boundaries.


    What does the XCHG do and what is it good for?

    I assume that PCHL is a kind of indirect jump, but it would need the
    value in DE. Given the name of PCHL and the comment at the end, I
    suspect that XCHG exchanges DE and HL, so W is in DE at the end, and
    the code address in HL.

    Right on. PCHL is a jump to HL. That is the only way to do a
    calculated jump on the 8080. Note how much manipulation is needed
    to get there.


    - anton
    --
    M. Anton Ertl http://www.complang.tuwien.ac.at/anton/home.html
    --
    "in our communism country Viet Nam, people are forced to be
    alive and in the western country like US, people are free to
    die from Covid 19 lol" duc ha
    albert@spe&ar&c.xs4all.nl &=n http://home.hccnet.nl/a.w.m.van.der.horst

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Anton Ertl@21:1/5 to dxforth on Wed May 18 09:06:00 2022
    dxforth <dxforth@gmail.com> writes:
    On 18/05/2022 15:54, Anton Ertl wrote:
    dxforth <dxforth@gmail.com> writes:
    ; 8080 FIG-FORTH

    NEXT LDAX B ;(W) <- ((IP))
    INX B ;(IP) <- (IP)+2
    MOV L,A
    LDAX B
    INX B
    MOV H,A ;(HL) <- CFA
    NEXT1 MOV E,M ;(PC) <- ((W))
    INX H
    MOV D,M
    XCHG
    PCHL ;NOTE: (DE) <- CFA+1

    Incrementing W in NEXT by at least one was unavoidable.

    Why?

    Do you know of an 8080 NEXT that's at least as fast that didn't?

    I don't know much about the 8080, so I would be interested in an
    explanation.

    Looking at it again, I see

    NEXT1 MOV E,M ;(PC) <- ((W))
    INX H
    MOV D,M

    So is M another name for (HL)? And H is the low-order byte of HL (and
    the CFAs never straddle 256-byte boundaries, which is also necessary
    on the 6502). In that case it's clear why W is incremented by 1.

    What does the XCHG do and what is it good for?

    I assume that PCHL is a kind of indirect jump, but it would need the
    value in DE. Given the name of PCHL and the comment at the end, I
    suspect that XCHG exchanges DE and HL, so W is in DE at the end, and
    the code address in HL.

    - 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: http://www.forth200x.org/forth200x.html
    EuroForth 2021: https://euro.theforth.net/2021

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From none) (albert@21:1/5 to zbigniew2011@gmail.com on Wed May 18 11:30:00 2022
    In article <a03ec321-a603-4de9-9cd1-79a9318a6794n@googlegroups.com>,
    Zbig <zbigniew2011@gmail.com> wrote:
    My guess is „it is”, still I'd like to become 100% sure.

    Here's the „NEXT” of that mentioned fig-Forth:

    NEXT: LODSW
    MOV BX,AX
    NEXT1: MOV DX,BX
    INC DX
    JMP [BX]

    Be prepared to find vestigial organs in fig.

    Replace it with:

    NEXT: LODSW
    MOV BX,AX
    JMP [BX]

    NEXT1: MOV DX,BX
    INC DX
    JMP [BX]


    (BTW: anyone could tell me, how should I paste code here to avoid deformation?)
    So if I'm correct DX works as Forth's „W” register here.
    My question is: then why is it incremented at that moment? And actually it's just half-incremented, since we need cell-stepped incrementation, not by single byte.
    My suspicion seems to be confirmed by DOCOL's code (and by similarly looking code of other „DO”-s):
    DOCOL: INC DX
    DEC BP
    DEC BP
    MOV [BP],SI
    MOV SI,DX
    JMP NEXT

    They were not familiar to the very powerful (?!) 8086 instruction set

    DOCOL:
    DEC BP }
    DEC BP } push si on the returns stack
    MOV [BP],SI }
    MOV SI,[BX+2]
    JMP NEXT

    Saving the manipulation with reg DX.

    From what I understand, incremention of „W” has been splitted into two stages. If I made this, I'd rather insert two INCs into „DOCOL”, leaving
    original value of „W” untouched (if it may be needed anywhere; it does contain the address of currently processed word anyway).
    Does that „split-action” have any merits behind it? Or is it just on the rule: „well, someone years ago made it this way, and then all the followers
    copied that because it worked doing no harm”?

    The question makes hardly sense because the context is missing
    of how the fig headers are constructed in this implementation.
    Caveat: I inspected the original fig 8086 code. YMMV.

    It is indirect threaded code.

    The BX (xt-address) contains
    in case of machine code: $+2
    in case of high level code: DOCOL

    The advise in general:
    1. build a testset
    2. modify slightly and test
    3. rinse repeat

    You would be surprised how much you can get rid of in this way.

    Groetjes Albert
    --
    "in our communism country Viet Nam, people are forced to be
    alive and in the western country like US, people are free to
    die from Covid 19 lol" duc ha
    albert@spe&ar&c.xs4all.nl &=n http://home.hccnet.nl/a.w.m.van.der.horst

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From dxforth@21:1/5 to Zbig on Thu May 19 11:49:02 2022
    On 19/05/2022 04:51, Zbig wrote:
    They were not familiar to the very powerful (?!) 8086 instruction set

    DOCOL:
    DEC BP }
    DEC BP } push si on the returns stack
    MOV [BP],SI }
    MOV SI,[BX+2]
    JMP NEXT

    Saving the manipulation with reg DX.

    But MOV SI,[BX+2] means „copy contents pointed by BX+2” rather than „copy BX+2 to SI”, correct? So it won't work here as replacement.

    Anyway eliminated superfluous use of DX from NEXT, DOCOL, DOCON, DOVAR,
    DOUSE and DODOE — everything replaced by BX manipulation only — and... it still
    seems to work just fine. :)

    The changes appeared in L&P F83 approx two years after the FIG release.

    \ Boot up Vectors and NEXT Interpreter 04OCT83HHL

    LABEL >NEXT AX LODS AX W MOV 0 [W] JMP

    LABEL NEST
    W INC W INC RP DEC RP DEC IP 0 [RP] MOV W IP MOV
    NEXT

    LABEL DODOES
    SP RP XCHG IP PUSH SP RP XCHG IP POP
    W INC W INC W PUSH NEXT

    LABEL DOCREATE
    W INC W INC W PUSH NEXT

    LABEL DOCONSTANT
    W INC W INC 0 [W] AX MOV 1PUSH END-CODE

    LABEL DOUSER-VARIABLE
    W INC W INC 0 [W] AX MOV UP #) AX ADD 1PUSH END-CODE

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From dxforth@21:1/5 to Zbig on Thu May 19 12:52:53 2022
    On 18/05/2022 21:52, Zbig wrote:
    Incrementing W in NEXT by at least one was unavoidable. It would have aided >> portability to have W point to the same place in every FIG implementation.

    Thanks. I didn't work with 8080 assembly before; could you, please,
    take a look did I properly „decode” your listing:
    NEXT: LDAX B ;(W) <- ((IP)) // A := BC C@
    INX B ;(IP) <- (IP)+2 // BC := BC + 1
    MOV L,A // L := A
    LDAX B // A := BC C@
    INX B // BC := BC + 1
    MOV H,A ;(HL) <- CFA // H := A
    ; IP uses BC, W uses HL
    ; So now W = (IP) and IP = former_IP + 2
    NEXT1: MOV E,M ;(PC) <- ((W)) // E := HL C@
    INX H // HL := HL + 1 (which means W := W + 1)
    MOV D,M // D := HL C@ // X := (W)
    XCHG // HL and DE pairs swap their contents (W turns into X and vice versa) PCHL ;NOTE: (DE) <- CFA+1 // JMP (HL) which means JMP (X)

    Correct


    So all this because 8080 has no command to do 16-bit transfer -- and sometime later
    the translation of the code to x86 has been done „literally”, 1:1 -- no optimization at all?

    That's understandable considering few would have owned an 8086 at that time. Fig-Forth 8088/86 listing is dated MAR 1981. FIG had largely dropped support for Fig-Forth by then, opting instead to be involved in the Standards process. While FIG planned comprehensive revisions to several implementations, only
    the 8080 was completed AFAIK.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Anton Ertl@21:1/5 to dxforth on Thu May 19 05:42:52 2022
    dxforth <dxforth@gmail.com> writes:
    On 18/05/2022 21:52, Zbig wrote:
    So all this because 8080 has no command to do 16-bit transfer -- and sometime later
    the translation of the code to x86 has been done „literally”, 1:1 -- no optimization at all?

    That's understandable considering few would have owned an 8086 at that time.

    It's also not unusual: The story of how Microsoft ported Fortran-80
    (and other products) to the 8086 is described in <https://retrocomputingforum.com/t/translation-of-8080-code-to-8086/1309>.
    The author concludes that the result made a disappointing product, and
    in comment #6 relates that MS then bought a license of a third-party
    Fortran, certainly a winning strategy for MS.

    Makes me wonder how much of a benefit the ability to translate 8080 to
    8086 assembly code really was. It led to a lot of software early on,
    such as Fortran-96 and fig-Forth, but could not transcend the 64K
    boundary (but early-on few had more RAM), and eventually that software
    was replaced with something specifically written for the 8086, such as
    F83 or the external product in the Fortran case (that compiler was
    written in Pascal).

    I guess the benefit was that software was available earlier, but if
    anybody hoped they could save on proper 8086 development, they were disappointed, or their product was unlikely to survive.

    The fig-Forth NEXT was not a 1:1 translation, though:

    NEXT LDAX B LODSW ;(W) <- ((IP))
    INX B ;LODSW ;(IP) <- (IP)+2
    MOV L,A MOV BX,AX
    LDAX B ;LODSW
    INX B ;LODSW
    MOV H,A ;MOV BX,AX ;(HL) <- CFA
    NEXT1 MOV E,M ;JMP [BX] ;(PC) <- ((W))
    INX H MOV DX,BX
    INC DX
    MOV D,M ;JMP [BX]
    XCHG ;MOV DX,BX
    PCHL JMP [BX] ;NOTE: (DE) <- CFA+1

    A real 1:1 translation would have been much worse (you can find a
    translation table in <http://www.s100computers.com/Software%20Folder/Assembler%20Collection/Digital%20Research%20XLT86%20Manual.pdf>).
    The person who translated seems to have taken the register assignments
    and contents at the basic block boundaries from the 8080, but produced
    code that made locally good use of 8086 features.

    Here's my go at a 1:1 translation according to the translation table:

    NEXT LDAX B mov si, cx
    mov al, [si]
    INX B inc cx
    MOV L,A mov bl, al
    LDAX B mov si, cx
    mov al, [si]
    INX B inc cx
    MOV H,A mov bh, al
    NEXT1 MOV E,M mov dl, [bx]
    INX H inc bx
    MOV D,M mov dh, [bx]
    XCHG xchg bx,dx
    PCHL jmp bx

    Fig-Forth 8088/86 listing is dated MAR 1981. FIG had largely dropped support >for Fig-Forth by then, opting instead to be involved in the Standards process. >While FIG planned comprehensive revisions to several implementations, only >the 8080 was completed AFAIK.

    Support? Revisions? Are these compatible with the teachings of Chuck
    Moore?

    - 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: http://www.forth200x.org/forth200x.html
    EuroForth 2021: https://euro.theforth.net/2021

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Zbig@21:1/5 to All on Thu May 19 01:44:34 2022
    The fig-Forth NEXT was not a 1:1 translation, though:

    Indeed you're right; my remark wasn't 100% accurate. Use of LODSW alone
    and register selection was already at least partial optimization. Well it turned out we can move that process even further.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From dxforth@21:1/5 to Anton Ertl on Thu May 19 19:12:56 2022
    On 19/05/2022 15:42, Anton Ertl wrote:
    dxforth <dxforth@gmail.com> writes:
    On 18/05/2022 21:52, Zbig wrote:
    So all this because 8080 has no command to do 16-bit transfer -- and sometime later
    the translation of the code to x86 has been done „literally”, 1:1 -- no optimization at all?

    That's understandable considering few would have owned an 8086 at that time.

    It's also not unusual: The story of how Microsoft ported Fortran-80
    (and other products) to the 8086 is described in <https://retrocomputingforum.com/t/translation-of-8080-code-to-8086/1309>. The author concludes that the result made a disappointing product, and
    in comment #6 relates that MS then bought a license of a third-party
    Fortran, certainly a winning strategy for MS.

    Makes me wonder how much of a benefit the ability to translate 8080 to
    8086 assembly code really was. It led to a lot of software early on,
    such as Fortran-96 and fig-Forth, but could not transcend the 64K
    boundary (but early-on few had more RAM), and eventually that software
    was replaced with something specifically written for the 8086, such as
    F83 or the external product in the Fortran case (that compiler was
    written in Pascal).

    I guess the benefit was that software was available earlier, but if
    anybody hoped they could save on proper 8086 development, they were disappointed, or their product was unlikely to survive.

    When the alternative is writing 8086 code from scratch it may have been
    seen as the lesser of two evils. Among the CP/M community there were at
    least a couple of free 80->86 translators. I used one to initially
    convert DX-Forth's 8080 software f/p to 8086, after which I hand optimized.

    ...
    Fig-Forth 8088/86 listing is dated MAR 1981. FIG had largely dropped support >>for Fig-Forth by then, opting instead to be involved in the Standards process.
    While FIG planned comprehensive revisions to several implementations, only >>the 8080 was completed AFAIK.

    Support? Revisions? Are these compatible with the teachings of Chuck
    Moore?

    One would need to ask the promoters of his 'teachings' :) ISTR Elizabeth saying Chuck's second version of anything was much better than the first,
    and if there were opportunity for a third, it was better again. Sounds
    like most of us - no?

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From dxforth@21:1/5 to Anton Ertl on Thu May 19 22:57:11 2022
    On 19/05/2022 15:42, Anton Ertl wrote:
    ...
    Here's my go at a 1:1 translation according to the translation table:

    NEXT LDAX B mov si, cx
    mov al, [si]
    INX B inc cx
    MOV L,A mov bl, al
    LDAX B mov si, cx
    mov al, [si]
    INX B inc cx
    MOV H,A mov bh, al
    NEXT1 MOV E,M mov dl, [bx]
    INX H inc bx
    MOV D,M mov dh, [bx]
    XCHG xchg bx,dx
    PCHL jmp bx

    The translation is complicated by the fact BC in 8080 could be used
    either as a 16-bit index or discrete 8-bit regs (B,C). One can't
    do that with SI DI etc. There's BX but that's used to emulate HL.
    Any chance of achieving 1:1 code efficiency was quashed. OTOH it
    shows how the relatively few 8080 regs were used to the max. Hats
    off to the team who designed it! Of course, they had the 8008 to
    learn from...

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Anton Ertl@21:1/5 to dxforth on Thu May 19 10:14:42 2022
    dxforth <dxforth@gmail.com> writes:
    On 19/05/2022 15:42, Anton Ertl wrote:
    Support? Revisions? Are these compatible with the teachings of Chuck
    Moore?

    One would need to ask the promoters of his 'teachings' :) ISTR Elizabeth >saying Chuck's second version of anything was much better than the first,
    and if there were opportunity for a third, it was better again. Sounds
    like most of us - no?

    My understanding is that his approach is to rewrite from scratch
    rather than revise the existing code. Looking at the changes from his
    Forth that most Forth systems are descended from to cmForth to
    colorForth, these are not revisions.

    - 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: http://www.forth200x.org/forth200x.html
    EuroForth 2021: https://euro.theforth.net/2021

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From dxforth@21:1/5 to Anton Ertl on Fri May 20 12:48:23 2022
    On 19/05/2022 20:14, Anton Ertl wrote:
    dxforth <dxforth@gmail.com> writes:
    On 19/05/2022 15:42, Anton Ertl wrote:
    Support? Revisions? Are these compatible with the teachings of Chuck
    Moore?

    One would need to ask the promoters of his 'teachings' :) ISTR Elizabeth >>saying Chuck's second version of anything was much better than the first, >>and if there were opportunity for a third, it was better again. Sounds >>like most of us - no?

    My understanding is that his approach is to rewrite from scratch
    rather than revise the existing code. Looking at the changes from his
    Forth that most Forth systems are descended from to cmForth to
    colorForth, these are not revisions.

    Elizabeth was talking about apps Chuck wrote. He could afford to
    be more liberal with Forth - but only after leaving Forth Inc.
    The company had customers to consider and to whom change was anathema.

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