_TITLE "TI-58C by rfrost@mail.com"
COMMON SHARED y#
, treg#
, ShiftFlag
, InvFlag
, AngMode$
, IsError
psize = 99: msize = 99
DIM SHARED MemReg#
(msize
), ProgStep
(psize
), pat
(255, 13), garr
(999) DIM SHARED k$
(100), kn
(100), bx1
(50), by1
(50), bx2
(50), by2
(50) Init
Mouse
Keyboard
ProcessKey
IF Running
AND Prog
= 5 THEN Num#
= Num#
+ 1: NumDisp
card:
DATA "DOW, DAYS BETWEEN DATES",ML
-20 DATA (MMDD.YYYY
),"","","","" DATA DATE1
,DATE2
,#Days
,D
>DOW
,""
' key key color keycode keycode
Keys:
DATA "GTO","Pause",0,61,66
DATA "RST","St flg",0,81,86 DATA "1","If flg",15,1,87
DATA "+/-","Prt",15,94,98
Logo:
Prog:
black = 0
redi = 1
redd = 2
yellow = 6
white = 10
PALETTE i
, 65536 * 20 + 256 * 30 + 40 ' yellow PALETTE i
, 65536 * 15 + 256 * 15 + 63 ' red intense PALETTE i
, 65536 * 5 + 256 * 5 + 13 ' red dim PALETTE i
, 65536 * 35 + 256 * 35 + 35 ' white
ColorSet
LINE (177, 4)-(461, 475), white
, B
' full machine LINE (183, 30)-(456, 88), white
, B
' number window LINE (183, 88)-(456, 136), white
, B
' card window LINE (183, 104)-(456, 104), yellow
' card window LINE (183, 119)-(456, 119), yellow
' card window
LINE (183, 136)-(456, 470), yellow
, B
' button window LINE (185, 138)-(454, 468), yellow
, B
' button window PAINT (184, 140), yellow
, yellow
bx = 190: x = bx
by = 10: y = by
x = x + 1
x = bx: y = y + 1
ShowText 225, 32, "Texas Instruments", black
mkey$ = "xxx"
Learn
NumDisp
READ Card1$: ShowText
206, 110, Card1$
, -1 READ Card2$: ShowText
426, 110, Card2$
, -1 x = (col - 1) * 54 + 208
y = (row - 1) * 16 + 140
z = 31
LINE (x
+ z
, 119)-(x
+ z
, 136), yellow
LINE (x
+ z
, 104)-(x
+ z
, 136), yellow
ShowText x, y - 14, Text$, -1
kn = 0
kn = kn + 1
READ k$
(kn
), k$
(kn
+ 50), kolor
, kn
(kn
), kn
(kn
+ 50) IF kolor
= 6 THEN kolor
= yellow
IF kolor
= 15 THEN kolor
= white
IF k$
(kn
+ 50) = "PR" THEN k$
(kn
+ 50) = "P" + CHR$(26) + "R" x = (col - 1) * 54 + 208
y = (row - 1) * 34 + 180
ShowText x, y - 15, k$(kn + 50), -1
LINE (x
- 13, y
- 21)-(x
+ 21, y
- 7), white
, B
LINE (x
- 13, y
- 21)-(x
+ 21, y
- 7), kolor
, BF
bx1(kn) = x - 13: bx2(kn) = x + 21
by1(kn) = y - 21: by2(kn) = y - 7
ShowText x, y, k$(kn), kolor
kn = kn + 1
READ k$
(kn
), k$
(kn
+ 50), kolor
, kn
(kn
), kn
(kn
+ 50) ShowText 311, 471, "TI Programmable 58C", -1
true = -1
false = 0
noise = true
AngMode$ = "D"
minx = 196: maxx = 444
miny = 161: maxy = 444
msx = 334: msy = 234
DrawCalc
psize = 99
GetProg:
ProgStep(ProgPos) = ProgStep
ProgPos = ProgPos + 1
WriteProg
ProgPos = 0
INPUT #1, MemReg$
, memval$
MemReg#
(VAL(MemReg$
)) = VAL(memval$
) ProgStep
(ProgPos
) = VAL(pcode$
) ProgPos = ProgPos + 1
ProgPos = 0
dp& = 1
up = 72: down = 80: left = 75: right = 77
i$ = mkey$
mkey$ = ""
FOR t
= ProgPos
TO psize
- 1 ProgStep(t) = ProgStep(t + 1)
ProgStep(psize) = 0
mkey$ = ""
ProgStep(t) = ProgStep(t - 1)
ProgStep(ProgPos) = 0
mkey$ = ""
ProgStep(ProgPos) = kn(t)
ProgPos = ProgPos + 1
ProgPos = psize
LearnFlag = false
IF mkey$
> "" THEN PlotNum Text$
mkey$ = ""
MemReg#(MemReg) = Num#
Num# = MemReg#(MemReg)
MemReg#(MemReg) = MemReg#(MemReg) + Num#
SWAP MemReg#
(MemReg
), Num#
MemReg#(MemReg) = MemReg#(MemReg) * Num#
MemOp$ = ""
NumDisp
OperationPending = true
msx = mx: msy = my
hitx
= (mx
> bx1
(t
)) AND (mx
< bx2
(t
)) hity
= (my
> by1
(t
)) AND (my
< by2
(t
)) GET (bx1
(t
), by1
(t
))-(bx2
(t
), by2
(t
)), garr
() LINE (bx1
(t
), by1
(t
))-(bx2
(t
), by2
(t
)), 15, B
IF lft
OR rgt
THEN mkey$
= k$
(t
- ShiftFlag
* 50) ShiftFlag = 0
IF mkey$
= "BST" THEN ProgPos
= ProgPos
- 1 - (ProgPos
= 0): mkey$
= "xxx" ProgPos = ProgPos + 1
ProgPos = psize
mkey$ = "LRN"
mkey$ = "xxx"
IF mkey$
= "LRN" THEN LearnFlag
= NOT (LearnFlag
): mkey$
= " " IF mkey$
= "RST" THEN ProgPos
= 0: mkey$
= "" IF mkey$
= "GTO" THEN GetNum
= 3: mkey$
= "" IF mkey$
= "R/S" THEN Running
= NOT (Running
): OperationPending
= true
IF mkey$
= "E" THEN Prog
= 5: Running
= true
IF mkey$
= "2nd" THEN ShiftFlag
= true
IF mkey$
= "INV" THEN InvFlag
= true
IsError = true
InvFlag = false
Num#
= LOG(Num#
) / LOG(10): NoPend
IsError = true
InvFlag = false
IF mkey$
= "CE" THEN Num#
= 0: ShiftFlag
= false: InvFlag
= false
IF mkey$
= "xý" THEN Num#
= Num#
* Num#: NoPend
IF INSTR("STO RCL SUM Exc Prd", mkey$
) > 0 THEN MemOp$
= mkey$: GetNum
= 2 IF mkey$
= "ûx" THEN Num#
= SQR(Num#
): NoPend
IF mkey$
= "1/x" THEN Num#
= 1 / Num#: NoPend
IF mkey$
= "Int" THEN Num#
= FIX(Num#
): NoPend
MemReg#(MemReg) = 0
y# = Num#
op$ = "^"
OperationPending = true
IF mkey$
= "³x³" THEN Num#
= ABS(Num#
): NoPend
IF mkey$
= "Deg" THEN AngMode$
= "D": NoPend
IF mkey$
= "Rad" THEN AngMode$
= "R": NoPend
IF mkey$
= "Grad" THEN AngMode$
= "Grad": NoPend
IF mkey$
= "ã" THEN Num#
= pi#: NoPend
IF mkey$
= "+/-" THEN Num#
= -(Num#
): NoPend
mkey$ = "="
InvFlag = false
ShiftFlag = false
expo = 0
ddp = 0
Num$ = " " + Num$
tnum# = Num#
tnum# = tnum# * 10
expo = expo + 1
tnum# = Num#
tnum# = tnum# / 10
expo = expo + 1
woof:
IF expo
> 99 THEN IsError
= true
PlotNum Text$
LINE (184, 31)-(455, 87), black
, BF
' erase number window LINE (183, 30)-(456, 88), white
, B
' number window
dx = 196 + i * 18
dy = 48
LINE (dx
, dy
)-(dx
+ 7, dy
), redi
, , pat
(a
, byte
) * 128 dy = dy + 2
dx = 188 + ddp * 18
dy = 65
LINE (dx
, dy
)-(dx
+ 1, dy
+ 1), redi
, BF
Num# = y# + Num#
Num# = y# - Num#
Num# = y# * Num#
Num# = y# * Num#
Num# = y# / Num#
Num# = y# / Num#
Num# = y# ^ Num#
y# = 0
op$ = ""
GetNum$ = GetNum$ + i$
GetNum = 0
MemOps
IF NewPos
<= psize
THEN ProgPos
= NewPos
GetNum$ = ""
Num# = 0
dp& = 1
OperationPending = false
Num#
= Num#
+ VAL(i$
) / dp&
dp& = dp& * 10
IF Num#
< 1000000000 THEN Num#
= Num#
* 10 + VAL(i$
)
tdp& = dp& \ 10
tnum& = Num# * tdp&
Num# = tnum& / tdp&
dp& = dp& \ 10
Num# = Num# \ 10
IsError = false
ShiftFlag = false
InvFlag = false
OperationPending = false
MemOp$ = ""
op$ = ""
y# = 0
Num# = 0
dp& = 1
IF op$
<> "" THEN ProcessEquals
op$ = i$
y# = Num#
OperationPending = true
ProcessEquals
OperationPending = true
y# = 0
NumDisp
IF AngMode$
= "G" THEN IsError
= true
IF mkey$
= "sin" THEN IsError
= true
IF mkey$
= "cos" THEN IsError
= true
InvFlag = false
IF AngMode$
= "D" THEN Num#
= Num#
* ator#
mkey$ = "="
SUB ShowText
(x
, y
, Text$
, kolor
) xb = -16 - (lt = 1) * 16 - (lt = 2) * 12 - (lt = 3) * 7 - (lt = 4) * 4
yb = -8
IF Text$
= "." THEN yb
= -12: xb
= xb
- 1 ty
= yb
+ (y
- 12) + byte
+ ((Text$
= "yx") AND (i
= 2)) * 2 tx = xb + x + (i - 1) * 8
co = yellow
co = white
co = black
LINE (tx
, ty
)-(tx
+ 7, ty
), co
, , pat
(a
, byte
) * 128
IF (Text$
= "x") AND (kolor
= -1) THEN ' x bar LINE (x
+ xb
, y
- 20)-(x
+ xb
+ 8, y
- 20), yellow
IF Text$
= "ûx" THEN ' square root LINE (x
+ xb
, y
- 20)-(x
+ xb
+ 8, y
- 20), black
LINE (x
+ xb
+ 5, y
- 19)-(x
+ xb
+ 15, y
- 19), white
LINE (x
+ xb
, y
- 20)-(x
+ xb
+ 25, y
- 20), black
LINE (x
+ xb
, y
- 19)-(x
+ xb
+ 25, y
- 19), black
LINE (x
+ xb
, y
- 7)-(x
+ xb
+ 25, y
- 7), black
FOR t
= 0 TO psize
' program palph$ = "0"
palph$ = k$(i)
PRINT #1, pstep$;
","; pcode$;
","; palph$
FOR t
= 0 TO msize
' memory pstep$ = "M"
PRINT #1, pstep$;
","; pcode$;
","; palph$