/* This document/program written by Paul Edwards and
   released to the public domain.
   
   It explains the IPL process, the 3390 CKD format as
   implemented as a flat file, and the way PDOS load
   modules and data are represented.

   Here is the (selective) dump of a z/PDOS CKD disk:

   (this first bit is ASCII, everything else is EBCDIC)
   000000  434B445F 50333730 0F000000 00DE0000  CKD_P370........
   000010  90000000 00000000 00000000 00000000  ................
   ...
   000200  00000000 00000000 00000000 08000000  ................
   000210  00000000 00000000 00010400 18C9D7D3  .............IPL
   000220  F1000000 00000000 0006103A 98600000  1...........q-..
   000230  6008103A 98000000 00000000 00020400  -...q...........
   000240  90C9D7D3 F207103A B8400000 0631103A  .IPL2.... ......
   000250  BE400000 0508103A A0000000 00060000  . ..............
   000260  0020007F FF000000 00000100 00000101  ..."............
   000270  00000000 00000000 00000000 00000000  ................
   000280  00000000 00000000 00000000 00000000  ................
   000290  00000000 00000000 00000000 00000000  ................
   0002A0  00000000 00000000 00000000 00000000  ................
   0002B0  00000000 00000000 00000000 00000000  ................
   0002C0  00000000 00000000 00000000 00000000  ................
   0002D0  00000000 00000000 00030400 50E5D6D3  ............&VOL
   0002E0  F1E5D6D3 F1D7C4D6 E2F0F040 00010000  1VOL1PDOS00 ....
   0002F0  01404040 40404040 40404040 40404040  .               
   000300  40404040 40404040 4040C8C5 D9C3E4D3            HERCUL
   000310  C5E24040 40404040 40404040 40404040  ES              
   000320  40404040 40404040 40404040 40404040                  
   000330  40FFFFFF FFFFFFFF FF000000 00000000   ...............
   000340  00000000 00000000 00000000 00000000  ................
   000350  00000000 00000000 00000000 00000000  ................


00DFF0  00000000 00000000 00000000 00000000  ................
00E000  00000000 01000000 01000000 08000000  ................
00E010  00000000 00000000 01010048 14000C00  ................
00E020  00800020 00000000 00000000 00000000  ................
00E030  00000000 00000000 00000000 00000000  ................

010000  00000000 00000000 00000000 00000000  ................
010010  00000000 00000000 00000000 0005C041  ..............{.
010020  CC000006 C006C041 100001AE 10001241  ....{.{.........
010030  20C0190B 02D20F01 F0C078D2 0F01E0C0  .{...K..0{.K..\{
010040  48D20F01 C0C058D2 0F01D0C0 681FAABF  .K..{{.K..}{....

012800  3E582200 00D20320 48C34647 F0C310D2  .....K...C..0C.K
012810  03D05820 00D203D0 5CC34AD2 03D060C3  .}...K.}*C.K.}-C
012820  2A4110D0 5858F0C3 2E05EF12 FF4780C0  ...}..0C.......{
012830  2C000000 01020048 14D203D0 582000D2  .........K.}...K
012840  03D05CC3 4ED203D0 60C32A41 10D05858  .}*C+K.}-C...}..
012850  F0C32E05 EF12FF47 70C0E258 20C332D2  0C.......{S..C.K

02C840  58C15A1B F650FD00 5C4110D0 5858F0C1  .A!.6&..*..}..0A
02C850  5E05EF58 F0C16247 F0C12458 80C16619  ;...0A..0A...A..
02C860  7847D0C0 72D203D0 58C16A50 7D005C47  ..}{.K.}.A.&'.*.
02C870  F0C0D2D2 03D058C1 6E503D00 5C47F0C0  0{KK.}.A>&..*.0{
02C880  D2D203D0 58C17247 F0C0D2D2 03D058C1  KK.}.A..0{KK.}.A
02C890  761BF65A F0C17A47 F0C0CE58 D0D00458  ..6!0A:.0{..}}..
02C8A0  ED000C98 0CD01407 FE000000 000001DD  ...q.}..........
02C8B0  50000000 10000000 04000000 02000000  &...............
02C8C0  FF000000 03000000 01FFFFFF FD000000  ................
02C8D0  000001DA F000003F 34FFFFFF FF00FFFF  ....0...........
02C8E0  FF0001DB 090001DB 340001DB 5C0001DB  ............*...
02C8F0  85FFFFFF FC0001DB D2000000 00000000  e.......K.......
02C900  03020000 00FFFFFF FFFFFFFF FF000000  ................
02C910  00000000 00000000 00000000 00000000  ................


037A00  00000000 04000000 04000000 08000000  ................
037A10  00000000 00FFFFFF FFFFFFFF FF000000  ................

045800  00000000 05000000 05000000 08000000  ................
045810  00000000 00FFFFFF FFFFFFFF FF000000  ................

053600  00000000 06000000 06000000 08000000  ................
053610  00000000 00FFFFFF FFFFFFFF FF000000  ................

061400  00000000 07000000 07000000 08000000  ................
061410  00000000 00FFFFFF FFFFFFFF FF000000  ................

06F200  00000000 08000000 08000000 08000000  ................
06F210  00000000 00FFFFFF FFFFFFFF FF000000  ................

07D000  00000000 09000000 09000000 08000000  ................
07D010  00000000 00FFFFFF FFFFFFFF FF000000  ................

08AE00  00000000 0A000000 0A000000 08000000  ................
08AE10  00000000 00FFFFFF FFFFFFFF FF000000  ................

098C00  00000000 0B000000 0B000000 08000000  ................
098C10  00000000 00FFFFFF FFFFFFFF FF000000  ................

0A6A00  00000000 0C000000 0C000000 08000000  ................
0A6A10  00000000 00FFFFFF FFFFFFFF FF000000  ................

0B4800  00000000 0D000000 0D000000 08000000  ................
0B4810  00000000 00FFFFFF FFFFFFFF FF000000  ................

0C2600  00000000 0E000000 0E000000 08000000  ................
0C2610  00000000 00FFFFFF FFFFFFFF FF000000  ................

0D03F0  00000000 00000000 00000000 00000000  ................
0D0400  00000100 00000100 00000000 08000000  ................
0D0410  00000000 00000100 00012C00 60040404  ............-...
0D0420  04040404 04040404 04040404 04040404  ................
0D0430  04040404 04040404 04040404 04040404  ................
0D0440  04040404 04040404 04F40001 00001905  .........4......
0D0450  C3045900 00000080 01000004 59000FE5  C..............V
0D0460  A2000000 30000032 2D000000 00000000  s...............
0D0470  00000000 00000000 00000000 00000000  ................
0D0480  00000000 00008100 00010000 0002000E  ......a.........
0D0490  00000000 00000000 00000000 00000000  ................
0D04A0  00000000 00000000 00000100 00022C00  ................
0D04B0  60050505 05000000 00000000 00000000  -...............
0D04C0  00000000 00000000 00000000 00000000  ................
0D04D0  00000000 00000000 00000000 00F50000  .............5..
0D04E0  00000000 00000000 00000000 00000000  ................
0D04F0  00000000 00000000 00000000 00000000  ................
0D0500  00000000 00000000 00000000 00000000  ................
0D0510  00000000 00000000 00000000 00000000  ................
0D0520  00000000 00000000 00000000 00000000  ................
0D0530  00000000 00000000 00000000 00000100  ................
0D0540  00032C00 60D7D3D6 C1C44BE2 E8E24040  ....-PLOAD.SYS  
0D0550  40404040 40404040 40404040 40404040                  
0D0560  40404040 40404040 40404040 40404040                  
0D0570  40F1D7C4 D6E2F0F0 00017A01 63000000   1PDOS00..:.....
0D0580  010000C8 C5D9C3E4 D3C5E240 40404040  ...HERCULES     
0D0590  00000000 00000040 00C00048 14000000  ....... .{......
0D05A0  00008080 00000100 0202B25E 00000100  ...........;....
0D05B0  00000001 0000000A 00000000 00000000  ................
0D05C0  00000000 00000000 00000000 00000000  ................
0D05D0  00000100 00042C00 60D7C4D6 E24BE2E8  ........-PDOS.SY
0D05E0  E2404040 40404040 40404040 40404040  S               
0D05F0  40404040 40404040 40404040 40404040                  
0D0600  40404040 40F1D7C4 D6E2F0F0 00017A01       1PDOS00..:.
0D0610  63000000 010000C8 C5D9C3E4 D3C5E240  .......HERCULES 
0D0620  40404040 00000000 00000040 00C00048      ....... .{..
0D0630  14000000 000080C0 00000100 0202C11C  .......{......A.
0D0640  00008100 00030000 0003000E 00000000  ..a.............
0D0650  00000000 00000000 00000000 00000000  ................
0D0660  00000000 00000100 00052C00 60C3D6D5  ............-CON
0D0670  C6C9C74B E2E8E240 40404040 40404040  FIG.SYS         
0D0680  40404040 40404040 40404040 40404040                  
0D0690  40404040 40404040 40F1D7C4 D6E2F0F0           1PDOS00
0D06A0  00017A01 63000000 010000C8 C5D9C3E4  ..:........HERCU
0D06B0  D3C5E240 40404040 00000000 00000040  LES     ....... 
0D06C0  00C00048 14000000 000080C0 00000100  .{.........{....
0D06D0  0002DD44 00008100 00040000 0004000E  ......a.........
0D06E0  00000000 00000000 00000000 00000000  ................
0D06F0  00000000 00000000 00000100 00062C00  ................
0D0700  60C3D6D4 D4C1D5C4 4BC5E7C5 40404040  -COMMAND.EXE    
0D0710  40404040 40404040 40404040 40404040                  
0D0720  40404040 40404040 40404040 40F1D7C4               1PD
0D0730  D6E2F0F0 00017A01 63000000 010000C8  OS00..:........H
0D0740  C5D9C3E4 D3C5E240 40404040 00000000  ERCULES     ....
0D0750  00000040 00C00048 14000000 000080C0  ... .{.........{
0D0760  00000100 0104270C 00008100 00050000  ..........a.....
0D0770  0005000E 00000000 00000000 00000000  ................
0D0780  00000000 00000000 00000000 00000100  ................
0D0790  00072C00 60C1E4E3 D6C5E7C5 C34BC2C1  ....-AUTOEXEC.BA
0D07A0  E3404040 40404040 40404040 40404040  T               

0D11F0  00000000 00000100 00192C00 60C8C5D9  ............-HER
0D1200  C3C1E4E3 D64BE9C9 D7404040 40404040  CAUTO.ZIP       
0D1210  40404040 40404040 40404040 40404040                  
0D1220  40404040 40404040 40F1D7C4 D6E2F0F0           1PDOS00
0D1230  00017A01 63000000 010000C8 C5D9C3E4  ..:........HERCU
0D1240  D3C5E240 40404040 00000000 00000040  LES     ....... 
0D1250  00C00048 14000000 000080C0 00000100  .{.........{....
0D1260  0002DFCA 00008100 001D0000 0058000E  ......a.........
0D1270  00000000 00000000 00000000 00000000  ................
0D1280  00000000 00000000 00000100 001A2C00  ................
0D1290  60000000 00000000 00000000 00000000  -...............
0D12A0  00000000 00000000 00000000 00000000  ................
0D12B0  00000000 00000000 00000000 00000000  ................
0D12C0  00000000 00000000 00000000 00000000  ................
0D12D0  00000000 00000000 00000000 00000000  ................
0D12E0  00000000 00000000 00000000 00000000  ................
0D12F0  00000000 00000000 00000000 00000000  ................
0D1300  00000000 00000000 00000000 00000000  ................
0D1310  00000000 00000000 00000000 00000100  ................
0D1320  001B2C00 60000000 00000000 00000000  ....-...........
0D1330  00000000 00000000 00000000 00000000  ................
0D1340  00000000 00000000 00000000 00000000  ................
0D1350  00000000 00000000 00000000 00000000  ................
0D1360  00000000 00000000 00000000 00000000  ................
0D1370  00000000 00000000 00000000 00000000  ................
0D1380  00000000 00000000 00000000 00000000  ................
0D1390  00000000 00000000 00000000 00000000  ................
0D13A0  00000000 00000000 00000000 00000000  ................
0D13B0  00000100 001C2C00 60000000 00000000  ........-.......
0D13C0  00000000 00000000 00000000 00000000  ................
0D13D0  00000000 00000000 00000000 00000000  ................
0D13E0  00000000 00000000 00000000 00000000  ................
0D13F0  00000000 00000000 00000000 00000000  ................
0D1400  00000000 00000000 00000000 00000000  ................
0D1410  00000000 00000000 00000000 00000000  ................
0D1420  00000000 00000000 00000000 00000000  ................
0D1430  00000000 00000000 00000000 00000000  ................
0D1440  00000000 00000100 001D2C00 60000000  ............-...

0D2060  00000000 00000000 00000100 00322C00  ................
0D2070  60000000 00000000 00000000 00000000  -...............
0D2080  00000000 00000000 00000000 00000000  ................
0D2090  00000000 00000000 00000000 00000000  ................
0D20A0  00000000 00000000 00000000 00000000  ................
0D20B0  00000000 00000000 00000000 00000000  ................
0D20C0  00000000 00000000 00000000 00000000  ................
0D20D0  00000000 00000000 00000000 00000000  ................
0D20E0  00000000 00000000 00000000 00000000  ................
0D20F0  00000000 00000000 00000000 00FFFFFF  ................
0D2100  FFFFFFFF FF000000 00000000 00000000  ................
0D2110  00000000 00000000 00000000 00000000  ................

0DE1F0  00000000 00000000 00000000 00000000  ................
0DE200  00000100 01000100 01000000 08000000  ................
0DE210  00000000 00000100 01012C00 60000000  ............-...
0DE220  00000000 00000000 00000000 00000000  ................
0DE230  00000000 00000000 00000000 00000000  ................
0DE240  00000000 00000000 00000000 00000000  ................
0DE250  00000000 00000000 00000000 00000000  ................
0DE260  00000000 00000000 00000000 00000000  ................
0DE270  00000000 00000000 00000000 00000000  ................
0DE280  00000000 00000000 00000000 00000000  ................
0DE290  00000000 00000000 00000000 00000000  ................
0DE2A0  00000000 00000000 00000100 01022C00  ................
0DE2B0  60000000 00000000 00000000 00000000  -...............
0DE2C0  00000000 00000000 00000000 00000000  ................
0DE2D0  00000000 00000000 00000000 00000000  ................
0DE2E0  00000000 00000000 00000000 00000000  ................
0DE2F0  00000000 00000000 00000000 00000000  ................
0DE300  00000000 00000000 00000000 00000000  ................
0DE310  00000000 00000000 00000000 00000000  ................
0DE320  00000000 00000000 00000000 00000000  ................
0DE330  00000000 00000000 00000000 00000100  ................
0DE340  01032C00 60000000 00000000 00000000  ....-...........

0DFE60  00000000 00000000 00000100 01322C00  ................
0DFE70  60000000 00000000 00000000 00000000  -...............
0DFE80  00000000 00000000 00000000 00000000  ................
0DFE90  00000000 00000000 00000000 00000000  ................
0DFEA0  00000000 00000000 00000000 00000000  ................
0DFEB0  00000000 00000000 00000000 00000000  ................
0DFEC0  00000000 00000000 00000000 00000000  ................
0DFED0  00000000 00000000 00000000 00000000  ................
0DFEE0  00000000 00000000 00000000 00000000  ................
0DFEF0  00000000 00000000 00000000 00FFFFFF  ................
0DFF00  FFFFFFFF FF000000 00000000 00000000  ................

2645D0  00000000 00000200 0E312C00 60000000  ............-...
2645E0  00000000 00000000 00000000 00000000  ................
2645F0  00000000 00000000 00000000 00000000  ................
264600  00000000 00000000 00000000 00000000  ................
264610  00000000 00000000 00000000 00000000  ................
264620  00000000 00000000 00000000 00000000  ................
264630  00000000 00000000 00000000 00000000  ................
264640  00000000 00000000 00000000 00000000  ................
264650  00000000 00000000 00000000 00000000  ................
264660  00000000 00000000 00000200 0E322C00  ................
264670  60000000 00000000 00000000 00000000  -...............
264680  00000000 00000000 00000000 00000000  ................
264690  00000000 00000000 00000000 00000000  ................
2646A0  00000000 00000000 00000000 00000000  ................
2646B0  00000000 00000000 00000000 00000000  ................
2646C0  00000000 00000000 00000000 00000000  ................
2646D0  00000000 00000000 00000000 00000000  ................
2646E0  00000000 00000000 00000000 00000000  ................
2646F0  00000000 00000000 00000000 00FFFFFF  ................
264700  FFFFFFFF FF000000 00000000 00000000  ................
264710  00000000 00000000 00000000 00000000  ................

2707F0  00000000 00000000 00000000 00000000  ................
270800  00000300 00000300 00000000 08000000  ................
270810  00000000 00000300 00010048 14003800  ................
270820  0000CA6D 0F020048 000000C0 00000048  ..._.......{....
270830  14307020 0B00004A 7D023000 1E4B3601  ........'.......
270840  0B520802 00000000 00000000 00000000  ................
270850  00000000 00011800 00010000 00FF0000  ................
270860  008F0B66 44048F90 E8500022 90000000  ........Y&......
270870  34000000 3D001D01 2C000000 00000000  ................
270880  00000000 00000000 00000000 00000000  ................
270890  00000000 00000000 00000000 00000000  ................
2708A0  00000000 00000000 00000000 00000000  ................
2708B0  00000000 00000000 00000000 00000000  ................
2708C0  00000000 00000000 00000000 00000000  ................
2708D0  00000000 00000000 00000000 00000000  ................
2708E0  00000000 00000000 00000000 00000000  ................
2708F0  00000000 00000000 00000000 00000000  ................
270900  00000000 00000000 00000000 00000000  ................
270910  00000000 00000000 00000000 00000000  ................
270920  00000000 00000000 00000000 00000000  ................
270930  00000000 00000000 00000000 00000000  ................
270940  00000000 00000000 00000000 00000000  ................
270950  00000000 00000000 00000000 00000000  ................
270960  00000000 00000000 00000000 00012400  ................
270970  00000000 00000000 00000801 00FFFFFF  ................
270980  FFFFFFFF FF0032D7 C4D6E240 40404000  .......PDOS    .
270990  0A062C00 0B010000 00000002 C20199E8  ............B.rY
2709A0  3DE00134 E0880000 010000FF FFFFFFFF  .\..\h..........
2709B0  FFFFFF00 00000000 00000000 00000000  ................
2709C0  00000000 00000000 00000000 00000000  ................
2709D0  00000000 00000000 00000000 00000000  ................
2709E0  00000000 00000000 00000000 00000000  ................
2709F0  00000000 00000000 00000000 00000000  ................
270A00  00000000 00000000 00000000 00000000  ................
270A10  00000000 00000000 00000000 00000000  ................
270A20  00000000 00000000 00000000 00000000  ................
270A30  00000000 00000000 00000000 00000000  ................
270A40  00000000 00000000 00000000 00000000  ................
270A50  00000000 00000000 00000000 00000000  ................
270A60  00000000 00000000 00000000 00000000  ................
270A70  00000000 00000000 00000000 00000000  ................
270A80  00000000 00000000 00000000 00000000  ................
270A90  00132C00 00000000 00003400 0A060000  ................
270AA0  F8200000 00000100 F0000000 00000000  8.......0.......
270AB0  00070000 00000000 007C7CC3 D9E3F040  .........@@CRT0 
270AC0  40030024 00010000 03404040 40404040   ........       
270AD0  40040000 00010026 407C7CC3 D6D5E2C4   ....... @@CONSD
270AE0  D5030023 FC010000 037C7CE2 E3C1D9E3  N........@@START
270AF0  40030027 88010000 0A7C7CC8 D7D3D6C3   ...h....@@HPLOC
270B00  40030024 B4010000 037C7CC5 E7C9E3C1   ........@@EXITA
270B10  40030024 B8010000 03D9C4C2 D3D6C3D2   ........RDBLOCK
270B20  40030024 DC010000 037C7CC7 7CD3C9E5   ........@@G@LIV
270B30  C5030026 44010000 0A404040 40404040  E........       
270B40  40040026 4001000A CC7C7CC7 7CD7E3D9   ... ....@@G@PTR
270B50  40030026 48010000 0A7C7CC7 7CD6D5C5   ........@@G@ONE
270B60  40030026 4C010000 0A7C7CC7 7CE9C5D9   ...<....@@G@ZER
270B70  D6030026 50010000 0A7C7CC7 C5D5E2E3  O...&....@@GENST
270B80  C1030026 58010000 0A7C7CC7 C5D5D4C1  A........@@GENMA
270B90  C9030026 5C010000 0A000000 00003400  I...*...........
270BA0  0A070000 F8200000 00001000 F0D4C1C9  ....8.......0MAI
270BB0  D5404040 40030134 EC010000 EB7C7CE3  N    ........@@T
270BC0  E2D64040 40030026 60010000 0A7C7CE4  SO   ...-....@@U
270BD0  D7E2C940 40030026 64010000 0A7C7CD4  PSI  ........@@M
270BE0  C5D4D4C7 D9030134 C0010000 E57C7CD4  EMMGR...{...V@@M
270BF0  D4C4C5C6 40030129 C8010000 E57C7CD4  MDEF ...H...V@@M
270C00  D4C9D5C9 E303012A 18010000 E57C7CC4  MINIT.......V@@D
270C10  D6D7C5D9 D403003E 10010000 44C6D6D7  OPERM........FOP
270C20  C5D54040 40030041 28010000 447C7CC7  EN   ........@@G
270C30  E3D6E4E3 4003003E 84010000 447C7CC7  TOUT ...d....@@G
270C40  E3C5D9D9 4003003E DC010000 447C7CC7  TERR ........@@G
270C50  E3C9D540 4003003E 28010000 447C7CE4  TIN  ........@@U
270C60  E2C5D9C6 C90300BF 58010000 447CE2C5  SERFI........@SE
270C70  E3D1D4D7 40030126 B8010000 DF7C7CC5  TJMP ........@@E
270C80  E7C9E340 4003002D 3C010000 0AE2E3D9  XIT  ........STR
270C90  C3C8D940 400300F1 AC010000 AC000000  CHR  ..1........
270CA0  00003400 0A080000 F8200000 00001F00  ........8.......
270CB0  F0C6D7D9 C9D5E3C6 4003003F B0010000  0FPRINTF .......
270CC0  44C6C3D3 D6E2C540 40030058 80010000  .FCLOSE  .......
270CD0  44D7D9C9 D5E3C640 4003003F 34010000  .PRINTF  .......
270CE0  447CC3C5 E7C9E340 4003002E 78010000  .@CEXIT  .......
270CF0  0AD3D6D5 C7D1D4D7 40030127 1C010000  .LONGJMP .......
270D00  DF7CC5E7 C9E34040 4003002E 08010000  .@EXIT   .......
270D10  0A7CC37C C5E7C9E3 4003002E D4010000  .@C@EXIT ...M...
270D20  0A7C7CD4 D4E3C5D9 D403012A 7C010000  .@@MMTERM...@...
270D30  E57C7CD3 C1E2E3E2 E40300C7 B0010000  V@@LASTSU..G....
270D40  7C7C7CC6 D9C5C5D4 40030034 50010000  @@@FREEM ...&...
270D50  2DC6C6D3 E4E2C840 4003007A 60010000  .FFLUSH  ..:-...
270D60  447C7CC5 D7D3C9E2 E3030031 04010000  .@@EPLIST.......
270D70  0A7C7CD7 D3C9E2E3 40030031 08010000  .@@PLIST .......
270D80  0A7C7CC1 D6D7C5D5 40030031 10010000  .@@AOPEN .......
270D90  2D404040 40404040 40040031 1001000C  .        .......
270DA0  D0000000 00003400 0A090000 F8200000  }...........8...
270DB0  00002E00 F07C7CC1 D9C5C1C4 40030032  ....0@@AREAD ...
270DC0  98010000 2D7C7CC1 E6D9C9E3 C5030032  q....@@AWRITE...
270DD0  FA010000 2D7C7CC3 D6D5E2E6 D9030035  .....@@CONSWR...
270DE0  B8010000 2D7C7CC1 C3D3D6E2 C5030033  .....@@ACLOSE...
270DF0  92010000 2D7C7CC7 C5E3D440 40030033  k....@@GETM  ...
270E00  F8010000 2D7C7CC7 C5E3C3D3 D2030034  8....@@GETCLK...
270E10  7C010000 2D7C7CC7 C5E3E3E9 40030034  @....@@GETTZ ...
270E20  CC010000 2D7C7CE2 E8E2E3C5 D4030034  .....@@SYSTEM...
270E30  F0010000 2D7C7CC9 C4C3C1D4 E2030035  0....@@IDCAMS...
270E40  60010000 2D7C7CC4 C9C1C7F8 40030035  -....@@DIAG8 ...
270E50  88010000 2D7C7CC3 D6D5E2D9 C4030037  h....@@CONSRD...
270E60  08010000 2D7C7CC3 F3F2F7F0 D9030038  .....@@C3270R...
270E70  38010000 2D7C7CE2 E5C3F9F9 40030039  .....@@SVC99 ...
270E80  88010000 2D7C7CC4 E8D5C1D3 40030039  h....@@DYNAL ...
270E90  88010000 2D7C7CE2 C5E3D140 40030039  h....@@SETJ  ...
270EA0  FA010000 2D000000 00003400 0A0A0000  ................
270EB0  F8200000 00003D00 F07C7CD3 D6D5C7D1  8.......0@@LONGJ
270EC0  4003003A 0C010000 2D7C7CC4 D6D3D6D6   ........@@DOLOO
270ED0  D703003A 20010000 2D7C7CC7 C5E3D7C6  P........@@GETPF
270EE0  E703003A 26010000 2D7C7CC7 C5E3C5D7  X........@@GETEP
270EF0  C603003A 2C010000 2D7C7CE2 C5E3D4F2  F........@@SETM2
270F00  F403003A 30010000 2D7C7CE2 C5E3D4F3  4........@@SETM3
270F10  F103003A 36010000 2D7C7CE2 E3C4C9D5  1........@@STDIN
270F20  7C03003E 18010000 44404040 40404040  @........       
270F30  4004003D E0010089 D07C7CE2 E3C4D6E4   ...\..i}@@STDOU
270F40  E303003E 1C010000 447C7CE2 E3C4C5D9  T........@@STDER
270F50  D903003E 20010000 44E5C6D7 D9C9D5E3  R........VFPRINT
270F60  C6030040 24010000 44E5D7D9 C9D5E3C6  F.. .....VPRINTF
270F70  40030040 A8010000 44C6D9C5 C5404040   .. y....FREE   
270F80  400300CA 60010000 7CD4C1D3 D3D6C340   ...-...@MALLOC 
270F90  400300C7 B4010000 7CE2E3D9 C3D7E840   ..G....@STRCPY 
270FA0  400300EB CC010000 AC000000 00003400   ...............
270FB0  0A0B0000 F8200000 00004C00 F0C6E2C5  ....8.....<.0FSE
270FC0  C5D24040 40030071 78010000 44E2E3D9  EK   ........STR
270FD0  D5C3D4D7 400300F0 0C010000 AC7CC5D9  NCMP ..0.....@ER
270FE0  D9D5D640 4003010F BC010000 C1E2E3D9  RNO  .......ASTR
270FF0  C3E2D7D5 400300F2 38010000 AC7C7CE3  CSPN ..2.....@@T
271000  D6E4D740 400300E5 10010000 9DE2D7D9  OUP  ..V.....SPR
271010  C9D5E3C6 4003006F 44010000 44E2E3D9  INTF ..?.....STR
271020  C3C1E340 400300EC F0010000 ACE2E3D9  CAT  ...0....STR
271030  D3C5D540 400300F7 A8010000 ACE2E3D9  LEN  ..7y....STR
271040  D9C3C8D9 400300F3 88010000 ACD4C5D4  RCHR ..3h....MEM
271050  D4D6E5C5 400300EB 18010000 ACE2E3D9  MOVE ........STR
271060  C3D4D740 400300EE F0010000 ACE2E3D9  CMP  ...0....STR
271070  D5C3D7E8 400300EC 48010000 ACC6D7E4  NCPY ........FPU
271080  E3C34040 4003006C BC010000 44C6D7E4  TC   ..%.....FPU
271090  E3E24040 40030096 60010000 447C7CC9  TS   ..o-....@@I
2710A0  E2C2E4C6 400300E5 08010000 9D000000  SBUF ..V........
2710B0  00003400 0A0C0000 F8200000 00005B00  ........8.....$.
2710C0  F0D4C5D4 C3C8D940 400300F1 2C010000  0MEMCHR  ..1....
2710D0  ACC6E6D9 C9E3C540 40030098 E8010000  .FWRITE  ..qY...
2710E0  44D9C5D4 D6E5C540 4003006D 60010000  .REMOVE  .._-...
2710F0  44D9C5D5 C1D4C540 4003006E 5C010000  .RENAME  ..>*...
271100  44E5E2D7 D9C9D5E3 C603006F B4010000  .VSPRINTF..?....
271110  44E4D5C7 C5E3C340 40030070 40010000  .UNGETC  ... ...
271120  44C6C7C5 E3C34040 40030070 DC010000  .FGETC   .......
271130  44C6D9C5 C1C44040 400300A8 7C010000  .FREAD   ..y@...
271140  44C6E3C5 D3D34040 40030074 C4010000  .FTELL   ...D...

271BA0  4003018F 7C010001 00C6C9E7 D7C54040   ...@....FIXPE  
271BB0  40030194 60010001 03C7D6E3 D9C5E340   ..m-....GOTRET 
271BC0  4003018F 34010001 00D3C3D9 C5C7F040   ........LCREG0 
271BD0  4003018F CE010001 00000000 00003400   ...............
271BE0  0A170000 48200000 00010000 40404040  ............    
271BF0  40404040 4004018D 00010003 99D3C3D9       .......rLCR
271C00  C5C7F1F3 40030190 20010001 00D7D9D6  EG13 ........PRO
271C10  C3C5E2E2 D9030198 30010001 03404040  CESSR..q.....   
271C20  40404040 40040190 A0010009 44000000       ...........
271C30  00003400 0A180000 FB80FA01 00000000  ................
271C40  00000000 00000000 00000000 00000000  ................
271C50  00000000 00000000 00000000 00000000  ................
271C60  00000000 00000000 00000000 00000000  ................
271C70  00000000 00000000 00000000 00000000  ................
271C80  00000000 00000000 00000000 00000000  ................
271C90  00000000 00000000 00000000 00000000  ................
271CA0  00000000 00000000 00000000 00000000  ................
271CB0  00000000 00000000 00000000 00000000  ................
271CC0  00000000 00000000 00000000 00000000  ................
271CD0  00000000 00000000 00000000 00000000  ................
271CE0  00000000 00000000 00000000 00000000  ................
271CF0  00000000 00000000 00000000 00000000  ................
271D00  00000000 00000000 00000000 00000000  ................
271D10  00000000 00000000 00000000 00000000  ................
271D20  00000000 00000000 00000000 00000000  ................
271D30  00000000 00000000 0034000A 19000012  ................
271D40  801102F5 F7F5F2E2 C3F1F0F4 40030822  ...5752SC104 ...
271D50  355F0000 00000034 000A1A00 00378036  .^..............
271D60  84000300 0A002D00 44007C00 9D00AC00  d.........@.....
271D70  B700C100 C300C500 C800DF00 E000E500  ..A.C.E.H...\.V.
271D80  EB010081 0300F5F7 F4F1E2C3 F1F0F340  ...a..5741SC103 
271D90  02012235 5F000000 00003400 0A1B0000  ....^...........
271DA0  1C010000 00000C00 00060000 0040003D  ............. ..
271DB0  E0000326 40000A0A D0002D0C D0404400  \... ...}...} ..
271DC0  00000000 00003400 0B01003D E0000C00  ............\...
271DD0  00800020 00000000 00000000 00000000  ................
271DE0  00000000 00000000 00000000 00000000  ................

273DB0  00000000 00000000 00000000 00000000  ................
273DC0  00000000 00000000 00000000 0005C041  ..............{.
273DD0  CC000006 C006C041 100001AE 10001241  ....{.{.........
273DE0  20C0190B 02D20F01 F0C078D2 0F01E0C0  .{...K..0{.K..\{
273DF0  48D20F01 C0C058D2 0F01D0C0 681FAABF  .K..{{.K..}{....
273E00  AF00B8B7 66C04047 F0C08800 00FF0000  .....{ .0{h.....
273E10  00000000 00000600 01800000 00000000  ................
273E20  00000001 11000600 01800000 00000000  ................
273E30  00000002 22000600 01800000 00000000  ................
273E40  00000003 33000600 01800000 00000000  ................
273E50  00000004 444110C1 0C41D0C1 2450A0C1  .......A..}A.&.A
273E60  0C418000 005080C1 105880C1 A85080C1  .....&.A...Ay&.A
273E70  20414000 015850C1 A8416000 01417000  .. ...&Ay.-.....
273E80  025050C1 1C5060C1 145070C1 1858F0C1  .&&A.&-A.&.A..0A
273E90  AC05EF12 FF4740C0 D047F0C0 E6417000  ...... {}.0{W...
273EA0  01416600 015060C1 145070C1 1858F0C1  .....&-A.&.A..0A
273EB0  AC05EF12 FF4780C1 084740C1 085A50C1  .......A.. A.!&A
273EC0  A8417700 01414400 015940C1 B04720C1  y......... A...A
273ED0  0847F0C0 B48200C1 70000000 00000000  ..0{.b.A........
273EE0  00000000 00000000 00000000 00000000  ................
273EF0  00000000 00000000 00000000 00000000  ................
273F00  00000000 00000000 00000000 00000000  ................
273F10  00000000 00000000 00000000 00000000  ................
273F20  00000000 00000000 00000000 00000000  ................
273F30  00000000 00000000 00000000 00000C00  ................
273F40  01800021 80000E00 00800004 4458D0C1  ..............}A
273F50  B4412000 00502D00 04182D5A 20C1B850  .....&.....!.A.&
273F60  2D004C41 10C1C058 F0C1BC05 EF8200C1  ..<..A{.0A...b.A
273F70  78000000 00000048 14000024 DC000000  ................
273F80  28000800 00000000 78000024 00000021  ................
273F90  C4000000 00000000 04001000 00D7C4D7  D............PDP
273FA0  C3D3C9C2 5A000000 00000000 00000000  CLIB!...........
273FB0  00000000 00000000 00000000 00000000  ................
273FC0  00000000 00000000 00000000 00000000  ................

2741A0  00000000 00000000 00000000 00000000  ................
2741B0  00000000 00000000 00000000 00000000  ................
2741C0  00E9C1D7 C3D6D5E2 D3000000 0047F0F0  .ZAPCONSL.....00
2741D0  0C067C7C C3D9E3F0 0090ECD0 0C18CF58  ..@@CRT0...}....
2741E0  F0D04C50 D0F00450 F0D00818 DF41F0F0  0}<&}0.&0}....00
2741F0  7850FD00 4C47F0C0 30000000 0005C018  .&..<.0{......{.
274200  B141CC00 00412000 005020D0 484120D1  .........&.}...J
274210  305020D0 4C4170D0 6850E0D0 685830C0  .&.}<..}.&\}...{
274220  7E1A2350 27000C41 20000050 270074D2  =..&.......&...K
274230  07D05CC0 765010D0 50581100 00582100  .}*{.&.}&.......
274240  085020C0 824120D0 5C5020D0 544150D0  .&.{b..}*&.}..&}
274250  005050C0 7247F0C0 5E000027 8858F0C0  .&&{..0{;...h.0{
274260  5A05EF58 D0D00458 ED000C98 0CD01407  !...}}.....q.}..
274270  FE000000 00E2C1D7 D3D6C1C4 40000400  .....SAPLOAD ...
274280  00000000 0018AF58 91000058 D0A02058  ........j...}...
274290  DD000058 D0D00458 ED000C98 0CD01407  ....}}.....q.}..
2742A0  FE000000 00000024 A447F0F0 0C07D9C4  ........u.00..RD
2742B0  C2D3D6C3 D290ECD0 0C18CF58 A1000058  BLOCK..}....~...
2742C0  210004BE 23C13EBE 23C14258 210008BE  .....A...A......
2742D0  23C140BE 23C14458 21000C42 20C14658  .A ..A.......A..
2742E0  21001058 71001450 20C13840 70C136D2  .......&.A. .A.K
2742F0  0F01F0C1 54AD0001 F04130C1 1C503000  ..0A.[..0..A.&..
274300  48181A41 90C09CB2 35900041 A0C0FCB2  .....{.......{..
274310  33A00082 00C14C00 00B23590 004B7900  ...b.A<.......`.
274320  0A18F7D5 039004C0 944780C0 8858F0C0  ..7N...{m..{h.0{
274330  9858ED00 0C980CD0 1407FE00 00000026  q....q.}........
274340  18FFFFFF FF000000 00000000 00000000  ................
274350  00000000 00000000 00000000 00000000  ................

291F80  324F7D8E 225F132B 3521D70C B487E61E  .|'..^....P..gW.
291F90  BBE6D1A2 A7DCC69F BE849126 8C9A302C  .WJsx.F..dj.....
291FA0  AC76F90C EE2A1EDC 722088A1 0E532842  ..9.......h~....
291FB0  22320AC2 29390D33 F29F76C0 E1744293  ...B....2..{...l
291FC0  2D0C82D5 73AC894E 3C76FBB3 FF385F97  ..bN..i+......^p
291FD0  C7DF8485 C4347C8B C6EF171F 844BBFFA  G.deD.@.F...d...
291FE0  93A5DCC2 F5F6307F 6FE18AE8 BA437EEA  lv.B56."?..Y..=.
291FF0  6628DE04 B98AB17F C5DC914E 14240A57  ......."E.j+....
292000  E2D20000 00000000 00000000 00000000  SK..............
292010  00000000 00000000 00000000 00000000  ................

29A1F0  00000000 00000000 00000000 00000000  ................
29A200  00000300 03000300 03000000 08000000  ................
29A210  00000000 00FFFFFF FFFFFFFF FF000000  ................
29A220  00000000 00000000 00000000 00000000  ................

2A7FF0  00000000 00000000 00000000 00000000  ................
2A8000  00000300 04000300 04000000 08000000  ................
2A8010  00000000 00FFFFFF FFFFFFFF FF000000  ................
2A8020  00000000 00000000 00000000 00000000  ................

2B5DF0  00000000 00000000 00000000 00000000  ................
2B5E00  00000300 05000300 05000000 08000000  ................
2B5E10  00000000 00FFFFFF FFFFFFFF FF000000  ................
2B5E20  00000000 00000000 00000000 00000000  ................

3409F0  00000000 00000000 00000000 00000000  ................
340A00  00000400 00000400 00000000 08000000  ................
340A10  00000000 00000400 00010002 F8D4C1C9  ............8MAI
340A20  D5E2C9E9 C5404040 40404040 40404040  NSIZE           
340A30  4040F4F0 F9F61515 C1D9C3C8 D4D6C4C5    4096..ARCHMODE
340A40  40404040 40404040 40404040 40A961C1               z/A
340A50  99838815 15C3D7E4 E2C5D9C9 C1D34040  rch..CPUSERIAL  

340A60  40404040 40404040 4040F0F0 F0F6F1F1            000611
340A70  15C3D7E4 D4D6C4C5 D3404040 40404040  .CPUMODEL       
340A80  40404040 4040F4F3 F8F11515 C4C9C1C7        4381..DIAG
340A90  F8C3D4C4 40404040 40404040 40404040  8CMD            
340AA0  40C5D5C1 C2D3C515 D5E4D4C3 D7E44040   ENABLE.NUMCPU  
340AB0  40404040 40404040 40404040 40F115D6               1.O
340AC0  E2E3C1C9 D3D6D940 40404040 40404040  STAILOR         
340AD0  40404040 D8E4C9C5 E315D7C1 D5D9C1E3      QUIET.PANRAT
340AE0  C5404040 40404040 40404040 404040D4  E              M
340AF0  C5C4C9E4 D415D7C7 D4D7D9C4 D6E24040  EDIUM.PGMPRDOS  
340B00  40404040 40404040 404040D9 C5E2E3D9             RESTR
340B10  C9C3E3C5 C415C3D6 C4C5D7C1 C7C54040  ICTED.CODEPAGE  
340B20  40404040 40404040 404040F8 F1F961F1             819/1
340B30  F0F4F715 C3D5E2D3 D7D6D9E3 40404040  047.CNSLPORT    
340B40  40404040 40404040 40F3F2F7 F015157B           3270..#
340B50  40C98485 819393A8 4097A4A3 40A38885   Ideally put the
340B60  40839695 A2969385 40868999 A2A34B40   console first. 
340B70  C9A34083 81954082 85408589 A3888599  It can be either
340B80  40819540 8995A385 879981A3 8584157B   an integrated.#
340B90  40839695 A2969385 404DF3F2 F1F560C3   console (3215-C
340BA0  5D409699 4081407F 95969994 81937F40  ) or a "normal" 
340BB0  A3859395 85A34083 9695A296 9385404D  telnet console (
340BC0  F3F2F1F5 5D4B40D6 99408140 F3F2F7F0  3215). Or a 3270
340BD0  157B40A3 85999489 9581934B 40D69940  .# terminal. Or 
340BE0  819540C5 C2C3C4C9 C340C1D5 E2C940A3  an EBCDIC ANSI t
340BF0  85999489 95819340 4DF1F0F5 F2409985  erminal (1052 re
340C00  97A49997 96A28584 40869699 40A38889  purposed for thi
340C10  A25D4B15 7B40E388 85408184 849985A2  s)..# The addres
340C20  A2408381 95408285 408195A8 A3888995  s can be anythin
340C30  874B1515 7BF0F0F0 F9404040 404040F3  g...#0009      3
340C40  F2F1F560 C3404040 40406140 95969799  215-C     / nopr
340C50  969497A3 157BF0F0 F0F94040 40404040  ompt.#0009      
340C60  F3F2F1F5 40404040 40404095 96979996  3215       nopro
340C70  9497A315 F0F0F0F9 40404040 4040F3F2  mpt.0009      32
340C80  F7F0157B F0F0F0F9 40404040 4040F1F0  70.#0009      10
340C90  F5F24040 40404040 40959697 99969497  52       nopromp
340CA0  A3157BF0 F0F0F940 40404040 40F1F0F5  t.#0009      105
340CB0  F260C340 40404040 40614095 96979996  2-C      / nopro
340CC0  9497A315 157B40E3 8889A240 89A240A3  mpt..# This is t
340CD0  888540C9 D7D34084 89A29240 81958440  he IPL disk and 
340CE0  83819540 82854081 95A84081 84849985  can be any addre
340CF0  A2A21515 F0F182F9 40404040 4040F3F3  ss..01b9      33
340D00  F9F04040 40404040 40978496 A2F0F04B  90       pdos00.
340D10  83839284 15000400 00020000 00FFFFFF  cckd............

Above data ends at x'15' (newline), then we have cylinder
4, head 0, record 2, key length 0, data length 0000,
EOF of 'FFFF FFFF FFFF FFFF' and then junk from unknown
source starts at x'340D25'.

340D20  FFFFFFFF FF25B953 CAC4886D AA36AC99  .........Dh_...r

(the below appears to be garbage introduced by either
dasdload or dasdcopy)

340D30  BCDF279B E3E772B3 73CE7E65 85BC8E23  ....TX....=.e...
340D40  44BCC331 021B8CBF 9840EFEB 7C6EF351  ..C.....q ..@>3.
340D50  0918620B 628ACBD8 ED81CFDB 8385B3AD  .......Q.a..ce.[
340D60  F1737F22 9B1A9AD6 51D5A61D 36398021  1."....O.Nw.....
340D70  C637E1EF 124933F6 A86B60A0 44493C7D  F......6y,-....'
340D80  3C2F9114 90AED491 7232A4D2 3C191AE5  ..j...Mj..uK...V
340D90  120F8AE1 9F49408A 08CF8F2D 699090A8  ...... ........y
340DA0  45DA9931 CD479098 3502FB2A 6F52F7AA  ..r....q....?.7.
340DB0  74084026 6942106C 0837F483 8036E53E  .. ....%..4c..V.
340DC0  7E673709 9B3CB444 0D630211 037C623D  =............@..
340DD0  2A9441A8 BE128DC5 C0EC0D55 DB37ABD9  .m.y...E{......R
340DE0  D77BDAC6 3FCB0D9A C9B8E809 B9DB6DE0  P#.F....I.Y..._\
340DF0  DCB98781 24CCB73C 3C0B9237 1186E04C  ..ga......k..f\<
340E00  3FF57B93 B98D8CC3 8585BF4A 4D028716  .5#l...Cee..(.g.
340E10  674128F7 633A7D29 D97955A6 1A471991  ...7..'.R`.w...j
340E20  A064336C BB866676 E975FFA7 C5F1B654  ...%.f..Z..xE1..
340E30  D5E9A710 8106BD5F 1E872C9E 827A492F  NZx.a.]^.g..b:..
340E40  2FAFC031 8EFF09F0 D0671029 045F36BC  ..{....0}....^..
340E50  85509881 C6085E92 6068C300 0F86108D  e&qaF.;k-.C..f..
340E60  CA7C0A63 3A6B5102 04400BAA 9CD385AB  .@...,... ...Le.
340E70  93904785 EA13A5E5 42ECA5FA 6C6EE9CC  l..e..vV..v.%>Z.
340E80  0338D844 62E216B8 FD112185 0FDAAF33  ..Q..S.....e....
340E90  2B8F3BE2 184A6C56 2BBF62CB 389CAFC5  ...S..%........E
340EA0  70B36D55 7027A4E4 EEF2B4E3 CBB65ED0  .._...uU.2.T..;}
340EB0  188CDC2D 690126C5 28512EBE 2B29B9F1  .......E.......1
340EC0  74123BD6 5055385F 14A08350 1178F441  ...O&..^..c&..4.
340ED0  8B1EFB33 4EB6A4E5 E6391054 9B65F1E4  ....+.uVW.....1U
340EE0  6F22EEC6 F4F6D994 F9C41894 995E22EB  ?..F46Rm9D.mr;..
340EF0  AEE24E2B 1C3E8A35 B8DCAA10 5E182D0B  .S+.........;...
340F00  F498F961 4A90D44A 673898DC FCC677B3  4q9/..M...q..F..
340F10  EC6FE83A A0F11084 0995ADCE 53909380  .?Y..1.d.n[...l.
340F20  FA76D6E0 AC5F0305 49211920 41D93225  ..O\.^.......R..
340F30  434FCE1F 0349EA30 9B7C10C3 524B5CD1  .|.......@.C..*J
340F40  F33888C7 6DFEF825 9ADEC21B 3BAA49E8  3.hG_.8...B....Y
340F50  85DCB154 1784B69A C6BD9DA8 524D329D  e....d..F].y.(..
340F60  DD56F1A8 EEEB1490 5748DBA8 D4CE84A8  ..1y.......yM.dy
340F70  66E29598 2E94012B 35CE34D3 92CA560F  .Snq.m.....Lk...
340F80  0CBA3636 5F6188D7 A51E1BB6 2A224DC6  ....^/hPv.....(F
340F90  3E05D5B5 266E1061 9220B759 F2EEDDB6  ..N..>./k...2...
340FA0  2162BE6B 14E753F8 2D60E0E3 50AFF11E  ...,.X.8.-\T&.1.
340FB0  67F8549E 8302AB16 CB6AB365 FC8AD057  .8..c.........}.
340FC0  A484A29E 6D950105 8CD7612C C9AA286C  uds._n...P/.I..%
340FD0  978A5854 74C83C12 2288DF4C CD270F09  p....H...h.<....
340FE0  D79C3D05 DC43E27D 1D8FA244 25C60AC3  P.....S'..s..F.C
340FF0  A99A57C7 3BA8E6E6 03083611 AD830ABC  z..G.yWW....[c..
341000  63478B03 1A1918BB B22A3EF9 5A904563  ...........9!...
341010  754FEB55 32D85261 270DD63B 9A1E01E1  .|...Q./..O.....
341020  89CFC1F6 2A72A243 DA7807AD 11335336  i.A6..s....[....
341030  74CB5FAA 509F9CA6 61323A5A F52CB2EE  ..^.&..w/..!5...
341040  A76C0413 B594CE9B 6E1A0636 BC081944  x%...m..>.......
341050  9D803667 24080872 91453EB2 26AA05BA  ........j.......
341060  A9C71949 77E1C482 901E5999 ECD4FC24  zG....Db...r.M..
341070  FF8AEE8A 14B811B4 9CD3F912 D49D78BC  .........L9.M...
341080  9560C96F BF50D675 5F880ABB E5AE380B  n-I?.&O.^h..V...
341090  FC7D1001 CB4579BC 51F4DD84 F6FD3B03  .'....`..4.d6...
3410A0  F8DC02DB 1192AE78 2A5A8B36 BFA7858C  8....k...!...xe.
3410B0  39443B75 3663F2D6 23AEA637 69EEC56D  ......2O..w...E_
3410C0  87624400 3D11CC85 8908A116 9020E367  g......ei.~...T.
3410D0  2540B80D 1D8230F2 A0DF3BA4 D0C7C4D3  . ...b.2...u}GDL
3410E0  EBBC4584 D5A37ECB BAD33ADD 3F3FF585  ...dNt=..L....5e
3410F0  498B8E3A 73F41310 8DC81E61 285F9F8F  .....4...H./.^..
341100  9BA91991 FBCBDD31 A1C22F48 4B026A4C  .z.j....~B.....<
341110  E3C15CFE F5FB3211 19B9CE98 1079B46C  TA*.5......q.`.%
341120  684EC825 85073A31 9000021E EAC79C36  .+H.e........G..
341130  3805240F 68A0208F 2F1D0950 6456DC5F  ...........&...^
341140  41E3A843 8936DA36 1A1ADB49 55D4D296  .Ty.i........MKo
341150  D12C2EA7 18FC9848 279AF164 9EAA1B0F  J..x..q...1.....
341160  2890AE87 9D9F9B74 880F9199 9A379728  ...g....h.jr..p.
341170  199FFB96 B5CCF993 E46AB794 CF95E5B1  ...o..9lU..m.nV.
341180  F36D807B 88DEE477 37418C9A 946F5DF1  3_.#h.U.....m?)1
341190  DDB39E0E 8582F832 02D8DF90 A37A17CB  ....eb8..Q..t:..
3411A0  43ADBFBE C28DABC2 9F15696F 5998CF45  .[..B..B...?.q..
3411B0  A5E0CF09 10E755B6 BB3E3CCB 365430AB  v\...X..........
3411C0  9F77D0CE D46B931A 066135B6 DDFF1EFA  ..}.M,l../......
3411D0  BF22CA4F 31C337DD 4418239F A82BB21D  ...|.C......y...
3411E0  89818495 296B6E97 9780D0DF B2726E07  iadn.,>pp.}...>.
3411F0  A1EDDDB6 7212F2C4 A870C83E 6D285FCD  ~.....2Dy.H._.^.
341200  84910820 91A1535C E55DC66D CD0F3A5F  dj..j~.*V)F_...^
341210  6842EE46 AAA76222 849628AF 0DC123B1  .....x..do...A..
341220  349EC842 E455B1B5 3513BB2A 7F3C634F  ..H.U......."..|
341230  1EAA48EA 7B6A5B96 4D962CB3 52999BE9  ....#.$o(o...r.Z
341240  94784883 12BD6C5C AA9BD09C F9CCBCEE  m..c.]%*..}.9...
341250  6030DDE2 2DA66173 E430D377 AEC7F639  -..S.w/.U.L..G6.
341260  1137CB15 360DE658 B444DA72 30F9AFA7  ......W......9.x
341270  477B729A 0E21E5AE 65E34DD7 9D94B185  .#....V..T(P.m.e
341280  F6865AAD 72BDBE45 1E8A464A D4038DF3  6f![.]......M..3
341290  87C5CC89 825C1672 BA069D76 65CDBFAE  gE.ib*..........
3412A0  9CC89741 D20FCAF3 BAA98FA5 D33F9CBC  .Hp.K..3.z.vL...
3412B0  4472793D B5F6B0CB 633FACFB EB14BB60  ..`..6.........-
3412C0  DA0BA7CB BDC35D8E DA121C6A 4A529E9A  ..x.]C).........
3412D0  7EA1A32C 13B6A5B5 C1AAC0B3 416B6A80  =~t...v.A.{..,..
3412E0  94B25920 EECE7AAC 4E08CDD7 F85A6B66  m.....:.+..P8!,.
3412F0  B7354315 64E98AE4 2386C50C E06651E6  .....Z.U.fE.\..W
341300  9AC15EF6 993D8F1F 4BC2C9F0 155A54C6  .A;6r....BI0.!.F
341310  2DCB4677 31AD6817 B9E237DD 1A96FE42  .....[...S...o..
341320  914908CC 58C6B1A2 2531272B 37999EBA  j....F.s.....r..
341330  B34EBD9E AA2A3A12 9A4CD391 9757ED94  .+]......<Ljp..m
341340  435F42C9 5DE49816 965872CC 2230351D  .^.I)Uq.o.......
341350  886F01F9 78DF1185 5E1096A7 82CE6C7C  h?.9...e;.oxb.%@
341360  1C298B43 F83D139A 6A2AF2B6 FF7584D5  ....8.....2...dN
341370  2FF49875 7395A8FD 166F21AB 32F3908C  .4q..ny..?...3..
341380  6489A744 03A39AB4 422B7A6D EAAFCDC4  .ix..t....:_...D
341390  6DA884A5 39244A48 7494A314 07805A16  _ydv.....mt...!.
3413A0  6D84A82C 8DC32428 20A4566A 26E34C38  _dy..C...u...T<.
3413B0  FCA29668 710B434C 999B414E 38EB2974  .so....<r..+....
3413C0  94416943 A930CB04 CA4121D3 C97D09E0  m...z......LI'.\
3413D0  7EB14155 46620D05 10563794 FC3D1CB0  =..........m....
3413E0  892C2C7C F5665894 DA129738 68510804  i..@5..m..p.....
3413F0  FACD90DA C1C72218 8F430685 9DF612C3  ....AG.....e.6.C
341400  4B26C8A2 C2365B32 32308888 BB2A6574  ..HsB.$...hh....
341410  24E80B41 DE283809 D85AA981 59E43CC6  .Y......Q!za.U.F
341420  0972B5BC 7C35934F D6A07D7B C713F878  ....@.l|O.'#G.8.
341430  B6C6755F F98A3F6B A33BD6F5 C8686BA8  .F.^9..,t.O5H.,y
341440  08BBA59B F5DA39D3 C947A195 04AC81B1  ..v.5..LI.~n..a.
341450  C99A4C9A B9108D10 AB111AFB 4C6666CF  I.<.........<...
341460  C8C71998 370CC06E D191A578 26864E98  HG.q..{>Jjv..f+q
341470  836AD317 6751A643 11635420 B5582964  c.L...w.........
341480  D7DF57B0 6FA69850 A51ED7A4 92C96D03  P...?wq&v.PukI_.
341490  0F493239 9553E0A8 5A06E684 C07A8045  ....n.\y!.Wd{:..
3414A0  CB02C482 6D2ABFE8 C3DBBAB7 6B015297  ..Db_..YC...,..p
3414B0  123B8816 6DD6CB39 56E16205 57FEBD4E  ..h._O........]+
3414C0  A2FB7D53 B455F88F ADA142D9 46F2AC84  s.'...8.[~.R.2.d
3414D0  36AD54D8 1062AA5E 3D8948C9 0DB2DA95  .[.Q...;.i.I...n
3414E0  D228485D 64580F8A D00D3727 166794EC  K..)....}.....m.
3414F0  DE3AE722 CC004EBA E91A2DB7 7D4E2D34  ..X...+.Z...'+..
341500  4DB02A97 48C375B7 ACCD7340 3349D683  (..p.C..... ..Oc
341510  18201C3F 15CE8756 C7A319B0 A976EA40  ......g.Gt..z.. 
341520  D4A68AA9 33212108 809DD3A5 05080C27  Mw.z......Lv....
341530  674C1976 130E3350 1B3A6D1D AD309ECE  .<.....&.._.[...
341540  2C9C189D 873345DB EEB228C5 9FB827A6  ....g......E...w
341550  A382A67A ACD0A2B8 1D142332 4F9D84A0  tbw:.}s.....|.d.
341560  DCFBFE75 1752AB03 60A95921 25D10345  ........-z...J..
341570  4953843E E7EA7AB2 A100E10D DB8E0C48  ..d.X.:.~.......
341580  BA9DDDFE 6F0B39D6 436347FF 17724538  ....?..O........
341590  50902B4A 2A920000 00000000 00000000  &....k..........
3415A0  00000000 00000000 00000000 00000000  ................
3415B0  00000000 00000000 00000000 00000000  ................

388DB3A0 00000000 00000000 00000000 00000000  ................
388DB3B0 00000000 00000000 00000000 00000000  ................
388DB3C0 00000000 00000000 00000000 00000000  ................
388DB3D0 00000000 00000000 00000000 00000000  ................
388DB3E0 00000000 00000000 00000000 00000000  ................
388DB3F0 00000000 00000000 00000000 00000000  ................


   At IPL time, the hardware places a single CCW (8 bytes)
   at location 0 in memory, and then executes it. That
   single CCW looks like:
   0x02, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x18
   or in its more normal format (for a format 0 (classic) CCW),
   x'02',x'000000',x'60,00',x'0018'
   
   The 0x02 is an IPL read. An "IPL read" is different
   from a normal read (0x06) in that the IPL read includes a
   seek to cylinder 0, head 0. The next 3 bytes are location
   0, then we have 0x60 which is the command chaining bit (0x40)
   plus the SLI bit (0x20) which says to ignore a length
   mismatch, then 0x00 which is a reserved byte, then
   a 2-byte length of 0x0018, ie 24 bytes. This CCW is
   thus expecting the first record of the disk to be 24
   bytes, and to overlay memory address 0 with that 24
   bytes. Don't forget that this CCW is already in location 0,
   so it will be overlaid (but that's OK, it has already
   been fetched at that point). Also don't forget that the
   chaining bit is on, so it will continue executing the
   next CCW in memory. ie since the CCW at location 0 has
   already been executed, it will now execute the CCW
   at location 8. There didn't use to be anything at this
   location, but after reading 24 bytes, there should be
   a new CCW at location 8.
   
   For more information on IPL see pages 4-35 to 4-37 in 
   GA-22-7000-10 S/370 Principles of Operation available here:
   http://www.bitsavers.org/
   pdf/ibm/370/princOps/GA22-7000-10_370_Principles_of_Operation_Sep87.pdf

   Note that after IPL, you can, if you wish, use format 1
   CCWs, which allow a 31 (and possibly 32?) bit address.
   To use format 1 you need to set bit 8 of word 1 of the ORB
   which is documented on pages 15-24 here:
   http://publibfp.dhe.ibm.com/epubs/pdf/a227832d.pdf
   Note that format 0 and 1 CCWs are the same size and you
   can't automatically detect which format is being used.

   Record 1 of an IPLable DASD consists of 24 bytes, plus a
   4-byte key of "IPL1".

   At x'21D' you can see "IPL1". I'm guessing the x'04' at
   location x'21A' is the length of that key (4). and the
   x'0018' at location x'21B' is the length of the data
   (24) and the x'01' at location x'219' is probably the end
   of a cylinder/head/record (0/0/1) field. I'm not sure why
   the disks are called CKD. That is count, key, data. I can
   see the key and data, but I don't know what the "count" is.

   000210  00000000 00000000 00010400 18C9D7D3  .............IPL
   000220  F1000000 00000000 0006103A 98600000  1...........q-..
   000230  6008103A 98000000 00000000 00020400  -...q...........

   These 24 bytes are loaded at location 0 in memory.
   The first 8 data bytes (starting at offset x'221') are a PSW
   of all-zero, which is never actually used. This field is known as
   "NEWPSW" and later on in the IPL process, the PSW located at
   location 0 is indeed used. But that will only happen after the
   IPL program is loaded from record 4 (traditionally) or
   cylinder 0, head 1, record 1 (in our case).
*/


