CP/M RASM-86 1.0A  SOURCE: INITDIRA.A86                                                                      PAGE   1

     1  
     2                            ; **********************************************************************
     3                            ; initdira - Provides BIOS (XIOS) assembler interface for INITDIR.PLI
     4                            ;          - Also provides examples of how to:
     5                            ;               1. Call CCP/M-86 XIOS
     6                            ;               2. Lock up disk system for direct disk I/O
     7                            ;               3. Lock up console, to prevent a job from being switched out
     8                            ; **********************************************************************
     9  
    10  
    11                                    cseg
    12  
    13                                    public  bstdma          ; sets DMA segment and offset
    14                                    public  rdsec           ; reads a physical sector
    15                                    public  sectrn          ; translates a sector
    16                                    public  seldsk          ; selects a drive
    17                                    public  setsec          ; sets the sector to be read/written
    18                                    public  settrk          ; sets the track to be read/written
    19                                    public  wrsec           ; writes a physical sector
    20  
    21                                    public  openvec         ; returns open files vector
    22                                    public  syslock         ; locks up the disk system
    23                                    public  sysunlock       ; unlocks the disk system
    24                                    public  conlock         ; locks the console into foreground mode
    25                                    public  conunlock       ; unclocks the console
    26  
    27  
    28     0009                   IO_SELDSK equ     9             ; XIOS function number
    29     000A                   IO_READ   equ    10             ; XIOS function number
    30     000B                   IO_WRITE  equ    11             ; XIOS function number
    31     0091                   P_PRIORITY equ  145             ; BDOS function: set Process PRIORITY
    32     009A                   S_SYSDAT  equ   154             ; BDOS function: get SYStem DATa page address
    33     009C                   P_PDADR   equ   156             ; BDOS function: get Process Descriptor address
    34     0087                   Q_OPEN    equ   135             ; Open Queue
    35     008A                   Q_READC   equ   138             ; Read Queue Conditional
    36     008B                   Q_WRITEC  equ   139             ; Write Queue Conditional
    37  
    38     0028                   XIOS_ptr  equ   dword ptr .28h  ; loc of XIOS entry in SYSDAT 
    39     0088                   OPVEC     equ   word ptr .88h   ; loc of Open_Files_on_Drives vector
    40     0010                   UDA_seg   equ   word ptr 10h    ; loc of UDA seg in Process Descriptor
    41  
    42  
    43  
    44                            ;*****************************************************************
    45                            ;***   PL/I Utility Functions                                  ***
    46                            ;*****************************************************************
    47                            getp1:  ; get single byte parameter to register DL
    48   0000 8B1F                        mov     bx,[bx]         ;BX = .char
    49   0002 8A17                        mov     dl,[bx]         ;to register DL
    50   0004 C3                          ret
    51  
    52                            getp2:  ; get single word value to DX
    53                            getp2i: ; same as getp2
