home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CP/M
/
CPM_CDROM.iso
/
cpm
/
bdsc
/
bdsc-1
/
noclr.c
< prev
next >
Wrap
Text File
|
1994-07-13
|
2KB
|
74 lines
noclrex()
/*
NOCLREX - Do not clear externals.
11/15/82 - David A. Gewirtz
This function is used to hack up version 1.5 of Leor's
BDS C compiler. The C.CCC runtime package automatically clears
the external data area before executing the compiled program.
For most programs, this is fine, but for a program like CHDIR,
which writes itself back out and counts on preinitialized
externals, it is no good at all. So the noclrex() hack is used to
cause C.CCC to bypass the 'clear externals' phase of the run-time
initialization. As C.CCC may be different for each version this
routine should be checked. The following code is part of the
'init' subroutine of the C.CCC runtime package:
0447 2A1B01 LHLD FRERAM ;CLEAR EXTERNALS
044A EB XCHG
044B 2A1501 LHLD EXTRNS
044E CDFA02 CALL CMH
0451 19 DAD D ;HL NOW HOLDS SIZE OF EXTERNAL DATA AREA
0452 7C CLREX: MOV A,H ;CLEAR ENTIRE EXTERNAL AREA
0453 B5 ORA L
0454 CA5E04 JZ CLREX2
0457 1B DCX D
0458 2B DCX H
0459 AF XRA A
045A 12 STAX D
045B C35204 JMP CLREX
045E AF CLREX2: XRA A
This function puts a JMP CLREX2 at location 0x447,
thereby effectively bypassing the clearing mechanisms
for programs based on this image.
For those who believe in the sanctity of the original
program, as well as thos who really don't wish to see awful
and unglamorous hacks, I have not put this in the original programs.
If you have a need for it, simply compile this function
and make a call of the form:
noclrex();
and all will be well.
Finally, please realize this this in no way affects the
currently running program, only the program created from the
current image.
*/
{
poke(0x447,0xc3); /* The JMP instruction */
poke(0x448,0x5e); /* low order address */
poke(0x449,0x04); /* high order */
/* That's it ... just remember to change this whenever
C.CCC is changed or a new version is used */
}