/* Then we have the first CCW, which you can see at offset x'229'.
   000220  F1000000 00000000 0006103A 98600000  1...........q-..
   000230  60

   The first CCW starts with a command of x'06' which means to
   read a data block. Normally you would use a command of x'07'
   to position to the right cylinder/head/record, but we do not
   need to do this at the moment, because the disk is already
   correctly positioned ready to read the next record of interest,
   which is record 2.
   
   After the command x'06' we have an address of 0x103a98, which
   is where the data will be loaded as it is read from disk.
   The address is "traditionally" just 0x3a98, which is 15000
   bytes, which someone presumably thought was sufficient for an
   IPL program. PDOS needs much more than that, so I simply added
   x'10' to add an extra 1 MiB.

   Next we have "flags" of 0x60. The 0x40 is the CC bit which
   means after executing this CCW, go and execute the next one,
   also known as "CCW chaining". The 0x20 is the SLI bit which
   says don't worry if the length of the block on the disk is
   different from what we have specified in the CCW.
   
   After the 0x60 we have a reserved byte of 0x00 and then
   the next 2 bytes are the length, in this case 0x60, ie
   we intend to read 96 bytes. This is longer than we will
   actually have data for, as we will be reading the IPL2
   record which in our case is only 4 * 8 + 6 + 5 = 43 bytes.
   
   Also note that because we are using a command of x'06',
   we will only be reading the data portion of the IPL2
   record, ignoring the key which is the bytes "IPL2". If
   we had used a command of x'0e' we would have the text
   "IPL2" included in the output from the read. We are
   not at all interested in the text "IPL2".
*/