CP/M RASM-86 1.0A  SOURCE: INITDIRA.A86                                                                      PAGE   2

    54  
    55   0005 8B1F                        mov     bx,[bx]
    56   0007 8B17                        mov     dx,[bx]
    57   0009 C3                          ret
    58  
    59  
    60                            getsu:  ;get sysdat and uda addrs
    61                                    ;enters: DS=local data seg
    62                                    ;exits:  DS=SYSDAT seg, ES=UDA seg (for call to XIOS)
    63   000A 8B0E0200     R              mov     cx,udaaddr      ;get the saved value
    64   000E 0BC9                        or      cx,cx           ;set flags
    65   0010 7409           001B         jz      getsu1          ;uninitialized, go do the OS call
    66   0012 8EC1                        mov     es,cx           ;we've been here before, just load regs
    67   0014 8B0E0000     R              mov     cx,sysaddr
    68   0018 8ED9                        mov     ds,cx
    69   001A C3                          ret
    70  
    71                            getsu1:
    72   001B B19C                        mov     cl,P_PDADR      ;get Process Descriptor
    73   001D CDE0                        int     0E0h            ;call BDOS
    74   001F 268B4F10                    mov     cx,es:UDA_seg[bx] ;grab UDA_seg
    75   0023 890E0200     R              mov     udaaddr,cx      ;save for future calls
    76   0027 51                          push    cx              ;save UDA_seg
    77   0028 B19A                          mov   cl,S_SYSDAT     ;get address of SYStem DATa area
    78   002A CDE0                          int   0E0h            ;call BDOS
    79   002C 8CC1                          mov   cx,es           ;mov ds,es
    80   002E 890E0000     R                mov   sysaddr,cx      ;save for future calls
    81   0032 8ED9                          mov   ds,cx
    82   0034 07                          pop     es              ;restore UDA_seg
    83   0035 C3                          ret
    84  
    85  
    86  
    87                            ;*****************************************************************
    88                            ;***   Simulate old XIOS style functions                       ***
    89                            ;*****************************************************************
    90                            bstdma: ; sets DMA segment and offset
    91   0036 E8CCFF         0005         call    getp2           ;dma address to DX
    92   0039 89163100     R              mov     dmaoff,dx       ;stuff addr in IOPB's offset field
    93   003D 8C1E2F00     R              mov     dmaseg,ds       ;assume all addresses relative to DS
    94   0041 C3                          ret                     ;no BDOS/XIOS call, just init the IOPB
    95  
    96  
    97                            sectrn: ; translates a sector
    98   0042 E8C0FF         0005         call    getp2           ;get sector number to DX
    99   0045 8BDA                        mov     bx,dx           ;no translation: return (unchanged) value
   100   0047 C3                          ret
   101  
   102  
   103                            setsec: ; sets the sector to be read/written
   104   0048 E8BAFF         0005         call    getp2i          ;sector number to DX
   105   004B 89162D00     R              mov     sector,dx       ;stuff sector into IOPB
   106   004F C3                          ret
CP/M RASM-86 1.0A  SOURCE: INITDIRA.A86                                                                      PAGE   3

   107  
   108  
   109  
   110                            settrk: ; sets the track to be read/written
   111   0050 E8B2FF         0005         call    getp2i          ;track number to DX
   112   0053 89162B00     R              mov     track,dx        ;stuff track into IOPB
   113   0057 C3                          ret
   114  
   115  
   116                            ;*****************************************************************
   117                            ;***  Physical I/O calls                                       ***
   118                            ;*****************************************************************
   119                            rdsec:  ; reads a physical sector
   120   0058 B80A00                      mov     ax,IO_READ
   121   005B E90300         0061         jmp     xiosiopb        ;jump around this code
   122  
   123                            wrsec:  ; writes a physical sector
   124   005E B80B00                      mov     ax,IO_WRITE     ;fall thru to xiosiopb
   125  
   126                            xiosiopb:       ;put the IOPB on the stack, call XIOS
   127   0061 1E                          push    ds              ;ds will contain SYSDAT seg
   128   0062 06                          push    es              ;es will contain UDA seg
   129                                            ;someday change this to a block move?
   130   0063 8A2E2900     R              mov     ch,mscnt
   131   0067 8A0E2A00     R              mov     cl,drv
   132   006B 51                          push    cx              ;1st word of IOPB
   133   006C 8B0E2B00     R              mov     cx,track
   134   0070 51                          push    cx              ;2nd word
   135   0071 8B0E2D00     R              mov     cx,sector
   136   0075 51                          push    cx              ;3rd word
   137   0076 8B0E2F00     R              mov     cx,dmaseg
   138   007A 51                          push    cx              ;4th word
   139   007B 8B0E3100     R              mov     cx,dmaoff
   140   007F 51                          push    cx              ;5th word
   141  
   142   0080 50                          push    ax              ;save XIOS_function
   143   0081 E886FF         000A         call    getsu           ;set up DS-SYSDAT and ES-UDA
   144   0084 58                          pop     ax              ;restore XIOS_function
   145   0085 FF1E2800                    callf   XIOS_ptr        ;call indirect the XIOS
   146                                                            ;bl contains return status
   147   0089 59                          pop     cx              ;dma offset
   148   008A 59                          pop     cx              ;dma segment
   149   008B 59                          pop     cx              ;track
   150   008C 59                          pop     cx              ;sector
   151   008D 59                          pop     cx              ;drv & mscnt
   152   008E 07                          pop     es              ;restore original es
   153   008F 1F                          pop     ds              ;ditto for ds
   154   0090 C3                          ret     
   155  
   156  
   157                            ;*****************************************************************
   158                            ;*** XIOS Select Disk Routine                                  ***
   159                            ;*****************************************************************
