From 96d94816bb6e63790b0dd5f15f11c3444f5b9918 Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Thu, 23 Nov 2017 20:51:30 -0800 Subject: [PATCH] Add elems functions to rpncalc --- src/inc/fpu.plh | 3 +++ src/libsrc/fpu.pla | 22 +++++++++++++++++++++- src/samplesrc/rpncalc.pla | 23 ++++++++++++++++++++++- 3 files changed, 46 insertions(+), 2 deletions(-) diff --git a/src/inc/fpu.plh b/src/inc/fpu.plh index a84d28f..51dca1f 100644 --- a/src/inc/fpu.plh +++ b/src/inc/fpu.plh @@ -51,6 +51,9 @@ struc t_fpu word round word sqrt word square + word cos + word sin + word tan end word fpu end diff --git a/src/libsrc/fpu.pla b/src/libsrc/fpu.pla index 7af06ac..99f1b14 100644 --- a/src/libsrc/fpu.pla +++ b/src/libsrc/fpu.pla @@ -15,6 +15,7 @@ predef storInt, storSgl, storDbl, storExt, storStr predef shiftUp, shiftDown, rotateUp, rotateDown, dup, swap, clear predef add, sub, mul, div, rem predef neg, abs, trunc, round, sqrt, square +predef cos, sin, tan export word fpu = @reset, @constPi, @constE word = @pushInt, @pushSgl, @pushDbl, @pushExt, @pushStr word = @pullInt, @pullSgl, @pullDbl, @pullExt, @pullStr @@ -23,6 +24,7 @@ word = @storInt, @storSgl, @storDbl, @storExt, @storStr word = @shiftUp, @shiftDown, @rotateUp, @rotateDown, @dup, @swap, @clear word = @add, @sub, @mul, @div, @rem word = @neg, @abs, @trunc, @round, @sqrt, @square +word = @cos, @sin, @tan // // Useful constants // @@ -237,7 +239,25 @@ end def square sane:zpSave() sane:fpOp2(FFEXT|FOMUL, stackRegs[0], stackRegs[0]) - sane:zpRestore() + return sane:zpRestore() +end +// +// Elems operations +// +def cos + sane:zpSave() + sane:elOp1(FFEXT|FOCOSX, stackRegs[0]) + return sane:zpRestore() +end +def sin + sane:zpSave() + sane:elOp1(FFEXT|FOSINX, stackRegs[0]) + return sane:zpRestore() +end +def tan + sane:zpSave() + sane:elOp1(FFEXT|FOTANX, stackRegs[0]) + return sane:zpRestore() end // // Push useful constants diff --git a/src/samplesrc/rpncalc.pla b/src/samplesrc/rpncalc.pla index 3fae208..f621701 100644 --- a/src/samplesrc/rpncalc.pla +++ b/src/samplesrc/rpncalc.pla @@ -25,7 +25,7 @@ end predef delKey#0, cmdKey#0, dropKey#0 predef digitKey#0, pointKey#0, opKey#0 predef enterKey#0, chsKey#0, memKey#0 -predef sqrtKey#0, absKey#0 +predef elemsKey#0 // // Current input // @@ -89,6 +89,12 @@ byte[t_keypad] = 'R', 3, 20, "[SQ(R)]" word = @opKey byte[t_keypad] = '^', 11, 20, "[X(^)2]" word = @opKey +byte[t_keypad] = 'C', 22, 14, "[(C)OS]" +word = @elemsKey +byte[t_keypad] = 'S', 30, 14, "[(S)IN]" +word = @elemsKey +byte[t_keypad] = 'T', 22, 16, "[(T)AN]" +word = @elemsKey byte = 0 // // Utility routines @@ -330,6 +336,21 @@ def memKey(pkey)#0 fin fin end +def elemsKey(pkey)#0 + updateInput + when ^pkey + is 'C' + fpu:cos() + break + is 'S' + fpu:sin() + break + is 'T' + fpu:tan() + break + wend + showStack +end // // Command line handler //