I've heard that the terms vertical and horizontal just refer to the way the listings were printed. The vertical instructions were printed down the page, as usual, but the horizontal code was printed in boxes progressing left to right across the page. The horizontal microcode, or HMC, of the CISC machines (S/38 & AS/400) was the lowest level. (IBM seems to be running out of acronyms and has recycled HMC to mean "Hardware Management Console" now.) It was what is normally called microcode in the EE world. That is, code that resided in memory separate from main memory (IBM called it control store) and controlled the hardware chips to execute the vertical microcode machine instructions, essentially interpretively. The vertical microcode, or VMC, wasn't microcode at all, the way anybody outside IBM understands the term. It was just the assembly or machine language of the CISC processors. In fact, it closely resembled the machine code of the 360/370/390 mainframes. Anybody remember base-displacement addressing or the MVC instruction? The assembly source language was called PL/MP (Programming Language/Micro Programming, or some such), and was, I've heard, originally compiled on an MVS system in Rochester for the S/38 and the early AS/400's. RISC (PowerPC) processors don't have microcode (unless it's on the chip itself), so there isn't any "horizontal microcode" layer. All of the OS is encoded in PowerPC machine code. SLIC is the low-level portion of the OS that replaces VMC, written (mostly) in C++. It resides in modules on the load-source disk and comprises the 5722-999 component. Although mostly C++ written from scratch for the RISC AS/400's, there are a few modules with names that start with '#' and 'V' which were brought over from CISC. '#' modules were written in PL/MP, while 'V' modules were written in Modula-2, if you can believe that! The C++ modules were at one time compiled on an RS/6000 runing AIX. I'm not sure what compilers they use nowadays. You can print a list of the SLIC module names in SST by selecting 2 "Licensed Internal Code (LIC) data", then 9 "LIC Link Map", then 1 "Module List". The "MI" level programs reside in QSYS and are known as 5722-SS1. MI is a high-level assembler language which compiles into a binary machine code defined in the MI reference manual. For example the op-code for the CPYBLA instruction is x'10B2'. But that binary MI is only a temporary compile-time "intermediate code". IBM, who love obfuscation, call it IRP, Intermediate Representation of a Program. During a compile, it's translated into first W-code (a stack-oriented intermediate code), then NMI (new MI) then finally, by a program called the "optimizing translator", into PowerPC machine code. The famous TIMI (Technology-Independent Machine Interface) refers to the fact that the MI component is written in PL/MI (both on CISC and RISC). To change to the PowerPC platform, they just had to change the backend of the compilers, the "optimizing translator", to generate PowerPC machine code instead of VMC machine code. The SLIC layer they chose to re-implement almost entirely in C++. So the only machine code that ever executes on RISC iSeries is PowerPC machine code. (Unless you count Java byte-codes, which can be executed interpretively by a Java Virtual Machine executing PowerPC machine code :-) --Dave On Wed, 2004-09-01 at 10:01, Joe Pluta wrote: > > From: Dave McKenzie > > > > The modified machine instruction in UNDELM is in the VMCRD subroutine > > (showing its CISC heritage: VMC was the "vertical microcode" on > > CISC--what is called SLIC, System Licensed Internal Code, on RISC). > > This is interesting stuff for me, Dave. I remember the terms vertical > and horizontal microcode, and I never quite understood which was on top > of which, and why. I understood that they provided the > software/hardware isolation that has done us such service over the > years, but not the exact mechanism. And now with the SLIC, I am less > sure as to how that works. Would you care to share a little more of > your wisdom with a layperson? > > <grin> > > Joe
As an Amazon Associate we earn from qualifying purchases.
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.