Post Reply 
"New-Yorke" ?
06-28-2020, 04:33 PM (This post was last modified: 06-28-2020 06:12 PM by Jonathan Busby.)
Post: #21
RE: "New-Yorke" ?
(06-28-2020 01:17 AM)Giuseppe Donnini Wrote:  I confess, indeed, that I mistook you for the main author of that article, Jonathan, and I’m glad to see that you took it lightly. Wink Please accept my apologies!

No need to apologize Smile I *am* ( now at least ) one of the main authors of the article Smile Here's a link to how the article looked before I started making major alterations to it : https://en.wikipedia.org/w/index.php?tit...=782233761

Note that I had nothing to do with the inaccuracies of the wikitable which lists the various CPUs / SoCs and their specs Smile The table was added by another person before I started making changes to the article -- I think the only modifications I've made to the table are some inline citations for the "New-Yorke" prototype CPU ( which link to Cyrille's posts in this thread Smile ).

Quote:According to my own database on the subject, the i486DX2-comparison you refer to was not drawn by Dave Arnett, but by Preston Brown.

OH! I didn't know that! Smile Thanks for the information Smile

Quote:The reason you couldn’t find the exact post on Google Groups is that it is simply not there anymore! It’s part of that ill-fated comp.sys.hp48-period, running from spring 1993 to spring 1994, that seems to have been devoured by some mysterious Chronophagos. But a snippet of it has been preserved on Joe Horn’s Goodies Disk #9 under the name "SPEEDUP.DOC" (in the "POSTINGS" sub-directory), a copy of which can also be found here.

Thanks for the info! Smile

Quote:Thanks for your outstanding contributions in general, Jonathan! I'm really looking forward to your reworking of the article!

Thank you for all the corrections and information and a big you're welcome for the compliment! Smile

Regards,

Jonathan

Aeternitas modo est. Longa non est, paene nil.
Find all posts by this user
Quote this message in a reply
06-28-2020, 04:35 PM
Post: #22
RE: "New-Yorke" ?
(06-28-2020 12:33 AM)Raymond Del Tondo Wrote:  
(06-27-2020 02:29 AM)Giuseppe Donnini Wrote:  Not even Horror Mode (aka MASD syntax), introduced with the HP-49G in 1999, is considered level 3—which is only consistent since these are by no means actual instructions, but mere macros (which surely would have won haut la main the "International Obfuscated SASM Code Contest", if it existed).
You nailed it:-)

ΗΑ! Big Grin I concur! Big Grin

Regards,

Jonathan

Aeternitas modo est. Longa non est, paene nil.
Find all posts by this user
Quote this message in a reply
06-29-2020, 06:17 AM
Post: #23
RE: "New-Yorke" ?
Hello,
Quote: Raymond Del Tondo Wrote:
(06-27-2020 12:29 PM)Giuseppe Donnini Wrote:
Not even Horror Mode (aka MASD syntax), introduced with the HP-49G in 1999, is considered level 3—which is only consistent since these are by no means actual instructions, but mere macros (which surely would have won haut la main the "International Obfuscated SASM Code Contest", if it existed).
You nailed it:-)
ΗΑ! Big Grin I concur! Big Grin
Regards,
Jonathan

HEY NOW, I TAKE OFFENCE TO THAT!
MASD syntax was pure genius, with functionality that are still missing from languages like C++!

Look at what it can produce for example: Such a snipet of code (which actually comes from MASD itself!) would have taken 5 pages in the other syntax, making understanding the actual code an absolute pain.