CP/M RASM-86 1.0A  SOURCE: INITDIRA.A86                                                                      PAGE   4

   160  
   161                            seldsk: ; selects a drive
   162                                    ; also resets login sequence number of drive to 0,
   163                                    ;   to force permanent media to be logged in again on disk reset
   164  
   165   0091 E86CFF         0000         call    getp1           ;drive to DL
   166   0094 88162A00     R              mov     drv,dl          ;stuff drive into IOPB
   167   0098 061E                        push es ! push ds       ;save context ************
   168                                                            ;do the XIOS SELDSK call
   169   009A 52                          push    dx              ;save drive
   170   009B E86CFF         000A         call    getsu           ;set up DS and ES
   171   009E 59                          pop     cx              ;restore drive
   172   009F B80900                      mov     ax,IO_SELDSK
   173   00A2 BA0000                      mov     dx,0            ;this better not be the first call
   174   00A5 FF1E2800                    callf   XIOS_ptr        ;call indirect XIOS
   175                                                            ;xfer DPH locally
   176   00A9 0706                        pop es ! push es        ;restore & save Data Segment into es
   177   00AB BF0400       R              mov     di,offset dph   ;set up destination
   178   00AE 8BF3                        mov     si,bx           ;ptr to dph returned from XIOS call
   179   00B0 C6440600                    mov     log_seqn[si],0  ;force disk reset: 0 login sequence number
   180   00B4 B91400                      mov     cx,dphsiz
   181   00B7 F3A4                        rep movsb               ;move copy of DPH into local storage
   182                                                            ;xfer DPB locally
   183   00B9 BF1800       R              mov     di,offset dpb   ;set up destination
   184   00BC 268B360C00   R              mov     si,es:dpbptr    ;get this info from DPH
   185   00C1 B91100                      mov     cx,dpbsiz
   186   00C4 F3A4                        rep movsb               ;move copy of DPB into local storage
   187                                                            ;cleanup
   188   00C6 1F07                        pop ds ! pop es         ;restore context ************
   189   00C8 C7060C001800 R              mov     dpbptr,offset dpb ;set up local ptr in DPH
   190   00CE BB0400       R              mov     bx,offset dph   ;return address of local copy of DPH
   191   00D1 C3                          ret
   192  
   193  
   194                            ;*****************************************************************
   195                            ;***  Open Drives Vector                                       ***
   196                            ;*****************************************************************
   197                            openvec:        ; returns vector of drives with open files
   198   00D2 06                          push    es              ;save extra seg
   199   00D3 1E                          push    ds              ;save data seg
   200   00D4 B19A                        mov     cl,S_SYSDAT     ;look in the system data page
   201   00D6 CDE0                        int     0E0h            ;call bdos
   202   00D8 26A18800                    mov     ax,es:OPVEC     ;get the vector of drives containing open files
   203   00DC 8BD8                        mov     bx,ax           ;stuff both regs
   204   00DE 1F                          pop     ds              ;restore data seg
   205   00DF 07                          pop     es              ;restore extra seg
   206   00E0 C3                          ret
   207  
   208  
   209                            ;*****************************************************************
   210                            ;***  System Lock and Unlock Routines                          ***
   211                            ;*****************************************************************
   212                            syslock:        ; locks up the disk system
