mirror of
https://github.com/irmen/prog8.git
synced 2024-11-25 19:31:36 +00:00
add check for memory() args to be const, added floats.str_f()
add check for memory() args to be const
This commit is contained in:
parent
5c393091a0
commit
a01c0a283d
@ -2,26 +2,37 @@ floats {
|
||||
; the floating point functions shared across compiler targets
|
||||
%option merge, no_symbol_prefixing
|
||||
|
||||
sub print_f(float value) {
|
||||
asmsub print_f(float value @FAC1) clobbers(A,X,Y) {
|
||||
; ---- prints the floating point value (without a newline). No leading space (unlike BASIC)!
|
||||
%asm {{
|
||||
lda #<value
|
||||
ldy #>value
|
||||
jsr MOVFM ; load float into fac1
|
||||
jsr FOUT ; fac1 to string in A/Y
|
||||
jsr str_f
|
||||
ldy #0
|
||||
- lda (P8ZP_SCRATCH_W1),y
|
||||
beq +
|
||||
jsr cbm.CHROUT
|
||||
iny
|
||||
bne -
|
||||
+ rts
|
||||
}}
|
||||
}
|
||||
|
||||
asmsub str_f(float value @FAC1) clobbers(X) -> str @AY {
|
||||
; ---- converts the floating point value to a string. No leading space!
|
||||
%asm {{
|
||||
jsr FOUT
|
||||
sta P8ZP_SCRATCH_W1
|
||||
sty P8ZP_SCRATCH_W1+1
|
||||
ldy #0
|
||||
lda (P8ZP_SCRATCH_W1),y
|
||||
cmp #' '
|
||||
beq +
|
||||
- lda (P8ZP_SCRATCH_W1),y
|
||||
beq ++
|
||||
jsr cbm.CHROUT
|
||||
+ iny
|
||||
bne -
|
||||
+ rts
|
||||
}}
|
||||
bne +
|
||||
inc P8ZP_SCRATCH_W1
|
||||
bne +
|
||||
inc P8ZP_SCRATCH_W1+1
|
||||
+ lda P8ZP_SCRATCH_W1
|
||||
ldy P8ZP_SCRATCH_W1+1
|
||||
rts
|
||||
}}
|
||||
}
|
||||
|
||||
sub pow(float value, float power) -> float {
|
||||
|
@ -47,9 +47,14 @@ internal class VerifyFunctionArgTypes(val program: Program, val errors: IErrorRe
|
||||
else {
|
||||
if(functionCallExpr.target.nameInSource==listOf("memory")) {
|
||||
val name = (functionCallExpr.args[0] as StringLiteral).value
|
||||
val size = (functionCallExpr.args[1] as NumericLiteral).number.toInt()
|
||||
val align = (functionCallExpr.args[2] as NumericLiteral).number.toInt()
|
||||
memorySlabs.add(Slab(name, size, align, functionCallExpr.position))
|
||||
val size = (functionCallExpr.args[1] as? NumericLiteral)?.number?.toInt()
|
||||
val align = (functionCallExpr.args[2] as? NumericLiteral)?.number?.toInt()
|
||||
if(size==null)
|
||||
errors.err("argument must be a constant", functionCallExpr.args[1].position)
|
||||
if(align==null)
|
||||
errors.err("argument must be a constant", functionCallExpr.args[2].position)
|
||||
if(size!=null && align!=null)
|
||||
memorySlabs.add(Slab(name, size, align, functionCallExpr.position))
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -338,7 +338,12 @@ point variables. This includes ``print_f``, the routine used to print floating
|
||||
returns the value restricted to the given minimum and maximum.
|
||||
|
||||
``print_f (x)``
|
||||
prints the floating point number x as a string.
|
||||
Prints the floating point number x as a string.
|
||||
There's no leading whitespace (unlike cbm BASIC when printing a floating point number)
|
||||
|
||||
``str_f (x)``
|
||||
Converts the floating point number x to a string (returns address of the string buffer)
|
||||
There's no leading whitespace.
|
||||
|
||||
``rad (x)``
|
||||
Degrees to radians.
|
||||
|
@ -12,12 +12,12 @@
|
||||
<option name="HAS_STRING_ESCAPES" value="true" />
|
||||
</options>
|
||||
<keywords keywords="&;->;@;and;as;asmsub;break;clobbers;continue;do;downto;else;false;for;goto;if;if_cc;if_cs;if_eq;if_mi;if_ne;if_neg;if_nz;if_pl;if_pos;if_vc;if_vs;if_z;in;inline;not;or;repeat;return;romsub;step;sub;to;true;unroll;until;when;while;xor;~" ignore_case="false" />
|
||||
<keywords2 keywords="%address;%asm;%asmbinary;%asminclude;%breakpoint;%encoding;%import;%ir;%launcher;%option;%output;%zeropage;%zpallowed;%zpreserved;iso:;petscii:;sc:" />
|
||||
<keywords2 keywords="%address;%asm;%asmbinary;%asminclude;%breakpoint;%encoding;%import;%ir;%launcher;%option;%output;%zeropage;%zpallowed;%zpreserved;atascii:;default:;iso:;petscii:;sc:" />
|
||||
<keywords3 keywords="@requirezp;@shared;@split;@zp;bool;byte;const;float;str;ubyte;uword;void;word" />
|
||||
<keywords4 keywords="abs;all;any;callfar;callram;callrom;clamp;cmp;divmod;len;lsb;max;memory;min;mkword;msb;peek;peekf;peekw;poke;pokef;pokew;pop;popw;push;pushw;reverse;rol;rol2;ror;ror2;rrestore;rrestorex;rsave;rsavex;setlsb;setmsb;sgn;sizeof;sort;sqrt;swap;|>" />
|
||||
</highlighting>
|
||||
<extensionMap>
|
||||
<mapping ext="p8" />
|
||||
<mapping ext="prog8" />
|
||||
<mapping ext="p8" />
|
||||
</extensionMap>
|
||||
</filetype>
|
Loading…
Reference in New Issue
Block a user