Code:
% write debug info
CD1EX D1=C R4=C.A                                 % save start address
A=0.A DAT1=A.A D1+5                               % write a 0 (nb entries)
D0=(5)_DebugInfoBuffer+#5 C=0.A C=DAT0.B D0-5     % Ba: pos in buffer, D0: on buffer
B=0.A                                             % Ba: nb entries
A=DAT0.A ?A#0.A                                   % is the buffer used?
{
  B+1.XS B-C.A                                    % get nb of used entries in first buffer
  C+C.A C+C.A A+C.A C+C.A A+C.A D0=A C=B.A C+C.A C+B.A C+C.A C+C.A GOSBVL MOVEDOWN % copy them
  {                                               % for each buffer
    D0+2 A=DAT0.A D0=A ?A=0.A EXIT                % end of the list?
    LC 00100 B+C.A                                % 100 more entries
    LC(5)_DebugBufferSize-#7 GOSBVL MOVEDOWN      % copy buffer
    UP
  }
  % invert the data to be from low address to high address
  CD1EX D1=C RSTK=C C=R4.A D0=C                   % point on start and end
  C=B.A DAT0=C.A D0+5                             % write nb entries
  BSRB.A B-1.A SKC                                % for nb entries/2 do
  {
    D1-12 A=DAT0.12 C=DAT1.12 DAT0=C.12 DAT1=A.12 D0+12 % invert the entries
    B-1.A UPNC                                    % next
  }
  C=RSTK D1=C
}

MASD syntax added a slew of great features, including some that are still missing from most common languages even C++.
But let us look at the MASD syntax in details to understand the what and whys...
The first BIG change with other ASM languages is the multi instruction per line and the drop of the "first column=label" concept (which where inherited from punch cards!).
2 Things there. First, MASD nearly got rid of all labels. A good MASD code will have little to no labels in it (see later). Second, labels are prefixed by a "*" avoiding the first column=label.
This frees room on the screen.
Now, the 48 had 4 lines of 22 characters. That is all! so allowing more instructions per lines allowed you to actually SEE your program (What can you do with minimal instructions if you only see 4 of them at a time!!!). With masd syntax, you could see around 16 instructions at a time! SO MUCH BETTER for a programmer!

This was allowed by the multi instructions per line and the unneded redudancy on repeated registers. A=A+B A can be replaced by A+B A (since the A= is kind of redudant)...
Please note that, FOR clarity, the devil that is the MASD syntax allowed the use of a '.' as a field separator so as to clearly link the field with the instruction a in A+B.A C+D.A where you can clearly see 2 distinct instructions (I did toy, at some point, with the idea that the 'A' field would be by default, thus making it optional. I also toyed with the idea of 'last field use is default', but discarded this as it would be, in my opinion, error prone, making subsequent instruction dependent on previous ones)...

MASD allowed for great use of constants, subsequently defined constants and the like which made programming much easier than what we had before. simillary, you could do D1+34 instead of having to do D1=D1+ 16
D1=D1+ 16
D1=D1+2

But, the BEST thing about masd is of course the blocks {} which can be used in the same way that they be in C or java. Add to this the up/exit "n" syntax, which allowed you to exit, or return to the top of a block at this or any other level and this really transformed ASM programming from the crud it was to something that was 1/2 way up the chain to a "real langauge"...

So, here you go, MASD was a great syntax, 100 times better than the SASM one.
And I would continue saying it, even if I did not, as it goes, have a "slight" bias :-)

Cyrille

Although I work for the HP calculator group, the views and opinions I post here are my own. I do not speak for HP.
Find all posts by this user
Quote this message in a reply
07-11-2020, 01:05 AM (This post was last modified: 07-11-2020 01:13 AM by sunhp.)
Post: #24
RE: "New-Yorke" ?
(06-29-2020 06:17 AM)cyrille de brébisson Wrote:  Hello,
Quote: Raymond Del Tondo Wrote:
(06-27-2020 12:29 PM)Giuseppe Donnini Wrote:
Not even Horror Mode (aka MASD syntax), introduced with the HP-49G in 1999, is considered level 3—which is only consistent since these are by no means actual instructions, but mere macros (which surely would have won haut la main the "International Obfuscated SASM Code Contest", if it existed).
You nailed it:-)
ΗΑ! Big Grin I concur! Big Grin
Regards,
Jonathan

HEY NOW, I TAKE OFFENCE TO THAT!
MASD syntax was pure genius, with functionality that are still missing from languages like C++!

