¿ªÔÆÌåÓý

ctrl + shift + ? for shortcuts
© 2025 Groups.io

Re: COMRG

 

Paul Edwards wrote:

What's the rationale here?

We're trying to get the address of a common region.

COMRG

L 1,20
SVC 33

LR R5,R1
USING COMREG,R5

The first thing it does is load a value from absolute address 20.

And then it does an SVC 33 - which provides a level of
abstraction I think. But you've just defeated that abstraction
by accessing an absolute address. If you're willing to start
at an absolute address, you may as well have your control
blocks chained off that. Perhaps this isn't considered to be
a control block - it is specific to this program and there
could be a chain of such programs.
I am going to presume you know what a partition is in DOS/VS.

Each partition has its own Communications Region. Address 20 is always set to the address of the given partition's Communications Region control block by the dispatcher. It is a part of task dispatching. So while that particular partition is running, address 20 always points to its COMRG.


Or alternatively - use the abstraction - SVC 33 can go and
inspect low memory itself?
That is not the purpose of SVC 33.


Or is that not how the PSA works when there are multiple processors
or something like that?
I don't believe DOS/VS supported multiple processors. It only supported multiple partitions. It is just a very simple multitasking operating system.

SVC 33 is, as far as the user is concerned (or should I say, as far as USER tasks are concerned), a dummy SVC that essentially does nothing. It simply goes directly to the dispatcher to return back to the caller.

If a SYSTEM task issues SVC 33 however, it causes the dispatcher to dispatch a higher priority system task instead, if there is one. (User tasks and system tasks are dispatched differently. User task priorities can change (via the operator PRTY command), whereas system tasks have hard coded fixed priorities.)

To better understand the purpose of SVC 33 (i.e. how it works), all one need do is examine the DOS/VS Supervisor code (listing) for it. (Everyone should have a copy of an assembled supervisor listing on their system for reference IMO. You can learn a lot by studying it):


01098 1331+SVC33 EQU * . @DM01378 20100028
1332+* SVC33 IS A DUMMY SVC WHEN ISSUED BY A USER TASK @DM01378 20100828
1333+* SVC33 ISSUED BY A SYSTEM TASK DEACTIVATES TASK @DM01378 20101628
1334+* WHICH IS ACTIVE VIA SELECT BYTE. THIS ALLOWES @DM01378 20102428
1335+* DISPATCHER TO GIVE CONTROL TO ANY HIGHER @DM01378 20103228
1336+* PRIORITY SYSTEM TASK @DM01378 20104028
001098 9500 073D 0073D 1337+ CLI SELECT,ZERO . SVC33 ISSUED BY SYST.TASK @DM01378 20110028
00109C 0786 1338+ BCR E,R6 . NO,GOTO TASK SELECTION @DM01378 20110828
00109E 1876 1339+ LR R7,R6 . SETUP EXIT ADDRESS @DM01378 20111628
0010A0 4140 0083 00083 1340+READYSYS LA R4,READY . SETUP DESELECT ROUT. @DM01378 20112428
1341+* FOLLOWING ROUTINE CLEARS SELECT BITE AND SETS @DM01378 20112528
1342+* SYSTEM TASKS PIBFLAG TO A VALUE CONTAINED IN R4 @DM01378 20112628
0010A4 5850 0794 00794 1343+DESELECT L R5,ASYSBLKX . ADDRESS OF SYS.TASK BLOCK @DM01378 20113228
00000 1344+ USING SYSBLKS,R5 @DM01378 20114028
0010A8 4880 5000 00000 1345+ LH R8,SYSPIBFL . ADDRESS OF SYS.TASK PIBFLAG @DM01378 20114828
00000 1346+ USING SPIBADR,R8 @DM01378 20115628
0010AC 4240 8000 00000 1347+ STC R4,SPIBFLG . SET TASK TO READY OR BOUND @DM01378 20116428
0010B0 9200 073D 0073D 1348+ MVI SELECT,ZERO . DEACTIVATE TASK IN SELECT @DM01378 20117228
0010B4 07F7 1349+ BR R7 . RETURN TO CALLER OR TO EXIT @DM01378 20118028

--
"Fish" (David B. Trout)
Software Development Laboratories

mail: fish@...


Re: COMRG

 

COMRG causes the address of the partition communications region to be placed in R1.

image.png

