Charles Good wrote: > > Do you have your TI74 BASIC programs in PCIF format? If so could you email > them to me as file attachments? Hi Charles Here's some pgms that are somewhat intelligble - A lot of my stuff is engineering computation - I hate spreadsheets, so I use the '74. DYNO2 I commented for a friend of mine who was interested - I hope it makes sense - The program calculates horsepower & torque from vehicle parameters. PULSE3 calculates injector firing times given various sensor inputs. DSM is a disassembler I wrote years ago to poke around in ROM - I've got different versions of it - This one needs a connected PC to display the disassembly, and write it to a file. DSM is kind of a monster, but it was written to be understandable, not efficient. It needs PEEK.SUB loaded, and a 32K RAM cartridge to work. PGM is another tool for snooping, and also does number base conversions. To rotate through the options just enter a null string in the current window. TEMP.ASM reads a DS1820 temp sensor, a small, cheap device which has a serial output. Might make an interesting exhibit - It responds readily to body heat, for instance. If you're interested I'll send you a sensor and a binary file which you can load with LOAD.PGM. It can then be called from BASIC, and the result displayed on the 74's LCD real-time. (I tried to attach the binary, but it did'nt take for some reason...). I'll sift through all this junk - Somewhere I've got a terminal pgm for connecting two 74's - Kinda neat. Regards, Jack 100 ! DYNO2.PGM The algorithm will calculate horsepower and torque based on the the following inputs: 1) Vehicle weight. 2) Vehicle speed. 3) Engine rpm. 4) Acceleration. Calibration for an in-vehicle application would require full throttle acceleration to a speed above the threshold of aerodynamic significance. Neutral is then selected and the vehicle allowed to decelerate while deceleration and speed are monitored and recorded. This process is repeated several times, generating a table correlating speed and neutral deceleration. Instantaneous hp and torque values can now be determined inside the observed speed range, and calculated outside it. To use this demo version of the program enter the lines below, press RUN, and enter parameters as prompted. 280 DISPLAY ERASE ALL,"Vehicle weight (lbs):";MASS;:ACCEPT AT(23)SIZE(-5),MASS 290 DISPLAY ERASE ALL," Speed (mph):";MPH;:ACCEPT AT(15)SIZE(-4),MPH 300 DISPLAY ERASE ALL," RPM:";RPM;:ACCEPT AT(7)SIZE(-5),RPM 310 DISPLAY ERASE ALL," Acceleration (g):";ACCEL;:ACCEPT AT(20)SIZE(-4),ACCEL 320 DISPLAY ERASE ALL,"Neutral Deceleration (g):";DECEL; 330 ACCEPT AT(27)SIZE(-4),DECEL 340 ! 350 VELOCITY=MPH*5280/3600 360 FORCE=MASS*(ACCEL+DECEL) 370 HP=FORCE*VELOCITY/550 380 TORQUE=5250*HP/RPM 390 ! 400 HP=INT(HP*10+.5)/10 410 TORQUE=INT(TORQUE*10+.5)/10 420 ! 430 IMAGE ###.# hp ###.# lbs.ft #### rpm 440 DISPLAY ERASE ALL,USING 430,HP,TORQUE,RPM:PAUSE:GOTO 280 Note that HP and torque for a constant speed implies that ACCEL and DECEL are equal AND non-zero. 100 ! PULSE.PGM - 18 MAR 97 110 ! Algorithm computes injector-open time for stoichiometric combustion. 120 ! This is intended to be demonstrative, not efficient. STP is assumed. 130 IMAGE ###.## Cfm ##.## ml/sec ##.# l/h 140 ! 150 DISPLAY ERASE ALL,"Displacement (in):";CUBES;:ACCEPT AT(20)SIZE(-5),CUBES 160 DISPLAY ERASE ALL," Rpm:";RPM;:ACCEPT AT(7)SIZE(-4),RPM 170 DISPLAY ERASE ALL," MAP (inches of H2O):";MAP;:ACCEPT AT(23)SIZE(-5),MAP 180 ! 190 CFM=(CUBES/2)*RPM*(MAP/406.8)/1728! ; V_eff subsumed in MAP (?) 200 ! 210 ! CUBES/2 because it's a four cycle. 14.7 psi = 406.8 inches of water. 220 ! 1728 cubic inches = 1 cubic foot. 230 ! 240 FUEL_VOL=CFM*1728/8850! ; cubic inches of fuel per min 250 FUEL=FUEL_VOL*16.3871/60! ; fuel in ml/sec 260 HOUR=INT((FUEL*3.6)*10^1+.5)/10^1! ; fuel consumption per hour 270 ! 280 DISPLAY ERASE ALL,USING 130,INT(CFM*100+.5)/100;INT(FUEL*100+.5)/100;HOUR 290 PAUSE 300 ! 310 IMAGE " Inj: .#### sec .### cycle" 320 ! 330 DISPLAY ERASE ALL,"Orifice dia (in) : ";D;! ; injector nozzle diameter 340 ACCEPT AT(21)SIZE(-4),D 350 ! 360 CD=1! Coefficient of discharge. This has to do with flow through small 370 ! orifices at lower pressures than we are concerned with here. 380 W=45! ; fuel density in lbs/ft^3 390 DISPLAY ERASE ALL,"Fuel pressure (psi):";FUEL_P; 400 ACCEPT AT(22)SIZE(-5),FUEL_P! ; usually 30-32 psi 410 DELTA_P=(FUEL_P*27.6807)+MAP! ; convert to inches of H2O 420 A=PI*(D/2)^2! ; injector nozzle area 430 F=CD*A*(10.4*32.2*W*DELTA_P)^(1/2)! ; fuel flow in lbs/sec 440 F_VOL=F*628.64! ; vol in ml/sec 450 PULSE=FUEL/F_VOL! ; injector open time 460 TIME=2/(RPM/60)! ; 1 complete 4-cycle 470 ! 480 DISPLAY ERASE ALL,USING 310,INT(PULSE*10^4+.5)/10^4,INT(TIME*10^3+.5)/10^3 490 PAUSE 500 DISPLAY ERASE ALL," Vol eff:";INT((MAP*100/406)*10+.5)/10;"%" 510 PAUSE:GOTO 150 520 ! 530 ! The INT() functions in the DISPLAY statements round the values named 540 ! to N significant digits as follows: 550 ! 560 ! ROUNDED_VALUE=INT(VALUE*10^N+.5)/10^N 570 ! 580 ! Anything after a ! is a comment and does not need to be entered to RUN. 590 ! 600 DISPLAY ERASE ALL," Rpm:";RPM;:ACCEPT AT(7)SIZE(-6),RPM 601 IMAGE #####. 610 DISPLAY ERASE ALL," In duration @ .050 :";DUR;:ACCEPT AT(23)SIZE(-4),DUR 620 TIME=10^6/(RPM/60)! ; in microseconds 630 IN_OPEN=TIME*DUR/360 640 DISPLAY ERASE ALL," In open:";INT(IN_OPEN+.5);"uS"; 645 DISPLAY " 1";CHR$(223);":";INT((TIME/360)+.5);"uS" 660 PAUSE:GOTO 600 100 DIM P$(255)! DSM.PGM Hex entries require ">" prefix 110 P$(0)="; I/O Cntl Register" 120 P$(2)="; Timer Jam Latch" 130 P$(3)="; Timer Control" 140 P$(4)="; Keybrd Read Latch" 150 P$(6)="; Pg Ctl Reg(bit 0,1)" 160 P$(12)="; Keybrd write latch" 170 P$(13)="; E-Port DDR" 180 P$(14)="; I/O Bus Data Latch" 190 P$(15)="; BAV bit 0,HSK bit 1" 200 P$(16)="; Address Ctl" 210 P$(24)="; Clock Ctl Reg" 220 P$(255)="; Peripheral file Op" 230 DIM A$(255) 240 A$(0)="1NOP":A$(105)="1ADC B,A":A$(25)="2ADC Rn,A" 250 A$(57)="2ADC Rn,B":A$(73)="3ADC Rn,Rn":A$(41)="2ADC %n,A" 260 A$(89)="2ADC %n,B":A$(121)="3ADC %n,Rn":A$(104)="1ADD B,A" 270 A$(24)="2ADD Rn,A":A$(56)="2ADD Rn,B":A$(72)="3ADD Rn,Rn" 280 A$(40)="2ADD %n,A":A$(88)="2ADD %n,B":A$(120)="3ADD %n,Rn" 290 A$(99)="1AND B,A":A$(19)="2AND Rn,A":A$(51)="2AND Rn,B" 300 A$(67)="3AND Rn,Rn":A$(35)="2AND %n,A":A$(83)="2AND %n,B" 310 A$(115)="3AND %n,Rn":A$(131)="2ANDP A,Pn":A$(147)="2ANDP B,Rn" 320 A$(163)="3ANDP %n,Pn":A$(140)="3BR @n":A$(172)="3BR @n(B)" 330 A$(156)="2BR *Rn":A$(102)="2BTJO B,A,OFST":A$(22)="3BTJO Rn,A,OFST" 340 A$(54)="3BTJO Rn,B,OFST":A$(70)="4BTJO Rn,Rn,OFST":A$(38)="3BTJO %n,A,OFST" 350 A$(86)="3BTJO %n,B,OFST":A$(118)="4BTJO %n,Rn,OFST" 360 A$(134)="3BTJOP A,Pn,OFST":A$(150)="3BTJOP B,Pn,OFST" 370 A$(166)="4BTJOP %>n,Pn,OFST":A$(103)="2BTJZ B,A,OFST" 380 A$(23)="3BTJZ Rn,A,OFST":A$(55)="3BTJZ Rn,B,OFST":A$(71)="4BTJZ Rn,Rn,OFST" 390 A$(39)="3BTJZ %>n,A,OFST":A$(87)="3BTJZ %>n,B,OFST" 400 A$(119)="4BTJZ %>n,Rn,OFST":A$(135)="3BTJZP A,Pn,OFST" 410 A$(151)="3BTJZP B,Pn,OFST":A$(167)="4BTJZP %>n,Pn,OFST" 420 A$(142)="3CALL @n":A$(174)="3CALL @n(B)":A$(158)="2CALL *Rn" 430 A$(181)="1CLR A":A$(197)="1 CLR B":A$(213)="2CLR Rn" 440 A$(176)="1CLRC":A$(109)="1CMP B,A":A$(29)="2CMP Rn,A" 450 A$(61)="2CMP Rn,B":A$(77)="3CMP Rn,Rn":A$(45)="2CMP %n,A" 460 A$(93)="2CMP %n,B":A$(125)="3CMP %n,Rn":A$(141)="3CMPA @n" 470 A$(173)="3CMPA @n(B)":A$(157)="2CMPA *Rn":A$(110)="1DAC B,A" 480 A$(30)="2DAC Rn,A":A$(62)="2DAC Rn,B":A$(78)="3DAC Rn,Rn" 490 A$(46)="2DAC %>n,A":A$(94)="2DAC %>n,B":A$(126)="3DAC %>n,Rn" 500 A$(178)="1DEC A":A$(194)="1DEC B":A$(210)="2DEC Rn" 510 A$(187)="1DECD A":A$(203)="1DECD B":A$(219)="2DECD Rn" 520 A$(6)="1DINT":A$(186)="2DJNZ A,OFST":A$(202)="2DJNZ B,OFST" 530 A$(218)="3DJNZ Rn,OFST":A$(111)="1DSB B,A":A$(31)="2DSB Rn,A" 540 A$(63)="2DSB Rn,B":A$(79)="3DSB Rn,Rn":A$(47)="2DSB %>n,A" 550 A$(95)="2DSB %>n,B":A$(127)="3DSB %>n,Rn":A$(5)="1EINT" 560 A$(1)="1IDLE":A$(179)="1INC A":A$(195)="1INC B":A$(211)="2INC Rn" 570 A$(180)="1INV A":A$(196)="1INV B":A$(212)="2INV Rn" 580 A$(224)="2JMP OFST":A$(227)="2JC/JHS,OFST":A$(226)="2JZ/JEQ,OFST" 590 A$(231)="2JL/JNC OFST":A$(225)="2JN,OFST":A$(230)="2JNE/JNZ,OFST" 600 A$(228)="2JP,OFST":A$(229)="2JPZ,OFST":A$(138)="3LDA @n" 610 A$(170)="3LDA @n(B)":A$(154)="2LDA *Rn":A$(13)="1LDSP" 620 A$(192)="1MOV A,B":A$(208)="2MOV A,Rd":A$(98)="1MOV B,A" 630 A$(209)="2MOV B,Rd":A$(18)="2MOV Rn,A":A$(50)="2MOV Rn,B" 640 A$(66)="3MOV Rn,Rn":A$(34)="2MOV %>n,A":A$(82)="2MOV %>n,B" 650 A$(114)="3MOV %>n,Rn":A$(136)="4MOVD %>n,Rp":A$(168)="4MOVD %>n(B),Rp" 660 A$(152)="3MOVD Rp,Rp":A$(130)="2MOVP A,Pd":A$(146)="2MOVP B,Pd" 670 A$(162)="3MOVP %>n,Pd":A$(128)="2MOVP Pn,A":A$(145)="2MOVP Pn,B" 680 A$(108)="1MPY B,A":A$(28)="2MPY Rn,A":A$(60)="2MPY Rn,B" 690 A$(76)="3MPY Rn,Rn":A$(44)="2MPY %>n,A":A$(92)="2MPY %>n,B" 700 A$(124)="3MPY %>n,Rn":A$(0)="1NOP":A$(100)="1OR B,A" 710 A$(100)="1OR B,A":A$(20)="2OR Rn,A":A$(52)="2OR Rn,B" 720 A$(68)="3OR Rn,Rn":A$(36)="2OR %>n,A":A$(84)="2OR %>n,B" 730 A$(116)="3OR %>n,Rn":A$(132)="2ORP A,Pd":A$(148)="2ORP B,Pd" 740 A$(164)="3ORP %>n,Pd":A$(185)="1POP A":A$(201)="1POP B" 750 A$(217)="2POP Rd":A$(8)="1POP ST":A$(184)="1PUSH A" 760 A$(200)="1PUSH B":A$(216)="2PUSH Rn":A$(14)="1PUSH ST" 770 A$(11)="1RETI":A$(10)="1RETS":A$(190)="1RL A" 780 A$(206)="1RL B":A$(222)="2RL Rd":A$(191)="1RLC A" 790 A$(207)="1RLC B":A$(223)="2RLC Rn":A$(188)="1RR A" 800 A$(204)="1RR B":A$(220)="2RR Rd":A$(189)="1RRC A" 810 A$(205)="1RRC B":A$(221)="2RRC Rd":A$(107)="1SBB B,A" 820 A$(27)="2SBB Rn,A":A$(59)="2SBB Rn,B":A$(75)="3SBB Rn,Rn" 830 A$(43)="2SBB %>n,A":A$(91)="2SBB %>n,B":A$(123)="3SBB %>n,Rn" 840 A$(7)="1SETC":A$(139)="3STA @n":A$(171)="3STA @n(B)" 850 A$(155)="2STA *Rn":A$(9)="1STSP":A$(106)="1SUB B,A" 860 A$(26)="2SUB Rn,A":A$(58)="2SUB Rn,B":A$(74)="3SUB Rn,Rn" 870 A$(42)="2SUB %>n,A":A$(90)="2SUB %>n,B":A$(122)="3SUB %>n,Rn" 880 A$(183)="1SWAP A":A$(199)="1SWAP B":A$(215)="2SWAP Rn" 890 A$(232)="1TRAP 23":A$(233)="1TRAP 22":A$(234)="2TRAP 21" 900 A$(235)="2TRAP 20":A$(236)="1TRAP 19":A$(237)="1TRAP 18" 910 A$(238)="1TRAP 17":A$(239)="1TRAP 16":A$(240)="1TRAP 15" 920 A$(241)="1TRAP 14":A$(242)="1TRAP 13":A$(243)="1TRAP 12" 930 A$(244)="1TRAP 11":A$(245)="1TRAP 10":A$(246)="1TRAP 9" 940 A$(247)="2TRAP 8":A$(248)="1TRAP 7":A$(249)="1TRAP 6" 950 A$(250)="1TRAP 5":A$(251)="1TRAP 4":A$(252)="1TRAP 3" 960 A$(253)="1TRAP 2":A$(254)="1TRAP 1":A$(255)="1TRAP 0" 970 A$(176)="1TSTA":A$(193)="1TSTB":A$(182)="1XCHB A":A$(198)="1XCHB" 980 A$(214)="2XCHB Rn":A$(101)="1XOR B,A":A$(21)="2XOR Rn,A" 990 A$(53)="2XOR Rn,B":A$(69)="3XOR Rn,Rn":A$(37)="2XOR %>n,A" 1000 A$(85)="2XOR %>n,B":A$(117)="3XOR %>n,Rn":A$(133)="2XORP A,Pn" 1010 A$(149)="2XORP B,Pn":A$(165)="3XORP %>n,Pn" 1020 !-------------------------------------------------------------------------- 1030 OPEN #1,"101.DSM.FIL",OUTPUT 1040 OPEN #2,"45.",OUTPUT 1050 IMAGE #### >#### >## #################### ########################## 1060 INPUT "Start address: ";LO$ 1070 INPUT "End address: ";HI$ 1080 ! 1090 IF NUMERIC(LO$)THEN LO=VAL(LO$) ELSE CALL DEC((SEG$(LO$,2,LEN(LO$)-1)),LO) 1100 IF NUMERIC(HI$)THEN HI=VAL(HI$) ELSE CALL DEC((SEG$(HI$,2,LEN(HI$)-1)),HI) 1110 ! 1120 N=1 1130 FOR X=LO TO HI 1140 COM$="":JMP$="" 1150 CALL PEEK(X,B1,B2,B3,B4) 1160 ! 1170 CALL HEX((X),XADR$) 1180 CALL HEX((B1),OP$) 1190 ! 1200 IF A$(B1)=""THEN PRINT #1,USING 1050,N,XADR$,OP$,"INVALID OPCODE":GOTO 1640 1210 ! 1220 BYTES=VAL(SEG$(A$(B1),1,1)) 1230 ! 1240 IF OP$="83"OR OP$="93"OR OP$="A3"OR OP$="86"OR OP$="96"OR OP$="A6"THEN 1280 1250 IF OP$="87"OR OP$="97"OR OP$="A7"OR OP$="82"OR OP$="92"OR OP$="A2"THEN 1280 1260 IF OP$="80"OR OP$="91"OR OP$="84"OR OP$="94"OR OP$="A4"OR OP$="85"THEN 1280 1270 IF OP$="95"OR OP$="A5"THEN 1280 ELSE 1300 1280 CALL PFILE(P$(),(OP$),(BYTES),(B2),(B3),(B4),COM$) 1290 ! 1300 IF OP$="66"OR OP$="16"OR OP$="36"OR OP$="46"OR OP$="26"THEN 1370 1310 IF OP$="56"OR OP$="76"OR OP$="86"OR OP$="96"OR OP$="A6"THEN 1370 1320 IF OP$="67"OR OP$="17"OR OP$="37"OR OP$="47"OR OP$="27"THEN 1370 1330 IF OP$="57"OR OP$="77"OR OP$="87"OR OP$="97"OR OP$="A7"THEN 1370 1340 IF OP$="E0"OR OP$="E1"OR OP$="E2"OR OP$="E3"OR OP$="E4"THEN 1370 1350 IF OP$="E5"OR OP$="E6"OR OP$="E7"THEN 1370 ELSE 1400 1360 ! 1370 CALL JUMP((N),(BYTES),(B2),(B3),(B4),JMP$) 1380 IF COM$=""THEN COM$=JMP$:JMP$="" 1390 ! 1400 IF OP$="8E"THEN CALL SBR((B2),(B3),COM$) 1410 IF B1>231 AND B1<256 THEN CALL TRAP((B1),(B2),COM$) 1420 ! 1430 PRINT #1,USING 1050,N,XADR$,OP$,SEG$(A$(B1),2,LEN(A$(B1))-1),COM$ 1440 PRINT #2,USING 1050 ,N,XADR$,OP$,SEG$(A$(B1),2,LEN(A$(B1))-1),COM$:N=N+1 1450 IF BYTES=1 THEN 1640 ELSE X=X+1 1460 ! 1470 CALL HEX((X),XADR$) 1480 CALL HEX((B2),OP$) 1490 PRINT #1,USING 1050,N,XADR$,OP$,"",JMP$ 1500 PRINT #2,USING 1050,N,XADR$,OP$,"",JMP$:N=N+1 1510 IF BYTES=2 THEN 1640 ELSE X=X+1 1520 ! 1530 CALL HEX((X),XADR$) 1540 CALL HEX((B3),OP$) 1550 PRINT #1,USING 1050,N,XADR$,OP$ 1560 PRINT #2,USING 1050,N,XADR$,OP$:N=N+1 1570 IF BYTES=3 THEN 1640 ELSE X=X+1 1580 ! 1590 CALL HEX((X),XADR$) 1600 CALL HEX((B4),OP$) 1610 PRINT #1,USING 1050,N,XADR$,OP$ 1620 PRINT #2,USING 1050,N,XADR$,OP$:N=N+1 1630 ! 1640 IF EOF(1)THEN BREAK 1650 PRINT #1,"":PRINT #2,"" 1660 NEXT X 1670 !------------------------------------------------------------------------- 1680 SUB DEC(HX$,DEC) 1690 DATA A,B,C,D,E,F 1700 Y=LEN(HX$):G=0 1710 FOR X=1 TO Y 1720 X$(X)=SEG$(HX$,X,1) 1730 NEXT X 1740 FOR X=1 TO Y 1750 IF NOT NUMERIC(X$(X))THEN W(X)=ASC(X$(X))-55 ELSE W(X)=VAL(X$(X)) 1760 DEC=DEC+(W(X)*(16^(Y-X))) 1770 NEXT X 1780 SUBEND 1790 !------------------------------------------------------------------------- 1800 SUB HEX(Z,HX$)!Converts decimal entry to hex-Decimal entry passed by value 1810 DATA A,B,C,D,E,F 1820 HX$="" 1830 Z$=STR$(((Z/16)-INT(Z/16))*16):GOSUB 1890 1840 HX$=Z$&HX$ 1850 Z=INT(Z/16) 1860 IF Z>15 THEN 1830 ELSE Z$=STR$(Z):GOSUB 1890 1870 HX$=Z$&HX$ 1880 SUBEXIT 1890 RESTORE:FOR X=10 TO 15 1900 READ B$:IF X=VAL(Z$)THEN Z$=B$:RETURN 1910 NEXT X:RETURN 1920 SUBEND 1930 !------------------------------------------------------------------------- 1940 SUB PFILE(P$(),OP$,BYTES,B2,B3,B4,COM$) 1950 COM$="" 1960 ! 1970 IF BYTES=2 THEN COM$=P$(B2) 1980 IF BYTES=3 THEN COM$=P$(B3) 1990 IF BYTES=4 THEN COM$=P$(B3) 2000 IF COM$=""THEN COM$=P$(255):SUBEXIT 2010 SUBEND 2020 !------------------------------------------------------------------------- 2030 SUB JUMP(N,BYTES,B2,B3,B4,JMP$) 2040 IF BYTES=0 OR BYTES>4 THEN SUBEXIT 2050 IF BYTES=2 THEN JUMP=B2 2060 IF BYTES=3 THEN JUMP=B3 2070 IF BYTES=4 THEN JUMP=B4 2080 ! 2090 IF JUMP>128 THEN 2130 2100 N$=STR$(N+BYTES+JUMP) 2110 JMP$="; Ofst line # "&N$:SUBEXIT 2120 ! 2130 N$=STR$(N+BYTES-(256-JUMP)) 2140 JMP$="; Ofst line # "&N$ 2150 ! 2160 SUBEND 2170 !------------------------------------------------------------------------- 2180 SUB SBR(B2,B3,COM$) 2190 IF B2=240 AND B3=126 THEN COM$="CALL BATCHK":SUBEXIT 2200 IF B2=240 AND B3=132 THEN COM$="CALL CFI":SUBEXIT 2210 IF B2=240 AND B3=57 THEN COM$="CALL CLRARG":SUBEXIT 2220 IF B2=240 AND B3=42 THEN COM$="CALL CLRRES":SUBEXIT 2230 IF B2=240 AND B3=9 THEN COM$="CALL COPYFA":SUBEXIT 2240 IF B2=240 AND B3=102 THEN COM$="CALL COPYFM":SUBEXIT 2250 IF B2=240 AND B3=108 THEN COM$="CALL COPYFS":SUBEXIT 2260 IF B2=240 AND B3=105 THEN COM$="CALL COPYMF":SUBEXIT 2270 IF B2=240 AND B3=48 THEN COM$="CALL DIVZER":SUBEXIT 2280 IF B2=240 AND B3=24 THEN COM$="CALL FADD":SUBEXIT 2290 IF B2=240 AND B3=33 THEN COM$="CALL FDIV":SUBEXIT 2300 IF B2=240 AND B3=72 THEN COM$="CALL FINDLN":SUBEXIT 2310 IF B2=240 AND B3=21 THEN COM$="CALL FLTCMP":SUBEXIT 2320 IF B2=240 AND B3=30 THEN COM$="CALL FMUL":SUBEXIT 2330 IF B2=240 AND B3=27 THEN COM$="CALL FSUB":SUBEXIT 2340 IF B2=248 AND B3=75 THEN COM$="CALL IOS":SUBEXIT 2350 IF B2=240 AND B3=16 THEN COM$="CALL MOVDWN":SUBEXIT 2360 IF B2=240 AND B3=12 THEN COM$="CALL MOVUP":SUBEXIT 2370 IF B2=240 AND B3=39 THEN COM$="CALL NORMAL":SUBEXIT 2380 IF B2=240 AND B3=37 THEN COM$="CALL OFFCRS":SUBEXIT 2390 IF B2=240 AND B3=36 THEN COM$="CALL ONCRS":SUBEXIT 2400 IF B2=240 AND B3=51 THEN COM$="CALL OVFLOW":SUBEXIT 2410 IF B2=240 AND B3=54 THEN COM$="CALL POPARG":SUBEXIT 2420 IF B2=240 AND B3=120 THEN COM$="CALL PSHARG":SUBEXIT 2430 IF B2=240 AND B3=36 THEN COM$="CALL ROUND":SUBEXIT 2440 IF B2=240 AND B3=75 THEN COM$="CALL ROUND2":SUBEXIT 2450 IF B2=240 AND B3=60 THEN COM$="CALL STRCMP":SUBEXIT 2460 IF B2=240 AND B3=45 THEN COM$="CALL SWAPFA":SUBEXIT 2470 IF B2=240 AND B3=117 THEN COM$="CALL SWAPFM":SUBEXIT 2480 IF B2=240 AND B3=111 THEN COM$="CALL SWAPFS":SUBEXIT 2490 IF B2=240 AND B3=114 THEN COM$="CALL SWAPMM":SUBEXIT 2500 IF B2=240 AND B3=18 THEN COM$="CALL SYM":SUBEXIT 2510 IF B2=240 AND B3=18 THEN COM$="CALL SYM":SUBEXIT 2520 ! 2530 SUBEND 2540 !------------------------------------------------------------------------- 2550 SUB TRAP(B1,B2,COM$) 2560 IF B1=255 THEN COM$="Power up,Reset":SUBEXIT! tRAP 0 2570 IF B1=254 THEN COM$="INT1,Lo Battery":SUBEXIT!TRAP 1 2580 IF B1=253 THEN COM$="Cntr/Timer INT (soft trap)":SUBEXIT! TRAP 2 2590 IF B1=252 THEN COM$="INT3 (Keyboard)":SUBEXIT! TRAP 3 2600 IF B1=251 THEN COM$="BASIC pg trap (>DFFB)":SUBEXIT! TRAP 4 2610 IF B1=250 THEN COM$="BASIC pg(>DFF8)":SUBEXIT! TRAP 5 2620 IF B1=249 THEN COM$="BASIC pg(>DFF5)":SUBEXIT! TRAP 6 2630 IF B1=248 THEN COM$="BASIC pg(>DFF2)":SUBEXIT! TRAP 7 2640 IF B1=247 THEN COM$="ERROR Handler":SUBEXIT! TRAP 8 2650 IF B1=246 THEN COM$="BASIC pg(>DFEF)":SUBEXIT! TRAP 9 2660 IF B1=245 THEN COM$="BASIC pg(>DFEC)":SUBEXIT! TRAP 10 2670 IF B1=244 THEN COM$="A.L. bkpts":SUBEXIT! TRAP 11 2680 IF B1=243 THEN COM$="FP add":SUBEXIT! TRAP 12 2690 IF B1=242 THEN COM$="Not Used by TI74":SUBEXIT! TRAP 13 2700 IF B1=241 THEN COM$="BASIC pg (>DFE9)":SUBEXIT! TRAP 14 2710 IF B1=240 THEN COM$="Load FP arg":SUBEXIT! TRAP 15 2720 IF B1=239 THEN COM$="Clear FP Stack":SUBEXIT! TRAP 16 2730 IF B1=238 THEN COM$="BASIC pg (>DFE6)":SUBEXIT! TRAP 17 2740 IF B1=237 THEN COM$="Next BASIC pgm byte":SUBEXIT! TRAP 18 2750 IF B1=236 THEN COM$="BASIC pg1 (DFE3)":SUBEXIT! TRAP 19 2760 IF B1=235 THEN 2820! CALPAG TRAP 20 2770 IF B1=234 THEN COM$="BRPAG":SUBEXIT! TRAP 21 2780 IF B1=233 THEN COM$="FPPUSH":SUBEXIT! TRAP 22 2790 IF B1=232 THEN COM$="FPPOP":SUBEXIT! TRAP 23 2800 ! 2810 ! 2820 IF B2=0 THEN COM$="CALL WRTIND":SUBEXIT! TRAP 20 2830 IF B2=2 THEN COM$="CALL LINEIN":SUBEXIT 2840 IF B2=4 THEN COM$="CALL KEYIN":SUBEXIT 2850 IF B2=7 THEN COM$="CALL CRUNCH":SUBEXIT 2860 IF B2=8 THEN COM$="CALL CSN":SUBEXIT 2870 IF B2=9 THEN COM$="CALL PGEDIT":SUBEXIT 2880 IF B2=10 THEN COM$="CALL DSPBUF":SUBEXIT 2890 IF B2=11 THEN COM$="CALL CLRINP":SUBEXIT 2900 IF B2=14 THEN COM$="CALL UNCRS":SUBEXIT 2910 IF B2=16 THEN COM$="CALL NEWPRO":SUBEXIT 2920 IF B2=19 THEN COM$="CALL KSTAT":SUBEXIT 2930 IF B2=20 THEN COM$="CALL CSI":SUBEXIT 2940 IF B2=21 THEN COM$="CALL UNCRUNCH":SUBEXIT 2950 IF B2=23 THEN COM$="CALL CLRDSP":SUBEXIT 2960 IF B2=24 THEN COM$="CALL ONCRS":SUBEXIT 2970 IF B2=25 THEN COM$="CALL OFFCRS":SUBEXIT 2980 IF B2=26 THEN COM$="CALL SETCRS":SUBEXIT 2990 IF B2=27 THEN COM$="CALL TYPE":SUBEXIT 3000 IF B2=28 THEN COM$="CALL BUFIN":SUBEXIT 3010 IF B2=31 THEN COM$="CALL CHKBRK":SUBEXIT 3020 IF B2=32 THEN COM$="CALL DSPINT":SUBEXIT 3030 IF B2=64 THEN COM$="CALL MDISP":SUBEXIT 3040 IF B2=65 THEN COM$="CALL MNEW":SUBEXIT 3050 IF B2=70 THEN COM$="CALL SKIPF":SUBEXIT 3060 IF B2=74 THEN COM$="CALL STGNEW":SUBEXIT 3070 IF B2=75 THEN COM$="CALL STGDSP":SUBEXIT 3080 IF B2=76 THEN COM$="CALL STGCLR":SUBEXIT 3090 IF B2=77 THEN COM$="CALL CIF":SUBEXIT 3100 IF B2=78 THEN COM$="CALL CIS":SUBEXIT 3110 IF B2=79 THEN COM$="CALL STGCL2":SUBEXIT 3120 IF B2=80 THEN COM$="CALL BRKPT":SUBEXIT 3130 IF B2=81 THEN COM$="CALL PARSE":SUBEXIT 3140 IF B2=82 THEN COM$="CALL GETNMBR":SUBEXIT 3150 IF B2=85 THEN COM$="CALL GETSTGR":SUBEXIT 3160 IF B2=86 THEN COM$="CALL SMB":SUBEXIT 3170 IF B2=87 THEN COM$="CALL ASSIGN":SUBEXIT 3180 IF B2=88 THEN COM$="CALL GETADR":SUBEXIT 3190 IF B2=89 THEN COM$="CALL GRINT":SUBEXIT 3200 IF B2=90 THEN COM$="CALL CRTLST":SUBEXIT 3210 IF B2=95 THEN COM$="CALL SIN":SUBEXIT 3220 IF B2=96 THEN COM$="CALL COS":SUBEXIT 3230 IF B2=97 THEN COM$="CALL TAN":SUBEXIT 3240 IF B2=98 THEN COM$="CALL ATAN":SUBEXIT 3250 IF B2=99 THEN COM$="CALL ASIN":SUBEXIT 3260 IF B2=100 THEN COM$="CALL ACOS":SUBEXIT 3270 IF B2=101 THEN COM$="CALL SQR":SUBEXIT 3280 IF B2=102 THEN COM$="CALL EXP":SUBEXIT 3290 IF B2=103 THEN COM$="CALL LN":SUBEXIT 3300 IF B2=104 THEN COM$="CALL LOG":SUBEXIT 3310 IF B2=106 THEN COM$="CALL CFILNG":SUBEXIT 3320 IF B2=108 THEN COM$="CALL ASINH":SUBEXIT 3330 IF B2=108 THEN COM$="CALL ASINH":SUBEXIT 3340 IF B2=109 THEN COM$="CALL ACOSH":SUBEXIT 3350 IF B2=110 THEN COM$="CALL ATANH":SUBEXIT 3360 IF B2=111 THEN COM$="CALL SINH":SUBEXIT 3370 IF B2=112 THEN COM$="CALL COSH":SUBEXIT 3380 IF B2=113 THEN COM$="CALL TANH":SUBEXIT 3390 IF B2=138 THEN COM$="CALL CLSALL":SUBEXIT 3400 IF B2=141 THEN COM$="CALL FRE":SUBEXIT 3410 IF B2=143 THEN COM$="CALL OPEN":SUBEXIT 3420 IF B2=147 THEN COM$="CALL CLSTMP":SUBEXIT 3430 IF B2=150 THEN COM$="CALL CNS":SUBEXIT 3440 IF B2=151 THEN COM$="CALL STKCLS":SUBEXIT 3450 IF B2=198 THEN COM$="CALL RSTRND":SUBEXIT 3460 IF B2=200 THEN COM$="CALL RND":SUBEXIT 3470 IF B2=201 THEN COM$="CALL RNDBYT":SUBEXIT 3480 ! TRAP 21 3490 SUBEND 1000 CALL PRY 1010 CALL HEX 1020 SUB PRY 1030 IMAGE ##### ### ### ### ### ### ### ### ### ##### 1040 OPEN #1,"45.",OUTPUT 1050 INPUT "ADDRESS: ";X 1060 CALL PEEK(X,A,B,C,D,E,F,G,H) 1070 PRINT #1,USING 1030,X,A,B,C,D,E,F,G,H,X+7 1080 CALL KEY(J,K) 1090 IF K<>0 AND J=232 THEN X=X+8:GOTO 1060 1100 IF K<>0 AND J=233 THEN X=X-8:GOTO 1060 1110 IF K<>0 AND J=254 THEN CLOSE #1:GOTO 1040 1120 GOTO 1080 1130 SUBEND 1135 ! 1140 SUB HEX 1150 ON ERROR 1580 1160 DATA A,B,C,D,E,F 1170 INPUT "HEX~DEC: ";Z$ 1180 IF Z$=""THEN 1280 1190 Y=LEN(Z$):G=0 1200 FOR X=1 TO Y 1210 X$(X)=SEG$(Z$,X,1) 1220 NEXT X 1230 FOR X=1 TO Y 1240 IF NOT NUMERIC(X$(X))THEN W(X)=ASC(X$(X))-55 ELSE W(X)=VAL(X$(X)) 1250 G=G+(W(X)*(16^(Y-X))) 1260 NEXT X: 1270 PRINT TAB(2);Z$;" ";G:PAUSE:GOTO 1170 1275 ! 1280 INPUT "DEC~HEX: ";G$:IF G$=""THEN 1390 1290 A$="":Z=VAL(G$) 1300 Z$=STR$(((Z/16)-INT(Z/16))*16):GOSUB 1360 1310 A$=Z$&A$ 1320 Z=INT(Z/16) 1330 IF Z>15 THEN 1300 ELSE Z$=STR$(Z):GOSUB 1360 1340 A$=Z$&A$ 1350 PRINT TAB(2);G$;" ";A$:PAUSE:GOTO 1280 1360 RESTORE:FOR X=10 TO 15 1370 READ B$:IF X=VAL(Z$)THEN Z$=B$:RETURN 1380 NEXT X:RETURN 1385 ! 1390 INPUT "DEC~BINARY: ";F$:IF F$=""THEN 1450 1400 F=VAL(F$):J$="" 1410 G=F/2:IF G=.5 THEN J$="1"&J$:GOTO 1440 1420 H=INT(G):I=(G-H)*2:I$=STR$(I):J$=I$&J$ 1430 IF H>0 THEN F=H:GOTO 1410 1440 PRINT TAB(2);F$;" ";J$:PAUSE:GOTO 1390 1445 ! 1450 INPUT "BINARY~DEC: ";K$:IF K$=""THEN 1530 1460 X=LEN(K$):N=0 1470 FOR Y=1 TO X 1480 L$=SEG$(K$,Y,1):L=VAL(L$) 1490 M=L*2^(X-Y) 1500 N=M+N 1510 NEXT Y 1520 PRINT TAB(2);K$;" ";N:PAUSE:GOTO 1450 1525 ! 1530 INPUT "DEC~16-bit HEX ADDR: ";DH$:IF DH$=""THEN 1550 ELSE DH=VAL(DH$) 1540 HI=INT(DH/256):LO=DH-(HI*256):PRINT DH;TAB(9);HI;LO:PAUSE:GOTO 1530 1545 ! 1550 INPUT "16-bit addr~Dec,H]i byte: ";DE$:IF DE$=""THEN 1170 ELSE DE=VAL(DE$) 1560 INPUT "16-bit addr~Dec,L]o byte: ";DF 1570 DG=(DE*256)+DF:DISPLAY ERASE ALL,DE$;DF;DG:PAUSE:GOTO 1550 1575 ! 1580 CALL ERR(E0,E1,E2,E3) 1590 IF E0=12 AND E3=270 THEN ON ERROR 1580:RETURN NEXT 1600 IF E0=12 AND E3=290 THEN ON ERROR 1580:RETURN NEXT 1610 PRINT "UNEXPECTED ERROR ";E0;E1;E2;E3:PAUSE 1620 SUBEND * Tint = .000004 * (PreScaler + 1) x (Reload + 1) PASS equ R58 COUNT equ R59 HIB equ R60 LOB equ R61 ENTRY cmp %192,R77 ; Check for "(" jnz ERR trap 18 ; GETCHR - Pgm character in R0 & >4D, * ; ADR of next pgm character in >4E,4F push A trap 18 ; GETCHR cmp %175,A ; Check for ")" jnz ERR trap 18 ; GETCHR cmp %0,A ; Check for EOS token jnz ERR pop R77 call @>F012 ; SYM - uses A, B, >75 - >7C jz ERR1 decd R122 ; Address of token value ptr R121,122 push R121 push R122 jmp MAIN ERR trap 8 ; ERROR byte 229 ERR1 trap 8 ; Variable not defined byte 17 INTSVC reti MAIN call @PC ; detect Pgm Counter PC pop B pop A sub %4,B ; adr of INTSVC sbb %0,A sta @>2006 mov B,A sta @>2007 call @RESET ; reset DS1820 mov %>CC,PASS ; SKIP ROM command call @WRITE mov %>44,PASS ; CONVERT command call @WRITE CHECK movp %>01,P15 ; returns 1 when conversion movp %>00,P15 ; complete movp P15,A inv A and %1,A mov %>13,B ; # of passes thru TLOOP CLOOP djnz B,CLOOP cmp %0,A jz CHECK SKIP call @RESET mov %>CC,PASS ; SKIP ROM command call @WRITE mov %>BE,PASS ; READ SCRATCHPAD command call @WRITE clr HIB ; read scratch pad byte 0 clr LOB mov %>08,COUNT BYTE0 movp %>01,P15 movp %>00,P15 movp P15,A inv A and %1,A or A,LOB rr LOB mov %>19,B WAIT1 djnz B,WAIT1 djnz COUNT,BYTE0 mov %>08,COUNT ; read scratchpad byte 1 BYTE1 movp %>01,P15 movp %>00,P15 movp P15,A inv A and %1,A or A,HIB rr HIB mov %>19,B WAIT2 djnz B,WAIT2 djnz COUNT,BYTE1 * Convert 16-bit value in >3C,3D to floating point mov R60,R117 mov R61,R118 trap 20 ; CIF byte 77 ; FP value in >75 - >7C * ASSIGN FP value to BASIC variable clr R101 ; src adr mov %>7C,R102 pop R104 ; destination adr pop R103 clr R105 ; # of bytes moved mov %>08,R106 call @>F00C ; MOVUP rets ; return to BASIC WRITE mov %>08,COUNT ; bit counter NEXT mov PASS,A ; R58 used to pass commands and %1,A ; mask off bits 1-7 cmp %1,A jz ONE ZERO movp %>01,P15 ; pull HSK low for 60 us movp %>84,P0 ; enable INT2 movp %>0E,P2 ; timer preload for 60 us delay eint movp %>80,P3 ; start timer idle dint movp %>00,P15 jmp BITS ONE movp %>01,P15 ; toggle HSK for 1 us min movp %>00,P15 movp %>84,P0 ; enable INT2 movp %>0E,P2 ; timer preload for 60 us delay eint movp %>80,P3 ; start timer idle dint BITS rr PASS djnz COUNT,NEXT rets * Reset DS1820, needs a time-out provision RESET movp %>84,P0 ; enable INT2 movp %>7C,P2 ; timer preloads for 500 us delay eint movp %>80,P3 ; start timer movp %>01,P15 ; i/o low idle dint movp %>00,P3 movp %>00,P15 ACK0 btjzp %>01,P15,ACK0 ; falls thru when 1820 pulls i/o low ACK1 btjop %>01,P15,ACK1 ; waits for i/o to be released rets