Look at what it can produce for example: Such a snipet of code (which actually comes from MASD itself!) would have taken 5 pages in the other syntax, making understanding the actual code an absolute pain.

Code:
% write debug info
CD1EX D1=C R4=C.A                                 % save start address
A=0.A DAT1=A.A D1+5                               % write a 0 (nb entries)
D0=(5)_DebugInfoBuffer+#5 C=0.A C=DAT0.B D0-5     % Ba: pos in buffer, D0: on buffer
B=0.A                                             % Ba: nb entries
A=DAT0.A ?A#0.A                                   % is the buffer used?
{
  B+1.XS B-C.A                                    % get nb of used entries in first buffer
  C+C.A C+C.A A+C.A C+C.A A+C.A D0=A C=B.A C+C.A C+B.A C+C.A C+C.A GOSBVL MOVEDOWN % copy them
  {                                               % for each buffer
    D0+2 A=DAT0.A D0=A ?A=0.A EXIT                % end of the list?
    LC 00100 B+C.A                                % 100 more entries
    LC(5)_DebugBufferSize-#7 GOSBVL MOVEDOWN      % copy buffer
    UP
  }
  % invert the data to be from low address to high address
  CD1EX D1=C RSTK=C C=R4.A D0=C                   % point on start and end
  C=B.A DAT0=C.A D0+5                             % write nb entries
  BSRB.A B-1.A SKC                                % for nb entries/2 do
  {
    D1-12 A=DAT0.12 C=DAT1.12 DAT0=C.12 DAT1=A.12 D0+12 % invert the entries
    B-1.A UPNC                                    % next
  }
  C=RSTK D1=C
}

MASD syntax added a slew of great features, including some that are still missing from most common languages even C++.
But let us look at the MASD syntax in details to understand the what and whys...
The first BIG change with other ASM languages is the multi instruction per line and the drop of the "first column=label" concept (which where inherited from punch cards!).
2 Things there. First, MASD nearly got rid of all labels. A good MASD code will have little to no labels in it (see later). Second, labels are prefixed by a "*" avoiding the first column=label.
This frees room on the screen.
Now, the 48 had 4 lines of 22 characters. That is all! so allowing more instructions per lines allowed you to actually SEE your program (What can you do with minimal instructions if you only see 4 of them at a time!!!). With masd syntax, you could see around 16 instructions at a time! SO MUCH BETTER for a programmer!

This was allowed by the multi instructions per line and the unneded redudancy on repeated registers. A=A+B A can be replaced by A+B A (since the A= is kind of redudant)...
Please note that, FOR clarity, the devil that is the MASD syntax allowed the use of a '.' as a field separator so as to clearly link the field with the instruction a in A+B.A C+D.A where you can clearly see 2 distinct instructions (I did toy, at some point, with the idea that the 'A' field would be by default, thus making it optional. I also toyed with the idea of 'last field use is default', but discarded this as it would be, in my opinion, error prone, making subsequent instruction dependent on previous ones)...

MASD allowed for great use of constants, subsequently defined constants and the like which made programming much easier than what we had before. simillary, you could do D1+34 instead of having to do D1=D1+ 16
D1=D1+ 16
D1=D1+2

But, the BEST thing about masd is of course the blocks {} which can be used in the same way that they be in C or java. Add to this the up/exit "n" syntax, which allowed you to exit, or return to the top of a block at this or any other level and this really transformed ASM programming from the crud it was to something that was 1/2 way up the chain to a "real langauge"...

So, here you go, MASD was a great syntax, 100 times better than the SASM one.
And I would continue saying it, even if I did not, as it goes, have a "slight" bias :-)

Cyrille

I would like to confirm that MASD was a pure genius syntax (labels, { }, syntax, etc.)
I unfortunately used it a bit late while I was actively coding games for the HP48, nobody can imagine how much time I saved by using MASD instead of ASM or J-ASM (Laurent Jouanneau) exotic asm syntax.

