avatar_Prodatron

"Excel" for the CPC - SYMCALC spreadsheet application

Started by Prodatron, 19:23, 25 May 24

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

zhulien

i can envisage an A-Rexx (Amstrad Rexx) port one day in Symbos.

VincentGR

Quote from: zhulien on 07:52, 05 June 24i can envisage an A-Rexx (Amstrad Rexx) port one day in Symbos.
AmsRexx or SymRexx would be better cause Arexx is for the Amiga  ;D

Prodatron

Here is a speed comparison between SymCalc and Multiplan:



In this comparison they all do exactly the same recalculation: Around 110-130 cells are all connected to each other with the formula x^1.5 and dependant as a chain from one origin cell. When changing the origin cell, all other will be recalculated automatically.

Results:

#4: Amstrad CPC, 8bit, 4MHz (CP/M, Multiplan): 49.7 seconds
#3: Spectrum +3, 8bit, 4MHz (CP/M, Multiplan): 43.6 seconds
#2: IBM XT comp., 16bit 4,8MHz (MS-DOS, Multiplan): 7.7 seconds
#1: Amstrad CPC, 8bit, 4MHz (SymbOS, SymCalc): 6.7 seconds

The comparison may not be 100% correct. In SymCalc a total of 109 cells are recalculated (11*10-1), while in Multiplan it seem to be up to 132 (19*7-1), but some (around 21) show an overflow, so maybe at the end it is about the same.
Anyway the differences between the same 8bit machine is crazy, and SymCalc still beats the 16bit XT PC (however running at only 4,xMHz it seems to be quite fast for an 8088).

You will also recognize the differences in updating the sheet during the recalculation. While Multiplan seems to go through every single cell, SymCalc is doing the whole recalculation in the background and then refreshes the whole part of the screen with the changes in one step. This is done, when the amount of updated cells exceeds a limit of about 10, otherwise it would do it one by one as well.

GRAPHICAL Z80 MULTITASKING OPERATING SYSTEM

Maniac

Simply astounding! I keep telling my team at work that innovation comes from limiting factors and restrictions. This is the very definition of this!

McArti0

@Prodatron 

Is it possible to enable CPM virtual with Multiplan and SymCalc with an expansion of 256kB or 512kB RAM?

How much memory does SymCalc take with one Sheet?
CPC 6128, Whole 6128 and Only 6128, with .....
NewPAL v3 for use all 128kB RAM by CRTC as VRAM
TYPICAL :) TV Funai 22FL532/10 with VGA-RGB-in.

HAL6128

Do you know why there are timing differences between the CPC and the Spectrum? Aren't they technically similar?

Impressive result to SymCalc by the way.
...proudly supported Schnapps Demo, Pentomino and NQ-Music-Disc with GFX

andycadley

Quote from: HAL6128 on 22:27, 11 June 24Do you know why there are timing differences between the CPC and the Spectrum? Aren't they technically similar?

Impressive result to SymCalc by the way.
The spectrum display is faster to write to. And, if you can keep everything in uncontended RAM, it runs faster than the CPC too (where all RAM has some degree of contention).

Prodatron

Quote from: McArti0 on 21:48, 11 June 24@Prodatron

Is it possible to enable CPM virtual with Multiplan and SymCalc with an expansion of 256kB or 512kB RAM?

How much memory does SymCalc take with one Sheet?
Multiplan in SymbOS under CP\/M would require around 128K (64K TPA + CP\/M + SymShell).
SymCalc is currently using around 60K for 1024 cells. As some things are still missing, I expect the final size for one single sheet with up to 2000 cells at around 100K. I am planning to add multi-sheet support (up to 4) in one document, then of course it will take more, if they are all full of data.
So if you want to run both spreadsheet applications at the same time in SymbOS you probably need a 6128 with a 256K ram expansion or more.
Maybe it's a fun idea, and I should try this :)

GRAPHICAL Z80 MULTITASKING OPERATING SYSTEM

McArti0

And have You thought about swapfile in SymbOS?  When changing RAM banks, you could check the flag to see if the memory is occupied and then save and load another bank.  xls 256x65536 cells
CPC 6128, Whole 6128 and Only 6128, with .....
NewPAL v3 for use all 128kB RAM by CRTC as VRAM
TYPICAL :) TV Funai 22FL532/10 with VGA-RGB-in.

Prodatron

