diff --git a/stm32f3-discovery/Device/ldscripts/stm32f3.ld b/stm32f3-discovery/Device/ldscripts/stm32f3.ld
index 964a69e..f15a3db 100644
--- a/stm32f3-discovery/Device/ldscripts/stm32f3.ld
+++ b/stm32f3-discovery/Device/ldscripts/stm32f3.ld
@@ -14,3 +14,5 @@ INCLUDE "stm32f3discovery_def.ld"
 /* include the sections management sub-script for FLASH mode */
 INCLUDE "sections_flash.ld"
 
+jhc_phys_brrPtr  = 0x48001028;
+jhc_phys_bsrrPtr = 0x48001018;
diff --git a/stm32f3-discovery/hs_src/Main.hs b/stm32f3-discovery/hs_src/Main.hs
index 1b4e5ac..441885c 100644
--- a/stm32f3-discovery/hs_src/Main.hs
+++ b/stm32f3-discovery/hs_src/Main.hs
@@ -5,6 +5,8 @@ import Foreign.Ptr
 import Foreign.Storable
 
 foreign import ccall "c_extern.h Delay" c_delay :: Word32 -> IO ()
+foreign import ccall "&jhc_phys_brrPtr"  c_jhc_phys_brrPtr  :: Ptr Word16
+foreign import ccall "&jhc_phys_bsrrPtr" c_jhc_phys_bsrrPtr :: Ptr Word16
 
 gpioPin8, gpioPin9, gpioPin10, gpioPin11, gpioPin12, gpioPin13, gpioPin14, gpioPin15, led3, led4, led5, led6, led7, led8, led9, led10 :: Word16
 gpioPin8  = 0x0100
@@ -25,8 +27,8 @@ led9  = gpioPin12
 led10 = gpioPin13
 
 brrPtr, bsrrPtr :: Ptr Word16
-brrPtr  = nullPtr `plusPtr` 0x48001028
-bsrrPtr = nullPtr `plusPtr` 0x48001018
+brrPtr  = c_jhc_phys_brrPtr
+bsrrPtr = c_jhc_phys_bsrrPtr
 
 ledOff, ledOn :: Word16 -> IO ()
 ledOff = poke brrPtr
diff --git a/stm32f3-discovery/jhc_custom/rts/jhc_rts_header.h b/stm32f3-discovery/jhc_custom/rts/jhc_rts_header.h
index 2ea1646..28403f8 100644
--- a/stm32f3-discovery/jhc_custom/rts/jhc_rts_header.h
+++ b/stm32f3-discovery/jhc_custom/rts/jhc_rts_header.h
@@ -65,3 +65,6 @@ extern const void * const nh_stuff[];
 #include "rts/gc.h"
 #include "rts/jhc_rts.h"
 #include "lib/lib_cbits.h"
+
+extern volatile void jhc_phys_brrPtr;
+extern volatile void jhc_phys_bsrrPtr;
