diff options
| author | Stelios Tsampas <loathingkernel@gmail.com> | 2017-07-17 18:08:59 +0300 |
|---|---|---|
| committer | Stelios Tsampas <loathingkernel@gmail.com> | 2017-07-17 18:08:59 +0300 |
| commit | 7a43668f9d227213586a305d1913d3c4b5d98f5a (patch) | |
| tree | b05f6a88798ed492b1f2ed5e8d383f1a0d5ee89e /plugins | |
| parent | a96eefdf0f10a9a051e65f6e88a24dc3abe40fc5 (diff) | |
* Add nullsio1 plugin from upstream
Diffstat (limited to 'plugins')
| -rw-r--r-- | plugins/nullsio1/Makefile.am | 10 | ||||
| -rw-r--r-- | plugins/nullsio1/sio1.c | 289 | ||||
| -rw-r--r-- | plugins/nullsio1/typedefs.h | 35 |
3 files changed, 334 insertions, 0 deletions
diff --git a/plugins/nullsio1/Makefile.am b/plugins/nullsio1/Makefile.am new file mode 100644 index 00000000..9d78b632 --- /dev/null +++ b/plugins/nullsio1/Makefile.am @@ -0,0 +1,10 @@ +bindir = @libdir@/games/psemu/ +libdir = @libdir@/games/psemu/ + +lib_LTLIBRARIES = libNullSio1.la + +libNullSio1_la_SOURCES = sio1.c typedefs.h +libNullSio1_la_LDFLAGS = -module -avoid-version + +AM_CPPFLAGS = -DDATADIR=\"${datadir}/psemu/\" \ + -I$(top_srcdir)/libpcsxcore -I../../include diff --git a/plugins/nullsio1/sio1.c b/plugins/nullsio1/sio1.c new file mode 100644 index 00000000..44311f4b --- /dev/null +++ b/plugins/nullsio1/sio1.c @@ -0,0 +1,289 @@ +/*************************************************************************** + * Copyright (C) 2013 by Blade_Arma <edgbla@yandex.ru> * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * + ***************************************************************************/ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <stdint.h> + +#include "typedefs.h" +#include "psemu_plugin_defs.h" + +#ifndef CALLBACK +#define CALLBACK +#endif + +/***************************************************************************/ + +static char *pluginName = "sio1Null"; + +static const unsigned char version = 1; +static const unsigned char revision = 1; +static const unsigned char build = 1; + +static void (CALLBACK *irqCallback)() = 0; + +/* sio status flags. + */ +enum { + SR_TXRDY = 0x0001, + SR_RXRDY = 0x0002, + SR_TXU = 0x0004, + SR_PERROR = 0x0008, + SR_OE = 0x0010, + SR_FE = 0x0020, + SR_0040 = 0x0040, // ? + SR_DSR = 0x0080, + SR_CTS = 0x0100, + SR_IRQ = 0x0200 +}; + +/* sio mode flags. + */ +enum { + MR_BR_1 = 0x0001, + MR_BR_16 = 0x0002, + MR_BR_64 = 0x0003, + MR_CHLEN_5 = 0x0000, + MR_CHLEN_6 = 0x0004, + MR_CHLEN_7 = 0x0008, + MR_CHLEN_8 = 0x000C, + MR_PEN = 0x0010, + MR_P_EVEN = 0x0020, + MR_SB_00 = 0x0000, + MR_SB_01 = 0x0040, + MR_SB_10 = 0x0080, + MR_SB_11 = 0x00C0 +}; + +/* sio control flags. + */ +enum { + CR_TXEN = 0x0001, + CR_DTR = 0x0002, + CR_RXEN = 0x0004, + CR_0008 = 0x0008, // ? + CR_ERRRST = 0x0010, + CR_RTS = 0x0020, + CR_RST = 0x0040, + CR_0080 = 0x0080, // HM? + CR_BUFSZ_1 = 0x0000, + CR_BUFSZ_2 = 0x0100, + CR_BUFSZ_4 = 0x0200, + CR_BUFSZ_8 = 0x0300, + CR_TXIEN = 0x0400, + CR_RXIEN = 0x0800, + CR_DSRIEN = 0x1000, + CR_2000 = 0x2000 // CTSIEN? +}; + +static u16 statReg; // 0x1f801054: 0x185 SR_TXRDY | SR_TXU | SR_DSR | SR_CTS +static u16 modeReg; // 0x1f801058: 0x0 +static u16 ctrlReg; // 0x1f80105A: 0x0 +static u16 baudReg; // 0x1f80105E: 0x0 + +/***************************************************************************/ + +long CALLBACK SIO1init() { + return 0; +} + +long CALLBACK SIO1shutdown() { + return 0; +} + +/***************************************************************************/ + +long CALLBACK SIO1open(unsigned long *gpuDisp) { + statReg = SR_TXRDY | SR_TXU | SR_DSR | SR_CTS; + modeReg = 0x0000; + ctrlReg = 0x0000; + baudReg = 0x0000; + return 0; +} + +long CALLBACK SIO1close() { + return 0; +} + +/***************************************************************************/ + +void CALLBACK SIO1pause() { +} + +void CALLBACK SIO1resume() { +} + +/***************************************************************************/ + +long CALLBACK SIO1keypressed(int key) { + return 0; +} + +/***************************************************************************/ + +/* Write. + */ + +void CALLBACK SIO1writeData8(u8 data) { +} + +void CALLBACK SIO1writeData16(u16 data) { +} + +void CALLBACK SIO1writeData32(u32 data) { +} + +void CALLBACK SIO1writeStat16(u16 stat) { +} + +void CALLBACK SIO1writeStat32(u32 stat) { + SIO1writeStat16(stat); +} + +void CALLBACK SIO1writeMode16(u16 mode) { + modeReg = mode; +} + +void CALLBACK SIO1writeMode32(u32 mode) { + SIO1writeMode16(mode); +} + +void CALLBACK SIO1writeCtrl16(u16 ctrl) { + u16 ctrlSaved = ctrlReg; + + ctrlReg = ctrl; + + if(ctrlReg & CR_ERRRST) { + ctrlReg &= ~CR_ERRRST; + statReg &= ~(SR_PERROR | SR_OE | SR_FE | SR_IRQ); + } + + if(ctrlReg & CR_RST) { + statReg &= ~SR_IRQ; + statReg |= SR_TXRDY | SR_TXU; + modeReg = 0; + ctrlReg = 0; + baudReg = 0; + } + + if(ctrlReg & CR_TXIEN) { + if(!(statReg & SR_IRQ)) { + irqCallback(); + statReg |= SR_IRQ; + } + } +} + +void CALLBACK SIO1writeCtrl32(u32 ctrl) { + SIO1writeCtrl16(ctrl); +} + +void CALLBACK SIO1writeBaud16(u16 baud) { + baudReg = baud; +} + +void CALLBACK SIO1writeBaud32(u32 baud) { + SIO1writeBaud16(baud); +} + +/* Read. + */ + +u8 CALLBACK SIO1readData8() { + u8 data[1] = {0}; + return *(u8*)data; +} + +u16 CALLBACK SIO1readData16() { + u8 data[2] = {0, 0}; + return *(u16*)data; +} + +u32 CALLBACK SIO1readData32() { + u8 data[4] = {0, 0, 0, 0}; + return *(u32*)data; +} + +u16 CALLBACK SIO1readStat16() { + return statReg; +} + +u32 CALLBACK SIO1readStat32() { + return statReg; +} + +u16 CALLBACK SIO1readMode16() { + return modeReg; +} + +u32 CALLBACK SIO1readMode32() { + return modeReg; +} + +u16 CALLBACK SIO1readCtrl16() { + return ctrlReg; +} + +u32 CALLBACK SIO1readCtrl32() { + return ctrlReg; +} + +u16 CALLBACK SIO1readBaud16() { + return baudReg; +} + +u32 CALLBACK SIO1readBaud32() { + return baudReg; +} + +/***************************************************************************/ + +void CALLBACK SIO1update(uint32_t t) { +} + +void CALLBACK SIO1registerCallback(void (CALLBACK *callback)()) { + irqCallback = callback; +} + +/***************************************************************************/ + +unsigned long CALLBACK PSEgetLibType() { + return PSE_LT_SIO1; +} + +char* CALLBACK PSEgetLibName() { + return pluginName; +} + +unsigned long CALLBACK PSEgetLibVersion() { + return version << 16 | revision << 8 | build; +} + +long CALLBACK SIO1test() { + return 0; +} + +void CALLBACK SIO1about() { +} + +void CALLBACK SIO1configure() { +} + +/***************************************************************************/ diff --git a/plugins/nullsio1/typedefs.h b/plugins/nullsio1/typedefs.h new file mode 100644 index 00000000..452d2b3a --- /dev/null +++ b/plugins/nullsio1/typedefs.h @@ -0,0 +1,35 @@ +/*************************************************************************** + * Copyright (C) 2013 by Blade_Arma <edgbla@yandex.ru> * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * + ***************************************************************************/ + +#ifndef _TYPEDEFS_H_ +#define _TYPEDEFS_H_ + +typedef int8_t s8; +typedef int16_t s16; +typedef int32_t s32; +typedef int64_t s64; +typedef intptr_t sptr; + +typedef uint8_t u8; +typedef uint16_t u16; +typedef uint32_t u32; +typedef uint64_t u64; +typedef uintptr_t uptr; + +#endif // _TYPEDEFS_H_ |