CP/M RASM-86 1.0A  SOURCE: INITDIRA.A86                                                                      PAGE   5

   213  
   214                                            ; returns 0 in ax,bx if everything ok, -1 o.w.
   215   00E1 06                          push    es              ;save extra seg
   216   00E2 1E                          push    ds              ;save data seg
   217  
   218   00E3 B19A                        mov     cl,S_SYSDAT     ;look in the system data page
   219   00E5 CDE0                        int     0E0h            ;call bdos
   220   00E7 268B0E8800                  mov     cx,es:OPVEC     ;get the vector of drives containing open files
   221   00EC F7C1FFFF                    test    cx,0FFFFh       ;check all drives
   222   00F0 7539           012B         jnz     syslfail        ;fail if any open files
   223  
   224   00F2 B98700                      mov     cx,Q_OPEN
   225   00F5 BA3300       R              mov     dx,offset qpb   ;mxdisk queue parm block
   226   00F8 CDE0                        int     0E0h            ;call bdos
   227   00FA 0BC0                        or      ax,ax           ;test return
   228   00FC 750F           010D         jnz     sysltry2        ;if non zero, try kluge
   229   00FE B98A00                      mov     cx,Q_READC      ;see if we can read the queue
   230   0101 BA3300       R              mov     dx,offset qpb   ;insurance
   231   0104 CDE0                        int     0E0h            ;call bdos
   232   0106 0BC0                        or      ax,ax           ;test retrun
   233   0108 7521           012B         jnz     syslfail        ;fail if we can't read mxdisk queue
   234   010A E91800         0125         jmp     syslokay        ;okay, tell 'em so
   235  
   236                            sysltry2:                       ;kluge for old systems
   237   010D B98700                      mov     cx,Q_OPEN
   238   0110 BA4300       R              mov     dx,offset qpb2  ;mxdisk queue parm block
   239   0113 CDE0                        int     0E0h            ;call bdos
   240   0115 0BC0                        or      ax,ax           ;test return
   241   0117 7512           012B         jnz     syslfail        ;if non zero
   242   0119 B98A00                      mov     cx,Q_READC      ;see if we can read the queue
   243   011C BA4300       R              mov     dx,offset qpb2  ;insurance
   244   011F CDE0                        int     0E0h            ;call bdos
   245   0121 0BC0                        or      ax,ax           ;test retrun
   246   0123 7506           012B         jnz     syslfail        ;fail if we can't read mxdisk queue
   247                            syslokay:
   248   0125 B80000E90300   012E         mov ax,0 ! jmp syslret  ;return code 0, everything okay
   249                            syslfail:
   250   012B B8FFFF                      mov ax,0FFFFh           ;return code -1, failure
   251                            syslret:
   252   012E 8BD8                        mov     bx,ax           ;stuff both regs
   253   0130 1F                          pop     ds              ;restore data seg
   254   0131 07                          pop     es              ;restore extra seg
   255   0132 C3                          ret
   256  
   257  
   258  
   259                            sysunlock:      ;undoes a 'syslock' function
   260   0133 B98B00                      mov     cx,Q_WRITEC     ;conditionally write to mxdisk queue
   261   0136 BA3300       R              mov     dx,offset qpb
   262   0139 CDE0                        int     0E0h
   263   013B B98B00                      mov     cx,Q_WRITEC     ;kluge to handle old systems
   264   013E BA4300       R              mov     dx,offset qpb2
   265   0141 CDE0                        int     0E0h
CP/M RASM-86 1.0A  SOURCE: INITDIRA.A86                                                                      PAGE   6

   266  
   267   0143 C3                          ret
   268  
   269  
   270                            ;*****************************************************************
   271                            ;***  Console Lock and Unlock Routines                         ***
   272                            ;*****************************************************************
   273  
   274     0002                   CCB_BACKGRD  equ 0002h          ;Console in Background mode
   275     0008                   CCB_NOSWITCH equ 0008h          ;Console not allowed to switch mode
   276     002C                   CCB_SIZE     equ 2Ch            ;size of CCB 
   277     000E                   CCB_STATE    equ word ptr 0Eh   ;addr of Console State word in CCB
   278     0020                   CON_NUM      equ byte ptr 020h  ;addr of console number in PD
   279     0054                   CCB_PTR      equ word ptr .054h ;addr of CCB table in SYSDAT
   280  
   281     0006                   PD_FLAG      equ word ptr 06    ;addr of FLAGs word in PD
   282     0002                   PD_KEEP      equ 0002h          ;Keep Process Flag
   283     0097                   TOP_PRIOR    equ 151            ;What we set to for Top Priority (arbitrary)
   284     00C8                   REG_PRIOR    equ 200            ;Default Regular Priority
   285  
   286  
   287                            conlock:        ;locks the console into the foreground, sets Keep Flag,
   288                                            ;  and boosts priority
   289                                            ;returns 0 in ax,dx if everything okay, -1 o.w.
   290   0144 06                          push    es              ;save extra seg
   291   0145 E84700         018F         call    concalc         ;ES=SYSDAT, bx=CCB offset
   292   0148 26F7470E0200                test    es:CCB_STATE[bx],CCB_BACKGRD    ;is console in background?
   293   014E 751C           016C         jnz     conlfail        ;background operation not allowed!
   294   0150 26814F0E0800                or      es:CCB_STATE[bx],CCB_NOSWITCH   ;make sure they don't switch
   295   0156 B19C                        mov     cl,P_PDADR      ;get Process Descriptor
   296   0158 CDE0                        int     0E0h            ;call BDOS
   297   015A 26814F060200                or      es:PD_FLAG[bx],PD_KEEP ;set Keep flag
   298   0160 B297                        mov     dl,TOP_PRIOR    ;let's be quick
   299   0162 B191                        mov     cl,P_PRIORITY   ;set Priority
   300   0164 CDE0                        int     0E0h            ;call BDOS
   301  
   302                            conlokay:
   303   0166 B80000E90300   016F         mov     ax,0 ! jmp conlret
   304                            conlfail:
   305   016C B8FFFF                      mov     ax,0FFFFh
   306                            conlret:
   307   016F 8BD8                        mov     bx,ax
   308   0171 07                          pop     es              ;restore extra seg
   309   0172 C3                          ret
   310  
   311  
   312  
   313                            conunlock:      ;undoes the 'conlock' function
   314   0173 06                          push    es              ;save extra seg
   315   0174 E81800         018F         call    concalc         ;ES=sysdat, bx=CCB offset
   316   0177 2681670EF7FF                and     es:CCB_STATE[bx],NOT CCB_NOSWITCH ;let them switch now
   317   017D B19C                        mov     cl,P_PDADR      ;get Process Descriptor
   318   017F CDE0                        int     0E0h            ;call BDOS
