More PIT cleanups; separated the 8284 (CLK) code off into clk.c.
Moved PIT "handler" fucntions into the machine files. Moved PIT "speaker" function into the snd_speaker.c driver. Removed the PIT "null" handler.
This commit is contained in:
@@ -11,7 +11,7 @@
|
||||
*
|
||||
* **TODO** Merge the various 'add' variants, its getting too messy.
|
||||
*
|
||||
* Version: @(#)device.c 1.0.22 2019/04/21
|
||||
* Version: @(#)device.c 1.0.24 2019/05/05
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -51,6 +51,7 @@
|
||||
#include "device.h"
|
||||
#include "machines/machine.h"
|
||||
#include "devices/sound/sound.h"
|
||||
#include "devices/video/video.h"
|
||||
#include "ui/ui.h"
|
||||
#include "plat.h"
|
||||
|
||||
@@ -392,6 +393,8 @@ device_speed_changed(void)
|
||||
}
|
||||
|
||||
sound_speed_changed();
|
||||
|
||||
video_update_timing();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -79,7 +79,7 @@
|
||||
* FF88 - board model
|
||||
* 3 = PAS16
|
||||
*
|
||||
* Version: @(#)snd_pas16.c 1.0.13 2019/04/25
|
||||
* Version: @(#)snd_pas16.c 1.0.14 2019/05/05
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -119,6 +119,7 @@
|
||||
#include "../../timer.h"
|
||||
#include "../../device.h"
|
||||
#include "../../plat.h"
|
||||
#include "../system/clk.h"
|
||||
#include "../system/dma.h"
|
||||
#include "../system/pic.h"
|
||||
#include "../system/pit.h"
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* Implementation of the PC-Speaker device.
|
||||
*
|
||||
* Version: @(#)snd_speaker.c 1.0.6 2019/02/12
|
||||
* Version: @(#)snd_speaker.c 1.0.7 2019/05/05
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -43,6 +43,7 @@
|
||||
#define dbglog sound_card_log
|
||||
#include "../../emu.h"
|
||||
#include "../system/pit.h"
|
||||
#include "../system/ppi.h"
|
||||
#include "sound.h"
|
||||
#include "snd_speaker.h"
|
||||
|
||||
@@ -60,6 +61,26 @@ static int32_t speaker_buffer[SOUNDBUFLEN];
|
||||
static int speaker_pos;
|
||||
|
||||
|
||||
static void
|
||||
get_buffer(int32_t *buffer, int len, void *p)
|
||||
{
|
||||
int32_t val;
|
||||
int c;
|
||||
|
||||
speaker_update();
|
||||
|
||||
if (! speaker_mute) {
|
||||
for (c = 0; c < len * 2; c++) {
|
||||
val = speaker_buffer[c >> 1];
|
||||
buffer[c++] += val;
|
||||
buffer[c] += val;
|
||||
}
|
||||
}
|
||||
|
||||
speaker_pos = 0;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
speaker_update(void)
|
||||
{
|
||||
@@ -87,23 +108,20 @@ speaker_update(void)
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
get_buffer(int32_t *buffer, int len, void *p)
|
||||
void
|
||||
speaker_timer(int new_out, int old_out)
|
||||
{
|
||||
int32_t val;
|
||||
int c;
|
||||
int64_t l;
|
||||
|
||||
speaker_update();
|
||||
|
||||
if (! speaker_mute) {
|
||||
for (c = 0; c < len * 2; c++) {
|
||||
val = speaker_buffer[c >> 1];
|
||||
buffer[c++] += val;
|
||||
buffer[c] += val;
|
||||
}
|
||||
}
|
||||
|
||||
speaker_pos = 0;
|
||||
l = pit.l[2] ? pit.l[2] : 0x10000LL;
|
||||
if (l < 25LL)
|
||||
speaker_on = 0;
|
||||
else
|
||||
speaker_on = new_out;
|
||||
|
||||
ppispeakon = new_out;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* Definitions for the PC-Speaker driver.
|
||||
*
|
||||
* Version: @(#)snd_speaker.h 1.0.3 2019/02/12
|
||||
* Version: @(#)snd_speaker.h 1.0.4 2019/05/05
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -51,6 +51,7 @@ extern int speaker_val,
|
||||
|
||||
extern void speaker_reset(void);
|
||||
extern void speaker_update(void);
|
||||
extern void speaker_timer(int new_out, int old_out);
|
||||
|
||||
|
||||
#endif /*SOUND_SPEAKER_H*/
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* Implementation of Intel mainboards.
|
||||
*
|
||||
* Version: @(#)intel.c 1.0.10 2019/04/25
|
||||
* Version: @(#)intel.c 1.0.11 2019/05/05
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -49,7 +49,7 @@
|
||||
#include "../../device.h"
|
||||
#include "../../plat.h"
|
||||
#include "intel.h"
|
||||
#include "pit.h"
|
||||
#include "clk.h"
|
||||
|
||||
|
||||
typedef struct {
|
||||
|
||||
@@ -189,7 +189,7 @@
|
||||
* including the later update (DS12887A) which implemented a
|
||||
* "century" register to be compatible with Y2K.
|
||||
*
|
||||
* Version: @(#)nvr_at.c 1.0.18 2019/05/03
|
||||
* Version: @(#)nvr_at.c 1.0.19 2019/05/05
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -234,9 +234,9 @@
|
||||
#include "../../device.h"
|
||||
#include "../../nvr.h"
|
||||
#include "../../plat.h"
|
||||
#include "clk.h"
|
||||
#include "nmi.h"
|
||||
#include "pic.h"
|
||||
#include "pit.h"
|
||||
|
||||
|
||||
/* RTC registers and bit definitions. */
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
* B4 to 40, two writes to 43, then two reads
|
||||
* - value _does_ change!
|
||||
*
|
||||
* Version: @(#)pit.c 1.0.14 2019/04/25
|
||||
* Version: @(#)pit.c 1.0.15 2019/05/05
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -56,32 +56,21 @@
|
||||
#ifdef USE_CASSETTE
|
||||
# include <cassette.h>
|
||||
#endif
|
||||
#include "../video/video.h"
|
||||
#include "clk.h"
|
||||
#include "nmi.h"
|
||||
#include "dma.h"
|
||||
#include "pic.h"
|
||||
#include "pit.h"
|
||||
#include "ppi.h"
|
||||
|
||||
|
||||
PIT pit,
|
||||
pit2;
|
||||
|
||||
float cpuclock;
|
||||
float bus_timing;
|
||||
|
||||
double PITCONST;
|
||||
float CGACONST;
|
||||
float MDACONST;
|
||||
float VGACONST1,
|
||||
VGACONST2;
|
||||
float RTCCONST;
|
||||
|
||||
|
||||
static void
|
||||
set_out(PIT *dev, int t, int out)
|
||||
{
|
||||
dev->set_out_funcs[t](out, dev->out[t]);
|
||||
if (dev->funcs[t])
|
||||
dev->funcs[t](out, dev->out[t]);
|
||||
dev->out[t] = out;
|
||||
}
|
||||
|
||||
@@ -212,19 +201,6 @@ do_over(PIT *dev, int t)
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
pit_clock(PIT *dev, int t)
|
||||
{
|
||||
if (dev->thit[t] || !dev->enabled[t]) return;
|
||||
|
||||
if (dev->using_timer[t]) return;
|
||||
|
||||
dev->count[t] -= (dev->m[t] == 3) ? 2 : 1;
|
||||
if (dev->count[t] == 0)
|
||||
do_over(dev, t);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
timer_over(void *priv)
|
||||
{
|
||||
@@ -504,13 +480,6 @@ pit_read(uint16_t addr, void *priv)
|
||||
}
|
||||
|
||||
|
||||
/* FIXME: should be removed. */
|
||||
static void
|
||||
null_timer(int new_out, int old_out)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
/* FIXME: should be moved to machine.c (default for most machines..) */
|
||||
static void
|
||||
irq0_timer(int new_out, int old_out)
|
||||
@@ -523,24 +492,6 @@ irq0_timer(int new_out, int old_out)
|
||||
}
|
||||
|
||||
|
||||
/* FIXME: should be moved to snd_speaker.c */
|
||||
static void
|
||||
speaker_timer(int new_out, int old_out)
|
||||
{
|
||||
int64_t l;
|
||||
|
||||
speaker_update();
|
||||
|
||||
l = pit.l[2] ? pit.l[2] : 0x10000LL;
|
||||
if (l < 25LL)
|
||||
speaker_on = 0;
|
||||
else
|
||||
speaker_on = new_out;
|
||||
|
||||
ppispeakon = new_out;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
pit_init(void)
|
||||
{
|
||||
@@ -561,12 +512,10 @@ pit_init(void)
|
||||
io_sethandler(0x0040, 4,
|
||||
pit_read,NULL,NULL, pit_write,NULL,NULL, &pit);
|
||||
|
||||
//FIXME: these two should be moved to the machine files!
|
||||
/* Timer0: the TOD clock. */
|
||||
pit_set_out_func(&pit, 0, irq0_timer);
|
||||
|
||||
/* Timer1: unused. */
|
||||
pit_set_out_func(&pit, 1, null_timer);
|
||||
|
||||
/* Timer2: speaker and cassette. */
|
||||
pit_set_out_func(&pit, 2, speaker_timer);
|
||||
pit.gate[2] = 0;
|
||||
@@ -626,14 +575,14 @@ pit_ps2_init(void)
|
||||
void
|
||||
pit_reset(PIT *dev)
|
||||
{
|
||||
void (*old_set_out_funcs[3])(int new_out, int old_out);
|
||||
void (*old_funcs[3])(int new_out, int old_out);
|
||||
PIT_nr old_pit_nr[3];
|
||||
int i;
|
||||
|
||||
memcpy(old_set_out_funcs, dev->set_out_funcs, 3 * sizeof(void *));
|
||||
memcpy(old_funcs, dev->funcs, 3 * sizeof(void *));
|
||||
memcpy(old_pit_nr, dev->pit_nr, 3 * sizeof(PIT_nr));
|
||||
memset(dev, 0, sizeof(PIT));
|
||||
memcpy(dev->set_out_funcs, old_set_out_funcs, 3 * sizeof(void *));
|
||||
memset(dev, 0x00, sizeof(PIT));
|
||||
memcpy(dev->funcs, old_funcs, 3 * sizeof(void *));
|
||||
memcpy(dev->pit_nr, old_pit_nr, 3 * sizeof(PIT_nr));
|
||||
|
||||
for (i = 0; i < 3; i++) {
|
||||
@@ -652,105 +601,16 @@ pit_reset(PIT *dev)
|
||||
}
|
||||
|
||||
|
||||
/* Set default CPU/crystal clock and xt_cpu_multi. */
|
||||
void
|
||||
pit_setclock(uint32_t freq)
|
||||
pit_clock(PIT *dev, int t)
|
||||
{
|
||||
uint32_t speed;
|
||||
if (dev->thit[t] || !dev->enabled[t]) return;
|
||||
|
||||
if (cpu_get_type() >= CPU_286) {
|
||||
/* For 286 and up, this is easy. */
|
||||
cpuclock = (float)freq;
|
||||
PITCONST = cpuclock / 1193182.0;
|
||||
CGACONST = (float) (cpuclock / (19687503.0 / 11.0));
|
||||
xt_cpu_multi = 1;
|
||||
} else {
|
||||
/* Not so much for XT-class systems. */
|
||||
cpuclock = 14318184.0;
|
||||
PITCONST = 12.0;
|
||||
CGACONST = 8.0;
|
||||
xt_cpu_multi = 3;
|
||||
if (dev->using_timer[t]) return;
|
||||
|
||||
/* Get selected CPU's (max) clock rate. */
|
||||
speed = cpu_get_speed();
|
||||
|
||||
switch (speed) {
|
||||
case 7159092: /* 7.16 MHz */
|
||||
if (cpu_get_flags() & CPU_ALTERNATE_XTAL) {
|
||||
cpuclock = 28636368.0;
|
||||
xt_cpu_multi = 4;
|
||||
} else
|
||||
xt_cpu_multi = 2;
|
||||
break;
|
||||
|
||||
case 8000000: /* 8 MHz */
|
||||
case 9545456: /* 9.54 MHz */
|
||||
case 10000000: /* 10 MHz */
|
||||
case 12000000: /* 12 MHz */
|
||||
case 16000000: /* 16 MHz */
|
||||
cpuclock = ((float)speed * xt_cpu_multi);
|
||||
break;
|
||||
|
||||
default:
|
||||
if (cpu_get_flags() & CPU_ALTERNATE_XTAL) {
|
||||
cpuclock = 28636368.0;
|
||||
xt_cpu_multi = 6;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (cpuclock == 28636368.0) {
|
||||
PITCONST = 24.0;
|
||||
CGACONST = 16.0;
|
||||
} else if (cpuclock != 14318184.0) {
|
||||
PITCONST = cpuclock / 1193182.0;
|
||||
CGACONST = (float) (cpuclock / (19687503.0 / 11.0));
|
||||
}
|
||||
}
|
||||
|
||||
xt_cpu_multi <<= TIMER_SHIFT;
|
||||
|
||||
MDACONST = (float) (cpuclock / 2032125.0);
|
||||
VGACONST1 = (float) (cpuclock / 25175000.0);
|
||||
VGACONST2 = (float) (cpuclock / 28322000.0);
|
||||
RTCCONST = (float) (cpuclock / 32768.0);
|
||||
|
||||
TIMER_USEC = (int64_t)((cpuclock / 1000000.0f) * (float)(1 << TIMER_SHIFT));
|
||||
|
||||
bus_timing = (float) (cpuclock / (double)cpu_busspeed);
|
||||
|
||||
INFO("PIT: cpu=%.2f xt=%d PIT=%.2f RTC=%.2f CGA=%.2f MDA=%.2f TMR=%" PRIu64 "\n",
|
||||
cpuclock, xt_cpu_multi, (float)PITCONST, RTCCONST, CGACONST, MDACONST,
|
||||
TIMER_USEC);
|
||||
|
||||
video_update_timing();
|
||||
|
||||
device_speed_changed();
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
clearpit(void)
|
||||
{
|
||||
pit.c[0] = (pit.l[0] << 2);
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
pit_get_timer_0(void)
|
||||
{
|
||||
int r = (int)((pit.c[0] + ((1LL << TIMER_SHIFT) - 1)) / PITCONST) >> TIMER_SHIFT;
|
||||
|
||||
if (pit.m[0] == 2)
|
||||
r++;
|
||||
if (r < 0)
|
||||
r = 0;
|
||||
if (r > 0x10000)
|
||||
r = 0x10000;
|
||||
if (pit.m[0] == 3)
|
||||
r <<= 1;
|
||||
|
||||
return r;
|
||||
dev->count[t] -= (dev->m[t] == 3) ? 2 : 1;
|
||||
if (dev->count[t] == 0)
|
||||
do_over(dev, t);
|
||||
}
|
||||
|
||||
|
||||
@@ -825,37 +685,5 @@ pit_set_using_timer(PIT *dev, int t, int using_timer)
|
||||
void
|
||||
pit_set_out_func(PIT *dev, int t, void (*func)(int new_out, int old_out))
|
||||
{
|
||||
dev->set_out_funcs[t] = func;
|
||||
}
|
||||
|
||||
|
||||
/* FIXME: should be moved to m_pcjr.c */
|
||||
void
|
||||
pit_irq0_timer_pcjr(int new_out, int old_out)
|
||||
{
|
||||
if (new_out && !old_out) {
|
||||
picint(1);
|
||||
pit_clock(&pit, 1);
|
||||
}
|
||||
|
||||
if (! new_out)
|
||||
picintc(1);
|
||||
}
|
||||
|
||||
|
||||
/* FIXME: should be moved to m_xt.c */
|
||||
void
|
||||
pit_refresh_timer_xt(int new_out, int old_out)
|
||||
{
|
||||
if (new_out && !old_out)
|
||||
dma_channel_read(0);
|
||||
}
|
||||
|
||||
|
||||
/* FIXME: should be moved to m_at.c */
|
||||
void
|
||||
pit_refresh_timer_at(int new_out, int old_out)
|
||||
{
|
||||
if (new_out && !old_out)
|
||||
ppi.pb ^= 0x10;
|
||||
dev->funcs[t] = func;
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* Definitions for Intel 8253 timer module.
|
||||
*
|
||||
* Version: @(#)pit.h 1.0.6 2019/02/15
|
||||
* Version: @(#)pit.h 1.0.7 2019/05/05
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -74,21 +74,13 @@ typedef struct PIT {
|
||||
|
||||
PIT_nr pit_nr[3];
|
||||
|
||||
void (*set_out_funcs[3])(int new_out, int old_out);
|
||||
void (*funcs[3])(int new_out, int old_out);
|
||||
} PIT;
|
||||
|
||||
|
||||
extern PIT pit,
|
||||
pit2;
|
||||
|
||||
extern double PITCONST;
|
||||
|
||||
extern float CGACONST,
|
||||
MDACONST,
|
||||
VGACONST1,
|
||||
VGACONST2,
|
||||
RTCCONST;
|
||||
|
||||
|
||||
extern void pit_init(void);
|
||||
extern void pit_ps2_init(void);
|
||||
@@ -96,13 +88,7 @@ extern void pit_reset(PIT *pit);
|
||||
extern void pit_set_gate(PIT *pit, int channel, int gate);
|
||||
extern void pit_set_using_timer(PIT *pit, int t, int using_timer);
|
||||
extern void pit_set_out_func(PIT *pit, int t, void (*func)(int new_out, int old_out));
|
||||
|
||||
extern float pit_timer0_freq(void);
|
||||
extern void pit_irq0_timer_pcjr(int new_out, int old_out);
|
||||
extern void pit_refresh_timer_xt(int new_out, int old_out);
|
||||
extern void pit_refresh_timer_at(int new_out, int old_out);
|
||||
|
||||
extern void pit_setclock(uint32_t freq);
|
||||
extern void pit_clock(PIT *dev, int t);
|
||||
|
||||
|
||||
#endif /*EMU_PIT_H*/
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* Emulation of the old and new IBM CGA graphics cards.
|
||||
*
|
||||
* Version: @(#)vid_cga.c 1.0.17 2019/04/25
|
||||
* Version: @(#)vid_cga.c 1.0.18 2019/05/05
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -50,7 +50,7 @@
|
||||
#include "../../timer.h"
|
||||
#include "../../device.h"
|
||||
#include "../../plat.h"
|
||||
#include "../system/pit.h"
|
||||
#include "../system/clk.h"
|
||||
#include "video.h"
|
||||
#include "vid_cga.h"
|
||||
#include "vid_cga_comp.h"
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* Implementation of CGA used by Compaq PC's.
|
||||
*
|
||||
* Version: @(#)vid_cga_compaq.c 1.0.10 2019/04/25
|
||||
* Version: @(#)vid_cga_compaq.c 1.0.11 2019/05/05
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -49,7 +49,7 @@
|
||||
#include "../../timer.h"
|
||||
#include "../../device.h"
|
||||
#include "../../plat.h"
|
||||
#include "../system/pit.h"
|
||||
#include "../system/clk.h"
|
||||
#include "video.h"
|
||||
#include "vid_cga.h"
|
||||
#include "vid_cga_comp.h"
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* Plantronics ColorPlus emulation.
|
||||
*
|
||||
* Version: @(#)vid_colorplus.c 1.0.15 2019/05/03
|
||||
* Version: @(#)vid_colorplus.c 1.0.16 2019/05/05
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -50,7 +50,7 @@
|
||||
#include "../../timer.h"
|
||||
#include "../../device.h"
|
||||
#include "../../plat.h"
|
||||
#include "../system/pit.h"
|
||||
#include "../system/clk.h"
|
||||
#include "../ports/parallel.h"
|
||||
#include "video.h"
|
||||
#include "vid_cga.h"
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
* Emulation of the EGA, Chips & Technologies SuperEGA, and
|
||||
* AX JEGA graphics cards.
|
||||
*
|
||||
* Version: @(#)vid_ega.c 1.0.18 2019/05/05
|
||||
* Version: @(#)vid_ega.c 1.0.19 2019/05/05
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -50,7 +50,7 @@
|
||||
#include "../../timer.h"
|
||||
#include "../../device.h"
|
||||
#include "../../plat.h"
|
||||
#include "../system/pit.h"
|
||||
#include "../system/clk.h"
|
||||
#include "video.h"
|
||||
#include "vid_ega.h"
|
||||
#include "vid_ega_render.h"
|
||||
|
||||
@@ -63,7 +63,7 @@
|
||||
* reducing the height of characters so they fit in an 8x12 cell
|
||||
* if necessary.
|
||||
*
|
||||
* Version: @(#)vid_genius.c 1.0.14 2019/05/05
|
||||
* Version: @(#)vid_genius.c 1.0.15 2019/05/05
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -103,7 +103,7 @@
|
||||
#include "../../timer.h"
|
||||
#include "../../device.h"
|
||||
#include "../../plat.h"
|
||||
#include "../system/pit.h"
|
||||
#include "../system/clk.h"
|
||||
#include "video.h"
|
||||
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* Hercules emulation.
|
||||
*
|
||||
* Version: @(#)vid_hercules.c 1.0.19 2019/05/03
|
||||
* Version: @(#)vid_hercules.c 1.0.20 2019/05/05
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -50,7 +50,7 @@
|
||||
#include "../../timer.h"
|
||||
#include "../../device.h"
|
||||
#include "../../plat.h"
|
||||
#include "../system/pit.h"
|
||||
#include "../system/clk.h"
|
||||
#include "../ports/parallel.h"
|
||||
#include "video.h"
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* Hercules Plus emulation.
|
||||
*
|
||||
* Version: @(#)vid_hercules_plus.c 1.0.20 2019/05/03
|
||||
* Version: @(#)vid_hercules_plus.c 1.0.21 2019/05/05
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -49,7 +49,7 @@
|
||||
#include "../../timer.h"
|
||||
#include "../../device.h"
|
||||
#include "../../plat.h"
|
||||
#include "../system/pit.h"
|
||||
#include "../system/clk.h"
|
||||
#include "../ports/parallel.h"
|
||||
#include "video.h"
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* Hercules InColor emulation.
|
||||
*
|
||||
* Version: @(#)vid_incolor.c 1.0.18 2019/05/03
|
||||
* Version: @(#)vid_incolor.c 1.0.19 2019/05/05
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -49,7 +49,7 @@
|
||||
#include "../../timer.h"
|
||||
#include "../../device.h"
|
||||
#include "../../plat.h"
|
||||
#include "../system/pit.h"
|
||||
#include "../system/clk.h"
|
||||
#include "../ports/parallel.h"
|
||||
#include "video.h"
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* MDA emulation.
|
||||
*
|
||||
* Version: @(#)vid_mda.c 1.0.15 2019/05/03
|
||||
* Version: @(#)vid_mda.c 1.0.16 2019/05/05
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -49,7 +49,7 @@
|
||||
#include "../../timer.h"
|
||||
#include "../../device.h"
|
||||
#include "../../plat.h"
|
||||
#include "../system/pit.h"
|
||||
#include "../system/clk.h"
|
||||
#include "../ports/parallel.h"
|
||||
#include "video.h"
|
||||
#include "vid_mda.h"
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
* even-numbered columns, so the top bit of the control register
|
||||
* at 0x2D9 is used to adjust the position.
|
||||
*
|
||||
* Version: @(#)vid_sigma.c 1.0.8 2019/05/05
|
||||
* Version: @(#)vid_sigma.c 1.0.9 2019/05/05
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -82,8 +82,8 @@
|
||||
#include "../../timer.h"
|
||||
#include "../../device.h"
|
||||
#include "../../plat.h"
|
||||
#include "../system/clk.h"
|
||||
#include "../system/nmi.h"
|
||||
#include "../system/pit.h"
|
||||
#include "video.h"
|
||||
#include "vid_cga.h"
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
* This is intended to be used by another SVGA driver,
|
||||
* and not as a card in it's own right.
|
||||
*
|
||||
* Version: @(#)vid_svga.c 1.0.21 2019/05/03
|
||||
* Version: @(#)vid_svga.c 1.0.22 2019/05/05
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -52,7 +52,7 @@
|
||||
#include "../../mem.h"
|
||||
#include "../../rom.h"
|
||||
#include "../../timer.h"
|
||||
#include "../system/pit.h"
|
||||
#include "../system/clk.h"
|
||||
#include "video.h"
|
||||
#include "vid_svga.h"
|
||||
#include "vid_svga_render.h"
|
||||
|
||||
@@ -53,7 +53,7 @@
|
||||
* What doesn't work, is untested or not well understood:
|
||||
* - Cursor detach (commands 4 and 5)
|
||||
*
|
||||
* Version: @(#)vid_wy700.c 1.0.11 2019/05/05
|
||||
* Version: @(#)vid_wy700.c 1.0.12 2019/05/05
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -93,7 +93,7 @@
|
||||
#include "../../timer.h"
|
||||
#include "../../device.h"
|
||||
#include "../../plat.h"
|
||||
#include "../system/pit.h"
|
||||
#include "../system/clk.h"
|
||||
#include "video.h"
|
||||
|
||||
|
||||
|
||||
@@ -66,8 +66,8 @@
|
||||
#include "../rom.h"
|
||||
#include "../timer.h"
|
||||
#include "../device.h"
|
||||
#include "../devices/system/clk.h"
|
||||
#include "../devices/system/nmi.h"
|
||||
#include "../devices/system/pit.h"
|
||||
#include "../devices/video/video.h"
|
||||
#include "../devices/video/vid_cga.h"
|
||||
#include "../devices/video/vid_mda.h"
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* Standard PC/AT implementation.
|
||||
*
|
||||
* Version: @(#)m_at.c 1.0.13 2019/04/11
|
||||
* Version: @(#)m_at.c 1.0.14 2019/05/05
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -47,6 +47,7 @@
|
||||
#include "../nvr.h"
|
||||
#include "../devices/system/pic.h"
|
||||
#include "../devices/system/pit.h"
|
||||
#include "../devices/system/ppi.h"
|
||||
#include "../devices/system/dma.h"
|
||||
#include "../devices/input/keyboard.h"
|
||||
#include "../devices/floppy/fdd.h"
|
||||
@@ -60,7 +61,8 @@ m_at_common_init(void)
|
||||
{
|
||||
machine_common_init();
|
||||
|
||||
pit_set_out_func(&pit, 1, pit_refresh_timer_at);
|
||||
pit_set_out_func(&pit, 1, m_at_refresh_timer);
|
||||
|
||||
pic2_init();
|
||||
dma16_init();
|
||||
|
||||
@@ -175,3 +177,12 @@ const device_t m_xt286 = {
|
||||
&xt286_info,
|
||||
NULL
|
||||
};
|
||||
|
||||
|
||||
/* Emulate a DRAM refresh cycle. */
|
||||
void
|
||||
m_at_refresh_timer(int new_out, int old_out)
|
||||
{
|
||||
if (new_out && !old_out)
|
||||
ppi.pb ^= 0x10;
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
* (which is in m_compaq_vid.c), the Portable 3 needs the
|
||||
* Plasma driver, there are some ROM issues, etc.
|
||||
*
|
||||
* Version: @(#)m_compaq.c 1.0.12 2019/05/03
|
||||
* Version: @(#)m_compaq.c 1.0.13 2019/05/05
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -173,7 +173,9 @@ cpq_init(const device_t *info, void *arg)
|
||||
case 0: /* Portable */
|
||||
machine_common_init();
|
||||
nmi_init();
|
||||
pit_set_out_func(&pit, 1, pit_refresh_timer_xt);
|
||||
|
||||
/* Set up our DRAM refresh timer. */
|
||||
pit_set_out_func(&pit, 1, m_xt_refresh_timer);
|
||||
|
||||
device_add(&keyboard_xt_device);
|
||||
parallel_setup(0, 0x03bc);
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
* FIXME: Find a new way to handle the switching of color/mono on
|
||||
* external cards. New video_get_type(int card) function?
|
||||
*
|
||||
* Version: @(#)m_europc.c 1.0.24 2019/05/03
|
||||
* Version: @(#)m_europc.c 1.0.25 2019/05/05
|
||||
*
|
||||
* Author: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
*
|
||||
@@ -724,7 +724,8 @@ europc_init(const device_t *info, void *arg)
|
||||
|
||||
nmi_init();
|
||||
|
||||
pit_set_out_func(&pit, 1, pit_refresh_timer_xt);
|
||||
/* Set up our DRAM refresh timer. */
|
||||
pit_set_out_func(&pit, 1, m_xt_refresh_timer);
|
||||
|
||||
/*
|
||||
* Allocate the system's I/O handlers.
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* Emulation of the Laser XT series of machines.
|
||||
*
|
||||
* Version: @(#)m_laserxt.c 1.0.11 2019/04/20
|
||||
* Version: @(#)m_laserxt.c 1.0.12 2019/05/05
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -187,7 +187,8 @@ laser_init(const device_t *info, void *arg)
|
||||
|
||||
nmi_init();
|
||||
|
||||
pit_set_out_func(&pit, 1, pit_refresh_timer_xt);
|
||||
/* Set up our DRAM refresh timer. */
|
||||
pit_set_out_func(&pit, 1, m_xt_refresh_timer);
|
||||
|
||||
switch(dev->type) {
|
||||
case 0: /* Laser XT */
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* Emulation of the Olivetti M24 built-in video controller.
|
||||
*
|
||||
* Version: @(#)m_olim24_vid.c 1.0.3 2019/04/25
|
||||
* Version: @(#)m_olim24_vid.c 1.0.4 2019/05/05
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -48,7 +48,7 @@
|
||||
#include "../mem.h"
|
||||
#include "../timer.h"
|
||||
#include "../device.h"
|
||||
#include "../devices/system/pit.h"
|
||||
#include "../devices/system/clk.h"
|
||||
#include "../devices/video/video.h"
|
||||
#include "../devices/video/vid_cga.h"
|
||||
#include "machine.h"
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* Emulation of the IBM PCjr.
|
||||
*
|
||||
* Version: @(#)m_pcjr.c 1.0.20 2019/05/03
|
||||
* Version: @(#)m_pcjr.c 1.0.21 2019/05/05
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -49,6 +49,7 @@
|
||||
#include "../mem.h"
|
||||
#include "../timer.h"
|
||||
#include "../device.h"
|
||||
#include "../devices/system/clk.h"
|
||||
#include "../devices/system/nmi.h"
|
||||
#include "../devices/system/pic.h"
|
||||
#include "../devices/system/pit.h"
|
||||
@@ -724,6 +725,19 @@ kbd_adddata_ex(uint16_t val)
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
irq0_timer(int new_out, int old_out)
|
||||
{
|
||||
if (new_out && !old_out) {
|
||||
picint(1);
|
||||
pit_clock(&pit, 1);
|
||||
}
|
||||
|
||||
if (! new_out)
|
||||
picintc(1);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
pcjr_close(void *priv)
|
||||
{
|
||||
@@ -765,13 +779,7 @@ pcjr_init(const device_t *info, UNUSED(void *arg))
|
||||
pic_init();
|
||||
|
||||
pit_init();
|
||||
pit_set_out_func(&pit, 0, pit_irq0_timer_pcjr);
|
||||
|
||||
#if 0
|
||||
// FIXME: already done in machine_reset()
|
||||
(void)cpu_set();
|
||||
pc_set_speed();
|
||||
#endif
|
||||
pit_set_out_func(&pit, 0, irq0_timer);
|
||||
|
||||
nmi_mask = 0x80;
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
* The reserved 384K is remapped to the top of extended memory.
|
||||
* If this is not done then you get an error on startup.
|
||||
*
|
||||
* Version: @(#)m_ps1.c 1.0.27 2019/05/03
|
||||
* Version: @(#)m_ps1.c 1.0.28 2019/05/05
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -593,7 +593,8 @@ ps1_init(const device_t *info, void *arg)
|
||||
|
||||
mem_remap_top(384);
|
||||
|
||||
pit_set_out_func(&pit, 1, pit_refresh_timer_at);
|
||||
/* Set up our DRAM refresh timer. */
|
||||
pit_set_out_func(&pit, 1, m_at_refresh_timer);
|
||||
|
||||
dma16_init();
|
||||
pic2_init();
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* Implementation of ISA-based PS/2 machines.
|
||||
*
|
||||
* Version: @(#)m_ps2_isa.c 1.0.18 2019/04/27
|
||||
* Version: @(#)m_ps2_isa.c 1.0.19 2019/05/05
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -237,7 +237,9 @@ ps2_init(const device_t *info, void *arg)
|
||||
|
||||
machine_common_init();
|
||||
|
||||
pit_set_out_func(&pit, 1, pit_refresh_timer_at);
|
||||
/* Set up our DRAM refresh timer. */
|
||||
pit_set_out_func(&pit, 1, m_at_refresh_timer);
|
||||
|
||||
dma16_init();
|
||||
pic2_init();
|
||||
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
#include "../timer.h"
|
||||
#include "../nvr.h"
|
||||
#include "../device.h"
|
||||
#include "../devices/system/pit.h"
|
||||
#include "../devices/system/clk.h"
|
||||
#include "../devices/video/video.h"
|
||||
#include "../devices/video/vid_cga.h"
|
||||
#include "../devices/video/vid_cga_comp.h"
|
||||
|
||||
@@ -96,7 +96,7 @@
|
||||
*
|
||||
* FIXME: The ROM drive should be re-done using the "option file".
|
||||
*
|
||||
* Version: @(#)m_tosh1x00.c 1.0.21 2019/05/05
|
||||
* Version: @(#)m_tosh1x00.c 1.0.22 2019/05/05
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -1022,7 +1022,8 @@ t1000_init(const device_t *info, void *arg)
|
||||
|
||||
machine_common_init();
|
||||
|
||||
pit_set_out_func(&pit, 1, pit_refresh_timer_xt);
|
||||
/* Set up our DRAM refresh timer. */
|
||||
pit_set_out_func(&pit, 1, m_xt_refresh_timer);
|
||||
|
||||
nmi_init();
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* Implementation of standard IBM PC/XT class machine.
|
||||
*
|
||||
* Version: @(#)m_xt.c 1.0.17 2019/04/13
|
||||
* Version: @(#)m_xt.c 1.0.18 2019/05/05
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -46,6 +46,7 @@
|
||||
#include "../mem.h"
|
||||
#include "../device.h"
|
||||
#include "../devices/system/nmi.h"
|
||||
#include "../devices/system/dma.h"
|
||||
#include "../devices/system/pit.h"
|
||||
#include "../devices/input/keyboard.h"
|
||||
#include "../devices/ports/parallel.h"
|
||||
@@ -87,7 +88,8 @@ xt_common_init(const device_t *info, void *arg)
|
||||
|
||||
nmi_init();
|
||||
|
||||
pit_set_out_func(&pit, 1, pit_refresh_timer_xt);
|
||||
/* Set up the DRAM refresh timer. */
|
||||
pit_set_out_func(&pit, 1, m_xt_refresh_timer);
|
||||
|
||||
switch(dev->type) {
|
||||
case 0: /* PC, 1981 */
|
||||
@@ -351,3 +353,12 @@ const device_t m_xt_juko = {
|
||||
&juko_info,
|
||||
xt_config
|
||||
};
|
||||
|
||||
|
||||
/* Start a DRAM refresh cycle by issuing a DMA read. */
|
||||
void
|
||||
m_xt_refresh_timer(int new_out, int old_out)
|
||||
{
|
||||
if (new_out && !old_out)
|
||||
dma_channel_read(0);
|
||||
}
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
* to be done on implementing other parts of the Yamaha V6355
|
||||
* chip that implements the video controller.
|
||||
*
|
||||
* Version: @(#)m_zenith.c 1.0.6 2019/05/03
|
||||
* Version: @(#)m_zenith.c 1.0.7 2019/05/05
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Original patch for PCem by 'Tux'
|
||||
@@ -355,7 +355,8 @@ zenith_init(const device_t *info, void *arg)
|
||||
|
||||
nmi_init();
|
||||
|
||||
pit_set_out_func(&pit, 1, pit_refresh_timer_xt);
|
||||
/* Set up our DRAM refresh timer. */
|
||||
pit_set_out_func(&pit, 1, m_xt_refresh_timer);
|
||||
|
||||
/* Set up and initialize the Ricoh RP5C15 RTC. */
|
||||
dev->nvr.size = 64;
|
||||
|
||||
@@ -264,6 +264,9 @@ extern const char *machine_get_config_string(const char *s);
|
||||
extern void machine_common_init(void);
|
||||
|
||||
/* Functions shared by other machines. */
|
||||
extern void m_xt_refresh_timer(int new_out, int old_out);
|
||||
|
||||
extern void m_at_refresh_timer(int new_out, int old_out);
|
||||
extern void m_at_common_init(void);
|
||||
extern void m_at_init(void);
|
||||
extern void m_at_common_ide_init(void);
|
||||
|
||||
10
src/pc.c
10
src/pc.c
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* Main emulator module where most things are controlled.
|
||||
*
|
||||
* Version: @(#)pc.c 1.0.74 2019/05/02
|
||||
* Version: @(#)pc.c 1.0.75 2019/05/05
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -56,9 +56,9 @@
|
||||
#include "io.h"
|
||||
#include "mem.h"
|
||||
#include "rom.h"
|
||||
#include "devices/system/clk.h"
|
||||
#include "devices/system/dma.h"
|
||||
#include "devices/system/pic.h"
|
||||
#include "devices/system/pit.h"
|
||||
#include "random.h"
|
||||
#include "timer.h"
|
||||
#include "device.h"
|
||||
@@ -1199,7 +1199,7 @@ pc_set_speed(int turbo)
|
||||
|
||||
if (cpu_get_type() >= CPU_286) {
|
||||
/* For 286+, we are done. */
|
||||
pit_setclock(speed);
|
||||
clk_setup(speed);
|
||||
} else {
|
||||
/*
|
||||
* Not so easy for PC and XT class machines.
|
||||
@@ -1210,9 +1210,9 @@ pc_set_speed(int turbo)
|
||||
* much all cases, the original 4.77MHz setting.
|
||||
*/
|
||||
if (turbo)
|
||||
pit_setclock(14318184); // speed * xt_multi ?
|
||||
clk_setup(14318184); // speed * xt_multi ?
|
||||
else
|
||||
pit_setclock(14318184);
|
||||
clk_setup(14318184);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
#
|
||||
# Makefile for Windows systems using the MinGW32 environment.
|
||||
#
|
||||
# Version: @(#)Makefile.mingw 1.0.85 2019/05/02
|
||||
# Version: @(#)Makefile.mingw 1.0.86 2019/05/05
|
||||
#
|
||||
# Author: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
#
|
||||
@@ -721,8 +721,8 @@ CPUOBJ := cpu.o cpu_table.o \
|
||||
808x.o 386.o x86seg.o x87.o \
|
||||
386_dynarec.o $(DYNARECOBJ)
|
||||
|
||||
SYSOBJ := dma.o nmi.o pic.o pit.o ppi.o pci.o mca.o mcr.o \
|
||||
memregs.o nvr_at.o nvr_ps2.o
|
||||
SYSOBJ := clk.o dma.o nmi.o pic.o pit.o ppi.o pci.o mca.o \
|
||||
mcr.o memregs.o nvr_at.o nvr_ps2.o
|
||||
|
||||
CHIPOBJ := neat.o scat.o headland.o \
|
||||
acc2168.o ali1429.o opti495.o sis471.o sis496.o \
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
#
|
||||
# Makefile for Windows using Visual Studio 2015.
|
||||
#
|
||||
# Version: @(#)Makefile.VC 1.0.69 2019/05/05
|
||||
# Version: @(#)Makefile.VC 1.0.70 2019/05/05
|
||||
#
|
||||
# Author: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
#
|
||||
@@ -630,8 +630,8 @@ CPUOBJ := cpu.obj cpu_table.obj \
|
||||
808x.obj 386.obj x86seg.obj x87.obj \
|
||||
386_dynarec.obj $(DYNARECOBJ)
|
||||
|
||||
SYSOBJ := dma.obj nmi.obj pic.obj pit.obj ppi.obj pci.obj mca.obj \
|
||||
mcr.obj memregs.obj nvr_at.obj nvr_ps2.obj
|
||||
SYSOBJ := clk.obj dma.obj nmi.obj pic.obj pit.obj ppi.obj pci.obj \
|
||||
mca.obj mcr.obj memregs.obj nvr_at.obj nvr_ps2.obj
|
||||
|
||||
CHIPOBJ := neat.obj scat.obj headland.obj \
|
||||
acc2168.obj ali1429.obj opti495.obj sis471.obj sis496.obj \
|
||||
|
||||
Reference in New Issue
Block a user