/* Then we have the second CCW, 8 bytes starting at x'231'

   000230  6008103A 98000000 00000000 00020400  -...q...........

   The second CCW starts with command of x'08' which is TIC,
   or "Transfer in Channel". This command contains an address
   of 0x103a98, which means it will start executing whatever is
   found at address 0x103a98 (still executing CCWs though, not
   program code). We are expecting that will now be filled in
   by data from the previous read CCW.
*/


/* Now we move on to the IPL2 record - record number 2 on
   cylinder 0, head 0.
   
   000230  6008103A 98000000 00000000 00020400  -...q...........
   000240  90C9D7D3 F207103A B8400000 0631103A  .IPL2.... ......
   000250  BE400000 0508103A A0000000 00060000  . ..............
   000260  0020007F FF000000 00000100 00000101  ..."............

   At x'239' we presumably have a
   cylinder, head, and then record number of x'02'. So that
   means 4 x'00'. Heads are probably 1 byte, and record 1
   byte, so that means 3 bytes for cylinder number. Actually,
   it's probably based on CCHHR, so 2 bytes for the cylinder
   and a humungous 2 bytes for the head. Did someone really
   think they could build a hard disk with more than 256
   heads? PC manufacturers didn't, and only used 1 byte.
   And that means we can only have 65536 cylinders, and at
   about 1 MB each, that means 65 GB disks. Not sure what
   happened after that ran out.

   And then we have the key length of 4, referring to the
   data at x'241', which is "IPL2". And then there is a
   x'0090' which is presumably the length of the data portion
   of IPL2. I don't know why it is so big. You can see that
   it mostly consists of x'00', so presumably it is a fixed
   size. As mentioned earlier, we only use 43 bytes, which
   means, since we are starting at x'245', that the last byte
   is at x'26f'.

   So starting at x'245' we have the data that is part of the IPL2
   record. This is just the data, not the key. There is a 4-byte
   key preceding the data, containing the text "IPL2". The CCWs
   from IPL1 will load all this data at address 0x103A98. The data
   consists of 4 CCWs, 8 bytes each, ie 32 bytes. Those 32
   bytes will take us from 0x103A98 to 0x103AB8. At 0x103AB8 we have
   6 bytes containing the BBCCHH, followed by 5 bytes containing
   the CCHHR. IPL2 is normally designed to load record 4 of
   cylinder 0, head 0. So the very last byte would be x'04'.
   But our IPL program (real program code, not CCWs), is too big
   to fit onto record 4, and in fact, too big to fit in a single
   record anywhere, so we instead put it on multiple records,
   starting at a clean cylinder 0, head 1, record 1. The first
   record is designed to load the rest of itself (you can
   see that code in sapstart.asm, label STAGE2).
   This program (PLOAD.SYS) will
   be read in to location 0 in memory, and the first 8 bytes
   will be the "new PSW" which will execute real code.
   
   Note that we didn't mention record 3 (of cylinder 0, head
   0) so far. That is because it contains the name of the disk
   and is not involved in the IPL sequence. You can see it here:

   0002D0  00000000 00000000 00030400 50E5D6D3  ............&VOL
   0002E0  F1E5D6D3 F1D7C4D6 E2F0F040 00010000  1VOL1PDOS00 ....
   0002F0  01404040 40404040 40404040 40404040  .               
   000300  40404040 40404040 4040C8C5 D9C3E4D3            HERCUL
   000310  C5E24040 40404040 40404040 40404040  ES              
   000320  40404040 40404040 40404040 40404040                  
   000330  40FFFFFF FFFFFFFF FF000000 00000000   ...............

   This record is unusual in
   that it has a 4-byte key of "VOL1" and also the first 4
   bytes of the data contain the same "VOL1" string, so when
   you dump the key+data you will see "VOL1" twice.

   I think that "0001 0000 01" starting at x'2ec' is the
   CCHHR of the VTOC, but haven't experimented with the dasdload
   control file to confirm.
*/

