Created
August 6, 2014 01:15
-
-
Save nelhage/467a884be32cf069e8c2 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
dnl 8051.m4 -- m4 macro set for 8051 assembly programming | |
dnl 6.115 Final Project, Spring 2008 Nelson Elhage | |
dnl | |
dnl Contains a set of macros to simplify 8051 assembly programming | |
dnl slightly. Doesn't fundamentally change the process, but | |
dnl simplifies a few of the more repetitive tasks, particularly | |
dnl generating label names | |
changequote([,])dnl [] make better quoting characters | |
changecom([//])dnl | |
define([_gensym], [0])dnl | |
dnl gensym returns a new label of the form labelNN each time it | |
dnl is expanded | |
define([gensym], [[label]_gensym[]define([_gensym],incr(_gensym))])dnl | |
dnl 16-bit additiona and subtraction in place across two registers | |
define([ADD16], | |
[mov A, $1 | |
add A, $3 | |
mov $1, A | |
mov A, $2 | |
addc A, $4 | |
mov $2, A | |
])dnl | |
define([SUBB16], | |
[mov A, $1 | |
subb A, $3 | |
mov $1, A | |
mov A, $2 | |
subb A, $4 | |
mov $2, A | |
])dnl | |
dnl | |
dnl Allocating scratchpad RAM | |
dnl | |
define([_lastvar], [128])dnl | |
define([RESERVE],[dnl | |
define([_lastvar],eval(_lastvar - $2))dnl | |
$1 equ _lastvar[]dnl | |
])dnl | |
define([DEFVAR],[RESERVE($1, 1)])dnl | |
dnl | |
dnl Macros for looping and conditionals | |
dnl Use `gensym' to generate labels | |
dnl | |
define([DJNZ],[pushdef([_l],gensym)dnl | |
_l: | |
$2 | |
djnz $1, _l | |
popdef([_l])dnl | |
])dnl | |
define([IFC],[pushdef([_l],gensym)dnl | |
jnc _l | |
$1 | |
_l: | |
popdef([_l])dnl | |
])dnl | |
define([IFNC],[pushdef([_l],gensym)dnl | |
jc _l | |
$1 | |
_l: | |
popdef([_l])dnl | |
])dnl | |
define([IFZ],[pushdef([_l],gensym)dnl | |
jnz _l | |
$1 | |
_l: | |
popdef([_l])dnl | |
])dnl | |
dnl |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment