Skip to content

Commit

Permalink
Neo6502: accelerated sin & cos - refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
zbyti committed Apr 9, 2024
1 parent cdb24bc commit c86aadb
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 18 deletions.
9 changes: 9 additions & 0 deletions base/neo/mathapi.asm
Original file line number Diff line number Diff line change
Expand Up @@ -12,17 +12,26 @@ STACK_SIZE1 = 1
VAR_FLOAT = $40
VAR_INTEGER = 0

VAR0_TYPE = VAR_ADDRESS
VAR1_TYPE = STACK_ADDRESS
VAR2_TYPE = STACK_ADDRESS+1

VAR0_B0 = VAR_ADDRESS+1
VAR0_B1 = VAR_ADDRESS+2
VAR0_B2 = VAR_ADDRESS+3
VAR0_B3 = VAR_ADDRESS+4

VAR1_B0 = STACK_ADDRESS+2
VAR1_B1 = STACK_ADDRESS+4
VAR1_B2 = STACK_ADDRESS+6
VAR1_B3 = STACK_ADDRESS+8

VAR2_B0 = STACK_ADDRESS+3
VAR2_B1 = STACK_ADDRESS+5
VAR2_B2 = STACK_ADDRESS+7
VAR2_B3 = STACK_ADDRESS+9

VAR0 = VAR0_B0
VAR1 = VAR1_B0
VAR2 = VAR2_B0

Expand Down
36 changes: 18 additions & 18 deletions lib/system.pas
Original file line number Diff line number Diff line change
Expand Up @@ -2204,22 +2204,22 @@ function Sin(x: single): single; overload;
begin
{$ifdef neo}
asm
mva x VAR_ADDRESS+1
mva x+1 VAR_ADDRESS+2
mva x+2 VAR_ADDRESS+3
mva x+3 VAR_ADDRESS+4
mva x VAR0_B0
mva x+1 VAR0_B1
mva x+2 VAR0_B2
mva x+3 VAR0_B3

mva #VAR_FLOAT VAR_ADDRESS
mva #VAR_FLOAT VAR0_TYPE
mva #VAR_ADDRESS NEOMESSAGE_PAR1W
mva #STACK_SIZE1 NEOMESSAGE_PAR2W
jsr @WaitMessage
mva #MATH_SIN NEOMESSAGE_FUNC
mva #MATH_GROUP NEOMESSAGE_GROUP

mva VAR_ADDRESS+1 result
mva VAR_ADDRESS+2 result+1
mva VAR_ADDRESS+3 result+2
mva VAR_ADDRESS+4 result+3
mva VAR0_B0 result
mva VAR0_B1 result+1
mva VAR0_B2 result+2
mva VAR0_B3 result+3
end;
{$else}
Result := fsincos(x, false);
Expand All @@ -2239,22 +2239,22 @@ function Cos(x: single): single; overload;
begin
{$ifdef neo}
asm
mva x VAR_ADDRESS+1
mva x+1 VAR_ADDRESS+2
mva x+2 VAR_ADDRESS+3
mva x+3 VAR_ADDRESS+4
mva x VAR0_B0
mva x+1 VAR0_B1
mva x+2 VAR0_B2
mva x+3 VAR0_B3

mva #VAR_FLOAT VAR_ADDRESS
mva #VAR_FLOAT VAR0_TYPE
mva #VAR_ADDRESS NEOMESSAGE_PAR1W
mva #STACK_SIZE1 NEOMESSAGE_PAR2W
jsr @WaitMessage
mva #MATH_COS NEOMESSAGE_FUNC
mva #MATH_GROUP NEOMESSAGE_GROUP

mva VAR_ADDRESS+1 result
mva VAR_ADDRESS+2 result+1
mva VAR_ADDRESS+3 result+2
mva VAR_ADDRESS+4 result+3
mva VAR0_B0 result
mva VAR0_B1 result+1
mva VAR0_B2 result+2
mva VAR0_B3 result+3
end;
{$else}
Result := fsincos(x, true);
Expand Down

0 comments on commit c86aadb

Please sign in to comment.