aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Disc02.X/disc02asm.s40
1 files changed, 40 insertions, 0 deletions
diff --git a/Disc02.X/disc02asm.s b/Disc02.X/disc02asm.s
new file mode 100644
index 0000000..c718500
--- /dev/null
+++ b/Disc02.X/disc02asm.s
@@ -0,0 +1,40 @@
+ .equ __P24FJ64GA002,1 ;required "boiler-plate" (BP)
+ .include "p24Fxxxx.inc" ;BP
+
+#include "xc.inc" ;BP
+ ; DO NOT include config statements. We define them in the C file
+ ;the next two lines set up the actual chip for operation - required
+ ;config __CONFIG2, POSCMOD_NONE & I2C1SEL_PRI & IOL1WAY_OFF & OSCIOFNC_ON & FCKSM_CSECME & FNOSC_FRCPLL & SOSCSEL_LPSOSC & WUTSEL_FST & IESO_OFF
+ ;config __CONFIG1, FWDTEN_OFF & COE_OFF & BKBUG_OFF & GWRP_OFF & GCP_OFF & JTAGEN_OFF
+
+ .bss ;put the following labels in RAM
+_counter: .space 2 ;declare a 16-bit variable
+; you SHOULD NOT define stack, becasue this file is compiled
+; alongside a C file that contains main(). The C compiler
+; will create stack space for us.
+;stack:
+; .space 32 ;this will be our stack area, from var_16_bit to here
+ .text ;BP (put the following data in ROM(program memory))
+ .global _myAsmFunc
+ .global _myGlobalVar
+ .global _counter
+
+_myAsmFunc:
+ push w0
+
+ inc _myGlobalVar
+ inc _counter
+
+ bra checkLoopEndCond
+loopBody:
+ btg LATB, #2 ; btg stands for bit-toggle.
+ nop
+ dec WREG0
+checkLoopEndCond:
+ cp0 w0
+ bra nz, loopBody
+
+ pop w0
+ return
+ .end
+