[net.micro.cpm] Dave Rand: question about returning to CCP

KPETERSEN@SIMTEL20.ARPA (04/08/84)

From:  Keith Petersen <KPETERSEN@SIMTEL20.ARPA>

Dave Rand, the author of NSWP2, left this file on the SYSOP RCPM.
Replies to me, if you like, and I'll relay to Dave.
--Keith

----
Dave Rand
10232 - 160 Street
Edmonton, Alberta  Canada
T5P 3E9
(403) 484-4114
03/21/84

A few days ago, I had a call from a mildly irate user of NSWP2. He claimed
that NSWP failed on the 'X' command, and proceeded to tell me why. I can
find no reason behind his logic, so here it is... if someone has an
idea, PLEASE let me know!

In NSWP, I don't jump to zero when I exit. Instead, I do what amounts to a
return to the CCP. The actual code involved goes like this...

	XTHL		;get contents of (SP) into HL
	SHLD CCPRET+1	;save it as part of a JMP instruction
	LXI  SP,STACK	;and move stack local

later on, when I want to return to CP/M, I use:

CCPRET:	JMP 0000h	;to be filled in

The users' system was a heavily modified CPM 2.2 system, that included
bank selected memory. He says, however, that had I have done things
'correctly', I should have used the following code:

	lxi h,0		;offset zero
	dad sp		;from stack pointer
	shld CCPSTK+1	;and save old stack address
	LXI  SP,STACK	;and move stack local

and to return to the CCP:

CCPSTK:	lxi SP,0	;to be filled in
	ret		;get back!

Now... You know, and I know, that JMPing to the address on the top of the
stack is EXACTLY the same as RET'ing, except that I don't preserve the stack.
But DR's CCP, along with all CCP replacements, ALWAYS use the code:

	CALL	100h	;execute transient program
	LXI	SP,LOCS	;restore stack, in case we get back.

except for CPM 3.0, which uses

	LXI	H,0	;return address of warm boot!
	push	h
	jmp	100h	;execute transient

What I think, is that his CCP (which has been modified by him), DOES NOT
do the LXI SP. However, I am open to suggestions. By the way, he is the
ONLY user (from the 50 or so that have contacted me) that has reported this
problem.

I am mystified. He claims that the LXI SP is there. If that is the case
(which I don't believe), magic must be occuring. If anyone can explain
to me the difference between the JMP and the RET, I would forever be in
your debt!

Thanks in advance... Dave Rand



-------