From 4b6d80d085b9cf703260d32a22731462f52fd2b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Hrdli=C4=8Dka?= Date: Tue, 7 Jul 2020 01:21:52 +0200 Subject: [PATCH 1/5] Create FUNDING.yml --- .github/FUNDING.yml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 .github/FUNDING.yml diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 000000000..3a15916d4 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,2 @@ +patreon: 86box +custom: ["https://paypal.me/86Box"] From 8d65beaec687289207154189be82ca38d188eeee Mon Sep 17 00:00:00 2001 From: OBattler Date: Tue, 7 Jul 2020 02:37:35 +0200 Subject: [PATCH 2/5] Added Patreon link to README.md. --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 977ab598d..080e2d1c9 100644 --- a/README.md +++ b/README.md @@ -54,3 +54,6 @@ Donations --------- We do not charge you for the emulator but donations are still welcome: https://paypal.me/86Box. + +You can now also support the project on Pateron: +https://www.patreon.com/86box. From ebe7f1cdf3248fb38606450f9cc0d3e99f1ade65 Mon Sep 17 00:00:00 2001 From: tiseno100 <58827426+tiseno100@users.noreply.github.com> Date: Tue, 7 Jul 2020 16:36:44 +0300 Subject: [PATCH 3/5] Rewrote the OPTi 283 shadowing Now it'll pass a check to see if we are write protecting or have write enabled. --- src/chipset/opti283.c | 72 ++++++++++++++++++++----------------------- 1 file changed, 34 insertions(+), 38 deletions(-) diff --git a/src/chipset/opti283.c b/src/chipset/opti283.c index a4dad3d29..f90fe2687 100644 --- a/src/chipset/opti283.c +++ b/src/chipset/opti283.c @@ -35,6 +35,9 @@ #include <86box/port_92.h> #include <86box/chipset.h> +#define disabled_shadow (MEM_READ_EXTANY | MEM_WRITE_EXTANY) + + typedef struct { uint8_t index, @@ -43,54 +46,46 @@ typedef struct static void opti283_shadow_recalc(opti283_t *dev) { -uint32_t base; -uint32_t shflags, i = 0; +uint32_t base, i; +uint32_t shflagsc, shflagsd, shflagse, shflagsf; -shadowbios = 0; -shadowbios_write = 0; +shadowbios = !(dev->regs[0x11] & 0x80); +shadowbios_write = (dev->regs[0x11] & 0x80); + +if(dev->regs[0x11] & 0x10){ + shflagsc = MEM_READ_INTERNAL; + shflagsc |= (dev->regs[0x11] & 0x08) ? MEM_WRITE_INTERNAL : MEM_WRITE_EXTANY; +} else shflagsc = disabled_shadow; + +if(dev->regs[0x11] & 0x20){ + shflagsd = MEM_READ_INTERNAL; + shflagsd |= (dev->regs[0x11] & 0x08) ? MEM_WRITE_INTERNAL : MEM_WRITE_EXTANY; +} else shflagsd = disabled_shadow; + +if(dev->regs[0x11] & 0x40){ + shflagse = MEM_READ_INTERNAL; + shflagse |= (dev->regs[0x11] & 0x08) ? MEM_WRITE_INTERNAL : MEM_WRITE_EXTANY; +} else shflagse = disabled_shadow; - /* F0000 - FFFFF segmentation */ if(!(dev->regs[0x11] & 0x80)){ - shadowbios = 1; - shadowbios_write = 0; - mem_set_mem_state(0xf0000, 0x10000, MEM_READ_INTERNAL | MEM_WRITE_DISABLED); -} else { - shadowbios = 0; - shadowbios_write = 1; - mem_set_mem_state(0xf0000, 0x10000, MEM_READ_EXTANY | MEM_WRITE_INTERNAL); -} + shflagsf = MEM_READ_INTERNAL | MEM_WRITE_DISABLED; +} else shflagsf = MEM_READ_EXTANY | MEM_WRITE_INTERNAL; + +mem_set_mem_state_both(0xf0000, 0x10000, shflagsf); - /* C0000 - CFFFF segmentation */ for(i = 4; i < 8; i++){ - base = 0xc0000 + ((i-4) << 14); - - if((dev->regs[0x13] & (1 << i)) & (dev->regs[0x11] & 0x10)){ - shflags = MEM_READ_INTERNAL; - shflags |= (!(dev->regs[0x11] & 0x01)) ? MEM_WRITE_INTERNAL : MEM_WRITE_DISABLED; - mem_set_mem_state_both(base, 0x4000, shflags); - } else { - mem_set_mem_state_both(base, 0x4000, MEM_READ_EXTANY | MEM_WRITE_EXTANY); -} +base = 0xc0000 + ((i-4) << 14); +mem_set_mem_state_both(base, 0x4000, (dev->regs[0x13] & (1 << i)) ? shflagsc : disabled_shadow); } - /* D0000 - DFFFF segmentation */ for(i = 0; i < 4; i++){ - base = 0xd0000 + (i << 14); - if((dev->regs[0x12] & (1 << i)) & (dev->regs[0x11] & 0x20)){ - shflags = MEM_READ_INTERNAL; - shflags |= (!(dev->regs[0x11] & 0x02)) ? MEM_WRITE_INTERNAL : MEM_WRITE_DISABLED; - mem_set_mem_state(base, 0x4000, shflags); - } else mem_set_mem_state(base, 0x4000, MEM_READ_EXTANY | MEM_WRITE_EXTANY); +base = 0xc0000 + (i << 14); +mem_set_mem_state_both(base, 0x4000, (dev->regs[0x12] & (1 << i)) ? shflagsd : disabled_shadow); } - /* E0000 - EFFFF segmentation */ for(i = 4; i < 8; i++){ - base = 0xe0000 + ((i-4) << 14); - if((dev->regs[0x12] & (1 << i)) & (dev->regs[0x11] & 0x40)){ - shflags = MEM_READ_INTERNAL; - shflags |= (!(dev->regs[0x11] & 0x04)) ? MEM_WRITE_INTERNAL : MEM_WRITE_DISABLED; - mem_set_mem_state(base, 0x4000, shflags); - } else mem_set_mem_state(base, 0x4000, MEM_READ_EXTANY | MEM_WRITE_EXTANY); +base = 0xe0000 + ((i-4) << 14); +mem_set_mem_state_both(base, 0x4000, (dev->regs[0x12] & (1 << i)) ? shflagse : disabled_shadow); } } @@ -105,12 +100,13 @@ opti283_write(uint16_t addr, uint8_t val, void *priv) dev->index = val; break; case 0x24: - /*pclog("OPTi 283: dev->regs[%02x] = %02x\n", dev->index, val);*/ + pclog("OPTi 283: dev->regs[%02x] = %02x\n", dev->index, val); dev->regs[dev->index] = val; switch(dev->index){ case 0x10: cpu_update_waitstates(); + break; case 0x11: case 0x12: From 2137c4ea85a885180831ea01e2adc42198913143 Mon Sep 17 00:00:00 2001 From: tiseno100 <58827426+tiseno100@users.noreply.github.com> Date: Tue, 7 Jul 2020 16:38:10 +0300 Subject: [PATCH 4/5] Fixed a minor mistake --- src/chipset/opti283.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/chipset/opti283.c b/src/chipset/opti283.c index f90fe2687..c0f73e4d1 100644 --- a/src/chipset/opti283.c +++ b/src/chipset/opti283.c @@ -79,7 +79,7 @@ mem_set_mem_state_both(base, 0x4000, (dev->regs[0x13] & (1 << i)) ? shflagsc : d } for(i = 0; i < 4; i++){ -base = 0xc0000 + (i << 14); +base = 0xd0000 + (i << 14); mem_set_mem_state_both(base, 0x4000, (dev->regs[0x12] & (1 << i)) ? shflagsd : disabled_shadow); } From 91d7dd149a7b8ee6c33c8ab6fb7093bdca27f81f Mon Sep 17 00:00:00 2001 From: tiseno100 <58827426+tiseno100@users.noreply.github.com> Date: Tue, 7 Jul 2020 16:40:07 +0300 Subject: [PATCH 5/5] Commented the OPTi 283 logging code back --- src/chipset/opti283.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/chipset/opti283.c b/src/chipset/opti283.c index c0f73e4d1..c0950e563 100644 --- a/src/chipset/opti283.c +++ b/src/chipset/opti283.c @@ -100,7 +100,7 @@ opti283_write(uint16_t addr, uint8_t val, void *priv) dev->index = val; break; case 0x24: - pclog("OPTi 283: dev->regs[%02x] = %02x\n", dev->index, val); + /* pclog("OPTi 283: dev->regs[%02x] = %02x\n", dev->index, val); */ dev->regs[dev->index] = val; switch(dev->index){