Bug 139

Summary: Expression evaluator drops the ball with * on absolute sections
Product: RMAC Reporter: ggn <ggnkua>
Component: CoreAssignee: Shamus Hammons <jlhamm>
Status: CONFIRMED ---    
Severity: enhancement CC: jlhamm
Priority: Normal    
Version: unspecified   
Hardware: PC   
OS: Linux   

Description ggn 2019-11-04 16:23:20 CST
I've documented the issues I found and possible fix in https://atariage.com/forums/topic/297621-removers-library-aout-binary-emulation-dropped-from-linux-kernel/?do=findComment&comment=4377729

It needs some extra work though, so the expression evaluator can distinguish if * means multiply or PC. We'll see...
Comment 1 ggn 2019-11-05 08:53:43 CST
Also, "rmac also not accept such aliasing" with "rmac also does not accept such aliasing". And I guess "as is defined on the reference manual" with "as is defined in the reference manual."

(seems that my English has tanked)
Comment 2 Shamus Hammons 2020-01-02 12:30:11 CST
Well, your English is still better than my Greek.  ;-)  Quoting the relevant bit from that post here, so I don't have to refer elsewhere:

"a) There is a small issue with rmac not handling * as program count on expressions. I didn't fix that inside rmac itself but I bypassed it by altering the offending code. If you open display\display.s you'll find a line that says "padding_nop    (G_RAM+$10-*)" and another "padding_nop    (G_RAM+$40-*)" which both give out some cryptic errors. These can be overcome by equating * to a symbol in the previous lines. I.e. go to the first padding_nop line and add a line directly above that says "pc1=*", then modify the offending line to ""padding_nop    (G_RAM+$10-pc1)". Likewise, go to the second line and add a "pc2=*" immediately above and modify line to "padding_nop    (G_RAM+$40-pc2)". That should take care of that.

b) But there's another issue inside rmac that can't be fixed that easily unfortunately. For this you need to modify the code and recompile rmac for now. Namely, open file expr.c and go to line 421. The line there should read "*a_attr = cursect | DEFINED;". Change that to "*a_attr = DEFINED;" and recompile rmac."

And so, looking at was line 421 (now 429), it's unclear to me why adding the current section's attributes is a problem there--so I'll have to figure out what's going on there.  Aside from that, did MADMAC really let you write such things as G_RAM+$10-* ?  If so, that means we'll have to code in some special handling for the "*" token and figure out when the user means it to mean "the current location" vs. "multiplication".

Also, why the fuck would you write that instead of *=*+$10 ?  :-P