Keyboard Shortcuts
ctrl + shift + ? :
Show all keyboard shortcuts
ctrl + g :
Navigate to a group
ctrl + shift + f :
Find
ctrl + / :
Quick actions
esc to dismiss
Likes
- H390-DOSVS
- Messages
Search
Re: COMRG
Paul Edwards wrote:
What's the rationale here?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 andThat is not the purpose of SVC 33. Or is that not how the PSA works when there are multiple processorsI 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. "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? |
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
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: |
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 changeI 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
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:? 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 |
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
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:
--
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. --
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:
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 |
to navigate to use esc to dismiss