What is the oldest file you typed in on a computer and still have on your disk? My oldest file is a small Basic program from 1978, in KIM-1 audio format. No timestamp, filename is 01, length $14A
I still have audio tapes of my first computer, a vic-20 I got on Christmas 1982. Some years ago I copied some tapes to PC. I don’t remember which one was the first (other PC), probably samples from the manual from day one. Floppy drive I got in 1983. I also have some non-dated printouts, mainly from Creative Computing.
Original 5.25" floppy discs used on an Apple II in '78 ? Last time I fired them up (earlier this year) they were working just fine.
Northstar Horizon stuff in the early 80’s (on hard-sectored discs)
-Gordon
(and yes, I do have backups! the issue there is getting data to/from the Apple II, etc. so serial card to the rescue, but LISTing stuff to the serial port is fine for me)
Does “keypunched yourself, and still have a machine-readable copy” qualify? In 1968, Charles Simonyi and I wrote (and keypunched!) a Snobol4 implementation for the Control Data Corporation 6400. I didn’t keep a magnetic tape copy for myself, but in 2007 I ran across a copy of the source code in a Snobol repository maintained by Ralph Griswold at the University of Arizona. The deck starts out:
*DECK SNOBOL
IDENT SNOBOL,101B,SNOBOL
ABS
SPACE 14
****************************************
* *
* *
* *
* *
* *
* *
* *
* *
* *
* CAL-6000 SNOBOL4 COMPILER *
* DEVELOPED BY *
* CHARLES SIMONYI AND PAUL MCJONES *
* BERKELEY, 1968 - 1969 *
* *
* *
* *
* *
* *
* *
* *
* *
* *
****************************************
For more on this (and a link to this version, plus a later 1971 version of the source), see Cal Snobol
DEC RSTS BASIC program to generate non-player characters for a AD&D Tournament. I think this was the first program I ever wrote that was not for a class. Early 1981. Notice the RSTS specific calls on line 90, 110 and 2900. I have actually copied this to a CP/M-86 v1.1 partition, removed the RSTS specific commands and ran it in MBASIC on my Toshiba T3100.
10 ' STAT GENERATION 0160 RACE 0350 20 ' CLASS 0410 HIT POINTS 0470 30 ' SEX 0600 RACIAL MAX-MINS 0620 40 ' MONEY 0990 PSIONICS 1240 50 ' PSI ABILITY 1330 PSI ATTACK 1410 60 ' PSI DEFENSE 1480 PSI DISIPLINES 1540 70 ' ALIGNMENT 1770 AGE 1800 80 ' 2ND SKILL 2090 HEIGHT & WEIGHT 2110 90 U$=SYS(CHR$(3)) 100 INPUT "PASSWORD";A$ 110 U$=SYS(CHR$(2)) 120 IF A$<>"WIZARD" THEN 2880 130 PRINT 140 EXTEND 150 RANDOMIZE 160 ' STAT GENERATION 170 INPUT "HOW MANY CHARACTERS DO YOU WANT TO GENERATE";G 180 IF G=0 THEN 2860 190 PRINT 200 FOR Q=1 TO G 210 PRINT "CHARACTER-";Q 220 ST=0:IN=0:WD=0:CN=0:DX=0:CH=0 230 M=0:GP=0:PS=1 240 FOR X3=1 TO 6 250 T=0 260 FOR X1=1 TO 3 270 R2(X1)=INT(6*RND+1):R4(X1)=INT(6*RND+1) 280 IF R4(X1)>R2(X1) THEN R2(X1)=R4(X1) 290 T=T+R2(X1) 300 STA(X3)=T 310 NEXT X1 320 NEXT X3 330 IN=STA(2):WD=STA(3):DX=STA(4):CN=STA(5):CH=STA(6) 340 ST=STA(1) 350 ' RACE 360 RAC=INT(7*RND+1) 370 IF RAC=2 THEN DX=DX+1:CN=CN-1 380 IF RAC=4 THEN CN=CN+1:CH=CH-1 390 IF RAC=6 THEN ST=ST-1:DX=DX+1 400 IF RAC=7 THEN ST=ST+1:CN=CN+1:CH=CH-2 410 ' CLASS 420 IF ST>=IN AND ST>=WD AND ST>=DX THEN CL=1 430 IF IN>=ST AND IN>=WD AND IN>=DX THEN CL=2 440 IF WD>=ST AND WD>=IN AND WD>=DX THEN CL=3 450 IF DX>=ST AND DX>=IN AND DX>=WD THEN CL=4 460 IF ST=18 AND CL=1 THEN ST=ST+RND 470 ' HIT POINTS 480 IF CL=1 THEN HP=INT(10*RND+1) 490 IF CL=2 THEN HP=INT(4*RND+1) 500 IF CL=3 THEN HP=INT(8*RND+1) 510 IF CL=4 THEN HP=INT(6*RND+1) 520 IF CN=3 THEN HP=HP-2 530 IF CN>3 AND CN<7 THEN HP=HP-1 540 IF CN=15 THEN HP=HP+1 550 IF CN=16 THEN HP=HP+2 560 IF CN>16 AND CL<>1 THEN HP=HP+2 570 IF CN=17 AND CL=1 THEN HP=HP+3 580 IF CN=18 AND CL=1 THEN HP=HP+4 590 IF HP<1 THEN HP=1 600 ' SEX 610 SEX=INT(4*RND+1) 620 ' RACIAL MAXS,MINS 630 IF RAC=4 AND SEX=4 THEN 740 640 IF RAC=4 AND SEX<4 THEN 770 650 IF RAC=2 AND SEX=4 THEN 790 660 IF RAC=2 AND SEX<4 THEN 800 670 IF RAC=5 AND SEX=4 THEN 830 680 IF RAC=5 AND SEX<4 THEN 840 690 IF RAC=3 AND SEX=4 THEN 860 700 IF RAC=3 AND SEX<4 THEN 870 710 IF RAC=6 AND SEX=4 THEN 890 720 IF RAC=6 AND SEX<4 THEN 900 730 IF RAC=7 THEN 940 740 IF ST<8 THEN ST=8:IF ST>17 THEN ST=17 750 IF DX>17 THEN DX=17 760 IF CN<12 THEN CN=12:IF CH>16 THEN CH=16:GOTO 990 770 IF ST<8 THEN ST=8:IF DX>17 THEN DX=17 780 IF CN<12 THEN CN=12:IF CH>16 THEN CH=16:GOTO 990 790 IF ST> 16 THEN ST=16 800 IF IN<8 THEN IN=8 810 IF DX<7 THEN DX=7:IF CN<6 THEN CN=6 820 IF CH<8 THEN CH=8:GOTO 990 830 IF ST>15 THEN ST=15 840 IF ST<6 THEN ST=6:IF IN<7 THEN IN=7 850 IF CN<8 THEN CN=8:GOTO 990 860 IF ST>17 THEN ST=17 870 IF IN<4 THEN IN=4 THEN IN=4:IF DX<6 THEN DX=6 880 IF CN<6 THEN CN=6:GOTO 990 890 IF ST>14 THEN ST=14:GOTO 910 900 IF ST>17 THEN ST=17 910 IF ST<6 THEN ST=6:IF IN<6 THEN IN=6 920 IF WD>17 THEN WD=17:IF DX<7 THEN DX=8 930 IF CN<10 THEN CN=10:GOTO 990 940 IF ST<6 THEN ST=6 950 IF IN>17 THEN IN=17 960 IF WD>14 THEN WD=14 970 IF CN<13 THEN CN=13 980 IF CH>12 THEN CH=12 990 ' MONEY 1000 IF CL=1 THEN 1040 1010 IF CL=2 THEN 1090 1020 IF CL=3 THEN 1140 1030 IF CL=4 THEN 1190 1040 FOR A=1 TO 5 1050 FM=INT(4*RND+1) 1060 M=M+FM 1070 NEXT A 1080 GOTO 1230 1090 FOR B=1 TO 2 1100 MM=INT(4*RND+1) 1110 M=M+MM 1120 NEXT B 1130 GOTO 1230 1140 FOR C=1 TO 3 1150 CM=INT(6*RND+1) 1160 M=CM+M 1170 NEXT C 1180 GOTO 1230 1190 FOR D=1 TO 2 1200 TM=INT(6*RND+1) 1210 M=TM+M 1220 NEXT D 1230 GP=10*M 1240 ' PSIONICS 1250 IF IN<16 AND WD<16 AND CH<16 THEN 1770 1260 IF IN>16 THEN IP=2.5*(IN-16) 1270 IF WD>16 THEN WP=1.5*(WD-16) 1280 IF CH>16 THEN CP=0.5*(CH-16) 1290 PSI=INT(100-(IP+WP+CP)) 1300 PR=INT(100*RND+1) 1310 IF PSI>PR THEN PS=1:GOTO 1770 1320 IF PSI<=PR THEN PS=2 1330 ' PSI ABILITY 1340 IF IN>12 THEN IS=IN-12 1350 IF WD>12 THEN WS=WD-12 1360 IF CH>12 THEN CS=CH-12 1370 SB1=IS+WS+CS 1380 IF IN>16 AND WD>16 AND CH>16 THEN SB1=4*SB1 1390 IF IN>16 AND WD>16 OR CH>16 AND CH>16 OR WD>16 AND CH>16 THEN SB1=2*SB1 1400 PSAB=((INT(100*RND+1))+SB1)*2 1410 ' PSI ATTACK 1420 PSAT=INT(100*RND+1) 1430 IF PSAT<26 THEN PSA=1 1440 IF PSAT>25 AND PSAT<51 THEN PSA=2 1450 IF PSAT>50 AND PSAT<76 THEN PSA=3 1460 IF PSAT>75 AND PSAT<96 THEN PSA=4 1470 IF PSAT>95 AND PSAT<=100 THEN PSA=5 1480 ' PSI DEFENSE 1490 PSDT=INT(100*RND+1) 1500 IF PSDT<26 THEN PSD=2 1510 IF PSDT>25 AND PSDT<76 THEN PSD=3 1520 IF PSDT>75 AND PSDT<96 THEN PSD=4 1530 IF PSDT>95 THEN PSD=5 1540 ' PSI DISIPLINES 1550 PD=INT(100*RND+1) 1560 IF PD<11 THEN MI=1:MA=0 1570 IF PD>10 AND PD<26 THEN MI=2:MA=0 1580 IF PD>25 AND PD<41 THEN MI=3:MA=0 1590 IF PD>40 AND PD<56 THEN MI=2:MA=1 1600 IF PD>55 AND PD<71 THEN MI=3:MA=1 1610 IF PD>70 AND PD<81 THEN MI=4:MA=1 1620 IF PD>80 AND PD<91 THEN MI=3:MA=2 1630 IF PD>90 AND PD<96 THEN MI=5:MA=1 1640 IF PD>95 THEN MI=4:MA=2 1650 FOR V=1 TO MI 1660 PDMI(V)=INT(24*RND+1) 1670 FOR H=I TO V-1 1680 IF PDMI(V)=PDMI(H) THEN 1660 1690 NEXT H 1700 NEXT V 1710 FOR J=1 TO MA 1720 PDMA(J)=INT(20*RND+1) 1730 FOR K=1 TO J-1 1740 IF PDMA(J)=PDMA(K) THEN 1720 1750 NEXT K 1760 NEXT J 1770 ' ALIGNMENT 1780 ALIG=INT(9*RND+1) 1790 IF CL=4 AND ALIG=1 OR CL=4 AND ALIG=3 THEN 1780 1800 ' AGE 1810 IF RAC=1 AND CL=1 THEN AGE=(INT(4*RND+1))+15 1820 IF RAC=1 AND CL=2 THEN AGE=(INT(16*RND+12))+24 1830 IF RAC=1 AND CL=3 THEN AGE=(INT(4*RND+1))+18 1840 IF RAC=1 AND CL=4 THEN AGE=(INT(4*RND+1))+18 1850 IF RAC=2 AND CL=1 THEN AGE=(INT(30*RND+5))+130 1860 IF RAC=2 AND CL=2 THEN AGE=(INT(30*RND+5))+150 1870 IF RAC=2 AND CL=3 THEN AGE=(INT(100*RND+10))+500 1880 IF RAC=2 AND CL=4 THEN AGE=(INT(30*RND+5))+50 1890 IF RAC=3 AND CL=1 THEN AGE=(INT(12*RND+3))+22 1900 IF RAC=3 AND CL=2 THEN AGE=(INT(16*RND+2))+30 1910 IF RAC=3 AND CL=3 THEN AGE=(INT(8*RND+2))+40 1920 IF RAC=3 AND CL=4 THEN AGE=(INT(24*RND+3))+22 1930 IF RAC=4 AND CL=1 THEN AGE=(INT(20*RND+5))+40 1940 IF RAC=4 AND CL=2 THEN 220 1950 IF RAC=4 AND CL=3 THEN AGE=(INT(40*RND+2))+250 1960 IF RAC=4 AND CL=4 THEN AGE=(INT(18*RND+3))+75 1970 IF RAC=5 AND CL=1 THEN AGE=(INT(20*RND+5))+60 1980 IF RAC=5 AND CL=2 THEN 220 1990 IF RAC=5 AND CL=3 THEN AGE=(INT(36*RND+3))+300 2000 IF RAC=5 AND CL=4 THEN AGE=(INT(20*RND+5))+80 2010 IF RAC=6 AND CL=1 THEN AGE=(INT(12*RND+3))+20 2020 IF RAC=6 AND CL=2 THEN 220 2030 IF RAC=6 AND CL=3 THEN 220 2040 IF RAC=6 AND CL=4 THEN AGE=(INT(8*RND+2))+40 2050 IF RAC=7 AND CL=1 THEN AGE=(INT(4*RND+1))+13 2060 IF RAC=7 AND CL=2 THEN 220 2070 IF RAC=7 AND CL=3 THEN AGE=(INT(4*RND+1))+20 2080 IF RAC=7 AND CL=4 THEN AGE=(INT(8*RND+2))+20 2090 ' 2ND SKILL 2100 SKI=INT(85*RND+1) 2110 ' HEIGHT AND WEIGHT DETERMINATION 2120 IF RAC=1 THEN A=23:B=60:C=36:D=100 2130 IF RAC=2 THEN A=17:B=50:C=51:D=70 2140 IF RAC=3 THEN A=17:B=56:C=63:D=88 2150 IF RAC=4 THEN A=13:B=42:C=71:D=104 2160 IF RAC=5 THEN A=10:B=36:C=26:D=67 2170 IF RAC=6 THEN A=13:B=30:C=31:D=42 2180 IF RAC=7 THEN A=12:B=59:C=89:D=102 2190 HT=(A*RND+B):WT=(C*RND+D) 2200 PRINT "STR-";ST;" INT-";IN;" WD-";WD;" DEX=";DX;" CN-";CN;" CH-";CH 2210 IF RAC=1 THEN PRINT "RACE-HUMAN"; 2220 IF RAC=2 THEN PRINT "RACE-ELF"; 2230 IF RAC=3 THEN PRINT "RACE-HALF ELF"; 2240 IF RAC=4 THEN PRINT "RACE-DWARF"; 2250 IF RAC=5 THEN PRINT "RACE-GNOME"; 2260 IF RAC=6 THEN PRINT "RACE-HALFLING"; 2270 IF RAC=7 THEN PRINT "RACE-HALF ORC"; 2280 IF CL=1 THEN PRINT " CLASS-FIGHTER"; 2290 IF CL=2 THEN PRINT " CLASS-MAGIC USER"; 2300 IF CL=3 THEN PRINT " CLASS-CLERIC"; 2310 IF CL=4 THEN PRINT " CLASS-THIEF"; 2320 PRINT " HP-";HP; 2330 PRINT " MONEY-";GP 2340 IF ALIG=1 THEN PRINT "ALIGN-LG"; 2350 IF ALIG=2 THEN PRINT "ALIGN-NG"; 2360 IF ALIG=3 THEN PRINT "ALIGN-CG"; 2370 IF ALIG=4 THEN PRINT "ALIGN-LN"; 2380 IF ALIG=5 THEN PRINT "ALIGN-N"; 2390 IF ALIG=6 THEN PRINT "ALIGN-CN"; 2400 IF ALIG=7 THEN PRINT "ALIGN-LE"; 2410 IF ALIG=8 THEN PRINT "ALIGN-NE"; 2420 IF ALIG=9 THEN PRINT "ALIGN-CE"; 2430 IF SEX<4 THEN PRINT " SEX-MALE"; ELSE PRINT " SEX-FEMALE"; 2440 PRINT " AGE=";AGE; 2450 IF SKI<=2 THEN PRINT " 2ND SKILL-ARMORER" 2460 IF SKI>2 AND SKI<5 THEN PRINT " 2ND SKILL-BOWYER" 2470 IF SKI>4 AND SKI<11 THEN PRINT " 2ND SKILL-FARMER" 2480 IF SKI>10 AND SKI<15 THEN PRINT " 2ND SKILL-FISHER (NET)" 2490 IF SKI>14 AND SKI<21 THEN PRINT " 2ND SKILL-FORESTER" 2500 IF SKI>20 AND SKI<24 THEN PRINT " 2ND SKILL-GAMBLER" 2510 IF SKI>23 AND SKI<28 THEN PRINT " 2ND SKILL-HUNTER/FISHER(HOOK)" 2520 IF SKI>27 AND SKI<33 THEN PRINT " 2ND SKILL-HUSBANDMAN" 2530 IF SKI>32 AND SKI<35 THEN PRINT " 2ND SKILL-JEWELER" 2540 IF SKI>34 AND SKI<38 THEN PRINT " 2ND SKILL-LEATHERER" 2550 IF SKI>37 AND SKI<40 THEN PRINT " 2ND SKILL-PAINTER" 2560 IF SKI>39 AND SKI<43 THEN PRINT " 2ND SKILL-MASON" 2570 IF SKI>42 AND SKI<45 THEN PRINT " 2ND SKILL-MINER" 2580 IF SKI>44 AND SKI<47 THEN PRINT " 2ND SKILL-NAVIGATOR" 2590 IF SKI>46 AND SKI<50 THEN PRINT " 2ND SKILL-SAILOR" 2600 IF SKI>49 AND SKI<52 THEN PRINT " 2ND SKILL-SHIPWRIGHT" 2610 IF SKI>51 AND SKI<55 THEN PRINT " 2ND SKILL-TAILOR" 2620 IF SKI>54 AND SKI<58 THEN PRINT " 2ND SKILL-TEAMSTER" 2630 IF SKI>57 AND SKI<61 THEN PRINT " 2ND SKILL-TRADER" 2640 IF SKI>60 AND SKI<65 THEN PRINT " 2ND SKILL-TRAPPER" 2650 IF SKI>64 AND SKI<68 THEN PRINT " 2ND SKILL-WOODWORKER" 2660 IF SKI>67 AND SKI<85 THEN PRINT " 2ND SKILL-NO SKILL" 2670 PRINT "HEIGHT=";HT;" WEIGHT-";WT 2680 PRINT 2690 IF PS=2 THEN PRINT "PSI-YES"; 2700 IF PS=1 THEN PRINT "PSI-NO":GOTO 2830 2710 PRINT " ATTACK MODES-";PSA; 2720 PRINT " DEFENSE MODES-";PSD 2730 PRINT "NO. OF MINORS=";MI;" NO. OF MAJORS-";MA 2740 PRINT "MINORS-"; 2750 FOR V=1 TO MI 2760 PRINT;PDMI(V); 2770 NEXT V 2780 PRINT "MAJORS-"; 2790 FOR J=1 TO MA 2800 PRINT;PDMA(J); 2810 NEXT J 2820 PRINT "PSI ABILITY=";PSAB 2830 PRINT:PRINT 2840 NEXT Q 2850 GOTO 170 2860 PRINT:PRINT "FINISHED" 2870 GOTO 2910 2880 PRINT "ACCESS DENIED !!!!" 2890 PRINT "BYE" 2900 Z$=SYS(CHR$(14%)+"BYE Y") 2910 END
I wrote a tool in late 1982 to read CP/M 8" SS/SD floppies on a minicomputer - it’s in FORTRAN and I still have it on disk somewhere. Recovered from CCT some years ago. It was the first real FORTRAN program I wrote.