kamath@reed.UUCP (Sean Kamath) (02/10/86)
Well, there seems to be at least a few people interested in posting PD
software. I can understand easily enogh how to post BASIC programs, but
what about ML programs? I suppose you could send the source file, but
that might not be possible either from the fact it's not available or
for a funny assembler. Come up with a good answer and I'm interested
(BASIC just isn't so hot anymore :-) ). (I know Apple's but not to much
about VAX's & UN*X.)
For those of you that are interested in PD software, send me e-mail on
what you might be interested in. If and when I get enough answers I'll
post to the net. Possible things are disk zappers, file maintance,
graphics routine, ML number crunching routines, etc.
BTW: If we do get this going, I hope it doesn't turn into net.sources.
Man, those people are going crazy :-)
Sean Kamath
--
________________________________________________________________________________
UUCP {ihnp4,decvax,ucbcad}!tektronix!reed!kamath
And I looked again
And the monster was me...kamath@reed.UUCP (Sean Kamath) (02/25/86)
Soon, so soon, I shall be posting some PD software I wrote. They are
for getting you existing programs (both Basic & ML) into text files in
order to be downloaded and uploaded. A note on them. It is important I
believe to load the text files into a wordprocessor and save them before
trying to exec them. I tried to anyway with the DOS Kermit, and all I
got were errors untill I did this. I'll send them as soon as I get a
modem hooked up to my apple at home (wouldn'tcha know they'd take out
the Apple from work the day I'm gonna upload...:-).
Sean Kamath
p.s. Maybe this'll get people interested in posting thier little
programs of use....
--
________________________________________________________________________________
UUCP {ihnp4,decvax,ucbcad}!tektronix!reed!kamath
And I looked again
And the monster was me...kamath@reed.UUCP (Sean Kamath) (02/26/86)
Well, here it is. I know you've all been hanging on the edge of
your seat waiting for this, and now it's here!!!
First of all, I'd like to say that this is a direct response
from someone on the net about how to get downloadable programs onto the
net. Is there some sort of BinHex for the ]['s? I don't know. I
figure that there most be some standard way of doing it. I've been on
BBS's that have "mega downloads" but never gotten around to downloading
them. I haven't got the expertise in that area. What I do have the
ability to do is write the following assembly language program. I got
the idea from a one-liner in Nibble Magazine and a similar program in
Open-Apple. The original authors are Keith Stattenfield (Nibble Oct.
'85) and I believe Tom Weishaar (Open-Apple Feb. 85).
The Applesoft program came out of May '85 Open-Apple. I didn't
exactly get permission to copy it, but it's one measly line and I doubt
anyone's gonna get upset about it.
Anyway, I hope that this will encourage people to post their own
programs to the net for the benefit of others who either don't have a
program like that, didn't realize that that could be done, or didn't
know a neat trick. Grammar was never my strong point.
Enough of my chattering, here they are. Just cut 'em out,
download em, and exec them.
---------------------------------Cut-Here------------------------------------
0 D$=CHR$(4):POKE 33,33:INPUT "FILE NAME";F$:PRINT D$;"OPEN";F$:PRINT D$;"DELETE ";F$:PRINT D$;"OPEN";F$:PRINT D$;"WRITE";F$:PRINT "NEW":LIST 1,:PRINT D$;"CLOSE";F$:TEXT:END
RUN
---------------------------------Cut-Here------------------------------------
Important, there should only be three carriage returns, two
after the end, and 1 after the run. Then just exec this when you have
you program loaded. It will save a text file with all the lines in it,
except line zero, in a sequential text file.
This differs from the one in Open-Apple in that I deleted an
extra 'close' which was after the first 'open' command. Also, I have it
print a 'new' at the beginning of the created text file. This way, when
you EXEC the resulting text file, if you happen to have an already
resident applesoft program in memory, you don't get a hodgepodge of that
program with the one you're EXECing.
---------------------------------Cut-Here------------------------------------
1 ********************************
2 * *
3 * MAKE EXEC *
4 * *
5 *------------------------------*
6 * By Sean Kamath *
7 * 395 Reed College *
8 * Portland, OR 97202 *
9 *------------------------------*
10 * A program to take a range *
11 * and make an execable file *
12 * from that range *
13 *------------------------------*
14 * This program is in the *
15 * public domain. 2/23/86 *
16 * Merlin-Pro Assembler *
17 ********************************
18
19 *-------------------------------
20 * Note: This program will not allow you to
21 * make a text file out of any of the $Cx00 space.
22 *-------------------------------
23
24 *-------------------------------
25 * moniter routines
26 *-------------------------------
27
28 PRBYTE = $FDDA ; Print a hex byte
29 PRNTYX = $F940 ; Print two hex bytes (Y,X)
30 CROUT = $FD8E ; Print a CR to the KSWL hook
31 COUT = $FDED ; Print accumulator to the hook
32
33 *-------------------------------
34 * miscellaneous address equates
35 *-------------------------------
36
37 YVEC = $3F8 ; ^Y vector
38
39 A1L = $FA ; A1 is the start
40 A1H = A1L+1 ; A2 is the end
41 A2L = A1L+2 ; Normally these are $3C-3F
42 A2H = A1H+2 ; But DOS uses these.
43
44 ADDRESS = $3C ; The real start/stop locations
45
46 ASRUN = $76 ; Hibyte of AS line counter
47 PROMPT = $33 ; Prompt character stored here
48
49 *-------------------------------
50 * and whatever else is left
51 *-------------------------------
52
53 SPACE = $A0 ; ASCII Space
54 COLON = $BA ; ASCII Colon
55 LENGTH = %00001111 ; Mask for length
56 SOFTS = $C0 ; Softswitch page
57
58
59 ORG $8000
60
61 *-------------------------------
62 * Set the ^Y vector to the program and return
63 *-------------------------------
64
8000: A9 4C 65 LDA #$4C ; JMP opcode
8002: 8D F8 03 66 STA YVEC ; store it at ^Y vector
8005: A9 10 67 LDA #BEGIN ; vector to beginning of
8007: 8D F9 03 68 STA YVEC+1 ; EXEC MAKER
800A: A9 80 69 LDA #>BEGIN
800C: 8D FA 03 70 STA YVEC+2
800F: 60 71 RTS
72
73 *-------------------------------
74 * The program begins!!!
75 *-------------------------------
76
8010: A5 3C 77 BEGIN LDA ADDRESS ; Move the starting address
8012: 85 FA 78 STA A1L ; out of DOS's way, otherwise
8014: A5 3D 79 LDA ADDRESS+1 ; they get clobbered and we
8016: 85 FB 80 STA A1H ; only get $40 bytes put out.
8018: A5 3E 81 LDA ADDRESS+2 ; Likewise the ending address.
801A: 85 FC 82 STA A2L
801C: A5 3F 83 LDA ADDRESS+3
801E: 85 FD 84 STA A2H
85
86 *-------------------------------
87 * Get ready to fool DOS into thinking Applesloth
88 * is running in order to use the open and write commands.
89 *-------------------------------
90 * This is done by setting the hibyte of the applesoft
91 * program line counter to something other than $FF.
92 * Also, the applesoft prompt must not be ']'.
93 *-------------------------------
94
8020: A9 0A 95 LDA #10 ; Something other than $FF & $DD
8022: 85 76 96 STA ASRUN ; (ASCII ']') stored in these
8024: 85 33 97 STA PROMPT ; addresses fool DOS.
98
99 *-------------------------------
100 * DOS now fooled, so issue the open and write commands
101 *-------------------------------
102
8026: A2 00 103 LDX #00 ; Get ready to send the commands
8028: BD 35 80 104 LOOP LDA DATA,X ; to DOS.
802B: 20 ED FD 105 JSR COUT
802E: E8 106 INX
802F: E0 37 107 CPX #DOIT-DATA
8031: D0 F5 108 BNE LOOP ; Keep going 'til they're done.
8033: F0 37 109 BEQ DOIT ; (always taken)
8035: 8D 84 110 DATA HEX 8D84
8037: CF D0 C5 111 ASC "OPEN EFILE"8D
803A: CE A0 C5
803D: C6 C9 CC
8040: C5 8D
8042: 8D 84 112 HEX 8D84
8044: C4 C5 CC 113 ASC "DELETE EFILE"8D
8047: C5 D4 C5
804A: A0 C5 C6
804D: C9 CC C5
8050: 8D
8051: 8D 84 114 HEX 8D84
8053: CF D0 C5 115 ASC "OPEN EFILE"8D
8056: CE A0 C5
8059: C6 C9 CC
805C: C5 8D
805E: 8D 84 116 HEX 8D84
8060: D7 D2 C9 117 ASC "WRITE EFILE"8D
8063: D4 C5 A0
8066: C5 C6 C9
8069: CC C5 8D
118
119 *-------------------------------
120 * Write the desired address range out to disk!
121 *-------------------------------
122
806C: 20 B1 80 123 DOIT JSR PRA1 ; A modified monitor routine.
124
125 *-------------------------------
126 * Check for softswitch range and avoid if found.
127 *-------------------------------
128
806F: A5 FB 129 LDA A1H ; Load start HI
8071: C9 C0 130 CMP #SOFTS ; Compare to softswitch area
8073: D0 02 131 BNE HOP ; if not, OK
8075: E6 FB 132 INC A1H ; if so, then clear area
133
134 *-------------------------------
135 * The following is the actual write routine.
136 *-------------------------------
137
8077: A0 00 138 HOP LDY #00
8079: B1 FA 139 LDA (A1L),Y ; Print a byte
807B: 20 DA FD 140 JSR PRBYTE
807E: A9 A0 141 LDA #SPACE ; Print a space
8080: 20 ED FD 142 JSR COUT
8083: 20 C2 80 143 JSR NXTA1 ; A modified monitor routine.
8086: B0 09 144 OK BCS EXIT ; Exit if done with range
8088: A5 FA 145 LDA A1L ; Check the lobyte of the range
808A: 29 0F 146 AND #LENGTH ; if ending in $xxx0 then do CR.
808C: D0 E9 147 BNE HOP
808E: 4C 6C 80 148 JMP DOIT ; Keep going 'til range finished
149
150 *-------------------------------
151 * After finishing range, then close the file
152 *-------------------------------
153
8091: A2 00 154 EXIT LDX #00 ; Get ready to send the 'close'
8093: BD A0 80 155 LOOP2 LDA DATA2,X ; command.
8096: 20 ED FD 156 JSR $FDED
8099: E8 157 INX
809A: E0 0E 158 CPX #LEAVE-DATA2
809C: D0 F5 159 BNE LOOP2 ; Keep going 'til done.
809E: F0 0E 160 BEQ LEAVE ; (always taken)
80A0: 8D 84 161 DATA2 HEX 8D84
80A2: C3 CC CF 162 ASC "CLOSE EFILE"8D
80A5: D3 C5 A0
80A8: C5 C6 C9
80AB: CC C5 8D
80AE: 4C D0 03 163 LEAVE JMP $3D0 ; Return to DOS!
164
165 *-------------------------------
166 * A modified PRA1
167 *-------------------------------
168
80B1: A4 FB 169 PRA1 LDY A1H ; This is PRA1 from the
80B3: A6 FA 170 LDX A1L ; monitor, rewritten to
80B5: 20 8E FD 171 JSR CROUT ; print the address and a colon
80B8: 20 40 F9 172 JSR PRNTYX ; rather than the standard dash.
80BB: A0 00 173 LDY #$00
80BD: A9 BA 174 LDA #COLON
80BF: 4C ED FD 175 JMP COUT ; Use the RTS after COUT.
176
177 *-------------------------------
178 * This is a modified monitor routine called NXTA1.
179 * This allows incrementing $FA-FD instead of $3C-3F
180 *-------------------------------
181
80C2: A5 FA 182 NXTA1 LDA A1L ; this is the monitor subroutine
80C4: C5 FC 183 CMP A2L ; rewritten to use my A1 & A2
80C6: A5 FB 184 LDA A1H ; rather than $3C-3F
80C8: E5 FD 185 SBC A2H ; called NXTA1
80CA: E6 FA 186 INC A1L ; Carry set if done with range.
80CC: D0 B8 187 BNE OK
80CE: E6 FB 188 INC A1H
80D0: 60 189 RTS
--End assembly, 209 bytes, Errors: 0
Symbol table - alphabetical order:
A1H =$FB A1L =$FA A2H =$FD A2L =$FC
ADDRESS =$3C ASRUN =$76 BEGIN =$8010 COLON =$BA
COUT =$FDED CROUT =$FD8E DATA =$8035 DATA2 =$80A0
DOIT =$806C EXIT =$8091 HOP =$8077 LEAVE =$80AE
LENGTH =$0F LOOP =$8028 LOOP2 =$8093 NXTA1 =$80C2
OK =$8086 PRA1 =$80B1 PRBYTE =$FDDA PRNTYX =$F940
PROMPT =$33 SOFTS =$C0 SPACE =$A0 YVEC =$03F8
Symbol table - numerical order:
LENGTH =$0F PROMPT =$33 ADDRESS =$3C ASRUN =$76
SPACE =$A0 COLON =$BA SOFTS =$C0 A1L =$FA
A1H =$FB A2L =$FC A2H =$FD YVEC =$03F8
BEGIN =$8010 LOOP =$8028 DATA =$8035 DOIT =$806C
HOP =$8077 OK =$8086 EXIT =$8091 LOOP2 =$8093
DATA2 =$80A0 LEAVE =$80AE PRA1 =$80B1 NXTA1 =$80C2
PRNTYX =$F940 CROUT =$FD8E PRBYTE =$FDDA COUT =$FDED
The following is the routine performed on itself.
To get it running, just trim off the junk (namely this and any trailers)
and save it as a text file. Then EXEC it.
NOTE: I added the "call -151" and the "BSAVE MAKE EXEC,A$8000,L$D1"
------------------------------CUT-HERE-----------------------------------------
CALL -151
8000:A9 4C 8D F8 03 A9 10 8D F9 03 A9 80 8D FA 03 60
8010:A5 3C 85 FA A5 3D 85 FB A5 3E 85 FC A5 3F 85 FD
8020:A9 0A 85 76 85 33 A2 00 BD 35 80 20 ED FD E8 E0
8030:37 D0 F5 F0 37 8D 84 CF D0 C5 CE A0 C5 C6 C9 CC
8040:C5 8D 8D 84 C4 C5 CC C5 D4 C5 A0 C5 C6 C9 CC C5
8050:8D 8D 84 CF D0 C5 CE A0 C5 C6 C9 CC C5 8D 8D 84
8060:D7 D2 C9 D4 C5 A0 C5 C6 C9 CC C5 8D 20 B1 80 A5
8070:FB C9 C0 D0 02 E6 FB A0 00 B1 FA 20 DA FD A9 A0
8080:20 ED FD 20 C2 80 B0 09 A5 FA 29 0F D0 E9 4C 6C
8090:80 A2 00 BD A0 80 20 ED FD E8 E0 0E D0 F5 F0 0E
80A0:8D 84 C3 CC CF D3 C5 A0 C5 C6 C9 CC C5 8D 4C D0
80B0:03 A4 FB A6 FA 20 8E FD 20 40 F9 A0 00 A9 BA 4C
80C0:ED FD A5 FA C5 FC A5 FB E5 FD E6 FA D0 B8 E6 FB
80D0:60 00
BSAVE MAKE EXEC,A$8000,L$D1
------------------------------CUT-HERE-----------------------------------------
Well, enjoy these. Send any bug reports to me at
{ihnp4,decvax,ucbcad}!tektronix!reed!kamath
Sean Kamath
The Apple // Forever!!!!!!!!!!!!!!
--
________________________________________________________________________________
UUCP {ihnp4,decvax,ucbcad}!tektronix!reed!kamath
And I looked again
And the monster was me...