"Or is that not how the PSA works when there are multiple processors
or something like that?"

There is no PSA in DOS/VS.

Joe



On Tue, Sep 10, 2024 at 11:41?PM Paul Edwards via <mutazilah=[email protected]> wrote:
What's the rationale here?

We're trying to get the address of a common region.

COMRG

L? ? ?1,20
SVC? ?33

LR? ? R5,R1
USING COMREG,R5

The first thing it does is load a value from absolute address 20.

And then it does an SVC 33 - which provides a level of
abstraction I think. But you've just defeated that abstraction
by accessing an absolute address. If you're willing to start
at an absolute address, you may as well have your control
blocks chained off that. Perhaps this isn't considered to be
a control block - it is specific to this program and there
could be a chain of such programs.

Or alternatively - use the abstraction - SVC 33 can go and
inspect low memory itself?

Or is that not how the PSA works when there are multiple processors
or something like that?

Thanks. Paul.






COMRG

 

What's the rationale here?

We're trying to get the address of a common region.

COMRG

L 1,20
SVC 33

LR R5,R1
USING COMREG,R5

The first thing it does is load a value from absolute address 20.

And then it does an SVC 33 - which provides a level of
abstraction I think. But you've just defeated that abstraction
by accessing an absolute address. If you're willing to start
at an absolute address, you may as well have your control
blocks chained off that. Perhaps this isn't considered to be
a control block - it is specific to this program and there
could be a chain of such programs.

Or alternatively - use the abstraction - SVC 33 can go and
inspect low memory itself?

Or is that not how the PSA works when there are multiple processors
or something like that?

Thanks. Paul.


Re: pdld

 

I now have the equivalent of WTO working, with the CCB/CCW/EXCP in C.

You can see that here:




09:01:22 BG
09:01:22 *
09:01:22 BG
09:01:22 * Now run the app
09:01:22 BG
09:01:22 *
09:01:22 BG
09:01:22 MADE IT!
09:01:22 BG
09:01:22 *
09:01:22 BG


So next I will work on adding those services to z/PDOS-generic
in order to prove the concept.

Then reevaluate.

BFN. Paul.


pdld

 

This has only just started working, so there may still be issues,
but the linker pdld.exe has now been proven to be able to
create an unloaded DOS/VS phase - offline - ie on Windows. The
code is C90-compliant so should work anywhere, including
VSE itself.

I am planning on using the minimal possible assembler to
get PDPCLIB operational - as a precursor to doing the same
on CMS and MVS.

And this is also the precursor to getting z/PDOS-generic to
operate as a mini VSE clone similar to how PDOS-generic
currently acts as a mini Amiga clone. That will require a
modification to sapstart.asm to allow forwarding of SVCs
to the C code. Although another way is to avoid doing the
SVC calls entirely and get the VSE program to detect that
it is running under an SVC-less environment and switch to
doing callbacks for the SVC routine is possible.

Regardless, going forward, almost everything will be in C
instead of assembler, unless I'm missing something
fundamental. Before you say - all the interfaces are designed
as assembler macros - you need to use assembler just like
on MSDOS - well - just like MSDOS, you can have C wrappers
for those APIs and they all end up as calls to int86x which is
the only thing that needs to be written in assembler. If you
look at the MSDOS 4 source that Microsoft released, you
can see that they actually did that for MSDOS - they created
functions like DosWrite() very similar but not identical to
OS/2 DosWrite() - but apparently didn't want people to have
this C interface to MSDOS and wanted them to use OS/2
instead.

To do it offline, you need an assembler too. That is from a
forked binutils 2.14a, ie gas, and I call it as370.exe. Both
pdld.exe and as370.exe are in the "dos" directory of the
VHD available from pdos.zip at (look
where it says "hard drive image"). They are both Windows
programs meaning you can run them under real Windows
or PDOS/386 (which is effectively a mini-clone of Windows
unless you want to quibble about the definition of "mini",
quibble about the definition of "clone", quibble about
the definition of "Windows", or quibble about the definition
of "of" - you know who you are and you have way too much
free time).

as370.exe produces ELF. pdld.exe accepts as input either ELF
or standard object code as produced by the DOS/VS
assembler (and then punched - that's why I was asking how
to punch object code). And you can mix them. The linker
will match lowercase hello_there in an ELF object to HELLO@TH
in DOS/VS object file.

