?? NEWTITLE := '~~~~~   common deck DSI$VIRTUAL_MEMORY_ACCESS', EJECT ??

  CONST

{  Dual state control block (DSCB) constants.

    dscb_d7ty = 0,
    dscb_d7jp = dscb_d7ty + 1,
    dscb_d7st = dscb_d7jp + 2,
    dscb_d7rs = dscb_d7st + 1,
    dscb_d7cm = dscb_d7rs + 3,
    dscb_d7sv = dscb_d7cm + 2,
    dscb_d8ty = dscb_d7sv + 6,
    dscb_d8tm = dscb_d8ty + 1,
    dscb_d8jp = dscb_d8tm + 2,
    dscb_d8st = dscb_d8jp + 2,
    dscb_d8ds = dscb_d8st + 1,
    dscb_d8sv = dscb_d8ds + 3,
    dscb_dscm = dscb_d8sv + 6,
    dscb_dfcm = dscb_dscm + 5,
    dscb_dscbl = dscb_dfcm + 11,
    dscb_ssrptr = dscb_d8sv + 1,
    dscb_dftptr = dscb_d7rs + 1,
    dscb_cptptr = dscb_dfcm + 8;

  TYPE
    dst$r_pointer = PACKED RECORD
      offset: 0 .. 0fff(16),
      rupper: 0 .. 0ffff(16),
      rlower: 0 .. 0ffff(16),
      length: 0 .. 0ffff(16),
    RECEND;

  TYPE
    c180_word = RECORD
      left: integer,
      right: integer,
    RECEND,
    c180_data = ^ARRAY [ * ] OF c180_word;

?? SKIP := 3 ??

  PROCEDURE get_dscb
    (    fwa: integer;
         buffer: ^cell;
         size: integer);

    VAR
      cm_copy_info: [STATIC] memory_copy_header := [0, ve60_to_nos60,
        interface_block, 0];

    cm_copy_info.byte_rma := fwa * 8;
    cm_copy_info.length := size;
    copy_memory (cm_copy_info, buffer);

  PROCEND get_dscb;
?? SKIP := 3 ??

  PROCEDURE put_dscb
    (    fwa: integer;
         buffer: ^cell;
         size: integer);

    VAR
      cm_copy_info: [STATIC] memory_copy_header := [0, nos60_to_ve60,
        interface_block, 0];

    cm_copy_info.byte_rma := fwa * 8;
    cm_copy_info.length := size;
    copy_memory (cm_copy_info, buffer);

  PROCEND put_dscb;
?? PUSH (LISTEXT := ON) ??
*copyc dsp$copy_memory
?? POP ??
?? OLDTITLE ??