Quote from: McArti0 on 12:06, 12 June 24And have You thought about swapfile in SymbOS?  When changing RAM banks, you could check the flag to see if the memory is occupied and then save and load another bank.  xls 256x65536 cells
That will probably be hard to implement. Let's think about it...

- all processes in one 64K bank would have to be in sleep mode, so that the bank can be swapped to disc; to optimize this, an application should first tell the system, if it is usually sleeping, when the user is not using it; so the system could try to bundle such apps in the same banks
- you can't swap a single process/application to disc, as it is relocated once after loading, and can't be relocated again when it was already running
- a far-address in SymbOS is 20bit, 4bit are used for the 64K bank number. If you would swap one 64K bank to disc, fill it with other stuff, then another bank gets free, and you load the old 64K bank from disc there again, all far-addresses to this bank would be wrong; so the kernel would have to work with physical and virtual bank numbers and translate them, when handling far-addresses
- applications can use a secondary ram bank for storing data or executing code; the system has to know, that they are connected; this might be a show-stopper

It looks interesting from an engineering aspect, but no idea if it will be possible and requires a lot of additional work. Today RAM isn't an issue, most of the time you can get a ram expansion somewhere, so I don't think that makes sense.


Quote from: McArti0 on 12:06, 12 June 24xls 256x65536 cells
Today even 16384 x 1048576 cells (17 billion in total)  :o I am afraid, that this is too much for an 8bit machine :D

GRAPHICAL Z80 MULTITASKING OPERATING SYSTEM

zhulien

maybe you can make a physical release of the latest symbos with symcalc and a printed manual? add me to the list.

m_dr_m

@Prodatron  I wish I were as excellent and productive as you. What is your secret? Legit question! I want to improve myself.

Prodatron

Quote from: m_dr_m on 16:13, 14 June 24@Prodatron  I wish I were as excellent and productive as you. What is your secret? Legit question! I want to improve myself.

@m_dr_m , thanks for these nice words! Well, tbh, no idea, I just love to code in Z80. You know, this little thing is just so cool, sometimes I like to spend most of my free time for this :)

GRAPHICAL Z80 MULTITASKING OPERATING SYSTEM

Prodatron

Formulas with functions, including those with range references have been implemented as well as copy & paste of cell ranges.

An alpha release of SymCalc is available now:

http://symbos.org/download/preview/prv240617-symcalc.zip
A readme (symcalc.txt) and some example spreadsheet files (*.SCS) are included.

SymCalc requires the last version of SymbOS 4.0, which can be downloaded here:
http://symbos.org/download/preview/prv240617-symcpc.zip
(just copy "sym." and "symbos.bin" to your existing installation and RUN"SYM." )

Here is a list of the features, which are already implemented.
At the bottom of the list you will also find known bugs and planned features for the final release.


S y m C a l c   0.1_240617 ALPHA
SPREADSHEET APPLICATION FOR SYMBOS
-------------------------------------------------------------------------------

Features

- cell types
    - text cells
    - numeric cells
    - formulas with numeric results

- cell formatting
    - alignment
        - "General": left for text, right for numeric values
        - left
        - right
        - centered
    - font style
        - normal
        - bold
        - italic
    - fixed decimal places (optional)
    - 1000 separator (optional)
    - number format
        - float
        - scientific
        - percentage
        - boolean
        - binary
        - hexadecimal
    - pen colour, background colour

- cell sizes
    - width and height can be modified for each column and row
    - both by context menu (right click row/column bar) or main menu (see
      format -> column/row -> width/height)
    - multiple columns and rows can be resized when selecting a range of
      columns or rows

- cell range selection
    - by keyboard (using cursor and shift) or mouse
    - select a whole column by left clicking on column bar; select multiple by
      holding shift
    - same for selecting rows

- copy & paste
    - copy single cell or cell range with keyboard or mouse right-click
    - paste into cell range
    - relative cell references will be relocated during pasting
    - extend and repeat cell ranges when pasting to a destination with a
      different range

- formulas
    - start a formula with "=" at the beginning
    - use e.g. A1 for single cell reference
    - use e.g. A1:B4 for a cell range reference (can only be used in list
      functions; see below)
    - use e.g. $A1, A$1 or $A$1 for (partially) absolute references, which
      won't be relocated during pasting
    - use +, -, *, /, ^ and brackets for calculations; conventional order of
      operations is followed
    - automatic recalculation of all connected cells without limitations
    - several functions are available, see below
    - function parameters are separated using the semicolon ";"
    - lists may contain multiple values, single cell references or cell range
      references;
      example: =SUM($A$2;10;PI();D3:F7) returns value of A2 + 10 + PI + all
      values in the range from D3 to F7