CP/M RASM-86 1.0A  SOURCE: INITDIRA.A86                                                                      PAGE   7

   319  
   320   0181 26816706FDFF                and     es:PD_FLAG[bx],NOT PD_KEEP ;reset Keep flag
   321   0187 B2C8                        mov     dl,REG_PRIOR    ;finished with quick
   322   0189 B191                        mov     cl,P_PRIORITY   ;set Priority
   323   018B CDE0                        int     0E0h            ;call BDOS
   324  
   325   018D 07                          pop     es              ;restore extra seg
   326   018E C3                          ret
   327  
   328  
   329  
   330                            concalc:        ;put SYSDAT in ES, offset of CCB in bx
   331   018F B99C00                      mov     cx,P_PDADR      ;get Process Descriptor Addr
   332   0192 CDE0                        int     0E0h            ;call the bdos
   333   0194 33C0                        xor     ax,ax           ;clear ax
   334   0196 268A4720                    mov     al,es:CON_NUM[bx] ;grab the console number
   335   019A B92C00                      mov     cx,CCB_SIZE     ;stuff cx with size
   336   019D F7E1                        mul     cx              ;compute ccb address
   337   019F 50                          push    ax              ;save ccb offset
   338   01A0 B19A                        mov     cl,S_SYSDAT     ;get the System Data Segment
   339   01A2 CDE0                        int     0E0h            ;call the bdos
   340   01A4 5B                          pop     bx              ;restore ccb offset
   341   01A5 26031E5400                  add     bx,es:CCB_PTR   ;compute offset of ccb
   342   01AA C3                          ret
   343  
   344  
   345  
   346                            ;*****************************************************************
   347                            ;***  Data Segment                                             ***
   348                            ;*****************************************************************
   349  
   350                                    dseg    
   351  
   352   0000 0000                sysaddr dw      0       ; save location for sysdat addr
   353   0002 0000                udaaddr dw      0       ; save location for process uda addr
   354  
   355     0014                   dphsiz  equ     014h    ; size of Disk Parm Header
   356   0004                     dph     rb      dphsiz  ; local save area
   357     0006                   log_seqn equ    byte ptr 6      ; byte to force reset of permanent media
   358     000C                   dpbptr  equ     word ptr dph+8  ; word of interest: DPB offset
   359  
   360     0011                   dpbsiz  equ     011h    ; size of Disk Parameter Buffer
   361   0018                     dpb     rb      dpbsiz  ; local save area
   362  
   363  
   364   0029                     iopb    rb      0       ; the iopb structure filled in by above rtns
   365   0029 01                  mscnt   db      1       ; multi sector count
   366   002A                     drv     rb      1       ; select drive
   367   002B                     track   rw      1       ; select track
   368   002D                     sector  rw      1       ; select sector
   369   002F                     dmaseg  rw      1       ; set dma address
   370   0031                     dmaoff  rw      1       ; set dma address
   371     000A                   iopbsiz equ     (offset $)-(offset iopb)