Here is my SuperMario48 MASD syntax I have created and edited directly with a real HP48 and it was so fun do code it in 1998 ~ 1999. Wow 20+ years ago.
http://jadegame.com/file/hp/smhpsrc/sources/Src30.wri

great job Cyrille!
Visit this user's website Find all posts by this user
Quote this message in a reply
07-15-2020, 11:42 AM
Post: #25
RE: "New-Yorke" ?
Actually it was MASD that finally let me do ASM on the 48 after giving up many times

Thanks Cyrille
Find all posts by this user
Quote this message in a reply
07-15-2020, 07:59 PM
Post: #26
RE: "New-Yorke" ?
(06-29-2020 06:17 AM)cyrille de brébisson Wrote:  Hello,
Quote: Raymond Del Tondo Wrote:
(06-27-2020 12:29 PM)Giuseppe Donnini Wrote:
Not even Horror Mode (aka MASD syntax), introduced with the HP-49G in 1999, is considered level 3—which is only consistent since these are by no means actual instructions, but mere macros (which surely would have won haut la main the "International Obfuscated SASM Code Contest", if it existed).
You nailed it:-)
ΗΑ! :D I concur! :D
Regards,
Jonathan

HEY NOW, I TAKE OFFENCE TO THAT!

No offense or insult intended -- it was said in jest :) ( Mostly :P )

Quote:MASD syntax was pure genius, with functionality that are still missing from languages like C++!

I think C++20 might have MASD syntax covered :P

Quote:Look at what it can produce for example: Such a snipet of code (which actually comes from MASD itself!) would have taken 5 pages in the other syntax, making understanding the actual code an absolute pain.

Code:
% write debug info
CD1EX D1=C R4=C.A                                 % save start address
A=0.A DAT1=A.A D1+5                               % write a 0 (nb entries)
D0=(5)_DebugInfoBuffer+#5 C=0.A C=DAT0.B D0-5     % Ba: pos in buffer, D0: on buffer
B=0.A                                             % Ba: nb entries
A=DAT0.A ?A#0.A                                   % is the buffer used?
{
  B+1.XS B-C.A                                    % get nb of used entries in first buffer
  C+C.A C+C.A A+C.A C+C.A A+C.A D0=A C=B.A C+C.A C+B.A C+C.A C+C.A GOSBVL MOVEDOWN % copy them
  {                                               % for each buffer
    D0+2 A=DAT0.A D0=A ?A=0.A EXIT                % end of the list?
    LC 00100 B+C.A                                % 100 more entries
    LC(5)_DebugBufferSize-#7 GOSBVL MOVEDOWN      % copy buffer
    UP
  }
  % invert the data to be from low address to high address
  CD1EX D1=C RSTK=C C=R4.A D0=C                   % point on start and end
  C=B.A DAT0=C.A D0+5                             % write nb entries
  BSRB.A B-1.A SKC                                % for nb entries/2 do
  {
    D1-12 A=DAT0.12 C=DAT1.12 DAT0=C.12 DAT1=A.12 D0+12 % invert the entries
    B-1.A UPNC                                    % next
  }
  C=RSTK D1=C
}

MASD syntax added a slew of great features, including some that are still missing from most common languages even C++.

Well, I don't know about the C++ claim, but many experienced Saturn assembly programmers' revulsion to MASD syntax stems from just being so familiar with the HP Tools / Jazz syntax that it's almost instinctual :) Also, when programming in assembly ( for any CPU ), for me at least, I *want* more verbosity as it makes the code more "self documenting" and easier to understand :)

Quote:But let us look at the MASD syntax in details to understand the what and whys...
The first BIG change with other ASM languages is the multi instruction per line and the drop of the "first column=label" concept (which where inherited from punch cards!).
2 Things there. First, MASD nearly got rid of all labels. A good MASD code will have little to no labels in it (see later). Second, labels are prefixed by a "*" avoiding the first column=label.
This frees room on the screen.
Now, the 48 had 4 lines of 22 characters. That is all! so allowing more instructions per lines allowed you to actually SEE your program (What can you do with minimal instructions if you only see 4 of them at a time!!!). With masd syntax, you could see around 16 instructions at a time! SO MUCH BETTER for a programmer!

