-/*\r
- Skelton for retropc emulator\r
-\r
- Author : Takeda.Toshiya\r
- Date : 2014.12.19-\r
-\r
- [ fifo buffer ]\r
-*/\r
-\r
-#include <stdlib.h>\r
-#include <malloc.h> \r
-#include "fifo.h"\r
-#include "fileio.h"\r
-\r
-FIFO::FIFO(int s)\r
-{\r
- size = s;\r
- buf = (int*)malloc(size * sizeof(int));\r
- cnt = rpt = wpt = 0;\r
-}\r
-void FIFO::release()\r
-{\r
- free(buf);\r
-}\r
-void FIFO::clear()\r
-{\r
- cnt = rpt = wpt = 0;\r
-}\r
-void FIFO::write(int val)\r
-{\r
- if(cnt < size) {\r
- buf[wpt++] = val;\r
- if(wpt >= size) {\r
- wpt = 0;\r
- }\r
- cnt++;\r
- }\r
-}\r
-int FIFO::read()\r
-{\r
- int val = 0;\r
- if(cnt) {\r
- val = buf[rpt++];\r
- if(rpt >= size) {\r
- rpt = 0;\r
- }\r
- cnt--;\r
- }\r
- return val;\r
-}\r
-int FIFO::read_not_remove(int pt)\r
-{\r
- if(pt >= 0 && pt < cnt) {\r
- pt += rpt;\r
- if(pt >= size) {\r
- pt -= size;\r
- }\r
- return buf[pt];\r
- }\r
- return 0;\r
-}\r
-int FIFO::count()\r
-{\r
- return cnt;\r
-}\r
-bool FIFO::full()\r
-{\r
- return (cnt == size);\r
-}\r
-bool FIFO::empty()\r
-{\r
- return (cnt == 0);\r
-}\r
-\r
-#define STATE_VERSION 1\r
-\r
-void FIFO::save_state(void *f)\r
-{\r
- FILEIO *state_fio = (FILEIO *)f;\r
- \r
- state_fio->FputUint32(STATE_VERSION);\r
- \r
- state_fio->FputInt32(size);\r
- state_fio->Fwrite(buf, size * sizeof(int), 1);\r
- state_fio->FputInt32(cnt);\r
- state_fio->FputInt32(rpt);\r
- state_fio->FputInt32(wpt);\r
-}\r
-\r
-bool FIFO::load_state(void *f)\r
-{\r
- FILEIO *state_fio = (FILEIO *)f;\r
- \r
- if(state_fio->FgetUint32() != STATE_VERSION) {\r
- return false;\r
- }\r
- if(state_fio->FgetInt32() != size) {\r
- return false;\r
- }\r
- state_fio->Fread(buf, size * sizeof(int), 1);\r
- cnt = state_fio->FgetInt32();\r
- rpt = state_fio->FgetInt32();\r
- wpt = state_fio->FgetInt32();\r
- return true;\r
-}\r
-\r
+/*
+ Skelton for retropc emulator
+
+ Author : Takeda.Toshiya
+ Date : 2014.12.19-
+
+ [ fifo buffer ]
+*/
+
+#include <stdlib.h>
+#include <malloc.h>
+#include "fifo.h"
+#include "fileio.h"
+
+FIFO::FIFO(int s)
+{
+ size = s;
+ buf = (int*)malloc(size * sizeof(int));
+ cnt = rpt = wpt = 0;
+}
+void FIFO::release()
+{
+ free(buf);
+}
+void FIFO::clear()
+{
+ cnt = rpt = wpt = 0;
+}
+void FIFO::write(int val)
+{
+ if(cnt < size) {
+ buf[wpt++] = val;
+ if(wpt >= size) {
+ wpt = 0;
+ }
+ cnt++;
+ }
+}
+int FIFO::read()
+{
+ int val = 0;
+ if(cnt) {
+ val = buf[rpt++];
+ if(rpt >= size) {
+ rpt = 0;
+ }
+ cnt--;
+ }
+ return val;
+}
+int FIFO::read_not_remove(int pt)
+{
+ if(pt >= 0 && pt < cnt) {
+ pt += rpt;
+ if(pt >= size) {
+ pt -= size;
+ }
+ return buf[pt];
+ }
+ return 0;
+}
+int FIFO::count()
+{
+ return cnt;
+}
+bool FIFO::full()
+{
+ return (cnt == size);
+}
+bool FIFO::empty()
+{
+ return (cnt == 0);
+}
+
+#define STATE_VERSION 1
+
+void FIFO::save_state(void *f)
+{
+ FILEIO *state_fio = (FILEIO *)f;
+
+ state_fio->FputUint32(STATE_VERSION);
+
+ state_fio->FputInt32(size);
+ state_fio->Fwrite(buf, size * sizeof(int), 1);
+ state_fio->FputInt32(cnt);
+ state_fio->FputInt32(rpt);
+ state_fio->FputInt32(wpt);
+}
+
+bool FIFO::load_state(void *f)
+{
+ FILEIO *state_fio = (FILEIO *)f;
+
+ if(state_fio->FgetUint32() != STATE_VERSION) {
+ return false;
+ }
+ if(state_fio->FgetInt32() != size) {
+ return false;
+ }
+ state_fio->Fread(buf, size * sizeof(int), 1);
+ cnt = state_fio->FgetInt32();
+ rpt = state_fio->FgetInt32();
+ wpt = state_fio->FgetInt32();
+ return true;
+}
+