Note that punching a phase for transportation (similar to doing
an IEBCOPY unload on MVS) produces a fully-resolved object file
and it is this that pdld outputs. In fact, pdld outputs for MVS too,
and it is in fact an IEBCOPY unload too (quibbling aside). So you
need to process that using LNKEDT to put it in the CIL (or some
equivalent for z/VSE or VSEn).

The assembler as370 is only semi-hlasm-compatible. You can see
what the assembler code looks like here:



and I test it by running this:



which runs on VSE/380 (note that the documentation is wrong
and the VSE380 environment variable should point to c:\vse380\run
or whatever - add the "run"), but it should be simple enough to
adjust for whatever VS or VSE environment you are using.

The program as it currently stands just has an assembler program
calling a C function that returns 6 in R15 and then the assembler
goes into a loop so that you can see that in Hercules by pressing ESC.

I'll switch it to do something WTO-like in the future and then
expand until I have a new version of PDPCLIB almost entirely
in C. And have z/PDOS-generic updated each step of the way.

Note that there is no barrier to making as370 more hlasm-compatible
and also I am thinking I might use the C preprocessor to have
conditional assembly so that both the DOS/VS assembler and
as370 can handle it while waiting for that to happen.

Note that I am having fun probing the "new" environment from
the safety of a C compiler and securing one thing at a time in C.

BFN. Paul.


Re: dumping object code

 

On Sun, Sep 8, 2024 at 08:04 PM, Joe Monk wrote:

// ASSGN SYSPCH,SYSLNK
I see - thanks.

BFN. Paul.


Re: dumping object code

 

So lemme show ?ya ...

// ASSGN SYS007,SYSPCH? <---- job life assignment of SYS007 to the POWER punch
// ASSGN SYS000,SYSLNK <---- job life assignment of SYS000 to SYSLNK
...

// DLBL IJSYSPH,'FUNC2.OBJ',0,SD ?<------ Assign SYSPCH?to a disk file
// EXTENT SYSPCH,,,,12000,500 SPACE-OBJ
ASSGN SYSPCH,SYS000 <----- Perm assignment of SYSPCH?to SYS000
...

So you have it set up as:

SYSPCH?> SYS000 > SYSLNK

...
The right way to do this is:

// DLBL IJSYSPH,'FUNC2.OBJ',0,SD ?<------ Assign SYSPCH?to a disk file
// EXTENT SYSPCH,,,,12000,500 SPACE-OBJ
// ASSGN SYSPCH,SYSLNK

Joe

On Sun, Sep 8, 2024 at 6:23?AM Paul Edwards via <mutazilah=[email protected]> wrote:
On Sat, Sep? 7, 2024 at 08:44 PM, Joe Monk wrote:

> So setup all your logicals at the beginning of the job, and only change
> when necessary. All logicals should ALWAYS be assigned with // ASSGN, NEVER
> with ASSGN in a JOB.

I got an error when I tried adding // to my ASSGNs, but I
have since managed to figure out how to dump object
code, one at a time, via separate JCL below.

So now hopefully the pdld author will be able to support
VS(E) as a target. To be combined with as370 as the
assembler, and gcc370 as the C compiler. So that executables
suitable for running on DOS/VS as well as z/VSE and VSEn
can be built on Windows.

BFN. Paul.