Well, that's kind of a straw-man argument :) Although, I might be misunderstanding you if you're talking about the *usable* text space on the 131x64 pixel display with the default "system" font ( ie. for the default HP48 8 line by 22 character font ). The Jazz "small" / "mini" font gets you 10 lines of text with 33 characters per line on an HP48 :) Also, having many instructions crammed onto one line may allow easier on-calc programming, but IMNSHO it greatly reduces readability :)

Quote:This was allowed by the multi instructions per line and the unneded redudancy on repeated registers. A=A+B A can be replaced by A+B A (since the A= is kind of redudant)...
Please note that, FOR clarity, the devil that is the MASD syntax allowed the use of a '.' as a field separator so as to clearly link the field with the instruction a in A+B.A C+D.A where you can clearly see 2 distinct instructions (I did toy, at some point, with the idea that the 'A' field would be by default, thus making it optional. I also toyed with the idea of 'last field use is default', but discarded this as it would be, in my opinion, error prone, making subsequent instruction dependent on previous ones)...

Well, again, at least for me, I *want* more redundancy, to make the code easier to understand :)

Quote:MASD allowed for great use of constants, subsequently defined constants and the like which made programming much easier than what we had before. simillary, you could do D1+34 instead of having to do D1=D1+ 16
D1=D1+ 16
D1=D1+2

But, the BEST thing about masd is of course the blocks {} which can be used in the same way that they be in C or java. Add to this the up/exit "n" syntax, which allowed you to exit, or return to the top of a block at this or any other level and this really transformed ASM programming from the crud it was to something that was 1/2 way up the chain to a "real langauge"...

I'm a hypocrite if I don't praise MASD's ingenuity at inferring instruction sequences and making use of structured control blocks. MASD definitely wasn't the first implementation of structured high-level programming concepts applied to assembly though -- the first high level assemblers were created circa 1960 ( See eg. here and here ).

In the vein of what MASD was meant to accomplish, a fellow HP48 hacker and I had been working on a type of "high level assembler" ( inspired in part by this, although much simpler ) which is now just a pre-processor to SASM :) The ultimate goal is to include "most" of the basic / core syntactic and semantic constructs present in the C99 standard ( sans the standard libraries of course ), but in a form that is really assembly with a lot of instruction sequence inference :) The project hasn't been worked on in a while**. It's built using Flex and Bison ( and some GNU M4 :) ) and I eventually intend to add basic / rudimentary register allocation to it with some type of "no-clobber" constructs :) , possibly augmenting the simple graph coloring algorithm with a genetic / evolutionary one.

Some example output for the following

Code:
do {
        C.B = *D1++;
} while (C.B);
D1 = *A;
B.A = A.A ? C.A : D.A;

Would be

Code:
-       D1=D1+  1
        C=DAT1  B
        ?C#0    B
        GOYES   -
        AD1EX    
        A=DAT1  A
        AD1EX
        ?A=0    A
        GOYES   +
        B=C     A
        GONC    ++
+       CDEX    A
        B=C     A
        CDEX    A
++

( ** The reason the project hasn't been worked on in a while is due to the other author having little time because of various things and also because of me having little time due to various things of which the main thing is my move to Colorado this year )

Quote:So, here you go, MASD was a great syntax, 100 times better than the SASM one.

It might make on-calc assembly programming easier in terms of less key-presses, but I don't really like on-calc assembly programming :) -- I prefer a text editor running on a Linux distro :)

Quote:And I would continue saying it, even if I did not, as it goes, have a "slight" bias :-)

Cyrille

"Slight bias" accepted :P

Regards,

Jonathan

Aeternitas modo est. Longa non est, paene nil.
Find all posts by this user
Quote this message in a reply
Post Reply 




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