100 CALL CLEAR
$MLC N 110 10 1000
300 CALL PEEK(16350,A,B)::A=A*256+B
310 PRINT "Used in HIGH MEM  :";A-40960
315 GOSUB 500::CALL LINK("FSIZE",B,A):: A=B+8
320 PRINT "Free  in LOW MEM  :";A
340 PRINT "      # of links  :";INT(A/8)
350 CALL PEEK(8194,A,B)::A=256*A+B::GOSUB 500
360 PRINT "and TR0 zone of 256 bytes"::A=A-256::GOSUB 500
380 PRINT "SAVING to DSK1.MLC1/2..."::CALL LINK("SAVER",Z1,Z2,JJ,MM,AA)
390 IF ABS(Z1)+ABS(Z2)<>0 THEN PRINT "Error codes : ";Z1;Z2::END
395 PRINT "Ok! Date";JJ;MM;AA::CALL LINK("CLEAR",A,B)::D=B+A
400 PRINT " After CLEAR, free memory is"
420 PRINT "      in LOW MEM  :";A
430 CALL PEEK(8194,A,C)::A=256*A+C::GOSUB 500
435 PRINT "      or maximum  :";D::A=A-B::GOSUB 500
440 END

500 X=A::H$=""
510 FOR I=1 TO 4::Y=INT(X/16)::R=X-16*Y+1::X=Y
520 H$=SEG$("0123456789ABCDEF",R,1)&H$
530 NEXT I::PRINT "      start at    : ";H$::PRINT
540 RETURN
$SAVER
	startdata
		WORD &h060A	; save and flags
		WORDS 0,0	; addr,0
		WORD 6928	; len (>4000->24f4+4) without tables
		WORD &h0009	; 0,name lenght
		STRING "DSK1.MLC1"
	enddata A
      $[
        mov @>2004,r0         ; DEF table
        ai r0,6               ; jump over my name "SAVER "
        mov *r0,r1            ; my address (so end of MLC tables!)
        mov r1,@HIGHPT        ; reset HIGH Pointer
        dect r0
        li r2,>A054           ; standard address for starting routines A000 + 32 + 52
        mov r2,@S             ; start table
        mov r2,*r0+           ; save it
        s r2,r1               ; size of MLC in High Mem
        mov r1,@T             ; size
        mov r1,*r0+           ; save it
        mov r0,@>2004         ; modif LFADDR to remove "SAVER" from DEF table
      $]
	LET B &h831A
	GETTABLE B(0) B		; top free address in VDP
	SUB B 20		; address for PAB
	LET C B
      SUB C 6928              ; data address (6928 = >4000 - >24F4 + 4)
	PUTTABLE A(1) C		; address in PAB
     
	BMOVECTOV A 20 B	; move my PAB into VDP

	BMOVECTOV &h2002 4 C	; the two pointers into data bloc
	ADD C 4			; update pointer
	BMOVECTOV &h24F4 6924 C	; move all MLC to VDP

	FSAVE B			; save 6928+T bytes to file
      PUTPARAM 1 Z            ; return first code

      PUTTABLE A(3) T         ; new size
      SUB C 4                 ; back to start address
      BMOVECTOV S T C         ; move all tables to VDP
      PUTTABLE A(9) &h3200    ; change MLC1 to MLC2
      BMOVECTOV A 20 B        ; new PAB
      FSAVE B
      PUTPARAM 2 Z
	  PUTPARAM 3 [			  ; return day from pseudo variable
	  PUTPARAM 4 \            ; return month
	  PUTPARAM 5 ]            ; return year
$$
$END
	