/*

Now we analyze the "program" in IPL2.

The first CCW is this:

07 10 3A B8 40 00 00 06

                        07 ... = go to the track number found at
                        address 103AB8, which is the 6-byte
                        BBCCHH. The flag of 0x40 says to chain
                        the CCWs, and the length of 0x06 is
                        the number of bytes for the BBCCHH.

The second CCW is:

   31 10 3A BE 40 00 00 05

                        31 ... = search for the identifier found at
                        memory address 103ABE. This is the CCHHR
                        data below. Normally it would be
                        cylinder 0, head 0, record 4, but ours is
                        cylinder 0, head 1, record 1.
                        Note that the flag is 0x40, signalling
                        continued CCW chaining, and the length
                        is 5, which is how long the CCHHR is. Also
                        note that the 0x31 sets the "status modifier"
                        bit on success, which causes the CCW
                        execution to advance by 16 bytes instead
                        of the normal 8 bytes, meaning one CCW
                        will be skipped. In this case, the following
                        TIC will be skipped.

   08 10 3A A0 00 00 00 00
                        08 ... = go back (TIC) to address 0x103AA0
                        which is the search (0x31) until
                        it is successful
                        
   06 00 00 00 20 00 7F FF
                        06 ... = read the data block. The first
                        3 0x00 constitute the memory address to
                        load the data to, ie location 0 in
                        memory. The flag of 0x20 is SLI to ignore
                        length errors, and the length of the data
                        is 0x7fff, ie approx 32K. Note that we
                        don't have bit 0x40 (chain CCW) set, so
                        this is the end of the CCW chain and the
                        hardware will now load the PSW stored at
                        location 0 in memory and start executing code.

   0000 0000 0001
                        BBCCHH
                        (head is 1, everything else 0)
                        note that the BB above is a "bin number"
                        and is only used for the 2321 magnetic
                        strip reader that has bins of strips. This
                        should always be 0 when doing disk
                        operations.

   0000 0001 01

                        CCHHR (cylinder 0, head 1, record 1)

*/