CP/M RASM-86 1.0A  SOURCE: INITDIRA.A86                                                                      PAGE   8

   372  
   373  
   374  
   375   0033                     qpb     rb      0       ; queue parameter block
   376   0033 0000                        dw      0       ; reserved
   377   0035 0000                        dw      0       ; queueid
   378   0037 0000                        dw      0       ; nmsgs
   379   0039 0000                        dw      0       ; buffer
   380   003B 4D586469736B                db      'MXdisk  ' ; queue name
   381        2020
   382  
   383   0043                     qpb2    rb      0       ; queue parameter block number 2: be persistent
   384   0043 0000                        dw      0       ; reserved
   385   0045 0000                        dw      0       ; queueid
   386   0047 0000                        dw      0       ; nmsgs
   387   0049 0000                        dw      0       ; buffer
   388   004B 6D786469736B                db      'mxdisk  ' ; queue name
   389        2020
   390  
   391  
   392  END OF ASSEMBLY.  NUMBER OF ERRORS:   0.  USE FACTOR:  2%
CP/M RASM-86 1.0A  SOURCE: INITDIRA.A86                                                                      PAGE 009

BSTDMA           0036 L    13    90#
CCB?BACKGRD      0002 N 
CCB?NOSWITCH     0008 N 
CCB?PTR          0054 V 
CCB?SIZE         002C N 
CCB?STATE        000E N 
CONCALC          018F L   291   315   330#
CONLFAIL         016C L   293   304#
CONLOCK          0144 L    24   287#
CONLOKAY         0166 L   302#
CONLRET          016F L   303   306#
CONUNLOCK        0173 L    25   313#
CON?NUM          0020 N 
CS               SREG V 
DMAOFF           0031 V    92   139   370#
DMASEG           002F V    93   137   369#
DPB              0018 V   183   189   361#
DPBPTR           000C V   184   189   358#
DPBSIZ           0011 N   185   360#  361 
DPH              0004 V   177   190   356#  358 
DPHSIZ           0014 N   180   355#  356 
DRV              002A V   131   166   366#
DS               SREG V    68    81    93   127   153   167   188   199   204   216 
                          253 
ES               SREG V    66    74    79    82   128   152   167   176   176   184 
                          188   198   202   205   215   220   254   290   292   294 
                          297   308   314   316   320   325   334   341 
GETP1            0000 L    47#  165 
GETP2            0005 L    52#   91    98 
GETP2I           0005 L    53#  104   111 
GETSU            000A L    60#  143   170 
GETSU1           001B L    65    71#
IOPB             0029 V   364#  371 
IOPBSIZ          000A N   371#
IO?READ          000A N 
IO?SELDSK        0009 N 
IO?WRITE         000B N 
LOG?SEQN         0006 N 
MSCNT            0029 V   130   365#
OPENVEC          00D2 L    21   197#
OPVEC            0088 V    39#  202   220 
PD?FLAG          0006 N 
PD?KEEP          0002 N 
P?PDADR          009C N 
P?PRIORITY       0091 N 
QPB              0033 V   225   230   261   375#
QPB2             0043 V   238   243   264   383#
Q?OPEN           0087 N 
Q?READC          008A N 
Q?WRITEC         008B N 
RDSEC            0058 L    14   119#
REG?PRIOR        00C8 N 
SECTOR           002D V   105   135   368#
CP/M RASM-86 1.0A  SOURCE: INITDIRA.A86                                                                      PAGE 010

SECTRN           0042 L    15    97#
SELDSK           0091 L    16   161#
SETSEC           0048 L    17   103#
SETTRK           0050 L    18   110#
SS               SREG V 
SYSADDR          0000 V    67    80   352#
SYSLFAIL         012B L   222   233   241   246   249#
SYSLOCK          00E1 L    22   212#
SYSLOKAY         0125 L   234   247#
SYSLRET          012E L   248   251#
SYSLTRY2         010D L   228   236#
SYSUNLOCK        0133 L    23   259#
S?SYSDAT         009A N 
TOP?PRIOR        0097 N 
TRACK            002B V   112   133   367#
UDAADDR          0002 V    63    75   353#
UDA?SEG          0010 N 
WRSEC            005E L    19   123#
XIOSIOPB         0061 L   121   126#
XIOS?PTR         0028 V 
