Topics

Missing module?


René Ferland
 

Hello everyone,

I have been trying to run this very simple Hello World assembler program on George Shedlock 5-pack and the execution fails:

         PRINT ON,GEN,DATA
HELLO    START 0
         BALR  12,0
         USING *,12
         OPEN  PRINTER          
         PUT   PRINTER,$HELLO
         CLOSE PRINTER 
         EOJ
PRINTER  DTFPR                                                         X
               BLKSIZE=81,                                             X
               CTLCHR=ASA,                                             X
               DEVADDR=SYSLST,                                         X
               IOAREA1=PRTIO1,                                         X
               IOAREA2=PRTIO2,                                         X
               WORKA=YES
         LTORG *
PRTIO1   DS    CL81 
PRTIO2   DS    CL81 
$HELLO   DS    0CL81 
         DC    C'1'
         DC    CL15'Hello, World!  '
         DC    65C' '
         END   HELLO


BG // JOB HELLO - HELLO WORLD IN DOS/VS ASSEMBLER (RF, 2020/04/18)
   DATE 04/19/20,CLOCK 18/09/23
BG 0S03I PROGRAM CHECK INTERRUPTION - HEX LOCATION 00000C -
         CONDITION CODE 0 - OPERATION EXCEPTION
   0S00I JOB HELLO    CANCELED 
BG EOJ HELLO
   DATE 04/19/20,CLOCK 18/09/23,DURATION 00/00/00

The program check seems to come from a missing module. After the expansion of the DTFPR macro, I can see this:

000049 000000   41+  DC    VL3(IJDFAZIW)         ADDR OF LOGIC MODUL3-8 76800025

and the link editor writes:

UNRESOLVED EXTERNAL REFERENCES                      EXTRN     IJDFAZIW
001 UNRESOLVED ADDRESS CONSTANTS

I check the system relocatable library and while IJDFAZIZ is there, IJDFAZIW is not.

Where is the missing module? Or is the problem somewhere else?

Rene FERLAND, Montreal



Simon Knights
 

He Rene, I've just tried this on the 6-Pack system and get the same error that you get. I know that doesn't answer your question, but does show that it is repeatable.

I'll have a dig around and see if I can find anything - although I've not worked on DOS since 1985. I was a VM Sysyprog from 1980 to 2004 - so VM (and assembler) is my real background.

I'll post back if I find anything.
Simon Knights
UK.


Harold Grovesteen
 

I just took a quick look at the module names.  Your use of WORKA=YES in the DTFPR is probably why the different PRMOD name was generated.  They two names only differ by the last character, W.

Harold Grovesteen

On Mon, 2020-04-20 at 00:48 -0400, René Ferland wrote:
Hello everyone,

I have been trying to run this very simple Hello World assembler program on George Shedlock 5-pack and the execution fails:

         PRINT ON,GEN,DATA
HELLO    START 0
         BALR  12,0
         USING *,12
         OPEN  PRINTER          
         PUT   PRINTER,$HELLO
         CLOSE PRINTER 
         EOJ
PRINTER  DTFPR                                                         X
               BLKSIZE=81,                                             X
               CTLCHR=ASA,                                             X
               DEVADDR=SYSLST,                                         X
               IOAREA1=PRTIO1,                                         X
               IOAREA2=PRTIO2,                                         X
               WORKA=YES
         LTORG *
PRTIO1   DS    CL81 
PRTIO2   DS    CL81 
$HELLO   DS    0CL81 
         DC    C'1'
         DC    CL15'Hello, World!  '
         DC    65C' '
         END   HELLO


BG // JOB HELLO - HELLO WORLD IN DOS/VS ASSEMBLER (RF, 2020/04/18)
   DATE 04/19/20,CLOCK 18/09/23
BG 0S03I PROGRAM CHECK INTERRUPTION - HEX LOCATION 00000C -
         CONDITION CODE 0 - OPERATION EXCEPTION
   0S00I JOB HELLO    CANCELED 
BG EOJ HELLO
   DATE 04/19/20,CLOCK 18/09/23,DURATION 00/00/00