/*

Now we are on to code, or rather, an executable (executables
can contain more than just code):

00DFF0  00000000 00000000 00000000 00000000  ................
00E000  00000000 01000000 01000000 08000000  ................
00E010  00000000 00000000 01010048 14000C00  ................
00E020  00800020 00000000 00000000 00000000  ................
00E030  00000000 00000000 00000000 00000000  ................

First we have pload.sys, which is an executable that has
had relocations already applied (thanks to the LOADZERO
utility), such that all that remains is a binary image
(so that means it needs to be placed at a specific address
in memory, and in this case, it is address 0).

The executable in this case starts with a PSW, because a
PSW needs to be placed at location 0, so that when the IPL
PSW chain finishes, it loads this new PSW, and then that's
the end of the IPL process.

Here is the code:

000000                              181 ORIGIN   DS    0D
000000 000C0000                     182          DC    X'000C0000' EC mode '08' + Machine Check '04' enabled
000004 80002000                     183          DC    A(AMBIT+POSTIPL) First bit of "normal" memory

So the PSW is pointing to address x'2000' and it will
be in AM31. Depending on the z/Arch machine, we may
already be in z/Arch mode, or we may be in ESA/390
compatibility mode. I'm not sure if ESA/390 mode
actually allows AM64, so it's safer to use AM31,
then unconditionally switch to z/Arch mode, which
presumably annoys some hardware that is already in
that mode, but it doesn't seem to throw an error.
And then in that mode we unconditionally switch to
AM64. At this point the DAT tables aren't yet set up
to remap the 4 GiB to 8 GiB region to 0 to 4 GiB, so
you can't run any code that does negative indexing.

You could argue that switching to AM64 should be
deferred until the C code has established the DAT
tables, and we should remain in AM31 until then.
And then let the C code do the switch to AM64.

However, it is nice to get clean addresses in any
dump (stack chain), and for that you need to get to
AM64 asap, and negative indexing is normally rare,
and known not to exist in the initial PDOS C code.

So anyway, you can see the beginning of our executable
at x'E01D'.

Before that we have:

01 01 00 4814

I've forgotten what that means, and I'm too lazy to read
the crap I've already written, but the 4814 looks like a
length of 18452, which is right - my data is split into
blocks of 18452. Before that, the x'00' is probably the
key length - we're not using a key. 01 is record, 1 byte
sounds right, the previous 01 will be 0001, for head 1,
and before that will be 0000 - cylinder 0.

Now we need an explanation for this:

00E000  00000000 01000000 01000000 08000000  ................

It can't be describing cylinder 0, since we're already up
to head 1. So it's probably indicating what this entire
track consists of. That x'08' makes no sense - I only have
3 records per track. Maybe it could be a mythical record 0.
Maybe there is a record 0, with a key length of 8, and set
to x'00'. Let's test that theory.

00E000  00000000 01000000 01000000 08000000  ................
00E010  00000000 00000000 01010048 14000C00  ................

Don't we normally have a data length after the key length?
If so, that would account for another 2 bytes. Let's check
the VOL1.

   0002D0  00000000 00000000 00030400 50E5D6D3  ............&VOL
   0002E0  F1E5D6D3 F1D7C4D6 E2F0F040 00010000  1VOL1PDOS00 ....

Yeah, 04 followed by 0050. Looks right.

So assuming x'08' is the key length, then x'0000' for data
length, that has the key starting at x'e00f', which gives us
8 x'00' and then something else starts at x'e017', and at
x'e017' we have x'0001' which is exactly what we want - a
cylinder of 1, which we previously noted (part of the CCHHR).

BTW, Joe tried to explain what the "count" meant, but it went
above my head, so we'll come back to that another day.

So let's track back from the x'08'. Before that, we should
have a record 0, which should be 1 byte. So that's x'e00b'.

And before that should be head 1. I don't see that. I instead
see, at x'e009', x'0000'. Head 0? Backing up before that I see
a more sensible x'0001' which could be a head number, and before
that, ie at x'e003', I see a sensible cylinder x'0001'.

So we're missing an explanation for an x'0000'. CCHHR. Is there
another all-encompassing count field after that? Marking the
entire track perhaps? But a count of 0 can't be right for that.

Plan B. The x'000008' could be a count of x'0000'. Wait. Let's
assume that x'e009' is the record number of 0. Then we're
looking at x'000008', and we're looking for count, key, data.
I don't see a count in VOL1, so we need to forget about that,
so a key length of 0. Then data length of x'0008'. Ah, I see
where I stuffed up. I'm after a cylinder of 0, not 1.

Ok, so let's try again.

00E000  00000000 01000000 01000000 08000000  ................
00E010  00000000 00000000 01010048 14000C00  ................

after the last x'01' at x'e008' we have record 0, key length 0,
data length 0008, then from x'e00d' to x'e014' inclusive, we
have 8 NULs as the data, then from x'e015' we have x'0000',
a cylinder of 0, and then at x'e017' we have x'0001', a head
of 1, then at x'e019' the record of 1, and then at x'e01a' we
have the key length of 0, then data length of x'4814', so yes,
everything matches. Cool.

So that's interesting. Record 0 exists, and is 8 NUL data characters.

How does that match up with the EOF record which I noticed before?

Above data ends at x'15' (newline), then we have cylinder
4, head 0, record 2, key length 0, data length 0000,
EOF of 'FFFF FFFF FFFF FFFF' and then junk from unknown
source starts at x'340D25'.

So there we have a data length of 0, which is false, because
we actually have data. But maybe that's not real data. Maybe
that's a special way of indicating there is no more data. An
empty block (key and data length both 0), and verified with
8 x'ff'. And that's sort of hardware-detectable. I guess a bit
like the Commodore 64 when the floppy disk made that terrible
noise as the checksum was deliberately falsified as part of
copyright protection. So there is no sign of checksums here,
but we instead have a special EOF record. I guess this is an
image, not real hardware, so e.g. you don't see inter-record
gaps either. This special mapping needs to be translated into
some sort of special CCW to generate an EOF. I don't remember
writing such a CCW, but my mind is like a swiss cheese anyway,
so that doesn't mean anything. It may happen naturally at the
end of a track-write sequence. I thought I wrote blocks though?
Ok, so maybe every time you write a block, the EOF happens
automatically. And this is just the image representation of that
for use on a PC etc.

But what then of the record 0 which is actually data? Maybe
the number 0 (record 0) is specially known. You can't actually
write that yourself. So this is just what they used. Record 0,
with data of NULs, is a "start of track" indicator, and then
a deliberately crappy EOF marks the end. The EOF can't have a
special number (like 0). Maybe it could have used x'ff', but
that takes away the ability to actually have 255 blocks. So
instead they put whatever block number they were already up
to, e.g. 4, make it invalid (data length 0), and there you
have it. I'll pencil that in as the working theory.


Ok, now let's try to find some real genuine glorious S/370
(or z/Arch) code.

According to this:

000004 80002000                     183          DC    A(AMBIT+POSTIPL) First bit of "normal" memory

it should be at x'2000'.

Since the first bit of code was located at x'e01d', and since
x'2000' is less than 18452, the maximum block size we use, there
won't be a record gap, and we should see our code at x'1001d'.
And what code are we looking for?

002000                              193 POSTIPL  DS    0H
002000 05C0                         194          BALR  R12,0

A BALR. Cool. And what do we have?

010010  00000000 00000000 00000000 0005C041  ..............{.
010020  CC000006 C006C041 100001AE 10001241  ....{.{.........

Exactly right. The theory appears to be correct.

The next thing of interest is what happens when you hit the
end of a block. Since this block started at x'e01d', and the
block is 18452 in size, we should see something starting
at x'12831'. And indeed we do:

012800  3E582200 00D20320 48C34647 F0C310D2  .....K...C..0C.K
012810  03D05820 00D203D0 5CC34AD2 03D060C3  .}...K.}*C.K.}-C
012820  2A4110D0 5858F0C3 2E05EF12 FF4780C0  ...}..0C.......{
012830  2C000000 01020048 14D203D0 582000D2  .........K.}...K
012840  03D05CC3 4ED203D0 60C32A41 10D05858  .}*C+K.}-C...}..
012850  F0C32E05 EF12FF47 70C0E258 20C332D2  0C.......{S..C.K

x'0000' == CC. x'0001' = HH, x'02' = R, x'00' = key length,
x'4814' = data length, and then we're back into the machine code.
This can be matched up with the linkage editor map and the
assembly listings. Let's do that.

ENTRY ADDRESS    13510
TOTAL LENGTH     1DD58
****PLOAD     DOES NOT EXIST BUT HAS BEEN ADDED TO DATA SET

That's odd. Why isn't the entry point 0? Oh. It can't be.
That's where the PSW is. The entry point is meaningless.
I wonder what it is anyway?

@@MAIN     13510

Ok, fair enough. That will be in sapstart though, which I thought
was first?

@@CONSDN    23FC

It is indeed first. But it's OK, now I remember how it works.
The @@MAIN will be in the same object code as MAIN, ie main().
It (@@MAIN) is automatically produced (with the aid of a copy
statement) when the main() source file is compiled, and set to
the entry point, and it simply calls @@CRT0 which will set
things up (mostly in C code) and come back to this object
code to call MAIN.

Ok, so back to the task at hand. 18452 is x'4814'.

Which puts us into here:

$PRIVATE     3DE0    89D0

which from the external names is clearly stdio.c.

So we're looking for 4814-3de0 = x'a34', and then we look for
the stdio listing.

Because of the way assemblies are done, we can't really look
for a stdio.s etc (if a link was done afterwards, we could
see that and work backwards), but it's probably better to
search for the first external reference:

@@DOPERM    3E10

which should correspond to an "ENTRY @@DOPERM".

And indeed, the assembly listing has:

                                    130 * X-var __doperm
                                    131          ENTRY @@DOPERM
000030                              132          DS    0F

So looking for x'a34' (by scrolling down, not searching) we have:

000A34 D203 D058 2000 00058 00000  1123          MVC   88(4,13),0(2)

which (6 bytes) exactly matches this:

012830  2C000000 01020048 14D203D0 582000D2  .........K.}...K

And the last D2 above is the start of the next instruction:

000A3A D203 D05C C34E 0005C 00CD0  1124          MVC   92(4,13),=A(@@LC2)

Note that it was just luck that the 18452 boundary didn't
split an individual instruction.


Now let's look what happens at the end of the executable. It is this size:
TOTAL LENGTH     1DD58

which is 122200, which is approximately 6.6 blocks.

Since we can only fit 3 * 18452 blocks per track, that means that this
file will be split over 3 tracks. Let's watch that unfold.

We're expecting to see action at x'12839' + x'4814' (18452) = x'1704D'.

017040  00000000 0005C018 B158A0C0 26000000  ......{....{....
017050  01030048 14D203D0 58B00041 10D05858  .....K.}.....}..

So record 3 is visible, and data starts at x'17055', which takes
us to x'1b869', which is:

01B860  0450F0D0 0818DF41 F0FFFFFF FFFFFFFF  .&0}....0.......
01B870  FF000000 00000000 00000000 00000000  ................

not what I was expecting, but does make sense.
There is a string of 8 x'FF' marking the end of the last block
on the track. But not end of file. And probably this is just an
integrity check. It doesn't look like it is actually used as a
marker, as the CKD is fixed size.

We actually see the next bit of data at:

01BE00  00000000 02000000 02000000 08000000  ................
01BE10  00000000 00000000 02010048 14F06850  .............0.&

which looks like cylinder 0, head 2, record 0, preceded by
just cyldiner 0, head 2. What did the previous one look like,
which would have been cylinder 0, head 1? I guess this is why
in the CCW you seek to the CCHH before reading a CCHHR, or
something similar. Anyway, here it is:

00E000  00000000 01000000 01000000 08000000  ................
00E010  00000000 00000000 01010048 14000C00  ................

That looks like a neat 16-byte multiple. What is it?
x'1be00'-x'e000' = x'de00' = 56,832. From memory, 27,998 is
half-track blocking, so 55,996 bytes is the minimum data that
can be stored on a track. So there is a little less than 1k
overhead. Seems a bit excessive. Maybe it is to cater for lots
of little blocks that real 3390 hardware can handle.

Ok, so let's jump straight to the next track, now that we know
the distance is x'de00'.

x'1be00' + x'de00' = x'29c00', where we have:

029C00  00000000 03000000 03000000 08000000  ................
029C10  00000000 00000000 0301002C E0000000  ............\...

and this should be not just the last track, but also the last
block, so we can see that cylinder 0, head 3, record 1, has a
length of just x'2ce0', 11488. 6 * 18452 + 11488 = 122,200.
Which is the exact figure from before.

So let's see how it terminates.

Data starts at x'29c1d', add x'2ce0' gives x'2c8fd' where we see:

02C8F0  85FFFFFF FC0001DB D2000000 00000000  e.......K.......
02C900  03020000 00FFFFFF FFFFFFFF FF000000  ................

CC = x'0000', HH = x'0003', R = x'02', key = x'00', length = x'0000'
and then data of 8 x'FF'. I think the EOF record is just that length
of 0, which is sort of invalid, so used as a marker, and then the
x'ff' that follow are not really part of the EOF record, they are
just for validation.

No! This is the high-water mark. Otherwise it doesn't know if there
are more blocks. Let's see again the first track:

01B860  0450F0D0 0818DF41 F0FFFFFF FFFFFFFF  .&0}....0.......
01B870  FF000000 00000000 00000000 00000000  ................

So what we have here is CC = x'FFFF', HH = x'FFFF', CC = x'FFFF',
HH = x'FFFF', R = x'00' as the indicator that there is no other
data on this track. Not totally sure about that R = x'00'.
Actually, a repeat of CCHH doesn't make sense, so that won't be
relevant. So it will instead be CC = x'FFFF', HH = x'FFFF',
R = x'FF', key length = x'FF', data length = x'FFFF', so that
programs potentially need less exception code. They can read in
the entire CKD header, expecting it to be there. It is probably
sufficient to check for a CC of x'FFFF' as that probably won't
be maxed out. But just in case, probably better to check the
entire lot to see if there are 8 x'FF'.


Ok, the next interesting thing is here:

037A00  00000000 04000000 04000000 08000000  ................
037A10  00000000 00FFFFFF FFFFFFFF FF000000  ................

which looks like cylinder 0, head 4. Ah - so that indicates
that the track is empty. Probably every track on the disk gets
those 8 x'ff' set as part of the disk initialization.

Let me check 80% of the way into the disk, where no application
data should be. Yep, buttfuck nowhere:

2D2E8E00 00037900 03037900 03000000 08000000  ..y...y.........
2D2E8E10 00000000 00FFFFFF FFFFFFFF FF000000  ................

I wonder where the last of those FFFF is?

388CD600 00045800 0E045800 0E000000 08000000
388CD610 00000000 00FFFFFF FFFFFFFF FF000000

So that x'E' looks like head 14, which sounds right - I think
3390 have 15 heads. Which means the cylinder number is x'0458',
ie 1112, which also sounds right, I think a 3390-1 has 1113
cylinders.

I wonder what the beginning of an empty cylinder looks like?
So subtract 14 * 56,832 and we have:

3880B200 00045800 00045800 00000000 08000000
3880B210 00000000 00FFFFFF FFFFFFFF FF000000

Looks good.

So that means that every empty track looks the same. First
you have a CCHH, then you have a CCHHR, with R of 0, and
data length 8, consisting of 8 x'00' and then you have the
high-water CCHHR etc of a total of 8 x'FF'.

(ed - I think the first byte - x'00' - might be a BIN number)

I wonder if there is per-cylinder overhead?

No sign of anything before:

3880B1F0 00000000 00000000 00000000 00000000

Let's subtract 15 * 56832 from this position and see what we have.

3873B000 00045700 00045700 00000000 08000000
3873B010 00000000 00FFFFFF FFFFFFFF FF000000

Ok, so there is no cylinder overhead.

And what does the end of the disk look like?

A cylinder is 15 * 56832 = 852480 bytes. Add that to this:

3880B200 00045800 00045800 00000000 08000000

and we have the exact file size:

21/12/2022  01:21 pm       948,810,752 pdos00.ckd

So there is no overhead at the end of the file.

And let's recheck the beginning. This:

00E000  00000000 01000000 01000000 08000000  ................

minus 56,832 gives:

000200  00000000 00000000 00000000 08000000

(ie cylinder 0, head 0 - the start of the real disk)

and before that we see:

0001F0  00000000 00000000 00000000 00000000

no sign of anything.

So there is basically 500 (ed - I think I meant 512) bytes of
overhead at the beginning of
the disk. Only the first 17 bytes appear to have anything in them.

The first 8 bytes are an obvious ASCII (not EBCDIC) eyecatcher:

   000000  434B445F 50333730 0F000000 00DE0000  CKD_P370........
   000010  90000000 00000000 00000000 00000000  ................

What I would expect to see is cylinder and head counts. I can see
a x'DE' - almost certainly x'DE00' - the length of a single track.

There is an x'0F', probably the number of heads, and that's
probably a 4-byte little-endian value. So what is x'90'? That's
144. Doesn't ring a bell. They probably just describe the disk
in terms of heads and track size, and then let the file size
itself determine how many cylinders there are. x'9000' - 36864 -
is too big to be a cylinder count too. x'90' could be maximum
number of records (blocks) allowed in a track. The overhead of
each block is 8 bytes, so 8 * 144 = 1152 - well within the limits
of the CKD markup format we are using, but perhaps real hardware
can't handle more than that many blocks.



So cylinder 0 ends with head 14 here:

0C2600  00000000 0E000000 0E000000 08000000  ................
0C2610  00000000 00FFFFFF FFFFFFFF FF000000  ................

And then things pick up again on cylinder 1, head 0:

0D0400  00000100 00000100 00000000 08000000  ................
0D0410  00000000 00000100 00012C00 60040404  ............-...
0D0420  04040404 04040404 04040404 04040404  ................
0D0430  04040404 04040404 04040404 04040404  ................
0D0440  04040404 04040404 04F40001 00001905  .........4......
0D0450  C3045900 00000080 01000004 59000FE5  C..............V
0D0460  A2000000 30000032 2D000000 00000000  s...............
0D0470  00000000 00000000 00000000 00000000  ................
0D0480  00000000 00008100 00010000 0002000E  ......a.........

So we see a record 0 as usual at the beginning of the track, and
then at x'd0417' we have x'0000' for the head number followed by
x'01' for record 1, then x'2c' (44) for a key length, and x'0060'
(96) for a data length. The key is all x'04' (not x'40', space).
The data starts with x'f4', which I believe is a format-4 DSCB or
DSCB-4 or somesuch. That could describe space on the volume.

Apparently the first entry of the VTOC includes the size, which
in our case is 2 cylinders, so maybe it is this 0001/0000
to 0002/000e:

0D0480  00000000 00008100 00010000 0002000E  ......a.........

ie starting at cylinder 1 head 0 and finishing at cylinder 2, head 14.

I could find out "for sure" by changing the size of the VTOC in
the dasdload control file and seeing what changes, but haven't
done so.

Things pick up again at record 2, which is the x'02' seen at
offset x'd04ad', which is followed by a key of length 44, all
NUL characters, followed by data of x'f5', a format 5 DSCB
which I can't guess what is, maybe space allocation:

0D04A0  00000000 00000000 00000100 00022C00  ................
0D04B0  60050505 05000000 00000000 00000000  -...............
0D04C0  00000000 00000000 00000000 00000000  ................
0D04D0  00000000 00000000 00000000 00F50000  .............5..
0D04E0  00000000 00000000 00000000 00000000  ................
0D04F0  00000000 00000000 00000000 00000000  ................
0D0500  00000000 00000000 00000000 00000000  ................
0D0510  00000000 00000000 00000000 00000000  ................
0D0520  00000000 00000000 00000000 00000000  ................

Then we have cylinder 1, head 0 record 3, key length of 44, and
this time the key has something interesting in it, which is a
filename (PLOAD.SYS), right-padded with spaces.

0D0530  00000000 00000000 00000000 00000100  ................
0D0540  00032C00 60D7D3D6 C1C44BE2 E8E24040  ....-PLOAD.SYS  
0D0550  40404040 40404040 40404040 40404040                  
0D0560  40404040 40404040 40404040 40404040                  
0D0570  40F1D7C4 D6E2F0F0 00017A01 63000000   1PDOS00..:.....
0D0580  010000C8 C5D9C3E4 D3C5E240 40404040  ...HERCULES     
0D0590  00000000 00000040 00C00048 14000000  ....... .{......
0D05A0  00008080 00000100 0202B25E 00000100  ...........;....
0D05B0  00000001 0000000A 00000000 00000000  ................
0D05C0  00000000 00000000 00000000 00000000  ................
0D05D0  00000100 00042C00 60D7C4D6 E24BE2E8  ........-PDOS.SY
0D05E0  E2404040 40404040 40404040 40404040  S               

The data starts with x'f1' at offset x'd0571', so a format 1 dscb.
Not sure what the rest of the data is, but PDOS00 is the name of
the volume, which seems redundant and inappropriate, and HERCULES
will be the name of the creator I guess. The next CCHHR begins at
x'd05d1', and is the format 1 dscb for the next file on the disk.

All these format 4/5/1 (and presumably others) are collectively part
of what is called the VTOC (volume table of contents).

The VTOC ends with defined (key length 44, data length 96),
but unused blocks, like this:

0D1280  00000000 00000000 00000100 001A2C00  ................
0D1290  60000000 00000000 00000000 00000000  -...............
0D12A0  00000000 00000000 00000000 00000000  ................
0D12B0  00000000 00000000 00000000 00000000  ................
0D12C0  00000000 00000000 00000000 00000000  ................
0D12D0  00000000 00000000 00000000 00000000  ................
0D12E0  00000000 00000000 00000000 00000000  ................
0D12F0  00000000 00000000 00000000 00000000  ................
0D1300  00000000 00000000 00000000 00000000  ................
0D1310  00000000 00000000 00000000 00000100  ................
0D1320  001B2C00 60000000 00000000 00000000  ....-...........

So both the key and the data are all NULs. So when you delete a
file, it is presumably set to NULs, allowing the entry to be reused.

And it can presumably be any format (1, 4, 5 etc). I think these
things are chained, so can appear anywhere.

And it looks like we can fit x'32' = 50 DSCBs per track.

0D2060  00000000 00000000 00000100 00322C00  ................
0D2070  60000000 00000000 00000000 00000000  -...............
0D2080  00000000 00000000 00000000 00000000  ................
0D2090  00000000 00000000 00000000 00000000  ................
0D20A0  00000000 00000000 00000000 00000000  ................
0D20B0  00000000 00000000 00000000 00000000  ................
0D20C0  00000000 00000000 00000000 00000000  ................
0D20D0  00000000 00000000 00000000 00000000  ................
0D20E0  00000000 00000000 00000000 00000000  ................
0D20F0  00000000 00000000 00000000 00FFFFFF  ................
0D2100  FFFFFFFF FF000000 00000000 00000000  ................

The VTOC continues onto cylinder 1, head 1, record 1

0DE200  00000100 01000100 01000000 08000000  ................
0DE210  00000000 00000100 01012C00 60000000  ............-...

And the VTOC ends at cylinder 2, head 14, record x'32':

264660  00000000 00000000 00000200 0E322C00  ................
264670  60000000 00000000 00000000 00000000  -...............
264680  00000000 00000000 00000000 00000000  ................
264690  00000000 00000000 00000000 00000000  ................
2646A0  00000000 00000000 00000000 00000000  ................
2646B0  00000000 00000000 00000000 00000000  ................
2646C0  00000000 00000000 00000000 00000000  ................
2646D0  00000000 00000000 00000000 00000000  ................
2646E0  00000000 00000000 00000000 00000000  ................
2646F0  00000000 00000000 00000000 00FFFFFF  ................
264700  FFFFFFFF FF000000 00000000 00000000  ................

So that makes it 2 full cylinders. Which correlates to this
line in the dasdload control file:

SYSVTOC      VTOC             CYL  2


After the VTOC comes more-or-less normal files. Nothing is truly
normal after I've touched it. :-)

So cylinder 3, head 0, record 1 has no key, and a data length of
the "traditional" (ie I pulled it out of my ass) 18452 byte block
which you can see at x'27081b':

270800  00000300 00000300 00000000 08000000  ................
270810  00000000 00000300 00010048 14003800  ................
270820  0000CA6D 0F020048 000000C0 00000048  ..._.......{....
270830  14307020 0B00004A 7D023000 1E4B3601  ........'.......
270840  0B520802 00000000 00000000 00000000  ................
270850  00000000 00011800 00010000 00FF0000  ................
270860  008F0B66 44048F90 E8500022 90000000  ........Y&......
270870  34000000 3D001D01 2C000000 00000000  ................

The data starts with x'0038'. This is actually a RDW, the same as
you get if you do an FTP of a RECFM=V dataset with the RDW option.
Note that RECFM=V (as opposed to VB) has a BDW as well (yes, really,
not a typo). But the BDW are not included in the FTP, or the
equivalent process that I use (copyfile). The RDW is 4 bytes, so
there is another 2 x'00' which are not used for RECFM=V (they are
used for VS if spanning is actually required, but I never put myself
into that position). The RDW is the length of the record, including
the RDW itself, which means the next record begins at x'270855'
and has a RDW record of length x'0118'.

But let's look at the first record of length x'0038'. After the RDW
comes x'00CA6D0F' which I believe is some sort of IEBCOPY signature.
That is separately documented in pdosutil.c (with further links to
documentation), and you can see this line of code referring to the
magic number:

if ((*len <= 8) || (*((int *)buf + 1) != 0xca6d0f))

Anyway, this combination of using IEBCOPY to unload a load module
and then FTPing it with the RDW option (or using an equivalent
process) produces a file that can be transported anywhere, and
what I call an MVS PE (portable executable).

Note that load modules have associated metadata, such as the
executable's entry point, which is stored in the PDS directory
entry (you normally can't store an executable in a sequential
file). IEBCOPY gathers up all that metadata into a single
sequential file. And this is where z/PDOS does something
non-traditional - it allows you to directly execute that
sequential file, and in fact, PDSes aren't even supported at all.

I didn't do that to annoy people (although that's an added benefit).
I did it to simplify MVS. IBM could e.g. put an MVS PE into a PDS
if they wanted to.

Anyway, this appears to be internal IEBCOPY data, naming the
member name in the PDS that the unload was done from:

270980  FFFFFFFF FF0032D7 C4D6E240 40404000  .......PDOS    .

And here we seem to be into the load module itself, which
includes its own overhead, to identify symbols and relocation
data:

270AB0  00070000 00000000 007C7CC3 D9E3F040  .........@@CRT0 


The actual program code begins at x'271dcd' with a PSW:

271DC0  00000000 00003400 0B01003D E0000C00  ............\...
271DD0  00800020 00000000 00000000 00000000  ................

as this is also a standalone program, with sapstart.asm linked
first, which contains an IPL PSW. But the IPL PSW is not actually
used in this case. If it was loaded from tape we might do it so
that the PDOS executable's IPL PSW is actually used. That design
is still unclear.

We can see a PDPCLIB eyecatcher here:

273F90  C4000000 00000000 04001000 00D7C4D7  D............PDP
273FA0  C3D3C9C2 5A000000 00000000 00000000  CLIB!...........

If we look at the code:

000000 000C0000                     182          DC    X'000C0000' EC mode '08' + Machine Check '04' enabled
000004 80002000                     183          DC    A(AMBIT+POSTIPL) First bit of "normal" memory

0021D0 D7C4D7C3D3C9C25A             369          DC    C'PDPCLIB!'

we can add x'271dcd' and x'21d0' and get x'273f9d',
which is a match.

The PDOS executable continues up to this last block
(cylinder 3, head 2, record 1 for a length of x'1e78':

28C410  00000000 00000300 0201001E 78000000

bringing it to x'28c41d' + x'1e78' = x'28e295':

28E290  130A0000 00000300 02020000 00FFFFFF
28E2A0  FFFFFFFF FFB50F3F D0EB1EA1 8D77BEC3

where there is cylinder 3, head 2, record 2, for a length of 0,
followed by the 8 x'FF'. After that appears to be junk inserted
by either dasdload or dasdcopy. The non-NUL junk ends here:

291FF0  6628DE04 B98AB17F C5DC914E 14240A57  ......."E.j+....
292000  E2D20000 00000000 00000000 00000000  SK..............
292010  00000000 00000000 00000000 00000000  ................

So we are expecting a clean track on cylinder 3, head 3.

29A200  00000300 03000300 03000000 08000000  ................
29A210  00000000 00FFFFFF FFFFFFFF FF000000  ................

which we do see.

Cylinder 3 is not used for anything else, and we get data again
on cylinder 4:

340A00  00000400 00000400 00000000 08000000  ................
340A10  00000000 00000400 00010002 F8D4C1C9  ............8MAI
340A20  D5E2C9E9 C5404040 40404040 40404040  NSIZE           
340A30  4040F4F0 F9F61515 C1D9C3C8 D4D6C4C5    4096..ARCHMODE
340A40  40404040 40404040 40404040 40A961C1               z/A
340A50  99838815 15C3D7E4 E2C5D9C9 C1D34040  rch..CPUSERIAL  

That cylinder 4 file is config.sys, and has a length of x'2f8'
which can be seen at x'340a1b'. It is a RECFM=U EBCDIC file,
stored in a more sensible, non-traditional format, which is
using x'15' (NL - newline) separators. You can see two of them
at x'340a36'. You only need one for a newline terminator, but
there is a blank line following, so that's another single x'15'.

The config.sys is expected to end before x'340a1d' + x'2f8' = x'340d15',
which we do in fact see:

340D10  83839284 15000400 00020000 00FFFFFF  cckd............
340D20  FFFFFFFF FF25B953 CAC4886D AA36AC99  .........Dh_...r

where you can see after the last x'15' there is cylinder 4,
head 0, record 2 of length 0 (to indicate EOF), followed by
8 x'ff' (end of track indicator), followed by junk (due to a
presumed bug).

Note that we expect to see a pointer from the VTOC to this block.

0D0660  00000000 00000100 00052C00 60C3D6D5  ............-CON
0D0670  C6C9C74B E2E8E240 40404040 40404040  FIG.SYS         
0D0680  40404040 40404040 40404040 40404040                  
0D0690  40404040 40404040 40F1D7C4 D6E2F0F0           1PDOS00
0D06A0  00017A01 63000000 010000C8 C5D9C3E4  ..:........HERCU
0D06B0  D3C5E240 40404040 00000000 00000040  LES     ....... 
0D06C0  00C00048 14000000 000080C0 00000100  .{.........{....
0D06D0  0002DD44 00008100 00040000 0004000E  ......a.........
0D06E0  00000000 00000000 00000000 00000000  ................
0D06F0  00000000 00000000 00000100 00062C00  ................
0D0700  60C3D6D4 D4C1D5C4 4BC5E7C5 40404040  -COMMAND.EXE    

That 4/0 and 4/E seen at x'D06D8' is probably the allocated
space for the file (a cylinder and head range). MVS always
allocates in units of tracks, so a dataset is always expected
to start at record 1, so there is no need to include that
explicitly. Note that this format 1 DSCB only includes the
first few space allocation extents, and the rest (if required)
are in a DSCB chain that is theoretically infinite, but MVS
imposes a limit of 16 extents total.

*/

/*

Another thing to note is that at the end of the IPL process,
the SSID (subsystem identification word) of the IPL device is
stored here:

0000B8                             3144+FLCIOA   DS    0A -           I/O ADDRESS

So it will contain something like x'10002'.

Note that on a S/370 and earlier machine, that location will
have the device number (previously known as the CUU address -
I think because the C represents the channel number, and the
UU is a unit within that channel) instead, ie something
like x'1b9'.

*/