* $$ JOB JNM=VSEJOB
* $$ LST LST=SYSLST,CLASS=A
// JOB VSEJOB
*
*
*
* Standard assignments for C programs
*
// ASSGN SYS000,SYSLNK
// ASSGN SYS005,SYSLST
// ASSGN SYS007,SYSPCH
// OPTION DUMP
*
*
*
*
*
*
* Now assemble the main routine
*
// DLBL IJSYSPH,'FUNC2.OBJ',0,SD
// EXTENT SYSPCH,,,,12000,500 SPACE-OBJ
ASSGN SYSPCH,SYS000
// OPTION DECK,NOEDECK
// EXEC ASSEMBLY
undivert(func2.asm)dnl
/*
CLOSE SYSPCH,PUNCH
*
*
*
*
// DLBL SDI1,'FUNC2.OBJ'
// TLBL MTO1,'HERC01.MFTOPC',0
// ASSGN SYS011,TAPE,VOL=MFTOPC
// EXEC VSEMANIP,SIZE=AUTO,PARM='dd:sdi1 dd:mto1'
*
*
*
/&
* $$ EOJ






Re: dumping object code

 

On Sat, Sep 7, 2024 at 08:44 PM, Joe Monk wrote:

So setup all your logicals at the beginning of the job, and only change
when necessary. All logicals should ALWAYS be assigned with // ASSGN, NEVER
with ASSGN in a JOB.
I got an error when I tried adding // to my ASSGNs, but I
have since managed to figure out how to dump object
code, one at a time, via separate JCL below.

So now hopefully the pdld author will be able to support
VS(E) as a target. To be combined with as370 as the
assembler, and gcc370 as the C compiler. So that executables
suitable for running on DOS/VS as well as z/VSE and VSEn
can be built on Windows.

BFN. Paul.



* $$ JOB JNM=VSEJOB
* $$ LST LST=SYSLST,CLASS=A
// JOB VSEJOB
*
*
*
* Standard assignments for C programs
*
// ASSGN SYS000,SYSLNK
// ASSGN SYS005,SYSLST
// ASSGN SYS007,SYSPCH
// OPTION DUMP
*
*
*
*
*
*
* Now assemble the main routine
*
// DLBL IJSYSPH,'FUNC2.OBJ',0,SD
// EXTENT SYSPCH,,,,12000,500 SPACE-OBJ
ASSGN SYSPCH,SYS000
// OPTION DECK,NOEDECK
// EXEC ASSEMBLY
undivert(func2.asm)dnl
/*
CLOSE SYSPCH,PUNCH
*
*
*
*
// DLBL SDI1,'FUNC2.OBJ'
// TLBL MTO1,'HERC01.MFTOPC',0
// ASSGN SYS011,TAPE,VOL=MFTOPC
// EXEC VSEMANIP,SIZE=AUTO,PARM='dd:sdi1 dd:mto1'
*
*
*
/&
* $$ EOJ


Re: WTO macro

 

Leo Langevin's book DOS/VSE/SP Guide for Systems Programming contains a WTO and WTOR program along with many any other helpful programs that early DOS didn't have.

Regards,
Gary


Re: WTO macro

 

Paul,
No need for low-level CCWs
?
Look in IBM publication:
GC33-5373-2
File No. 5370-30
DOS/VS Systems Supervisor and 1/0 Macros
?
page 42:
?
DTFCN defines an input or output file that is processed
on a 3210 or 3215 console printer-keyboard,
or a display operator console. DTFCN provides
GET /PUT logic as well as PUTR logic for a file.
?
?


Re: dumping object code

 

Check your ASSGNs. They are messed up.

// ASSGN SYS000,SYSLNK
ASSGN SYSPCH,SYS000
ASSGN SYSPCH,SYS000
ASSGN SYSLNK,SYS000
ASSGN SYSIPT,SYS000
ASSGN SYSPCH,SYS000

how many times are you going to ASSGN SYS000 in the same JOB?

You need to be cognizant of this:?

image.png
So setup all your logicals at the beginning of the job, and only change when necessary. All logicals should ALWAYS be assigned with // ASSGN, NEVER with ASSGN in a JOB.

Joe

On Sat, Sep 7, 2024 at 3:58?AM Paul Edwards via <mutazilah=[email protected]> wrote:
I don't need an answer to the return code anymore, as I
found out that I already had code to do the equivalent
of a WTO and was able to use that to get func1 to print
"start", call func2 which says "middle" and then returns,
and then func1 prints "end" so I know it is working.

And I can punch the phase and all 3 strings are embedded in it.

However, using the below JCL (or similar) I am unable to
punch the object code. I do get something:

000000? 40D7C8C1 E2C540C6 E4D5C3F1 6BE24EE7? ?PHASE FUNC1,S+X
000010? 7DF0F0F0 F0F0F07D 40404040 40404040? '000000'? ? ? ?
000020? 40404040 40404040 40404040 40404040? ? ? ? ? ? ? ? ?
000030? 40404040 40404040 40404040 40404040? ? ? ? ? ? ? ? ?
000040? 40404040 40404040 40404040 40404040? ? ? ? ? ? ? ? ?
000050? 02C5E2C4 40404040 40400010 40400001? .ESD? ? ? ..? ..
000060? C6E4D5C3 F1404040 00400078 40000058? FUNC1? ?. .. ...
000070? 40404040 40404040 40404040 40404040? ? ? ? ? ? ? ? ?
000080? 40404040 40404040 40404040 40404040? ? ? ? ? ? ? ? ?
000090? 40404040 40404040 40404040 F0F0F0F1? ? ? ? ? ? ? 0001
0000A0? 02E3E7E3 40400078 40400038 40400001? .TXT? ..? ..? ..
0000B0? 00000050 615C4040 40404040 40404040? ...&/*? ? ? ? ?
0000C0? 40404040 40404040 40404040 40404040? ? ? ? ? ? ? ? ?
0000D0? 40404040 40404040 40404040 40404040? ? ? ? ? ? ? ? ?
0000E0? 40404040 40404040 40404040 F0F0F0F2? ? ? ? ? ? ? 0002
0000F0? 02E3E7E3 404000B0 40400020 40400001? .TXT? ..? ..? ..
000100? 40404040 40404040 40404040 40404040? ? ? ? ? ? ? ? ?
000110? 40404040 40404040 40404040 00000000? ? ? ? ? ? ? ....
000120? 40404040 40404040 40404040 40404040? ? ? ? ? ? ? ? ?
000130? 40404040 40404040 40404040 F0F0F0F3? ? ? ? ? ? ? 0003
000140? 02C5D5C4 40400078 40404040 40400001? .END? ..? ? ? ..
000150? 40404040 40404040 40404040 40404040? ? ? ? ? ? ? ? ?
000160? 40404040 40404040 40404040 40404040? ? ? ? ? ? ? ? ?
000170? 40404040 40404040 40404040 40404040? ? ? ? ? ? ? ? ?
000180? 40404040 40404040 40404040 F0F0F0F4? ? ? ? ? ? ? 0004
000190? 615C4040 40404040 40404040 40404040? /*? ? ? ? ? ? ?
0001A0? 40404040 40404040 40404040 40404040? ? ? ? ? ? ? ? ?
0001B0? 40404040 40404040 40404040 40404040? ? ? ? ? ? ? ? ?
0001C0? 40404040 40404040 40404040 40404040? ? ? ? ? ? ? ? ?
0001D0? 40404040 40404040 40404040 40404040? ? ? ? ? ? ? ? ?



But it doesn't have my actual code and start/end messages
in it. Any idea what is wrong with this JCL?

Thanks. Paul.



* $$ JOB JNM=VSEJOB
* $$ LST LST=SYSLST,CLASS=A
// JOB VSEJOB
*
*
*
* Standard assignments for C programs
*
// ASSGN SYS000,SYSLNK
// ASSGN SYS005,SYSLST
// ASSGN SYS007,SYSPCH
// OPTION DUMP
*
*
*
*
*
*
* Now assemble the main routine
*
// OPTION CATAL
?PHASE PDPTEST,S+80
// EXEC ASSEMBLY
undivert(func1.asm)dnl
/*
*
*
*
// EXEC ASSEMBLY
undivert(func2.asm)dnl
/*
*
* Now link the whole app
*
// EXEC LNKEDT
*
*
*
* Now run the app
*
// EXEC PDPTEST,SIZE=AUTO,PARM='PaulEdwards two Three'
*
*
*
*
*
*
* Now punch a relocatable object by executing RSERV
*
// DLBL IJSYSPH,'PDPPUNCH.DAT',0,SD
// EXTENT SYSPCH,,,,13000,1000 SPACE-SYSPUNCH
ASSGN SYSPCH,SYS000
// EXEC RSERV
?PUNCH FUNC1
/*
CLOSE SYSPCH,PUNCH
*
*
*
* And get the single file ready for the CIL
*
// DLBL SDI1,'PDPPUNCH.DAT'
// DLBL IJSYSPH,'PDPPUN2.DAT',0,SD
// EXTENT SYSPCH,,,,14000,2000 SPACE-PHASE
ASSGN SYSPCH,SYS000
// EXEC VSEMANIP,SIZE=AUTO,PARM='dd:sdi1 dd:out(func1)'
CLOSE SYSPCH,PUNCH
*
*
*
*
* Now put it in the CIL
*
ASSGN SYSLNK,SYS000
// OPTION CATAL
// DLBL IJSYSIN,'PDPPUN2.DAT'
ASSGN SYSIPT,SYS000
?INCLUDE
CLOSE SYSIPT,READER
// EXEC LNKEDT
ASSGN SYSLNK,UA
*
*
*
*
*
*
*
*
*
* Now punch a relocatable object by executing RSERV
*
// DLBL IJSYSPH,'PDPPUNCH.DAT',0,SD
// EXTENT SYSPCH,,,,13000,1000 SPACE-SYSPUNCH
ASSGN SYSPCH,SYS000
// EXEC RSERV
?PUNCH FUNC2
/*
CLOSE SYSPCH,PUNCH
*
*
*
* And get the single file ready for the CIL
*
// DLBL SDI1,'PDPPUNCH.DAT'
// DLBL IJSYSPH,'PDPPUN2.DAT',0,SD
// EXTENT SYSPCH,,,,14000,2000 SPACE-PHASE
ASSGN SYSPCH,SYS000
// EXEC VSEMANIP,SIZE=AUTO,PARM='dd:sdi1 dd:out(func2)'
CLOSE SYSPCH,PUNCH
*
*
*
*
* Now put it in the CIL
*
ASSGN SYSLNK,SYS000
// OPTION CATAL
// DLBL IJSYSIN,'PDPPUN2.DAT'
ASSGN SYSIPT,SYS000
?INCLUDE
CLOSE SYSIPT,READER
// EXEC LNKEDT
ASSGN SYSLNK,UA
*
*
*
*
*
*
*
* Now punch the phases
* You can choose func1, func2 or pdptest or a combination
*
// DLBL IJSYSPH,'PDPPUNCH.DAT',0,SD
// EXTENT SYSPCH,,,,10000,1000 SPACE-SYSPUNCH
ASSGN SYSPCH,SYS000
// EXEC CSERV
?PUNCH FUNC1
/*
CLOSE SYSPCH,PUNCH
*
*
* And put it to tape
*
// DLBL SDI1,'PDPPUNCH.DAT'
// TLBL MTO1,'HERC01.MFTOPC',0
// ASSGN SYS011,TAPE,VOL=MFTOPC
// EXEC VSEMANIP,SIZE=AUTO,PARM='dd:sdi1 dd:mto1'
*
*
*
*
*
/&
* $$ EOJ







dumping object code

 

I don't need an answer to the return code anymore, as I
found out that I already had code to do the equivalent
of a WTO and was able to use that to get func1 to print
"start", call func2 which says "middle" and then returns,
and then func1 prints "end" so I know it is working.

And I can punch the phase and all 3 strings are embedded in it.

However, using the below JCL (or similar) I am unable to
punch the object code. I do get something:

000000 40D7C8C1 E2C540C6 E4D5C3F1 6BE24EE7 PHASE FUNC1,S+X
000010 7DF0F0F0 F0F0F07D 40404040 40404040 '000000'
000020 40404040 40404040 40404040 40404040
000030 40404040 40404040 40404040 40404040
000040 40404040 40404040 40404040 40404040
000050 02C5E2C4 40404040 40400010 40400001 .ESD .. ..
000060 C6E4D5C3 F1404040 00400078 40000058 FUNC1 . .. ...
000070 40404040 40404040 40404040 40404040
000080 40404040 40404040 40404040 40404040
000090 40404040 40404040 40404040 F0F0F0F1 0001
0000A0 02E3E7E3 40400078 40400038 40400001 .TXT .. .. ..
0000B0 00000050 615C4040 40404040 40404040 ...&/*
0000C0 40404040 40404040 40404040 40404040
0000D0 40404040 40404040 40404040 40404040
0000E0 40404040 40404040 40404040 F0F0F0F2 0002
0000F0 02E3E7E3 404000B0 40400020 40400001 .TXT .. .. ..
000100 40404040 40404040 40404040 40404040
000110 40404040 40404040 40404040 00000000 ....
000120 40404040 40404040 40404040 40404040
000130 40404040 40404040 40404040 F0F0F0F3 0003
000140 02C5D5C4 40400078 40404040 40400001 .END .. ..
000150 40404040 40404040 40404040 40404040
000160 40404040 40404040 40404040 40404040
000170 40404040 40404040 40404040 40404040
000180 40404040 40404040 40404040 F0F0F0F4 0004
000190 615C4040 40404040 40404040 40404040 /*
0001A0 40404040 40404040 40404040 40404040
0001B0 40404040 40404040 40404040 40404040
0001C0 40404040 40404040 40404040 40404040
0001D0 40404040 40404040 40404040 40404040



But it doesn't have my actual code and start/end messages
in it. Any idea what is wrong with this JCL?

Thanks. Paul.



* $$ JOB JNM=VSEJOB
* $$ LST LST=SYSLST,CLASS=A
// JOB VSEJOB
*
*
*
* Standard assignments for C programs
*
// ASSGN SYS000,SYSLNK
// ASSGN SYS005,SYSLST
// ASSGN SYS007,SYSPCH
// OPTION DUMP
*
*
*
*
*
*
* Now assemble the main routine
*
// OPTION CATAL
PHASE PDPTEST,S+80
// EXEC ASSEMBLY
undivert(func1.asm)dnl
/*
*
*
*
// EXEC ASSEMBLY
undivert(func2.asm)dnl
/*
*
* Now link the whole app
*
// EXEC LNKEDT
*
*
*
* Now run the app
*
// EXEC PDPTEST,SIZE=AUTO,PARM='PaulEdwards two Three'
*
*
*
*
*
*
* Now punch a relocatable object by executing RSERV
*
// DLBL IJSYSPH,'PDPPUNCH.DAT',0,SD
// EXTENT SYSPCH,,,,13000,1000 SPACE-SYSPUNCH
ASSGN SYSPCH,SYS000
// EXEC RSERV
PUNCH FUNC1
/*
CLOSE SYSPCH,PUNCH
*
*
*
* And get the single file ready for the CIL
*
// DLBL SDI1,'PDPPUNCH.DAT'
// DLBL IJSYSPH,'PDPPUN2.DAT',0,SD
// EXTENT SYSPCH,,,,14000,2000 SPACE-PHASE
ASSGN SYSPCH,SYS000
// EXEC VSEMANIP,SIZE=AUTO,PARM='dd:sdi1 dd:out(func1)'
CLOSE SYSPCH,PUNCH
*
*
*
*
* Now put it in the CIL
*
ASSGN SYSLNK,SYS000
// OPTION CATAL
// DLBL IJSYSIN,'PDPPUN2.DAT'
ASSGN SYSIPT,SYS000
INCLUDE
CLOSE SYSIPT,READER
// EXEC LNKEDT
ASSGN SYSLNK,UA
*
*
*
*
*
*
*
*
*
* Now punch a relocatable object by executing RSERV
*
// DLBL IJSYSPH,'PDPPUNCH.DAT',0,SD
// EXTENT SYSPCH,,,,13000,1000 SPACE-SYSPUNCH
ASSGN SYSPCH,SYS000
// EXEC RSERV
PUNCH FUNC2
/*
CLOSE SYSPCH,PUNCH
*
*
*
* And get the single file ready for the CIL
*
// DLBL SDI1,'PDPPUNCH.DAT'
// DLBL IJSYSPH,'PDPPUN2.DAT',0,SD
// EXTENT SYSPCH,,,,14000,2000 SPACE-PHASE
ASSGN SYSPCH,SYS000
// EXEC VSEMANIP,SIZE=AUTO,PARM='dd:sdi1 dd:out(func2)'
CLOSE SYSPCH,PUNCH
*
*
*
*
* Now put it in the CIL
*
ASSGN SYSLNK,SYS000
// OPTION CATAL
// DLBL IJSYSIN,'PDPPUN2.DAT'
ASSGN SYSIPT,SYS000
INCLUDE
CLOSE SYSIPT,READER
// EXEC LNKEDT
ASSGN SYSLNK,UA
*
*
*
*
*
*
*
* Now punch the phases
* You can choose func1, func2 or pdptest or a combination
*
// DLBL IJSYSPH,'PDPPUNCH.DAT',0,SD
// EXTENT SYSPCH,,,,10000,1000 SPACE-SYSPUNCH
ASSGN SYSPCH,SYS000
// EXEC CSERV
PUNCH FUNC1
/*
CLOSE SYSPCH,PUNCH
*
*
* And put it to tape
*
// DLBL SDI1,'PDPPUNCH.DAT'
// TLBL MTO1,'HERC01.MFTOPC',0
// ASSGN SYS011,TAPE,VOL=MFTOPC
// EXEC VSEMANIP,SIZE=AUTO,PARM='dd:sdi1 dd:mto1'
*
*
*
*
*
/&
* $$ EOJ


Re: WTO macro

 

On Fri, Sep 6, 2024 at 07:51 AM, John Imholte wrote:

That is a z/VSE only macro.
Thanks all for your replies.

Good news is that the pdld (linker) author (from Slovakia)
has agreed to support the VSE format of an unloaded
(using CSERV) executable (phase). He has already done
MVS and CMS but both are having issues still.

This allows you to build a DOS/VS executable (and MVS
and CMS) on Windows.

But I need to provide example input object code and
matching executable and would like to keep it simple
by just having one assembler program call another.

I already know how to do that, but without a WTO I
can't easily see it working.

I would settle for an example that sets a non-zero
return code to return to DOS/VS with, but I don't see
DOS/VS printing my return codes.

This is using VSE/380.

Is there a way to see the return codes from executing
a DOS/VS phase?

Thanks. Paul.


Re: WTO macro

 

From memory in earlier dos versions it was pretty simple to use single ccws, a ccb pointing to syslog, and excp/wait. Just use one ccw for read and one for write
?


Re: WTO macro

 

might get a few hints from the MVS source for SYS1.MACLIB




On Thu, Sep 5, 2024 at 7:51?PM John Imholte via <John.Imholte=[email protected]> wrote:
That is a z/VSE only macro.
With z/VSE IBM did a complete rewrite on the console.

On Thu, Sep 5, 2024 at 9:03?AM Paul Edwards via <mutazilah=[email protected]> wrote:
There is a WTO macro documented in the z/VSE manuals.

But when I tried using WTO in my assembler code on DOS/VS
it said there was no such macro.

Does it exist, and if it does, is there something I need to do
to use it?

Or is there some other similar simple macro to display a
message somewhere?

Thanks. Paul.







--
Sincerely,

John Imholte



--
Dr. Lee Smith
Chief Scientist


Re: WTO macro

 

That is a z/VSE only macro.
With z/VSE IBM did a complete rewrite on the console.

On Thu, Sep 5, 2024 at 9:03?AM Paul Edwards via <mutazilah=[email protected]> wrote:
There is a WTO macro documented in the z/VSE manuals.

But when I tried using WTO in my assembler code on DOS/VS
it said there was no such macro.

Does it exist, and if it does, is there something I need to do
to use it?

Or is there some other similar simple macro to display a
message somewhere?

Thanks. Paul.







--
Sincerely,

John Imholte


WTO macro

 

There is a WTO macro documented in the z/VSE manuals.

But when I tried using WTO in my assembler code on DOS/VS
it said there was no such macro.

Does it exist, and if it does, is there something I need to do
to use it?

Or is there some other similar simple macro to display a
message somewhere?

Thanks. Paul.


Re: VTP Assistance Needed

 

On Tue, Jun 18, 2024 at 07:18 PM, Jim Snellen wrote:
I still get open errors for FILE02 thru FILE14 but I'm up and running!
I think that if we provide a DLBL/EXTENT for one of those files, say FILE02, VTP won't complain about it at startup, because it will be able to open it. Of course, the file must exist. However I am not sure what kind of file VTP expects though.

Anyway, have fun with VTP 3.8!

Cheers,

Rene FERLAND, Montreal

P.S. -- This is version is 3.8 despite the message. I can see the difference with the 3.7 I know.


Re: VTP Assistance Needed

 

Professor Ferland,

VOILA!

I still get open errors for FILE02 thru FILE14 but I'm up and running!

I logged on with HERC01/CUL8TR and was presented with the attached screen.

Finally, F3 reports VTP to be version 3.7??
F3 TP003 VTP IS ACTIVE 06/19/24 16.57 AM VER 3.7 WARM

Anyway, I now have another toy to play with.? Again, thank you for your assistance and thanks to Alex too!

Jim


Re: VTP Assistance Needed

 

On Tue, Jun 18, 2024 at 05:38 PM, Jim Snellen wrote:
Understood.? Having never seen VTP, I can't comment.? However, being an avid ICCF user, I can only hope VTP can be a reasonable substitute.
Now my task is to find VTP 3.7!? Any idea where?
Hey Jim, I finally got it! Check the attached picture. :-)

What seems to have done the trick is adding the DLBL/EXTENT of the two files (U000.SECURITY.FILE and U000.CONTROL.FILE) to the VTP job. Can you try that and see what happens?

Cheers,

Rene FERLAND, Montreal