The MASM Forum Archive 2004 to 2012

Project Support Forums => MASM32 => Topic started by: hutch-- on January 31, 2006, 02:44:43 AM

Title: Script Engine beta 2
Post by: hutch-- on January 31, 2006, 02:44:43 AM
I have done alot more work on this and it is now handling the minimum purpose I intended it to, a fast text generator aimed at code generation. The labels are now properly tested for either duplicates or a jmp to a missing label. I have added a multiple choice dialog "select" which is list box based so it is clear and fast to use. The file IO commands are more or less finished and there are a couple of test templates that will output masm code.

[attachment deleted by admin]
Title: Re: Script Engine beta 2
Post by: daydreamer on February 02, 2006, 08:26:17 PM
makes me want to add extension that helps produce conditionals for parallel execution, just from simple IF's
ok, limited to IF , then do arithmetic calculation, else notdo arithmetic calculation
but alot more readable and easier for people not used to parallel thinking
Title: Re: Script Engine beta 2
Post by: hutch-- on February 03, 2006, 12:19:05 AM
I will post the next version when I get a bit more work done but I have added string comparison with "if$" using the same logic as the "if" method which seems to be working OK and have added named variables to the numbererd variables so that the script looks more like a programming language. It will probably need a case insensitive version as well, something like "ifi$".

The problem with conventional IF blocks is I have to use something like a recursive descent parser in the loader and I am mainly worried about slowing the loader down too much. The string runtime engine seems to be fast enough and if I can transfer some of the runtime testing to the loader, it may get a bit faster but I am stuck with balancing load to run speed.

I have the loader and the runtime engine completely seperate and they can easily be seperated so that the loader component builds a runnable file for the runtime engine and this effectively removes the speed issue with the loader and I may go that path as an option a bit later.
Title: Re: Script Engine beta 2
Post by: Ghirai on February 12, 2006, 02:31:46 AM
This sounds very good :U

Do you think it will evolve in something like Perl?
Title: Re: Script Engine beta 2
Post by: hutch-- on February 12, 2006, 01:08:08 PM
I have a fair bit more work done on it now. named variables makes the code a lot easier to read and write. I have just completed a hash table design that I am using in the loader and what is the start of a pre-processor which allows me to use more equates without a loader speed penalty. I gave the runtime engine a genuine hammering and have the instruction fetch rate up to about 1.5 million a second which is a reasonable improvement from the last figure of about 1 million. I have also added directory runtime commands that appear to be working OK at the moment.

Its now capable of code of this style. I need to tidy up a few more things and then I will post it.


; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««

  ; This is to test the instruction
  ; fetch speed with minimum runtime
  ; functionality for the loop.

; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««

    INTEGER lref            ; loop reference variable
    INTEGER lcnt            ; loop counter
    STRING  result$         ; string for result display

    msgbox "Start" "Loop speed test" MB_OK

    lref = 150000           ; assign the loop reference count
    lcnt = 0                ; set counter to zero

    clock 0                 ; start timing

  ; *******************************************************
  ; the following loop has 10 instructions which are looped
  ; 150000 times to produce 1 million instruction fetches.
  ; *******************************************************
  start:
    nop                     ; nop is a no content
    nop                     ; instruction mainly
    nop                     ; for testing
    nop
    nop
    nop
    nop
    add lcnt, 1
    if lcnt != lref         ; while lref is not equal to lcnt
    goto start              ; loop back to start

    clock 1                 ; end timing and store results in #0

    result$ = cat$ "1.5 Million instruction fetches in " #0 " milliseconds"
    msgbox result$ "Timing result" MB_OK

    end

; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««