On 2 February 2015 at 05:48, Walter Bright via Digitalmars-d <digitalmars-d@puremagic.com> wrote: > On 2/1/2015 9:21 PM, Daniel Murphy wrote: >> >> "Walter Bright" wrote in message news:mam6qe$15nu$1...@digitalmars.com... >>> >>> > We also need a pragma(address) to complement pragma(mangle). >>> >>> What would that do? >> >> >> It would allow naming a memory address, similar to using .org in assembly. >> >> eg >> pragma(address, 0x0025) >> shared ubyte PORTB; >> static assert(&PORTB == cast(ubyte*)0x0025); >> >> This is a much nicer version of C's >> #define PORTB (*(volatile unsigned char *)0x0025) > > > That's what I suspected :-) > > struct Ports { > static ubyte B() { return volatileLoad(cast(ubyte *)0x0025); } > static void B(ubyte value) { volatileStore(cast(ubyte *)0x0025, value); > } > } > > ... > Ports.B = 7; > foo(Ports.B); > > gets the job done. Of course, you could take it further and make a template > out of it: > > auto Ports = Port!(ubyte, 0x0025);
That code doesn't work with DMD. http://goo.gl/hgsHg0 Iain.