TDSк1*CONFIG!%kGW 2 4 3  }1}@@ N^3=DN(* ! !(c) Copyright Hewlett-Packard Company, 1983.  All rights are reserved. Copying or other  reproduction of this program except for archival  purposes is prohibited without the prior  written consent of Hewlett-Packard Company. , , ,REST F&0; {<>0 overrides auto-assignment}    {local mass storage directory access method} "type $lms_dam_type = {local mass storage dam} &( LIF, UCSD ); "const $primary_lms_dam = &LIF; *    {local hard disc partitioning par RICTED RIGHTS LEGEND   Use, duplication, or disclosure by the Government  is subject to restrictions as set forth in  paragraph (b) (3) (B) of the Rights in Technical  Data and Computer Software clause in  DAR 7-104.9(a).   HEWLETT-PACKARD COMP ameters} "type $multi_volume_option_type = &(single_volume, multi_volume, auto_volume); "const $multi_volume_option = &auto_volume; $minimum_volume_size = {in bytes [1..maxint]} &1000000; $maximum_number_vols = {[1..30]} &30;    {local MCTABLET___>%CTABLE1.0C20%#CTABLE2.0C20%&CS80 2(%)DISC_INTF 20%2DATA_COMM 2F"%5GPIO 2h%8RS232 2|%A !ANY  Fort Collins, Colorado C *)    $page, sysprog$   program {self-configuring} ctable;    module options;  "(**4) "(* Choose the desired configuration options *) printer timeout} "{ $maximum allowed delay between any two bytes: &>0 specifies time in milliseconds &=0 specifies infinite timeout & $recommended values: &- HP2630 series (HP-IB) 3000 &- HP2670 series (HP-IB) 3000 &- HP9876 SRM 2j%EF9885 2%HINTERFACE 2%SWORKT_____>@anonymous b<Xanonymous XWORKC_____2lYICTABLET___W( \A"(* by editing the CONSTant declarations in *) "(* this module.  *) "(**])   import "sysglobals;   export   {power-up system unit} "const $system_unit =  = (HP-IB) 7000 &- HP82905 (HP-IB) 12000 $Note: the HP82905 is currently NOT supported &by PASCAL 2.0, due to its inappropriate &response to interface clear (IFC), and &its incompatible graphics dump sequence. "} "const   [=] 6herwise noted} $HPmini_mp = mp_type[tpm: 2* 33, bpt: 16*256]; $HP9885_mp = mp_type[tpm: 1* 77, bpt: 30*256]; {physical size} $HP9895_mp = mp_type[tpm: 2* 77, bpt: 30*256]; {physical size} $HP913X_A_mp = mp_type[tpm: 4*152, bpt: 31*256]; $HP913 n"procedure zap_assigned_unit(lunit: unitnum); "function on_same_medium(lun1, lun2: unitnum): boolean; "procedure remove_extraneous_volumes(lun1, lun2: unitnum); "function vol_bytes(current_vol, number_vols: shortint; mp: mp_type): integer; "function  &dav[sc: 7, ba: 1, du: -1, dv: -1]; $SRM_default_dav = &dav[sc: 21, ba: {node} 0, *du: {unit} 8, dv: -1];  "  {system unit auto-search declarations} "const $sysunit_list_length = 9; "type $sysunit_list_type = &array[1..sysunit_list_lengtorage letter specifiers} $HPmini = 'M'; $HP9885 = 'F'; $HP9895 = 'H'; $HP8290X = 'N'; $HP913X_A = 'U'; $HP913X_B = 'V'; $HP913X_C = 'W'; $CS80disc = 'Q'; $CS80tape = 'K'; $SRM = 'G'; $PRINTER = 'J'; $RAM = 'R'; $ X_B_mp = mp_type[tpm: 4*305, bpt: 31*256]; $HP913X_C_mp = mp_type[tpm: 6*305, bpt: 31*256]; $null_mp = mp_type[tpm: 0, bpt: 0]; " "type $ds_type = {Directory access method Specifier for local mass storage} &( primary_dam, {either LIUvol_offset(current_vol, number_vols: shortint; mp: mp_type): integer; "function block_boundaries(mp: mp_type): mp_type; "function value(symbol: string255): integer;  " "{ table entry assignment procedures } " "procedure tea_memory_volume_dam(ds:ds_Kth] of unitnum; "const $sysunit_list = &sysunit_list_type[11,9,7,45,4,44,3,43,3];    {HPIB select code scanning declarations} "const $sc_list_length = 3; "type $sc_list_type = &array[1..sc_list_length] of byte; "const  NODEVICE = #255; $ "{ mass storage medium parameters - we primarily need bytes/medium, but &actually work with two parameters, bytes/track and tracks/medium, so &that when we partition large media into multiple logical volumes, we  cF or UCSD, as specified in options} (secondary_dam, {the one not selected as primary} (LIF_dam, {LIF, regardless of primary/secondary choice} (UCSD_dam ); {UCSD, regardless of primary/secondary choice}  $page$ $ "var  type); "procedure tea_boot(un:unitnum); "procedure tea_srm(un:unitnum;sc,ba,du:byte); "procedure tea_crt(un:unitnum); "procedure tea_kbd(un:unitnum); "procedure tea_local_printer(un:unitnum;sc,ba:byte;uvid:vid;bto:integer);  {$local_printer_timeout = &12000; {milliseconds}    {default device address vectors} "type $dav = {device address vector} &record (sc, ba, du, dv: shortint; &end; "const $HP8290X_default_dav = &dav[sc: 7, ba: 0, du: 0, dv: -1]; $HP9895$sc_list = sc_list_type[7,8,14]; $   implement {options}   end; {options}  $page, range off$   module ctr; {ctable routines} " "(**) "(* *) "(* 7&can do so on track boundaries for optimum efficiency. } "type $mp_type = {medium parameters} &record (tpm: integer; {tracks per medium} (bpt: integer; {bytes per track} &end; " "const {medium parameters; LOGICAL sizes unless ot @$bootdevice_letter: char; $bootdevice_dav: dav; $bootdevice_lun: unitnum;  " "procedure create_temp_unitable; "procedure assign_and_clear_unit(lunit: unitnum); "procedure assign_temp_unitable; "function sysunit_ok(system_unit: unitnum): boolean; _default_dav = &dav[sc: 7, ba: 0, du: 0, dv: -1]; $HP9885_default_dav = &dav[sc: 12, ba: -1, du: 0, dv: -1]; $harddisc_default_letter = &'H'; {9134} $harddisc_default_dav = &dav[sc: 7, ba: 3, du: 0, dv: -1]; $local_printer_default_dav = Warning: 9 *) "(* This module should not be modified! *) "(* *) "(**P)   import "sysglobals, loader, options, ldr; "  export " "const {mass s7 [=nteger); "begin $if (parameterupper_bound) then &halt(-8) {value range error} "end;  $page$   function value(symbol: string255): integer; "var $modp: moddescptr; $ptr, valueptr: addrec; $found: boolean;  {bus address} &p_du: byte; {disc unit} &p_dv: byte; c{disc volume} &p_byteoffset: integer; {physical starting byte of volume} &p_devid: integer; ){device identifier (driver dependent)}  Jteger); &end; $ $tm_proc: &packed record case integer of (0: (tm: amtype); (1: (value, slink: integer); &end; " "begin {tea} $if temp_unitable=nil then halt(-3); {unassigned pointer} $ $dam_proc.value := value(dam_name);  ? := not p_uisblkd; {assume case is significant} ,uisfixed ):= p_uisfixed; ,ureportchange := true; {do report media changes} ,pad  := 0;  {not used} ,uisblkd $ := p_uisblkd; ,if uisblkd then '"procedure tea_mini(un:unitnum;ds:ds_type;du:byte); "procedure tea_HP9885(un:unitnum;ds:ds_type;sc,du:byte;block_os:shortint); "procedure tea_HP9895(un:unitnum;ds:ds_type;sc,ba,du:byte;block_os:shortint); "procedure tea_HP8290X(un:unitnum;ds:ds_type;sc"begin {value} $value := 0; $found := false; $modp := sysdefs; $while (modp<>nil) and not found do &with modp^ do (begin *ptr := defaddr; *while (ptr.a0) and (tm_proc.value<>0) then {assign the entry} &begin ( (with temp_unitable^[un] do *begin ,dam  := dam_proc.dam; ,tm ,ba,du:byte); "procedure tea_amigo_sv(un:unitnum;ds:ds_type;sc,ba,du:byte;os:integer;lr:char;mb:integer); "procedure tea_CS80_disc(un:unitnum;ds:ds_type;sc,ba,du,dv:byte;os,id,mb:integer); "procedure tea_CS80_tape(un:unitnum;ds:ds_type;sc,ba,du,dv:byte;~(ptr.syp^)+1; .ptr.a := ptr.a+ord(odd(ptr.a)); .valueptr.a := ptr.a+2; .if found then 0value := valueptr.vep^.value; .ptr.a := ptr.a+ptr.gvp^.short; ,end; {while} *modp := link; (end; {with modp^} "end; {value}    procedure tea {lowest-level  >p_umediavalid: boolean; {open files are valid} ${ p_uuppercase: boolean; {volume name should be uppercased} &p_uisfixed: boolean; {medium not removable flag} ${ p_ureportchange: boolean; {driver directive to report/ignore medium ch  := tm_proc.tm; ,sc := p_sc; ,ba := p_ba; ,du := p_du; ,dv 4:= p_dv; ,byteoffset := p_byteoffset; ,devid  := p_devid; ,uvid := p_uvid; ,dvrtemp  := 0; id:integer); "  implement {ctr}   const "T = true; {abbreviation for tea procedure calls} "F = false; {abbreviation for tea procedure calls} "  var "temp_unitable: unitableptr;  "  procedure check(parameter, lower_bound, upper_bound: is1Table Entry Assignment procedure} $( un:unitnum; ${unit number} &dam_name: string255; 0 {directory access method} &tm_name: string255; ({transfer method (driver)} &p_sc: byte; {select code} &p_ba: byte;  xanges} ${ p_pad: 0..1 "{(not used)} &p_uisblkd: boolean; {blocked volume flag} &p_umaxbytes: integer ); {volume size in bytes} " "var $dam_proc: &packed record case integer of (0: (dam: damtype); (1: (value, slink: in " {always initially zero!} ,letter := p_letter; ,offline := false; _ {always initially online!} ,uisinteractive := p_uisinteractive; ,umediavalid := false; - {never valid to start with} ,uuppercase 7 [=OXR procedure tea_kbd(un:unitnum); "begin $tea(un,'MISC_UNBLOCKEDDAM','KEYS_KBDIO',0,'SYSTERM',#0,F,T,F,0); "end; $   procedure tea_mini(un:unitnum;ds:ds_type;du:byte); "begin $check(du, 0, 1); $tea(un,dam(ds),'MINI_MINIIO',0,0,du,0,0,0,'  procedure tea_HP9885(un:unitnum;ds:ds_type;sc,du:byte;block_os:shortint); "var $os: integer; "begin $check(sc, 8, 31); $check(du, 0, 3); $os := block_os*512; $check(os, 0, svol_bytes(HP9885_mp)-1); $tea(un,dam(ds),'F9885DVR_F9885IO',sc,0,du,0,os,2 and -(p_byteoffset=0) then {remember this unit number!} ,bootdevice_lun := un; & &end; {if} "end; {tea}  $page$ $  function dam(ds: ds_type): string255; "begin $case ds of &primary_dam: (if primary_lms_dam=LIF *then dam := 'LIFMODULE_LIFDAM'number_vols: shortint; mp: mp_type): integer; "begin $vol_offset := (mp.tpm div number_vols)*current_vol*mp.bpt; "end; "   function block_boundaries(mp: mp_type): mp_type; "begin $block_boundaries.tpm := mp.tpm*mp.bpt div 512; $block_boundaries.b ',HPmini,F,F,T,svol_bytes(HPmini_mp)); "end; "   procedure tea_boot(un: unitnum); "begin $tea(un,'BOOTDAMMODULE_BOOTDAM','BOOTDAMMODULE_BOOTTM',0\,'',#0,F,F,T,maxint); "end;    procedure tea_srm(un:unitnum;sc,{node}ba,{unit}du:byte 80,'',HP9885,F,F,T,svol_bytes(HP9885_mp)-os); "end;  "  procedure tea_HP9895(un:unitnum;ds:ds_type;sc,ba,du:byte;block_os:shortint); "var $os: integer; "begin $check(sc, 7, 31); $check(ba, 0, 7); $check(du, 0, 3); $os := block_os*512; $check(os *else dam := 'UCSDMODULE_UCSD_DAM'; &secondary_dam: (if primary_lms_dam=LIF *then dam := 'UCSDMODULE_UCSD_DAM' *else dam := 'LIFMODULE_LIFDAM'; &LIF_dam: (dam := 'LIFMODULE_LIFDAM'; &UCSD_dam: (dam := 'UCSDMODULE_UCSD_DAM'; $end; {case} "end; pt := 512; "end;  $page$   { standard driver-oriented table entry assignment procedures }    procedure tea_nounit(un:unitnum); "begin $tea(un,'INITUNITS_NODAM','INITUNITS_NOUNIT',06,'',#0,F,F,F,0); "end; $   procedure tea_memory_v ); "begin $check(sc, 7, 31); $check(ba, 0, 63); $if du<>0 then check(du, 7, 26); $tea(un,'SRMDAMMODULE_SRMDAM','SRMAMMODULE_SRMAM',sc,ba,du,0,0,0,'',SRM,F,T,T,maxint); "end;    procedure tea_local_printer(un:unitnum;sc,ba:byte;uvid:vid;bto:in, 0, svol_bytes(HP9895_mp)-1); $tea(un,dam(ds),'AMIGODVR_AMIGOIO',sc,ba,du,0,os,0,'',HP9895,F,F,T,svol_bytes(HP9895_mp)-os); "end;    procedure tea_HP8290X(un:unitnum;ds:ds_type;sc,ba,du:byte); "begin $check(sc, 7, 31); $check(ba, 0, 7); $check(   function svol_bytes(mp: mp_type): integer; "begin $svol_bytes := mp.bpt*mp.tpm; {single volume bytes} "end; "   function vol_bytes(current_vol, number_vols: shortint; mp: mp_type): integer; "var $tracks: integer; "begin  RBolume_dam(ds:ds_type); "begin $tea(0,dam(ds),'INITUNITS_NOUNIT',0q,'',RAM,F,T,T,0); "end;    procedure tea_crt(un:unitnum); "begin $tea(un,'MISC_UNBLOCKEDDAM','CRT_CRTIO',0%,'CONSOLE',#0,T,T,F,0); "end; $    teger); "begin $check(sc, 7, 31); $check(ba, 0, 30); $check(bto, 0, 60*60*1000); {one hour should be enough!} $tea(un,'MISC_UNBLOCKEDDAM','PRTDVR_PRTIO',sc,ba,0,0,0,bto,uvid,#0,F,T,F,0); "end;  $page$  ddu, 0, 3); $tea(un,dam(ds),'AMIGODVR_AMIGOIO',sc,ba,du,0,0,0,'',HP8290X,F,F,T,svol_bytes(HPmini_mp)); "end;    procedure tea_amigo_sv(un:unitnum;ds:ds_type;sc,ba,du:byte;os:integer;lr:char;mb:integer); "var $medium_size: integer; "begin #.umaxbytes := p_umaxbytes; *end; {with} ( (with bootdevice_dav do {see if this entry points to it} *if (p_letter=bootdevice_letter) and -((dam_name='LIFMODULE_LIFDAM') or (p_letter=SRM)) and -(p_sc=sc) and (p_ba=ba) and (p_du=du) and (p_dv=dv)#$tracks := mp.tpm div number_vols; {each vol gets this much} $if current_vol=number_vols-1 then &tracks := tracks+mp.tpm mod number_vols; {last vol gets any extra} $vol_bytes := tracks*mp.bpt; "end; "   function vol_offset(current_vol, 7 [=.dure tea_CS80_disc(un:unitnum;ds:ds_type;sc,ba,du,dv:byte;os,id,mb:integer); "{ $note: the uisfixed field is now assigned in the clearunit procedure "} "begin $check(sc, 7, 31); $check(ba, 0, 7); $check(du, 0, 7); $check(dv, 0, 7); $tea(un,dam(ds)y entry} $for lunit := 1 to maxunit do {copy the others; avoids symbol table search each time!} &temp_unitable^[lunit] := temp_unitable^[0]; "end;    procedure assign_and_clear_unit(lunit: unitnum); "var $f: fib; "begin $if temp_unitable=nil  "end;    procedure zap_assigned_unit(lunit: unitnum); "begin $tea_nounit(lunit); {zap the temp unitable entry} $unitable^[lunit] := temp_unitable^[lunit]; {now zap the real one!} "end;  $page$   function on_same_medium(lun1, lun2: unitnum)e^[i] do ,begin ,maxa(unitable^[lun1].umaxbytes, byteoffset + umaxbytes); ,zap_assigned_unit(i); & end; *end; &end; "end;   end; {ctr}  $page$   module BRstuff; {BOOTROM stuff}  "(**),'CS80DVR_CS80IO',sc,ba,du,dv,os,id,'',CS80disc,F,F,T,mb); "end;    procedure tea_CS80_tape(un:unitnum;ds:ds_type;sc,ba,du,dv:byte;id:integer); "{ # important differences from CS80 disc: &1) byteoffset always assumed to be zero  J then halt(-3); {unassigned pointer} $with unitable^[lunit], f do &if (letter<>RAM) or (lunit=0) then (begin *unitable^[lunit] := temp_unitable^[lunit]; *funit := lunit; *call(tm, addr(f), clearunit, lunit, 0, 0);  : boolean; "var $uep: ^unitentry; "begin {on_same_medium} $uep := addr(unitable^[lun2]); $with unitable^[lun1] do &on_same_medium := (sc=uep^.sc) and (ba=uep^.ba) and 8(du=uep^.du) and (dv=uep^.dv) and 8(letter=uep^.letter);  L "(* *) "(* Warning: 9 *) "(* This module should not be modified! *) "(* *) "(** )  $check(sc, 7, 31); $check(ba, 0, 7); $check(du, 0, 7); $case lr of &HP913X_A: medium_size := svol_bytes(HP913X_A_mp); &HP913X_B: medium_size := svol_bytes(HP913X_B_mp); &HP913X_C: medium_size := svol_bytes(HP913X_C_mp); &otherwise h&2) umaxbytes is dependent upon the media loaded, thus it is set by the )driver at clearunit time and whenever it detects a media change. $BOTTOM LINE: the tape CANNOT be partitioned into multiple volumes! "} "begin $check(sc, 7, 31); $check(ba, 0, *offline := uisblkd and (ioresult<>0); (end; {with} "end; "   procedure assign_temp_unitable; "var $lunit: unitnum; "begin $if temp_unitable=nil then halt(-3); {unassigned pointer} $lockfiles; {close all standard system files} $for lunit  #"end; {on_same_medium}    procedure maxa(var a: integer; b: integer); "begin $if a < b then a := b; "end;    procedure remove_extraneous_volumes(lun1, lun2: unitnum); "var $all_present: boolean; $i: unitnum; "begin $if sysunit_o{alt(-8); {value range error} $end; {case} $check(os, 0, medium_size-1); $if os mod 256<>0 then halt(-8) {value range error}; $check(mb, 1, medium_size-os); $tea(un,dam(ds),'AMIGODVR_AMIGOIO',sc,ba,du,0,os,0,'',lr,F,T,T,mb); "end;  $page$   proce7); $check(du, 0, 7); $check(dv, 0, 7); $tea(un,dam(ds),'CS80DVR_CS80IO',sc,ba,du,dv,0,id,'',CS80tape,F,F,T,0); "end;  $page$ "  procedure create_temp_unitable; "var $lunit: unitnum; "begin $new(temp_unitable); $tea_nounit(0); {assign one dumm := 0 to maxunit do &assign_and_clear_unit(lunit); "end; "   function sysunit_ok(system_unit: unitnum): boolean; "begin $sysunit := system_unit; $initsysunit; $with unitable^[system_unit] do &sysunit_ok := uisblkd and not offline and (uvid<>''); Wk(lun1) then &begin (all_present := true; (i := lun1 + 1; (while (i <= lun2) and all_present do *begin all_present := all_present and sysunit_ok(i); i := i + 1; end; (if not all_present then *begin *for i := lun1 + 1 to lun2 do with unitabl7 [=y }2bootdevice_dav.ba := 0; 0CS80disc, CS80tape: {special volume/unit field} 2begin 4bootdevice_dav.du := un4; 4bootdevice_dav.dv := vn4; 2end; 0otherwise {do nothing}; .end; {case} ,end; {else} (end; {with} "end;   end; {BRstuff}  $page$  dent: shortint; var letter: char); "return_CS80_parms_type = procedure(var devid: integer; var mp: mp_type);  "proc_type = $packed record case integer of &0: (value, slink: integer); &1: (up: uep_proc_type); &2: (gai: HPIBget_amigo_ident_type); ` import "sysglobals, options, ctr;   export " "function internal_mini_present: boolean; "procedure get_bootdevice_parms(var bootdevice_letter: char; var bootdevice_dav: dav);   implement {BRstuff}   type " "signed4 = -8..7; "signed8 q$end; {msus_type} $  var " "ROM_ID[16382]: {BOOTROM identification word} $shortint; " "ndrives[-296]: {Maximum Unit for Internal Mini-Floppy} $packed record b: signed8; end; " "default_msus[-292]: {boot device's MSUS} $msus_type;  $page$ *NODEVICE, NODEVICE, NODEVICE, NODEVICE, NODEVICE, NODEVICE, NODEVICE, NODEVICE ]; $null_dav = dav[sc: 0, ba: 0, du: 0, dv: 0]; "begin $bootdevice_dav := null_dav; $if ROM_ID<0 then {1.0 Boot ROM on 9826; internal minifloppy only} &bootdevice_lette Ћ module scanstuff;  "(**) "(* *) "(* Warning: 9 *) "(* This module should not be modified! *) "(*   = -128..127; " "fmt_type = {format field in the msus byte} $(f0,f1,f2,f3,f4,f5,f6,f7); " "dev_type = {device field in the msus byte} $( d0, d1, d2, d3, d4, d5, d6, d7, d8, d9,d10,d11,d12,d13,d14,d15, %d16,d17,d18,d19,d20,d21,d22,d23,d24,d25,d26,h  function internal_mini_present: boolean; "begin $if ROM_ID<0 &then internal_mini_present := true {1.0 BOOTROM on 9826} &else internal_mini_present := ndrives.b<>-1; {2.0 or greater BOOTROM} "end; "   procedure get_bootdevice_parms =r := HPmini $else {2.0 or greater Boot ROM} &with default_msus do (begin *bootdevice_dav.sc := sc; *bootdevice_dav.ba := ba; *bootdevice_dav.du := un; *if fmt=f7 then {non sector-oriented device} ,case dev of .d1: bootdevice_letter := SRM; !  *) "(**)   import "sysglobals, options, ctr; "  export " "procedure init_scanstuff; "function scanneddevice_letter(scan_dav: dav): char; "procedure get_CS80_parms(CS80_dav: dav; var devid: integd27,d28,d29,d30,d31); " "msus_type = {BOOTROM's mass storage unit specifier} $packed record case boolean of &false: {8-bit unit number} (( fmt: fmt_type; {directory format} *dev: dev_type; {device} *un: signed8; {8-bit unit number} *sc: signe(var bootdevice_letter: char; var bootdevice_dav: dav); "type $letter_table_type = array[dev_type] of char; "const $letter_table = {BOOTROM dev to Pascal letter conversion table} &letter_table_type ([ HPmini, NODEVICE, NODEVICE, NODEVICE, HP9895,   .otherwise bootdevice_letter := NODEVICE; ,end {case} *else {sector-oriented device} ,begin .bootdevice_letter := letter_table[dev]; .case bootdevice_letter of 0HPmini: 2begin 4bootdevice_dav.sc := 0; 4bootdevice_dav.ba := 0; 2end; 0HP9885: er; var mp: mp_type); "  implement {scanstuff}    type "uep_type = ^unitentry;  "uep_proc_type = procedure(uep: uep_type); "HPIBget_amigo_ident_type = procedure(uep: uep_type; var ident: shortint); "get_letter_type = procedure(uep: uep_type; i^d8; {select code} *ba: signed8 {bus address} ); &true: {4-bit volume / 4-bit unit number for CS80 discs} (( pad: signed8; {format/device byte} *vn4: signed4; {4-bit volume number} *un4: signed4; {4-bit unit number} );  HP8290X, HP9885, HP913X_A, *HP913X_B, HP913X_C, NODEVICE, NODEVICE, NODEVICE, NODEVICE, NODEVICE, NODEVICE, *CS80disc, CS80tape, NODEVICE, NODEVICE, NODEVICE, NODEVICE, NODEVICE, NODEVICE, 7 [=proc: proc_type; " "get_amigo_letter_proc: proc_type; "get_CS80_letter_proc: proc_type; "return_CS80_parms_proc: proc_type; " "bkgnd_and_dischpib_present: boolean;  $page$   function scanneddevice_letter(scan_dav: dav): char; " "type $amigo_clUnd_and_dischpib_present then &try (ue.sc := scan_dav.sc; (ue.ba := scan_dav.ba; (ue.du := scan_dav.du; (ue.dv := scan_dav.dv; (call(allocate_bkgnd_info_proc.up, addr(ue)); (call(HPIBcheck_sc_proc.up, addr(ue)); (call(HPIBget_amigo_ident_proc.gai, a  := null_mp; &end; {else} "end; {HPCS80_mp}    procedure init_scanstuff; "begin {init_scanstuff} $allocate_bkgnd_info_proc.value := value('BKGND_ALLOCATE_BKGND_INFO'); $deallocate_bkgnd_info_proc.value := value('BKGND_DEALLOCATE_BKGND_INFO');  **) "(* Caution: *) "(* Modify this section only if the desired *) "(* configuration cannot be achieved by *) "(* modifying the OPTIONS module. *) "(***ass_type = {upper three bits of the first ident byte} &(storage, display, data_communication, processor, 'stimulus, mesasurement, unassigned6, unassigned7); " "var $ue: unitentry; $ident: &packed record case integer of (0: (word: shortint); (1: (Oddr(ue), ident.word); (case ident.amigo_class of *storage: ,if ident.upper_byte=2 .then set_scanneddevice_letter(get_CS80_letter_proc) .else set_scanneddevice_letter(get_amigo_letter_proc); *display: ,scanneddevice_letter := PRINTER; *otherwise ,{ b$abort_bkgnd_process_proc.value := value('BKGND_ABORT_BKGND_PROCESS'); $HPIBcheck_sc_proc.value := value('DISCHPIB_HPIBCHECK_SC'); $HPIBget_amigo_ident_proc.value := value('DISCHPIB_HPIBGET_AMIGO_IDENT'); $ $get_amigo_letter_proc.value ***)   import "sysglobals, fs, ldr, options, ctr, BRstuff, scanstuff, bootDAMmodule;   const "srmsysprefix = '/WORKSTATIONS/SYSTEM'; "unassigned_dav = $dav[sc: -1, ba: -1, du: -1, dv: -1];   var "HP8290X_dav: davupper_byte, lower_byte: byte); (2: (amigo_class: amigo_class_type); &end; " "procedure set_scanneddevice_letter(get_letter_proc: proc_type); $var &device_letter: char; $begin {set_scanneddevice_letter} &if get_letter_proc.value<>0 then (begin do nothing}; (end; {case} (call(deallocate_bkgnd_info_proc.up, addr(ue)); &recover (call(abort_bkgnd_process_proc.up, addr(ue)); "end; {scanneddevice_letter}  $page$   procedure get_CS80_parms(CS80_dav: dav; var devid: integer; var mp: mp_type);   := value('AMIGODVR_GET_LETTER'); $get_CS80_letter_proc.value := value('CS80DVR_GET_LETTER'); $return_CS80_parms_proc.value := value('CS80DVR_RETURN_CS80_PARMS'); " $bkgnd_and_dischpib_present := (allocate_bkgnd_info_proc.value<>0) and ; "HP9895_dav: dav; "HP9885_dav: dav; "local_printer_dav: dav; "SRM_dav: dav; "harddisc_dav: dav; "harddisc_letter: char; "CS80tape_dav: dav; " "scanner_dav: dav; "i,j: shortint; "bus_address: shortint; "mp: mp_type; "nvols: shortint; &3: (gl: get_letter_type); &4: (rcp: return_CS80_parms_type); $end;    var "allocate_bkgnd_info_proc: proc_type; "deallocate_bkgnd_info_proc: proc_type; "abort_bkgnd_process_proc: proc_type; "HPIBcheck_sc_proc: proc_type; "HPIBget_amigo_ident_H*call(get_letter_proc.gl, addr(ue), ident.word, device_letter); *scanneddevice_letter := device_letter; (end; {if} $end; {set_scanneddevice_letter} " "begin {scanneddevice_letter} $scanneddevice_letter := NODEVICE; {until proven otherwise} $if bkgH"const $null_mp = mp_type[ tpm: -1, bpt: -1]; "begin {HPCS80_mp} $if (scanneddevice_letter(CS80_dav) in [CS80disc, CS80tape]) and '(return_CS80_parms_proc.value<>0) then &call(return_CS80_parms_proc.rcp, devid, mp) $else &begin (devid := -1; (mp B(deallocate_bkgnd_info_proc.value<>0) and B(abort_bkgnd_process_proc.value<>0) and B(HPIBcheck_sc_proc.value<>0) and B(HPIBget_amigo_ident_proc.value<>0); "end; {init_scanstuff}    end; {scanstuff}  $page, range on$   {program ctable}  "(7 [=k et_found or (temp_letter=NODEVICE) or (temp_dav.du>7); " "end; {search_for_complementary_CS80_unit}  $page$   begin {ctable} " "{ various initializations } " "call(cleariohook); {init the IO cards in case the BOOTROM drivers messed with them} "ir mass storage devices and a local printer } " "with scanner_dav do $begin &du := 0; &dv := 0; &i := 0; &repeat (i := i+1; (sc := sc_list[i]; (for bus_address := 0 to 7 do *begin ,ba := bus_address; ,assign_dav(scanneddevice_letter(scanner_davorce to next lower even number if odd} (du := du-ord(odd(du)); $ $case device_letter of & &HP8290X: (HP8290X_dav := device_dav; & &HP9885: (HP9885_dav := device_dav; & &SRM: (SRM_dav := device_dav; & &CS80tape: (CS80tape_dav := device_dav; @(local_printer_dav := device_dav; ( &otherwise ({do nothing}; $ $end; {case} " "end; {assign_dav}     procedure search_for_complementary_CS80_unit(target_device_letter: char; device_dav: dav); " "var $temp_dav: dav; $temp_letter: char;  ATnit_scanstuff; " " "{ default device address vector assignments } " "HP9885_dav := HP9885_default_dav; ${overridden if bootdevice} "SRM_dav  := SRM_default_dav;  {overridden if bootdevice} ), scanner_dav); *end; {for} &until i>=sc_list_length; $end; {with} $ " "{ get the bootdevice parameters & assign its dav } " "get_bootdevice_parms(bootdevice_letter, bootdevice_dav); "assign_dav(bootdevice_letter, bootdevice_dav); ^"devid: integer; "dummy_boolean: boolean; " "  function unit_prefix_successful(dirname: fid): boolean; "var $unitnum: integer; $kvid: vid; "begin {unit_prefix_successful} $doprefix(dirname, kvid, unitnum, true); $unit_prefix_successful := ioresu& &HP913X_A, HP913X_B, HP913X_C, CS80disc: (begin *harddisc_letter := device_letter; *harddisc_dav := device_dav; (end; & &HP9895: {question: a real 9895 or a 913X?} (with temp_dav do *begin ,temp_dav := device_dav; ,du := 3; {point to unit 3Y$target_found: boolean; " "begin {search_for_complementary_CS80_unit} $ $temp_dav := device_dav; $temp_dav.du := 0; $temp_dav.dv := 0; $temp_letter := target_device_letter; {anything other than NODEVICE} $target_found := false; $ $repeat &if t `"local_printer_dav := local_printer_default_dav; {may be overridden by scan} "HP8290X_dav := HP8290X_default_dav; {may be overridden by either} "HP9895_dav := HP9895_default_dav; 0{may be overridden by either} "harddisc_dav Flt=ord(inoerror); "end; {unit_prefix_successful} "   function same_9895_913X_davs: boolean; "begin {same_9895_913X_davs} $same_9895_913X_davs := (harddisc_letter=HP9895) and ;(harddisc_dav.sc=HP9895_dav.sc) and ;(harddisc_dav.ba=HP9895_dav.ba); } ,repeat {see if all four units exist} .not_a_913X := scanneddevice_letter(temp_dav)<>HP9895; .du := du-1; ,until (du<0) or not_a_913X; ,if not_a_913X then .begin 0HP9895_dav := device_dav; 0if same_9895_913X_davs then {zap the 913X dav} 2hardd zemp_dav.du<>device_dav.du then (begin *temp_letter := scanneddevice_letter(temp_dav); *target_found := temp_letter=target_device_letter; *if target_found then ,assign_dav(temp_letter, temp_dav); (end; {if} &temp_dav.du := temp_dav.du+1; $until targ  := harddisc_default_dav; {may be overridden by either} "harddisc_letter := harddisc_default_letter; {may be overridden by either} "CS80tape_dav := unassigned_dav; @{assigned only if explicitly found} " " "{ scan the HPIB's fo"end; {same_9895_913X_davs}  $page$   procedure assign_dav(device_letter: char; device_dav: dav); " "var $temp_dav: dav; $not_a_913X: boolean; " "begin {assign_dav} $ $if device_letter in [HP8290X, HP9895, HP9885] then &with device_dav do {fisc_dav := unassigned_dav; .end {then} ,else .begin 0harddisc_letter := device_letter; 0harddisc_dav := device_dav; 0if same_9895_913X_davs then {zap the 9895 dav} 2HP9895_dav := unassigned_dav; .end; {else} *end; {with}  $page$ & &PRINTER: 7 [="bootdevice_lun := 0; {set otherwise in procedure tea if boot unit assigned} " " "{ CS80 complementary unit assignments } " "if bootdevice_letter=CS80disc then $search_for_complementary_CS80_unit(CS80tape, bootdevice_dav) "else if bootdevice_lette(tea_HP8290X ( 4, primary_dam, sc, ba, du+1); &end; {then} " "with SRM_dav do $tea_srm( 5, sc, ba, du); $ "with local_printer_dav do $tea_local_printer( 6, sc, ba, {uvid} 'PRINTER', local_printer_timeout); " " " "{ 8" floppies } " "with HP98&otherwise mp := null_mp; $end; {case} $ $if mp.bpt<>0 then &begin (nvols := mp.tpm div ((minimum_volume_size+mp.bpt-1) div mp.bpt); (if nvols=0 then nvols := 1; {special case: entire medium smaller than min_vsize!} (if nvols>maximum_number_vols ,{unrecognized letter}; ( (end; {case} " "$end$ { local hard disc assignment section }  $page$ " "{ CS80 tape assignment section } " "$if true$ $ $with CS80tape_dav do &if sc>0 then (begin *get_CS80_parms(CS80tape_dav, devid, mp); *tea_CS8r=CS80tape then $search_for_complementary_CS80_unit(CS80disc, bootdevice_dav) "else if harddisc_letter=CS80disc then $search_for_complementary_CS80_unit(CS80tape, harddisc_dav) "else if CS80tape_dav.sc>0 then $search_for_complementary_CS80_unit(CS80diD95_dav do $if sc>0 then &begin (tea_HP9895( 7, primary_dam, sc, ba, du+0, {block_offset} 0); (tea_HP9895( 8, primary_dam, sc, ba, du+1, {block_offset} 0); &end; {with} " "with HP9885_dav do $begin &tea_HP9885( 9, primary_dam, sc, du+0, {block_offs S then nvols := maximum_number_vols; & if multi_volume_option=single_volume then nvols := 1; &end; $ $with harddisc_dav do &if sc>0 then (case harddisc_letter of * *HP9895: {9895 ident with all four units present; probably a HP913X} ,for i := 0 t r0_tape (41, LIF_dam, sc, ba, du, dv, ={devid} devid); (end; {if} ( "$end$ { CS80 tape assignment section}  $page$  " "{ alternate access entries } " " "{ secondary directory access method entries for the mini/micro floppies } " "if internal_asc, CS80tape_dav);  $page$ " "{ Create a temporary table & fill it with dummy entries } " "create_temp_unitable; " " " "{ standard assignments: avoid changing } " "tea_memory_volume_dam(primary_dam); " "tea_crt( 1); "tea_kbd( 2); " "if inteet} 0); &tea_HP9885(10, primary_dam, sc, du+1, {block_offset} 0); $end; {with}  $page$ " "{ local hard disc assignment section } " "$if true$ $ $case harddisc_letter of &HP9895: mp := HP9895_mp; &HP913X_A: mp := HP913X_A_mp; &HP913X_B: mp :=  jo 3 do .tea_HP9895(11+i, primary_dam, sc, ba, {du} i, {block_offset} 0); * *HP913X_A, HP913X_B, HP913X_C: ,for i := 0 to nvols-1 do .tea_amigo_sv(11+i, primary_dam, sc, ba, du, A{offset} vol_offset(i, nvols, mp), A{letter} harddisc_letter, A{umaxbymini_present and (bootdevice_letter<>HP8290X) then $begin &tea_mini(43, secondary_dam, {du} 0); &tea_mini(44, secondary_dam, {du} 1); $end {then} "else $with HP8290X_dav do &begin (tea_HP8290X(43, secondary_dam, sc, ba, du+0); (tea_HP8290X(44, secrnal_mini_present and (bootdevice_letter<>HP8290X) then $begin &tea_mini( 3, primary_dam, {du} 0); &tea_mini( 4, primary_dam, {du} 1); $end {then} "else $with HP8290X_dav do &begin (tea_HP8290X ( 3, primary_dam, sc, ba, du+0);  ^HP913X_B_mp; &HP913X_C: mp := HP913X_C_mp; &CS80disc: begin 2get_CS80_parms(harddisc_dav, devid, mp); 2if mp.tpm=1 then {track partitioning info unavailable...} 4mp := block_boundaries(mp); {will have to fake it!} 0end;   tes} vol_bytes(i, nvols, mp)); ( *CS80disc: ,for i := 0 to nvols-1 do .tea_CS80_disc (11+i, primary_dam, sc, ba, du, dv, C{offset} vol_offset(i, nvols, mp), C{devid} devid, C{umaxbytes} vol_bytes(i, nvols, mp)); * *otherwise  f{kondary_dam, sc, ba, du+1); &end; {with} " " " "{ duplicate entries for prefixing down the SRM } " "(#***) &7 [=  axbytes} vol_bytes(i, nvols, mp)); "$end$ " " "$if false$ { HP913X_C } $mp := HP913X_C_mp; ${ mp := block_boundaries(mp); {override track boundary partitioning} $nvols := 14; $for i := 0 to nvols-1 do &tea_amigo_sv(11+i, primary_dam, {sc} 7, {ba +vol_offset(i, nvols, mp), ;{devid} devid, ;{umaxbytes} vol_bytes(i, nvols, mp)); "$end$ " " " " "{ assign the new unitable and unitclear all units } " "assign_temp_unitable; " " "{ prefix the primary and secondary SRM unit entries } " "if no Lu); {free} &{ tea_srm( 46, sc, ba, du); {free} &tea_srm( 45, sc, ba, du); {for possible use as the system unit} $end; {with} " " " "{ secondary directory access method entries for the floppies } " "with HP9895_dav do $if sc>0 then &begin (t "$if false$ { HP913X } $for i := 0 to 3 do &tea_HP9895(11+i, primary_dam, {sc} 7, {ba} 0, {du} i, {block_offset} 0); "$end$ " " "$if false$ { HP913X_A } $mp := HP913X_A_mp; ${ mp := block_boundaries(mp); {override track boundary partitioning} $n } 0, {du} 0, 9{offset} vol_offset(i, nvols, mp), 9{letter} HP913X_C, 9{umaxbytes} vol_bytes(i, nvols, mp)); "$end$  $page$ " "$if false$ { current Command Set '80 discs } &devid := 7908; nvols := 16; mp.tpm := 5* 370; mp.bpt := 35*256; {7908} ${ t unit_prefix_successful('#5:/') then ${do nothing}; {tries to set up uvid for possible default unit assignment below} " "{ if not unit_prefix_successful('#42:/?') then zap_assigned_unit(42); {free} "{ if not unit_prefix_successful('#46:/?') then zap ea_HP9895(47, secondary_dam, sc, ba, du+0, {block_offset} 0); (tea_HP9895(48, secondary_dam, sc, ba, du+1, {block_offset} 0); &end; {with} " "with HP9885_dav do $begin &tea_HP9885(49, secondary_dam, sc, du+0, {block_offset} 0);  vols := 4; $for i := 0 to nvols-1 do &tea_amigo_sv(11+i, primary_dam, {sc} 7, {ba} 0, {du} 0, 9{offset} vol_offset(i, nvols, mp), 9{letter} HP913X_A, 9{umaxbytes} vol_bytes(i, nvols, mp)); "$end$ " " "$if false$ { HP913X_B }    devid := 7911; nvols := 27; mp.tpm := 3* 572; mp.bpt := 64*256; {7911} ${ devid := 7912; nvols := 30; mp.tpm := 7* 572; mp.bpt := 64*256; {7912} ${ devid := 7933; nvols := 30; mp.tpm := 13*1321; mp.bpt := 92*256; {7933}  0_assigned_unit(46); {free} " "if not unit_prefix_successful('#45:'+srmsysprefix+srmnode(unitable^[45].sc)) then $if not unit_prefix_successful('#45:'+srmsysprefix) then &zap_assigned_unit(45); $ "  "(* NOTE: Additional duplicate SRM entries may be assigned here, then *) "(* prefixed down below after assigning the temp_unitable. However *) "(* for correct behavior in assigning the system unit, specifically *) "(* if booting off the S &tea_HP9885(50, secondary_dam, sc, du+1, {block_offset} 0); $end; {with}  $page$ " "{ templates for "manually" specifying mass storage table entry assignments } " " "$if false$ { HP8290X } $tea_HP8290X( 3, primary_dam, {sc} 7, {ba} 0, {du} 0); $ Y$mp := HP913X_B_mp; ${ mp := block_boundaries(mp); {override track boundary partitioning} $nvols := 9; $for i := 0 to nvols-1 do &tea_amigo_sv(11+i, primary_dam, {sc} 7, {ba} 0, {du} 0, 9{offset} vol_offset(i, nvols, mp), 9{letter} HP913X_B, 9{um ${ devid := 7935; nvols := 30; mp.tpm := 13*1321; mp.bpt := 92*256; {7935} ${ mp := block_boundaries(mp); {override track boundary partitioning} $for i := 0 to nvols-1 do &tea_CS80_disc (11+i, primary_dam, {sc} 7, {ba} 0, {du} 0, {dv} 0, ;{offset} _RM, unit #45 must be the assigned AFTER all *) "(* the other SRM units have been assigned! *) "(#**;*)  "with SRM_dav do $begin &{ tea_srm( 42, sc, ba, d stea_HP8290X( 4, primary_dam, {sc} 7, {ba} 0, {du} 1); "$end$ " " "$if false$ { HP9895 } $tea_HP9895( 7, primary_dam, {sc} 7, {ba} 0, {du} 0, {block_offset} 0); $tea_HP9895( 8, primary_dam, {sc} 7, {ba} 0, {du} 1, {block_offset} 0); "$end$ " "  7 [= unit_list_length); $end; $ " "{ special case for default unit assignment } " "if sysunit=45 then {set the default unit to the primary SRM unit entry} $dkvid := unitable^[5].uvid; $ " "{ re-open the standard system files } " "openfiles;   &`MBNA .^". ]g ;|NJN^ _ NNA nCSbB B.-m.@JVg-n n-h.@ n"(Ҩ Nv^g"nErRA f SAfp`B@"npЮ @ n"(Ҩ Nv^g"nErRA f SAfp`B@"npЮNvRNv-@ .<rӮNv .TNv-@J.g "n-Q np(ѮNv`^ n-P`.N^.NuNA n,CSb n(CSb nCSbJf ;|NJ X"{ remove extraneous local hard disc entries if necessary } " "if multi_volume_option=auto_volume then " begin $i := 11; $while i<40 do $ begin &j := i + 1; &while on_same_medium(i, j) and (j <= 40) do j := j+1; &if unitable^[i].letter =  end. {ctable} x ,CTBETA1NOPTIONSJNJpdmD@H/Hz~N4JgNpdmD@H/HzdN4JgDJ~g NNB-lB~J-lgHmiHz4N;B-lBi~B-l+ml~,pQ-lfN^Nu<(NORMALcommand?output file fullinteger requir $ ASM_ASMASM_DIVASM_INASM_MOD ASM_MOVELASM_MPY ASM_NEWBYTES ASM_SAPPENDBOOTDAMMODULE_BOOTDAMMODULEBOOTDAMMODULE_SRMNODE FS_DOPREFIXFS_FSLDR_INITSYSUNITLDR_LDR LDR_LOCKFILES LDR_OPENFILESLOADER LOADER_LOADER MINI_MINI MIS Fharddisc_letter then (remove_extraneous_volumes(i, j-1); $ i := j; $ end; $end;  $page$ " "{ assign the new system unit } " "if system_unit<>0 then {the user has explicitly specified the system unit} $dummy_boolean := sysunit_ok(system_un  7edfile header fullnot enough memoryinteger too large' is not a code fileunexpected end of code errors during linkingimproper link info formatsymbols defined recursivelyduplicate symbol definitionprinter or list file not on lineunable to close output, C_MISC SYSGLOBALSSYSGLOBALS_SYSGLOBALSL8 Copyright 1983 Hewlett-Packard Co. All rights reserved. %(,HOPTIONSRN%(P R` )it) "else if (bootdevice_lun<>0) and not (bootdevice_letter in [HPmini, HP8290X]) then $dummy_boolean := sysunit_ok(bootdevice_lun) "else {search for the system unit} $begin &i := 0; &repeat (i := i+1; &until sysunit_ok(sysunit_list[i]) or (i>=sys  ~L8 Copyright 1983 Hewlett-Packard Co. All rights reserved. .%(,tOPTIONSRN%(P -,+ Nu tJ -,+ Nu&`MBNA .^". ]g ;|NJN^ _ NNA nCSbB B.-m.@JVg-n n-h. 7 [=  H<YHzjN~ Nv/NN^ _ NF9885DVR_F9885IONA0.H//</<N.0. H/B/<N0. H/B/<N0.Hr -@/.BYHzNSNvN?.Hn?.NHnHzJ?.?. ?. Bg/.BHz0<HB'B'<YHzN Nv/NN^ _ N~0.H/B/<Nj0. H/B/<NV?.Hn?.NnHnHz:?.?.?.?. B/.Hz<KB'B'<BNDN^ _NCS80DVR_CS80IONAHm/< (NBgNBnRn m"m0.8CHPHQ/<8N n2mN^NuNAfJf ;|NJ m0.  3(3VDJg!n4JW2. mW4."mW6.$mW8.&mWzG.WACD~RG f SGf|`B.-Wg;n0N^ _*NLIFMODULE_LIFDAMNA0.@2;N<p`A$n CSb`A$n CSb`b`A SYSTERM KEYS_KBDIOMISC_UNBLOCKEDDAMNA0.H/B/<NF?. Hn?. N^HnHz8BgBg?.BgBBHz$<MB'B'<YHzN N4N^ _\ON MINI_MINIIONA?.HzJHz0BgBgBgBgBBHzB'B'B'</<NN^ _TONBOOTDAMMODULE_BOOTTMBOOTDAMMODULE_B W NAMIGODVR_AMIGOIONA0. H//</<NP0. H/B/<N<0.H/B/<N(?.Hn?.N@HnHz>?. ?. ?.BgBBHz&<NB'B'<YHzNNN^ _ NAMIGODVR_AMIGOIONA0.H//</<N0.H/B/<N0.H/B 8A-HfJnW nfrR(2Vg"m0.8$m2.8ACHPHQ/<8N.0..Hnj?<HnBB nfJ g/( "hNJV nf(3VD3(3N^ _TONNAJf ;|NJN=|Rn?.N n2mN^NuNA0.H+@ t$n CSb`AJ$n CSb`.A2$n CSb`A,$n CSbN^ _\ONLIFMODULE_LIFDAMUCSDMODULE_UCSD_DAMNA n-X-P/./.N-_ N^.NuNA n-X-P/.0. H/N-_0. S@Nvnf/.0. H/N Ѯ iOOTDAMNA0. H//</<Nb0. H/B/<?NNJng0.H//</<N.?.HzPHz:?. ?. ?.BgBBHz"<GB'<</<N&N^ _PONSRMAMMODULE_SRMAMSRMDAMMODULE_SRMDAMNA n CSb0.H//</<N0.H/B/< /<N|p. |UmP|nH@2;N*YHz.NR-_`.YHzN@-_`YHzN.-_` ;|NJ/.B .SNv/N .Jg ;|NJ/./< .Nv/N?.Hn?.NHnHz?.?.?.?././. Hz <QB'B'</.NN^ _NCS80DVR_CS80IONA0.H//</<N0.H/B/< ~W n)(W n)(W n)(W@ N^.NuNA n l n N^ _PONNAU?. N~Jg|0. R@Nv=@0.n_.gU?.NJ.RnNv`J.fd0. R@Nv=nnnN=@ m0.8A-H m0. 8Hp4 n YHnN-_BYHnN-_BJVJVgZ m0.08A-H nLHLHn'n%n#n!!n!nCESbB.n233.툁(33. @3鈁(33.爁(3333. ( &TS_NOUNITNABgHn?.NHnHz0BgJBBHz<RB'<<BNnN^ _TONINITUNITS_NOUNITNA?.HzBHz4BgXBBHzB'<<B'BNN^ _TONCONSOLE CRT_CRTIOMISC_UNBLOCKEDDAMNA?.HzBHz2Bg BBHzB'B'<B'BNN^ _TON 7 [= IJg/."nN nn N^ _PONNA n-X-P| J-g/-/Hz+OnnnnHnJg/- mNHnJg/- mNHnHnJg/- mN.mJn@2;N*p.fHm/N` Hm/N` |J ` -Pp. /HzNJg0.<r0.ANv=@p. |FmH|n@@2;N4Dz4$T44$44d444dddLH`LH`LH`LHt`n }LH~`LH=|UHnN&pHVr NBgN ?<Nh?<NpN-VU+@RN, -Rg$?<BgBgN(?<Bg?<N(`Z?<Bg0-A?0-A?0-A?N ?<Bg0-A?0-A?0-R@NvA?N ?<0-A?0-A?0-A?N?<0-A?0-A?Hz ! 2-hRAh`0-\S@Nvr;@TmTnx;Ahp mhNvA2?Bg0-~A?0-A?0-A?0-A?Y?-h?-\Hm^N /-XY?-h?-\Hm^NN 2-hRAh`JmtoNHmtHmXHm^NN?<)?<0-tA?0-vA?0-xA?0-zA?/-XN pN-VU+@ >DHnJg/- mN+o N,_+_HnJg/- mNN^.NuNA n-X-PJVUHn-@N .r/HzT-@N .g/. /.Jg/- mN` n nLHN^ _ N $@NAYHzN+_YHz*N CA0.S@Nv=@Jn].gJ.g*LHUNJgLH~`,n }LH~UNVJgLH`LH`N^ _\ON NA n-X-PLHBnBnn B.0.ng@UHnN&_.. Wr :/<.NJmo^?<Bg0-A?0-A?0-A?BgN ?. ?. ?.BgBBHz&<NB'B'<YHzNNN^ _ NAMIGODVR_AMIGOIONA0.H//</<N0.H/B/<N0.H/B/<N 7-HfJnW nfrR(2Vg"m0.8$m2.8ACHPHQ/<8N.0..Hnj?<HnBB nfJ g/( "hNJV nf(3VD3(3N^ _TONNAJf ;|NJN=|Rn?.N n2mN^NuNA0.H+@N mCSb`AJ$n CSb`.A2$n CSb`A,$n CSbN^ _\ONLIFMODULE_LIFDAMUCSDMODULE_UCSD_DAMNA n-X-P/./.N-_ N^.NuNA n-X-P/.0. H/N-_0. S@Nvnf/.0. H/N ѮNv/.NA0. H//</<Nj0. H/B/<?NVJng0.H//</<N6?.HzPHz:?. ?. ?.BgBBHz"<GB'<</<N.N^ _PONSRMAMMODULE_SRMAMSRMDAMMODULE_SRMDAMNA n CSb0.H//</<N0.H/B/<N/. Rp. |UmP|nH@2;N*YHz6NR-_`.YHzN@-_`YHzN.-_` ;|NJ/.B .SNv/N .Jg ;|NJ/./< .Nv/N?.Hn?.NHnHz?.?.?.?././. Hz <QB'B'</.NN^ _NCS80DVR_CS80IONA0.H//</<N0.H/B/<Ni(W n)(W n)(W@ N^.NuNA n l n N^ _PONNAU?. N~Jg|0. R@Nv=@0.n_.gU?.NJ.RnNv`J.fd0. R@Nv=nnnN=@ m0.8A-H m0. 8Hp4 n (ШYHnN-_BYHnN-_BJVJVgZ m0.08A-H nLHLHn'n%n#n!!n!nCESbB.n233.툁(33. @3鈁(33.爁(3333. (TNABgHn?.NHnHz0BgJBBHz<RB'<<BNvN^ _TONINITUNITS_NOUNITNA?.HzBHz4BgXBBHzB'<<B'BN&N^ _TONCONSOLE CRT_CRTIOMISC_UNBLOCKEDDAMNA?.HzBHz2Bg(BBHzB'B'<B'BNN^ _TONSYSTERM[rN~ Nv/NN^ _ NF9885DVR_F9885IONA0.H//</<N60. H/B/<N"0. H/B/<N0.Hr -@/.BYHzNSNvN?.Hn?.NHnHzJ?.?. ?. Bg/.BHz0<HB'B'<YHzN Nv/NN^ _ NA w0.H/B/<Nr0. H/B/<N^?.Hn?.NvHnHz:?.?.?.?. B/.Hz<KB'B'<BNLN^ _NCS80DVR_CS80IONAHm/< (NBgNBnRn m"m0.8CHPHQ/<8N n2mN^NuNAfJf ;|NJ m0.8A7 [=# BgN?<N`?<NpN-VU+@RN$ -Rg$?<BgBgN ?<Bg?<N `Z?<Bg0-A?0-A?0-A?N ?<Bg0-A?0-A?0-R@NvA?N ?<0-A?0-A?0-A?N?<0-A?0-A?Hz /<.N+RAh`0-\S@Nvr;@TmTnx;Ahp mhNvA2?Bg0-~A?0-A?0-A?0-A?Y?-h?-\Hm^N/-XY?-h?-\Hm^NN 2-hRAh`JmtoNHmtHmXHm^NF?<)?<0-tA?0-vA?0-xA?0-zA?/-XN pN-VU+@RN$LH/. ?<Hn?< N/. NU/. N=_N^ _PONNV|9n n /. ?<Hn?<N/. NU/. Nd=_N^ _PONNV np(r @A np(r@@A| tNVB.U/.BgBgNlJ_g/.B'HnN$J.fB.U/.HzN(J_g/.B'HnNJ.fB.U/.NVJ_g/.B'HnNJ.fB.U/.N9 V9 D9 Є9P,NPPP&P,P.P*P*P.МPX)P&P.4P: P*PPPT),())) P   P   " P /.N/.NU/.N0l|@r@g/.?<N/.N/.BgN+o N&,_+_ n3.刁(3/.NN^.NuNVB m"n)s?//<8-HN n A-H n(3VDJg+|`0.m| n@2;r /N/-/./.N`JoX/./. . lмr /N;|/. m .Hp/.N .Ѯ .Ѯ . .lмr r -@JoN/.N$/./.?</. . lмr //.N .Ѯ .Ѯ .Jo8/./. . l /Hz8+O nJPg ;|NJ/.BHyVN+o N,_+_/.NN^.NuNV/-/Hz|+OB.U/.N*J_g/.<HnNP` n h.J('g/.?<NJ.g/.N` /.N+o N,_+_/.NN^.NuNuNVN 5 5$]  P 55A55),5<5 55 555556525P255 5&P*PV0 2PlF 555А]5 5b P 55A5 5*PPNPqPq/NpzzzzN/.N/.N n+h. nB. .fBm`6U/.N ns툁(s`/.NB .f8/-/Hz+O/.N&+o N,_+_pmgNJ nB.`/.NB nB. n(3VD@ n(мr /N;|/./-/.N`+o N,_+_pmgNJp nWrnWg<-n n-h.pQ(2f` n/( Jg/("hN` nB.N^ _NNVp nWrnW@/.N/-/Hz+O n-h. n"nLtH NNN NLNNN&NNNNNNNN^Nuܰlr/-//.NJgNCHnNJgNCpnf>/-/ .R/NJgNCHnNJgNC n h|-|` -| .ܰgt/-/ .Ю5 5PU55A5 55P q55A5 5PP"55APPPPy) AP(,MM8PPJ(PlbP6Ppx5P4PPt8RPVP>P4P>7 [=HINIT_DISCINT__BASE_RvŌpzNπn n -@ASM_ASMASM_IN ASM_MOVELEFTASM_MPY ASM_NEWBYTESBKGND_ABORT_BKGND_PROCESSBKGND_ALLOCATE_BKGND_INFO BKGND_BKGNDBKGND_DEALLOCATE_BKGND_INFOBKGND_IOR BN nmN^Nu DI1.0NNNNuNVNNNNdNNNNN^NuNu _$_"j HP` _$_"j HP` _&_$_"j HPaNNu _$_"j HP`h _&_$_"j HPa*a$Nu _0$_"j HPHa:`4 _&_2$_"j HPa6Nu _02$_"j HP`,AMIGO*IODECLARATIONSHPIBCSDMASREALSSASC_AM- WS1.0_DAMTEXT_AM0$ CONVERT_TEXT$DLIF_DAMcERLOADER_MARKUSERLOGEOTLOGINTSTBSYSTCLR SYSGLOBALSSYSGLOBALS_SYSGLOBALSTESTDMAWAIT_TFRL8 Copyright 1983 Hewlett-Packard Co. All rights reserved.`H$ ( &xll> DISC_ (ESC_BKGNDBKGND_UNIT_BUSYBKGND_UNIT_WAITDISCHPIB_DISCHPIBDISCHPIB_HPIBAMIGO_IDENTIFYDISCHPIB_HPIBCHECK_SCDISCHPIB_HPIBSHORT_MSGE_INDISCHPIB_HPIBSHORT_MSGE_OUTDISCHPIB_HPIBUPON_DXFR_COMPDISCHPIB_HPIBUPON_PPOL_RESPDISCHPIB_HPIBWAIT_FOR_PPOL D  _&_$_"j HP` _$_"j HP` _&_$_"j HPa4Nu _2$_"j HP`V _2$_"j HP` _&_2$_"j HPaNu _&_$_"j HP*5NupafFNurAAA5@2A@J))V4NQ5Q6A||NuAg^g |anp)HL8 Copyright 1983 Hewlett-Packard Co. All rights reserved.`H$ ( &xlt DISC_INTFR, & PNAACESbBLIBS:D N  DISC_INTFGNKBDN]KEYS]iCRTinBATnvCLOCK,vDEBUGGERPRINTERDISCHPIB EXTDIABORT_IOASM_ASM ASM_MOVEL ASM_SAPPEND CHECK_TFR DMA_STBSYDROPDMA GENERAL_0GENERAL_0_GENERAL_0GENERAL_0_IOREAD_BYTEGETDMAIODECLARATIONSIODECLARATIONS_IODECLARATIONSISR_ISR ISR_ISRUNLINKISR_PERMISRLINKITXFR LOADER_LOAD7 [="Sp0%ABLIBS:DN DATA_COMMGNKBDN]KEYS]iCRTinBATnvCLOCK,vDEBUGGERPRINTERDISCHPIB nREASM_ASM ASM_MOVELASM_MPY ASM_NEWBYTES ASM_SAPPEND GENERAL_0GENERAL_0_GENERAL_0GENERAL_0_IOREAD_BYTEGENERAL_0_IOWRITE_BYTEIODECLARATIONSIODECLARATIONS_IODECLARATIONSIODECLARATIONS_IO_ESCAPEIODECLARATIONS_IO_FIND_ISCISR_ISRR INTDC_IDC_RDWR INTDC_IDC_TFRR INTDC_IDC_WTBR| INTDC_IDC_WTCR INTDC_IDC_WTWR INTDC_INTDCR INTDC__BASERN``*3)adgNqNu9g92*:NK|'*9gYFNu)gaB)B)PB)`)gJ)`Nu?<N/. NU/. Nd=_N^ _PONNV np(r @A np(r@@A|4|Bn-n|4|-n n /.?<Hn?<NN^ _NNuNV nBBnU/.HnNJ_g/.?<N,AMIGO*IODECLARATIONSHPIBCSDMASREALSSASC_AM- WS1.0_DAMTEXT_AM0$ CONVERT_TEXT$DLIF_DAM  ISR_ISRUNLINKISR_PERMISRLINK LOADER_LOADERLOADER_MARKUSER SYSGLOBALSSYSGLOBALS_SYSGLOBALSL8 Copyright 1983 Hewlett-Packard Co. All rights reserved.hf/("PJg/) n|~dN DATA_COMMR.)|Nu|bA2;N"HX)grNu)g`ApPQNuP6Nu|b.A2;N " "j)gNu`N)ga |@@Nu9aNg<g<gIJ<g9gN).A2;N " """")gNu`N)ga |@@Nu9aNg<g<gIJ<g9gNNu(j@J+ f2A )V5,g )f`JEXTDC_ALVINISRR EXTDC_ALVINITR EXTDC_CONTROL_BFDR EXTDC_DIRECT_CONTROLR EXTDC_DIRECT_STATUSR EXTDC_ENTER_DATAR EXTDC_EXTDCR ~EXTDC_OUTPUT_}8D`p|/N _&+אت<'DN`FJ+ fNq<N`0|'J+ fNq`AIga2ga$gagaNu9NuNJ+ f +r+ ANg|2;Nhlhlh((h(((| l6E DЬmb  559  Pem)Q P ш0yPPP6PȢq(e q08e6q A:A-H n1|pnf1|pnf n1|J-g0 m .ЀJpg m .Ѐ00H//.NU?.?<@/Np_f\ .//<N AH1?.?<@a -lм?N?.?<@c -?NN^.NuNA/.N N^. DATAR EXTDC_OUTPUT_ENDR EXTDC_START_TFR_INR EXTDC_START_TFR_OUTR INIT_DCINIT_DC_INIT_DCR *INIT_DC_IO_INIT_DCR INIT_DC__BASERINTDCINTDC_IDC_INITR INTDC_IDC_ISRR> INTDC_IDC_RDBRT INTDC_IDC_RDS7 [=~ / Jg8 m8gD gX gf gf gf<@H?Xk@:,:gCra,:g$a`B@+@ gB+@ |,9@4CzaNu,:ga,:ga,:g6gaCa&?<@a -lм?N?.?<@c -?NN^.NuNA/.N N^.NuNA-|/. /.HnN N^ _PONNA/. Hn/<N N^ _\ONNA-|/. /.HnN N^ _PONNA/. Hn/<N N^ _\ONNA/.?. /.N N^`|+o NR,_+_pmf@pf60.Hf( n . .Ѩ J( g|`NJJ.g nph f"nB(` nB$ n1|BJ$g/(,J(g/(("h$N`& nJh f/. N ` /. N N^ _PONNNNNuNA =m m0.HЀ1 nmN^Nu S2.0NNNNuNVNNN *NN ~NNNNN^NuNu``````T`` ``$NK/|'$<gNsNuz$|` z`z$$|B @\؋"D ,:gCaj,:gCaZ,:gCaJ+o `,_+_ mf,--f9m4La(9lVNu gH @ )g/NLNu gH @/)`$l$g)jBg)j >a0aJga4Jf>JBg\"l$0)laJ`/,B)|Ba6)_BSB _ NNA n m n n` n Wg n Wg`/. 0. |??.N `Jn mpn mv/. ?. ?.N Jn fX/. ?<HnN U/. N0A:A-Hpnf n1|` n1|` /<U/. N0H/NACESbB+|TB+||B+|B+|B+|B+| B+| B=|Rn0.A:A-H nphWg"phWg n B \؋؅$DNu"|B,7`"|`"|B ]B \؋"D؅؅Nu _(_HP&l R$<eB4 4Q+@0@0@9@pB,7a,av`|NuB+Nu _24(_HP&l RapA@B@<}fa"a0|g(|g <[J+@gSf`R`2 _"_0(_HP&l RaBA l>(g&`a , %lBa gC$`B$l$%l> %lBgNu$l( gn)jBg0)j>aj/,Ba Bg%lB$l(J* g a6aPJg a gC$`$l(%l>%lBNu6gaA(`6gaA$N^ _PONNA-n-n np(-=@-n nphWg"phWg np( Wg`8 nph f"nB(` nB$/<0.H/N n1nphoph f:/. /(/(N n (ѨBJ( g /. N `B. n-h npphWg` n1|1| nphftC U?.?<N0l|@@V@=@ n"hJg?./(N n"P/) /) (V/?<?<?./(N nmB-=|Rn0.A:A-H nphf:/-/Hz+O/(N n/(?<7 [={ aB @g(XЋ @B,7Hax L@@WNuBNu _""_(_HP&l R)I>)ABaa)l.J)|Naxg(JBg"aSNf)|NJJgSJg`Nu _$_"_(_HP&l R)I>afaf)l.J)|N)RB/ ` aJBgZaSNf")|NJJgSJf _ Bc .Ѯ .Jo8/./. . lмr /N;|/./-/.N`+o N,_+_pmgNJp nWrnWg<-n n-h.pQ(2f` n/( Jg/("hN` nB.N^ _NNVp nWrnW@/.N ,AMIGO*IODECLARATIONSHPIBCSDMASREALSSASC_AM- WS1.0_DAMTEXT_AM0$ CONVERT_TEXT$DLIF_DAM ERLOADER_MARKUSERLOGINTSTBSYSTCLR SYSGLOBALSSYSGLOBALS_SYSGLOBALSTESTDMAWAIT_TFRL8 Copyright 1983 Hewlett-Packard Co. All rights reserved. EXTDC *xd EXTDCGPIO_R `6aaJgaJg6a ,ay yPP&P"P(P"P P\P(P B ДP0P"&A AP"AAA :A AP:AAA PPM 5 A PPPPPPPPP^ L8 Copyright 1983 Hewlett-Packard Co. All rights reserved. EXTDC xdtGPIO_RPNAACESb aX[@SClENua ata" ‐n $,Bn &g@S@ l>IҋH@"ATIQ)BB)H>" Lf" Ya.aH`a)l.F)| RaaD l"aSRf)| RJFgSFf`pHЋ @ 0,<"f" Yaaa0,A APP8a&y yAAA  % M ! PPPMP1 AA AAAA P,P.P*P*P.МPX)P&P.4P: P*PPPT),())) P  +|@B+|NB+|jB+|~B+|B+|B+|B+|B+|B+|B+|B+| B=|Rn0.A:A-H nphf|C -P-hU?.?<N0l|@@V@=@ nJgXGPIO_INITIALIZEGPIO_INITIALIZE_GPIO_INITIALIZERGPIO_INITIALIZE__BASER INIT_GPIOINIT_GPIO_INIT_GPIORINIT_GPIO_IO_INIT_GPIOBRINIT_GPIO__BASERSIODECLARATIONS_IODECLARATIONSIODECLARATIONS_IO_ESCAPEIODECLARA @h<h=|@f0 Xa aNua&H"anB XЋ$@DXn $,Bn &g6Bl8S@ l>TJQ)BB)H>" f" Ya a2LDNuap/aa aBB Af CgR,_NuTZԋ B Bf (fal=7,_`a\`rB*g"aazaڶlafBNuraa`alaL`J*g&9|aJBf9|B+|TB+||B+|B+|B+|B+|  ,AMIGO*IODECLARATIONSHPIBCSDMASREALSSASC_AM- WS1.0_DAMTEXT_AM0$ CONVERT_TEXT$DLIF_DAMNuNVNNNN>NNNNN^NuNu _$_"j HP` _$_"j HP` _$_"j HP` _&_$_"j HPaNu _$_"j HP` _&_$_"j HPa6Nu _0$_"j HP` _&_2$_"j HPa6Nu _02$_"j HP` _&_$_"j HP`, _2$_"j HP` _2$_sNNu|`|NJ+ nJi|*,a`|NNJ+ nTJip k J+ fa$)So$@g f`a0So f`'C'H NNu kJ+ faXSof`a3XSof`'HB`|'NNgVJ+ g*7 [=N RS_ABORT_IOASM_ASM ASM_MOVEL ASM_SAPPEND GENERAL_0GENERAL_0_GENERAL_0GENERAL_0_IOREAD_BYTEIODECLARATIONSIODECLARATIONS_IODECLARATIONSISR_ISR ISR_ISRUNLINKISR_PERMISRLINK LOADER_LOADERLOADER_MARKUSERLOGEOT SYSGLOBALSSYSGLOBNAACESbB*>G<)Nu:Nu ?=J(gJ*;gx`n*BfB*=|`ZJ**Ba f4B*<`.*Cf(a|PlB*<` *DagB*<` ag aAg%|:4J*9g&j$aB*8Nu _&_$_"j HPataJ+ f.+ HA2;N((666ap`ap`ALS_SYSGLOBALSL8 Copyright 1983 Hewlett-Packard Co. All rights reserved.M_SAPPEND CHECK_TFR DMASYD xAL_0_GENdRS232RTE ETDMAIP ~ONSIODRONS_IODECLARATIONSISR_ISR ISR_ISRUNLINKAN0l|@@V@=@ n"hJg?./(N n"P/) /) (V/?<?<?./(N nm\=|Rn0.A:A-H nphf/("PJg/)"QN nmN^Nu R2.1NNNNuNVNNNNNN .;Nu)B)7j6B4GNuANuBNuCNuDNuENuFNu _02$_"j HPJAk:|n4I2;N08*^****  &,2p`tJ@fNuJ@g  <8Sj <UPSjNu|lp`8"<XaD)B)AIAGNu ,|J+ f4` |J+ f&J+ fa\gVB)|9aaH`&B)aJ*=gJ*;g +f +fNu k BBag(abSokf'H B*9aNBNu'H tNuB+|J+ fB$NuB(Nuj-J+ f%K$Nu%K(NuJ$f NuJ(fNu~INIT_RSINIT_RS_INIT_RSRINIT_RS_IO_INIT_RSTR INIT_RS__BASER RS_INITIALIZERS_INITIALIZE_RS_INITIALIZERRS_INITIALIZE__BASERRS_RSR RS_RS_INITR RS_RS_ISRR RS_RS_RDBR RS_RS_RDSR` RS_RS_RDWRCNNN^NuNu _$_"j HPNPp Qa B*9B*8B4B*>B*?B*:B*;B*F|<|=|A|B|C|D|_E)HA,XP)?@ A@Nu tvU@+  _&_$_"j HPaNaaaNu _$_"j  <?@<*@g)B)G@|<|=FNu@Nuav@Nu@NuJg<gp`Jm<n@;NuJ@gaNu@ANu@BNu@CNu@DNu@ENuJm <n@FNup`\ _$_"j HP)gNu|8H0;N8)*?`J*;g.*(f")*>Jp`+@B*-+@;|NJHAIeAoHANuHARANuJ*:fa.||:NuB*:)NqB)NuN)B))a)B*?)B*>)B4|<|=FNuJ4fNu)B) *4B4G`8J*=gaaNuI aaaaNualJ*|n8BSRI2;N06<n$*Ttzp`RNuNu)<J$fJ(gJ*=fJ*F@@ff@ g J*Ff*E*@H0;Nh*Af&|0;Nbbah|PmP*D`aX|^m@*A|a6f|<)B)J(gJ*=gJ*;gGNu)*?< gJ*;g"J*8galg%|<4NuI\agNuCBNuNg6(*.g&.؇.؇J4fNgSj%|4NuJ4fNfNu>*LjJ <Nu)*7 [= ITESTRSTRFS_FWRITESTRWORDIODECLARATIONSIODECLARATIONS_IODECLARATIONSIODECLARATIONS_IO_ESCAPE LOADER_LOADERLOADER_MARKUSER MINI_MINI MISC_LOCKDOWN MISC_LOCKUP MISC_MISCMISC_UPC SYSGLOBALSSYSGLOBALS_SYSGLOBALSL8 Copyright 19 _POSPACKRQR SRM_PURGEPACKRQ SRM_RESETCARDR?SRM_SENDREADPACKSRRhSRM_SENDWRITEPACKRSSRM_SETCOPYTIMEOUT R@nSRM_SETDEFAULTTIMEOUTR@JSRM_SETEOFPACKERRSRM_SETWAITFORLOCKTIMEOUTR@\SRM_SRMRT\ SRM_SRM_INITTR?SRM_UNLOCKPI m)m 5 PPPPPPPPPmU0,"mDAPP}P f\m mX ]]] ] ]aE]]] !] ]L8 Copyright 1983 Hewlett-Packard Co. All rights reserved.x`n*BfB*=|h*T^,*SRMR7T^0PMANAGER @READ WRITE SEARCH   AINIT_SRMINIT_SRM_INIT_SRMR7INIT_SRM__BASEBR7SRM SRMAMMODULESRMAMMODULE_SRMAMR<SRMAMMODULE_SRMAMMODULER=SRMAMMODULE__BASER7Z SRMDAMMODULECSRMDAMMODULE_ALLCAPABILITIESRSRMDAMMODULE_CONSTPASSARRAYR/ACKMRS2 SRM_VOLPACKRS SRM__BASER= n1|pnf n1|U?.?<@/Np_fJ n1|1|?.?<@a -lм?N?.?<@c -?N+o Nv,_+_pmgNJ0.HgNJJ-f:|Hm/<2N=|E]]]]M]] ]]]<( Ȭ1  ) U PPPPPPPPPPPPu*0"Da6  PURGELINK  CREATELINK ALL NONE NAJf+nN^.NuNA=| =|Sn m0.HЀ00n f=n nnN^.NuNA=|Jn^ n 2.t 0Wg SnNv` n</./< SRMDAMMODULE_NOCAPABILITIESRSRMDAMMODULE_SRMDAMR1SRMDAMMODULE_SRMDAMINITR1SRMDAMMODULE_SRMDAMMODULER7SRMDAMMODULE__BASERSRM_AREYOUALIVEPACKRH, SRM_CATPACKRHSRM_CATPASSPACKRIJSRM_CHANGEPROTECTPACKRJSRM_CHANGEVeRn m0.HЀBp nm m0.HЀ1 nmN^Nu S2.0NNNNuNVNNN *NN ~NNNNN^NuNu``````T`` ``$NK/|'$<gNsNuz$|>F|0NqNu5|HBjJBjLNu>*LjJNu>*JRGjLfNujHgNu>*LNu>*JpNRGjHl5GJNuBjJNu>*L2pNRGjHl5GLNuBjLNu6*LjJnSCjHNuSCNu:A-H nphf:/-/Hz+O/(N n/(?<HnN pnf n1|pnf n1|U$BLIBS:S5N5SRMGNKBDN]KEYS]iCRTinBATnvCLOCK,vDEBUGGERPRINTERDISCHPIBR SASM_ASMASM_DIVASM_INASM_MOD ASM_MOVELASM_MPY ASM_NEWBYTESASM_POSASM_PSUBTOSSUB ASM_SAPPEND ASM_SCOPYASM_SSUBTOPSUBASM_SSUBTOSSUBBOOTDAMMODULE_BOOTDAMMODULEBOOTDAMMODULE_SRMNODEFS_FWRITESTRCHARFS_FWRITESTRPAOCFS_FWRI wOLPACKRK SRM_CLOSEPACKRK SRM_COPYPACKRLBSRM_CREATELINKPACKRMSRM_CREATEPACK RLSRM_EXCHANGEPACKRO>SRM_FILEINFOPACK ROSRM_GANGCLEANPACKRO SRM_LOCKPACKRP& SRM_OPENPACKRP SRM_PACKETINRD SRM_PACKETOUTRC SRMs?.?<@/Np_fJ n1|1|?.?<@a -lм?N?.?<@c -?N+o Nv,_+_pmgNJ0.HgNJJ-f:|Hm/<2N=|Rn m0.HЀBp nm m0.HЀ1 nmN^Nu S2.0NN,AMIGO*IODECLARATIONSHPIBCSDMASREALSSASC_AM- WS1.0_DAMTEXT_AM0$ CONVERT_TEXT$DLIF_DAM7 [=`H|-m<HnC"HQ?/////Hn"m$n*s?//<8-IN"n r1?NHn?TEMP_FILE_PASS<MANAGER READ WRITE SEARCH PURGELINK CREATELINKNA nB(-h nJ(W"hr\gJ"h (1. V"h"(1.Vg RNv` n"h (q` n (Nvrm<>/NHn nHh.NRNv=|Jf. .谮n" n .Cr/1f BnRNv npdf(Jnf Bd` m0. 8"n#p.d .谮o| n|`" n .Cr/1f /<N-mJW $N AA-H nHP"nHiRN nCRESb"nEGtp f S@f`HiHh@N` m0. 8"n")d.W".ҲdWtVg r` nrN^ _ N 2NA-n m0.8A-H/. ?.?<B'N < nHh.HnNt?./<Hn?< n/(dHnBB/:/<BNLN^ _\ON NA-n n Hh.HnNB n 1mhRmNv0( H-@l ha f*-h*|0.~H-@tpto -|t` -|t n Jo -h` -| n /(j:Sb`A"nE:GSb<HPHz-HN nC&nE:Sb`A"nE:GSb<HPHz-HN nC&nE:Sb`FA"nE:GSb<HPHzj-HN nC&nE:SbRNvRNv`-||K.Ag`BJWr^$.贮_gd .RNv//<$N AA-H n .Cr/1f+|` nL>HL4H-|HP<<<//N-nJf .谮n n .Cr<1fRNv-|"nHi<><>/NLR JfH nJ(c/< N` n-hd"n!i.d#n.?. nHhdB'N nHh?.NTN^ _\ONNA nLH-n-m n(VD.g/<(N`*?. /./.?. n/(dHn/. BgNPJfT nph.f"/<0N?. n/(NHnxHn%HnpHn,B'NLpp^Jp^gRpNv .p//<N AA-H nLH Rppl .pSNvr-@n-A(=|&Rn& .(//<N 2.&4BJAHЂA$0pJg, n0.&2AI@tD<FŰt᪅ n&m".`8^Nv` n!nN^ _\ON SHARED CLOSED CORRUPT EXCLUSIVENA n-hB..@ nr\$(质_gh"n (E2. W"(E2.Wg |`, n"n )$n")GRNvRNv`v n (谨op>.f }Nv .谮nJ n .Cr/1g4 .మo+|`-n nHP.f+|.` +|`.p>.f$ n"n )Er>2g +|.N^ _ NNAB.B.-|-n n-hdp(-@|Rpdf|.|@ .谮nZ n .Cr<17 [=/<HnBg n /(dHn/.pHn,/.lB/.t/./</(*NLp gTEMP_FILE_PASS< J(RWg/<Nڤ` nz(VDJgR(sVD@(rVDf4(s??/(nB'/(NRpf nz!|n nz(rVD@(VDA(VDg?.HhN?. nzHhnN/. Hn~Njpg nz(rVD@(VD N/. ?.N n0(rVD@JWg hB g?.HhnN@ n0(rVD@JWg:?./<HnBg/(dHn/<Hn`?</(dHn<NMJg/. ?.N8`ZLHpLH8-z4-m\?./<Hn`?< n0/(dHn/<Hn4/. BB nJ&g/(&"h"N n!|JfR(VDJg?./(nB'/(NRJf?. n/(nNS2Jf nsN^ _\ONNABB-|B|B.|-n np<(fRRNv np(]r]g /<.NJV n".8 NA-n m0.8A-H/. ?.?<<NbJf/. HnNޞJfvLHLHYHz n/NJf(YHz n/NJf n/HnNACp fS@f/<NJfP nHh.HnNݤ?./<Hn?< n/(dHn/<gBn-|`=|-| nzHh.HnNP nz(VDJg& .//<$N AjLhH?./.Hn~?. nz/(dHnNQ nz(VD(VDf?.Hhd(rVDN:N^ _\ON>TEMP_FILE_PASS<NA-n n (lмr RNv NJ+n\` n0-hnP-hT!nTJo -hX` -|X n00( H-@LLHp?./<Hn`?< n0/(dHnBB/.LB/</.X/</(*NLJf$?./. /<Hn`?<HnBB'NJf ?./.PB n0/(nB/.TNLB?. n0HhnN܊?. SNvCt>1WgJW nr(\gB. .CqJ.g$|p>.f B.`RNv`Dp/.f|B.BB`$p<.fJ.gB.||J.fFp/.f" .Ar/0f /<N`RNvRNv .AR/.xBgNP n (rVD@JWgf"m!i?./(NO mA -H n(8VD@(8VDAg/<.N n0Hh.HnN  b n0Hhd(rVDN n0!nPn/. ?.N?. n0Hhd(rVDNܴN^ _\ON>TEMP_FILE_PASS< NA^Hnj-_f mA -Hb nf(s0.(s!|d!|nB(p鈁(1| Bjr|RHnj/?.NtJfF?. /</(*NLp fB?./<HnBg n /(dHnBB/:"/<BBBBNLJg+|1`D?./<HnBg n /(dHn/.pHn,/.lB/.t/./</(*NL`p fBL"H?./<HnBg n /(dHnNQBLH?.#/<Hn?< n/(dHn/<Hn?<"P/)dHn(rVDNM?. nHhd(rVDN?. n"PHid"P)rVDN~N^ _\ONNA-n /. HnNJJf6 nHh.HnN?./<Hn?< n/(dHnNQN^ _\ONNAz-n z nz(VD@ ؂/. HnN6/. Hn`N n0(rVD@JWg(rVDJfh(VDJf2?.HhN"?./<Hn`?< n0/(dHnNQp fBJg/. ?.N>`f n0Jl r`D?. n0/(/(nNO>?. n0HhNޜ?. n0Hhd(rVD  nf/(nNOJf-n ^ nbHh("n^HQHiNHnj/?.NN^ _\ONNA-n -m?. n/(n(rVDNP&Jf\ nJ(f/<)N$`B?. n/(nNOJf( mA -H n"n#h<#h<sN^ _\ONNA-n Jf/. ?<7 [=6 .C-I"npig+|` n(s??N? n(s??NH,Jf n(s??NSJg+|`B. nJ(c |``BnRn m0.8"n)0f4 m0.8)0f m0.8J0c| n2m n(s`^+| `R+|`F+| `:+|!`.+|/`"+|+`+|$` +|2N^.NuNA-m nBBh1|BBB BB(B$B,B(0N^NuNAJ-f.Hm/< NHm/<1NN|N+|u0B+|N^NuNANvpl/<NЦ`pl /<.NЎ`JfnB .찮]".NvAt/0Vg RNv`Jf/<N8`t n|R<HhR/<<Hn .NvRNv//.N n|(VDJf?. Hhd(rVDNn` n>-hd/. ?. ?<B'NJf*/. ?. N?. n>Hhd(rVDN n>!nd`F n>(VD(/??/(n/./</./.NRhNv n(s??/<ND`JfP n(s??/(n/. . Nv//./.NRh n(s??/<NDJW  ^g n(s??/<NDJg n(s??N?N^ _N X??.NON^.NuNABBmN/-/HzP+O-npnV m"n)s?//<8HNL"03VDg+|`0.m|n@2;N R n(sVD@(rVDg+|*`/././. /.Nd`` nNAN?+|N^NuNA:BBmNB.B/-/Hz+O-n > m0. 8A-H: n:(3VDJg+|`T0.H/HzNJg|B n>p(Rd|R n>p(@d|@ n>p(.d|. n>-hd-hn(rVD@CCRESFVDg/. ?. N`/. ?. N"`/. ?. N`/. ?. N` n>-hd/. ?. ?<<N0Jf*/. ?. N?. n>Hhd(rVDNd n>!nd`/. ?. N`|/. ?. N$`l/. ?. N`\/. ?. N`L/. ?. N`CEDSb0.mҰ|n@2;N2^~*4vn4>N/. ?. ?<pnWNJf n>/Hhd?. <B'N4`T n>r?. HhdB'N`8/. EN֮`,/. ?. Nb``/. Nh` /<'NʊJV.Bgr n>!nd!nnr.C㈁(rCERSbCE@SbCE.SbJ.DcCDESbp2fJmg ;mNJ+o N(,_+_pmf/<2N` NNJN fP n(s??/(n/. . Nv//./.NS n(s??/<NDJW  ^g n(s??/<NDJg n(s??N?N^ _NNA-n m"n)s?//<8-HN n A-H np(C:ffzffff*6BNffZ+|`+|,`+|`+|`+|`+|%`B`+|`+| `+|.`+|-`+|0`+|)`v+| `j+|?. N܌`(/. ?. ?<<NzJf*/. ?. N?. n>Hhd(rVDNծ`/. ?. ?<<N2Jf*/. ?. Nz?. n>Hhd(rVDNf` n>r/. ?. ?<<NJf2/. ?. NhJg?. n>Hhd(rVDN`8 n>,N^ _PONNuNVN7NT\NNNNNNNN1N^NuNAJ o-n-mB-nB  o n(s??/(n/./</./.NRh-|-|BJW". Nv ^g^ n(s7 [=X /<N` n!h !hN^.NuNA-n n hWY/.-@Nt .JWg /.N n (ШNv Nv-@ N^.NuNA0.A:A-H-mJ.f -n `,pnfY/-N-_`Y/-NN-_ nJf/< 0.H/Ni+ON` f np(?/<NV``pW-g np(?/-N.`8pf np(?/-N ` np(?/-N-m-m nproSn m!m m!|  m!m m"mC!I pg np(?BgB<N` E?."N\ nBHhl/./.?.HnN?."N?."/<NN^ _NNA nLH-m nHh"n$_AHQHP/<N nHP/<$/.NNv/<BN n!n B!n Hh$?."N nBHhl/./.?.HnN?."N?."/<N $-IN"n Hq n "_HPHQ/<@N nHP/</.$N/<$/.6NNv ПNv//<BN nHh?.:N nHh`/.6/.,?.0HnNL n!n|!n!n!nB!n !|!n!n$B?.:N?.:/<NN^ _4NNA ncJf/< /<N n hg/< /<NY/-N|Jf /-N n-hJnfX"nJ$g/<0.H/NY/-N l/<0.H/N n!m$`T nJ(g/<0.H/NY/-N l/<0.H/-| np(?Bg/.B'Nh np lpg"np)?BgB<N8`z-| np(?Bg/.B'N n-hJoH"n$m%i$m%|$m%i$m%i $np*?Bg/.B'N .D nf g/(N` nHh"_  N^ _NNA nLH-m nHh"n$_AHQHP/<N nHh"_ .RNv//<$-IN"n Hq n"_HPHQ/<@N nHP/</. N/<$/.NptПNvПNv//<BNp nHh?."N nHh`/./.?.HnN n!n |?.%LH n LH-m nHh"n&$_AHQHP/<N nHh"_ .*RNv//<$-IN"n Hq n"_HPHQ/<N nHP/<$/.N/<$/.*NNv ПNv//<BNr nHh?..N nHh`/.*/. ?.$HnN nHh|/./.N n!m( n"n"Bi3|B) 3n 3|#nn /(/-$PJLg/*L$jHNN^ _ NNA+|2pmgJmf;m`pf +|?.NVN^ _TONNA m0.8A-H/-/Hz+ON np(?/<N m0.8pg +|+o N,_+_?. N>N^ _\ONNA-n n!n !n !nN^ _NNA-n nBL\HLPH!|$C(-I"m0.8$nr1$BBB LH8N^ _\ON NA nLH-n n "N?."/<NN^ _NNA nLH n LH nLH-m nHP/</<BN nHh?.N nLH`LHpLH?.N ?./<N(N^ _NNA-m nHP/<8/< BNP n!nL:HL4?.HnN np.!@?..N?../<NN^ _(NNA-m nHP/</<BN n!n !n?.N>?./<N\N^ _ NNA-m nHP/</< BN n!|!n?. N?. /< NN^ _\ONNA-m nHP/</< m0.8r0A:A-H n/("PJg/)"QNN^ _TONNA+nN^.NuNA+nN^.NuNA+nN^.NuNA0. A:A-H n!n Jg "h#n.N^ _\ONNA-n n ( Nv-@ N^.NuNA-n n hg/<"mp mB( mB( mB( mA-H n f m| ` m| m!m m!|  m"mC!I mA -H m"m$np ВNvC!I np(??<B<N+o N,_+_?.NN^ _TONNA m0. 8A-H/-/Hz !nBh1n LH N^ _NNA-m nHP/< /<BN?.N`Jf?./<NvJg mBN^ _TONNA nLH-m nHh"n$_AHQHP/<N nHP/<$/.NNv/<BNP n!n !nB Hh$ 0.H,BɈЬ5b5PPNPPɈ P^PPP6 PD P,PL  Ɉ    2 Ɉ6"  bzɈ&Ɉ$ )5 )5 )$5 )55||t ),5 )55 )$5 )55TTBd )5t )5ldf,AMIGO*IODECLARATIONSHPIBCSDMASREALSSASC_AM- WS1.0_DAMTEXT_AM0$ CONVERT_TEXT$DLIF_DAMBN0 np.!@?. NN^.NuNAn-m nHP/</<BN n!n p.!@?.NL?./<NjN^ _PONNA nLH-m nHh"n$_AHQHP/<N nHP/<$/.NNv/<BNT nHh?. Np nHh`/. n!|!n!n B$B(!n,!n 0B4!|8/.HhP4P>6P.P*P vPɈFPP.Ɉ:8P&PȆ"Њ8PPɈ   ,8dH ITRh) Ș                     Ɉ@ = =y 8~MȈ$&MM M4M M $M M <*ɈɈ  /.?.HnN nB|B!n BBh1n?. N~?. /<NN^ _NNA-m nHP/</<BN n!|!nBh 1n "!n$?.N?./<N6N^ _ NNA nLH-m nHh|"n$_AHQHP/<N nHP/<$/.dB n/( .S/N n!_N^ _PONNV-n n(VD(VD(sVDg6B(VD/(/(-@N .Rr-_ `8 n(VD(VDf+| ` +|*B N^.NuNV-n n(VD(VD yXtTȺȀɈPPi- PPF"PDP.P4PP,P$PF"PDP.P4PP,P5""PPP *P6Ɉ  5"TF4  Ɉ    2 Ɉ6"  bzɈ&Ɉ$ )5 )5 )$5 )55||t ),5 )55 )$5 )55TTBd )5t )5ldfNppПNv//<BN nHh?.N: nHh`/./. ?.HnN?.Nh?./<NN^ _NNA-m nHP/<(/</.N n!|!n!n B$B(!n,!n 0?.NN^ _NNA-m nHP/</<BNJ n!|!nA  ЊUV}H*5  Lqx&Ш58 5Ɉ&PЪ&5! 52P Ȟ2$ $   P ȠR,5.5P~"ɈPHT5*5Pb^57 [= M fL8 Copyright 1983 Hewlett-Packard Co. All rights reserved.SRMAMMODULE_SRMAMRO  tF9885RD PNV n-h"n)VD)VDg ?<N n/(NN^.NuNV F9885DVRIF9885DVR_F9885DVRR@F9885DVR_F9885IORF9885DVR__BASEER F9885INITF9885INIT_F9885INITRDF9885INIT__BASERBGP_GPR GP_GPIOCLEARR GP_GPIODMAINR V GP_GPIODMAOUTR GP_GPIOWORDINRGP_GPIOWORDOU ././<Nn 눁n/./<N. . n/(?.NY n/(N =@JnmpnVJnVg ?<N  n -n ` -|pЮlм=@ n/(?NNV"naNK|' 5GLOBALSSYSGLOBALS_SYSGLOBALSL8 Copyright 1983 Hewlett-Packard Co. All rights reserved.SRMAMMODULE_SRMAMRRMAMO  RMAMMODUTF9885RD ENDREADPPdGLOBALSRKETINN_RESETCARDz #/(?.N n/(BgNU n/(N=_.V n"h.t)Vg?SETUPSYS@DRh>DKBD !MISCDEINITKBDFS$EHKEYSINITKHIKEYSINITHMIKCRTKEYSIKLINITCRTTUNITSLNBAT!! dRE NEWWORDS(VAR P: ANYPTR; WORDSIZE: INTEGER); PROCEDURE USERPROGRAM (EXECLOC,INITSP: INTEGER); PROCEDURE SAPPEND(VAR DEST: STRING;SRC:STRINGMAX); FUNCTION IAND(A,B: INTEGER): INTEGER; FUNCTION IOR (A,B: INTEGER): INTEGER; PROCEDURE CI_SWITCH; !!E8P P m P&P0PPЀ P:PA*PDP`PX) P.4$. 0!, m"Ќ,0BJPY}P !hNOINITBATOQCLOCK INITBQR CLOCKINITNITSRUCI`LDR UVCMDSETUPSYS@SERIAL_3 DRFF\_zF_l..!IMODULE ASM; IMPORT SYSGLOBALS; EXPORT TYPE STRINGMAX = STRING[255]; PROCEDURE MOVELEFT (ANYVAR S,D: INTEGER; Z:INTEGER); PROCEDURE MOVERIGHT(ANYVAR S,D: INTEGER; Z:INTEGER); PROCEDURE FASTMOVE ( S,D: ANYPTR; Z:INTEGER); PROCEDURE NEWBYTES(VAR P: A! E>PROCEDURE INITVECTS; PROCEDURE CPYMSG(MSG: STRING255); END; a! PPPPPPu*0"FaPPAP\ Ț5a*&ВM--b5YV"A   l6E!D NѼ0^.!h"*t h&r&_BASE) STRDELETEE|,H048 = ^valueextension; textdescptr = ^textdescriptor; fileptr U = ^phyle; moddescptr = ^moduledescriptor; refptrptr = ^referenceptr; $7 [=%%  fileblock: shortint; directory: addrec)); end; filedirectory = array[0..maxint] of direntry; sortdesc = record modp: moddescptr; case integer of 1: (ext: symbolptr; n: shortint); 2: (def: addrec); end; sortlist = %& startdefs, totaldefs: integer; procedure markuser; procedure releaseuser; procedure loadinfo(modnum: shortint; all,resolveexts: boolean); procedure openlinkf(extra: addrec); procedure getbytes(var p: integer; size: %l6 (uw: wordrecptr); 10: (gvp: gvrptr);  11: (vep: veptr); 12: (tdp: textdescptr); 13: (syp: symbolptr); 14: (stp: symtableptr); 15: (wlp: wordlistptr); 16: (php: fileptr); %y" (value: integer); fltpt: d (valuer: real); end; phyle = file of char; moduledirectory = packed record date: daterec;  revision: daterec;  producer: char;  systemid: byte;  notice: string[% < patchref: addrec; end; moduledescriptor = record link: moddescptr; ? case patchmod: boolean of true: ( patchlink: moddescptr;  patchlist: patchdescptr;  patchbase: integer; % Tarray[0..maxint] of sortdesc; indexlist = array[1..maxint] of shortint; ptrtable = I array[0..maxint] of addrec; var a5['g_dollar']: integer; lowheap,  highheap: addrec; # fdirectory: filedirptr; %& 17: (mdp: moddescptr); 18: (rpp: refptrptr); 19: (sdp: ^sortdesc); 20: (slp: sortlistptr); 21: (drp: moddirptr); 22: (fdp: filedirptr); 23: (bmp: ^bitmap); 24: (fbp: fibp); 25: %80]; S directorysize: integer; modulesize: integer; executable: boolean;  relocatablesize: integer;  relocatablebase: integer;  globalsize: integer;  globalbase: integer;  extblock, %  patchsize: integer); false:( defaddr: addrec;  defsize: integer;  case resolved: boolean of [ true: (startaddr: integer; progname: tid; ucase,lastmodule: boolean); false:(extaddr: %  loadfib: addrec;  wrongbyte: integer;  linkmodname: addrec; newmods: )moddescptr; allresolved: boolean; % totalreloc, totalglobal: integer; + startreloc, startglobal: integer; %(ptp: ptrtableptr); 26: (ilp: ^indexlist); 27: (pdp: patchdescptr); 28: (cp: ^char); 29: (arp: ^addrec); end; generalvalue = packed record primarytype: reloctype; datasize: datatype; patchable, % extsize, defblock, defsize, sourceblock, sourcesize,  textrecords: integer;   end; t%  addrec; X listaddr: wordlistptr; listsize: shortint; unresbits: addrec; relocbase,  globase: integer; $ relocdelta, globaldelta: integer;  filefib: addrec;  %h eheap: anyptr; K edefs: moddescptr; userstack: integer; entrypoint: moddescptr; eglobal: integer; sysdefs: )moddescptr; endmod: moddescptr; ) libfound: boolean; wrongrec: integer; % valueextend: boolean; 2 case longoffset: boolean of false: (short: byte);  true: (long:  0..16777215); Z end; valueextension = packed record case datatype of sbyte,sword,sint, ubyte,uword: %!extdescriptor = record textstart, textsize, refstart,  refsize: integer; k end; bitmap = packed array[0..maxint] of boolean; patchdescriptor = record patchlist: patchdescptr; %7 [=&{&; = procedure initloader; END; false:( defaddr: addrec;  defsize: integer;  case resolved: boolean of [ true: (startaddr: integer; progname: tid; ucase,lastmodule: boolean); false:(extaddr: & |4nNn}&'0(y.j ^A NH^RSETUPSYS__BASEOSFS:INIT.CODEODOD SYSDEF.CODE& |nNnnzd0( .j ^A NH^RSETUPSYS__BASEOSFS:INIT.CODEODOD SYSDEF.CODE& #Oeatedate, clastdate: daterec; ccreatetime, clasttime: timerec; cextra1,  cextra2: integer;  cinfo: string[20]; d end; passentry = record pbits: integer; pword: passtype; end; procedure getioerrmsg(var s &bM z zĚ,kzF,,Ě0RPzrINITLOADRRFGzFG..&MODULE ISR; import sysglobals,asm; export procedure isrlink(procentry : isrproctype; lintregaddr : charptr; lintregmask : byte; lintregvalue : byte; lintlevel : byte; isribp : pisrib); procedure permisrlink(procentry : isrproctype; &  MODULE MISC; import sysglobals, asm; export const null = 0; nullchar = chr(0); homechar = chr(1); etx = 3; bell = 7; bellchar = chr(7); bs = 8; leftchar = chr(8); tab = 9; cteol = chr(9); lf = 10; downchar = chr(& :string; lastior : integer); procedure printerror(errorcode, lastior: integer); procedure upc(var s: string); function ueovbytes(unit: unitnum): integer; procedure unblockeddam(anyvar f: fib; unum: unitnum; request: damrequesttype); procedure initfilek&&N\&TLOAD.TEXT) STRDELETEE|,H048<B GLOBALS.TEXTLISTINGD>))%INITLOAD@&Vlintregaddr : charptr; lintregmask : byte; lintregvalue : byte; lintlevel : byte; isribp : pisrib); procedure isrunlink(lintlevel : byte; isribp : pisrib); procedure isrchange(procentry : isrproctype; isribp : pisrib); END;  & v10); vt = 11; cteos = chr(11); ff = 12; clearscr = chr(12); cr = 13; eol = chr(13); dle = 16; esc = 27; escchar = chr(27); fsp = 28; rightchar = chr(28); us = 31; upchar = chr(31); del = 127; idle &inds; procedure lockup; procedure lockdown; END;  X<>D(*^Ȳ0dt.t.DP :f8Xx  xRF Ȝ@ &&integer); procedure checkrev; procedure matchfile; procedure countcode; procedure loadtext(onheap: boolean); procedure zeromem(start: anyptr; size: integer); procedure closefiles; procedure movedefs(newstartdefs: integer); procedure loadq(filetogo: fid)&~bM z z4YbF,ĚPb|ISR4RbFF4bFDZ..&bM z zbF,ĚPb|6MISC!4RbFF4 bF DZ..& > = 250; cntrl = 255; type catentry = record cname: tid;  ceft: shortint;  ckind: filekind;  cpsize: integer;  clsize: integer;  cstart: integer;  cblocksize: integer;  ccr&7 [='' var t: text); procedure foverprint(var t: text); procedure fgotoxy(anyvar f: fib; x, y: integer); procedure fgetxy (anyvar f: fib; var x, y: integer); procedure freadln (var t:text); procedure fwritechar (var t: text; ch: char; rleng: shortin'@; rleng: shortint); procedure freadstrchar (var s: string255;var p2: integer; var ch: char); procedure fwritestrchar (var s: string; var p2: integer; ch: char; rleng: shortint); procedure freadstrword (var s: string255;var p2: integer; var i: shortint);' procedure fstripname(s : fid; var pvname,ppath,pfname : string); procedure fixname(var title: string; kind: filekind); procedure zapspaces(var s: string); function suffix(var ftitle: string): filekind; function scantitle (fname: fid; var fvid: vid; ' fib; position: integer); function fposition(var f: fib): integer; function fmaxpos(var f: fib): integer; function fbufferref(var f: fib): windowp; procedure fget (var f: fib); procedure fput (var f: fib); function feof (var f: fib): boolean; ' t); procedure freadchar (var t:text; var ch: char); procedure freadword (var t:text; var i: shortint); procedure freadint (var t:text; var i: integer); procedure fwriteword (var t:text;i,rleng: shortint); procedure fwriteint (var t:text;i: integer; ' procedure fwritestrword (var s: string;var p2: integer; i,rleng: shortint); procedure freadstrstr (var t: string255;var p2: integer; var s: string); procedure fwritestrstr (var s: string; var p2: integer; anyvar t: string255; rleng: shortint); 'IbM z zbF,ĚPb|FS 6D)RbFF4LbFLDZ..'_var ftitle: fid; var fsegs: integer; var fkind: filekind): boolean; function findvolume (var fvid: vid; verify: boolean): unitnum; procedure doprefix(var dirname:fid; var kvid:vid; var kunit:integer; findunit:boolean); procedure finitb (var f: fib; wi'Vfunction feoln (var f: fib): boolean; procedure fwriteln (var f: fib); procedure fread(anyvar f: fib; anyvar buf: window); procedure fwrite(anyvar f: fib; anyvar buf: window); procedure freadbytes(anyvar f: fib; anyvar buf: window; size: integer); ' rrleng: shortint); procedure fwritestr (var t:text;anyvar s: string80; rleng: shortint); procedure freadstr (var t:text; var s: string); procedure fwritepaoc (var t: text; var a: window; aleng,rleng: shortint); procedure freadpaoc (var t: text; var a: wi'|nNn`0.j ^A NH^RSETUPSYS__BASEOSFS:INIT.CODEODOD SYSDEF.CODE'/ndow: windowp; recbytes: integer); procedure fhpopen(var f: fib; typ: faccess; var title, option: string255); procedure fhpreset(var f: fib; typ: faccess); procedure fcloseit(var f: fib; stype: string255); procedure fclose (var f: fib; ftype: closetype) ' procedure fwritebytes(anyvar f: fib; anyvar buf: window; size: integer); function fblockio (var f: fib; var buf: window; nblocks,rblock: integer; doread: boolean): integer; procedure killchar (anyvar f: fib; var sinx: integer); procedure fpage ( ' ndow; aleng: shortint); procedure freadenum (var t: text; var i: shortint; p: vptr); procedure fwriteenum(var t: text; i: shortint; rleng: shortint; p: vptr); procedure freadbool (var t: text; var b: boolean); procedure fwritebool(var t: text; b: boolean 'MODULE FS; import sysglobals, asm, misc; export type closetype = (cnormal, lock, purge, ccrunch); faccess = (readonly,writeonly,readwrite,writeappend,overwrite); vptr = record case integer of 0: (j: integer); 1: (i: ^shortint); 2: (s: ^string80); end;'; procedure fmaketype(anyvar f:fib; var title, option, typestring: string); procedure foverfile(anyvar f:fib; var title, option, typestring: string); procedure fanonfile(anyvar f:fib; var name:string; kind:filekind;size:integer); procedure fseek(var f:'7 [=((procedure fwritestrpaoc (var s: string; var p2: integer; var a: window; aleng,rleng: shortint); procedure freadstrpaoc (var s: string255; var p2: integer; var a: window; aleng: shortint); procedure freadstrenum (var s: string255; var p2: integer; var i: s(bM z z4bF,ĚPb|/ INITUNITSn@RFF4SbFSDZ..(bM z zĚbF,ĚPb|LDR  (RbFF4_bF_DZ..( 9bM z z4,bF,,Ě0RPbrSETUPSYSRRFdbFd..(>hortint; p: vptr); procedure fwritestrenum(var s: string; var p2: integer; i,rleng: shortint; p: vptr); procedure freadstrbool (var s: string255;var p2: integer; var b: boolean); procedure fwritestrbool(var s: string; var p2: integer; b: boolean; rleng: (|@ nNn"`0(.j ^A NH^RSETUPSYS__BASEOSFS:INIT.CODEODOD SYSDEF.CODE( *|(nNn*0(.j ^A NH^RSETUPSYS__BASEOSFS:INIT.CODEODOD SYSDEF.CODE( &Nz'%n) STRDELETEE d0 $*v$,4:@&ISR.TEXT&LISTINGD>))%SETUPSYS@(shortint); END; dure foverprint(var t: text); procedure fgotoxy(anyvar f: fib; x, y: integer); procedure fgetxy (anyvar f: fib; var x, y: integer); procedure freadln (var t:text); procedure fwritechar (var t: text; ch: char; rleng: shortin(MODULE INITUNITS; import sysglobals,mini,asm,fs; export procedure nounit(fp: fibp; request: amrequesttype; anyvar buffer: window; bufsize, position: integer); procedure nodam(anyvar f: fib; unum: unitnum; request: damrequesttype); procedure noisr(is( MODULE LDR; import sysglobals, misc, fs, loader, asm; export procedure openlinkfile(var filename: string); procedure load(filetogo:fid; permanent: boolean); procedure initsysunit; procedure lockfiles; procedure openfiles; procedure go; procedure lo(bM z zĚ-rF,ĚP r|KBD RrFF4 rF DZ..(t); procedure freadchar (var t:text; var ch: char); procedure freadword (var t:text; var i: shortint); procedure freadint (var t:text; var i: integer); procedure fwriteword (var t:text;i,rleng: shortint); procedure fwriteint (var t:text;i: integer; (1ribptr: pisrib); procedure unitioinit; END; ADSTRENUMFS_FWRITESTRSTR*   aX < D 4 * j 4 >  BF  * Ȭ a,  (  d n (P @ 4 T ( adrom(name: fid); END; (3(3VDJgB4N^ _NNV+|N^ _NNV+|N^ _PONNVHm/< (N=|Rn?.BHzBHzHzB'B'N n2m?<BHyBHyHzt<B'N~?<BHyBHyHzZB'B'N^?<BHyB(nNn$'0F.j ^A N^ R INITKBD__BASEhOSFS:KBD.CODEODODXIlFX,Ě\(7 [=))oYcked array[0..8] of boolean; b14= packed array[0..13] of boolean; crtcrec = packed record * rlf,ndfs,eraseeol, eraseeos,home, escape  : char; backspace : char; fillcount : 0..255; clearscreen, ) end; crtword= record case integer of 1:(highlightbyte,character:char;); 2:(wholeword: shortint); end; kbdhooktype = procedure(var statbyte,databyte: byte; var dokey: boolean); timerhooktype = procedure(statbyte,databyte: byte; var dotimer: )7 [=) oYcked array[0..8] of boolean; b14= packed array[0..13] of boolean; crtcrec = packed record * rlf,ndfs,eraseeol, eraseeos,home, escape  : char; backspace : char; fillcount : 0..255; clearscreen, ) xnNn'0.j ^A N^RKEYSINIT__BASEOSFS:KEYS.CODEODODX|FX,Ě\)v clearline : char; prefixed # : b9 end; crtirec = packed record width,height : shortint; crtmemaddr,crtcontroladdr, keybufferaddr,progstateinfoaddr:integer; keybuffersize: shortint; crtcon : crtcon)boolean); keybuffertype= array[0..maxint] of crtword; var syscom: environptr; changehardware: boolean; progstateinfo: keybufptrtype; kbd8041datareg [4358145 ]: char; kbd8041statusreg[4358147 ]: char; alphastate['ALPHAFLAG']:boolean; graphic) VbM z zĚ,7rF,,Ě0RPrrINITKBDRF(RFFrF..)@MODULE KEYS; import sysglobals, asm, misc, kbd; export const yencode = 92; type langtype = (gringo,french,german,swedish,spanish,katakana); var kbdlangjumper: record case byte of 0: (b:packed record dummy,jnum:byte end); 1: (jlang:langtype); end; kbd)>sttype; right,left,down,up: char; badch,chardel,stop, break,flush,eof : char; altmode,linedel : char; backspace, etx,prefix : char; prefixed : b14 ; cursormask : integer; spare ) : integer; end; environ = record )Lstate['GRAPHICSFLAG']:boolean; kbdhook: kbdhooktype; timerhook: timerhooktype; dumpalphahook: procedure; dumpgraphicshook: procedure; togglealphahook: procedure; togglegraphicshook: procedure; kbeepfreq, kbeepdur: byte; procedure beep; ) ($N'.TEXTn) STRDELETEE t$@(,04:4<DJP&)&LISTINGD>))&INITKBD@)4waithook: procedure; kbdreleasehook: procedure; keybuffer:^keybuffertype; keybufsize:shortint; keybuflength: shortint; capslock: boolean; kanaflag: boolean; procedure kbdio(fp: fibp; request: amrequesttype; anyvar buffer: window; length, position: )MODULE KBD; import sysglobals,asm,bootdammodule,isr,misc; export type crtconsttype = packed array [0..11] of byte; crtfrec = packed record nobreak,stupid,slowterm,hasxycrt, haslccrt,hasclock, canupscroll,candownscroll : boolean; end; b9 = pa)miscinfo: crtfrec; crttype: integer; crtctrl: crtcrec; crtinfo: crtirec; end; environptr = ^environ; keybufptrtype = ^keybuffertype; stat8041 = packed record case integer of 0: (pad1: 0..63; busy: boolean;readready:boolean); 1: (statchar: char); )V procedure beeper(frequency, duration: byte); procedure kbdinit; procedure lockedaction(a: action); procedure kbdcommand(cmd: byte; numdata: integer; b1, b2, b3: byte); function read8041byte:byte; END; andownscroll : boolean; end; b9 = pa) bM z zĚ[F,ĚP|&KEYSRFF4FDZ..**\,&NT'(S.TEXTn) STRDELETEE 4P8<@DJDLTZ`&)&LISTINGD>))&KEYSINIT@*?lthighlight: shortint; procedure crtinit; procedure crtio(fp: fibp; request: amrequesttype; anyvar buffer: window; length, position: integer); procedure updatecursor; procedure setrunlight(x:char); END; "?</<?<BgBgN?</<* nNn'0.j ^A N^ R INITBAT__BASEhOSFS:BAT.CODEODODXgFX,Ě\*,$N"'(&n) STRDELETEE 4P8<@DJDLTZ`&)&LISTINGD>))&INITBAT@*]integer); procedure initkeys; END;  _ NNV?</<0<n@??. BgN,N^.NuNVp9B=@p9B=@|0.l|?@@2;N:JJ|?.?.HnJg/- mNJ.gN`.n`HnHnHnJg/- mNN^.*bM z zĚF,ĚP|CRT RFF4FDZ..*bM z zĚ,F,,Ě0RPrINITCRTRR0RFFF..* 0MODULE BAT; import sysglobals, kbd; export var batterypresent[-563]: boolean; procedure batcommand(cmd:byte; numdata:integer; b1, b2, b3, b4, b5: byte); function batbytereceived:byte; procedure batinit; END; KBD_BEEP&Ђ .f*NuNVN^ _ NNVN^ _PONNVHnHn/<NNA!m+HHm/<NN mCHQHP/<NN-m9VDJf nCbHQHh/<)'LISTINGD>))&"INITCRT@* *   Ɉ 2&  :   mm,* P>  P  P  P  @2;N>~v~~~JB Th~*bM z zĚ,eF,,Ě0RPrKEYSINITRL,RFF..*MODULE CRT; import sysglobals, asm, misc, kbd, keys; export type scrtype = packed array[0..maxint] of crtword; scrptr=^scrtype; var screenwidth,screenheight:shortint; maxx,maxy,screensize:shortint; xpos: shortint; ypos: shortint; screen:scrptr; defau* fbM z zF,ĚP|BAT&RFF4FD^Z..*bM z zĚ,F,,Ě0RPrINITBATRL,RFF F ..*7 [=++MODULE CI; import sysglobals,fs,loader,asm,misc,kbd,crt,clock,ldr; export type sysfiles = (assembler,compiler,editor,filer,librarian,library); sysfilevols = array [sysfiles] of string[6]; sysfilenames = array [sysfiles] of fid; inforec = record + bM z zĚ,3F,,Ě0RPrCMDRpDRFF.F...+PnNn'0.j ^A N^RCLOCKINIT__BASEOSFS:CLOCK.CODEODODXFX,Ě\+0&NZ'8CK.TEXTn) STRDELETEE D`HLPTZT\djp&)'LISTINGD>))&" CLOCKINIT+ D  errsym,errblk,errnum: integer;  gotsym,gotcode: boolean; % workfid,symfid,codefid,errfid: fid; 9 end ; inforecptr = ^inforec; var streamfib: ^text;  + ^D N5'j&TEXT) STRDELETEE vz~&)'6LISTINGD>))&TCMD@+MODULE CLOCK; import sysglobals, asm, misc, kbd, bat; export type rtctime = packed record packedtime,packeddate:integer; end; function sysclock: integer; procedure sysdate (var thedate: daterec); procedure systime (var thetime: timerec); procedur+`bM z z'F,ĚP|CI96! 2RFF4(F(DZ..+ a filename: sysfilenames; tioresult:integer; chainfile: fid; chaining: (nochain,progchain,streamchain); userinfo: inforecptr; versionup: boolean; procedure homecursor ; procedure clearscreen ; procedure clearline ; procedure prompt (pl: string80+W 2 4 3  }1}@@ N^=+e setsysdate ( thedate: daterec); procedure setsystime ( thetime: timerec); procedure initclock; END;  mm,* P>  P  P  P  @2;N>~v~~~JB Th~~~BgBgN`+ 2nNnF'05.j ^A N^ R CMD__BASEhOSFS:M68KSYS.CODEODODXFX,Ě\+ T); function getchar (flushit: boolean): char; function uppercase (ch: char): char; procedure chain(filename: fid); procedure startstream(filename: fid); function streaming: boolean; procedure systemstartup; END; NVHnN.++bM z z4F,ĚP|kCLOCKRFF4 F DZ..+~bM z z4,F,,Ě0RPr CLOCKINITRR0RFF..+7 [=,!,DN(* ! !(c) Copyright Hewlett-Packard Company, 1983.  All rights are reserved. Copying or other  reproduction of this program except for archival  purposes is prohibited without the prior  written consent of Hewlett-Packard Company. , , ,REST,&11; {<>0 overrides auto-assignment}    {local mass storage directory access method} "type $lms_dam_type = {local mass storage dam} &( LIF, UCSD ); "const $primary_lms_dam = &LIF; )    {local hard disc partitioning pa, {$local_printer_timeout = &12000; {milliseconds}    {default device address vectors} "type $dav = {device address vector} &record (sc, ba, du, dv: shortint; &end; "const $HP8290X_default_dav = &dav[sc: 7, ba: 0, du: 0, dv: -1]; $HP9895,$sc_list = sc_list_type[7,8,14]; $   implement {options}   end; {options}  $page, range off$   module ctr; {ctable routines} " "(**) "(* *) "(* ,RICTED RIGHTS LEGEND   Use, duplication, or disclosure by the Government  is subject to restrictions as set forth in  paragraph (b) (3) (B) of the Rights in Technical  Data and Computer Software clause in  DAR 7-104.9(a).   HEWLETT-PACKARD COMP,rameters} "type $multi_volume_option_type = &(single_volume, multi_volume, auto_volume); "const $multi_volume_option = &auto_volume; $minimum_volume_size = {in bytes [1..maxint]} &1000000; $maximum_number_vols = {[1..30]} &30;    {local, _default_dav = &dav[sc: 7, ba: 0, du: 0, dv: -1]; $HP9885_default_dav = &dav[sc: 12, ba: -1, du: 0, dv: -1]; $harddisc_default_letter = &'G'; {9134} $harddisc_default_dav = &dav[sc: 7, ba: 2, du: 0, dv: -1]; $local_printer_default_dav =, Warning: 9 *) "(* This module should not be modified! *) "(* *) "(**P)   import "sysglobals, loader, options, ldr; "  export " "const {mass s,,!ANY  Fort Collins, Colorado C *)    $page, sysprog$   program {self-configuring} ctable;    module options;  "(**4) "(* Choose the desired configuration options *) , printer timeout} "{ $maximum allowed delay between any two bytes: &>0 specifies time in milliseconds &=0 specifies infinite timeout & $recommended values: &- HP2630 series (HP-IB) 3000 &- HP2670 series (HP-IB) 3000 &- HP9876 ,  &dav[sc: 7, ba: 1, du: -1, dv: -1]; $SRM_default_dav = &dav[sc: 21, ba: {node} 0, *du: {unit} 8, dv: -1];  "  {system unit auto-search declarations} "const $sysunit_list_length = 9; "type $sysunit_list_type = &array[1..sysunit_list_leng,,\A"(* by editing the CONSTant declarations in *) "(* this module.  *) "(**])   import "sysglobals;   export   {power-up system unit} "const $system_unit =  ,  (HP-IB) 7000 &- HP82905 (HP-IB) 12000 $Note: the HP82905 is currently NOT supported &by PASCAL 2.0, due to its inappropriate &response to interface clear (IFC), and &its incompatible graphics dump sequence. "} "const , Kth] of unitnum; "const $sysunit_list = &sysunit_list_type[11,9,7,45,4,44,3,43,3];    {HPIB select code scanning declarations} "const $sc_list_length = 3; "type $sc_list_type = &array[1..sc_list_length] of byte; "const  ,7 [=-- ,ba,du:byte); "procedure tea_amigo_sv(un:unitnum;ds:ds_type;sc,ba,du:byte;os:integer;lr:char;mb:integer); "procedure tea_CS80_disc(un:unitnum;ds:ds_type;sc,ba,du,dv:byte;os,id,mb:integer); "procedure tea_CS80_tape(un:unitnum;ds:ds_type;sc,ba,du,dv:byte;-~(ptr.syp^)+1; .ptr.a := ptr.a+ord(odd(ptr.a)); .valueptr.a := ptr.a+2; .if found then 0value := valueptr.vep^.value; .ptr.a := ptr.a+ptr.gvp^.short; ,end; {while} *modp := link; (end; {with modp^} "end; {value}    procedure tea {lowest-level -torage letter specifiers} $HPmini = 'M'; $HP9885 = 'F'; $HP9895 = 'H'; $HP8290X = 'N'; $HP913X_A = 'U'; $HP913X_B = 'V'; $HP913X_C = 'W'; $CS80disc = 'Q'; $CS80tape = 'K'; $SRM = 'G'; $PRINTER = 'J'; $RAM = 'R'; $-X_B_mp = mp_type[tpm: 4*305, bpt: 31*256]; $HP913X_C_mp = mp_type[tpm: 6*305, bpt: 31*256]; $null_mp = mp_type[tpm: 0, bpt: 0]; " "type $ds_type = {Directory access method Specifier for local mass storage} &( primary_dam, {either LI-Uvol_offset(current_vol, number_vols: shortint; mp: mp_type): integer; "function block_boundaries(mp: mp_type): mp_type; "function value(symbol: string255): integer;  " "{ table entry assignment procedures } " "procedure tea_memory_volume_dam(ds:ds_- id:integer); "  implement {ctr}   const "T = true; {abbreviation for tea procedure calls} "F = false; {abbreviation for tea procedure calls} "  var "temp_unitable: unitableptr;  "  procedure check(parameter, lower_bound, upper_bound: i-NODEVICE = #255; $ "{ mass storage medium parameters - we primarily need bytes/medium, but &actually work with two parameters, bytes/track and tracks/medium, so &that when we partition large media into multiple logical volumes, we -cF or UCSD, as specified in options} (secondary_dam, {the one not selected as primary} (LIF_dam, {LIF, regardless of primary/secondary choice} (UCSD_dam ); {UCSD, regardless of primary/secondary choice}  $page$ $ "var  - type); "procedure tea_boot(un:unitnum); "procedure tea_srm(un:unitnum;sc,ba,du:byte); "procedure tea_crt(un:unitnum); "procedure tea_kbd(un:unitnum); "procedure tea_local_printer(un:unitnum;sc,ba:byte;uvid:vid;bto:integer);  - nteger); "begin $if (parameterupper_bound) then &halt(-8) {value range error} "end;  $page$   function value(symbol: string255): integer; "var $modp: moddescptr; $ptr, valueptr: addrec; $found: boolean; -7&can do so on track boundaries for optimum efficiency. } "type $mp_type = {medium parameters} &record (tpm: integer; {tracks per medium} (bpt: integer; {bytes per track} &end; " "const {medium parameters; LOGICAL sizes unless ot-@$bootdevice_letter: char; $bootdevice_dav: dav; $bootdevice_lun: unitnum;  " "procedure create_temp_unitable; "procedure assign_and_clear_unit(lunit: unitnum); "procedure assign_temp_unitable; "function sysunit_ok(system_unit: unitnum): boolean; - '"procedure tea_mini(un:unitnum;ds:ds_type;du:byte); "procedure tea_HP9885(un:unitnum;ds:ds_type;sc,du:byte;block_os:shortint); "procedure tea_HP9895(un:unitnum;ds:ds_type;sc,ba,du:byte;block_os:shortint); "procedure tea_HP8290X(un:unitnum;ds:ds_type;sc-"begin {value} $value := 0; $found := false; $modp := sysdefs; $while (modp<>nil) and not found do &with modp^ do (begin *ptr := defaddr; *while (ptr.a0) and (tm_proc.value<>0) then {assign the entry} &begin ( (with temp_unitable^[un] do *begin ,dam  := dam_proc.dam; ,tm . #.umaxbytes := p_umaxbytes; *end; {with} ( (with bootdevice_dav do {see if this entry points to it} *if (p_letter=bootdevice_letter) and -((dam_name='LIFMODULE_LIFDAM') or (p_letter=SRM)) and -(p_sc=sc) and (p_ba=ba) and (p_du=du) and (p_dv=dv).#$tracks := mp.tpm div number_vols; {each vol gets this much} $if current_vol=number_vols-1 then &tracks := tracks+mp.tpm mod number_vols; {last vol gets any extra} $vol_bytes := tracks*mp.bpt; "end; "   function vol_offset(current_vol, .>p_umediavalid: boolean; {open files are valid} ${ p_uuppercase: boolean; {volume name should be uppercased} &p_uisfixed: boolean; {medium not removable flag} ${ p_ureportchange: boolean; {driver directive to report/ignore medium ch. := tm_proc.tm; ,sc := p_sc; ,ba := p_ba; ,du := p_du; ,dv 4:= p_dv; ,byteoffset := p_byteoffset; ,devid  := p_devid; ,uvid := p_uvid; ,dvrtemp  := 0; . 2 and -(p_byteoffset=0) then {remember this unit number!} ,bootdevice_lun := un; & &end; {if} "end; {tea}  $page$ $  function dam(ds: ds_type): string255; "begin $case ds of &primary_dam: (if primary_lms_dam=LIF *then dam := 'LIFMODULE_LIFDAM'.number_vols: shortint; mp: mp_type): integer; "begin $vol_offset := (mp.tpm div number_vols)*current_vol*mp.bpt; "end; "   function block_boundaries(mp: mp_type): mp_type; "begin $block_boundaries.tpm := mp.tpm*mp.bpt div 512; $block_boundaries.b.s1Table Entry Assignment procedure} $( un:unitnum; ${unit number} &dam_name: string255; 0 {directory access method} &tm_name: string255; ({transfer method (driver)} &p_sc: byte; {select code} &p_ba: byte; .xanges} ${ p_pad: 0..1 "{(not used)} &p_uisblkd: boolean; {blocked volume flag} &p_umaxbytes: integer ); {volume size in bytes} " "var $dam_proc: &packed record case integer of (0: (dam: damtype); (1: (value, slink: in. " {always initially zero!} ,letter := p_letter; ,offline := false; _ {always initially online!} ,uisinteractive := p_uisinteractive; ,umediavalid := false; - {never valid to start with} ,uuppercase .  *else dam := 'UCSDMODULE_UCSD_DAM'; &secondary_dam: (if primary_lms_dam=LIF *then dam := 'UCSDMODULE_UCSD_DAM' *else dam := 'LIFMODULE_LIFDAM'; &LIF_dam: (dam := 'LIFMODULE_LIFDAM'; &UCSD_dam: (dam := 'UCSDMODULE_UCSD_DAM'; $end; {case} "end; .7 [=// $check(sc, 7, 31); $check(ba, 0, 7); $check(du, 0, 7); $case lr of &HP913X_A: medium_size := svol_bytes(HP913X_A_mp); &HP913X_B: medium_size := svol_bytes(HP913X_B_mp); &HP913X_C: medium_size := svol_bytes(HP913X_C_mp); &otherwise h/&2) umaxbytes is dependent upon the media loaded, thus it is set by the )driver at clearunit time and whenever it detects a media change. $BOTTOM LINE: the tape CANNOT be partitioned into multiple volumes! "} "begin $check(sc, 7, 31); $check(ba, 0, /',HPmini,F,F,T,svol_bytes(HPmini_mp)); "end; "   procedure tea_boot(un: unitnum); "begin $tea(un,'BOOTDAMMODULE_BOOTDAM','BOOTDAMMODULE_BOOTTM',0\,'',#0,F,F,T,maxint); "end;    procedure tea_srm(un:unitnum;sc,{node}ba,{unit}du:byte/80,'',HP9885,F,F,T,svol_bytes(HP9885_mp)-os); "end;  "  procedure tea_HP9895(un:unitnum;ds:ds_type;sc,ba,du:byte;block_os:shortint); "var $os: integer; "begin $check(sc, 7, 31); $check(ba, 0, 7); $check(du, 0, 3); $os := block_os*512; $check(os/ {alt(-8); {value range error} $end; {case} $check(os, 0, medium_size-1); $if os mod 256<>0 then halt(-8) {value range error}; $check(mb, 1, medium_size-os); $tea(un,dam(ds),'AMIGODVR_AMIGOIO',sc,ba,du,0,os,0,'',lr,F,T,T,mb); "end;  $page$   proce/7); $check(du, 0, 7); $check(dv, 0, 7); $tea(un,dam(ds),'CS80DVR_CS80IO',sc,ba,du,dv,0,id,'',CS80tape,F,F,T,0); "end;  $page$ "  procedure create_temp_unitable; "var $lunit: unitnum; "begin $new(temp_unitable); $tea_nounit(0); {assign one dumm/pt := 512; "end;  $page$   { standard driver-oriented table entry assignment procedures }    procedure tea_nounit(un:unitnum); "begin $tea(un,'INITUNITS_NODAM','INITUNITS_NOUNIT',06,'',#0,F,F,F,0); "end; $   procedure tea_memory_v/); "begin $check(sc, 7, 31); $check(ba, 0, 63); $if du<>0 then check(du, 7, 26); $tea(un,'SRMDAMMODULE_SRMDAM','SRMAMMODULE_SRMAM',sc,ba,du,0,0,0,'',SRM,F,T,T,maxint); "end;    procedure tea_local_printer(un:unitnum;sc,ba:byte;uvid:vid;bto:in/, 0, svol_bytes(HP9895_mp)-1); $tea(un,dam(ds),'AMIGODVR_AMIGOIO',sc,ba,du,0,os,0,'',HP9895,F,F,T,svol_bytes(HP9895_mp)-os); "end;    procedure tea_HP8290X(un:unitnum;ds:ds_type;sc,ba,du:byte); "begin $check(sc, 7, 31); $check(ba, 0, 7); $check(/ .dure tea_CS80_disc(un:unitnum;ds:ds_type;sc,ba,du,dv:byte;os,id,mb:integer); "{ $note: the uisfixed field is now assigned in the clearunit procedure "} "begin $check(sc, 7, 31); $check(ba, 0, 7); $check(du, 0, 7); $check(dv, 0, 7); $tea(un,dam(ds)/RBolume_dam(ds:ds_type); "begin $tea(0,dam(ds),'INITUNITS_NOUNIT',0q,'',RAM,F,T,T,0); "end;    procedure tea_crt(un:unitnum); "begin $tea(un,'MISC_UNBLOCKEDDAM','CRT_CRTIO',0%,'CONSOLE',#0,T,T,F,0); "end; $  / teger); "begin $check(sc, 7, 31); $check(ba, 0, 30); $check(bto, 0, 60*60*1000); {one hour should be enough!} $tea(un,'MISC_UNBLOCKEDDAM','PRTDVR_PRTIO',sc,ba,0,0,0,bto,uvid,#0,F,T,F,0); "end;  $page$  / ddu, 0, 3); $tea(un,dam(ds),'AMIGODVR_AMIGOIO',sc,ba,du,0,0,0,'',HP8290X,F,F,T,svol_bytes(HPmini_mp)); "end;    procedure tea_amigo_sv(un:unitnum;ds:ds_type;sc,ba,du:byte;os:integer;lr:char;mb:integer); "var $medium_size: integer; "begin / ,'CS80DVR_CS80IO',sc,ba,du,dv,os,id,'',CS80disc,F,F,T,mb); "end;    procedure tea_CS80_tape(un:unitnum;ds:ds_type;sc,ba,du,dv:byte;id:integer); "{ # important differences from CS80 disc: &1) byteoffset always assumed to be zero  /XR procedure tea_kbd(un:unitnum); "begin $tea(un,'MISC_UNBLOCKEDDAM','KEYS_KBDIO',0,'SYSTERM',#0,F,T,F,0); "end; $   procedure tea_mini(un:unitnum;ds:ds_type;du:byte); "begin $check(du, 0, 1); $tea(un,dam(ds),'MINI_MINIIO',0,0,du,0,0,0,'/ procedure tea_HP9885(un:unitnum;ds:ds_type;sc,du:byte;block_os:shortint); "var $os: integer; "begin $check(sc, 8, 31); $check(du, 0, 3); $os := block_os*512; $check(os, 0, svol_bytes(HP9885_mp)-1); $tea(un,dam(ds),'F9885DVR_F9885IO',sc,0,du,0,os,/7 [=0J0y entry} $for lunit := 1 to maxunit do {copy the others; avoids symbol table search each time!} &temp_unitable^[lunit] := temp_unitable^[0]; "end;    procedure assign_and_clear_unit(lunit: unitnum); "var $f: fib; "begin $if temp_unitable=nil0 "end;    procedure zap_assigned_unit(lunit: unitnum); "begin $tea_nounit(lunit); {zap the temp unitable entry} $unitable^[lunit] := temp_unitable^[lunit]; {now zap the real one!} "end;  $page$   function on_same_medium(lun1, lun2: unitnum)0e^[i] do ,begin ,maxa(unitable^[lun1].umaxbytes, byteoffset + umaxbytes); ,zap_assigned_unit(i); & end; *end; &end; "end;   end; {ctr}  $page$   module BRstuff; {BOOTROM stuff}  "(**)0 d27,d28,d29,d30,d31); " "msus_type = {BOOTROM's mass storage unit specifier} $packed record case boolean of &false: {8-bit unit number} (( fmt: fmt_type; {directory format} *dev: dev_type; {device} *un: signed8; {8-bit unit number} *sc: signe0J then halt(-3); {unassigned pointer} $with unitable^[lunit], f do &if (letter<>RAM) or (lunit=0) then (begin *unitable^[lunit] := temp_unitable^[lunit]; *funit := lunit; *call(tm, addr(f), clearunit, lunit, 0, 0); 0: boolean; "var $uep: ^unitentry; "begin {on_same_medium} $uep := addr(unitable^[lun2]); $with unitable^[lun1] do &on_same_medium := (sc=uep^.sc) and (ba=uep^.ba) and 8(du=uep^.du) and (dv=uep^.dv) and 8(letter=uep^.letter);  0 L "(* *) "(* Warning: 9 *) "(* This module should not be modified! *) "(* *) "(** )  0 ^d8; {select code} *ba: signed8 {bus address} ); &true: {4-bit volume / 4-bit unit number for CS80 discs} (( pad: signed8; {format/device byte} *vn4: signed4; {4-bit volume number} *un4: signed4; {4-bit unit number} ); 0*offline := uisblkd and (ioresult<>0); (end; {with} "end; "   procedure assign_temp_unitable; "var $lunit: unitnum; "begin $if temp_unitable=nil then halt(-3); {unassigned pointer} $lockfiles; {close all standard system files} $for lunit 0#"end; {on_same_medium}    procedure maxa(var a: integer; b: integer); "begin $if a < b then a := b; "end;    procedure remove_extraneous_volumes(lun1, lun2: unitnum); "var $all_present: boolean; $i: unitnum; "begin $if sysunit_o0 ` import "sysglobals, options, ctr;   export " "function internal_mini_present: boolean; "procedure get_bootdevice_parms(var bootdevice_letter: char; var bootdevice_dav: dav);   implement {BRstuff}   type " "signed4 = -8..7; "signed8 0q$end; {msus_type} $  var " "ROM_ID[16382]: {BOOTROM identification word} $shortint; " "ndrives[-296]: {Maximum Unit for Internal Mini-Floppy} $packed record b: signed8; end; " "default_msus[-292]: {boot device's MSUS} $msus_type;  $page$ 0:= 0 to maxunit do &assign_and_clear_unit(lunit); "end; "   function sysunit_ok(system_unit: unitnum): boolean; "begin $sysunit := system_unit; $initsysunit; $with unitable^[system_unit] do &sysunit_ok := uisblkd and not offline and (uvid<>'');0Wk(lun1) then &begin (all_present := true; (i := lun1 + 1; (while (i <= lun2) and all_present do *begin all_present := all_present and sysunit_ok(i); i := i + 1; end; (if not all_present then *begin *for i := lun1 + 1 to lun2 do with unitabl0  = -128..127; " "fmt_type = {format field in the msus byte} $(f0,f1,f2,f3,f4,f5,f6,f7); " "dev_type = {device field in the msus byte} $( d0, d1, d2, d3, d4, d5, d6, d7, d8, d9,d10,d11,d12,d13,d14,d15, %d16,d17,d18,d19,d20,d21,d22,d23,d24,d25,d26,0h  function internal_mini_present: boolean; "begin $if ROM_ID<0 &then internal_mini_present := true {1.0 BOOTROM on 9826} &else internal_mini_present := ndrives.b<>-1; {2.0 or greater BOOTROM} "end; "   procedure get_bootdevice_parms07 [=11 dent: shortint; var letter: char); "return_CS80_parms_type = procedure(var devid: integer; var mp: mp_type);  "proc_type = $packed record case integer of &0: (value, slink: integer); &1: (up: uep_proc_type); &2: (gai: HPIBget_amigo_ident_type); 1 upper_byte, lower_byte: byte); (2: (amigo_class: amigo_class_type); &end; " "procedure set_scanneddevice_letter(get_letter_proc: proc_type); $var &device_letter: char; $begin {set_scanneddevice_letter} &if get_letter_proc.value<>0 then (begin 1*NODEVICE, NODEVICE, NODEVICE, NODEVICE, NODEVICE, NODEVICE, NODEVICE, NODEVICE ]; $null_dav = dav[sc: 0, ba: 0, du: 0, dv: 0]; "begin $bootdevice_dav := null_dav; $if ROM_ID<0 then {1.0 Boot ROM on 9826; internal minifloppy only} &bootdevice_lette1Ћ module scanstuff;  "(**) "(* *) "(* Warning: 9 *) "(* This module should not be modified! *) "(*  1 &3: (gl: get_letter_type); &4: (rcp: return_CS80_parms_type); $end;    var "allocate_bkgnd_info_proc: proc_type; "deallocate_bkgnd_info_proc: proc_type; "abort_bkgnd_process_proc: proc_type; "HPIBcheck_sc_proc: proc_type; "HPIBget_amigo_ident_1H*call(get_letter_proc.gl, addr(ue), ident.word, device_letter); *scanneddevice_letter := device_letter; (end; {if} $end; {set_scanneddevice_letter} " "begin {scanneddevice_letter} $scanneddevice_letter := NODEVICE; {until proven otherwise} $if bkg1=r := HPmini $else {2.0 or greater Boot ROM} &with default_msus do (begin *bootdevice_dav.sc := sc; *bootdevice_dav.ba := ba; *bootdevice_dav.du := un; *if fmt=f7 then {non sector-oriented device} ,case dev of .d1: bootdevice_letter := SRM;1!  *) "(**)   import "sysglobals, options, ctr; "  export " "procedure init_scanstuff; "function scanneddevice_letter(scan_dav: dav): char; "procedure get_CS80_parms(CS80_dav: dav; var devid: integ1 proc: proc_type; " "get_amigo_letter_proc: proc_type; "get_CS80_letter_proc: proc_type; "return_CS80_parms_proc: proc_type; " "bkgnd_and_dischpib_present: boolean;  $page$   function scanneddevice_letter(scan_dav: dav): char; " "type $amigo_cl1Und_and_dischpib_present then &try (ue.sc := scan_dav.sc; (ue.ba := scan_dav.ba; (ue.du := scan_dav.du; (ue.dv := scan_dav.dv; (call(allocate_bkgnd_info_proc.up, addr(ue)); (call(HPIBcheck_sc_proc.up, addr(ue)); (call(HPIBget_amigo_ident_proc.gai, a1(var bootdevice_letter: char; var bootdevice_dav: dav); "type $letter_table_type = array[dev_type] of char; "const $letter_table = {BOOTROM dev to Pascal letter conversion table} &letter_table_type ([ HPmini, NODEVICE, NODEVICE, NODEVICE, HP9895, 1 .otherwise bootdevice_letter := NODEVICE; ,end {case} *else {sector-oriented device} ,begin .bootdevice_letter := letter_table[dev]; .case bootdevice_letter of 0HPmini: 2begin 4bootdevice_dav.sc := 0; 4bootdevice_dav.ba := 0; 2end; 0HP9885: 1er; var mp: mp_type); "  implement {scanstuff}    type "uep_type = ^unitentry;  "uep_proc_type = procedure(uep: uep_type); "HPIBget_amigo_ident_type = procedure(uep: uep_type; var ident: shortint); "get_letter_type = procedure(uep: uep_type; i1 ass_type = {upper three bits of the first ident byte} &(storage, display, data_communication, processor, 'stimulus, mesasurement, unassigned6, unassigned7); " "var $ue: unitentry; $ident: &packed record case integer of (0: (word: shortint); (1: (1 HP8290X, HP9885, HP913X_A, *HP913X_B, HP913X_C, NODEVICE, NODEVICE, NODEVICE, NODEVICE, NODEVICE, NODEVICE, *CS80disc, CS80tape, NODEVICE, NODEVICE, NODEVICE, NODEVICE, NODEVICE, NODEVICE, 1}2bootdevice_dav.ba := 0; 0CS80disc, CS80tape: {special volume/unit field} 2begin 4bootdevice_dav.du := un4; 4bootdevice_dav.dv := vn4; 2end; 0otherwise {do nothing}; .end; {case} ,end; {else} (end; {with} "end;   end; {BRstuff}  $page$  17 [=2X2 := null_mp; &end; {else} "end; {HPCS80_mp}    procedure init_scanstuff; "begin {init_scanstuff} $allocate_bkgnd_info_proc.value := value('BKGND_ALLOCATE_BKGND_INFO'); $deallocate_bkgnd_info_proc.value := value('BKGND_DEALLOCATE_BKGND_INFO'); 2**) "(* Caution: *) "(* Modify this section only if the desired *) "(* configuration cannot be achieved by *) "(* modifying the OPTIONS module. *) "(***2 Flt=ord(inoerror); "end; {unit_prefix_successful} "   function same_9895_913X_davs: boolean; "begin {same_9895_913X_davs} $same_9895_913X_davs := (harddisc_letter=HP9895) and ;(harddisc_dav.sc=HP9895_dav.sc) and ;(harddisc_dav.ba=HP9895_dav.ba); 2} ,repeat {see if all four units exist} .not_a_913X := scanneddevice_letter(temp_dav)<>HP9895; .du := du-1; ,until (du<0) or not_a_913X; ,if not_a_913X then .begin 0HP9895_dav := device_dav; 0if same_9895_913X_davs then {zap the 913X dav} 2hardd2Oddr(ue), ident.word); (case ident.amigo_class of *storage: ,if ident.upper_byte=2 .then set_scanneddevice_letter(get_CS80_letter_proc) .else set_scanneddevice_letter(get_amigo_letter_proc); *display: ,scanneddevice_letter := PRINTER; *otherwise ,{2b$abort_bkgnd_process_proc.value := value('BKGND_ABORT_BKGND_PROCESS'); $HPIBcheck_sc_proc.value := value('DISCHPIB_HPIBCHECK_SC'); $HPIBget_amigo_ident_proc.value := value('DISCHPIB_HPIBGET_AMIGO_IDENT'); $ $get_amigo_letter_proc.value 2***)   import "sysglobals, fs, ldr, options, ctr, BRstuff, scanstuff, bootDAMmodule;   const "srmsysprefix = '/WORKSTATIONS/SYSTEM'; "unassigned_dav = $dav[sc: -1, ba: -1, du: -1, dv: -1];   var "HP8290X_dav: dav2 "end; {same_9895_913X_davs}  $page$   procedure assign_dav(device_letter: char; device_dav: dav); " "var $temp_dav: dav; $not_a_913X: boolean; " "begin {assign_dav} $ $if device_letter in [HP8290X, HP9895, HP9885] then &with device_dav do {f2do nothing}; (end; {case} (call(deallocate_bkgnd_info_proc.up, addr(ue)); &recover (call(abort_bkgnd_process_proc.up, addr(ue)); "end; {scanneddevice_letter}  $page$   procedure get_CS80_parms(CS80_dav: dav; var devid: integer; var mp: mp_type); 2 := value('AMIGODVR_GET_LETTER'); $get_CS80_letter_proc.value := value('CS80DVR_GET_LETTER'); $return_CS80_parms_proc.value := value('CS80DVR_RETURN_CS80_PARMS'); " $bkgnd_and_dischpib_present := (allocate_bkgnd_info_proc.value<>0) and 2 ; "HP9895_dav: dav; "HP9885_dav: dav; "local_printer_dav: dav; "SRM_dav: dav; "harddisc_dav: dav; "harddisc_letter: char; "CS80tape_dav: dav; " "scanner_dav: dav; "i,j: shortint; "bus_address: shortint; "mp: mp_type; "nvols: shortint; 2 orce to next lower even number if odd} (du := du-ord(odd(du)); $ $case device_letter of & &HP8290X: (HP8290X_dav := device_dav; & &HP9885: (HP9885_dav := device_dav; & &SRM: (SRM_dav := device_dav; & &CS80tape: (CS80tape_dav := device_dav; 2H"const $null_mp = mp_type[ tpm: -1, bpt: -1]; "begin {HPCS80_mp} $if (scanneddevice_letter(CS80_dav) in [CS80disc, CS80tape]) and '(return_CS80_parms_proc.value<>0) then &call(return_CS80_parms_proc.rcp, devid, mp) $else &begin (devid := -1; (mp2B(deallocate_bkgnd_info_proc.value<>0) and B(abort_bkgnd_process_proc.value<>0) and B(HPIBcheck_sc_proc.value<>0) and B(HPIBget_amigo_ident_proc.value<>0); "end; {init_scanstuff}    end; {scanstuff}  $page, range on$   {program ctable}  "(2 ^"devid: integer; "dummy_boolean: boolean; " "  function unit_prefix_successful(dirname: fid): boolean; "var $unitnum: integer; $kvid: vid; "begin {unit_prefix_successful} $doprefix(dirname, kvid, unitnum, true); $unit_prefix_successful := ioresu2& &HP913X_A, HP913X_B, HP913X_C, CS80disc: (begin *harddisc_letter := device_letter; *harddisc_dav := device_dav; (end; & &HP9895: {question: a real 9895 or a 913X?} (with temp_dav do *begin ,temp_dav := device_dav; ,du := 3; {point to unit 327 [=33r mass storage devices and a local printer } " "with scanner_dav do $begin &du := 0; &dv := 0; &i := 0; &repeat (i := i+1; (sc := sc_list[i]; (for bus_address := 0 to 7 do *begin ,ba := bus_address; ,assign_dav(scanneddevice_letter(scanner_dav3 asc, CS80tape_dav);  $page$ " "{ Create a temporary table & fill it with dummy entries } " "create_temp_unitable; " " " "{ standard assignments: avoid changing } " "tea_memory_volume_dam(primary_dam); " "tea_crt( 1); "tea_kbd( 2); " "if inte3@(local_printer_dav := device_dav; ( &otherwise ({do nothing}; $ $end; {case} " "end; {assign_dav}     procedure search_for_complementary_CS80_unit(target_device_letter: char; device_dav: dav); " "var $temp_dav: dav; $temp_letter: char; 3ATnit_scanstuff; " " "{ default device address vector assignments } " "HP9885_dav := HP9885_default_dav; ${overridden if bootdevice} "SRM_dav  := SRM_default_dav;  {overridden if bootdevice} 3 ), scanner_dav); *end; {for} &until i>=sc_list_length; $end; {with} $ " "{ get the bootdevice parameters & assign its dav } " "get_bootdevice_parms(bootdevice_letter, bootdevice_dav); "assign_dav(bootdevice_letter, bootdevice_dav); 3 rnal_mini_present and (bootdevice_letter<>HP8290X) then $begin &tea_mini( 3, primary_dam, {du} 0); &tea_mini( 4, primary_dam, {du} 1); $end {then} "else $with HP8290X_dav do &begin (tea_HP8290X ( 3, primary_dam, sc, ba, du+0);  3Y$target_found: boolean; " "begin {search_for_complementary_CS80_unit} $ $temp_dav := device_dav; $temp_dav.du := 0; $temp_dav.dv := 0; $temp_letter := target_device_letter; {anything other than NODEVICE} $target_found := false; $ $repeat &if t3`"local_printer_dav := local_printer_default_dav; {may be overridden by scan} "HP8290X_dav := HP8290X_default_dav; {may be overridden by either} "HP9895_dav := HP9895_default_dav; 0{may be overridden by either} "harddisc_dav 3 "bootdevice_lun := 0; {set otherwise in procedure tea if boot unit assigned} " " "{ CS80 complementary unit assignments } " "if bootdevice_letter=CS80disc then $search_for_complementary_CS80_unit(CS80tape, bootdevice_dav) "else if bootdevice_lette3(tea_HP8290X ( 4, primary_dam, sc, ba, du+1); &end; {then} " "with SRM_dav do $tea_srm( 5, sc, ba, du); $ "with local_printer_dav do $tea_local_printer( 6, sc, ba, {uvid} 'PRINTER', local_printer_timeout); " " " "{ 8" floppies } " "with HP983zemp_dav.du<>device_dav.du then (begin *temp_letter := scanneddevice_letter(temp_dav); *target_found := temp_letter=target_device_letter; *if target_found then ,assign_dav(temp_letter, temp_dav); (end; {if} &temp_dav.du := temp_dav.du+1; $until targ3 := harddisc_default_dav; {may be overridden by either} "harddisc_letter := harddisc_default_letter; {may be overridden by either} "CS80tape_dav := unassigned_dav; @{assigned only if explicitly found} " " "{ scan the HPIB's fo3 r=CS80tape then $search_for_complementary_CS80_unit(CS80disc, bootdevice_dav) "else if harddisc_letter=CS80disc then $search_for_complementary_CS80_unit(CS80tape, harddisc_dav) "else if CS80tape_dav.sc>0 then $search_for_complementary_CS80_unit(CS80di3D95_dav do $if sc>0 then &begin (tea_HP9895( 7, primary_dam, sc, ba, du+0, {block_offset} 0); (tea_HP9895( 8, primary_dam, sc, ba, du+1, {block_offset} 0); &end; {with} " "with HP9885_dav do $begin &tea_HP9885( 9, primary_dam, sc, du+0, {block_offs3isc_dav := unassigned_dav; .end {then} ,else .begin 0harddisc_letter := device_letter; 0harddisc_dav := device_dav; 0if same_9895_913X_davs then {zap the 9895 dav} 2HP9895_dav := unassigned_dav; .end; {else} *end; {with}  $page$ & &PRINTER: 3et_found or (temp_letter=NODEVICE) or (temp_dav.du>7); " "end; {search_for_complementary_CS80_unit}  $page$   begin {ctable} " "{ various initializations } " "call(cleariohook); {init the IO cards in case the BOOTROM drivers messed with them} "i37 [=4n4&otherwise mp := null_mp; $end; {case} $ $if mp.bpt<>0 then &begin (nvols := mp.tpm div ((minimum_volume_size+mp.bpt-1) div mp.bpt); (if nvols=0 then nvols := 1; {special case: entire medium smaller than min_vsize!} (if nvols>maximum_number_vols4,{unrecognized letter}; ( (end; {case} " "$end$ { local hard disc assignment section }  $page$ " "{ CS80 tape assignment section } " "$if true$ $ $with CS80tape_dav do &if sc>0 then (begin *get_CS80_parms(CS80tape_dav, devid, mp); *tea_CS84 "(* NOTE: Additional duplicate SRM entries may be assigned here, then *) "(* prefixed down below after assigning the temp_unitable. However *) "(* for correct behavior in assigning the system unit, specifically *) "(* if booting off the S4&tea_HP9885(50, secondary_dam, sc, du+1, {block_offset} 0); $end; {with}  $page$ " "{ templates for "manually" specifying mass storage table entry assignments } " " "$if false$ { HP8290X } $tea_HP8290X( 3, primary_dam, {sc} 7, {ba} 0, {du} 0); $4S then nvols := maximum_number_vols; & if multi_volume_option=single_volume then nvols := 1; &end; $ $with harddisc_dav do &if sc>0 then (case harddisc_letter of * *HP9895: {9895 ident with all four units present; probably a HP913X} ,for i := 0 t4r0_tape (41, LIF_dam, sc, ba, du, dv, ={devid} devid); (end; {if} ( "$end$ { CS80 tape assignment section}  $page$  " "{ alternate access entries } " " "{ secondary directory access method entries for the mini/micro floppies } " "if internal_4 _RM, unit #45 must be the assigned AFTER all *) "(* the other SRM units have been assigned! *) "(#**;*)  "with SRM_dav do $begin &{ tea_srm( 42, sc, ba, d4stea_HP8290X( 4, primary_dam, {sc} 7, {ba} 0, {du} 1); "$end$ " " "$if false$ { HP9895 } $tea_HP9895( 7, primary_dam, {sc} 7, {ba} 0, {du} 0, {block_offset} 0); $tea_HP9895( 8, primary_dam, {sc} 7, {ba} 0, {du} 1, {block_offset} 0); "$end$ " " 4et} 0); &tea_HP9885(10, primary_dam, sc, du+1, {block_offset} 0); $end; {with}  $page$ " "{ local hard disc assignment section } " "$if true$ $ $case harddisc_letter of &HP9895: mp := HP9895_mp; &HP913X_A: mp := HP913X_A_mp; &HP913X_B: mp := 4jo 3 do .tea_HP9895(11+i, primary_dam, sc, ba, {du} i, {block_offset} 0); * *HP913X_A, HP913X_B, HP913X_C: ,for i := 0 to nvols-1 do .tea_amigo_sv(11+i, primary_dam, sc, ba, du, A{offset} vol_offset(i, nvols, mp), A{letter} harddisc_letter, A{umaxby4mini_present and (bootdevice_letter<>HP8290X) then $begin &tea_mini(43, secondary_dam, {du} 0); &tea_mini(44, secondary_dam, {du} 1); $end {then} "else $with HP8290X_dav do &begin (tea_HP8290X(43, secondary_dam, sc, ba, du+0); (tea_HP8290X(44, sec4 Lu); {free} &{ tea_srm( 46, sc, ba, du); {free} &tea_srm( 45, sc, ba, du); {for possible use as the system unit} $end; {with} " " " "{ secondary directory access method entries for the floppies } " "with HP9895_dav do $if sc>0 then &begin (t4^HP913X_B_mp; &HP913X_C: mp := HP913X_C_mp; &CS80disc: begin 2get_CS80_parms(harddisc_dav, devid, mp); 2if mp.tpm=1 then {track partitioning info unavailable...} 4mp := block_boundaries(mp); {will have to fake it!} 0end;  4tes} vol_bytes(i, nvols, mp)); ( *CS80disc: ,for i := 0 to nvols-1 do .tea_CS80_disc (11+i, primary_dam, sc, ba, du, dv, C{offset} vol_offset(i, nvols, mp), C{devid} devid, C{umaxbytes} vol_bytes(i, nvols, mp)); * *otherwise  4 f{kondary_dam, sc, ba, du+1); &end; {with} " " " "{ duplicate entries for prefixing down the SRM } " "(#***) &4 ea_HP9895(47, secondary_dam, sc, ba, du+0, {block_offset} 0); (tea_HP9895(48, secondary_dam, sc, ba, du+1, {block_offset} 0); &end; {with} " "with HP9885_dav do $begin &tea_HP9885(49, secondary_dam, sc, du+0, {block_offset} 0);  47 [=55 Fharddisc_letter then (remove_extraneous_volumes(i, j-1); $ i := j; $ end; $end;  $page$ " "{ assign the new system unit } " "if system_unit<>0 then {the user has explicitly specified the system unit} $dummy_boolean := sysunit_ok(system_un55"$if false$ { HP913X } $for i := 0 to 3 do &tea_HP9895(11+i, primary_dam, {sc} 7, {ba} 0, {du} i, {block_offset} 0); "$end$ " " "$if false$ { HP913X_A } $mp := HP913X_A_mp; ${ mp := block_boundaries(mp); {override track boundary partitioning} $n5} 0, {du} 0, 9{offset} vol_offset(i, nvols, mp), 9{letter} HP913X_C, 9{umaxbytes} vol_bytes(i, nvols, mp)); "$end$  $page$ " "$if false$ { current Command Set '80 discs } &devid := 7908; nvols := 16; mp.tpm := 5* 370; mp.bpt := 35*256; {7908} ${5t unit_prefix_successful('#5:/') then ${do nothing}; {tries to set up uvid for possible default unit assignment below} " "{ if not unit_prefix_successful('#42:/?') then zap_assigned_unit(42); {free} "{ if not unit_prefix_successful('#46:/?') then zap5 )it) "else if (bootdevice_lun<>0) and not (bootdevice_letter in [HPmini, HP8290X]) then $dummy_boolean := sysunit_ok(bootdevice_lun) "else {search for the system unit} $begin &i := 0; &repeat (i := i+1; &until sysunit_ok(sysunit_list[i]) or (i>=sys5vols := 4; $for i := 0 to nvols-1 do &tea_amigo_sv(11+i, primary_dam, {sc} 7, {ba} 0, {du} 0, 9{offset} vol_offset(i, nvols, mp), 9{letter} HP913X_A, 9{umaxbytes} vol_bytes(i, nvols, mp)); "$end$ " " "$if false$ { HP913X_B }  5 devid := 7911; nvols := 27; mp.tpm := 3* 572; mp.bpt := 64*256; {7911} ${ devid := 7912; nvols := 30; mp.tpm := 7* 572; mp.bpt := 64*256; {7912} ${ devid := 7933; nvols := 30; mp.tpm := 13*1321; mp.bpt := 92*256; {7933} 5 0_assigned_unit(46); {free} " "if not unit_prefix_successful('#45:'+srmsysprefix+srmnode(unitable^[45].sc)) then $if not unit_prefix_successful('#45:'+srmsysprefix) then &zap_assigned_unit(45); $ " 5 unit_list_length); $end; $ " "{ special case for default unit assignment } " "if sysunit=45 then {set the default unit to the primary SRM unit entry} $dkvid := unitable^[5].uvid; $ " "{ re-open the standard system files } " "openfiles;  5Y$mp := HP913X_B_mp; ${ mp := block_boundaries(mp); {override track boundary partitioning} $nvols := 9; $for i := 0 to nvols-1 do &tea_amigo_sv(11+i, primary_dam, {sc} 7, {ba} 0, {du} 0, 9{offset} vol_offset(i, nvols, mp), 9{letter} HP913X_B, 9{um5${ devid := 7935; nvols := 30; mp.tpm := 13*1321; mp.bpt := 92*256; {7935} ${ mp := block_boundaries(mp); {override track boundary partitioning} $for i := 0 to nvols-1 do &tea_CS80_disc (11+i, primary_dam, {sc} 7, {ba} 0, {du} 0, {dv} 0, ;{offset} 5 X"{ remove extraneous local hard disc entries if necessary } " "if multi_volume_option=auto_volume then " begin $i := 11; $while i<40 do $ begin &j := i + 1; &while on_same_medium(i, j) and (j <= 40) do j := j+1; &if unitable^[i].letter = 5 end. {ctable} x5axbytes} vol_bytes(i, nvols, mp)); "$end$ " " "$if false$ { HP913X_C } $mp := HP913X_C_mp; ${ mp := block_boundaries(mp); {override track boundary partitioning} $nvols := 14; $for i := 0 to nvols-1 do &tea_amigo_sv(11+i, primary_dam, {sc} 7, {ba5+vol_offset(i, nvols, mp), ;{devid} devid, ;{umaxbytes} vol_bytes(i, nvols, mp)); "$end$ " " " " "{ assign the new unitable and unitclear all units } " "assign_temp_unitable; " " "{ prefix the primary and secondary SRM unit entries } " "if no57 [=6|668NSTUFFLOPTIONS_HP9885_DEFAULT_DAVT\OPTIONS_SRM_DEFAULT_DAVbj!OPTIONS_LOCAL_PRINTER_DEFAULT_DAVpxOPTIONS_HP8290X_DEFAULT_DAV~OPTIONS_HP9895_DEFAULT_DAVOPTIONS_HARDDISC_DEFAULT_DAV6T\ CTR_HP9895_MPCTR_HP913X_A_MPCTR_HP913X_B_MPCTR_HP913X_C_MPSCANSTUFF_GET_CS80_PARMSCTR_BLOCK_BOUNDARIES CTR_NULL_MP&*26 ^_TEA_SRM X ^ n x CTR_TEA_HP9895    CTR_TEA_HP9895   CTR_TEA_HP9885   CTR_TEA_HP9885 CTR_ASSIGN_TEMP_UNITABLE  * H ASM_SAPPEND L R V SYSGLOBALS Z lBOO67 [=66OPTIONS_SC_LISTSCANSTUFF_SCANNEDDEVICE_LETTER CTR$CTR(BRSTUFF_GET_BOOTDEVICE_PARMS,CTR2CTR6CTR>CTRDCTRPCTR^6 <HASM_DIVLASM_DIVRlpzCTR_TEA_HP9895",6:BHV`jvz~CTR_VOL_OFFSET6 TDAMMODULE_SRMNODE p v  ASM_SAPPEND    ASM_SAPPEND  CTR_ZAP_ASSIGNED_UNIT         CTR_ON_SAME_MEDIUM  & 0 8 SYSGLOBALS > H X ` j6I FS_DOPREFIX: SYSGLOBALS@bflpxASM_IN(8HXbnSCANSTUFF_SCANNEDDEVICE_LETTER(SCANSTUFF_SCANNEDDEVICE_LETTERBOOTDAMMODULE_BOOTDAMMODULE MIN6CTRjxCTR_CREATE_TEMP_UNITABLECTR_TEA_MEMORY_VOLUME_DAM CTR_TEA_CRT CTR_TEA_KBDCTRBRSTUFF_INTERNAL_MINI_PRESENT CTR_TEA_MINI CTR_TEA_MINI  CTR_TEA_HP8290X6  CTR_VOL_BYTESCTR_TEA_AMIGO_SV   CTR_VOL_OFFSET    " & CTR_VOL_BYTES *CTR_TEA_CS80_DISC 0 6 B J N RSCANSTUFF_GET_CS806CTR_REMOVE_EXTRANEOUS_VOLUMES x ~ CTR_SYSUNIT_OK  CTR ASM_IN CTR CTR CTR_SYSUNIT_OK       OPTIONS_SYSUNIT_LIST  0CTR_SYSUNIT_OK 4 : SYSGLOBALS D SYSGLOBALS6iI_MINISCANSTUFF_SCANSTUFFBRSTUFF_BRSTUFFCTR_CTR LDR_LDRFS_FS MISC_MISC LOADER_LOADER$ASM_ASM*OPTIONS_OPTIONS0SYSGLOBALS_SYSGLOBALS6 SYSGLOBALS< SYSGLOBALSB SYSGLOBALSFSCANSTUFF_INIT_SCA6\*6@JCTR_TEA_HP8290XXblv CTR_TEA_SRMCTR_TEA_LOCAL_PRINTERCTR_TEA_HP9895CTR_TEA_HP9895 "CTR_TEA_HP9885.:DCTR_TEA_HP98856 _PARMS V d n x  CTR_TEA_CS80_TAPE CTR  BRSTUFF_INTERNAL_MINI_PRESENT  CTR_TEA_MINI CTR_TEA_MINI    CTR_TEA_HP8290X    "CTR_TEA_HP8290X 0 : D N CTR6 L SYSGLOBALS d LDR_OPENFILES p ASM_SAPPEND    ASM_SAPPEND  CTR_ZAP_ASSIGNED_UNIT         CTR_ON_SAME_MEDIUM  & 0 8 SYSGLOBALS > H X ` j77 e : type_isc ; line : type_serial_line) : BOOLEAN; END; /<0. H/N`/<0. H/NN^ _\ONNAUU?.?<N0H//< N_ N^ _TONNAUU?.?<N0H//< N_ N^ _TONNAUU?.?<N0H/7K22&2-|`.-|`"-|`/<0. H/NU?. ?<N0H-@Y/.Y/.NN-_?. ?<?.N` n/(?."PJlg/)l"ihNN^.NuNA0. A:A-H nphg/<0. H/N0. AH7 %9ULeyyy&U 99 $$$:A-H n/(Hn"PJ\g/)\"iXNp.-@ N^ _TONNAU?.N=_?.<N?.HnN?.<N?.<_Np.-@ N^ _TONNA7%fM D DxMzD<8BSERIAL_08RTTtt7 NA0. A:A-H nphg/<0. H/N0. AHrpf0.mF|n>@2;N222&2-|`.-|`"-|`/<0. H/NU?. ?<N0H-@Y/./.N-_?. ?<?.N` n7jrpf0.m|n@2;NjVF2~-|B`-|-|`v-|-|`b-|B`R-|-|`>-|-|`*-|-|`/<0. H/NU?. ?.N0H-@U/./.N_`& np7/<0.H/N?.BgNU?.N=_`:=nU?.NJf/<0.H/N?.BgNN^ _TONNA?. p`nNN^.NuNA?. p@nNN^.NuNAU?.N<NN^ _TONNA?.<?NN^ _TONNA?.<_N7g0. ABrpfBU?. NJf?. ?<?. N`/<0. H/N`/<0. H/NN^ _\ONNAUU?.?<N0H//< N_ N^ _TONNAUU?.?<N0H//< N_ N^ _TONNAUU?.?<N0H/7 @ 0ۈdd!xtZdDl,XtZ0j0V_BASE5J4 STRDELETEEnrvz~~nl7 phf0.mF|n>@2;N222&2-|`.-|`"-|`/<0. H/NU?. ?<N0H-@Y/./.N-_?. ?<?.N` n/(?."PJdg/)d"i`NN^.NuNA0. A:A-H nphg/<7G HPIB_3__BASEGRHPIB_3_REQUESTEDBR HPIB_3_PPOLLPRN HPIB_3_SPOLLNRHPIB_3_REQUEST_SERVICEIRHPIB_3_LISTENERRx HPIB_3_TALKERRHPIB_3_REMOTED_RHPIB_3_LOCKED_OUTR HPIB_3_HPIB_3RNHPIB_3EHPIB_2_SECONDAR7 %HPIB_1_ACTIVE_CONTROLLERHPIB_0_HPIB_LINEIODECLARATIONS_IO_ESCAPEIODECLARATIONSHPIB_1_SET_TO_TALKHPIB_1_SEND_COMMANDGENERAL_1_READCHARGENERAL_0_IOCONTROLGENERAL_0_IOSTATUSIOCOMASM_BIT_SETGENERAL_0_GENERAL_0IOCOMASM_IOCOMA7 oMODULE SERIAL_0; IMPORT iodeclarations ; EXPORT PROCEDURE set_serial ( select_code : type_isc ; line J: type_serial_line); PROCEDURE clear_serial( select_code : type_isc ; line 7: type_serial_line); FUNCTION serial_line ( select_cod7 Z0. H/N0. AHrpf0.mF|n>@2;N222&2-|`.-|`"-|`/<0. H/NU?. ?<N0H-@Y/.Y/.NN-_?. ?<?.N` nphf0.mF|n>@2;N27YGRv HPIB_2_TALKRHPIB_2_TRIGGER4RHPIB_2_UNLISTENR HPIB_2_UNTALKR HPIB_2_HPIB_2R HPIB_2AL_4_READBUFFER_STRINGR(GENERAL_4_WRITEBUFFER_STRING RGENERAL_4_BUFFER_BUSYRBGENERAL_4_ISC_BUSYRpGENERAL_4_GEN7SMABrpfBU?. NJf?. ?<?. N`/<0. H/N`/<0. H/NN^ _\ONNAUU?.?<N0H//< N_ N^ _TONNAUU?.?<N0H//< N_ N^ _TONNAUU?.?<N0H/77 [=88hf0.m|n@2;NnZF2"-|-|`-|B`z-|-|`f-| -|`R-| -|`>-| -|`*-| -|`/<0. H/NU?. ?.N0H-@U/./.N_`$ n8YGRv HPIB_2_TALKRHPIB_2_TRIGGER4RHPIB_2_UNLISTENR HPIB_2_UNTALKR HPIB_2_HPIB_2R HPIB_2AL_4_READBUFFER_STRINGR(GENERAL_4_WRITEBUFFER_STRING RGENERAL_4_BUFFER_BUSYRBGENERAL_4_ISC_BUSYRpGENERAL_4_GEN8phf0.mF|n>@2;N222&2-|`.-|`"-|`/<0. H/NU?. ?<N0H-@Y/./.N-_?. ?<?.N` n/(?."PJdg/)d"i`NN^.NuNA0. A:A-H nphg/<8 um_char_bit: INTEGER ); PROCEDURE set_parity ( select_code : type_isc ; parity_mode : type_parity); PROCEDURE send_break ( select_code : type_isc ); PROCEDURE abort_serial ( select_code : type_isc ); END; NA0. A:A-H nphg/<8B/(?.Hn"PJtg/)t"ipNn N^.NuNNNu Npo/</<N`J-n n hgph f/</< N n-h"n$nRN^ _PONNAY/. Npo/</<N`F-n n hgJh f/</<8 , l5IYr5IY< , l5m}Yr5m}Y< , 55<.-|`"-|`/<0. H/NU?. ?<N0H-@Y/./.N-_?. ?<?.N` n8 fM D DxM0zD<  SERIAL_3 DR__tt8 NA n -X-PB/:,/:$/./.NJg -|/:/:/./.NJg -|/:/:/./.NJg -|/:/:/./.NJg -|/:/:/./.NJg -|/:/:/./.NJg -|/:/:|/./.N8 N n-h "nR N^ _\ONNAp.l/</<N n  Y/.N l/</<N`:p-nn"-@/. n .HpN .Rh n  N^ _NNA nCSbY/. Np.o/</<N8phf0.mF|n>@2;N222&2-|`.-|`"-|`/<0. H/NU?. ?<N0H-@Y/./.N-_?. ?<?.N` n/(?."PJdg/)d"i`NN^.NuNA0. A:A-H nphg/<8 !D  06dd!xtZdDl,XtZ0j0V_BASE5J4 STRDELETEEnrvz~~nl8+Jg -|/:h/:`/./.NJg -|/:L/:D/./.NJg -| /:0/:(/./.NJg -| /:/: /./.NJg -| /:/:/./.NJg -| /:/:/./.NJg -| /:/:/./.N8SERIAL_0__BASERSERIAL_0_SET_SERIALRSERIAL_0_CLEAR_SERIALRSERIAL_0_SERIAL_LINESRSERIAL_0_SERIAL_0R*SERIAL_0HTALKERRHPIB_3_REMOTED_RHPIB_3_LOCKED_OUTR HPIB_3_HPIB_3RNHPIB_3EHPIB_2_SECONDAR8 ,IODECLARATIONSIODECLARATIONS_IO_ESCAPEGENERAL_0_IOSTATUSIOCOMASM_BINIORGENERAL_0_IOCONTROLIOCOMASM_BINCMPIOCOMASM_BINANDIOCOMASM_BIT_SETGENERAL_0_GENERAL_0IOCOMASM_IOCOMASM0H-@Y/./.N-_?. ?<?.N` n8 MODULE SERIAL_3; IMPORT iodeclarations ; EXPORT PROCEDURE set_baud_rate ( select_code : type_isc ; rate : REAL ); PROCEDURE set_stop_bits ( select_code : type_isc ; num_bits : REAL ); PROCEDURE set_char_length ( select_code : type_isc ; n8Jg -|/:/:/./.NJg -|-nN^ _PON@I@R@[@`@b@i@r@@@ @@ @@@NA n-X-P0. A:A-H nphg/<0. H/N87 [=99 SERIAL_3__BASERSERIAL_3_SET_BAUD_RATERSERIAL_3_SET_STOP_BITSRSERIAL_3_SET_CHAR_LENGTHRRZSERIAL_3_SET_PARITYRSERIAL_3_SEND_BREAKR SERIAL_3_ABORT_SERIALR 8SERIAL_3_SERIAL_3R SERIAL_3_HPIB_2_SECONDAR9 `( $ ASM_EQIODECLARATIONSIODECLARATIONS_IO_ESCAPEGENERAL_0_IOCONTROL ASM_ROUNDGENERAL_0_IOSTATUSIOCOMASM_BINANDGENERAL_0_GENERAL_0IOCOMASM_IOCOMASM]$q=!4,!f!=]q=!,!|!=|!]9rpf/:8/:0/./.NJg B`/:/:/./.NJgLYU?. ?<N0H//<NJg/<0. H/N-|`>/:/:/./.NJg-|`/<0. H/NU?. ?<N0H-@ .Y/./<-@N9`/<0. H/NU?. ?<N0H-@ .Y/./<-@N .П-@?. ?<?.N`/<0. H/NN^.NuNA0.A:A-H nphg/<0.H/N0.AHrpf?.?<?<N`: nph9 YGRv HPIB_2_TALKRHPIB_2_TRIGGER4RHPIB_2_UNLISTENR HPIB_2_UNTALKR HPIB_2_HPIB_2R HPIB_2AL_4_READBUFFER_STRINGR(GENERAL_4_WRITEBUFFER_STRING RGENERAL_4_BUFFER_BUSYRBGENERAL_4_ISC_BUSYRpGENERAL_4_GEN9 CTR__BASER CTR_NULL_MPRCTR_HP913X_C_MPRCTR_HP913X_B_MPRCTR_HP913X_A_MPR CTR_HP9895_MPR CTR_HP9885_MPR( CTR_HPMINI_MPR0 CTR_VALUERl CTR_VOL_BYTESRbCTR_VOL_OFFSETORCTR_BLOCK_BOUNDARIESRCTR_TEA_M9 .П-@?. ?<?.N`/<0. H/NN^ _\ON??@NA0. A:A-H nphg/<0. H/N .[mJn@2;N(B`:-|`.-|`"-|`/<0. H/N0.9f?.?<?<N`/<0.H/NN^ _TONNA0.A:A-H nphg/<0.H/N0.AHrpf?.?<}?<N`8 nphf?.Bg?<N`/<0.H/NN^ _TONNNNu0. H/N9 S( $ $ $ $ $ $ $ $ $ $ $ $ $ $ ȴ,!8!==Q !=!(,!" $ ( &!=" $ ]q!" &!]$q=!4,!f!=]q=!,!|!=|!]9eEMORY_VOLUME_DAMR CTR_TEA_CRTR CTR_TEA_KBDRv CTR_TEA_MINIR CTR_TEA_BOOTRJ CTR_TEA_SRMRCTR_TEA_LOCAL_PRINTERRrCTR_TEA_HP9885R "CTR_TEA_HP9895R CTR_TEA_HP8290XR CTR_TEA_AMIGO_SV R tCTR_TEA_CS80_DISCR90. AHrpfVYHn/N-_Jf/<0. H/N?. ?<?.N?. ?<?.N`t0. AHrpfF/./.N-_Jf/<0. H/N?. ?<?.N`/<0. H/NN^ _\ONNA n-X-P0.9p AHrpf?. ?<"?.N`z0. AHrpfLU?. ?<N0H-@Y/./<N Ю-@?. ?<?.N`/<0. H/NN^ _\ONNA0. A:A-H nphg/<0. H/N0. AHr90. AHrpfVYHn/N-_Jf/<0. H/N?. ?<?.N?. ?<?.N`t0. AHrpfF/./.N-_Jf/<0. H/N?. ?<?.N`/<0. H/NN^ _\ONNA n-X-P0.9 ?$q=!,!=$=!,!="=!N .П-@?. ?<?.N`/<0. H/NN^.NuNA0.A:A-H nphg/<0.H/N0.AHrpf?.?<?<N`: nph9 A:A-H nphg/<0. H/N0. AHrpf/:/:/./.NJg B`f/:/:/./.NJg-|`>/:/:/./.NJg-|`/<0. H/N?. ?<#?.N`J0. AH9 pf0.mV|nN@2;N *6B`F-|`:-|`.-|`"-|`/<0. H/N?. ?<$?.N`0. AHrpf0.mV|nN@2;N 6*B`F-|`:-|`.-|`"-|97 [=:: : :  : :7 [=: : :  : : CTR_TEA_CS80_TAPER CTR_CREATE_TEMP_UNITABLER@CTR_ASSIGN_AND_CLEAR_UNITRCTR_ASSIGN_TEMP_UNITABLERfCTR_SYSUNIT_OKRCTR_ZAP_ASSIGNED_UNITRCTR_ON_SAME_MEDIUMRdCTR_REMOVE_EXTRANEOUS_VOLUMESRCTR_CTRRCTR: : :  :ORY_VOLUME_DAMR CTR_TEA_CRTR CTR_TEA_KBDRv CTR_TEA_MINIR CTR_TEA_BOOTRJ CTR_TEA_SRMRCTR_TEA_LOCAL_PRINTERRrCTR_TEA_HP9885R "CTR_TEA_HP9895R CTR_TEA_HP8290XR CTR_TEA_AMIGO_SV R tCTR_TEA_CS80_DISCR: :  :  ;;MODULE OPTIONS; import sysglobals; export const system_unit = 11; type lms_dam_type = ( LIF, UCSD ); const primary_lms_dam = LIF; ^ type multi_volume_option_type = (single_volume, multi_volume, auto_volume); const multi;  sc_list_length = 3; type sc_list_type = array[1..sc_list_length] of byte; const sc_list = sc_list_type[7,8,14]; END;  &, 822 0$ 6$:8"B &B&L ( R@"h6|~d "z; ;FZ8Z ,(Z 2&P:P b Z2 Ȃv  L(<@jԈ,F ^2 4b2BFJ <((T :  F; _volume_option = auto_volume; minimum_volume_size = 1000000; maximum_number_vols = 30; const local_printer_timeout = 12000; type dav = record sc, ba, du, dv: shortint; end; const HP8290X_default_dav = dav[sc: 7, ba: 0, du: 0, dv: -1]; ;  2 * B ^0ZR ( 8 j&0&0\.>&B(  *;CTABLE  OPTIONS CTRP Pp!BRSTUFFPPPP!( SCANSTUFF((6CTABLEPmtI5PPP)P!aIv, d .\ p̈v bPP;fP > ,00 ,,J:zOPTIONSJRSxxfSxv<<; ^HP9895_default_dav = dav[sc: 7, ba: 0, du: 0, dv: -1]; HP9885_default_dav = dav[sc: 12, ba: -1, du: 0, dv: -1]; harddisc_default_letter = 'G'; harddisc_default_dav = dav[sc: 7, ba: 2, du: 0, dv: -1]; local_printer_default_dav = dav[sc: 7, ba; -,+ Nu type lms_dam_type = ( LIF, UCSD ); const primary_lms_dam = LIF; ^ type multi_volume_option_type = (single_volume, multi_volume, auto_volume); const multi;(R6fPp < 2Z$<&ĈΈ@ &ֈR\ BV4F( j$ & &  $&:$6  pzR,L:N.8604  .B  ;d\fp0. D j Vs& N|V R CTABLE__BASE ,CONFIG:WORK.CODEPZZ > ,p00 ~; : 1, du: -1, dv: -1]; SRM_default_dav = dav[sc: 21, ba: 0, du: 8, dv: -1]; const sysunit_list_length = 9; type sysunit_list_type = array[1..sysunit_list_length] of unitnum; const sysunit_list = sysunit_list_type[11,9,7,45,4,44,3,43,3]; const ;_volume_option = auto_volume; minimum_volume_size = 1000000; maximum_number_vols = 30; const local_printer_timeout = 12000; type dav = record sc, ba, du, dv: shortint; end; const HP8290X_default_dav = dav[sc: 7, ba: 0, du: 0, dv: -1]; ; ;\<&, 0T &&* > @*$^.D Ȝ :F~Ȅ f(l :B:0& :ĈN D *"$$. $*<2P "0.T$b>B;7 [=<&< -,+ Nu type lms_dam_type = ( LIF, UCSD ); const primary_lms_dam = LIF; ^ type multi_volume_option_type = (single_volume, multi_volume, auto_volume); const multi<\MODULE CTR; import sysglobals, loader, options, ldr; export const HPmini = 'M'; HP9885 = 'F'; HP9895 = 'H'; HP8290X = 'N'; HP913X_A = 'U'; HP913X_B = 'V'; HP913X_C = 'W'; CS80disc = 'Q'; CS80tape = 'K'; SRM = 'G'; PRINTER = 'J'; < cunitnum): boolean; procedure zap_assigned_unit(lunit: unitnum); function on_same_medium(lun1, lun2: unitnum): boolean; procedure remove_extraneous_volumes(lun1, lun2: unitnum); function vol_bytes(current_vol, number_vols: shortint; mp: mp_type): integer; <integer;lr:char;mb:integer); procedure tea_CS80_disc(un:unitnum;ds:ds_type;sc,ba,du,dv:byte;os,id,mb:integer); procedure tea_CS80_tape(un:unitnum;ds:ds_type;sc,ba,du,dv:byte;id:integer); END; sc = 'Q'; CS80tape = 'K'; SRM = 'G'; PRINTER = 'J'; <_volume_option = auto_volume; minimum_volume_size = 1000000; maximum_number_vols = 30; const local_printer_timeout = 12000; type dav = record sc, ba, du, dv: shortint; end; const HP8290X_default_dav = dav[sc: 7, ba: 0, du: 0, dv: -1]; <RAM = 'R'; NODEVICE = #255; type mp_type = record tpm: integer; bpt: integer; end; const HPmini_mp = mp_type[tpm: 2* 33, bpt: 16*256]; HP9885_mp = mp_type[tpm: 1* 77, bpt: 30*256]; HP9895_mp = mp_type[tpm: 2* 77, bpt: 30*256]; < function vol_offset(current_vol, number_vols: shortint; mp: mp_type): integer; function block_boundaries(mp: mp_type): mp_type; function value(symbol: string255): integer; procedure tea_memory_volume_dam(ds:ds_type); procedure tea_boot(un:unitnum); <RAM = 'R'; NODEVICE = #255; type mp_type = record tpm: integer; bpt: integer; end; const HPmini_mp = mp_type[tpm: 2* 33, bpt: 16*256]; HP9885_mp = mp_type[tpm: 1* 77, bpt: 30*256]; HP9895_mp = mp_type[tpm: 2* 77, bpt: 30*256]; < OPTIONS__BASEROPTIONS_SC_LISTROPTIONS_SYSUNIT_LISTROPTIONS_SRM_DEFAULT_DAVR!OPTIONS_LOCAL_PRINTER_DEFAULT_DAVR OPTIONS_HARDDISC_DEFAULT_DAVR(OPTIONS_HP9885_DEFAULT_DAV@R0OPTIONS_HP9895_DEFAULT_DAVR8OPTIONS_HP8<P  00 ,,&pCTRRSxxfSxv<<<fHP913X_A_mp = mp_type[tpm: 4*152, bpt: 31*256]; HP913X_B_mp = mp_type[tpm: 4*305, bpt: 31*256]; HP913X_C_mp = mp_type[tpm: 6*305, bpt: 31*256]; null_mp = mp_type[tpm: 0, bpt: 0]; type ds_type = ( primary_dam, secondary_dam, LIF_dam,< procedure tea_srm(un:unitnum;sc,ba,du:byte); procedure tea_crt(un:unitnum); procedure tea_kbd(un:unitnum); procedure tea_local_printer(un:unitnum;sc,ba:byte;uvid:vid;bto:integer); procedure tea_mini(un:unitnum;ds:ds_type;du:byte); procedure tea_HP9885(un:<O290X_DEFAULT_DAVR@OPTIONS_OPTIONSRHOPTIONS    $   &      <d\i 0.6VL D j Vs& N|V R CTABLE__BASE ,CONFIG:WORK.CODEPZZ > ,p00 ~<  UCSD_dam ); var bootdevice_letter: char; bootdevice_dav: dav; bootdevice_lun: unitnum; procedure create_temp_unitable; procedure assign_and_clear_unit(lunit: unitnum); procedure assign_temp_unitable; function sysunit_ok(system_unit: < unitnum;ds:ds_type;sc,du:byte;block_os:shortint); procedure tea_HP9895(un:unitnum;ds:ds_type;sc,ba,du:byte;block_os:shortint); procedure tea_HP8290X(un:unitnum;ds:ds_type;sc,ba,du:byte); procedure tea_amigo_sv(un:unitnum;ds:ds_type;sc,ba,du:byte;os: <7 [=== GB/<N0?.Hn?.NHHnHz>?. ?. ?.BgBBHz&<NB'B'<YHzNNN^ _ NAMIGODVR_AMIGOIONA0.H//</<N0.H/B/<N0.H/B/<Np. |UmP|nH@2;N*YHz6NR-_`.YHzN@-_`=.0..Hnj?<HnBB nfJ g/( "hNJV nf(3VD3(3N^ _TONNAJf ;|NJN=|Rn?.N n2mN^NuNA0.H+@N m0.8A-H nCEHrRA f SAf`p`B(3VDA(=&`MBNA .^". ]g ;|NJN^ _ NNA nCSbB B.-m.@JVg-n n-h.@ n"(Ҩ Nv^g"nErRA f SAfp`B@"n=SbN^ _\ONLIFMODULE_LIFDAMUCSDMODULE_UCSD_DAMNA n-X-P/./.N-_ N^.NuNA n-X-P/.0. H/N-_0. S@Nvnf/.0. H/N ѮNv/./.N-_N^ _PONNA n-X-P/./.0. H/N0.H/N=N6?.HzPHz:?. ?. ?.BgBBHz"<GB'<</<N.N^ _PONSRMAMMODULE_SRMAMSRMDAMMODULE_SRMDAMNA n CSb0.H//</<N0.H/B/<N/.B/<6Nx?.HzDHz2?.?.BgBgB/.HnB'B'<B'BNxN^ _N= wYHzN.-_` ;|NJ/.B .SNv/N .Jg ;|NJ/./< .Nv/N?.Hn?.NHnHz?.?.?.?././. Hz <QB'B'</.NN^ _NCS80DVR_CS80IONA0.H//</<N0.H/B/<N0.H/B/<Nr0. H/B/<N^?.Hn?.NvHnHz:?.?.?.= nLHLHn'n%n#n!!n!nCESbB.n233.툁(33. @3鈁(33.爁(3333. (3(3VDJg!n4JW2. mW4."mW6.$mW8.&mWzG.= &INITUNITS_NOUNITNA?.HzBHz4BgXBBHzB'<<B'BN&N^ _TONCONSOLE CRT_CRTIOMISC_UNBLOCKEDDAMNA?.HzBHz2BgrBBHzB'B'<B'BNN^ _TONSYSTERM KEYS_KBDIOMISC_UNBLOCKEDDAMNA0.H/B/<NN?. Hn?. NfHn= N60. H/B/<N"0. H/B/<N0.Hr -@/.BYHzNSNvN?.Hn?.NHnHzJ?.?. ?. Bg/.BHz0<HB'B'<YHzN Nv/NN^ _ NAMIGODVR_AMIGOIONA0. H//</<NX0. H/B/<ND0.H/=?. B/.Hz<KB'B'<BNLN^ _NCS80DVR_CS80IONAHm/< (NBgNBnRn m"m0.8CHPHQ/<8N n2mN^NuNAfJf ;|NJ m0.8A-HfJnW nfrR(2Vg"m0.8$m2.8ACHPHQ/<8N=}WACD~RG f SGf|`B.-Wg;n0N^ _*NLIFMODULE_LIFDAMNA0.@2;N8hA$n CSb`A$n CSb`^At$n CSb`AJ$n CSb`.A2$n CSb`A,$n C=Hz8BgBg?.BgBBHz$<MB'B'<YHzN N4>Ul n N^ _PONNAU?. N~Jg|0. R@Nv=@0.n_.gU?.NJ.RnNv`J.fd0. R@Nv=nnnN=@ m0.8A-H m0. 8Hp4 n (Ш4Nv/N4?.NX0.R@hN^.NuNu9885DVR_F9885IONA0.H//</<>ORY_VOLUME_DAMR CTR_TEA_CRTR CTR_TEA_KBDRv CTR_TEA_MINIR CTR_TEA_BOOTRJ CTR_TEA_SRMRCTR_TEA_LOCAL_PRINTERRrCTR_TEA_HP9885R "CTR_TEA_HP9895R CTR_TEA_HP8290XR CTR_TEA_AMIGO_SV R tCTR_TEA_CS80_DISCR> Ul n N^ _PONNAU?. N~Jg|0. R@Nv=@0.n_.gU?.NJ.RnNv`J.fd0. R@Nv=nnnN=@ m0.8A-H m0. 8Hp4 n (Ш4Nv/N4?.NX0.R@hN^.NuNu9885DVR_F9885IONA0.H//</<> Ul n N^ _PONNAU?. N~Jg|0. R@Nv=@0.n_.gU?.NJ.RnNv`J.fd0. R@Nv=nnnN=@ m0.8A-H m0. 8Hp4 n (Ш4Nv/N4?.NX0.R@hN^.NuNu9885DVR_F9885IONA0.H//</<> CTR__BASER CTR_NULL_MPRCTR_HP913X_C_MPRCTR_HP913X_B_MPRCTR_HP913X_A_MPR CTR_HP9895_MPR CTR_HP9885_MPR( CTR_HPMINI_MPR0 CTR_VALUERl CTR_VOL_BYTESRbCTR_VOL_OFFSETORCTR_BLOCK_BOUNDARIESRCTR_TEA_M>\ 0 < 2.%&-4%, ,  5E  , E8 4 Q0 a v E    )(W n)(W n)(W n)(W@ N^.NuNA n > fP  00 ,, BRSTUFFRSxxf Sx v<<>BNAJy?l |`p9V@N^NuMHNFUVWQKNA nLHJy?l n M`$ n9H0 n9H1@ n9H1@9rfB9Sm$n2;N n G` n >eEMORY_VOLUME_DAMR CTR_TEA_CRTR CTR_TEA_KBDRv CTR_TEA_MINIR CTR_TEA_BOOTRJ CTR_TEA_SRMRCTR_TEA_LOCAL_PRINTERRrCTR_TEA_HP9885R "CTR_TEA_HP9895R CTR_TEA_HP8290XR CTR_TEA_AMIGO_SV R tCTR_TEA_CS80_DISCR>Ul n N^ _PONNAU?. N~Jg|0. R@Nv=@0.n_.gU?.NJ.RnNv`J.fd0. R@Nv=nnnN=@ m0.8A-H m0. 8Hp4 n (Ш4Nv/N4?.NX0.R@hN^.NuNu9885DVR_F9885IONA0.H//</<> d\V00XZ D j Vs& N|V R CTABLE__BASE ,CONFIG:WORK.CODEPZZ > ,p00 ~>`9 n C n p|Fmx| np@2;N*dddd6dddd6 nBP nBh`< nBh`0 n 9r r1@ n 9r1@`N^ _PONNu (Ш4Nv/N4?.NX0.R@hN^.NuNu9885DVR_F9885IONA0.H//</<>j3VD@ N^ _TONNA?.N6 m0.8"m2.8ACHPHQ/<8NN^ _TONNA m0.8A-H m0. 8A-H n"n)2(2W n)(W n)(W n)(W n)(W@ N^.NuNA n > CTR_TEA_CS80_TAPER CTR_CREATE_TEMP_UNITABLER@CTR_ASSIGN_AND_CLEAR_UNITRCTR_ASSIGN_TEMP_UNITABLERfCTR_SYSUNIT_OKRCTR_ZAP_ASSIGNED_UNITRCTR_ON_SAME_MEDIUMRdCTR_REMOVE_EXTRANEOUS_VOLUMESRCTR_CTRRCTR>b\ 0 SYSGLOBALSLOADERASM_MPYASM_DIVASM_MOD ASM_NEWBYTES ASM_MOVEL LDR_LOCKFILESLDR_INITSYSUNIT 4 Q0 a v E    )(W n)(W n)(W n)(W@ N^.NuNA n > MODULE BRSTUFF; import sysglobals, options, ctr; export function internal_mini_present: boolean; procedure get_bootdevice_parms(var bootdevice_letter: char; var bootdevice_dav: dav); END; )(W n)(W@ N^.NuNA n >7 [=?? @NAYHzN+_YHz*N+_YHzN+_YHzN+_YHzN+_YHzrN+_YHzNN+_YHzN+_JVJVJVJVJV@N^NuCS80DVR_GET_LETTERAMIGODVR_GET_LETTERDISCHPIB_HPIBCHECK_SCB?f  8  &&F       nnnHnJg/- mNHnJg/- mNHnHnJg/- mN.mJn@2;N*p.?`9 n C n p|Fmx| np@2;N*dddd6dddd6 nBP nBh`< nBh`0 n 9r r1@ n 9r1@`N^ _PONNu (Ш4Nv/N4?.NX0.R@hN^.NuNu9885DVR_F9885IONA0.H//</<?`9 n C n p|Fmx| np@2;N*dddd6dddd6 nBP nBh`< nBh`0 n 9r r1@ n 9r1@`N^ _PONNu (Ш4Nv/N4?.NX0.R@hN^.NuNu9885DVR_F9885IONA0.H//</<? KGND_ALLOCATE_BKGND_INFOBKGND_ABORT_BKGND_PROCESSCS80DVR_RETURN_CS80_PARMSBKGND_DEALLOCATE_BKGND_INFODISCHPIB_HPIBGET_AMIGO_IDENTNuN0.H/B/<N0.H/B/<Np. |UmP|nH@2;N*YHz6NR-_`.YHzN@-_`?VfHm/N` Hm/N` |J `HnJg/- mN+o N,_+_HnJg/- mNN^.NuNA n-X-PJVUHn-@N .r/HzT-@N .g/. /.Jg/- mN` n nLHN^ _ N ? BRSTUFF__BASERBRSTUFF_INTERNAL_MINI_PRESENTRBRSTUFF_GET_BOOTDEVICE_PARMSRZBRSTUFF_BRSTUFFRBRSTUFFYSUNIT_OKRCTR_ZAP_ASSIGNED_UNITRCTR_ON_SAME_MEDIUMRdCTR_REMOVE_EXTRANEOUS_VOLUMESRCTR_CTRRCTR?mP > ,00 ,,A( SCANSTUFF|Rxxf'Sx'v<<?NA n -X-PJg, nHh?(HnJg/."nN nn N^ _PONNA n-X-P| J-g/-/Hz+OnnnnHnJg/- mNHnJg/- mNHnHnJg/- mN.mJn@2;N*p.? SCANSTUFF__BASERSCANSTUFF_SCANNEDDEVICE_LETTERRNSCANSTUFF_GET_CS80_PARMSRvSCANSTUFF_INIT_SCANSTUFFSR SCANSTUFF_SCANSTUFFR SCANSTUFFRCTR_ON_SAME_MEDIUMRdCTR_REMOVE_EXTRANEOUS_VOLUMESRCTR_CTRRCTR?ORY_VOLUME_DAMR CTR_TEA_CRTR CTR_TEA_KBDRv CTR_TEA_MINIR CTR_TEA_BOOTRJ CTR_TEA_SRMRCTR_TEA_LOCAL_PRINTERRrCTR_TEA_HP9885R "CTR_TEA_HP9895R CTR_TEA_HP8290XR CTR_TEA_AMIGO_SV R tCTR_TEA_CS80_DISCR?_d| \c2X00[ D j Vs& N|V R CTABLE__BASE ,CONFIG:WORK.CODEPZZ > ,p00 ~? VfHm/N` Hm/N` |J `HnJg/- mN+o N,_+_HnJg/- mNN^.NuNA n-X-PJVUHn-@N .r/HzT-@N .g/. /.Jg/- mN` n nLHN^ _ N ? ORY_VOLUME_DAMR CTR_TEA_CRTR CTR_TEA_KBDRv CTR_TEA_MINIR CTR_TEA_BOOTRJ CTR_TEA_SRMRCTR_TEA_LOCAL_PRINTERRrCTR_TEA_HP9885R "CTR_TEA_HP9895R CTR_TEA_HP8290XR CTR_TEA_AMIGO_SV R tCTR_TEA_CS80_DISCR?BNAJy?l |`p9V@N^NuMHNFUVWQKNA nLHJy?l n M`$ n9H0 n9H1@ n9H1@9rfB9Sm$n2;N n G` n ?MODULE SCANSTUFF; import sysglobals, options, ctr; export procedure init_scanstuff; function scanneddevice_letter(scan_dav: dav): char; procedure get_CS80_parms(CS80_dav: dav; var devid: integer; var mp: mp_type); END; 2;N n G` n ?7 [=@q@f SYSGLOBALSASM_IN CTR_VALUE  &&F       nnnHnJg/- mNHnJg/- mNHnHnJg/- mN.mJn@2;N*p.@NAp n xcNGCSbHnHnpHn<NJWrCA N^.NuNA0-ҰmW2-вmWtH-WrCAN^NuNA n-X-Pp. /HzNJg0.<r0.ANv=@p. |FmH|n@@2;N4Dz@HmNHmN mmpmnHmHmN-HmN\BmpQ-f<KHmN`JpK-f<QHmN`0pQ-f<KHmN`Jmo<QHmNNBgN?<N?<NpN-VU+@N -g$?<BgBgN?<Bg?<N@ U?0-A?0-A?BgN mm`0-S@Nvr;@mnn;Ap mNvA2?Bg0-A?0-A?0-A?Y?-?-HmN-Y?-?-HmNN2-RAh`0-S@Nvr;@mnx;Ap mNvA2?Bg0-A?0-A?0-A?0-A@VfHm/N` Hm/N` |J `HnJg/- mN+o N,_+_HnJg/- mNN^.NuNA n-X-PJVUHn-@N .r/HzT-@N .g/. /.Jg/- mN` n nLHN^ _ N @4$T44$44d444dddLH`LH`LH`LH`n LH`LH=|UHnNpHVrCA0.S@Nv=@Jn].gJ.g*LHUNJgLH`,n LH@ B`Z?<Bg0-A?0-A?0-A?N?<Bg0-A?0-A?0-R@NvA?N?<0-A?0-A?0-A?N?<0-A?0-A?Hz/<.NJmo^?<Bg0-A?0-A?0-A?BgN?<Bg0-A?0-A?0-R@@ ?Y?-?-HmN/-Y?-?-HmNN2-RAh`JmoNHmHmHmN?<)?<0-A?0-A?0-A?0-A?/-NpN-VU+@N -g(?<+?<BgN?<,?<?<N`^?<+?<0-A?0-A?0-A?N@P > ,D00 R`,, l tRCTABLER >Rxx3Sx3<<@UNVJgLH`LH`N^ _\ON NA n-X-PLHBnBnn B.0.ng@UHnN_.. WrCAJ.g.HnN0.R@Nv=@pn]r. AW.gN^ _\ONNVNNN@ zNvA?BgN?< Bg0-A?0-A?BgN?< Bg0-A?0-R@NvA?BgNp-ϐ|Hm|n@2;N vh2DVLH`LH`nLH`\LH`JHmHmHmNpfHm@?<,?<0-A?0-A?0-R@NvA?N?<-0-A?0-A?0-A?NJmob?</?<0-A?0-A?0-A?BgN?<0?<0-A?0-A?0-R@NvA?BgN?<1?<0-A?0-A?BgN?<2?<0-A?0-R@@>$,\,j"eLK.TEXTLh STRDELETEED<:heLISTINGD>hhdCTABLE8@NNNNNNNNNJg/- mNNLHLHLHLHLHLH|GLRHBmBmBm0-R@Nv;@0-2SACHЀA;p;|Rm;mU@ HmNLH`LHJgh/- <B@ЭNvSNv//-NN  m oNG;@Jmf;|pml;|`;|Jmop-ϐ|Hm|n@2;N 0lll;|Rmp mNvA2?Bg0-A@NvA?BgNNUHzjNJfUAC\ESb<HPHzT+HN mHm"m fNHp) ?+HN m