The program check seems to come from a missing module. After the expansion of the DTFPR macro, I can see this:

000049 000000   41+  DC    VL3(IJDFAZIW)         ADDR OF LOGIC MODUL3-8 76800025

and the link editor writes:

UNRESOLVED EXTERNAL REFERENCES                      EXTRN     IJDFAZIW
001 UNRESOLVED ADDRESS CONSTANTS

I check the system relocatable library and while IJDFAZIZ is there, IJDFAZIW is not.

Where is the missing module? Or is the problem somewhere else?

Rene FERLAND, Montreal



Harold Grovesteen
 

The various characters in the module name correspond to options used when assembling the PRMOD.  The link library is missing the object file to which this external reference, generated by the options in your assembly of the DTFPR macro.

There is a manual that defines these options that will tell you how to assemble the PRMOD you need.  I worked on DOS/VS in the mid-70's of the last century so do not remember any of those details.

bitsavers is probably your best bet.  Someone who has worked with this more recently would probably know the details.

Harold Grovesteen

On Mon, 2020-04-20 at 00:48 -0400, René Ferland wrote:
Hello everyone,

I have been trying to run this very simple Hello World assembler program on George Shedlock 5-pack and the execution fails:

         PRINT ON,GEN,DATA
HELLO    START 0
         BALR  12,0
         USING *,12
         OPEN  PRINTER          
         PUT   PRINTER,$HELLO
         CLOSE PRINTER 
         EOJ
PRINTER  DTFPR                                                         X
               BLKSIZE=81,                                             X
               CTLCHR=ASA,                                             X
               DEVADDR=SYSLST,                                         X
               IOAREA1=PRTIO1,                                         X
               IOAREA2=PRTIO2,                                         X
               WORKA=YES
         LTORG *
PRTIO1   DS    CL81 
PRTIO2   DS    CL81 
$HELLO   DS    0CL81 
         DC    C'1'
         DC    CL15'Hello, World!  '
         DC    65C' '
         END   HELLO


BG // JOB HELLO - HELLO WORLD IN DOS/VS ASSEMBLER (RF, 2020/04/18)
   DATE 04/19/20,CLOCK 18/09/23
BG 0S03I PROGRAM CHECK INTERRUPTION - HEX LOCATION 00000C -
         CONDITION CODE 0 - OPERATION EXCEPTION
   0S00I JOB HELLO    CANCELED 
BG EOJ HELLO
   DATE 04/19/20,CLOCK 18/09/23,DURATION 00/00/00

The program check seems to come from a missing module. After the expansion of the DTFPR macro, I can see this:

000049 000000   41+  DC    VL3(IJDFAZIW)         ADDR OF LOGIC MODUL3-8 76800025

and the link editor writes:

UNRESOLVED EXTERNAL REFERENCES                      EXTRN     IJDFAZIW
001 UNRESOLVED ADDRESS CONSTANTS

I check the system relocatable library and while IJDFAZIZ is there, IJDFAZIW is not.

Where is the missing module? Or is the problem somewhere else?

Rene FERLAND, Montreal


René Ferland
 

Problem solved. I assemble the missing IJDFAZIW module using the PRMOD macro, as suggested, and now my program works.

Thanks to Garry, Simon and Harold for the helpful replies.

Best wishes,

Rene FERLAND, Montreal


Fish Fish
 

Fish wrote:

[...]
Then when you assemble and link your program, the linkage editor
will be able to find the IJDFAZIZ module ...
^^^^^^^^
^^^^^^^^

That should of course be IJDFAZIW, not IJDFAZIZ.

IJDFAZIZ does already exist, whereas IJDFAZIW does not. That is to say, you should assemble and catalog your own IJDFAZIW module (PRMOD) so that your unmodified program can then use it (link with it).

OR... better, do what I said as my last suggestion in my previous reply: simply tweak your program so that the existing IJDFAZIZ module gets used instead.(*)

(*) By simply removing the second IOAREA2 and WORKA parameters from your DTFPR and manually moving your print line directly into the printer's I/O area (i.e. PRTIO1, as specified in your IOAREA1 parameter), and then using a simple "PUT PRINTER" instead of "PUT PRINTER,$HELLO".

