FORTH for the SHARP PC-E500 (S)
10-08-2021, 01:04 PM
Post: #25
 robve Member Posts: 299 Joined: Sep 2020
RE: FORTH for the SHARP PC-E500 (S)
(10-05-2021 01:02 PM)Klaus Overhage Wrote:  Thank you Helix for BINTOTXT.EXE. From Forth500.bin it directly generates the 71k byte text file required for the MBSharpNotepad. And with your tip in the OPEN command to replace the parameter C with L, I can now use your original BASIC program except for this small change. The runtime has surprisingly remained at 18 minutes, it is probably given by MBSharpNotepad.

A 71KB file takes some time to load, but I'm surprised it takes 18 minutes. Have you set SIO to 9600 baud? If this can't be done faster, then I'm sticking with the cassette transfer method that takes 90 seconds.

(10-05-2021 01:02 PM)Klaus Overhage Wrote:  Next I tried to load the file debugger.fth from the folder "additions".

In RUN mode: COPY "COM:" TO "E:debugger.fth",A
In Forth500: INCLUDE debugger.fth
-- after 90 second --

The dictionary search is not optimized in the original code. As a consequence the loading and compilation of Forth takes some time and the program you are loading is not small. The original pceForth code compares the word length and if equal compares the word's names. I've made the comparison case insensitive. This adds only a few cycles with some clever bit bashing in assembly and won't add overhead that is noticeable, because the chars compared typically differ in their lower 5 bits that are checked first:

Code:
                mv      (!el),il                ; Set the counter lbl4:           mv      il,[x++]                ; Read next character of the current word string                 mv      a,[y++]                 ; Read next character of the searched string                 sub     a,il                    ; Compare the characters                 jrz     lbl5 ; CASE-INSENSITIVE FIND-WORD (COMMENT OUT FOR CASE-SENSITIVE FIND-WORD)                 test    a,$1f ; If not the same 32-byte block ASCII offset, no match jrnz lbl4a add a,il ; Restore character or a,$20                   ; Make it lower case                 cmp     a,'a'                   ; If less than 'a', no match                 jrc     lbl4a                 cmp     a,'{'                   ; If greater than 'z', no match                 jrnc    lbl4a                 sub     a,il                    ; Compare the characters again,                 test    a,\$c0                   ; but this time with a case-insensitive match                 jrz     lbl5 ; END CASE-INSENSITIVE FIND-WORD

However, the dictionary search can be optimized, like most Forth implementations. For example, the HP-71b limits searching based on the word length, thus checks dictionary entries for words of the same length only. Other implementations use trees or hashing. There are also simple and practical ways to speed up dictionary search, which I will try. For starters, comparing the length and the first character simultaneously to check a dictionary entry will speed things up.

- Rob

