INITL.MAC;2/AU/-BF=INITL.MAC;1 \ -2,2,/;DS021/ .IDENT /DS13.3/ -52,,/;DS021/ ; DANIEL STEINBERG 21-FEB-80 ; DS020 -- THIS PATCH FIXES A BUG WHICH COULD RESULT IN ; AN UN-BOOTABLE SYSTEM IF $POOL&3 NE 0 AND THE SYSTEM ; IS NOT VMR'ED (ADMITTEDLY, A RARE OCCURENCE). ; ; DS021 -- (CONDITIONAL ON DS$OPT) DS$OPT I/O PACKETS ; WILL BE PRE-ALLOCATED AT THE TOP OF POOL ON INITIAL ; SYSTEM BOOT....THIS PREVENTS UNNECESSARY FRAGMENTATION. ; NOTE THAT THESE PACKETS WILL BE DYNAMICALLY RELEASED ; IF YOU 'SET /MAXPKT' LOWER THAN DS$OPT. ; % -89,,/;DS021/ ; ; SUBROUTINE TO OUTPUT A MESSAGE TO THE SYSTEM CONSOLE TERMINAL ; OPMSG: MOV (R5)+,R1 ;GET ADDRESS OF OUTPUT MESSAGE 10$: MOVB (R1)+,R0 ;GET NEXT BYTE TO OUTPUT BEQ 30$ ;IF EQ DONE MOVB R0,TPS+2 ;LOAD BYTE IN OUTPUT BUFFER 20$: TSTB TPS ;PRINTER BUSY? BCS 30$ ;IF CS NO CONSOLE TERMINAL BPL 20$ ;IF PL YES BR 10$ ;GO AGAIN 30$: RTS R5 ; ; ; NONEX MEM TRAP ROUTINE ; TRPRT: BIS #1,2(SP) ;SET CARRY BIT RTI ; -331,369,/;DS021/ .IF DF,DS$OPT&Q$$OPT .IFTF ;Q$$OPT&DS$OPT -,,/;DS020/ MOV $CRAVL,R0 ;GET ADDRESS OF FREE CORE MOV #$SYBEG-$POOL,R1 ;GET SIZE (ALWAYS DBL-WD ALIGNED) BIC #3,R1 ;ADJUST SIZE, JUST TO MAKE SURE SUB R1,R0 ;CALC TOP OF DEALLOCATION (==$POOL??) -,,/;DS021/ .IFT ;DF,Q$$OPT&DS$OPT CLR R4 ;CLEAR COUNT OF PACKETS ALLOCATED MOVB $PKNUM,R3 ;GET NUMBER OF PACKETS TO PRE-ALLOCATE BLE ALLD ;TOO MANY...MAKE IT NONE MOV #$PKAVL,R2 ;SET UP DUMMY LAST PACKET MOV R0,R5 ;COPY ADDRESS OF CURRENT PACKET PREA: ADD #I.LGTH,R5 ;CALC ADDRESS OF NEXT PACKET CMP R5,#PREA ;DON'T OVERLAY THIS CODE!!!! BHIS ALLD ; $PKNUM WAS INITIALIZED TOO LARGE! MOV R0,(R2) ;POINT LAST PACKET TO CURRENT CLR (R0) ;SET THIS ONE AS LAST MOV R0,R2 ;SET NEW LAST MOV R5,R0 ;AND NEW CURRENT SUB #I.LGTH,R1 ;SUBTRACT FROM WHAT WILL BE FREED INC R4 ;COUNT ANOTHER PACKET PRE-ALLOCATED SOB R3,PREA ;AND LOOP TO MAX ALLD: MOVB R4,$PKNUM ;SET NUMBER PRE-ALLOCATED .ENDC ;DF,Q$$OPT&DS$OPT -,,/;DS020/ CALLR $DEACB ;DEALLOCATE INITIALIZATION CODE ; ; END OF INITL CODE....FREED TO DYNAMIC STORAGE REGION AFTER EXECUTION ; .IF NE <.-$POOL>&3 .BLKB <.-$POOL>&3 .ENDC /