According to:

https://www.ibm.com/support/knowledgecenter/SSB27H_6.2.0/fa2mr_prmod_standard_names.html

the existing IJDFAZIZ module is for CTLCHR=ASA *without* WORKA=YES.

--
"Fish" (David B. Trout)
Software Development Laboratories
http://www.softdevlabs.com
mail: fish@...


Fish Fish
 

Rene FERLAND wrote:

[...]
PRINTER DTFPR
BLKSIZE=81,
CTLCHR=ASA,
DEVADDR=SYSLST,
[...]
BG // JOB HELLO - HELLO WORLD IN DOS/VS ASSEMBLER...
DATE 04/19/20,CLOCK 18/09/23
BG 0S03I PROGRAM CHECK INTERRUPTION - HEX LOCATION 00000C -
CONDITION CODE 0 - OPERATION EXCEPTION
0S00I JOB HELLO CANCELED
BG EOJ HELLO
DATE 04/19/20,CLOCK 18/09/23,DURATION 00/00/00
[...]
000049 000000 41+ DC VL3(IJDFAZIW) ...
[...]
UNRESOLVED EXTERNAL REFERENCES EXTRN IJDFAZIW
001 UNRESOLVED ADDRESS CONSTANTS


I check the system relocatable library and while IJDFAZIZ
is there, IJDFAZIW is not.


Where is the missing module?
Nowhere, obviously.


Or is the problem somewhere else?
Somewhere else.

Because CTLCHR=ASA printer I/O modules are not very common, default DOS/VS installations do not ship with any pre-built versions of DTFPR CTLCHR=ASA, thus requiring you to either build and catalog it for yourself, or to "inline" your non-standard printer I/O logic into your program itself via a PRMOD macro statement which your program seems to be missing.

Refer to the DOS/VS macro reference manual for more information. You can either assemble a separate PRMOD for CTLCHR=ASA via SEPASMB=YES and then catalog it into your RELO (relocatable) library using any name you want or preferably, the default standard name(*). Then when you assemble and link your program, the linkage editor will be able to find the IJDFAZIZ module that you cataloged and your program should run just fine.

Doing that would be the preferred procedure if you plan on writing a lot of programs that use ASA printers.

HOWEVER... if you're only doing a quick test (which seems to be the situation in your case), OR if you only SOMETIMES (but RARELY) write programs that need to use ASA control characters, then it would be MUCH easier to simply specify the missing PRMOD macro statement in your program, along with an associated MODNAME= paramter on your DTFPR macro:

PRINTER DTFPR X
CTLCHR=ASA, X
...etc... X
MODNAME=MYPRMOD

MYPRMOD PRMOD X
CTLCHR=ASA, X
...etc...

OR... last but not least, an even simpler solution would be to simply remove the WORKA=YES and IOAREA2=PRTIO2 parameters from your DTFPR macro statement and then change your program to do:

OPEN PRINTER
MVC PRTIO1,$HELLO
PUT PRINTER
CLOSE PRINTER

(i.e. move the line you want to print directly into the one and only I/O area before issuing your PUT)

If you do that, then your program SHOULD end up successfully linking with the IJDFAZIZ module that already exists.

Ref:

https://www.ibm.com/support/knowledgecenter/SSB27H_6.2.0/fa2mr_dtfpr.html
https://www.ibm.com/support/knowledgecenter/en/SSB27H_6.2.0/fa2mr_prmod.html
https://www.ibm.com/support/knowledgecenter/SSB27H_6.2.0/fa2mr_prmod_standard_names.html

Hope that helps!

--
"Fish" (David B. Trout)
Software Development Laboratories
http://www.softdevlabs.com
mail: fish@...


René Ferland
 

>> Hope this helps!

Yes it did Fish and thank you very much. I was indeed able to print Hello World with one IOAREA and IJDFAZIZ and it just puzzled me that I could not do it with two IOAREAs and a WORKA.

Best regards,

Rene FERLAND, Montreal

P.S. -- I'll have to check the pending messages for a while I guess. :-)