From: Fred Haines
To:   Rick Charnes
Date: January 8, 1988
Subj: MLOAD24 patch


Rick,

Here's the way I patched the exit routine of MLOAD24 to get��
around the problem I had running under XBIOS. The lines preceded��
by double semicolons are the ones I commented out; the line with��
the double semicolons before the comment is the one line I added.

;
; exit to cp/m
;
exit:   lxi     d,tbuf          ;restore dma address
       mvi     c,sdmaf
       call    bdos

;;      lda     system+2        ;get top of memory pointer
;;      sui     9               ;allow for ccp+slop
;;      lxi     h,hiload+1      ;highest load address
;;      sub     m               ;above ccp?
;;      jc      warmbt          ;then warm-boot
;;      lhld    spsave          ;nope, ccp still in memory
;;      sphl                    ;restore its stack
;;      ret                     ;return to ccp

       jmp     warmbt          ;; unconditional jump inserted
  ��

;
; load program initialization
;

I hasten to emphasize that this is NOT a fix to MLOAD24. Quite��
the contrary, this patch actually eliminates a desirable feature,��
the ability of the program to quit without warmbooting if it��
determines that the load did not overwrite the CCP. It's First��
Aid rather than a miracle cure.

"Top of memory" is the base address of DOS, "hiload" is the��
highest address affected by the load, "warmbt" equals 0000h. The��
routine provides two ways to quit, by jump to warmbt, or by a��
simple ret to CPM.

I believe it is the second routine that is causing the problem,��
which behaves like a damaged CCP or a blown pointer to the CCP,��
but I'm not able to follow the intricacies of the checking to see��
whether the CCP has been overwritten or not. Somebody will crack��
this case in short order, but the patch may keep you afloat until��
he does.