Originally posted by: wargo@sdcsla.UUCP (Dave Wargo)
Message-ID: <679@sdcsla.UUCP>
Date: Tue, 2-Oct-84 19:29:54 EDT
Article-I.D.: sdcsla.679
Posted: Tue Oct 2 19:29:54 1984
Date-Received: Thu, 4-Oct-84 07:59:45 EDT
Organization: U.C. San Diego, Cognitive Science Lab
Lines: 97
Thanks for the UN-NEW programs. I have not tryed either of the two
programs, so those of you who could use it have fun.
================================================================================
From ulysses!ecsvax!calway Sat Sep 22 15:10:27 1984
I assume that you are talking about BASIC programs when you speak of recovering
one after pressing your warm-start button (I think it really is a cold-start
button, which is why you lose the pointers).
The end of a BASIC program is marked by
three zero-filled bytes in a row.
A line such as the following, entered in the command mode, should find the end
for you:
FORX=2048TO40959:?X:IFPEEK(X)<>0ORPEEK(X+1)<>0ORPEEK(X+2)<>0THENNEXT
A string of addresses will run down the screen and eventually stop. Add three to the last
address and devide that number into high and low bytes:
high byte=INT(address/256)
low byte=address-(high byte*256)
POKE the high byte into addresses 46, 48 and 50. POKE the low byte into
addresses 45, 47 and 49.
SAVE the program at this point, before
trying to LIST it, because if the
line links are messed up (probably aren't, but it pays to be cautious), your
computer may hang again. Now you can
take a look at the LIST. If the LIST
is screwy or hangs your computer, you will need to get a machine language
monitor and go in and fix the line links. Not much fun.
I hope this helps.
James Calloway
The News and Observer
Box 191
Raleigh, N.C. 27602
(919) 829-4570
{akgua,decvax}!mcnc!ecsvax!calway
From sdcsvax!ucbvax!allegra!harvard!wjh12!foxvax1!white Fri Sep 28 21:11:31 1984
Subject: Re: Un-new Source for C64
Dave:--
It takes awhile for news to get this far... In case noone else
replied, the following will poke an assembly language subroutine into
high memory to un-new a program as needed. The program will erase
itself when it is run via a 'NEW', so you can test it on itself! Be
sure to execute it with "SYS xxxxx :CLR" [ the location may be
changed ].
10 AD=49152 : FOR I= 0 TO 21
20 READ D : POKE AD + I,D : NEXT
30 DATA 169, 8, 141, 2, 8, 32, 51, 165, 24
40 DATA 165, 34, 105, 2, 133, 45, 165, 35
50 DATA 105, 0, 133, 46, 96
60 PRINT "EXECUTE WITH SYS "; AD; ":CLR" : NEW
Here is the disassembly:---
ORG $C000 ;Starting location (may be relocated)
LDA #$08 ;put $08 in accum. and adjust the...
STA $0802 ;...next stmt. MS addr.Byte to proper address
JSR $A533 ;ROM subroutine: finds program end,puts in $22,$23
CLC ;clear carry flag
LDA $22 ;load low byte of pgm. end
ADC #$02 ;adjust pgm. end low byte
STA $2D ;...and save it as start of variables
LDA $23 ;now, get high byte...
ADC #$00 ;...adjust high byte, if a carry
STA $2E ;...and save it also
RTS ;Done!
===================================================
Walt White
The Foxboro Company
Foxboro, MA 02035
..!wjh12!foxvax1!white
I'm not loafing... I just work so fast I'm always FINISHED!