projects
/
emu8051.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add overflow and auxiliary carry flags manipulation functions
[emu8051.git]
/
src
/
psw.c
diff --git
a/src/psw.c
b/src/psw.c
index
2210d85
..
4dd2a67
100644
(file)
--- a/
src/psw.c
+++ b/
src/psw.c
@@
-28,36
+28,92
@@
psw_write_cy(int cy)
u_int8_t psw = memory_read8(INT_MEM_ID, _PSW_);
if (cy)
u_int8_t psw = memory_read8(INT_MEM_ID, _PSW_);
if (cy)
- psw |=
0x80
; /* Set */
+ psw |=
PSW_FLAG_CY
; /* Set */
else
else
- psw &= ~
0x80
; /* Clear */
+ psw &= ~
PSW_FLAG_CY
; /* Clear */
memory_write8(INT_MEM_ID, _PSW_, psw); /* Save updated value */
}
void
psw_set_cy(void)
memory_write8(INT_MEM_ID, _PSW_, psw); /* Save updated value */
}
void
psw_set_cy(void)
+{
+ psw_write_cy(1);
+}
+
+void
+psw_clr_cy(void)
+{
+ psw_write_cy(0);
+}
+
+/* Returns 0 or 1 */
+int
+psw_read_cy(void)
+{
+ return memory_read8(INT_MEM_ID, _PSW_) >> PSW_BIT_CY;
+}
+
+void
+psw_write_ac(int ac)
{
u_int8_t psw = memory_read8(INT_MEM_ID, _PSW_);
{
u_int8_t psw = memory_read8(INT_MEM_ID, _PSW_);
- psw |= 0x80;
+ if (ac)
+ psw |= PSW_FLAG_AC; /* Set */
+ else
+ psw &= ~PSW_FLAG_AC; /* Clear */
memory_write8(INT_MEM_ID, _PSW_, psw); /* Save updated value */
}
void
memory_write8(INT_MEM_ID, _PSW_, psw); /* Save updated value */
}
void
-psw_clr_cy(void)
+psw_set_ac(void)
+{
+ psw_write_ac(1);
+}
+
+void
+psw_clr_ac(void)
+{
+ psw_write_ac(0);
+}
+
+/* Returns 0 or 1 */
+int
+psw_read_ac(void)
+{
+ return memory_read8(INT_MEM_ID, _PSW_) >> PSW_BIT_AC;
+}
+
+void
+psw_write_ov(int ov)
{
u_int8_t psw = memory_read8(INT_MEM_ID, _PSW_);
{
u_int8_t psw = memory_read8(INT_MEM_ID, _PSW_);
- psw &= ~0x80;
+ if (ov)
+ psw |= PSW_FLAG_OV; /* Set */
+ else
+ psw &= ~PSW_FLAG_OV; /* Clear */
memory_write8(INT_MEM_ID, _PSW_, psw); /* Save updated value */
}
memory_write8(INT_MEM_ID, _PSW_, psw); /* Save updated value */
}
+void
+psw_set_ov(void)
+{
+ psw_write_ov(1);
+}
+
+void
+psw_clr_ov(void)
+{
+ psw_write_ov(0);
+}
+
/* Returns 0 or 1 */
int
/* Returns 0 or 1 */
int
-psw_read_
cy
(void)
+psw_read_
ov
(void)
{
{
- return memory_read8(INT_MEM_ID, _PSW_) >>
7
;
+ return memory_read8(INT_MEM_ID, _PSW_) >>
PSW_BIT_OV
;
}
}