objnam BJSIZE.LIT ; created 3-Jan-85, last edited 4-Jan-85 ; by Irv Bromberg, Medic/OS Consultants, Toronto, CANADA ; Medical and Operating Systems Software Consultants RADIX 10 VEDIT=5 VMINOR=3 VMAJOR=1 VSUB=0 IF EQ,1 Under AMOS/L 1.3 BJSIZE.LIT 1.3(5) size=604 bytes, hash=654-363-176-350. See BJMEM.DOC for more details. Syntax: BJSIZE {bytes}{K} Used only at system bootup time to set the boot job's memory partition size to the specified amount. AMOS/L normally allocates less than 32K to the boot job, the actual amount being 32K minus BM.SIZ less the size of DSK0:BADBLK.SYS[1,2], where BM.SIZ=size of the temporary DSK0: Bitmap input/output Dataset Driver Block and flags (106 bytes under AMOS/L 1.3). This subtracted space is not needed after the first DEVTBL command has been executed, thereafter the boot job's partition can be increased to overlap this area. The boot job's partition end is at MEMEND so there is no need to move the bootup INI command file that is being executed -- simply move the partition base JOBBAS(JCB) to the new address and either clear all modules by writing a longword zero to the new base address or create a temporary module and let EXIT delete it. Restrictions: BJSIZE will not change the boot job's partition before the first DEVTBL command has been executed or after the first SYSTEM command. As a precaution the valid range for partition size is 16K-64K bytes. Default: As a default BJSIZE will move the boot job's partition base exactly 32K bytes away from MEMEND. Hints: BJSIZE deletes all modules in the boot job's partition if the New Size is less than (Old Size +12). If the New Size is more than 12 greater than the Old Size then BJSIZE creates a temporary memory module between the new base and any modules that already have been loaded. When BJSIZE EXITs this temporary memory module is deleted and any modules that have been loaded slide down to the new base. Thus as long as you are increasing the partition size by more than 12 bytes no LOADed modules will be lost. Warning: Do not make the boot job's partition so large that another job's partition will later overlap with it as it is allocated. ENDC SEARCH SYS SEARCH SYSSYM JCB=A0 Base=A1 Buffer=A2 Dev=A3 Atemp=A6 NewSize=D0 Number=D1 OldSize=D2 Diff=D3 Dtemp=D6 KB=1024 PHDR -1,0,PH$REE!PH$REU ; re-entrant & re-usable MOV JOBCUR,JCB ; index this job's Job Control Block MOV JOBTBL,Atemp ; check first job in JOBTBL MOV @Atemp,Atemp ChkJCB: CMP Atemp,JCB ; is this the boot job? BEQ ChkSYS TYPECR EXIT ChkSYS: MOV SYSBAS,Number ; any SYSTEM modules loaded? BEQ ChkDEV TYPECR EXIT ChkDEV: MOV DEVTBL,Number ; has first DEVTBL been executed? CMP Number,MEMBAS BLO ChkSIZ TYPECR EXIT ChkSIZ: MOV #32*KB,Number ; pre-set default=32K LIN ; size specified? JEQ ChkMem ; no, use default GTDEC ; yes, get specified size BMI NoGood TST Number ; could be 0 if syntax bad BNE Kilo NoGood: TYPECR EXIT Kilo: CMPB @Buffer,#'K ; kilobytes specified? BNE Even MUL Number,#KB ; yes, multiply by 1K Even: INC Number ; round up to even number BCLR #0,Number Chk64: CMP Number,#64*KB ; >64K? BLOS Chk16 TYPECR EXIT Chk16: CMP Number,#16*KB BHIS ChkMem TYPECR EXIT ChkMem: MOV MEMEND,Dtemp SUB MEMBAS,Dtemp CMP Number,Dtemp BLO ChkNew TYPECR EXIT ChkNew: MOV Number,NewSize ; save a copy MOV JOBSIZ(JCB),OldSize MOV NewSize,Diff SUB OldSize,Diff ; calculate the difference in size BNE DoIt ; =0 if no change being made TYPE <%Partition size is already> DCVT 0,OT$TRM!OT$LSP!OT$TSP TYPECR EXIT DoIt: MOV MEMEND,Base ; index end of physical memory SUB NewSize,Base ; calculate new partition base addr MOV Base,JOBBAS(JCB) ; set new partition base address MOV NewSize,JOBSIZ(JCB) ; set new partition size CMP Diff,#12 BGE MakeTMP ; take a signed comparison >= TYPECR <%All memory modules deleted> CLR @Base BR ShowSize MakeTMP:MOV Diff,@Base ; make temporary module at base CLRW 4(Base) ; clear its flag word so EXIT will DEL it ShowSize:MOV NewSize,Number ; restore register for DCVT TYPE <[> DCVT 0,OT$TRM!OT$TSP TYPE MOV Base,Number ; copy for OCVT OCVT 0,OT$TRM TYPECR <]> EXIT ; we did it! END .