"I count on old friends" -- HP 71B,Prime|Ti VOY200,Nspire CXII CAS|Casio fx-CG50...|Sharp PC-G850,E500,2500,1500,14xx,13xx,12xx...
 « Next Oldest | Next Newest »

 Messages In This Thread FORTH for the SHARP PC-E500 (S) - Helix - 09-06-2021, 11:41 PM RE: FORTH for the SHARP PC-E500 (S) - robve - 09-12-2021, 02:00 AM RE: FORTH for the SHARP PC-E500 (S) - Helix - 09-12-2021, 11:40 PM RE: FORTH for the SHARP PC-E500 (S) - robve - 09-13-2021, 01:12 AM RE: FORTH for the SHARP PC-E500 (S) - xerxes - 09-15-2021, 11:51 PM RE: FORTH for the SHARP PC-E500 (S) - robve - 11-08-2021, 04:22 AM RE: FORTH for the SHARP PC-E500 (S) - xerxes - 11-09-2021, 10:59 PM RE: FORTH for the SHARP PC-E500 (S) - Helix - 09-16-2021, 12:47 PM RE: FORTH for the SHARP PC-E500 (S) - robve - 09-16-2021, 05:06 PM RE: FORTH for the SHARP PC-E500 (S) - Helix - 09-17-2021, 08:45 PM RE: FORTH for the SHARP PC-E500 (S) - toml_12953 - 09-17-2021, 09:25 PM RE: FORTH for the SHARP PC-E500 (S) - Helix - 09-22-2021, 10:55 AM RE: FORTH for the SHARP PC-E500 (S) - robve - 09-21-2021, 06:12 PM RE: FORTH for the SHARP PC-E500 (S) - robve - 09-19-2021, 07:14 PM RE: FORTH for the SHARP PC-E500 (S) - Helix - 09-28-2021, 03:28 PM RE: FORTH for the SHARP PC-E500 (S) - robve - 09-28-2021, 09:03 PM RE: FORTH for the SHARP PC-E500 (S) - Helix - 09-29-2021, 09:23 PM RE: FORTH for the SHARP PC-E500 (S) - robve - 09-29-2021, 10:27 PM RE: FORTH for the SHARP PC-E500 (S) - Helix - 09-30-2021, 09:42 PM RE: FORTH for the SHARP PC-E500 (S) - Klaus Overhage - 10-04-2021, 06:43 AM RE: FORTH for the SHARP PC-E500 (S) - Helix - 10-05-2021, 12:28 AM RE: FORTH for the SHARP PC-E500 (S) - Klaus Overhage - 10-05-2021, 01:02 PM RE: FORTH for the SHARP PC-E500 (S) - robve - 10-06-2021, 02:41 PM RE: FORTH for the SHARP PC-E500 (S) - Helix - 10-06-2021, 11:35 PM RE: FORTH for the SHARP PC-E500 (S) - robve - 10-07-2021, 05:55 PM RE: FORTH for the SHARP PC-E500 (S) - Helix - 10-07-2021, 11:48 PM RE: FORTH for the SHARP PC-E500 (S) - robve - 10-08-2021 01:04 PM RE: FORTH for the SHARP PC-E500 (S) - robve - 10-10-2021, 01:38 AM RE: FORTH for the SHARP PC-E500 (S) - Klaus Overhage - 10-08-2021, 05:36 PM RE: FORTH for the SHARP PC-E500 (S) - robve - 10-08-2021, 07:16 PM RE: FORTH for the SHARP PC-E500 (S) - Klaus Overhage - 10-10-2021, 09:11 AM RE: FORTH for the SHARP PC-E500 (S) - robve - 10-10-2021, 01:22 PM RE: FORTH for the SHARP PC-E500 (S) - Helix - 10-10-2021, 01:36 PM RE: FORTH for the SHARP PC-E500 (S) - robve - 10-13-2021, 02:38 AM RE: FORTH for the SHARP PC-E500 (S) - Klaus Overhage - 10-26-2021, 05:45 PM RE: FORTH for the SHARP PC-E500 (S) - Helix - 10-29-2021, 11:46 PM RE: FORTH for the SHARP PC-E500 (S) - Klaus Overhage - 10-28-2021, 03:11 PM RE: FORTH for the SHARP PC-E500 (S) - robve - 10-29-2021, 04:03 AM RE: FORTH for the SHARP PC-E500 (S) - Klaus Overhage - 10-30-2021, 07:09 AM RE: FORTH for the SHARP PC-E500 (S) - Helix - 10-30-2021, 09:12 PM RE: FORTH for the SHARP PC-E500 (S) - Klaus Overhage - 10-31-2021, 01:57 PM RE: FORTH for the SHARP PC-E500 (S) - Helix - 11-01-2021, 12:34 AM RE: FORTH for the SHARP PC-E500 (S) - robve - 11-02-2021, 07:58 PM RE: FORTH for the SHARP PC-E500 (S) - Helix - 11-03-2021, 11:58 AM RE: FORTH for the SHARP PC-E500 (S) - Klaus Overhage - 11-04-2021, 05:48 PM RE: FORTH for the SHARP PC-E500 (S) - robve - 11-05-2021, 02:04 PM RE: FORTH for the SHARP PC-E500 (S) - Klaus Overhage - 11-06-2021, 10:40 AM RE: FORTH for the SHARP PC-E500 (S) - robve - 11-06-2021, 07:31 PM RE: FORTH for the SHARP PC-E500 (S) - robve - 11-07-2021, 01:15 AM RE: FORTH for the SHARP PC-E500 (S) - Klaus Overhage - 11-07-2021, 01:00 PM RE: FORTH for the SHARP PC-E500 (S) - robve - 11-07-2021, 03:40 PM RE: FORTH for the SHARP PC-E500 (S) - Klaus Overhage - 11-07-2021, 05:44 PM RE: FORTH for the SHARP PC-E500 (S) - robve - 11-07-2021, 08:19 PM RE: FORTH for the SHARP PC-E500 (S) - Klaus Overhage - 11-09-2021, 08:23 AM RE: FORTH for the SHARP PC-E500 (S) - Klaus Overhage - 11-13-2021, 12:07 PM RE: FORTH for the SHARP PC-E500 (S) - robve - 11-13-2021, 07:19 PM RE: FORTH for the SHARP PC-E500 (S) - robve - 11-22-2021, 05:42 PM RE: FORTH for the SHARP PC-E500 (S) - Helix - 11-24-2021, 11:33 PM RE: FORTH for the SHARP PC-E500 (S) - robve - 11-25-2021, 02:54 AM RE: FORTH for the SHARP PC-E500 (S) - Helix - 01-12-2022, 11:06 PM RE: FORTH for the SHARP PC-E500 (S) - robve - 01-13-2022, 03:40 AM RE: FORTH for the SHARP PC-E500 (S) - robve - 01-16-2022, 09:22 PM RE: FORTH for the SHARP PC-E500 (S) - Helix - 01-18-2022, 12:32 AM RE: FORTH for the SHARP PC-E500 (S) - Helix - 02-19-2022, 09:40 PM RE: FORTH for the SHARP PC-E500 (S) - robve - 02-20-2022, 09:13 PM RE: FORTH for the SHARP PC-E500 (S) - Helix - 02-20-2022, 11:12 PM RE: FORTH for the SHARP PC-E500 (S) - robve - 04-03-2022, 12:53 AM RE: FORTH for the SHARP PC-E500 (S) - Helix - 04-03-2022, 11:06 PM RE: FORTH for the SHARP PC-E500 (S) - robve - 04-04-2022, 12:47 AM RE: FORTH for the SHARP PC-E500 (S) - robve - 06-21-2022, 02:16 AM RE: FORTH for the SHARP PC-E500 (S) - F-73P - 06-22-2022, 02:10 AM

User(s) browsing this thread: 1 Guest(s)