Closed aydindemircioglu closed 10 months ago
in the latest version of MP, there is an error message when trying to use the modifier ABSOLUTE for a string array
fp_Gang: array[0..2] of String[15] absolute $e482;
compiler has no way of instantiating such an array with valid pointers to strings such an array will contain pointers with a value of 0
ok, but how to do it else? what i want would be at $e482 a space of 15 chars (+1 for the string length) that the user can fill (gang name is typed in at start of the game).
fp_Gang: array[0..2] of pointer absolute $e482; gang0, gang1, gang2 : string[15];
begin fp_Gang[0] := @gang0; fp_Gang[1] := @gang1; fp_Gang[2] := @gang2;
fp_Gang[2]:='string2'; fp_Gang[1]:='string1'; fp_Gang[0]:='string0';
writeln(Pstring(fp_Gang[2]));
end.
{$define basicoff}
{$define romoff}
type TGang = record
name: string[15];
logo: string[15];
end;
var
fp_Gang: array[0..2] of ^TGang absolute $e482;
gang0, gang1, gang2 : TGang;
begin
gang0.name := 'string1';
gang1.name := 'string1';
gang2.name := 'string2';
gang0.logo := 'red';
gang1.logo := 'white';
gang2.logo := 'black';
fp_Gang[2] := @gang2;
fp_Gang[1] := @gang1;
fp_Gang[0] := @gang0;
writeln(Pstring(fp_Gang[2].name));
writeln(Pstring(fp_Gang[1]));
writeln(Pstring(fp_Gang[2].logo));
writeln(Pstring(fp_Gang[1].logo));
repeat until false;
end.
thanks to both of you! i will try to see if the problem is there with the latest version and if i use correct code. it may take a couple of days (or weeks), need to finish other work first.
var
fp_Gang: array[0..2] of String[15] absolute $e482;
begin
repeat until false;
end.
Mad Pascal Compiler version 1.7.1 [2024/02/03] for 6502
Compiling test.pas
test.pas (5,52) Error: ABSOLUTE modifier is not available for this type of array
but that was not the initial problem. in the code above weaponnames are a usual array of strings, not fixed to an absolute address. the fp_weapon was absolute, but its an array of byte. yet, it seemed to me that mad pascal confused the indexing. as said i will check this later and reopen if need be.
I'll check it
I remember that I had a similar problem in previous versions (2-3 years ago) and I wrote a workaround then.
I also had a problem when I was trying to calculate an index inside array brackets (the problematic array was nested within another array), and the solution was to make this calculation one step earlier
@aydindemircioglu I wrote some simple examples considering your case and got the correct result, please provide full example of your code.
thanks, as said, might be due to my older version. the code is embedded in a long procedure, i have to take my time to get a minimal example. for now i will then close this issue, and will reopen it if i am able to reproduce with the minimal example.
i think mad pascal again over-optimizes incorrectly, i do not have a minimal example at hand, but my code is like this:
this results that the weapon names from player from gang 1 (=0,1,2,3) are OK, but weapon names from players from the other side (with index 16, 17, 18) show the wrong string, possibly because mad-pascal tries to optimize something incorrectly? this is resolved by just introducing a new byte z like this.
(i know introducing this byte z is better than writing s SHL 4 + i all the times, but this is debug stadium, optimization will be done later).
am using mad pascal 1.7.0 still, not sure if this was fixed already.