I thought control register 4 is the primary address space and 3 is
secondary
BTW
if i am correct the control register 4 is the primary address
would the following code make sense
if(regs->CR_HHL(4) == myasid)
Greg I have another question re: code you wrote I'll start another
thread
--- In
hercules-390@..., Greg Smith <gsmith@...> wrote:
>
> On Tue, 2008-08-19 at 17:16 +0000, michealbutz2002 wrote:
> > I am a an Assembler internals Guy and am trying to expand my
> > horizons
> >
> > I am trying to display MVS info e.g. some of the things in HSCCMD.C
> >
> > In a GUI front I did a Windows API CreateProcess to Create a Window
> > 32 WinMain app to display info displayed in DOS box from hsccmd.c
> >
> >
> > you have given me some idea of what I need to do
> >
> > let me see if this can help
>
> What Roger said. Stuff in mainstor is big-endian. Stuff in control
> blocks is usually host-endian (little-endian on intel). You should
> always know how many bytes you are fetching from mainstor (whereas on
> host you don't know if `void *ptr' is 4, 8 or some other number of
> bytes).
>
> To do virtual addressing, you should use the MADDR macro. The control
> regs (2 (primary) or 7 (secondary) or 13 (home) or etc) must be set up.
> The virtual address should probably be resolvable to a real address else
> you are going to take a page interrupt.
>
> Below is some code I wrote a while back that fits into an instruction.
>
> Bonus points to anyone that can explain what it does ;-)
>
> Extra bonus points if you can explain why this code shows you cannot
> necessarily trust your hardware vendor.
>
> Greg
>
> --- hercules-cvs/general2.c 2007-01-13 02:21:48.000000000 -0500
> +++ hercules/general2.c 2007-02-04 13:03:06.000000000 -0500
> @@ -1373,6 +1373,24 @@
> }
> #endif
>
> + if (i == 131 && sysblk.stepaddr[0] == 131)
> + {
> + BYTE *mn = NULL;
> + ARCH_DEP(display_inst)(regs, inst);
> + if (regs->GR_L(1))
> + mn = MADDR(regs->GR_L(1),0,regs,ACCTYPE_READ,0);
> + else if (regs->GR_L(0))
> + {
> + VADR p;
> + p =
fetch_fw(MADDR(regs->GR_L(0)+4,0,regs,ACCTYPE_READ,0)); // SAFP
> + if (p && fetch_hw(MADDR(p+0x0c,0,regs,ACCTYPE_READ,0))
== 0x0005)
> + mn = MADDR(p +
fetch_hw(MADDR(p+0x08,0,regs,ACCTYPE_READ,0)),
> + 0,regs,ACCTYPE_READ,0);
> + }
> + if (mn && (mn[3] & 0x80) == 0x00)
> + mn[3] |= 0x08;
> + }
> +
> /* Point to PSA in main storage */
> psa = (void*)(regs->mainstor + px);
>