Skip to content

Commit

Permalink
fix freespace+base, change default optimize settings
Browse files Browse the repository at this point in the history
  • Loading branch information
randomdude999 committed Jan 28, 2024
1 parent 3559b27 commit 4f78750
Show file tree
Hide file tree
Showing 6 changed files with 29 additions and 11 deletions.
10 changes: 6 additions & 4 deletions src/asar/assembleblock.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -509,7 +509,9 @@ static void setlabel(string name, int loc=-1, bool is_static=false)
{
verifysnespos();
loc = snespos;
lbl_fs_id = freespaceid;
// if base is not active:
if(snespos == realsnespos) lbl_fs_id = freespaceid;
// if base is active, always treat the label as freespace 0, i.e. not freespace.
}

snes_label label_data;
Expand Down Expand Up @@ -622,7 +624,7 @@ static void freespaceend()
{
if (freespaceid > 0)
{
freespaces[freespaceid].len = snespos-freespacestart;
freespaces[freespaceid].len = realsnespos-freespacestart;
snespos=(int)0xFFFFFFFF;
snespos_valid = false;
}
Expand Down Expand Up @@ -680,9 +682,9 @@ void initstuff()
incsrcdepth = 0;

optimizeforbank = -1;
optimize_dp = optimize_dp_flag::NONE;
optimize_dp = optimize_dp_flag::ALWAYS;
dp_base = 0;
optimize_address = optimize_address_flag::DEFAULT;
optimize_address = optimize_address_flag::MIRRORS;

in_struct = false;
in_sub_struct = false;
Expand Down
12 changes: 6 additions & 6 deletions src/asar/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,9 @@ int romlen_r;
int pass;

int optimizeforbank=-1;
int optimize_dp = optimize_dp_flag::NONE;
int optimize_dp = optimize_dp_flag::ALWAYS;
int dp_base = 0;
int optimize_address = optimize_address_flag::DEFAULT;
int optimize_address = optimize_address_flag::MIRRORS;

autoarray<callstack_entry> callstack;

Expand Down Expand Up @@ -376,11 +376,11 @@ static int getlenforlabel(snes_label thislabel, bool exists)
{
return 2;
}
else if((optimize_dp == optimize_dp_flag::RAM) && bank == 0x7E && (word-dp_base < 0x100))
else if((optimize_dp == optimize_dp_flag::RAM) && bank == 0x7E && (word-dp_base < 0x100) && !lblfreespace)
{
return 1;
}
else if(optimize_dp == optimize_dp_flag::ALWAYS && (bank == 0x7E || !(bank & 0x40)) && (word-dp_base < 0x100))
else if(optimize_dp == optimize_dp_flag::ALWAYS && (bank == 0x7E || !(bank & 0x40)) && (word-dp_base < 0x100) && !lblfreespace)
{
return 1;
}
Expand Down Expand Up @@ -1278,9 +1278,9 @@ void reseteverything()
writtenblocks.reset();

optimizeforbank=-1;
optimize_dp = optimize_dp_flag::NONE;
optimize_dp = optimize_dp_flag::ALWAYS;
dp_base = 0;
optimize_address = optimize_address_flag::DEFAULT;
optimize_address = optimize_address_flag::MIRRORS;

closecachedfiles();

Expand Down
11 changes: 11 additions & 0 deletions tests/freespace_base.asm
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
;`+
;`07fd7 0a
;`80000 53 54 41 52 03 00 fc ff
;`ad 03 10 EA
;`fffff 00
freecode cleaned
base $1000
lda lbl
lbl:
nop

2 changes: 2 additions & 0 deletions tests/optimizer.asm
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,8 @@ nonmirror = $008000
nonmirror01 = $018000

base off
optimize address default
optimize dp none
;test default asar optimization (bank only)
lda test_00.test
lda test_7E.test
Expand Down
2 changes: 1 addition & 1 deletion tests/sa1freespace.asm
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@
;`FFFFF 00
sa1rom
freecode cleaned
NOP #4
NOP #4
3 changes: 3 additions & 0 deletions tests/structs.asm
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@ endstruct
struct test2 extends struct_without_org
endstruct

optimize address default
optimize dp none

lda test[1].size
;lda test.size
lda test.test2.lol
Expand Down

0 comments on commit 4f78750

Please sign in to comment.