It has been called to our attention that the 'CALL 28A7H' described in the Sep-Oct 79 issue simply dosen't work from DOS READY. This is because one of the jump vectors gets wiped out when DOS is loaded. If you want to use a machine language program that executes directly from DOS READY, a CALL to address 44CFH will print anything up to a ODH or a 03H. The ODH (CR/LF) character will print, while the 03H will not.

To all of you who have been PEEKing around those reserved areas of RAM: Have you ever wondered what that long string of 04's from 4101H to 411BH are? They are used so the ROM can tell what type of variable is being used when no type identifier is used (like A%, Bl, [email protected] and D$). Try this: DEFINT A-Z and PEEK at addresses 16641 through 16667. They should all be 2! DEFSNG A-Z results in 4's, DEFSTR nets 3's and DEFDBL gets you 8's. See, there is a reason!

Need some more ways to get in and out of Basic? You can get out of the ROM by using the jump vectors for LIST and LLIST (41DFH), SYSTEM (41E2H), RUN (41C7H) or the '&' symbol (4194H).

Or, to be even a little more tricky, try building your own 'Jump table' using the INP(n) command. INP pokes the port number (the number in the parenthesis) intoaddress 4094H, and then calls 4093H. With just a little experimentation, you can have a genuine vectored USR function by selecting the port number according to the routine you wish to select. Of course, you must first POKE your own JP instruction and addresses into addresses 4093H-4095H.

Are you troubled by the OUT OF MEMORY error you get when returning to Basic after loading a machine language program? Try jumping to address 6CCH instead of 1A19H. This is the route taken by the panic (RESET) button when disk is not present.

How about a new way to keep people from BREAKing into the middle of your programs and stealing your secrets? Here's a technique that is simple, effective and works just as well on Disk Basic as Level II. With this in your program, the machine is locked up so tight that anytime the BREAK key is pressed, the program RUNs itself all over again! In fact, in Level II, even the RESET button is disabled in this same fashion so that the only way the Level II user can escape from your program is to completely power down!

Step 1: Pack a string (see String Packing Techniques Exposed, May-Jun 79) in line 20 (I chose QQ$) with the following bytes:

42,164,64,43,195,30,29 Step 2: Add the following code: 30 Q1 =PEEK(VARPTR(QQ$)+1): Q2=PEEK(VARPTR(QQ$)+2) 40 POKE 16812,195:POKE 1 681 3,Q1 :POKE 16814,02

Step 3: RUN the program. This is an excellent way to prevent students from getting into your educational software, as well as a good general purpose program protection feature. One final note though. Be sure your program is completely debugged before adding the code, as this will keep you out as well as everyone else!

f We have received several comments about the lack of a comma on the numeric keypad provided on the newer 16K Level ll's. Charles Quante offers his solution to the dilemma in the form of the following modifications to the "Software Numeric Keypad" (SYSTEM/COMMAND. May-Jun 80):

0 0

Post a comment