- functions currently available
    - MIN(list) - returns the smallest value of a list
    - MAX(list) - returns the largest value of a list
    - SUM(list) - returns the sum of all values in a list
    - AVERAGE(list) - returns the average of the values in a list
    - COUNT(list) - returns the count of numeric values in a list
    - COLUMN() - returns the column (A=1, B=2 etc.)
    - ROW() - returns the row
    - SQRT(x) - returns square root
    - LN(x) - returns natural logarythm
    - LOG10(x) - returns base10 logarythm
    - SIN(x) - returns sinus
    - COS(x) - returns cosinus
    - TAN(x) - returns tangent
    - ATAN(x) - returns arcus tangent
    - EXP(x) - returns e^x (natural exponential function)
    - SIGN(x) - returns the sign of a value; -1 (if negative), 0 (if zero), +1
      (if positive)
    - ABS(x) - returns the absolute value (positive number)
    - PI() - returns PI

- keyboard shortcuts
    - cursor - select single cell
    - cursor+shift - select cell range
    - return - down
    - tab - right
    - tab+shift - left
    - F2 - edit cell
    - clr - clear actual cell or marked cell range
    - esc - cancel cell range marking
    - ctrl+A - mark all cells
    - alt+0 - open cell format dialogue
    - ctrl+C - copy cell(s)
    - ctrl+V - paste cell(s)


Upcoming missing features
- cut & paste cells (will relocate other cell references)
- click on cells and ranges while editing a formula
- working status bar
- display up to 250 cells at the same time in a dynamic way
- use full memory potential for supporting up to 2000 active cells
- support for up to 4 sheets in one document


Known bugs and glitches
- fast cursor movement may leave remains
- bold/italics font won't fill full cell with paper (missing SymbOS GUI
  feature)
- cells with bold/italics font may display garbage after an update
- cells with large texts may overlap
- no round-up when using fixed decimal places
- switch from keybard cell marking to mouse cell marking will result in screen
  garbage


I have to stop working on SymCalc for a while now, so I decided to release this alpha version, if someone wants to try and play around with it.

Any bug reports are very welcome!

GRAPHICAL Z80 MULTITASKING OPERATING SYSTEM

Prodatron

Quote from: m_dr_m on 16:13, 14 June 24@Prodatron  I wish I were as excellent and productive as you. What is your secret? Legit question! I want to improve myself.
Btw as you are one of my CPC gods and probably one of the best Z80 coders (you are always the most crazy optimization guy), I wish you will come back with some CPC/Z80 stuff :) Hope to see you again in autumn in France at Eliot. Btw, I wish to talk to you about different things anyway (so not going too offtopic here), missed you at the Revision Demoparty for several years, so I am looking forward! :)

GRAPHICAL Z80 MULTITASKING OPERATING SYSTEM

Prodatron

SymCalc on a CPC with the Graphics 9000 (V9990) graphic card:

You cannot view this attachment.

Yeah, finally I got this: :)

You cannot view this attachment.

http://www.neef-online.de/home/c64/geos4.htm
(still have much respect to Geoworks/Berkeley Softworks)

GRAPHICAL Z80 MULTITASKING OPERATING SYSTEM

GUNHED

http://futureos.de --> Get the revolutionary FutureOS (Update: 2023.11.30)
http://futureos.cpc-live.com/files/LambdaSpeak_RSX_by_TFM.zip --> Get the RSX-ROM for LambdaSpeak :-) (Updated: 2021.12.26)

zhulien

new function:  fn(<functionname>,<parameters>) and inbuilt SymBASIC to code them in ;)

half kidding, you have so much in there already that it's beyond any commercial spreadsheet of the 80s making it already the most powerful 8bit spreadhseet on the market - minus a fiew features I think... 

honestly, I'd consider using it like a database if it gave a choice of less columns and more rows :D

you might even be able to have a disc-based sheet as an option with an unlimited number of random-access rows but your existing column count.  it's possible that it will STILL be faster than the competition - image a 10,000 row Z80-based spreadsheet with random-access fetching / calculations etc

Gryzor


Powered by SMFPacks Menu Editor Mod