From ff39a77afcbd2808a7e019f565cb8538ed2ffa9f Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Wed, 27 Jul 2022 15:17:53 -0400 Subject: [PATCH] clang-format in src/machine --- src/machine/m_amstrad.c | 2820 ++++++++++++++++----------------- src/machine/m_at.c | 64 +- src/machine/m_at_286_386sx.c | 289 ++-- src/machine/m_at_386dx_486.c | 426 +++-- src/machine/m_at_commodore.c | 46 +- src/machine/m_at_compaq.c | 984 ++++++------ src/machine/m_at_misc.c | 4 +- src/machine/m_at_slot1.c | 152 +- src/machine/m_at_slot2.c | 28 +- src/machine/m_at_socket370.c | 89 +- src/machine/m_at_socket4.c | 74 +- src/machine/m_at_socket5.c | 74 +- src/machine/m_at_socket7.c | 251 ++- src/machine/m_at_socket7_3v.c | 100 +- src/machine/m_at_socket8.c | 57 +- src/machine/m_at_sockets7.c | 58 +- src/machine/m_at_t3100e.c | 936 +++++------ src/machine/m_at_t3100e_vid.c | 1135 +++++++------ src/machine/m_europc.c | 532 +++---- src/machine/m_pcjr.c | 1094 ++++++------- src/machine/m_ps1.c | 334 ++-- src/machine/m_ps1_hdc.c | 1403 ++++++++-------- src/machine/m_ps2_isa.c | 49 +- src/machine/m_ps2_mca.c | 2200 +++++++++++++------------ src/machine/m_tandy.c | 1610 +++++++++---------- src/machine/m_v86p.c | 64 +- src/machine/m_xt.c | 207 ++- src/machine/m_xt_compaq.c | 15 +- src/machine/m_xt_laserxt.c | 206 +-- src/machine/m_xt_olivetti.c | 704 ++++---- src/machine/m_xt_philips.c | 79 +- src/machine/m_xt_t1000.c | 742 ++++----- src/machine/m_xt_t1000_vid.c | 1164 +++++++------- src/machine/m_xt_xi8088.c | 96 +- src/machine/m_xt_zenith.c | 63 +- src/machine/machine_table.c | 6 +- 36 files changed, 8750 insertions(+), 9405 deletions(-) diff --git a/src/machine/m_amstrad.c b/src/machine/m_amstrad.c index 3b0235d51..5dc82226d 100644 --- a/src/machine/m_amstrad.c +++ b/src/machine/m_amstrad.c @@ -75,110 +75,104 @@ #include <86box/machine.h> #include <86box/m_amstrad.h> - -#define STAT_PARITY 0x80 -#define STAT_RTIMEOUT 0x40 -#define STAT_TTIMEOUT 0x20 -#define STAT_LOCK 0x10 -#define STAT_CD 0x08 -#define STAT_SYSFLAG 0x04 -#define STAT_IFULL 0x02 -#define STAT_OFULL 0x01 - +#define STAT_PARITY 0x80 +#define STAT_RTIMEOUT 0x40 +#define STAT_TTIMEOUT 0x20 +#define STAT_LOCK 0x10 +#define STAT_CD 0x08 +#define STAT_SYSFLAG 0x04 +#define STAT_IFULL 0x02 +#define STAT_OFULL 0x01 typedef struct { - rom_t bios_rom; /* 1640 */ - cga_t cga; /* 1640/200 */ - mda_t mda; /* 1512/200/PPC512/640*/ - ega_t ega; /* 1640 */ - uint8_t emulation; /* Which display are we emulating? */ - uint8_t dipswitches; /* DIP switches 1-3 */ - uint8_t crtc_index; /* CRTC index readback - * Bit 7: CGA control port written - * Bit 6: Operation control port written - * Bit 5: CRTC register written - * Bits 0-4: Last CRTC register selected */ - uint8_t operation_ctrl; - uint8_t reg_3df, type; - uint8_t crtc[32]; - int crtcreg; - int cga_enabled; /* 1640 */ - uint8_t cgacol, - cgamode, - stat; - uint8_t plane_write, /* 1512/200 */ - plane_read, /* 1512/200 */ - border, /* 1512/200 */ - invert; /* 512/640 */ - int fontbase; /* 1512/200 */ - int linepos, - displine; - int sc, vc; - int cgadispon; - int con, coff, - cursoron, - cgablink; - int vsynctime; - int fullchange; - int vadj; - uint16_t ma, maback; - int dispon; - int blink; - uint64_t dispontime, /* 1512/1640 */ - dispofftime; /* 1512/1640 */ - pc_timer_t timer; /* 1512/1640 */ - int firstline, - lastline; - uint8_t *vram; - void *ams; + rom_t bios_rom; /* 1640 */ + cga_t cga; /* 1640/200 */ + mda_t mda; /* 1512/200/PPC512/640*/ + ega_t ega; /* 1640 */ + uint8_t emulation; /* Which display are we emulating? */ + uint8_t dipswitches; /* DIP switches 1-3 */ + uint8_t crtc_index; /* CRTC index readback + * Bit 7: CGA control port written + * Bit 6: Operation control port written + * Bit 5: CRTC register written + * Bits 0-4: Last CRTC register selected */ + uint8_t operation_ctrl; + uint8_t reg_3df, type; + uint8_t crtc[32]; + int crtcreg; + int cga_enabled; /* 1640 */ + uint8_t cgacol, + cgamode, + stat; + uint8_t plane_write, /* 1512/200 */ + plane_read, /* 1512/200 */ + border, /* 1512/200 */ + invert; /* 512/640 */ + int fontbase; /* 1512/200 */ + int linepos, + displine; + int sc, vc; + int cgadispon; + int con, coff, + cursoron, + cgablink; + int vsynctime; + int fullchange; + int vadj; + uint16_t ma, maback; + int dispon; + int blink; + uint64_t dispontime, /* 1512/1640 */ + dispofftime; /* 1512/1640 */ + pc_timer_t timer; /* 1512/1640 */ + int firstline, + lastline; + uint8_t *vram; + void *ams; } amsvid_t; typedef struct { /* Machine stuff. */ - uint8_t dead; - uint8_t stat1, - stat2; - uint8_t type, - language; + uint8_t dead; + uint8_t stat1, + stat2; + uint8_t type, + language; /* Keyboard stuff. */ - int8_t wantirq; - uint8_t key_waiting; - uint8_t pa; - uint8_t pb; - pc_timer_t send_delay_timer; + int8_t wantirq; + uint8_t key_waiting; + uint8_t pa; + uint8_t pb; + pc_timer_t send_delay_timer; /* Mouse stuff. */ - uint8_t mousex, - mousey; - int oldb; + uint8_t mousex, + mousey; + int oldb; /* Video stuff. */ - amsvid_t *vid; - fdc_t *fdc; + amsvid_t *vid; + fdc_t *fdc; } amstrad_t; +int amstrad_latch; -int amstrad_latch; - - -static uint8_t key_queue[16]; -static int key_queue_start = 0, - key_queue_end = 0; -static uint8_t crtc_mask[32] = { - 0xff, 0xff, 0xff, 0xff, 0x7f, 0x1f, 0x7f, 0x7f, - 0xf3, 0x1f, 0x7f, 0x1f, 0x3f, 0xff, 0x3f, 0xff, - 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +static uint8_t key_queue[16]; +static int key_queue_start = 0, + key_queue_end = 0; +static uint8_t crtc_mask[32] = { + 0xff, 0xff, 0xff, 0xff, 0x7f, 0x1f, 0x7f, 0x7f, + 0xf3, 0x1f, 0x7f, 0x1f, 0x3f, 0xff, 0x3f, 0xff, + 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -static video_timings_t timing_pc1512 = {VIDEO_BUS, 0,0,0, 0,0,0}; /*PC1512 video code handles waitstates itself*/ -static video_timings_t timing_pc1640 = {VIDEO_ISA, 8,16,32, 8,16,32}; -static video_timings_t timing_pc200 = {VIDEO_ISA, 8,16,32, 8,16,32}; +static video_timings_t timing_pc1512 = { VIDEO_BUS, 0, 0, 0, 0, 0, 0 }; /*PC1512 video code handles waitstates itself*/ +static video_timings_t timing_pc1640 = { VIDEO_ISA, 8, 16, 32, 8, 16, 32 }; +static video_timings_t timing_pc200 = { VIDEO_ISA, 8, 16, 32, 8, 16, 32 }; - -enum -{ +enum { AMS_PC1512, AMS_PC1640, AMS_PC200, @@ -187,458 +181,433 @@ enum AMS_PC3086 }; - #ifdef ENABLE_AMSTRAD_LOG int amstrad_do_log = ENABLE_AMSTRAD_LOG; - static void amstrad_log(const char *fmt, ...) { - va_list ap; + va_list ap; - if (amstrad_do_log) - { - va_start(ap, fmt); - pclog_ex(fmt, ap); - va_end(ap); - } + if (amstrad_do_log) { + va_start(ap, fmt); + pclog_ex(fmt, ap); + va_end(ap); + } } #else -#define amstrad_log(fmt, ...) +# define amstrad_log(fmt, ...) #endif - static void recalc_timings_1512(amsvid_t *vid) { double _dispontime, _dispofftime, disptime; - disptime = /*128*/ 114; /*Fixed on PC1512*/ - _dispontime = 80; + disptime = /*128*/ 114; /*Fixed on PC1512*/ + _dispontime = 80; _dispofftime = disptime - _dispontime; - _dispontime *= CGACONST; + _dispontime *= CGACONST; _dispofftime *= CGACONST; - vid->dispontime = (uint64_t)_dispontime; - vid->dispofftime = (uint64_t)_dispofftime; + vid->dispontime = (uint64_t) _dispontime; + vid->dispofftime = (uint64_t) _dispofftime; } - static void vid_out_1512(uint16_t addr, uint8_t val, void *priv) { - amsvid_t *vid = (amsvid_t *)priv; - uint8_t old; + amsvid_t *vid = (amsvid_t *) priv; + uint8_t old; if ((addr >= 0x3d0) && (addr <= 0x3d7)) - addr = (addr & 0xff9) | 0x004; + addr = (addr & 0xff9) | 0x004; switch (addr) { - case 0x03d4: - vid->crtcreg = val & 31; - return; + case 0x03d4: + vid->crtcreg = val & 31; + return; - case 0x03d5: - old = vid->crtc[vid->crtcreg]; - vid->crtc[vid->crtcreg] = val & crtc_mask[vid->crtcreg]; - if (old != val) { - if (vid->crtcreg < 0xe || vid->crtcreg > 0x10) { - vid->fullchange = changeframecount; - recalc_timings_1512(vid); - } - } - return; + case 0x03d5: + old = vid->crtc[vid->crtcreg]; + vid->crtc[vid->crtcreg] = val & crtc_mask[vid->crtcreg]; + if (old != val) { + if (vid->crtcreg < 0xe || vid->crtcreg > 0x10) { + vid->fullchange = changeframecount; + recalc_timings_1512(vid); + } + } + return; - case 0x03d8: - if ((val & 0x12) == 0x12 && (vid->cgamode & 0x12) != 0x12) { - vid->plane_write = 0xf; - vid->plane_read = 0; - } - vid->cgamode = val; - return; + case 0x03d8: + if ((val & 0x12) == 0x12 && (vid->cgamode & 0x12) != 0x12) { + vid->plane_write = 0xf; + vid->plane_read = 0; + } + vid->cgamode = val; + return; - case 0x03d9: - vid->cgacol = val; - return; + case 0x03d9: + vid->cgacol = val; + return; - case 0x03dd: - vid->plane_write = val; - return; + case 0x03dd: + vid->plane_write = val; + return; - case 0x03de: - vid->plane_read = val & 3; - return; + case 0x03de: + vid->plane_read = val & 3; + return; - case 0x03df: - vid->border = val; - return; + case 0x03df: + vid->border = val; + return; } } - static uint8_t vid_in_1512(uint16_t addr, void *priv) { - amsvid_t *vid = (amsvid_t *)priv; - uint8_t ret = 0xff; + amsvid_t *vid = (amsvid_t *) priv; + uint8_t ret = 0xff; if ((addr >= 0x3d0) && (addr <= 0x3d7)) - addr = (addr & 0xff9) | 0x004; + addr = (addr & 0xff9) | 0x004; switch (addr) { - case 0x03d4: - ret = vid->crtcreg; - break; + case 0x03d4: + ret = vid->crtcreg; + break; - case 0x03d5: - ret = vid->crtc[vid->crtcreg]; - break; + case 0x03d5: + ret = vid->crtc[vid->crtcreg]; + break; - case 0x03da: - ret = vid->stat; - break; + case 0x03da: + ret = vid->stat; + break; } - return(ret); + return (ret); } - static void vid_write_1512(uint32_t addr, uint8_t val, void *priv) { - amsvid_t *vid = (amsvid_t *)priv; + amsvid_t *vid = (amsvid_t *) priv; cycles -= 12; addr &= 0x3fff; if ((vid->cgamode & 0x12) == 0x12) { - if (vid->plane_write & 1) vid->vram[addr] = val; - if (vid->plane_write & 2) vid->vram[addr | 0x4000] = val; - if (vid->plane_write & 4) vid->vram[addr | 0x8000] = val; - if (vid->plane_write & 8) vid->vram[addr | 0xc000] = val; + if (vid->plane_write & 1) + vid->vram[addr] = val; + if (vid->plane_write & 2) + vid->vram[addr | 0x4000] = val; + if (vid->plane_write & 4) + vid->vram[addr | 0x8000] = val; + if (vid->plane_write & 8) + vid->vram[addr | 0xc000] = val; } else - vid->vram[addr] = val; + vid->vram[addr] = val; } - static uint8_t vid_read_1512(uint32_t addr, void *priv) { - amsvid_t *vid = (amsvid_t *)priv; + amsvid_t *vid = (amsvid_t *) priv; cycles -= 12; addr &= 0x3fff; if ((vid->cgamode & 0x12) == 0x12) - return(vid->vram[addr | (vid->plane_read << 14)]); + return (vid->vram[addr | (vid->plane_read << 14)]); - return(vid->vram[addr]); + return (vid->vram[addr]); } - static void vid_poll_1512(void *priv) { - amsvid_t *vid = (amsvid_t *)priv; - uint16_t ca = (vid->crtc[15] | (vid->crtc[14] << 8)) & 0x3fff; - int drawcursor; - int x, c, xs_temp, ys_temp; - uint8_t chr, attr; - uint16_t dat, dat2, dat3, dat4; - int cols[4]; - int col; - int oldsc; + amsvid_t *vid = (amsvid_t *) priv; + uint16_t ca = (vid->crtc[15] | (vid->crtc[14] << 8)) & 0x3fff; + int drawcursor; + int x, c, xs_temp, ys_temp; + uint8_t chr, attr; + uint16_t dat, dat2, dat3, dat4; + int cols[4]; + int col; + int oldsc; - if (! vid->linepos) { - timer_advance_u64(&vid->timer, vid->dispofftime); - vid->stat |= 1; - vid->linepos = 1; - oldsc = vid->sc; - if (vid->dispon) { - if (vid->displine < vid->firstline) { - vid->firstline = vid->displine; - video_wait_for_buffer(); - } - vid->lastline = vid->displine; - for (c = 0; c < 8; c++) { - if ((vid->cgamode & 0x12) == 0x12) { - buffer32->line[(vid->displine << 1)][c] = buffer32->line[(vid->displine << 1) + 1][c] = (vid->border & 15) + 16; - if (vid->cgamode & 1) { - buffer32->line[(vid->displine << 1)][c + (vid->crtc[1] << 3) + 8] = - buffer32->line[(vid->displine << 1) + 1][c + (vid->crtc[1] << 3) + 8] = 0; - } else { - buffer32->line[(vid->displine << 1)][c + (vid->crtc[1] << 4) + 8] = - buffer32->line[(vid->displine << 1)+ 1][c + (vid->crtc[1] << 4) + 8] = 0; - } - } else { - buffer32->line[(vid->displine << 1)][c] = buffer32->line[(vid->displine << 1) + 1][c] = (vid->cgacol & 15) + 16; - if (vid->cgamode & 1) { - buffer32->line[(vid->displine << 1)][c + (vid->crtc[1] << 3) + 8] = - buffer32->line[(vid->displine << 1) + 1][c + (vid->crtc[1] << 3) + 8] = (vid->cgacol & 15) + 16; - } else { - buffer32->line[(vid->displine << 1)][c + (vid->crtc[1] << 4) + 8] = - buffer32->line[(vid->displine << 1) + 1][c + (vid->crtc[1] << 4) + 8] = (vid->cgacol & 15) + 16; - } - } - } - if (vid->cgamode & 1) { - for (x = 0; x < 80; x++) { - chr = vid->vram[ ((vid->ma << 1) & 0x3fff)]; - attr = vid->vram[(((vid->ma << 1) + 1) & 0x3fff)]; - drawcursor = ((vid->ma == ca) && vid->con && vid->cursoron); - if (vid->cgamode & 0x20) { - cols[1] = (attr & 15) + 16; - cols[0] = ((attr >> 4) & 7) + 16; - if ((vid->blink & 16) && (attr & 0x80) && !drawcursor) - cols[1] = cols[0]; - } else { - cols[1] = (attr & 15) + 16; - cols[0] = (attr >> 4) + 16; - } - if (drawcursor) { - for (c = 0; c < 8; c++) { - buffer32->line[(vid->displine << 1)][(x << 3) + c + 8] = - buffer32->line[(vid->displine << 1) + 1][(x << 3) + c + 8] = - cols[(fontdat[vid->fontbase + chr][vid->sc & 7] & (1 << (c ^ 7))) ? 1 : 0] ^ 15; - } - } else { - for (c = 0; c < 8; c++) { - buffer32->line[(vid->displine << 1)][(x << 3) + c + 8] = - buffer32->line[(vid->displine << 1) + 1][(x << 3) + c + 8] = - cols[(fontdat[vid->fontbase + chr][vid->sc & 7] & (1 << (c ^ 7))) ? 1 : 0]; - } - } - vid->ma++; - } - } else if (! (vid->cgamode & 2)) { - for (x = 0; x < 40; x++) { - chr = vid->vram[((vid->ma << 1) & 0x3fff)]; - attr = vid->vram[(((vid->ma << 1) + 1) & 0x3fff)]; - drawcursor = ((vid->ma == ca) && vid->con && vid->cursoron); - if (vid->cgamode & 0x20) { - cols[1] = (attr & 15) + 16; - cols[0] = ((attr >> 4) & 7) + 16; - if ((vid->blink & 16) && (attr & 0x80)) - cols[1] = cols[0]; - } else { - cols[1] = (attr & 15) + 16; - cols[0] = (attr >> 4) + 16; - } - vid->ma++; - if (drawcursor) { - for (c = 0; c < 8; c++) { - buffer32->line[(vid->displine << 1)][(x << 4) + (c << 1) + 8] = - buffer32->line[(vid->displine << 1)][(x << 4) + (c << 1) + 1 + 8] = - buffer32->line[(vid->displine << 1) + 1][(x << 4) + (c << 1) + 8] = - buffer32->line[(vid->displine << 1) + 1][(x << 4) + (c << 1) + 1 + 8] = - cols[(fontdat[vid->fontbase + chr][vid->sc & 7] & (1 << (c ^ 7))) ? 1 : 0] ^ 15; - } - } else { - for (c = 0; c < 8; c++) { - buffer32->line[(vid->displine << 1)][(x << 4) + (c << 1) + 8] = - buffer32->line[(vid->displine << 1)][(x << 4) + (c << 1) + 1 + 8] = - buffer32->line[(vid->displine << 1) + 1][(x << 4) + (c << 1) + 8] = - buffer32->line[(vid->displine << 1) + 1][(x << 4) + (c << 1) + 1 + 8] = - cols[(fontdat[vid->fontbase + chr][vid->sc & 7] & (1 << (c ^ 7))) ? 1 : 0]; - } - } - } - } else if (! (vid->cgamode & 16)) { - cols[0] = (vid->cgacol & 15) | 16; - col = (vid->cgacol & 16) ? 24 : 16; - if (vid->cgamode & 4) { - cols[1] = col | 3; - cols[2] = col | 4; - cols[3] = col | 7; - } else if (vid->cgacol & 32) { - cols[1] = col | 3; - cols[2] = col | 5; - cols[3] = col | 7; - } else { - cols[1] = col | 2; - cols[2] = col | 4; - cols[3] = col | 6; - } - for (x = 0; x < 40; x++) { - dat = (vid->vram[((vid->ma << 1) & 0x1fff) + ((vid->sc & 1) * 0x2000)] << 8) | vid->vram[((vid->ma << 1) & 0x1fff) + ((vid->sc & 1) * 0x2000) + 1]; - vid->ma++; - for (c = 0; c < 8; c++) { - buffer32->line[(vid->displine << 1)][(x << 4) + (c << 1) + 8] = - buffer32->line[(vid->displine << 1)][(x << 4) + (c << 1) + 1 + 8] = - buffer32->line[(vid->displine << 1) + 1][(x << 4) + (c << 1) + 8] = - buffer32->line[(vid->displine << 1) + 1][(x << 4) + (c << 1) + 1 + 8] = - cols[dat >> 14]; - dat <<= 2; - } - } - } else { - for (x = 0; x < 40; x++) { - ca = ((vid->ma << 1) & 0x1fff) + ((vid->sc & 1) * 0x2000); - dat = (vid->vram[ca] << 8) | vid->vram[ca + 1]; - dat2 = (vid->vram[ca + 0x4000] << 8) | vid->vram[ca + 0x4001]; - dat3 = (vid->vram[ca + 0x8000] << 8) | vid->vram[ca + 0x8001]; - dat4 = (vid->vram[ca + 0xc000] << 8) | vid->vram[ca + 0xc001]; + if (!vid->linepos) { + timer_advance_u64(&vid->timer, vid->dispofftime); + vid->stat |= 1; + vid->linepos = 1; + oldsc = vid->sc; + if (vid->dispon) { + if (vid->displine < vid->firstline) { + vid->firstline = vid->displine; + video_wait_for_buffer(); + } + vid->lastline = vid->displine; + for (c = 0; c < 8; c++) { + if ((vid->cgamode & 0x12) == 0x12) { + buffer32->line[(vid->displine << 1)][c] = buffer32->line[(vid->displine << 1) + 1][c] = (vid->border & 15) + 16; + if (vid->cgamode & 1) { + buffer32->line[(vid->displine << 1)][c + (vid->crtc[1] << 3) + 8] = buffer32->line[(vid->displine << 1) + 1][c + (vid->crtc[1] << 3) + 8] = 0; + } else { + buffer32->line[(vid->displine << 1)][c + (vid->crtc[1] << 4) + 8] = buffer32->line[(vid->displine << 1) + 1][c + (vid->crtc[1] << 4) + 8] = 0; + } + } else { + buffer32->line[(vid->displine << 1)][c] = buffer32->line[(vid->displine << 1) + 1][c] = (vid->cgacol & 15) + 16; + if (vid->cgamode & 1) { + buffer32->line[(vid->displine << 1)][c + (vid->crtc[1] << 3) + 8] = buffer32->line[(vid->displine << 1) + 1][c + (vid->crtc[1] << 3) + 8] = (vid->cgacol & 15) + 16; + } else { + buffer32->line[(vid->displine << 1)][c + (vid->crtc[1] << 4) + 8] = buffer32->line[(vid->displine << 1) + 1][c + (vid->crtc[1] << 4) + 8] = (vid->cgacol & 15) + 16; + } + } + } + if (vid->cgamode & 1) { + for (x = 0; x < 80; x++) { + chr = vid->vram[((vid->ma << 1) & 0x3fff)]; + attr = vid->vram[(((vid->ma << 1) + 1) & 0x3fff)]; + drawcursor = ((vid->ma == ca) && vid->con && vid->cursoron); + if (vid->cgamode & 0x20) { + cols[1] = (attr & 15) + 16; + cols[0] = ((attr >> 4) & 7) + 16; + if ((vid->blink & 16) && (attr & 0x80) && !drawcursor) + cols[1] = cols[0]; + } else { + cols[1] = (attr & 15) + 16; + cols[0] = (attr >> 4) + 16; + } + if (drawcursor) { + for (c = 0; c < 8; c++) { + buffer32->line[(vid->displine << 1)][(x << 3) + c + 8] = buffer32->line[(vid->displine << 1) + 1][(x << 3) + c + 8] = cols[(fontdat[vid->fontbase + chr][vid->sc & 7] & (1 << (c ^ 7))) ? 1 : 0] ^ 15; + } + } else { + for (c = 0; c < 8; c++) { + buffer32->line[(vid->displine << 1)][(x << 3) + c + 8] = buffer32->line[(vid->displine << 1) + 1][(x << 3) + c + 8] = cols[(fontdat[vid->fontbase + chr][vid->sc & 7] & (1 << (c ^ 7))) ? 1 : 0]; + } + } + vid->ma++; + } + } else if (!(vid->cgamode & 2)) { + for (x = 0; x < 40; x++) { + chr = vid->vram[((vid->ma << 1) & 0x3fff)]; + attr = vid->vram[(((vid->ma << 1) + 1) & 0x3fff)]; + drawcursor = ((vid->ma == ca) && vid->con && vid->cursoron); + if (vid->cgamode & 0x20) { + cols[1] = (attr & 15) + 16; + cols[0] = ((attr >> 4) & 7) + 16; + if ((vid->blink & 16) && (attr & 0x80)) + cols[1] = cols[0]; + } else { + cols[1] = (attr & 15) + 16; + cols[0] = (attr >> 4) + 16; + } + vid->ma++; + if (drawcursor) { + for (c = 0; c < 8; c++) { + buffer32->line[(vid->displine << 1)][(x << 4) + (c << 1) + 8] = buffer32->line[(vid->displine << 1)][(x << 4) + (c << 1) + 1 + 8] = buffer32->line[(vid->displine << 1) + 1][(x << 4) + (c << 1) + 8] = buffer32->line[(vid->displine << 1) + 1][(x << 4) + (c << 1) + 1 + 8] = cols[(fontdat[vid->fontbase + chr][vid->sc & 7] & (1 << (c ^ 7))) ? 1 : 0] ^ 15; + } + } else { + for (c = 0; c < 8; c++) { + buffer32->line[(vid->displine << 1)][(x << 4) + (c << 1) + 8] = buffer32->line[(vid->displine << 1)][(x << 4) + (c << 1) + 1 + 8] = buffer32->line[(vid->displine << 1) + 1][(x << 4) + (c << 1) + 8] = buffer32->line[(vid->displine << 1) + 1][(x << 4) + (c << 1) + 1 + 8] = cols[(fontdat[vid->fontbase + chr][vid->sc & 7] & (1 << (c ^ 7))) ? 1 : 0]; + } + } + } + } else if (!(vid->cgamode & 16)) { + cols[0] = (vid->cgacol & 15) | 16; + col = (vid->cgacol & 16) ? 24 : 16; + if (vid->cgamode & 4) { + cols[1] = col | 3; + cols[2] = col | 4; + cols[3] = col | 7; + } else if (vid->cgacol & 32) { + cols[1] = col | 3; + cols[2] = col | 5; + cols[3] = col | 7; + } else { + cols[1] = col | 2; + cols[2] = col | 4; + cols[3] = col | 6; + } + for (x = 0; x < 40; x++) { + dat = (vid->vram[((vid->ma << 1) & 0x1fff) + ((vid->sc & 1) * 0x2000)] << 8) | vid->vram[((vid->ma << 1) & 0x1fff) + ((vid->sc & 1) * 0x2000) + 1]; + vid->ma++; + for (c = 0; c < 8; c++) { + buffer32->line[(vid->displine << 1)][(x << 4) + (c << 1) + 8] = buffer32->line[(vid->displine << 1)][(x << 4) + (c << 1) + 1 + 8] = buffer32->line[(vid->displine << 1) + 1][(x << 4) + (c << 1) + 8] = buffer32->line[(vid->displine << 1) + 1][(x << 4) + (c << 1) + 1 + 8] = cols[dat >> 14]; + dat <<= 2; + } + } + } else { + for (x = 0; x < 40; x++) { + ca = ((vid->ma << 1) & 0x1fff) + ((vid->sc & 1) * 0x2000); + dat = (vid->vram[ca] << 8) | vid->vram[ca + 1]; + dat2 = (vid->vram[ca + 0x4000] << 8) | vid->vram[ca + 0x4001]; + dat3 = (vid->vram[ca + 0x8000] << 8) | vid->vram[ca + 0x8001]; + dat4 = (vid->vram[ca + 0xc000] << 8) | vid->vram[ca + 0xc001]; - vid->ma++; - for (c = 0; c < 16; c++) { - buffer32->line[(vid->displine << 1)][(x << 4) + c + 8] = buffer32->line[(vid->displine << 1) + 1][(x << 4) + c + 8] = - (((dat >> 15) | ((dat2 >> 15) << 1) | ((dat3 >> 15) << 2) | ((dat4 >> 15) << 3)) & (vid->cgacol & 15)) + 16; - dat <<= 1; - dat2 <<= 1; - dat3 <<= 1; - dat4 <<= 1; - } - } - } - } else { - cols[0] = ((vid->cgamode & 0x12) == 0x12) ? 0 : (vid->cgacol & 15) + 16; - if (vid->cgamode & 1) { - hline(buffer32, 0, (vid->displine << 1), (vid->crtc[1] << 3) + 16, cols[0]); - hline(buffer32, 0, (vid->displine << 1) + 1, (vid->crtc[1] << 3) + 16, cols[0]); - } else { - hline(buffer32, 0, (vid->displine << 1), (vid->crtc[1] << 4) + 16, cols[0]); - hline(buffer32, 0, (vid->displine << 1), (vid->crtc[1] << 4) + 16, cols[0]); - } - } + vid->ma++; + for (c = 0; c < 16; c++) { + buffer32->line[(vid->displine << 1)][(x << 4) + c + 8] = buffer32->line[(vid->displine << 1) + 1][(x << 4) + c + 8] = (((dat >> 15) | ((dat2 >> 15) << 1) | ((dat3 >> 15) << 2) | ((dat4 >> 15) << 3)) & (vid->cgacol & 15)) + 16; + dat <<= 1; + dat2 <<= 1; + dat3 <<= 1; + dat4 <<= 1; + } + } + } + } else { + cols[0] = ((vid->cgamode & 0x12) == 0x12) ? 0 : (vid->cgacol & 15) + 16; + if (vid->cgamode & 1) { + hline(buffer32, 0, (vid->displine << 1), (vid->crtc[1] << 3) + 16, cols[0]); + hline(buffer32, 0, (vid->displine << 1) + 1, (vid->crtc[1] << 3) + 16, cols[0]); + } else { + hline(buffer32, 0, (vid->displine << 1), (vid->crtc[1] << 4) + 16, cols[0]); + hline(buffer32, 0, (vid->displine << 1), (vid->crtc[1] << 4) + 16, cols[0]); + } + } - vid->sc = oldsc; - if (vid->vsynctime) - vid->stat |= 8; - vid->displine++; - if (vid->displine >= 360) - vid->displine = 0; + vid->sc = oldsc; + if (vid->vsynctime) + vid->stat |= 8; + vid->displine++; + if (vid->displine >= 360) + vid->displine = 0; } else { - timer_advance_u64(&vid->timer, vid->dispontime); - if ((vid->lastline - vid->firstline) == 199) - vid->dispon = 0; /*Amstrad PC1512 always displays 200 lines, regardless of CRTC settings*/ - if (vid->dispon) - vid->stat &= ~1; - vid->linepos = 0; - if (vid->vsynctime) { - vid->vsynctime--; - if (! vid->vsynctime) - vid->stat &= ~8; - } - if (vid->sc == (vid->crtc[11] & 31)) { - vid->con = 0; - vid->coff = 1; - } - if (vid->vadj) { - vid->sc++; - vid->sc &= 31; - vid->ma = vid->maback; - vid->vadj--; - if (! vid->vadj) { - vid->dispon = 1; - vid->ma = vid->maback = (vid->crtc[13] | (vid->crtc[12] << 8)) & 0x3fff; - vid->sc = 0; - } - } else if (vid->sc == vid->crtc[9]) { - vid->maback = vid->ma; - vid->sc = 0; - vid->vc++; - vid->vc &= 127; + timer_advance_u64(&vid->timer, vid->dispontime); + if ((vid->lastline - vid->firstline) == 199) + vid->dispon = 0; /*Amstrad PC1512 always displays 200 lines, regardless of CRTC settings*/ + if (vid->dispon) + vid->stat &= ~1; + vid->linepos = 0; + if (vid->vsynctime) { + vid->vsynctime--; + if (!vid->vsynctime) + vid->stat &= ~8; + } + if (vid->sc == (vid->crtc[11] & 31)) { + vid->con = 0; + vid->coff = 1; + } + if (vid->vadj) { + vid->sc++; + vid->sc &= 31; + vid->ma = vid->maback; + vid->vadj--; + if (!vid->vadj) { + vid->dispon = 1; + vid->ma = vid->maback = (vid->crtc[13] | (vid->crtc[12] << 8)) & 0x3fff; + vid->sc = 0; + } + } else if (vid->sc == vid->crtc[9]) { + vid->maback = vid->ma; + vid->sc = 0; + vid->vc++; + vid->vc &= 127; - if (vid->displine == 32) { - vid->vc = 0; - vid->vadj = 6; - if ((vid->crtc[10] & 0x60) == 0x20) - vid->cursoron = 0; - else - vid->cursoron = vid->blink & 16; - } + if (vid->displine == 32) { + vid->vc = 0; + vid->vadj = 6; + if ((vid->crtc[10] & 0x60) == 0x20) + vid->cursoron = 0; + else + vid->cursoron = vid->blink & 16; + } - if (vid->displine >= 262) { - vid->dispon = 0; - vid->displine = 0; - vid->vsynctime = 46; + if (vid->displine >= 262) { + vid->dispon = 0; + vid->displine = 0; + vid->vsynctime = 46; - if (vid->cgamode&1) - x = (vid->crtc[1] << 3) + 16; - else - x = (vid->crtc[1] << 4) + 16; - vid->lastline++; + if (vid->cgamode & 1) + x = (vid->crtc[1] << 3) + 16; + else + x = (vid->crtc[1] << 4) + 16; + vid->lastline++; - xs_temp = x; - ys_temp = (vid->lastline - vid->firstline) << 1; + xs_temp = x; + ys_temp = (vid->lastline - vid->firstline) << 1; - if ((xs_temp > 0) && (ys_temp > 0)) { - if (xs_temp < 64) xs_temp = 656; - if (ys_temp < 32) ys_temp = 400; - if (!enable_overscan) - xs_temp -= 16; + if ((xs_temp > 0) && (ys_temp > 0)) { + if (xs_temp < 64) + xs_temp = 656; + if (ys_temp < 32) + ys_temp = 400; + if (!enable_overscan) + xs_temp -= 16; - if ((xs_temp != xsize) || (ys_temp != ysize) || video_force_resize_get()) { - xsize = xs_temp; - ysize = ys_temp; - set_screen_size(xsize, ysize + (enable_overscan ? 16 : 0)); + if ((xs_temp != xsize) || (ys_temp != ysize) || video_force_resize_get()) { + xsize = xs_temp; + ysize = ys_temp; + set_screen_size(xsize, ysize + (enable_overscan ? 16 : 0)); - if (video_force_resize_get()) - video_force_resize_set(0); - } + if (video_force_resize_get()) + video_force_resize_set(0); + } - if (enable_overscan) { - video_blit_memtoscreen_8(0, (vid->firstline - 4) << 1, - xsize, ((vid->lastline - vid->firstline) + 8) << 1); - } else { - video_blit_memtoscreen_8(8, vid->firstline << 1, - xsize, (vid->lastline - vid->firstline) << 1); - } - } + if (enable_overscan) { + video_blit_memtoscreen_8(0, (vid->firstline - 4) << 1, + xsize, ((vid->lastline - vid->firstline) + 8) << 1); + } else { + video_blit_memtoscreen_8(8, vid->firstline << 1, + xsize, (vid->lastline - vid->firstline) << 1); + } + } - video_res_x = xsize; - video_res_y = ysize; - if (vid->cgamode & 1) { - video_res_x /= 8; - video_res_y /= vid->crtc[9] + 1; - video_bpp = 0; - } else if (! (vid->cgamode & 2)) { - video_res_x /= 16; - video_res_y /= vid->crtc[9] + 1; - video_bpp = 0; - } else if (! (vid->cgamode & 16)) { - video_res_x /= 2; - video_bpp = 2; - } else { - video_bpp = 4; - } + video_res_x = xsize; + video_res_y = ysize; + if (vid->cgamode & 1) { + video_res_x /= 8; + video_res_y /= vid->crtc[9] + 1; + video_bpp = 0; + } else if (!(vid->cgamode & 2)) { + video_res_x /= 16; + video_res_y /= vid->crtc[9] + 1; + video_bpp = 0; + } else if (!(vid->cgamode & 16)) { + video_res_x /= 2; + video_bpp = 2; + } else { + video_bpp = 4; + } - vid->firstline = 1000; - vid->lastline = 0; - vid->blink++; - } - } else { - vid->sc++; - vid->sc &= 31; - vid->ma = vid->maback; - } - if (vid->sc == (vid->crtc[10] & 31)) - vid->con = 1; + vid->firstline = 1000; + vid->lastline = 0; + vid->blink++; + } + } else { + vid->sc++; + vid->sc &= 31; + vid->ma = vid->maback; + } + if (vid->sc == (vid->crtc[10] & 31)) + vid->con = 1; } } - static void vid_init_1512(amstrad_t *ams) { amsvid_t *vid; /* Allocate a video controller block. */ - vid = (amsvid_t *)malloc(sizeof(amsvid_t)); + vid = (amsvid_t *) malloc(sizeof(amsvid_t)); memset(vid, 0x00, sizeof(amsvid_t)); video_inform(VIDEO_FLAG_TYPE_CGA, &timing_pc1512); - vid->vram = malloc(0x10000); - vid->cgacol = 7; + vid->vram = malloc(0x10000); + vid->cgacol = 7; vid->cgamode = 0x12; timer_add(&vid->timer, vid_poll_1512, vid, 1); mem_mapping_add(&vid->cga.mapping, 0xb8000, 0x08000, - vid_read_1512, NULL, NULL, vid_write_1512, NULL, NULL, - NULL, 0, vid); + vid_read_1512, NULL, NULL, vid_write_1512, NULL, NULL, + NULL, 0, vid); io_sethandler(0x03d0, 16, - vid_in_1512, NULL, NULL, vid_out_1512, NULL, NULL, vid); + vid_in_1512, NULL, NULL, vid_out_1512, NULL, NULL, vid); overscan_x = overscan_y = 16; @@ -650,27 +619,26 @@ vid_init_1512(amstrad_t *ams) ams->vid = vid; } - static void vid_close_1512(void *priv) { - amsvid_t *vid = (amsvid_t *)priv; + amsvid_t *vid = (amsvid_t *) priv; free(vid->vram); free(vid); } - static void vid_speed_change_1512(void *priv) { - amsvid_t *vid = (amsvid_t *)priv; + amsvid_t *vid = (amsvid_t *) priv; recalc_timings_1512(vid); } const device_config_t vid_1512_config[] = { + // clang-format off { .name = "display_type", .description = "Display type", @@ -721,20 +689,21 @@ const device_config_t vid_1512_config[] = { } }, { .name = "", .description = "", .type = CONFIG_END } + // clang-format on }; const device_t vid_1512_device = { - .name = "Amstrad PC1512 (video)", + .name = "Amstrad PC1512 (video)", .internal_name = "vid_1512", - .flags = 0, - .local = 0, - .init = NULL, - .close = vid_close_1512, - .reset = NULL, + .flags = 0, + .local = 0, + .init = NULL, + .close = vid_close_1512, + .reset = NULL, { .available = NULL }, .speed_changed = vid_speed_change_1512, - .force_redraw = NULL, - .config = vid_1512_config + .force_redraw = NULL, + .config = vid_1512_config }; static void @@ -744,94 +713,92 @@ recalc_timings_1640(amsvid_t *vid) ega_recalctimings(&vid->ega); if (vid->cga_enabled) { - overscan_x = overscan_y = 16; + overscan_x = overscan_y = 16; - vid->dispontime = vid->cga.dispontime; - vid->dispofftime = vid->cga.dispofftime; + vid->dispontime = vid->cga.dispontime; + vid->dispofftime = vid->cga.dispofftime; } else { - overscan_x = 16; overscan_y = 28; + overscan_x = 16; + overscan_y = 28; - vid->dispontime = vid->ega.dispontime; - vid->dispofftime = vid->ega.dispofftime; + vid->dispontime = vid->ega.dispontime; + vid->dispofftime = vid->ega.dispofftime; } } - static void vid_out_1640(uint16_t addr, uint8_t val, void *priv) { - amsvid_t *vid = (amsvid_t *)priv; + amsvid_t *vid = (amsvid_t *) priv; switch (addr) { - case 0x03db: - vid->cga_enabled = val & 0x40; - if (vid->cga_enabled) { - timer_disable(&vid->ega.timer); - timer_set_delay_u64(&vid->cga.timer, 0); - mem_mapping_enable(&vid->cga.mapping); - mem_mapping_disable(&vid->ega.mapping); - } else { - timer_disable(&vid->cga.timer); - timer_set_delay_u64(&vid->ega.timer, 0); - mem_mapping_disable(&vid->cga.mapping); - switch (vid->ega.gdcreg[6] & 0xc) { - case 0x0: /*128k at A0000*/ - mem_mapping_set_addr(&vid->ega.mapping, - 0xa0000, 0x20000); - break; + case 0x03db: + vid->cga_enabled = val & 0x40; + if (vid->cga_enabled) { + timer_disable(&vid->ega.timer); + timer_set_delay_u64(&vid->cga.timer, 0); + mem_mapping_enable(&vid->cga.mapping); + mem_mapping_disable(&vid->ega.mapping); + } else { + timer_disable(&vid->cga.timer); + timer_set_delay_u64(&vid->ega.timer, 0); + mem_mapping_disable(&vid->cga.mapping); + switch (vid->ega.gdcreg[6] & 0xc) { + case 0x0: /*128k at A0000*/ + mem_mapping_set_addr(&vid->ega.mapping, + 0xa0000, 0x20000); + break; - case 0x4: /*64k at A0000*/ - mem_mapping_set_addr(&vid->ega.mapping, - 0xa0000, 0x10000); - break; + case 0x4: /*64k at A0000*/ + mem_mapping_set_addr(&vid->ega.mapping, + 0xa0000, 0x10000); + break; - case 0x8: /*32k at B0000*/ - mem_mapping_set_addr(&vid->ega.mapping, - 0xb0000, 0x08000); - break; + case 0x8: /*32k at B0000*/ + mem_mapping_set_addr(&vid->ega.mapping, + 0xb0000, 0x08000); + break; - case 0xC: /*32k at B8000*/ - mem_mapping_set_addr(&vid->ega.mapping, - 0xb8000, 0x08000); - break; - } - } - return; + case 0xC: /*32k at B8000*/ + mem_mapping_set_addr(&vid->ega.mapping, + 0xb8000, 0x08000); + break; + } + } + return; } if (vid->cga_enabled) - cga_out(addr, val, &vid->cga); - else - ega_out(addr, val, &vid->ega); + cga_out(addr, val, &vid->cga); + else + ega_out(addr, val, &vid->ega); } - static uint8_t vid_in_1640(uint16_t addr, void *priv) { - amsvid_t *vid = (amsvid_t *)priv; + amsvid_t *vid = (amsvid_t *) priv; if (vid->cga_enabled) - return(cga_in(addr, &vid->cga)); - else - return(ega_in(addr, &vid->ega)); + return (cga_in(addr, &vid->cga)); + else + return (ega_in(addr, &vid->ega)); } - static void vid_init_1640(amstrad_t *ams) { amsvid_t *vid; /* Allocate a video controller block. */ - vid = (amsvid_t *)malloc(sizeof(amsvid_t)); + vid = (amsvid_t *) malloc(sizeof(amsvid_t)); memset(vid, 0x00, sizeof(amsvid_t)); rom_init(&vid->bios_rom, "roms/machines/pc1640/40100", - 0xc0000, 0x8000, 0x7fff, 0, 0); + 0xc0000, 0x8000, 0x7fff, 0, 0); ega_init(&vid->ega, 9, 0); - vid->cga.vram = vid->ega.vram; + vid->cga.vram = vid->ega.vram; vid->cga_enabled = 1; cga_init(&vid->cga); timer_disable(&vid->ega.timer); @@ -839,11 +806,11 @@ vid_init_1640(amstrad_t *ams) video_inform(VIDEO_FLAG_TYPE_SPECIAL, &timing_pc1640); mem_mapping_add(&vid->cga.mapping, 0xb8000, 0x08000, - cga_read, NULL, NULL, cga_write, NULL, NULL, NULL, 0, &vid->cga); - mem_mapping_add(&vid->ega.mapping, 0, 0, - ega_read, NULL, NULL, ega_write, NULL, NULL, NULL, 0, &vid->ega); + cga_read, NULL, NULL, cga_write, NULL, NULL, NULL, 0, &vid->cga); + mem_mapping_add(&vid->ega.mapping, 0, 0, + ega_read, NULL, NULL, ega_write, NULL, NULL, NULL, 0, &vid->ega); io_sethandler(0x03a0, 64, - vid_in_1640, NULL, NULL, vid_out_1640, NULL, NULL, vid); + vid_in_1640, NULL, NULL, vid_out_1640, NULL, NULL, vid); overscan_x = overscan_y = 16; @@ -855,27 +822,26 @@ vid_init_1640(amstrad_t *ams) ams->vid = vid; } - static void vid_close_1640(void *priv) { - amsvid_t *vid = (amsvid_t *)priv; + amsvid_t *vid = (amsvid_t *) priv; free(vid->ega.vram); free(vid); } - static void vid_speed_changed_1640(void *priv) { - amsvid_t *vid = (amsvid_t *)priv; + amsvid_t *vid = (amsvid_t *) priv; recalc_timings_1640(vid); } const device_config_t vid_1640_config[] = { + // clang-format off { .name = "language", .description = "BIOS language", @@ -897,28 +863,29 @@ const device_config_t vid_1640_config[] = { } }, { .name = "", .description = "", .type = CONFIG_END } + // clang-format on }; const device_t vid_1640_device = { - .name = "Amstrad PC1640 (video)", + .name = "Amstrad PC1640 (video)", .internal_name = "vid_1640", - .flags = 0, - .local = 0, - .init = NULL, - .close = vid_close_1640, - .reset = NULL, + .flags = 0, + .local = 0, + .init = NULL, + .close = vid_close_1640, + .reset = NULL, { .available = NULL }, .speed_changed = vid_speed_changed_1640, - .force_redraw = NULL, - .config = vid_1640_config + .force_redraw = NULL, + .config = vid_1640_config }; /* Display type */ -#define PC200_CGA 0 /* CGA monitor */ -#define PC200_MDA 1 /* MDA monitor */ -#define PC200_TV 2 /* Television */ -#define PC200_LCDC 3 /* PPC512 LCD as CGA*/ -#define PC200_LCDM 4 /* PPC512 LCD as MDA*/ +#define PC200_CGA 0 /* CGA monitor */ +#define PC200_MDA 1 /* MDA monitor */ +#define PC200_TV 2 /* Television */ +#define PC200_LCDC 3 /* PPC512 LCD as CGA*/ +#define PC200_LCDM 4 /* PPC512 LCD as MDA*/ extern int nmi_mask; @@ -926,34 +893,31 @@ static uint32_t blue, green; static uint32_t lcdcols[256][2][2]; - static void ams_inform(amsvid_t *vid) { switch (vid->emulation) { - case PC200_CGA: - case PC200_TV: - case PC200_LCDC: - video_inform(VIDEO_FLAG_TYPE_CGA, &timing_pc200); - break; - case PC200_MDA: - case PC200_LCDM: - video_inform(VIDEO_FLAG_TYPE_MDA, &timing_pc200); - break; + case PC200_CGA: + case PC200_TV: + case PC200_LCDC: + video_inform(VIDEO_FLAG_TYPE_CGA, &timing_pc200); + break; + case PC200_MDA: + case PC200_LCDM: + video_inform(VIDEO_FLAG_TYPE_MDA, &timing_pc200); + break; } } - static void vid_speed_changed_200(void *priv) { - amsvid_t *vid = (amsvid_t *)priv; + amsvid_t *vid = (amsvid_t *) priv; cga_recalctimings(&vid->cga); mda_recalctimings(&vid->mda); } - /* LCD colour mappings * * 0 => solid green @@ -961,8 +925,8 @@ vid_speed_changed_200(void *priv) * 2 => green on blue * 3 => solid blue */ -static unsigned char mapping1[256] = -{ +static unsigned char mapping1[256] = { + // clang-format off /* 0 1 2 3 4 5 6 7 8 9 A B C D E F */ /*00*/ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /*10*/ 2, 0, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, @@ -980,10 +944,11 @@ static unsigned char mapping1[256] = /*D0*/ 2, 2, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 2, 0, 1, 1, /*E0*/ 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 0, 1, /*F0*/ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, + // clang-format on }; -static unsigned char mapping2[256] = -{ +static unsigned char mapping2[256] = { + // clang-format off /* 0 1 2 3 4 5 6 7 8 9 A B C D E F */ /*00*/ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /*10*/ 1, 3, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, @@ -1001,636 +966,659 @@ static unsigned char mapping2[256] = /*D0*/ 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 2, 2, 1, 3, 2, 2, /*E0*/ 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 3, 2, /*F0*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, + // clang-format on }; - -static void set_lcd_cols(uint8_t mode_reg) +static void +set_lcd_cols(uint8_t mode_reg) { unsigned char *mapping = (mode_reg & 0x80) ? mapping2 : mapping1; - int c; + int c; for (c = 0; c < 256; c++) { - switch (mapping[c]) { - case 0: - lcdcols[c][0][0] = lcdcols[c][1][0] = green; - lcdcols[c][0][1] = lcdcols[c][1][1] = green; - break; + switch (mapping[c]) { + case 0: + lcdcols[c][0][0] = lcdcols[c][1][0] = green; + lcdcols[c][0][1] = lcdcols[c][1][1] = green; + break; - case 1: - lcdcols[c][0][0] = lcdcols[c][1][0] = - lcdcols[c][1][1] = green; - lcdcols[c][0][1] = blue; - break; + case 1: + lcdcols[c][0][0] = lcdcols[c][1][0] = lcdcols[c][1][1] = green; + lcdcols[c][0][1] = blue; + break; - case 2: - lcdcols[c][0][0] = lcdcols[c][1][0] = - lcdcols[c][1][1] = blue; - lcdcols[c][0][1] = green; - break; + case 2: + lcdcols[c][0][0] = lcdcols[c][1][0] = lcdcols[c][1][1] = blue; + lcdcols[c][0][1] = green; + break; - case 3: - lcdcols[c][0][0] = lcdcols[c][1][0] = blue; - lcdcols[c][0][1] = lcdcols[c][1][1] = blue; - break; - } + case 3: + lcdcols[c][0][0] = lcdcols[c][1][0] = blue; + lcdcols[c][0][1] = lcdcols[c][1][1] = blue; + break; + } } } - static uint8_t vid_in_200(uint16_t addr, void *priv) { - amsvid_t *vid = (amsvid_t *)priv; - cga_t *cga = &vid->cga; - mda_t *mda = &vid->mda; - uint8_t ret; + amsvid_t *vid = (amsvid_t *) priv; + cga_t *cga = &vid->cga; + mda_t *mda = &vid->mda; + uint8_t ret; switch (addr) { - case 0x03b8: - return(mda->ctrl); + case 0x03b8: + return (mda->ctrl); - case 0x03d8: - return(cga->cgamode); + case 0x03d8: + return (cga->cgamode); - case 0x03dd: - ret = vid->crtc_index; /* Read NMI reason */ - vid->crtc_index &= 0x1f; /* Reset NMI reason */ - nmi = 0; /* And reset NMI flag */ - return(ret); + case 0x03dd: + ret = vid->crtc_index; /* Read NMI reason */ + vid->crtc_index &= 0x1f; /* Reset NMI reason */ + nmi = 0; /* And reset NMI flag */ + return (ret); - case 0x03de: - return((vid->operation_ctrl & 0xc7) | vid->dipswitches); /*External CGA*/ + case 0x03de: + return ((vid->operation_ctrl & 0xc7) | vid->dipswitches); /*External CGA*/ - case 0x03df: - return(vid->reg_3df); + case 0x03df: + return (vid->reg_3df); } if (addr >= 0x3D0 && addr <= 0x3DF) - return cga_in(addr, cga); + return cga_in(addr, cga); if (addr >= 0x3B0 && addr <= 0x3BB) - return mda_in(addr, mda); + return mda_in(addr, mda); return 0xFF; } - static void vid_out_200(uint16_t addr, uint8_t val, void *priv) { - amsvid_t *vid = (amsvid_t *)priv; - cga_t *cga = &vid->cga; - mda_t *mda = &vid->mda; - uint8_t old; + amsvid_t *vid = (amsvid_t *) priv; + cga_t *cga = &vid->cga; + mda_t *mda = &vid->mda; + uint8_t old; switch (addr) { -/* MDA writes ============================================================== */ - case 0x3b1: - case 0x3b3: - case 0x3b5: - case 0x3b7: - /* Writes banned to CRTC registers 0-11? */ - if (!(vid->operation_ctrl & 0x40) && mda->crtcreg <= 11) { - vid->crtc_index = 0x20 | (mda->crtcreg & 0x1f); - if (vid->operation_ctrl & 0x80) - nmi_raise(); - vid->reg_3df = val; - return; - } - old = mda->crtc[mda->crtcreg]; - mda->crtc[mda->crtcreg] = val & crtc_mask[mda->crtcreg]; - if (old != val) { - if (mda->crtcreg < 0xe || mda->crtcreg > 0x10) { - vid->fullchange = changeframecount; - mda_recalctimings(mda); - } - } - return; - case 0x3b8: - old = mda->ctrl; - mda->ctrl = val; - if ((mda->ctrl ^ old) & 3) - mda_recalctimings(mda); - vid->crtc_index &= 0x1F; - vid->crtc_index |= 0x80; - if (vid->operation_ctrl & 0x80) - nmi_raise(); - return; + /* MDA writes ============================================================== */ + case 0x3b1: + case 0x3b3: + case 0x3b5: + case 0x3b7: + /* Writes banned to CRTC registers 0-11? */ + if (!(vid->operation_ctrl & 0x40) && mda->crtcreg <= 11) { + vid->crtc_index = 0x20 | (mda->crtcreg & 0x1f); + if (vid->operation_ctrl & 0x80) + nmi_raise(); + vid->reg_3df = val; + return; + } + old = mda->crtc[mda->crtcreg]; + mda->crtc[mda->crtcreg] = val & crtc_mask[mda->crtcreg]; + if (old != val) { + if (mda->crtcreg < 0xe || mda->crtcreg > 0x10) { + vid->fullchange = changeframecount; + mda_recalctimings(mda); + } + } + return; + case 0x3b8: + old = mda->ctrl; + mda->ctrl = val; + if ((mda->ctrl ^ old) & 3) + mda_recalctimings(mda); + vid->crtc_index &= 0x1F; + vid->crtc_index |= 0x80; + if (vid->operation_ctrl & 0x80) + nmi_raise(); + return; -/* CGA writes ============================================================== */ - case 0x03d1: - case 0x03d3: - case 0x03d5: - case 0x03d7: - if (!(vid->operation_ctrl & 0x40) && cga->crtcreg <= 11) { - vid->crtc_index = 0x20 | (cga->crtcreg & 0x1f); - if (vid->operation_ctrl & 0x80) - nmi_raise(); - vid->reg_3df = val; - return; - } - old = cga->crtc[cga->crtcreg]; - cga->crtc[cga->crtcreg] = val & crtc_mask[cga->crtcreg]; - if (old != val) { - if (cga->crtcreg < 0xe || cga->crtcreg > 0x10) { - vid->fullchange = changeframecount; - cga_recalctimings(cga); - } - } - return; + /* CGA writes ============================================================== */ + case 0x03d1: + case 0x03d3: + case 0x03d5: + case 0x03d7: + if (!(vid->operation_ctrl & 0x40) && cga->crtcreg <= 11) { + vid->crtc_index = 0x20 | (cga->crtcreg & 0x1f); + if (vid->operation_ctrl & 0x80) + nmi_raise(); + vid->reg_3df = val; + return; + } + old = cga->crtc[cga->crtcreg]; + cga->crtc[cga->crtcreg] = val & crtc_mask[cga->crtcreg]; + if (old != val) { + if (cga->crtcreg < 0xe || cga->crtcreg > 0x10) { + vid->fullchange = changeframecount; + cga_recalctimings(cga); + } + } + return; - case 0x03d8: - old = cga->cgamode; - cga->cgamode = val; - if ((cga->cgamode ^ old) & 3) - cga_recalctimings(cga); - vid->crtc_index &= 0x1f; - vid->crtc_index |= 0x80; - if (vid->operation_ctrl & 0x80) - nmi_raise(); - else - set_lcd_cols(val); - return; + case 0x03d8: + old = cga->cgamode; + cga->cgamode = val; + if ((cga->cgamode ^ old) & 3) + cga_recalctimings(cga); + vid->crtc_index &= 0x1f; + vid->crtc_index |= 0x80; + if (vid->operation_ctrl & 0x80) + nmi_raise(); + else + set_lcd_cols(val); + return; -/* PC200 control port writes ============================================== */ - case 0x03de: - vid->crtc_index = 0x1f; - /* NMI only seems to be triggered if the value being written has the high - * bit set (enable NMI). So it only protects writes to this port if you - * let it? */ - if (val & 0x80) { - vid->operation_ctrl = val; - vid->crtc_index |= 0x40; - nmi_raise(); - return; - } - timer_disable(&vid->cga.timer); - timer_disable(&vid->mda.timer); - timer_disable(&vid->timer); - vid->operation_ctrl = val; - /* Bits 0 and 1 control emulation and output mode */ - amstrad_log("emulation and mode = %02X\n", val & 0x03); - if (val & 1) /* Monitor */ - vid->emulation = (val & 2) ? PC200_MDA : PC200_CGA; - else if (vid->type == AMS_PPC512) - vid->emulation = (val & 2) ? PC200_LCDM : PC200_LCDC; - else - vid->emulation = PC200_TV; - if (vid->emulation == PC200_CGA || vid->emulation == PC200_TV) - timer_advance_u64(&vid->cga.timer, 1); - else if (vid->emulation == PC200_MDA) - timer_advance_u64(&vid->mda.timer, 1); - else - timer_advance_u64(&vid->timer, 1); + /* PC200 control port writes ============================================== */ + case 0x03de: + vid->crtc_index = 0x1f; + /* NMI only seems to be triggered if the value being written has the high + * bit set (enable NMI). So it only protects writes to this port if you + * let it? */ + if (val & 0x80) { + vid->operation_ctrl = val; + vid->crtc_index |= 0x40; + nmi_raise(); + return; + } + timer_disable(&vid->cga.timer); + timer_disable(&vid->mda.timer); + timer_disable(&vid->timer); + vid->operation_ctrl = val; + /* Bits 0 and 1 control emulation and output mode */ + amstrad_log("emulation and mode = %02X\n", val & 0x03); + if (val & 1) /* Monitor */ + vid->emulation = (val & 2) ? PC200_MDA : PC200_CGA; + else if (vid->type == AMS_PPC512) + vid->emulation = (val & 2) ? PC200_LCDM : PC200_LCDC; + else + vid->emulation = PC200_TV; + if (vid->emulation == PC200_CGA || vid->emulation == PC200_TV) + timer_advance_u64(&vid->cga.timer, 1); + else if (vid->emulation == PC200_MDA) + timer_advance_u64(&vid->mda.timer, 1); + else + timer_advance_u64(&vid->timer, 1); - /* Bit 2 disables the IDA. We don't support dynamic enabling - * and disabling of the IDA (instead, PCEM disconnects the - * IDA from the bus altogether) so don't implement this */ + /* Bit 2 disables the IDA. We don't support dynamic enabling + * and disabling of the IDA (instead, PCEM disconnects the + * IDA from the bus altogether) so don't implement this */ - /* Enable the appropriate memory ranges depending whether - * the IDA is configured as MDA or CGA */ - if (vid->emulation == PC200_MDA || - vid->emulation == PC200_LCDM) { - mem_mapping_disable(&vid->cga.mapping); - mem_mapping_enable(&vid->mda.mapping); - } - else { - mem_mapping_disable(&vid->mda.mapping); - mem_mapping_enable(&vid->cga.mapping); - } - return; + /* Enable the appropriate memory ranges depending whether + * the IDA is configured as MDA or CGA */ + if (vid->emulation == PC200_MDA || vid->emulation == PC200_LCDM) { + mem_mapping_disable(&vid->cga.mapping); + mem_mapping_enable(&vid->mda.mapping); + } else { + mem_mapping_disable(&vid->mda.mapping); + mem_mapping_enable(&vid->cga.mapping); + } + return; } if (addr >= 0x3D0 && addr <= 0x3DF) - cga_out(addr, val, cga); + cga_out(addr, val, cga); if (addr >= 0x3B0 && addr <= 0x3BB) - mda_out(addr, val, mda); + mda_out(addr, val, mda); } - static void lcd_draw_char_80(amsvid_t *vid, uint32_t *buffer, uint8_t chr, - uint8_t attr, int drawcursor, int blink, int sc, - int mode160, uint8_t control) + uint8_t attr, int drawcursor, int blink, int sc, + int mode160, uint8_t control) { - int c; - uint8_t bits = fontdat[chr + vid->cga.fontbase][sc]; - uint8_t bright = 0; + int c; + uint8_t bits = fontdat[chr + vid->cga.fontbase][sc]; + uint8_t bright = 0; uint16_t mask; - if (attr & 8) { /* bright */ - /* The brightness algorithm appears to be: replace any bit sequence 011 - * with 001 (assuming an extra 0 to the left of the byte). - */ - bright = bits; - for (c = 0, mask = 0x100; c < 7; c++, mask >>= 1) { - if (((bits & mask) == 0) && ((bits & (mask >> 1)) != 0) && - ((bits & (mask >> 2)) != 0)) - bright &= ~(mask >> 1); - } - bits = bright; + if (attr & 8) { /* bright */ + /* The brightness algorithm appears to be: replace any bit sequence 011 + * with 001 (assuming an extra 0 to the left of the byte). + */ + bright = bits; + for (c = 0, mask = 0x100; c < 7; c++, mask >>= 1) { + if (((bits & mask) == 0) && ((bits & (mask >> 1)) != 0) && ((bits & (mask >> 2)) != 0)) + bright &= ~(mask >> 1); + } + bits = bright; } - if (drawcursor) bits ^= 0xFF; + if (drawcursor) + bits ^= 0xFF; for (c = 0, mask = 0x80; c < 8; c++, mask >>= 1) { - if (mode160) buffer[c] = (attr & mask) ? blue : green; - else if (control & 0x20) /* blinking */ - buffer[c] = lcdcols[attr & 0x7F][blink][(bits & mask) ? 1 : 0]; - else buffer[c] = lcdcols[attr][blink][(bits & mask) ? 1 : 0]; + if (mode160) + buffer[c] = (attr & mask) ? blue : green; + else if (control & 0x20) /* blinking */ + buffer[c] = lcdcols[attr & 0x7F][blink][(bits & mask) ? 1 : 0]; + else + buffer[c] = lcdcols[attr][blink][(bits & mask) ? 1 : 0]; } } - static void lcd_draw_char_40(amsvid_t *vid, uint32_t *buffer, uint8_t chr, - uint8_t attr, int drawcursor, int blink, int sc, - uint8_t control) + uint8_t attr, int drawcursor, int blink, int sc, + uint8_t control) { - int c; + int c; uint8_t bits = fontdat[chr + vid->cga.fontbase][sc]; uint8_t mask = 0x80; - if (attr & 8) /* bright */ - bits = bits & (bits >> 1); - if (drawcursor) bits ^= 0xFF; + if (attr & 8) /* bright */ + bits = bits & (bits >> 1); + if (drawcursor) + bits ^= 0xFF; for (c = 0; c < 8; c++, mask >>= 1) { - if (control & 0x20) { - buffer[c*2] = buffer[c*2+1] = - lcdcols[attr & 0x7F][blink][(bits & mask) ? 1 : 0]; - } else { - buffer[c*2] = buffer[c*2+1] = - lcdcols[attr][blink][(bits & mask) ? 1 : 0]; - } + if (control & 0x20) { + buffer[c * 2] = buffer[c * 2 + 1] = lcdcols[attr & 0x7F][blink][(bits & mask) ? 1 : 0]; + } else { + buffer[c * 2] = buffer[c * 2 + 1] = lcdcols[attr][blink][(bits & mask) ? 1 : 0]; + } } } - static void lcdm_poll(amsvid_t *vid) { - mda_t *mda = &vid->mda; - uint16_t ca = (mda->crtc[15] | (mda->crtc[14] << 8)) & 0x3fff; - int drawcursor; - int x; - int oldvc; - uint8_t chr, attr; - int oldsc; - int blink; + mda_t *mda = &vid->mda; + uint16_t ca = (mda->crtc[15] | (mda->crtc[14] << 8)) & 0x3fff; + int drawcursor; + int x; + int oldvc; + uint8_t chr, attr; + int oldsc; + int blink; if (!mda->linepos) { - timer_advance_u64(&vid->timer, mda->dispofftime); - mda->stat |= 1; - mda->linepos = 1; - oldsc = mda->sc; - if ((mda->crtc[8] & 3) == 3) - mda->sc = (mda->sc << 1) & 7; - if (mda->dispon) { - if (mda->displine < mda->firstline) - mda->firstline = mda->displine; - mda->lastline = mda->displine; - for (x = 0; x < mda->crtc[1]; x++) { - chr = mda->vram[(mda->ma << 1) & 0xfff]; - attr = mda->vram[((mda->ma << 1) + 1) & 0xfff]; - drawcursor = ((mda->ma == ca) && mda->con && mda->cursoron); - blink = ((mda->blink & 16) && (mda->ctrl & 0x20) && (attr & 0x80) && !drawcursor); + timer_advance_u64(&vid->timer, mda->dispofftime); + mda->stat |= 1; + mda->linepos = 1; + oldsc = mda->sc; + if ((mda->crtc[8] & 3) == 3) + mda->sc = (mda->sc << 1) & 7; + if (mda->dispon) { + if (mda->displine < mda->firstline) + mda->firstline = mda->displine; + mda->lastline = mda->displine; + for (x = 0; x < mda->crtc[1]; x++) { + chr = mda->vram[(mda->ma << 1) & 0xfff]; + attr = mda->vram[((mda->ma << 1) + 1) & 0xfff]; + drawcursor = ((mda->ma == ca) && mda->con && mda->cursoron); + blink = ((mda->blink & 16) && (mda->ctrl & 0x20) && (attr & 0x80) && !drawcursor); - lcd_draw_char_80(vid, &((uint32_t *)(buffer32->line[mda->displine]))[x * 8], chr, attr, drawcursor, blink, mda->sc, 0, mda->ctrl); - mda->ma++; - } - } - mda->sc = oldsc; - if (mda->vc == mda->crtc[7] && !mda->sc) - mda->stat |= 8; - mda->displine++; - if (mda->displine >= 500) - mda->displine=0; + lcd_draw_char_80(vid, &((uint32_t *) (buffer32->line[mda->displine]))[x * 8], chr, attr, drawcursor, blink, mda->sc, 0, mda->ctrl); + mda->ma++; + } + } + mda->sc = oldsc; + if (mda->vc == mda->crtc[7] && !mda->sc) + mda->stat |= 8; + mda->displine++; + if (mda->displine >= 500) + mda->displine = 0; } else { - timer_advance_u64(&vid->timer, mda->dispontime); - if (mda->dispon) mda->stat&=~1; - mda->linepos=0; - if (mda->vsynctime) { - mda->vsynctime--; - if (!mda->vsynctime) - mda->stat&=~8; - } - if (mda->sc == (mda->crtc[11] & 31) || ((mda->crtc[8] & 3) == 3 && mda->sc == ((mda->crtc[11] & 31) >> 1))) { - mda->con = 0; - mda->coff = 1; - } - if (mda->vadj) { - mda->sc++; - mda->sc &= 31; - mda->ma = mda->maback; - mda->vadj--; - if (!mda->vadj) { - mda->dispon = 1; - mda->ma = mda->maback = (mda->crtc[13] | (mda->crtc[12] << 8)) & 0x3fff; - mda->sc = 0; - } - } else if (mda->sc == mda->crtc[9] || ((mda->crtc[8] & 3) == 3 && mda->sc == (mda->crtc[9] >> 1))) { - mda->maback = mda->ma; - mda->sc = 0; - oldvc = mda->vc; - mda->vc++; - mda->vc &= 127; - if (mda->vc == mda->crtc[6]) - mda->dispon=0; - if (oldvc == mda->crtc[4]) { - mda->vc = 0; - mda->vadj = mda->crtc[5]; - if (!mda->vadj) mda->dispon = 1; - if (!mda->vadj) mda->ma = mda->maback = (mda->crtc[13] | (mda->crtc[12] << 8)) & 0x3fff; - if ((mda->crtc[10] & 0x60) == 0x20) mda->cursoron = 0; - else mda->cursoron = mda->blink & 16; - } - if (mda->vc == mda->crtc[7]) { - mda->dispon = 0; - mda->displine = 0; - mda->vsynctime = 16; - if (mda->crtc[7]) { - x = mda->crtc[1] * 8; - mda->lastline++; - if ((x != xsize) || ((mda->lastline - mda->firstline) != ysize) || video_force_resize_get()) { - xsize = x; - ysize = mda->lastline - mda->firstline; - if (xsize < 64) xsize = 656; - if (ysize < 32) ysize = 200; - set_screen_size(xsize, ysize); + timer_advance_u64(&vid->timer, mda->dispontime); + if (mda->dispon) + mda->stat &= ~1; + mda->linepos = 0; + if (mda->vsynctime) { + mda->vsynctime--; + if (!mda->vsynctime) + mda->stat &= ~8; + } + if (mda->sc == (mda->crtc[11] & 31) || ((mda->crtc[8] & 3) == 3 && mda->sc == ((mda->crtc[11] & 31) >> 1))) { + mda->con = 0; + mda->coff = 1; + } + if (mda->vadj) { + mda->sc++; + mda->sc &= 31; + mda->ma = mda->maback; + mda->vadj--; + if (!mda->vadj) { + mda->dispon = 1; + mda->ma = mda->maback = (mda->crtc[13] | (mda->crtc[12] << 8)) & 0x3fff; + mda->sc = 0; + } + } else if (mda->sc == mda->crtc[9] || ((mda->crtc[8] & 3) == 3 && mda->sc == (mda->crtc[9] >> 1))) { + mda->maback = mda->ma; + mda->sc = 0; + oldvc = mda->vc; + mda->vc++; + mda->vc &= 127; + if (mda->vc == mda->crtc[6]) + mda->dispon = 0; + if (oldvc == mda->crtc[4]) { + mda->vc = 0; + mda->vadj = mda->crtc[5]; + if (!mda->vadj) + mda->dispon = 1; + if (!mda->vadj) + mda->ma = mda->maback = (mda->crtc[13] | (mda->crtc[12] << 8)) & 0x3fff; + if ((mda->crtc[10] & 0x60) == 0x20) + mda->cursoron = 0; + else + mda->cursoron = mda->blink & 16; + } + if (mda->vc == mda->crtc[7]) { + mda->dispon = 0; + mda->displine = 0; + mda->vsynctime = 16; + if (mda->crtc[7]) { + x = mda->crtc[1] * 8; + mda->lastline++; + if ((x != xsize) || ((mda->lastline - mda->firstline) != ysize) || video_force_resize_get()) { + xsize = x; + ysize = mda->lastline - mda->firstline; + if (xsize < 64) + xsize = 656; + if (ysize < 32) + ysize = 200; + set_screen_size(xsize, ysize); - if (video_force_resize_get()) - video_force_resize_set(0); - } - video_blit_memtoscreen(0, mda->firstline, xsize, ysize); - frames++; - video_res_x = mda->crtc[1]; - video_res_y = mda->crtc[6]; - video_bpp = 0; - } - mda->firstline = 1000; - mda->lastline = 0; - mda->blink++; - } - } else { - mda->sc++; - mda->sc &= 31; - mda->ma = mda->maback; - } - if ((mda->sc == (mda->crtc[10] & 31) || ((mda->crtc[8] & 3) == 3 && mda->sc == ((mda->crtc[10] & 31) >> 1)))) - mda->con = 1; + if (video_force_resize_get()) + video_force_resize_set(0); + } + video_blit_memtoscreen(0, mda->firstline, xsize, ysize); + frames++; + video_res_x = mda->crtc[1]; + video_res_y = mda->crtc[6]; + video_bpp = 0; + } + mda->firstline = 1000; + mda->lastline = 0; + mda->blink++; + } + } else { + mda->sc++; + mda->sc &= 31; + mda->ma = mda->maback; + } + if ((mda->sc == (mda->crtc[10] & 31) || ((mda->crtc[8] & 3) == 3 && mda->sc == ((mda->crtc[10] & 31) >> 1)))) + mda->con = 1; } } - static void lcdc_poll(amsvid_t *vid) { - cga_t *cga = &vid->cga; - int drawcursor; - int x, c, xs_temp, ys_temp; - int oldvc; - uint8_t chr, attr; + cga_t *cga = &vid->cga; + int drawcursor; + int x, c, xs_temp, ys_temp; + int oldvc; + uint8_t chr, attr; uint16_t dat; - int oldsc; + int oldsc; uint16_t ca; - int blink; + int blink; ca = (cga->crtc[15] | (cga->crtc[14] << 8)) & 0x3fff; if (!cga->linepos) { - timer_advance_u64(&vid->timer, cga->dispofftime); - cga->cgastat |= 1; - cga->linepos = 1; - oldsc = cga->sc; - if ((cga->crtc[8] & 3) == 3) - cga->sc = ((cga->sc << 1) + cga->oddeven) & 7; - if (cga->cgadispon) { - if (cga->displine < cga->firstline) { - cga->firstline = cga->displine; - video_wait_for_buffer(); - } - cga->lastline = cga->displine; + timer_advance_u64(&vid->timer, cga->dispofftime); + cga->cgastat |= 1; + cga->linepos = 1; + oldsc = cga->sc; + if ((cga->crtc[8] & 3) == 3) + cga->sc = ((cga->sc << 1) + cga->oddeven) & 7; + if (cga->cgadispon) { + if (cga->displine < cga->firstline) { + cga->firstline = cga->displine; + video_wait_for_buffer(); + } + cga->lastline = cga->displine; - if (cga->cgamode & 1) { - for (x = 0; x < cga->crtc[1]; x++) { - chr = cga->charbuffer[x << 1]; - attr = cga->charbuffer[(x << 1) + 1]; - drawcursor = ((cga->ma == ca) && cga->con && cga->cursoron); - blink = ((cga->cgablink & 16) && (cga->cgamode & 0x20) && (attr & 0x80) && !drawcursor); - lcd_draw_char_80(vid, &(buffer32->line[(cga->displine << 1)])[x * 8], chr, attr, drawcursor, blink, cga->sc, cga->cgamode & 0x40, cga->cgamode); - lcd_draw_char_80(vid, &(buffer32->line[(cga->displine << 1) + 1])[x * 8], chr, attr, drawcursor, blink, cga->sc, cga->cgamode & 0x40, cga->cgamode); - cga->ma++; - } - } else if (!(cga->cgamode & 2)) { - for (x = 0; x < cga->crtc[1]; x++) { - chr = cga->vram[((cga->ma << 1) & 0x3fff)]; - attr = cga->vram[(((cga->ma << 1) + 1) & 0x3fff)]; - drawcursor = ((cga->ma == ca) && cga->con && cga->cursoron); - blink = ((cga->cgablink & 16) && (cga->cgamode & 0x20) && (attr & 0x80) && !drawcursor); - lcd_draw_char_40(vid, &(buffer32->line[(cga->displine << 1)])[x * 16], chr, attr, drawcursor, blink, cga->sc, cga->cgamode); - lcd_draw_char_40(vid, &(buffer32->line[(cga->displine << 1) + 1])[x * 16], chr, attr, drawcursor, blink, cga->sc, cga->cgamode); - cga->ma++; - } - } else { /* Graphics mode */ - for (x = 0; x < cga->crtc[1]; x++) { - dat = (cga->vram[((cga->ma << 1) & 0x1fff) + ((cga->sc & 1) * 0x2000)] << 8) | cga->vram[((cga->ma << 1) & 0x1fff) + ((cga->sc & 1) * 0x2000) + 1]; - cga->ma++; - for (c = 0; c < 16; c++) { - buffer32->line[(cga->displine << 1)][(x << 4) + c] = buffer32->line[(cga->displine << 1) + 1][(x << 4) + c] = - (dat & 0x8000) ? blue : green; - dat <<= 1; - } - } - } - } else { - if (cga->cgamode & 1) { - hline(buffer32, 0, (cga->displine << 1), (cga->crtc[1] << 3), green); - hline(buffer32, 0, (cga->displine << 1) + 1, (cga->crtc[1] << 3), green); - } else { - hline(buffer32, 0, (cga->displine << 1), (cga->crtc[1] << 4), green); - hline(buffer32, 0, (cga->displine << 1) + 1, (cga->crtc[1] << 4), green); - } - } + if (cga->cgamode & 1) { + for (x = 0; x < cga->crtc[1]; x++) { + chr = cga->charbuffer[x << 1]; + attr = cga->charbuffer[(x << 1) + 1]; + drawcursor = ((cga->ma == ca) && cga->con && cga->cursoron); + blink = ((cga->cgablink & 16) && (cga->cgamode & 0x20) && (attr & 0x80) && !drawcursor); + lcd_draw_char_80(vid, &(buffer32->line[(cga->displine << 1)])[x * 8], chr, attr, drawcursor, blink, cga->sc, cga->cgamode & 0x40, cga->cgamode); + lcd_draw_char_80(vid, &(buffer32->line[(cga->displine << 1) + 1])[x * 8], chr, attr, drawcursor, blink, cga->sc, cga->cgamode & 0x40, cga->cgamode); + cga->ma++; + } + } else if (!(cga->cgamode & 2)) { + for (x = 0; x < cga->crtc[1]; x++) { + chr = cga->vram[((cga->ma << 1) & 0x3fff)]; + attr = cga->vram[(((cga->ma << 1) + 1) & 0x3fff)]; + drawcursor = ((cga->ma == ca) && cga->con && cga->cursoron); + blink = ((cga->cgablink & 16) && (cga->cgamode & 0x20) && (attr & 0x80) && !drawcursor); + lcd_draw_char_40(vid, &(buffer32->line[(cga->displine << 1)])[x * 16], chr, attr, drawcursor, blink, cga->sc, cga->cgamode); + lcd_draw_char_40(vid, &(buffer32->line[(cga->displine << 1) + 1])[x * 16], chr, attr, drawcursor, blink, cga->sc, cga->cgamode); + cga->ma++; + } + } else { /* Graphics mode */ + for (x = 0; x < cga->crtc[1]; x++) { + dat = (cga->vram[((cga->ma << 1) & 0x1fff) + ((cga->sc & 1) * 0x2000)] << 8) | cga->vram[((cga->ma << 1) & 0x1fff) + ((cga->sc & 1) * 0x2000) + 1]; + cga->ma++; + for (c = 0; c < 16; c++) { + buffer32->line[(cga->displine << 1)][(x << 4) + c] = buffer32->line[(cga->displine << 1) + 1][(x << 4) + c] = (dat & 0x8000) ? blue : green; + dat <<= 1; + } + } + } + } else { + if (cga->cgamode & 1) { + hline(buffer32, 0, (cga->displine << 1), (cga->crtc[1] << 3), green); + hline(buffer32, 0, (cga->displine << 1) + 1, (cga->crtc[1] << 3), green); + } else { + hline(buffer32, 0, (cga->displine << 1), (cga->crtc[1] << 4), green); + hline(buffer32, 0, (cga->displine << 1) + 1, (cga->crtc[1] << 4), green); + } + } - if (cga->cgamode & 1) x = (cga->crtc[1] << 3); - else x = (cga->crtc[1] << 4); + if (cga->cgamode & 1) + x = (cga->crtc[1] << 3); + else + x = (cga->crtc[1] << 4); - cga->sc = oldsc; - if (cga->vc == cga->crtc[7] && !cga->sc) - cga->cgastat |= 8; - cga->displine++; - if (cga->displine >= 360) - cga->displine = 0; + cga->sc = oldsc; + if (cga->vc == cga->crtc[7] && !cga->sc) + cga->cgastat |= 8; + cga->displine++; + if (cga->displine >= 360) + cga->displine = 0; } else { - timer_advance_u64(&vid->timer, cga->dispontime); - cga->linepos = 0; - if (cga->vsynctime) { - cga->vsynctime--; - if (!cga->vsynctime) - cga->cgastat &= ~8; - } - if (cga->sc == (cga->crtc[11] & 31) || ((cga->crtc[8] & 3) == 3 && cga->sc == ((cga->crtc[11] & 31) >> 1))) { - cga->con = 0; - cga->coff = 1; - } - if ((cga->crtc[8] & 3) == 3 && cga->sc == (cga->crtc[9] >> 1)) - cga->maback = cga->ma; - if (cga->vadj) { - cga->sc++; - cga->sc &= 31; - cga->ma = cga->maback; - cga->vadj--; - if (!cga->vadj) { - cga->cgadispon = 1; - cga->ma = cga->maback = (cga->crtc[13] | (cga->crtc[12] << 8)) & 0x3fff; - cga->sc = 0; - } - } else if (cga->sc == cga->crtc[9]) { - cga->maback = cga->ma; - cga->sc = 0; - oldvc = cga->vc; - cga->vc++; - cga->vc &= 127; + timer_advance_u64(&vid->timer, cga->dispontime); + cga->linepos = 0; + if (cga->vsynctime) { + cga->vsynctime--; + if (!cga->vsynctime) + cga->cgastat &= ~8; + } + if (cga->sc == (cga->crtc[11] & 31) || ((cga->crtc[8] & 3) == 3 && cga->sc == ((cga->crtc[11] & 31) >> 1))) { + cga->con = 0; + cga->coff = 1; + } + if ((cga->crtc[8] & 3) == 3 && cga->sc == (cga->crtc[9] >> 1)) + cga->maback = cga->ma; + if (cga->vadj) { + cga->sc++; + cga->sc &= 31; + cga->ma = cga->maback; + cga->vadj--; + if (!cga->vadj) { + cga->cgadispon = 1; + cga->ma = cga->maback = (cga->crtc[13] | (cga->crtc[12] << 8)) & 0x3fff; + cga->sc = 0; + } + } else if (cga->sc == cga->crtc[9]) { + cga->maback = cga->ma; + cga->sc = 0; + oldvc = cga->vc; + cga->vc++; + cga->vc &= 127; - if (cga->vc == cga->crtc[6]) - cga->cgadispon = 0; + if (cga->vc == cga->crtc[6]) + cga->cgadispon = 0; - if (oldvc == cga->crtc[4]) { - cga->vc = 0; - cga->vadj = cga->crtc[5]; - if (!cga->vadj) cga->cgadispon = 1; - if (!cga->vadj) cga->ma = cga->maback = (cga->crtc[13] | (cga->crtc[12] << 8)) & 0x3fff; - if ((cga->crtc[10] & 0x60) == 0x20) cga->cursoron = 0; - else cga->cursoron = cga->cgablink & 8; - } + if (oldvc == cga->crtc[4]) { + cga->vc = 0; + cga->vadj = cga->crtc[5]; + if (!cga->vadj) + cga->cgadispon = 1; + if (!cga->vadj) + cga->ma = cga->maback = (cga->crtc[13] | (cga->crtc[12] << 8)) & 0x3fff; + if ((cga->crtc[10] & 0x60) == 0x20) + cga->cursoron = 0; + else + cga->cursoron = cga->cgablink & 8; + } - if (cga->vc == cga->crtc[7]) { - cga->cgadispon = 0; - cga->displine = 0; - cga->vsynctime = 16; - if (cga->crtc[7]) { - if (cga->cgamode & 1) x = (cga->crtc[1] << 3); - else x = (cga->crtc[1] << 4); - cga->lastline++; + if (cga->vc == cga->crtc[7]) { + cga->cgadispon = 0; + cga->displine = 0; + cga->vsynctime = 16; + if (cga->crtc[7]) { + if (cga->cgamode & 1) + x = (cga->crtc[1] << 3); + else + x = (cga->crtc[1] << 4); + cga->lastline++; - xs_temp = x; - ys_temp = (cga->lastline - cga->firstline) << 1; + xs_temp = x; + ys_temp = (cga->lastline - cga->firstline) << 1; - if ((xs_temp > 0) && (ys_temp > 0)) { - if (xs_temp < 64) xs_temp = 640; - if (ys_temp < 32) ys_temp = 400; + if ((xs_temp > 0) && (ys_temp > 0)) { + if (xs_temp < 64) + xs_temp = 640; + if (ys_temp < 32) + ys_temp = 400; - if ((cga->cgamode & 8) && ((xs_temp != xsize) || (ys_temp != ysize) || video_force_resize_get())) { - xsize = xs_temp; - ysize = ys_temp; - set_screen_size(xsize, ysize); + if ((cga->cgamode & 8) && ((xs_temp != xsize) || (ys_temp != ysize) || video_force_resize_get())) { + xsize = xs_temp; + ysize = ys_temp; + set_screen_size(xsize, ysize); - if (video_force_resize_get()) - video_force_resize_set(0); - } + if (video_force_resize_get()) + video_force_resize_set(0); + } - video_blit_memtoscreen(0, cga->firstline << 1, - xsize, (cga->lastline - cga->firstline) << 1); - } + video_blit_memtoscreen(0, cga->firstline << 1, + xsize, (cga->lastline - cga->firstline) << 1); + } - frames++; + frames++; - video_res_x = xsize; - video_res_y = ysize; - if (cga->cgamode & 1) { - video_res_x /= 8; - video_res_y /= cga->crtc[9] + 1; - video_bpp = 0; - } else if (!(cga->cgamode & 2)) { - video_res_x /= 16; - video_res_y /= cga->crtc[9] + 1; - video_bpp = 0; - } else if (!(cga->cgamode & 16)) { - video_res_x /= 2; - video_bpp = 2; - } else - video_bpp = 1; - } - cga->firstline = 1000; - cga->lastline = 0; - cga->cgablink++; - cga->oddeven ^= 1; - } - } else { - cga->sc++; - cga->sc &= 31; - cga->ma = cga->maback; - } - if (cga->cgadispon) - cga->cgastat &= ~1; - if ((cga->sc == (cga->crtc[10] & 31) || ((cga->crtc[8] & 3) == 3 && cga->sc == ((cga->crtc[10] & 31) >> 1)))) - cga->con = 1; - if (cga->cgadispon && (cga->cgamode & 1)) { - for (x = 0; x < (cga->crtc[1] << 1); x++) - cga->charbuffer[x] = cga->vram[(((cga->ma << 1) + x) & 0x3fff)]; - } + video_res_x = xsize; + video_res_y = ysize; + if (cga->cgamode & 1) { + video_res_x /= 8; + video_res_y /= cga->crtc[9] + 1; + video_bpp = 0; + } else if (!(cga->cgamode & 2)) { + video_res_x /= 16; + video_res_y /= cga->crtc[9] + 1; + video_bpp = 0; + } else if (!(cga->cgamode & 16)) { + video_res_x /= 2; + video_bpp = 2; + } else + video_bpp = 1; + } + cga->firstline = 1000; + cga->lastline = 0; + cga->cgablink++; + cga->oddeven ^= 1; + } + } else { + cga->sc++; + cga->sc &= 31; + cga->ma = cga->maback; + } + if (cga->cgadispon) + cga->cgastat &= ~1; + if ((cga->sc == (cga->crtc[10] & 31) || ((cga->crtc[8] & 3) == 3 && cga->sc == ((cga->crtc[10] & 31) >> 1)))) + cga->con = 1; + if (cga->cgadispon && (cga->cgamode & 1)) { + for (x = 0; x < (cga->crtc[1] << 1); x++) + cga->charbuffer[x] = cga->vram[(((cga->ma << 1) + x) & 0x3fff)]; + } } } - static void vid_poll_200(void *p) { - amsvid_t *vid = (amsvid_t *)p; + amsvid_t *vid = (amsvid_t *) p; switch (vid->emulation) { - case PC200_LCDM: - lcdm_poll(vid); - return; - case PC200_LCDC: - lcdc_poll(vid); - return; + case PC200_LCDM: + lcdm_poll(vid); + return; + case PC200_LCDC: + lcdc_poll(vid); + return; } } - static void vid_init_200(amstrad_t *ams) { amsvid_t *vid; - cga_t *cga; - mda_t *mda; + cga_t *cga; + mda_t *mda; /* Allocate a video controller block. */ - vid = (amsvid_t *)malloc(sizeof(amsvid_t)); + vid = (amsvid_t *) malloc(sizeof(amsvid_t)); memset(vid, 0x00, sizeof(amsvid_t)); vid->emulation = device_get_config_int("video_emulation"); /* Default to CGA */ vid->dipswitches = 0x10; - vid->type = ams->type; + vid->type = ams->type; - if (ams->type == AMS_PC200) switch (vid->emulation) { - /* DIP switches for PC200. Switches 2,3 give video emulation. - * Switch 1 is 'swap floppy drives' (not implemented) */ - case PC200_CGA: vid->dipswitches = 0x10; break; - case PC200_MDA: vid->dipswitches = 0x30; break; - case PC200_TV: vid->dipswitches = 0x00; break; - /* The other combination is 'IDA disabled' (0x20) - see - * m_amstrad.c */ - } else switch (vid->emulation) { - /* DIP switches for PPC512. Switch 1 is CRT/LCD. Switch 2 - * is MDA / CGA. Switch 3 disables IDA, not implemented. */ - /* 1 = on, 0 = off - SW1: off = crt, on = lcd; - SW2: off = mda, on = cga; - SW3: off = disable built-in card, on = enable */ - case PC200_CGA: vid->dipswitches = 0x08; break; - case PC200_MDA: vid->dipswitches = 0x18; break; - case PC200_LCDC: vid->dipswitches = 0x00; break; - case PC200_LCDM: vid->dipswitches = 0x10; break; - } + if (ams->type == AMS_PC200) + switch (vid->emulation) { + /* DIP switches for PC200. Switches 2,3 give video emulation. + * Switch 1 is 'swap floppy drives' (not implemented) */ + case PC200_CGA: + vid->dipswitches = 0x10; + break; + case PC200_MDA: + vid->dipswitches = 0x30; + break; + case PC200_TV: + vid->dipswitches = 0x00; + break; + /* The other combination is 'IDA disabled' (0x20) - see + * m_amstrad.c */ + } + else + switch (vid->emulation) { + /* DIP switches for PPC512. Switch 1 is CRT/LCD. Switch 2 + * is MDA / CGA. Switch 3 disables IDA, not implemented. */ + /* 1 = on, 0 = off + SW1: off = crt, on = lcd; + SW2: off = mda, on = cga; + SW3: off = disable built-in card, on = enable */ + case PC200_CGA: + vid->dipswitches = 0x08; + break; + case PC200_MDA: + vid->dipswitches = 0x18; + break; + case PC200_LCDC: + vid->dipswitches = 0x00; + break; + case PC200_LCDM: + vid->dipswitches = 0x10; + break; + } - cga = &vid->cga; - mda = &vid->mda; + cga = &vid->cga; + mda = &vid->mda; cga->vram = mda->vram = malloc(0x4000); cga_init(cga); mda_init(mda); @@ -1649,24 +1637,24 @@ vid_init_200(amstrad_t *ams) timer_add(&vid->timer, vid_poll_200, vid, 1); mem_mapping_add(&vid->mda.mapping, 0xb0000, 0x08000, - mda_read, NULL, NULL, mda_write, NULL, NULL, NULL, 0, mda); + mda_read, NULL, NULL, mda_write, NULL, NULL, NULL, 0, mda); mem_mapping_add(&vid->cga.mapping, 0xb8000, 0x08000, - cga_read, NULL, NULL, cga_write, NULL, NULL, NULL, 0, cga); + cga_read, NULL, NULL, cga_write, NULL, NULL, NULL, 0, cga); io_sethandler(0x03d0, 16, vid_in_200, NULL, NULL, vid_out_200, NULL, NULL, vid); io_sethandler(0x03b0, 0x000c, vid_in_200, NULL, NULL, vid_out_200, NULL, NULL, vid); overscan_x = overscan_y = 16; if (ams->type == AMS_PC200) - vid->invert = 0; + vid->invert = 0; else - vid->invert = device_get_config_int("invert"); + vid->invert = device_get_config_int("invert"); if (vid->invert) { - blue = makecol(0x1C, 0x71, 0x31); - green = makecol(0x0f, 0x21, 0x3f); + blue = makecol(0x1C, 0x71, 0x31); + green = makecol(0x0f, 0x21, 0x3f); } else { - green = makecol(0x1C, 0x71, 0x31); - blue = makecol(0x0f, 0x21, 0x3f); + green = makecol(0x1C, 0x71, 0x31); + blue = makecol(0x0f, 0x21, 0x3f); } cgapal_rebuild(); set_lcd_cols(0); @@ -1675,38 +1663,37 @@ vid_init_200(amstrad_t *ams) timer_disable(&vid->mda.timer); timer_disable(&vid->timer); if (vid->emulation == PC200_CGA || vid->emulation == PC200_TV) - timer_enable(&vid->cga.timer); + timer_enable(&vid->cga.timer); else if (vid->emulation == PC200_MDA) - timer_enable(&vid->mda.timer); + timer_enable(&vid->mda.timer); else - timer_enable(&vid->timer); + timer_enable(&vid->timer); ams->vid = vid; } - static void vid_close_200(void *priv) { - amsvid_t *vid = (amsvid_t *)priv; + amsvid_t *vid = (amsvid_t *) priv; if (vid->cga.vram != vid->mda.vram) { - free(vid->cga.vram); - free(vid->mda.vram); + free(vid->cga.vram); + free(vid->mda.vram); } else - free(vid->cga.vram); + free(vid->cga.vram); vid->cga.vram = vid->mda.vram = NULL; free(vid); } - const device_config_t vid_200_config[] = { - /* TODO: Should have options here for: - * - * > Display port (TTL or RF) - */ + /* TODO: Should have options here for: + * + * > Display port (TTL or RF) + */ + // clang-format off { .name = "video_emulation", .description = "Display type", @@ -1776,27 +1763,29 @@ const device_config_t vid_200_config[] = { } }, { .name = "", .description = "", .type = CONFIG_END } + // clang-format on }; const device_t vid_200_device = { - .name = "Amstrad PC200 (video)", + .name = "Amstrad PC200 (video)", .internal_name = "vid_200", - .flags = 0, - .local = 0, - .init = NULL, - .close = vid_close_200, - .reset = NULL, + .flags = 0, + .local = 0, + .init = NULL, + .close = vid_close_200, + .reset = NULL, { .available = NULL }, .speed_changed = vid_speed_changed_200, - .force_redraw = NULL, - .config = vid_200_config + .force_redraw = NULL, + .config = vid_200_config }; const device_config_t vid_ppc512_config[] = { - /* TODO: Should have options here for: - * - * > Display port (TTL or RF) - */ + /* TODO: Should have options here for: + * + * > Display port (TTL or RF) + */ + // clang-format off { .name = "video_emulation", .description = "Display type", @@ -1874,23 +1863,25 @@ const device_config_t vid_ppc512_config[] = { .default_int = 0 }, { .name = "", .description = "", .type = CONFIG_END } + // clang-format on }; const device_t vid_ppc512_device = { - .name = "Amstrad PPC512 (video)", + .name = "Amstrad PPC512 (video)", .internal_name = "vid_ppc512", - .flags = 0, - .local = 0, - .init = NULL, - .close = vid_close_200, - .reset = NULL, + .flags = 0, + .local = 0, + .init = NULL, + .close = vid_close_200, + .reset = NULL, { .available = NULL }, .speed_changed = vid_speed_changed_200, - .force_redraw = NULL, - .config = vid_ppc512_config + .force_redraw = NULL, + .config = vid_ppc512_config }; const device_config_t vid_pc2086_config[] = { + // clang-format off { .name = "language", .description = "BIOS language", @@ -1906,23 +1897,25 @@ const device_config_t vid_pc2086_config[] = { } }, { .name = "", .description = "", .type = CONFIG_END } + // clang-format on }; const device_t vid_pc2086_device = { - .name = "Amstrad PC2086", + .name = "Amstrad PC2086", .internal_name = "vid_pc2086", - .flags = 0, - .local = 0, - .init = NULL, - .close = NULL, - .reset = NULL, + .flags = 0, + .local = 0, + .init = NULL, + .close = NULL, + .reset = NULL, { .available = NULL }, .speed_changed = NULL, - .force_redraw = NULL, - .config = vid_pc2086_config + .force_redraw = NULL, + .config = vid_pc2086_config }; const device_config_t vid_pc3086_config[] = { + // clang-format off { .name = "language", .description = "BIOS language", @@ -1938,387 +1931,378 @@ const device_config_t vid_pc3086_config[] = { } }, { .name = "", .description = "", .type = CONFIG_END } + // clang-format on }; const device_t vid_pc3086_device = { - .name = "Amstrad PC3086", + .name = "Amstrad PC3086", .internal_name = "vid_pc3086", - .flags = 0, - .local = 0, - .init = NULL, - .close = NULL, - .reset = NULL, + .flags = 0, + .local = 0, + .init = NULL, + .close = NULL, + .reset = NULL, { .available = NULL }, .speed_changed = NULL, - .force_redraw = NULL, - .config = vid_pc3086_config + .force_redraw = NULL, + .config = vid_pc3086_config }; static void ms_write(uint16_t addr, uint8_t val, void *priv) { - amstrad_t *ams = (amstrad_t *)priv; + amstrad_t *ams = (amstrad_t *) priv; if ((addr == 0x78) || (addr == 0x79)) - ams->mousex = 0; + ams->mousex = 0; else - ams->mousey = 0; + ams->mousey = 0; } - static uint8_t ms_read(uint16_t addr, void *priv) { - amstrad_t *ams = (amstrad_t *)priv; - uint8_t ret; + amstrad_t *ams = (amstrad_t *) priv; + uint8_t ret; if ((addr == 0x78) || (addr == 0x79)) { - ret = ams->mousex; - ams->mousex = 0; + ret = ams->mousex; + ams->mousex = 0; } else { - ret = ams->mousey; - ams->mousey = 0; + ret = ams->mousey; + ams->mousey = 0; } - return(ret); + return (ret); } - static int ms_poll(int x, int y, int z, int b, void *priv) { - amstrad_t *ams = (amstrad_t *)priv; + amstrad_t *ams = (amstrad_t *) priv; ams->mousex += x; ams->mousey -= y; if ((b & 1) && !(ams->oldb & 1)) - keyboard_send(0x7e); + keyboard_send(0x7e); if (!(b & 1) && (ams->oldb & 1)) - keyboard_send(0xfe); + keyboard_send(0xfe); if ((b & 2) && !(ams->oldb & 2)) - keyboard_send(0x7d); + keyboard_send(0x7d); if (!(b & 2) && (ams->oldb & 2)) - keyboard_send(0xfd); + keyboard_send(0xfd); ams->oldb = b; - return(0); + return (0); } - static void kbd_adddata(uint16_t val) { key_queue[key_queue_end] = val; - key_queue_end = (key_queue_end + 1) & 0xf; + key_queue_end = (key_queue_end + 1) & 0xf; } - static void kbd_adddata_ex(uint16_t val) { kbd_adddata_process(val, kbd_adddata); } - static void kbd_write(uint16_t port, uint8_t val, void *priv) { - amstrad_t *ams = (amstrad_t *)priv; + amstrad_t *ams = (amstrad_t *) priv; amstrad_log("keyboard_amstrad : write %04X %02X %02X\n", port, val, ams->pb); switch (port) { - case 0x61: - /* - * PortB - System Control. - * - * 7 Enable Status-1/Disable Keyboard Code on Port A. - * 6 Enable incoming Keyboard Clock. - * 5 Prevent external parity errors from causing NMI. - * 4 Disable parity checking of on-board system Ram. - * 3 Undefined (Not Connected). - * 2 Enable Port C LSB / Disable MSB. (See 1.8.3) - * 1 Speaker Drive. - * 0 8253 GATE 2 (Speaker Modulate). - * - * This register is controlled by BIOS and/or ROS. - */ - amstrad_log("AMSkb: write PB %02x (%02x)\n", val, ams->pb); - if (!(ams->pb & 0x40) && (val & 0x40)) { /*Reset keyboard*/ - amstrad_log("AMSkb: reset keyboard\n"); - kbd_adddata(0xaa); - } - ams->pb = val; - ppi.pb = val; + case 0x61: + /* + * PortB - System Control. + * + * 7 Enable Status-1/Disable Keyboard Code on Port A. + * 6 Enable incoming Keyboard Clock. + * 5 Prevent external parity errors from causing NMI. + * 4 Disable parity checking of on-board system Ram. + * 3 Undefined (Not Connected). + * 2 Enable Port C LSB / Disable MSB. (See 1.8.3) + * 1 Speaker Drive. + * 0 8253 GATE 2 (Speaker Modulate). + * + * This register is controlled by BIOS and/or ROS. + */ + amstrad_log("AMSkb: write PB %02x (%02x)\n", val, ams->pb); + if (!(ams->pb & 0x40) && (val & 0x40)) { /*Reset keyboard*/ + amstrad_log("AMSkb: reset keyboard\n"); + kbd_adddata(0xaa); + } + ams->pb = val; + ppi.pb = val; - speaker_update(); - speaker_gated = val & 0x01; - speaker_enable = val & 0x02; - if (speaker_enable) - was_speaker_enable = 1; - pit_devs[0].set_gate(pit_devs[0].data, 2, val & 0x01); + speaker_update(); + speaker_gated = val & 0x01; + speaker_enable = val & 0x02; + if (speaker_enable) + was_speaker_enable = 1; + pit_devs[0].set_gate(pit_devs[0].data, 2, val & 0x01); - if (val & 0x80) { - /* Keyboard enabled, so enable PA reading. */ - ams->pa = 0x00; - } - break; + if (val & 0x80) { + /* Keyboard enabled, so enable PA reading. */ + ams->pa = 0x00; + } + break; - case 0x63: - break; + case 0x63: + break; - case 0x64: - ams->stat1 = val; - break; + case 0x64: + ams->stat1 = val; + break; - case 0x65: - ams->stat2 = val; - break; + case 0x65: + ams->stat2 = val; + break; - case 0x66: - softresetx86(); - cpu_set_edx(); - break; + case 0x66: + softresetx86(); + cpu_set_edx(); + break; - default: - amstrad_log("AMSkb: bad keyboard write %04X %02X\n", port, val); + default: + amstrad_log("AMSkb: bad keyboard write %04X %02X\n", port, val); } } - static uint8_t kbd_read(uint16_t port, void *priv) { - amstrad_t *ams = (amstrad_t *)priv; - uint8_t ret = 0xff; + amstrad_t *ams = (amstrad_t *) priv; + uint8_t ret = 0xff; switch (port) { - case 0x60: - if (ams->pb & 0x80) { - /* - * PortA - System Status 1 - * - * 7 Always 0 (KBD7) - * 6 Second Floppy disk drive installed (KBD6) - * 5 DDM1 - Default Display Mode bit 1 (KBD5) - * 4 DDM0 - Default Display Mode bit 0 (KBD4) - * 3 Always 1 (KBD3) - * 2 Always 1 (KBD2) - * 1 8087 NDP installed (KBD1) - * 0 Always 1 (KBD0) - * - * DDM00 - * 00 unknown, external color? - * 01 Color,alpha,40x25, bright white on black. - * 10 Color,alpha,80x25, bright white on black. - * 11 External Monochrome,80x25. - * - * Following a reset, the hardware selects VDU mode - * 2. The ROS then sets the initial VDU state based - * on the DDM value. - */ - ret = (ams->stat1 | 0x0d) & 0x7f; - } else { - ret = ams->pa; - if (key_queue_start == key_queue_end) - ams->wantirq = 0; - else { - ams->key_waiting = key_queue[key_queue_start]; - key_queue_start = (key_queue_start + 1) & 0xf; - ams->wantirq = 1; - } - } - break; + case 0x60: + if (ams->pb & 0x80) { + /* + * PortA - System Status 1 + * + * 7 Always 0 (KBD7) + * 6 Second Floppy disk drive installed (KBD6) + * 5 DDM1 - Default Display Mode bit 1 (KBD5) + * 4 DDM0 - Default Display Mode bit 0 (KBD4) + * 3 Always 1 (KBD3) + * 2 Always 1 (KBD2) + * 1 8087 NDP installed (KBD1) + * 0 Always 1 (KBD0) + * + * DDM00 + * 00 unknown, external color? + * 01 Color,alpha,40x25, bright white on black. + * 10 Color,alpha,80x25, bright white on black. + * 11 External Monochrome,80x25. + * + * Following a reset, the hardware selects VDU mode + * 2. The ROS then sets the initial VDU state based + * on the DDM value. + */ + ret = (ams->stat1 | 0x0d) & 0x7f; + } else { + ret = ams->pa; + if (key_queue_start == key_queue_end) + ams->wantirq = 0; + else { + ams->key_waiting = key_queue[key_queue_start]; + key_queue_start = (key_queue_start + 1) & 0xf; + ams->wantirq = 1; + } + } + break; - case 0x61: - ret = ams->pb; - break; + case 0x61: + ret = ams->pb; + break; - case 0x62: - /* - * PortC - System Status 2. - * - * 7 On-board system RAM parity error. - * 6 External parity error (I/OCHCK from expansion bus). - * 5 8253 PIT OUT2 output. - * 4 Undefined (Not Connected). - *------------------------------------------- - * LSB MSB (depends on PB2) - *------------------------------------------- - * 3 RAM3 Undefined - * 2 RAM2 Undefined - * 1 RAM1 Undefined - * 0 RAM0 RAM4 - * - * PC7 is forced to 0 when on-board system RAM parity - * checking is disabled by PB4. - * - * RAM4:0 - * 01110 512K bytes on-board. - * 01111 544K bytes (32K external). - * 10000 576K bytes (64K external). - * 10001 608K bytes (96K external). - * 10010 640K bytes (128K external or fitted on-board). - */ - if (ams->pb & 0x04) - ret = ams->stat2 & 0x0f; - else - ret = ams->stat2 >> 4; - ret |= (ppispeakon ? 0x20 : 0); - if (nmi) - ret |= 0x40; - break; + case 0x62: + /* + * PortC - System Status 2. + * + * 7 On-board system RAM parity error. + * 6 External parity error (I/OCHCK from expansion bus). + * 5 8253 PIT OUT2 output. + * 4 Undefined (Not Connected). + *------------------------------------------- + * LSB MSB (depends on PB2) + *------------------------------------------- + * 3 RAM3 Undefined + * 2 RAM2 Undefined + * 1 RAM1 Undefined + * 0 RAM0 RAM4 + * + * PC7 is forced to 0 when on-board system RAM parity + * checking is disabled by PB4. + * + * RAM4:0 + * 01110 512K bytes on-board. + * 01111 544K bytes (32K external). + * 10000 576K bytes (64K external). + * 10001 608K bytes (96K external). + * 10010 640K bytes (128K external or fitted on-board). + */ + if (ams->pb & 0x04) + ret = ams->stat2 & 0x0f; + else + ret = ams->stat2 >> 4; + ret |= (ppispeakon ? 0x20 : 0); + if (nmi) + ret |= 0x40; + break; - default: - amstrad_log("AMDkb: bad keyboard read %04X\n", port); + default: + amstrad_log("AMDkb: bad keyboard read %04X\n", port); } - return(ret); + return (ret); } - static void kbd_poll(void *priv) { - amstrad_t *ams = (amstrad_t *)priv; + amstrad_t *ams = (amstrad_t *) priv; timer_advance_u64(&ams->send_delay_timer, 1000 * TIMER_USEC); if (ams->wantirq) { - ams->wantirq = 0; - ams->pa = ams->key_waiting; - picint(2); + ams->wantirq = 0; + ams->pa = ams->key_waiting; + picint(2); } if (key_queue_start != key_queue_end && !ams->pa) { - ams->key_waiting = key_queue[key_queue_start]; - key_queue_start = (key_queue_start + 1) & 0x0f; - ams->wantirq = 1; + ams->key_waiting = key_queue[key_queue_start]; + key_queue_start = (key_queue_start + 1) & 0x0f; + ams->wantirq = 1; } } - static void ams_write(uint16_t port, uint8_t val, void *priv) { - amstrad_t *ams = (amstrad_t *)priv; + amstrad_t *ams = (amstrad_t *) priv; switch (port) { - case 0x0378: - case 0x0379: - case 0x037a: - lpt_write(port, val, &lpt_ports[0]); - break; + case 0x0378: + case 0x0379: + case 0x037a: + lpt_write(port, val, &lpt_ports[0]); + break; - case 0xdead: - ams->dead = val; - break; + case 0xdead: + ams->dead = val; + break; } } - static uint8_t ams_read(uint16_t port, void *priv) { - amstrad_t *ams = (amstrad_t *)priv; - uint8_t ret = 0xff; + amstrad_t *ams = (amstrad_t *) priv; + uint8_t ret = 0xff; switch (port) { - case 0x0378: - ret = lpt_read(port, &lpt_ports[0]); - break; + case 0x0378: + ret = lpt_read(port, &lpt_ports[0]); + break; - case 0x0379: /* printer control, also set LK1-3. - * per John Elliott's site, this is xor'ed with 0x07 - * 7 English Language. - * 6 German Language. - * 5 French Language. - * 4 Spanish Language. - * 3 Danish Language. - * 2 Swedish Language. - * 1 Italian Language. - * 0 Diagnostic Mode. - */ - ret = (lpt_read(port, &lpt_ports[0]) & 0xf8) | ams->language; - break; + case 0x0379: /* printer control, also set LK1-3. + * per John Elliott's site, this is xor'ed with 0x07 + * 7 English Language. + * 6 German Language. + * 5 French Language. + * 4 Spanish Language. + * 3 Danish Language. + * 2 Swedish Language. + * 1 Italian Language. + * 0 Diagnostic Mode. + */ + ret = (lpt_read(port, &lpt_ports[0]) & 0xf8) | ams->language; + break; - case 0x037a: /* printer status */ - ret = lpt_read(port, &lpt_ports[0]) & 0x1f; + case 0x037a: /* printer status */ + ret = lpt_read(port, &lpt_ports[0]) & 0x1f; - switch(ams->type) { - case AMS_PC1512: - ret |= 0x20; - break; + switch (ams->type) { + case AMS_PC1512: + ret |= 0x20; + break; - case AMS_PC200: - case AMS_PPC512: - if (video_is_cga()) - ret |= 0x80; - else if (video_is_mda()) - ret |= 0xc0; + case AMS_PC200: + case AMS_PPC512: + if (video_is_cga()) + ret |= 0x80; + else if (video_is_mda()) + ret |= 0xc0; - if (fdc_read(0x037f, ams->fdc) & 0x80) - ret |= 0x20; - break; + if (fdc_read(0x037f, ams->fdc) & 0x80) + ret |= 0x20; + break; - case AMS_PC1640: - if (video_is_cga()) - ret |= 0x80; - else if (video_is_mda()) - ret |= 0xc0; + case AMS_PC1640: + if (video_is_cga()) + ret |= 0x80; + else if (video_is_mda()) + ret |= 0xc0; - switch (amstrad_latch) { - case AMSTRAD_NOLATCH: - ret &= ~0x20; - break; - case AMSTRAD_SW9: - ret &= ~0x20; - break; - case AMSTRAD_SW10: - ret |= 0x20; - break; - } - break; + switch (amstrad_latch) { + case AMSTRAD_NOLATCH: + ret &= ~0x20; + break; + case AMSTRAD_SW9: + ret &= ~0x20; + break; + case AMSTRAD_SW10: + ret |= 0x20; + break; + } + break; - default: - break; - } - break; + default: + break; + } + break; - case 0x03de: - ret = 0x20; - break; + case 0x03de: + ret = 0x20; + break; - case 0xdead: - ret = ams->dead; - break; + case 0xdead: + ret = ams->dead; + break; } - return(ret); + return (ret); } - static void machine_amstrad_init(const machine_t *model, int type) { amstrad_t *ams; - ams = (amstrad_t *)malloc(sizeof(amstrad_t)); + ams = (amstrad_t *) malloc(sizeof(amstrad_t)); memset(ams, 0x00, sizeof(amstrad_t)); ams->type = type; - switch(type) { - case AMS_PC200: - case AMS_PPC512: - device_add(&amstrad_no_nmi_nvr_device); - break; + switch (type) { + case AMS_PC200: + case AMS_PPC512: + device_add(&amstrad_no_nmi_nvr_device); + break; - default: - device_add(&amstrad_nvr_device); - break; + default: + device_add(&amstrad_nvr_device); + break; } machine_common_init(model); @@ -2329,86 +2313,88 @@ machine_amstrad_init(const machine_t *model, int type) lpt2_remove(); io_sethandler(0x0378, 3, - ams_read, NULL, NULL, ams_write, NULL, NULL, ams); + ams_read, NULL, NULL, ams_write, NULL, NULL, ams); io_sethandler(0xdead, 1, - ams_read, NULL, NULL, ams_write, NULL, NULL, ams); + ams_read, NULL, NULL, ams_write, NULL, NULL, ams); - switch(type) { - case AMS_PC1512: - case AMS_PC1640: - case AMS_PC200: - case AMS_PPC512: - ams->fdc = device_add(&fdc_xt_device); - break; + switch (type) { + case AMS_PC1512: + case AMS_PC1640: + case AMS_PC200: + case AMS_PPC512: + ams->fdc = device_add(&fdc_xt_device); + break; - case AMS_PC2086: - case AMS_PC3086: - ams->fdc = device_add(&fdc_at_actlow_device); - break; + case AMS_PC2086: + case AMS_PC3086: + ams->fdc = device_add(&fdc_at_actlow_device); + break; } ams->language = 7; video_reset(gfxcard); - if (gfxcard == VID_INTERNAL) switch(type) { - case AMS_PC1512: - loadfont("roms/machines/pc1512/40078", 8); - device_context(&vid_1512_device); - ams->language = device_get_config_int("language"); - vid_init_1512(ams); - device_context_restore(); - device_add_ex(&vid_1512_device, ams->vid); - break; + if (gfxcard == VID_INTERNAL) + switch (type) { + case AMS_PC1512: + loadfont("roms/machines/pc1512/40078", 8); + device_context(&vid_1512_device); + ams->language = device_get_config_int("language"); + vid_init_1512(ams); + device_context_restore(); + device_add_ex(&vid_1512_device, ams->vid); + break; - case AMS_PPC512: - loadfont("roms/machines/ppc512/40109", 1); - device_context(&vid_ppc512_device); - ams->language = device_get_config_int("language"); - vid_init_200(ams); - device_context_restore(); - device_add_ex(&vid_ppc512_device, ams->vid); - break; + case AMS_PPC512: + loadfont("roms/machines/ppc512/40109", 1); + device_context(&vid_ppc512_device); + ams->language = device_get_config_int("language"); + vid_init_200(ams); + device_context_restore(); + device_add_ex(&vid_ppc512_device, ams->vid); + break; - case AMS_PC1640: - loadfont("roms/video/mda/mda.rom", 0); - device_context(&vid_1640_device); - ams->language = device_get_config_int("language"); - vid_init_1640(ams); - device_context_restore(); - device_add_ex(&vid_1640_device, ams->vid); - break; + case AMS_PC1640: + loadfont("roms/video/mda/mda.rom", 0); + device_context(&vid_1640_device); + ams->language = device_get_config_int("language"); + vid_init_1640(ams); + device_context_restore(); + device_add_ex(&vid_1640_device, ams->vid); + break; - case AMS_PC200: - loadfont("roms/machines/pc200/40109", 1); - device_context(&vid_200_device); - ams->language = device_get_config_int("language"); - vid_init_200(ams); - device_context_restore(); - device_add_ex(&vid_200_device, ams->vid); - break; + case AMS_PC200: + loadfont("roms/machines/pc200/40109", 1); + device_context(&vid_200_device); + ams->language = device_get_config_int("language"); + vid_init_200(ams); + device_context_restore(); + device_add_ex(&vid_200_device, ams->vid); + break; - case AMS_PC2086: - device_context(&vid_pc2086_device); - ams->language = device_get_config_int("language"); - device_context_restore(); - device_add(¶dise_pvga1a_pc2086_device); - break; + case AMS_PC2086: + device_context(&vid_pc2086_device); + ams->language = device_get_config_int("language"); + device_context_restore(); + device_add(¶dise_pvga1a_pc2086_device); + break; - case AMS_PC3086: - device_context(&vid_pc3086_device); - ams->language = device_get_config_int("language"); - device_context_restore(); - device_add(¶dise_pvga1a_pc3086_device); - break; - } else if ((type == AMS_PC200) || (type == AMS_PPC512)) - io_sethandler(0x03de, 1, - ams_read, NULL, NULL, ams_write, NULL, NULL, ams); + case AMS_PC3086: + device_context(&vid_pc3086_device); + ams->language = device_get_config_int("language"); + device_context_restore(); + device_add(¶dise_pvga1a_pc3086_device); + break; + } + else if ((type == AMS_PC200) || (type == AMS_PPC512)) + io_sethandler(0x03de, 1, + ams_read, NULL, NULL, ams_write, NULL, NULL, ams); /* Initialize the (custom) keyboard/mouse interface. */ ams->wantirq = 0; io_sethandler(0x0060, 7, - kbd_read, NULL, NULL, kbd_write, NULL, NULL, ams); + kbd_read, NULL, NULL, kbd_write, NULL, NULL, ams); timer_add(&ams->send_delay_timer, kbd_poll, ams, 1); keyboard_set_table(scancode_xt); keyboard_send = kbd_adddata_ex; @@ -2416,126 +2402,120 @@ machine_amstrad_init(const machine_t *model, int type) keyboard_set_is_amstrad(((type == AMS_PC1512) || (type == AMS_PC1640)) ? 0 : 1); io_sethandler(0x0078, 2, - ms_read, NULL, NULL, ms_write, NULL, NULL, ams); + ms_read, NULL, NULL, ms_write, NULL, NULL, ams); io_sethandler(0x007a, 2, - ms_read, NULL, NULL, ms_write, NULL, NULL, ams); + ms_read, NULL, NULL, ms_write, NULL, NULL, ams); if (mouse_type == MOUSE_TYPE_INTERNAL) { - /* Tell mouse driver about our internal mouse. */ - mouse_reset(); - mouse_set_poll(ms_poll, ams); +/* Tell mouse driver about our internal mouse. */ + mouse_reset(); + mouse_set_poll(ms_poll, ams); } standalone_gameport_type = &gameport_device; } - int machine_pc1512_init(const machine_t *model) { int ret; ret = bios_load_interleaved("roms/machines/pc1512/40044", - "roms/machines/pc1512/40043", - 0x000fc000, 16384, 0); + "roms/machines/pc1512/40043", + 0x000fc000, 16384, 0); ret &= rom_present("roms/machines/pc1512/40078"); if (bios_only || !ret) - return ret; + return ret; machine_amstrad_init(model, AMS_PC1512); return ret; } - int machine_pc1640_init(const machine_t *model) { int ret; ret = bios_load_interleaved("roms/machines/pc1640/40044.v3", - "roms/machines/pc1640/40043.v3", - 0x000fc000, 16384, 0); + "roms/machines/pc1640/40043.v3", + 0x000fc000, 16384, 0); ret &= rom_present("roms/machines/pc1640/40100"); if (bios_only || !ret) - return ret; + return ret; machine_amstrad_init(model, AMS_PC1640); return ret; } - int machine_pc200_init(const machine_t *model) { int ret; ret = bios_load_interleaved("roms/machines/pc200/pc20v2.1", - "roms/machines/pc200/pc20v2.0", - 0x000fc000, 16384, 0); + "roms/machines/pc200/pc20v2.0", + 0x000fc000, 16384, 0); ret &= rom_present("roms/machines/pc200/40109"); if (bios_only || !ret) - return ret; + return ret; machine_amstrad_init(model, AMS_PC200); return ret; } - int machine_ppc512_init(const machine_t *model) { int ret; ret = bios_load_interleaved("roms/machines/ppc512/40107.v2", - "roms/machines/ppc512/40108.v2", - 0x000fc000, 16384, 0); + "roms/machines/ppc512/40108.v2", + 0x000fc000, 16384, 0); ret &= rom_present("roms/machines/ppc512/40109"); if (bios_only || !ret) - return ret; + return ret; machine_amstrad_init(model, AMS_PPC512); return ret; } - int machine_pc2086_init(const machine_t *model) { int ret; ret = bios_load_interleavedr("roms/machines/pc2086/40179.ic129", - "roms/machines/pc2086/40180.ic132", - 0x000fc000, 65536, 0); + "roms/machines/pc2086/40180.ic132", + 0x000fc000, 65536, 0); ret &= rom_present("roms/machines/pc2086/40186.ic171"); if (bios_only || !ret) - return ret; + return ret; machine_amstrad_init(model, AMS_PC2086); return ret; } - int machine_pc3086_init(const machine_t *model) { int ret; ret = bios_load_linearr("roms/machines/pc3086/fc00.bin", - 0x000fc000, 65536, 0); + 0x000fc000, 65536, 0); ret &= rom_present("roms/machines/pc3086/c000.bin"); if (bios_only || !ret) - return ret; + return ret; machine_amstrad_init(model, AMS_PC3086); diff --git a/src/machine/m_at.c b/src/machine/m_at.c index df3c4bd8b..c4c566f98 100644 --- a/src/machine/m_at.c +++ b/src/machine/m_at.c @@ -35,7 +35,8 @@ * 59 Temple Place - Suite 330 * Boston, MA 02111-1307 * USA. -*/ + */ + #include #include #include @@ -59,7 +60,6 @@ #include <86box/port_6x.h> #include <86box/machine.h> - void machine_at_common_init_ex(const machine_t *model, int type) { @@ -71,25 +71,23 @@ machine_at_common_init_ex(const machine_t *model, int type) dma16_init(); if (!(type & 4)) - device_add(&port_6x_device); + device_add(&port_6x_device); type &= 3; if (type == 1) - device_add(&ibmat_nvr_device); + device_add(&ibmat_nvr_device); else if (type == 0) - device_add(&at_nvr_device); + device_add(&at_nvr_device); standalone_gameport_type = &gameport_device; } - void machine_at_common_init(const machine_t *model) { machine_at_common_init_ex(model, 0); } - void machine_at_init(const machine_t *model) { @@ -98,7 +96,6 @@ machine_at_init(const machine_t *model) device_add(&keyboard_at_device); } - static void machine_at_ibm_common_init(const machine_t *model) { @@ -109,10 +106,9 @@ machine_at_ibm_common_init(const machine_t *model) mem_remap_top(384); if (fdc_type == FDC_INTERNAL) - device_add(&fdc_at_device); + device_add(&fdc_at_device); } - void machine_at_ps2_init(const machine_t *model) { @@ -121,7 +117,6 @@ machine_at_ps2_init(const machine_t *model) device_add(&keyboard_ps2_device); } - void machine_at_common_ide_init(const machine_t *model) { @@ -130,7 +125,6 @@ machine_at_common_ide_init(const machine_t *model) device_add(&ide_isa_device); } - void machine_at_ibm_common_ide_init(const machine_t *model) { @@ -139,7 +133,6 @@ machine_at_ibm_common_ide_init(const machine_t *model) device_add(&ide_isa_device); } - void machine_at_ide_init(const machine_t *model) { @@ -148,7 +141,6 @@ machine_at_ide_init(const machine_t *model) device_add(&ide_isa_device); } - void machine_at_ps2_ide_init(const machine_t *model) { @@ -157,25 +149,23 @@ machine_at_ps2_ide_init(const machine_t *model) device_add(&ide_isa_device); } - int machine_at_ibm_init(const machine_t *model) { int ret; ret = bios_load_interleaved("roms/machines/ibmat/62x0820.u27", - "roms/machines/ibmat/62x0821.u47", - 0x000f0000, 65536, 0); + "roms/machines/ibmat/62x0821.u47", + 0x000f0000, 65536, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_ibm_common_init(model); return ret; } - /* IBM AT machines with custom BIOSes */ int machine_at_ibmatquadtel_init(const machine_t *model) @@ -183,65 +173,62 @@ machine_at_ibmatquadtel_init(const machine_t *model) int ret; ret = bios_load_interleaved("roms/machines/ibmatquadtel/BIOS_30MAR90_U27_QUADTEL_ENH_286_BIOS_3.05.01_27256.BIN", - "roms/machines/ibmatquadtel/BIOS_30MAR90_U47_QUADTEL_ENH_286_BIOS_3.05.01_27256.BIN", - 0x000f0000, 65536, 0); + "roms/machines/ibmatquadtel/BIOS_30MAR90_U47_QUADTEL_ENH_286_BIOS_3.05.01_27256.BIN", + 0x000f0000, 65536, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_ibm_common_init(model); return ret; } - int machine_at_ibmatami_init(const machine_t *model) { int ret; ret = bios_load_interleaved("roms/machines/ibmatami/BIOS_5170_30APR89_U27_AMI_27256.BIN", - "roms/machines/ibmatami/BIOS_5170_30APR89_U47_AMI_27256.BIN", - 0x000f0000, 65536, 0); + "roms/machines/ibmatami/BIOS_5170_30APR89_U47_AMI_27256.BIN", + 0x000f0000, 65536, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_ibm_common_init(model); return ret; } - int machine_at_ibmatpx_init(const machine_t *model) { int ret; ret = bios_load_interleaved("roms/machines/ibmatpx/BIOS ROM - PhoenixBIOS A286 - Version 1.01 - Even.bin", - "roms/machines/ibmatpx/BIOS ROM - PhoenixBIOS A286 - Version 1.01 - Odd.bin", - 0x000f0000, 65536, 0); + "roms/machines/ibmatpx/BIOS ROM - PhoenixBIOS A286 - Version 1.01 - Odd.bin", + 0x000f0000, 65536, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_ibm_common_init(model); return ret; } - int machine_at_ibmxt286_init(const machine_t *model) { int ret; ret = bios_load_interleaved("roms/machines/ibmxt286/bios_5162_21apr86_u34_78x7460_27256.bin", - "roms/machines/ibmxt286/bios_5162_21apr86_u35_78x7461_27256.bin", - 0x000f0000, 65536, 0); + "roms/machines/ibmxt286/bios_5162_21apr86_u35_78x7461_27256.bin", + 0x000f0000, 65536, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_ibm_common_init(model); @@ -254,17 +241,16 @@ machine_at_siemens_init(const machine_t *model) int ret; ret = bios_load_linear("roms/machines/siemens/286BIOS.BIN", - 0x000f0000, 65536, 0); + 0x000f0000, 65536, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_ibm_common_init(model); return ret; } - #if defined(DEV_BRANCH) && defined(USE_OPEN_AT) int machine_at_openat_init(const machine_t *model) @@ -272,10 +258,10 @@ machine_at_openat_init(const machine_t *model) int ret; ret = bios_load_linear("roms/machines/openat/bios.bin", - 0x000f0000, 65536, 0); + 0x000f0000, 65536, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_ibm_common_init(model); diff --git a/src/machine/m_at_286_386sx.c b/src/machine/m_at_286_386sx.c index 295c2fd82..d524e4c4a 100644 --- a/src/machine/m_at_286_386sx.c +++ b/src/machine/m_at_286_386sx.c @@ -51,34 +51,33 @@ machine_at_mr286_init(const machine_t *model) int ret; ret = bios_load_interleaved("roms/machines/mr286/V000B200-1", - "roms/machines/mr286/V000B200-2", - 0x000f0000, 65536, 0); + "roms/machines/mr286/V000B200-2", + 0x000f0000, 65536, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_ide_init(model); device_add(&keyboard_at_device); if (fdc_type == FDC_INTERNAL) - device_add(&fdc_at_device); + device_add(&fdc_at_device); return ret; } - static void machine_at_headland_common_init(int ht386) { device_add(&keyboard_at_ami_device); if (fdc_type == FDC_INTERNAL) - device_add(&fdc_at_device); + device_add(&fdc_at_device); if (ht386) - device_add(&headland_ht18b_device); + device_add(&headland_ht18b_device); else - device_add(&headland_gc10x_device); + device_add(&headland_gc10x_device); } int @@ -87,10 +86,10 @@ machine_at_tg286m_init(const machine_t *model) int ret; ret = bios_load_linear("roms/machines/tg286m/ami.bin", - 0x000f0000, 131072, 0); + 0x000f0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_ide_init(model); @@ -105,160 +104,153 @@ machine_at_ama932j_init(const machine_t *model) int ret; ret = bios_load_linear("roms/machines/ama932j/ami.bin", - 0x000f0000, 131072, 0); + 0x000f0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_ide_init(model); if (gfxcard == VID_INTERNAL) - device_add(&oti067_ama932j_device); + device_add(&oti067_ama932j_device); machine_at_headland_common_init(1); return ret; } - int machine_at_quadt286_init(const machine_t *model) { int ret; ret = bios_load_interleaved("roms/machines/quadt286/QUADT89L.ROM", - "roms/machines/quadt286/QUADT89H.ROM", - 0x000f0000, 65536, 0); + "roms/machines/quadt286/QUADT89H.ROM", + 0x000f0000, 65536, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); - device_add(&keyboard_at_device); + device_add(&keyboard_at_device); if (fdc_type == FDC_INTERNAL) - device_add(&fdc_at_device); + device_add(&fdc_at_device); device_add(&headland_gc10x_device); return ret; } - int machine_at_quadt386sx_init(const machine_t *model) { int ret; ret = bios_load_interleaved("roms/machines/quadt386sx/QTC-SXM-EVEN-U3-05-07.BIN", - "roms/machines/quadt386sx/QTC-SXM-ODD-U3-05-07.BIN", - 0x000f0000, 65536, 0); + "roms/machines/quadt386sx/QTC-SXM-ODD-U3-05-07.BIN", + 0x000f0000, 65536, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); device_add(&keyboard_at_device); if (fdc_type == FDC_INTERNAL) - device_add(&fdc_at_device); + device_add(&fdc_at_device); device_add(&headland_gc10x_device); return ret; } - int machine_at_neat_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/dtk386/3cto001.bin", - 0x000f0000, 65536, 0); + 0x000f0000, 65536, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_init(model); device_add(&neat_device); if (fdc_type == FDC_INTERNAL) - device_add(&fdc_at_device); + device_add(&fdc_at_device); return ret; } - int machine_at_neat_ami_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/ami286/AMIC206.BIN", - 0x000f0000, 65536, 0); + 0x000f0000, 65536, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); device_add(&neat_device); if (fdc_type == FDC_INTERNAL) - device_add(&fdc_at_device); + device_add(&fdc_at_device); device_add(&keyboard_at_ami_device); return ret; } - int machine_at_px286_init(const machine_t *model) { int ret; - ret = bios_load_linear("roms/machines/px286/KENITEC.BIN", - 0x000f0000, 65536, 0); + ret = bios_load_linear("roms/machines/px286/KENITEC.BIN", + 0x000f0000, 65536, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); device_add(&keyboard_at_device); if (fdc_type == FDC_INTERNAL) - device_add(&fdc_at_device); + device_add(&fdc_at_device); device_add(&neat_device); return ret; } - int machine_at_micronics386_init(const machine_t *model) { int ret; ret = bios_load_interleaved("roms/machines/micronics386/386-Micronics-09-00021-EVEN.BIN", - "roms/machines/micronics386/386-Micronics-09-00021-ODD.BIN", - 0x000f0000, 65536, 0); + "roms/machines/micronics386/386-Micronics-09-00021-ODD.BIN", + 0x000f0000, 65536, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_init(model); if (fdc_type == FDC_INTERNAL) - device_add(&fdc_at_device); + device_add(&fdc_at_device); return ret; } - static void machine_at_scat_init(const machine_t *model, int is_v4) { @@ -266,12 +258,11 @@ machine_at_scat_init(const machine_t *model, int is_v4) device_add(&keyboard_at_ami_device); if (is_v4) - device_add(&scat_4_device); + device_add(&scat_4_device); else - device_add(&scat_device); + device_add(&scat_device); } - static void machine_at_scatsx_init(const machine_t *model) { @@ -280,27 +271,26 @@ machine_at_scatsx_init(const machine_t *model) device_add(&keyboard_at_ami_device); if (fdc_type == FDC_INTERNAL) - device_add(&fdc_at_device); + device_add(&fdc_at_device); device_add(&scat_sx_device); } - int machine_at_award286_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/award286/award.bin", - 0x000f0000, 131072, 0); + 0x000f0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_scat_init(model, 0); if (fdc_type == FDC_INTERNAL) - device_add(&fdc_at_device); + device_add(&fdc_at_device); return ret; } @@ -311,15 +301,15 @@ machine_at_gdc212m_init(const machine_t *model) int ret; ret = bios_load_linear("roms/machines/gdc212m/gdc212m_72h.bin", - 0x000f0000, 65536, 0); + 0x000f0000, 65536, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_scat_init(model, 0); if (fdc_type == FDC_INTERNAL) - device_add(&fdc_at_device); + device_add(&fdc_at_device); device_add(&ide_isa_device); @@ -332,10 +322,10 @@ machine_at_gw286ct_init(const machine_t *model) int ret; ret = bios_load_linear("roms/machines/gw286ct/2ctc001.bin", - 0x000f0000, 131072, 0); + 0x000f0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; device_add(&f82c710_device); @@ -349,63 +339,60 @@ machine_at_gw286ct_init(const machine_t *model) return ret; } - int machine_at_super286tr_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/super286tr/hyundai_award286.bin", - 0x000f0000, 131072, 0); + 0x000f0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_scat_init(model, 0); if (fdc_type == FDC_INTERNAL) - device_add(&fdc_at_device); + device_add(&fdc_at_device); return ret; } - int machine_at_spc4200p_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/spc4200p/u8.01", - 0x000f0000, 131072, 0); + 0x000f0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_scat_init(model, 0); if (fdc_type == FDC_INTERNAL) - device_add(&fdc_at_device); + device_add(&fdc_at_device); return ret; } - int machine_at_spc4216p_init(const machine_t *model) { int ret; ret = bios_load_interleaved("roms/machines/spc4216p/7101.U8", - "roms/machines/spc4216p/AC64.U10", - 0x000f0000, 131072, 0); + "roms/machines/spc4216p/AC64.U10", + 0x000f0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_scat_init(model, 1); if (fdc_type == FDC_INTERNAL) - device_add(&fdc_at_device); + device_add(&fdc_at_device); return ret; } @@ -416,72 +403,69 @@ machine_at_spc4620p_init(const machine_t *model) int ret; ret = bios_load_interleaved("roms/machines/spc4620p/31005h.u8", - "roms/machines/spc4620p/31005h.u10", - 0x000f0000, 131072, 0x8000); + "roms/machines/spc4620p/31005h.u10", + 0x000f0000, 131072, 0x8000); if (bios_only || !ret) - return ret; + return ret; if (gfxcard == VID_INTERNAL) - device_add(&ati28800k_spc4620p_device); + device_add(&ati28800k_spc4620p_device); machine_at_scat_init(model, 1); if (fdc_type == FDC_INTERNAL) - device_add(&fdc_at_device); + device_add(&fdc_at_device); return ret; } - int machine_at_kmxc02_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/kmxc02/3ctm005.bin", - 0x000f0000, 131072, 0); + 0x000f0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_scatsx_init(model); return ret; } - int machine_at_deskmaster286_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/deskmaster286/SAMSUNG-DESKMASTER-28612-ROM.BIN", - 0x000f0000, 131072, 0); + 0x000f0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_scat_init(model, 0); if (fdc_type == FDC_INTERNAL) - device_add(&fdc_at_device); + device_add(&fdc_at_device); return ret; } - int machine_at_shuttle386sx_init(const machine_t *model) { int ret; ret = bios_load_interleaved("roms/machines/shuttle386sx/386-Shuttle386SX-Even.BIN", - "roms/machines/shuttle386sx/386-Shuttle386SX-Odd.BIN", - 0x000f0000, 131072, 0); + "roms/machines/shuttle386sx/386-Shuttle386SX-Odd.BIN", + 0x000f0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -489,23 +473,22 @@ machine_at_shuttle386sx_init(const machine_t *model) device_add(&keyboard_at_ami_device); if (fdc_type == FDC_INTERNAL) - device_add(&fdc_at_device); + device_add(&fdc_at_device); return ret; } - int machine_at_adi386sx_init(const machine_t *model) { int ret; ret = bios_load_interleaved("roms/machines/adi386sx/3iip001l.bin", - "roms/machines/adi386sx/3iip001h.bin", - 0x000f0000, 65536, 0); + "roms/machines/adi386sx/3iip001h.bin", + 0x000f0000, 65536, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -513,28 +496,27 @@ machine_at_adi386sx_init(const machine_t *model) device_add(&keyboard_at_ami_device); if (fdc_type == FDC_INTERNAL) - device_add(&fdc_at_device); + device_add(&fdc_at_device); return ret; } - int machine_at_wd76c10_init(const machine_t *model) { int ret; ret = bios_load_interleaved("roms/machines/megapc/41651-bios lo.u18", - "roms/machines/megapc/211253-bios hi.u19", - 0x000f0000, 65536, 0x08000); + "roms/machines/megapc/211253-bios hi.u19", + 0x000f0000, 65536, 0x08000); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); if (gfxcard == VID_INTERNAL) - device_add(¶dise_wd90c11_megapc_device); + device_add(¶dise_wd90c11_megapc_device); device_add(&keyboard_ps2_quadtel_device); @@ -543,25 +525,24 @@ machine_at_wd76c10_init(const machine_t *model) return ret; } - int machine_at_cmdsl386sx16_init(const machine_t *model) { int ret; ret = bios_load_interleaved("roms/machines/cmdsl386sx16/cbm-sl386sx-bios-lo-v1.04-390914-04.bin", - "roms/machines/cmdsl386sx16/cbm-sl386sx-bios-hi-v1.04-390915-04.bin", - 0x000f0000, 65536, 0); + "roms/machines/cmdsl386sx16/cbm-sl386sx-bios-hi-v1.04-390915-04.bin", + 0x000f0000, 65536, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_ide_init(model); device_add(&keyboard_at_device); if (fdc_type == FDC_INTERNAL) - device_add(&fdc_at_device); + device_add(&fdc_at_device); device_add(&neat_device); /* Two serial ports - on the real hardware SL386SX-16, they are on the single UMC UM82C452. */ @@ -571,127 +552,119 @@ machine_at_cmdsl386sx16_init(const machine_t *model) return ret; } - static void machine_at_scamp_common_init(const machine_t *model, int is_ps2) { machine_at_common_ide_init(model); if (is_ps2) - device_add(&keyboard_ps2_ami_device); + device_add(&keyboard_ps2_ami_device); else - device_add(&keyboard_at_ami_device); + device_add(&keyboard_at_ami_device); if (fdc_type == FDC_INTERNAL) - device_add(&fdc_at_device); + device_add(&fdc_at_device); device_add(&vlsi_scamp_device); } - const device_t * at_cmdsl386sx25_get_device(void) { return &gd5402_onboard_device; } - int machine_at_cmdsl386sx25_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/cmdsl386sx25/f000.rom", - 0x000f0000, 65536, 0); + 0x000f0000, 65536, 0); if (bios_only || !ret) - return ret; + return ret; if (gfxcard == VID_INTERNAL) - device_add(&gd5402_onboard_device); + device_add(&gd5402_onboard_device); machine_at_scamp_common_init(model, 1); return ret; } - int machine_at_dataexpert386sx_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/dataexpert386sx/5e9f20e5ef967717086346.BIN", - 0x000f0000, 65536, 0); + 0x000f0000, 65536, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_scamp_common_init(model, 0); return ret; } - const device_t * at_spc6033p_get_device(void) { return &ati28800k_spc6033p_device; } - int machine_at_spc6033p_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/spc6033p/phoenix.BIN", - 0x000f0000, 65536, 0x10000); + 0x000f0000, 65536, 0x10000); if (bios_only || !ret) - return ret; + return ret; if (gfxcard == VID_INTERNAL) - device_add(&ati28800k_spc6033p_device); + device_add(&ati28800k_spc6033p_device); machine_at_scamp_common_init(model, 1); return ret; } - int machine_at_awardsx_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/awardsx/Unknown 386SX OPTi291 - Award (original).BIN", - 0x000f0000, 65536, 0); + 0x000f0000, 65536, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_init(model); device_add(&opti291_device); if (fdc_type == FDC_INTERNAL) - device_add(&fdc_at_device); + device_add(&fdc_at_device); return ret; } - int machine_at_arb1374_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/arb1374/1374s.rom", - 0x000f0000, 65536, 0); + 0x000f0000, 65536, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -702,17 +675,16 @@ machine_at_arb1374_init(const machine_t *model) return ret; } - int machine_at_sbc350a_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/sbc350a/350a.rom", - 0x000f0000, 65536, 0); + 0x000f0000, 65536, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -723,17 +695,16 @@ machine_at_sbc350a_init(const machine_t *model) return ret; } - int machine_at_flytech386_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/flytech386/FLYTECH.BIO", - 0x000f0000, 65536, 0); + 0x000f0000, 65536, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -741,31 +712,29 @@ machine_at_flytech386_init(const machine_t *model) device_add(&w83787f_ide_en_device); if (gfxcard == VID_INTERNAL) - device_add(&tvga8900d_device); + device_add(&tvga8900d_device); device_add(&keyboard_ps2_device); return ret; } - const device_t * at_flytech386_get_device(void) { return &tvga8900d_device; } - int machine_at_mr1217_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/mr1217/mrbios.BIN", - 0x000f0000, 65536, 0); + 0x000f0000, 65536, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -777,17 +746,16 @@ machine_at_mr1217_init(const machine_t *model) return ret; } - int machine_at_pja511m_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/pja511m/2006915102435734.rom", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -800,17 +768,16 @@ machine_at_pja511m_init(const machine_t *model) return ret; } - int machine_at_prox1332_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/prox1332/D30B3AC1.BIN", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -822,7 +789,6 @@ machine_at_prox1332_init(const machine_t *model) return ret; } - /* * Current bugs: * - ctrl-alt-del produces an 8042 error @@ -833,22 +799,21 @@ machine_at_pc8_init(const machine_t *model) int ret; ret = bios_load_interleaved("roms/machines/pc8/ncr_35117_u127_vers.4-2.bin", - "roms/machines/pc8/ncr_35116_u113_vers.4-2.bin", - 0x000f0000, 65536, 0); + "roms/machines/pc8/ncr_35116_u113_vers.4-2.bin", + 0x000f0000, 65536, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); device_add(&keyboard_at_ncr_device); if (fdc_type == FDC_INTERNAL) - device_add(&fdc_at_device); + device_add(&fdc_at_device); return ret; } - /* * Current bugs: * - ctrl-alt-del produces an 8042 error @@ -859,31 +824,30 @@ machine_at_3302_init(const machine_t *model) int ret; ret = bios_load_linear("roms/machines/3302/f000-flex_drive_test.bin", - 0x000f0000, 65536, 0); + 0x000f0000, 65536, 0); if (ret) { - bios_load_aux_linear("roms/machines/3302/f800-setup_ncr3.5-013190.bin", - 0x000f8000, 32768, 0); + bios_load_aux_linear("roms/machines/3302/f800-setup_ncr3.5-013190.bin", + 0x000f8000, 32768, 0); } if (bios_only || !ret) - return ret; + return ret; machine_at_common_ide_init(model); device_add(&neat_device); if (fdc_type == FDC_INTERNAL) - device_add(&fdc_at_device); + device_add(&fdc_at_device); if (gfxcard == VID_INTERNAL) - device_add(¶dise_pvga1a_ncr3302_device); + device_add(¶dise_pvga1a_ncr3302_device); device_add(&keyboard_at_ncr_device); return ret; } - /* * Current bugs: * - soft-reboot after saving CMOS settings/pressing ctrl-alt-del produces an 8042 error @@ -894,11 +858,11 @@ machine_at_pc916sx_init(const machine_t *model) int ret; ret = bios_load_interleaved("roms/machines/pc916sx/ncr_386sx_u46-17_7.3.bin", - "roms/machines/pc916sx/ncr_386sx_u12-19_7.3.bin", - 0x000f0000, 65536, 0); + "roms/machines/pc916sx/ncr_386sx_u12-19_7.3.bin", + 0x000f0000, 65536, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -906,12 +870,11 @@ machine_at_pc916sx_init(const machine_t *model) mem_remap_top(384); if (fdc_type == FDC_INTERNAL) - device_add(&fdc_at_device); + device_add(&fdc_at_device); return ret; } - #if defined(DEV_BRANCH) && defined(USE_OLIVETTI) int machine_at_m290_init(const machine_t *model) @@ -919,17 +882,17 @@ machine_at_m290_init(const machine_t *model) int ret; ret = bios_load_linear("roms/machines/m290/m290_pep3_1.25.bin", - 0x000f0000, 65536, 0); + 0x000f0000, 65536, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 4); device_add(&keyboard_at_olivetti_device); device_add(&port_6x_olivetti_device); if (fdc_type == FDC_INTERNAL) - device_add(&fdc_at_device); + device_add(&fdc_at_device); device_add(&olivetti_eva_device); diff --git a/src/machine/m_at_386dx_486.c b/src/machine/m_at_386dx_486.c index 7baa85ed3..1f616b791 100644 --- a/src/machine/m_at_386dx_486.c +++ b/src/machine/m_at_386dx_486.c @@ -49,51 +49,48 @@ #include <86box/hwm.h> #include <86box/machine.h> - int machine_at_acc386_init(const machine_t *model) { int ret; - ret = bios_load_linear("roms/machines/acc386/acc386.BIN", - 0x000f0000, 65536, 0); + ret = bios_load_linear("roms/machines/acc386/acc386.BIN", + 0x000f0000, 65536, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); device_add(&acc2168_device); device_add(&keyboard_at_ami_device); if (fdc_type == FDC_INTERNAL) - device_add(&fdc_at_device); + device_add(&fdc_at_device); return ret; } - int machine_at_asus386_init(const machine_t *model) { int ret; - ret = bios_load_linear("roms/machines/asus386/ASUS_ISA-386C_BIOS.bin", - 0x000f0000, 65536, 0); + ret = bios_load_linear("roms/machines/asus386/ASUS_ISA-386C_BIOS.bin", + 0x000f0000, 65536, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); device_add(&rabbit_device); device_add(&keyboard_at_ami_device); if (fdc_type == FDC_INTERNAL) - device_add(&fdc_at_device); + device_add(&fdc_at_device); return ret; } - static void machine_at_sis401_common_init(const machine_t *model) { @@ -102,86 +99,82 @@ machine_at_sis401_common_init(const machine_t *model) device_add(&keyboard_at_ami_device); if (fdc_type == FDC_INTERNAL) - device_add(&fdc_at_device); + device_add(&fdc_at_device); } - int machine_at_sis401_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/sis401/SIS401-2.AMI", - 0x000f0000, 65536, 0); + 0x000f0000, 65536, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_sis401_common_init(model); return ret; } - int machine_at_isa486_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/isa486/ISA-486.BIN", - 0x000f0000, 65536, 0); + 0x000f0000, 65536, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_sis401_common_init(model); return ret; } - int machine_at_av4_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/av4/amibios_486dx_isa_bios_aa4025963.bin", - 0x000f0000, 65536, 0); + 0x000f0000, 65536, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_ide_init(model); device_add(&sis_85c460_device); device_add(&keyboard_at_ami_device); if (fdc_type == FDC_INTERNAL) - device_add(&fdc_at_device); + device_add(&fdc_at_device); return ret; } - int -machine_at_valuepoint433_init(const machine_t *model) // hangs without the PS/2 mouse +machine_at_valuepoint433_init(const machine_t *model) // hangs without the PS/2 mouse { int ret; ret = bios_load_linear("roms/machines/valuepoint433/$IMAGEP.FLH", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_ide_init(model); device_add(&sis_85c461_device); if (gfxcard == VID_INTERNAL) - device_add(&et4000w32_onboard_device); + device_add(&et4000w32_onboard_device); device_add(&keyboard_ps2_device); if (fdc_type == FDC_INTERNAL) - device_add(&fdc_at_device); + device_add(&fdc_at_device); return ret; } @@ -192,58 +185,56 @@ machine_at_ecs386_init(const machine_t *model) int ret; ret = bios_load_interleaved("roms/machines/ecs386/AMI BIOS for ECS-386_32 motherboard - L chip.bin", - "roms/machines/ecs386/AMI BIOS for ECS-386_32 motherboard - H chip.bin", - 0x000f0000, 65536, 0); + "roms/machines/ecs386/AMI BIOS for ECS-386_32 motherboard - H chip.bin", + 0x000f0000, 65536, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); device_add(&cs8230_device); if (fdc_type == FDC_INTERNAL) - device_add(&fdc_at_device); + device_add(&fdc_at_device); device_add(&keyboard_at_ami_device); return ret; } - int machine_at_spc6000a_init(const machine_t *model) { int ret; ret = bios_load_interleaved("roms/machines/spc6000a/3c80.u27", - "roms/machines/spc6000a/9f80.u26", - 0x000f8000, 32768, 0); + "roms/machines/spc6000a/9f80.u26", + 0x000f8000, 32768, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 1); device_add(&cs8230_device); if (fdc_type == FDC_INTERNAL) - device_add(&fdc_at_device); + device_add(&fdc_at_device); device_add(&keyboard_at_samsung_device); return ret; } - int machine_at_rycleopardlx_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/rycleopardlx/486-RYC-Leopard-LX.BIN", - 0x000f0000, 65536, 0); + 0x000f0000, 65536, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -251,22 +242,21 @@ machine_at_rycleopardlx_init(const machine_t *model) device_add(&keyboard_at_ami_device); if (fdc_type == FDC_INTERNAL) - device_add(&fdc_at_device); + device_add(&fdc_at_device); return ret; } - int machine_at_486vchd_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/486vchd/486-4386-VC-HD.BIN", - 0x000f0000, 65536, 0); + 0x000f0000, 65536, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -274,44 +264,42 @@ machine_at_486vchd_init(const machine_t *model) device_add(&keyboard_at_device); if (fdc_type == FDC_INTERNAL) - device_add(&fdc_at_device); + device_add(&fdc_at_device); return ret; } - int machine_at_cs4031_init(const machine_t *model) { int ret; - ret = bios_load_linear("roms/machines/cs4031/CHIPS_1.AMI", - 0x000f0000, 65536, 0); + ret = bios_load_linear("roms/machines/cs4031/CHIPS_1.AMI", + 0x000f0000, 65536, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); device_add(&cs4031_device); device_add(&keyboard_at_ami_device); if (fdc_type == FDC_INTERNAL) - device_add(&fdc_at_device); + device_add(&fdc_at_device); return ret; } - int machine_at_pb410a_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/pb410a/pb410a.080337.4abf.u25.bin", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_ibm_common_ide_init(model); @@ -323,29 +311,28 @@ machine_at_pb410a_init(const machine_t *model) device_add(&phoenix_486_jumper_device); if (gfxcard == VID_INTERNAL) - device_add(&ht216_32_pb410a_device); + device_add(&ht216_32_pb410a_device); return ret; } - int -machine_at_vect486vl_init(const machine_t *model) // has HDC problems +machine_at_vect486vl_init(const machine_t *model) // has HDC problems { int ret; - ret = bios_load_linear("roms/machines/vect486vl/aa0500.ami", - 0x000e0000, 131072, 0); + ret = bios_load_linear("roms/machines/vect486vl/aa0500.ami", + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_ide_init(model); device_add(&vl82c480_device); if (gfxcard == VID_INTERNAL) - device_add(&gd5428_onboard_device); + device_add(&gd5428_onboard_device); device_add(&keyboard_ps2_ami_device); device_add(&fdc37c651_ide_device); @@ -358,18 +345,18 @@ machine_at_d824_init(const machine_t *model) { int ret; - ret = bios_load_linear("roms/machines/d824/fts-biosupdated824noflashbiosepromv320-320334-160.bin", - 0x000e0000, 131072, 0); + ret = bios_load_linear("roms/machines/d824/fts-biosupdated824noflashbiosepromv320-320334-160.bin", + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); device_add(&vl82c480_device); if (gfxcard == VID_INTERNAL) - device_add(&gd5428_onboard_device); + device_add(&gd5428_onboard_device); device_add(&keyboard_ps2_device); device_add(&fdc37c651_device); @@ -382,23 +369,23 @@ machine_at_acera1g_init(const machine_t *model) { int ret; - ret = bios_load_linear("roms/machines/acera1g/4alo001.bin", - 0x000e0000, 131072, 0); + ret = bios_load_linear("roms/machines/acera1g/4alo001.bin", + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); device_add(&ali1429g_device); if (gfxcard == VID_INTERNAL) - device_add(&gd5428_onboard_device); + device_add(&gd5428_onboard_device); device_add(&keyboard_ps2_acer_pci_device); device_add(&ide_isa_2ch_device); if (fdc_type == FDC_INTERNAL) - device_add(&fdc_at_device); + device_add(&fdc_at_device); return ret; } @@ -408,11 +395,11 @@ machine_at_acerv10_init(const machine_t *model) { int ret; - ret = bios_load_linear("roms/machines/acerv10/ALL.BIN", - 0x000e0000, 131072, 0); + ret = bios_load_linear("roms/machines/acerv10/ALL.BIN", + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -421,29 +408,28 @@ machine_at_acerv10_init(const machine_t *model) device_add(&ide_isa_2ch_device); if (fdc_type == FDC_INTERNAL) - device_add(&fdc_at_device); + device_add(&fdc_at_device); return ret; } - int machine_at_decpclpv_init(const machine_t *model) { int ret; - ret = bios_load_linear("roms/machines/decpclpv/bios.bin", - 0x000e0000, 131072, 0); + ret = bios_load_linear("roms/machines/decpclpv/bios.bin", + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); device_add(&sis_85c461_device); if (gfxcard == VID_INTERNAL) - device_add(&s3_86c805_onboard_vlb_device); + device_add(&s3_86c805_onboard_vlb_device); /* TODO: Phoenix MultiKey KBC */ device_add(&keyboard_ps2_ami_pci_device); @@ -459,61 +445,58 @@ machine_at_ali1429_common_init(const machine_t *model, int is_green) machine_at_common_ide_init(model); if (is_green) - device_add(&ali1429g_device); + device_add(&ali1429g_device); else - device_add(&ali1429_device); + device_add(&ali1429_device); device_add(&keyboard_at_ami_device); if (fdc_type == FDC_INTERNAL) - device_add(&fdc_at_device); + device_add(&fdc_at_device); } - int machine_at_ali1429_init(const machine_t *model) { int ret; - ret = bios_load_linear("roms/machines/ali1429/ami486.BIN", - 0x000f0000, 65536, 0); + ret = bios_load_linear("roms/machines/ali1429/ami486.BIN", + 0x000f0000, 65536, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_ali1429_common_init(model, 0); return ret; } - int machine_at_winbios1429_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/win486/ali1429g.amw", - 0x000f0000, 65536, 0); + 0x000f0000, 65536, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_ali1429_common_init(model, 1); return ret; } - int machine_at_opti495_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/award495/opt495s.awa", - 0x000f0000, 65536, 0); + 0x000f0000, 65536, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_ide_init(model); @@ -522,12 +505,11 @@ machine_at_opti495_init(const machine_t *model) device_add(&keyboard_at_device); if (fdc_type == FDC_INTERNAL) - device_add(&fdc_at_device); + device_add(&fdc_at_device); return ret; } - static void machine_at_opti495_ami_common_init(const machine_t *model) { @@ -538,123 +520,116 @@ machine_at_opti495_ami_common_init(const machine_t *model) device_add(&keyboard_at_ami_device); if (fdc_type == FDC_INTERNAL) - device_add(&fdc_at_device); + device_add(&fdc_at_device); } - int machine_at_opti495_ami_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/ami495/opt495sx.ami", - 0x000f0000, 65536, 0); + 0x000f0000, 65536, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_opti495_ami_common_init(model); return ret; } - int machine_at_opti495_mr_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/mr495/opt495sx.mr", - 0x000f0000, 65536, 0); + 0x000f0000, 65536, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_opti495_ami_common_init(model); return ret; } - static void machine_at_403tg_common_init(const machine_t *model, int nvr_hack) { if (nvr_hack) { - machine_at_common_init_ex(model, 2); - device_add(&ami_1994_nvr_device); + machine_at_common_init_ex(model, 2); + device_add(&ami_1994_nvr_device); } else - machine_at_common_init(model); + machine_at_common_init(model); device_add(&opti895_device); device_add(&keyboard_at_ami_device); if (fdc_type == FDC_INTERNAL) - device_add(&fdc_at_device); + device_add(&fdc_at_device); } - int machine_at_403tg_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/403tg/403TG.BIN", - 0x000f0000, 65536, 0); + 0x000f0000, 65536, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_403tg_common_init(model, 0); return ret; } - int machine_at_403tg_d_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/403tg_d/J403TGRevD.BIN", - 0x000f0000, 65536, 0); + 0x000f0000, 65536, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_403tg_common_init(model, 1); return ret; } - int machine_at_403tg_d_mr_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/403tg_d/MRBiosOPT895.bin", - 0x000f0000, 65536, 0); + 0x000f0000, 65536, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_403tg_common_init(model, 0); return ret; } - int -machine_at_pc330_6573_init(const machine_t *model) /* doesn't like every CPU other than the iDX4 and the Intel OverDrive, hangs without a PS/2 mouse */ +machine_at_pc330_6573_init(const machine_t *model) /* doesn't like every CPU other than the iDX4 and the Intel OverDrive, hangs without a PS/2 mouse */ { int ret; ret = bios_load_linear("roms/machines/pc330_6573/$IMAGES.USF", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); pci_register_slot(0x10, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); @@ -672,17 +647,16 @@ machine_at_pc330_6573_init(const machine_t *model) /* doesn't like every CPU oth return ret; } - int machine_at_mvi486_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/mvi486/MVI627.BIN", - 0x000f0000, 65536, 0); + 0x000f0000, 65536, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -699,22 +673,21 @@ machine_at_sis_85c471_common_init(const machine_t *model) machine_at_common_init(model); if (fdc_type == FDC_INTERNAL) - device_add(&fdc_at_device); + device_add(&fdc_at_device); device_add(&sis_85c471_device); } - int machine_at_ami471_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/ami471/SIS471BE.AMI", - 0x000f0000, 65536, 0); + 0x000f0000, 65536, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_sis_85c471_common_init(model); device_add(&ide_vlb_device); @@ -723,17 +696,16 @@ machine_at_ami471_init(const machine_t *model) return ret; } - int machine_at_vli486sv2g_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/vli486sv2g/0402.001", - 0x000f0000, 65536, 0); + 0x000f0000, 65536, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_sis_85c471_common_init(model); device_add(&ide_vlb_2ch_device); @@ -742,17 +714,16 @@ machine_at_vli486sv2g_init(const machine_t *model) return ret; } - int machine_at_dtk486_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/dtk486/4siw005.bin", - 0x000f0000, 65536, 0); + 0x000f0000, 65536, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_sis_85c471_common_init(model); device_add(&ide_vlb_device); @@ -761,17 +732,16 @@ machine_at_dtk486_init(const machine_t *model) return ret; } - int machine_at_px471_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/px471/SIS471A1.PHO", - 0x000f0000, 65536, 0); + 0x000f0000, 65536, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_sis_85c471_common_init(model); device_add(&ide_vlb_device); @@ -780,17 +750,16 @@ machine_at_px471_init(const machine_t *model) return ret; } - int machine_at_win471_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/win471/486-SiS_AC0360136.BIN", - 0x000f0000, 65536, 0); + 0x000f0000, 65536, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_sis_85c471_common_init(model); device_add(&ide_vlb_device); @@ -799,17 +768,16 @@ machine_at_win471_init(const machine_t *model) return ret; } - int machine_at_vi15g_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/vi15g/vi15gr23.rom", - 0x000f0000, 65536, 0); + 0x000f0000, 65536, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_sis_85c471_common_init(model); device_add(&ide_vlb_device); @@ -818,22 +786,21 @@ machine_at_vi15g_init(const machine_t *model) return ret; } - int machine_at_greenb_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/greenb/4gpv31-ami-1993-8273517.bin", - 0x000f0000, 65536, 0); + 0x000f0000, 65536, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); if (fdc_type == FDC_INTERNAL) - device_add(&fdc_at_device); + device_add(&fdc_at_device); device_add(&contaq_82c597_device); @@ -842,7 +809,6 @@ machine_at_greenb_init(const machine_t *model) return ret; } - static void machine_at_sis_85c496_common_init(const machine_t *model) { @@ -857,17 +823,16 @@ machine_at_sis_85c496_common_init(const machine_t *model) pci_set_irq_routing(PCI_INTD, PCI_IRQ_DISABLED); } - int machine_at_r418_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/r418/r418i.bin", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 2); @@ -884,17 +849,16 @@ machine_at_r418_init(const machine_t *model) return ret; } - int machine_at_m4li_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/m4li/M4LI.04S", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 2); @@ -911,17 +875,16 @@ machine_at_m4li_init(const machine_t *model) return ret; } - int machine_at_ls486e_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/ls486e/LS486E RevC.BIN", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 2); @@ -938,17 +901,16 @@ machine_at_ls486e_init(const machine_t *model) return ret; } - int machine_at_4dps_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/4dps/4DPS172G.BIN", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 2); @@ -967,17 +929,16 @@ machine_at_4dps_init(const machine_t *model) return ret; } - int machine_at_486sp3c_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/486sp3c/SI4I0306.AWD", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 2); @@ -995,17 +956,16 @@ machine_at_486sp3c_init(const machine_t *model) return ret; } - int machine_at_4saw2_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/4saw2/4saw0911.bin", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 2); @@ -1024,17 +984,16 @@ machine_at_4saw2_init(const machine_t *model) return ret; } - int machine_at_alfredo_init(const machine_t *model) { int ret; ret = bios_load_linear_combined("roms/machines/alfredo/1010AQ0_.BIO", - "roms/machines/alfredo/1010AQ0_.BI1", 0x1c000, 128); + "roms/machines/alfredo/1010AQ0_.BI1", 0x1c000, 128); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); device_add(&ide_pci_2ch_device); @@ -1056,17 +1015,16 @@ machine_at_alfredo_init(const machine_t *model) return ret; } - int machine_at_ninja_init(const machine_t *model) { int ret; ret = bios_load_linear_combined("roms/machines/ninja/1008AY0_.BIO", - "roms/machines/ninja/1008AY0_.BI1", 0x1c000, 128); + "roms/machines/ninja/1008AY0_.BI1", 0x1c000, 128); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -1084,17 +1042,16 @@ machine_at_ninja_init(const machine_t *model) return ret; } - int machine_at_486sp3_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/486sp3/awsi2737.bin", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); device_add(&ide_isa_device); @@ -1118,17 +1075,16 @@ machine_at_486sp3_init(const machine_t *model) return ret; } - int machine_at_pci400cb_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/pci400cb/032295.ROM", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 2); device_add(&ami_1994_nvr_device); @@ -1146,22 +1102,21 @@ machine_at_pci400cb_init(const machine_t *model) device_add(&ims8848_device); if (fdc_type == FDC_INTERNAL) - device_add(&fdc_at_device); + device_add(&fdc_at_device); return ret; } - int machine_at_g486ip_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/g486ip/G486IP.BIN", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 2); device_add(&ami_1992_nvr_device); @@ -1177,22 +1132,21 @@ machine_at_g486ip_init(const machine_t *model) device_add(&ims8848_device); if (fdc_type == FDC_INTERNAL) - device_add(&fdc_at_device); + device_add(&fdc_at_device); return ret; } - int machine_at_486sp3g_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/486sp3g/PCI-I-486SP3G_0306.001 (Beta).bin", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); device_add(&ide_isa_device); @@ -1215,17 +1169,16 @@ machine_at_486sp3g_init(const machine_t *model) return ret; } - int machine_at_486ap4_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/486ap4/0205.002", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -1239,24 +1192,23 @@ machine_at_486ap4_init(const machine_t *model) device_add(&keyboard_ps2_ami_pci_device); /* Uses the AMIKEY KBC */ if (fdc_type == FDC_INTERNAL) - device_add(&fdc_at_device); + device_add(&fdc_at_device); device_add(&i420ex_device); return ret; } - int machine_at_g486vpa_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/g486vpa/3.BIN", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -1276,17 +1228,16 @@ machine_at_g486vpa_init(const machine_t *model) return ret; } - int machine_at_486vipio2_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/486vipio2/1175G701.BIN", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -1306,17 +1257,16 @@ machine_at_486vipio2_init(const machine_t *model) return ret; } - int machine_at_abpb4_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/abpb4/486-AB-PB4.BIN", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -1335,17 +1285,16 @@ machine_at_abpb4_init(const machine_t *model) return ret; } - int machine_at_win486pci_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/win486pci/v1hj3.BIN", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -1362,17 +1311,16 @@ machine_at_win486pci_init(const machine_t *model) return ret; } - int machine_at_ms4145_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/ms4145/AG56S.ROM", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -1391,17 +1339,16 @@ machine_at_ms4145_init(const machine_t *model) return ret; } - int machine_at_sbc490_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/sbc490/07159589.rom", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -1417,7 +1364,7 @@ machine_at_sbc490_init(const machine_t *model) device_add(&fdc37c665_device); if (gfxcard == VID_INTERNAL) - device_add(&tgui9440_onboard_pci_device); + device_add(&tgui9440_onboard_pci_device); device_add(&keyboard_ps2_ami_device); device_add(&sst_flash_29ee010_device); @@ -1431,10 +1378,10 @@ machine_at_tf486_init(const machine_t *model) int ret; ret = bios_load_linear("roms/machines/tf486/tf486v10.BIN", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -1450,17 +1397,16 @@ machine_at_tf486_init(const machine_t *model) return ret; } - int machine_at_itoxstar_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/itoxstar/STARA.ROM", - 0x000c0000, 262144, 0); + 0x000c0000, 262144, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -1472,25 +1418,24 @@ machine_at_itoxstar_init(const machine_t *model) device_add(&keyboard_ps2_ami_pci_device); device_add(&stpc_client_device); device_add(&sst_flash_29ee020_device); - device_add(&w83781d_device); /* fans: Chassis, CPU, unused; temperatures: Chassis, CPU, unused */ - hwm_values.fans[2] = 0; /* unused */ + device_add(&w83781d_device); /* fans: Chassis, CPU, unused; temperatures: Chassis, CPU, unused */ + hwm_values.fans[2] = 0; /* unused */ hwm_values.temperatures[2] = 0; /* unused */ - hwm_values.voltages[0] = 0; /* Vcore unused */ + hwm_values.voltages[0] = 0; /* Vcore unused */ return ret; } - int machine_at_arb1423c_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/arb1423c/A1423C.v12", - 0x000c0000, 262144, 0); + 0x000c0000, 262144, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -1508,17 +1453,16 @@ machine_at_arb1423c_init(const machine_t *model) return ret; } - int machine_at_arb1479_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/arb1479/1479A.rom", - 0x000c0000, 262144, 0); + 0x000c0000, 262144, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -1536,17 +1480,16 @@ machine_at_arb1479_init(const machine_t *model) return ret; } - int machine_at_pcm9340_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/pcm9340/9340v110.bin", - 0x000c0000, 262144, 0); + 0x000c0000, 262144, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -1565,17 +1508,16 @@ machine_at_pcm9340_init(const machine_t *model) return ret; } - int machine_at_pcm5330_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/pcm5330/5330_13b.bin", - 0x000c0000, 262144, 0); + 0x000c0000, 262144, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -1594,17 +1536,16 @@ machine_at_pcm5330_init(const machine_t *model) return ret; } - int machine_at_ecs486_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/ecs486/8810AIO.32J", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -1626,17 +1567,16 @@ machine_at_ecs486_init(const machine_t *model) return ret; } - int machine_at_hot433_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/hot433/433AUS33.ROM", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -1659,17 +1599,16 @@ machine_at_hot433_init(const machine_t *model) return ret; } - int machine_at_atc1415_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/atc1415/1415V330.ROM", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -1686,22 +1625,21 @@ machine_at_atc1415_init(const machine_t *model) device_add(&keyboard_at_ami_device); if (fdc_type == FDC_INTERNAL) - device_add(&fdc_at_device); + device_add(&fdc_at_device); return ret; } - int machine_at_actionpc2600_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/actionpc2600/action2600.BIN", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -1722,17 +1660,16 @@ machine_at_actionpc2600_init(const machine_t *model) return ret; } - int machine_at_m919_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/m919/9190914s.rom", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -1752,17 +1689,16 @@ machine_at_m919_init(const machine_t *model) return ret; } - int machine_at_spc7700plw_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/spc7700plw/77LW13FH.P24", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); diff --git a/src/machine/m_at_commodore.c b/src/machine/m_at_commodore.c index f9afdd1ef..a40fa2797 100644 --- a/src/machine/m_at_commodore.c +++ b/src/machine/m_at_commodore.c @@ -35,7 +35,7 @@ * 59 Temple Place - Suite 330 * Boston, MA 02111-1307 * USA. -*/ + */ #include #include #include @@ -53,10 +53,8 @@ #include <86box/fdc.h> #include <86box/machine.h> - static serial_t *cmd_uart; - static void cbm_io_write(uint16_t port, uint8_t val, void *p) { @@ -64,53 +62,51 @@ cbm_io_write(uint16_t port, uint8_t val, void *p) lpt2_remove(); switch (val & 3) { - case 1: - lpt1_init(LPT_MDA_ADDR); - break; - case 2: - lpt1_init(LPT1_ADDR); - break; - case 3: - lpt1_init(LPT2_ADDR); - break; + case 1: + lpt1_init(LPT_MDA_ADDR); + break; + case 2: + lpt1_init(LPT1_ADDR); + break; + case 3: + lpt1_init(LPT2_ADDR); + break; } switch (val & 0xc) { - case 0x4: - serial_setup(cmd_uart, COM2_ADDR, COM2_IRQ); - break; - case 0x8: - serial_setup(cmd_uart, COM1_ADDR, COM1_IRQ); - break; + case 0x4: + serial_setup(cmd_uart, COM2_ADDR, COM2_IRQ); + break; + case 0x8: + serial_setup(cmd_uart, COM1_ADDR, COM1_IRQ); + break; } } - static void cbm_io_init() { - io_sethandler(0x0230, 0x0001, NULL,NULL,NULL, cbm_io_write,NULL,NULL, NULL); + io_sethandler(0x0230, 0x0001, NULL, NULL, NULL, cbm_io_write, NULL, NULL, NULL); } - int machine_at_cmdpc_init(const machine_t *model) { int ret; ret = bios_load_interleaved("roms/machines/cmdpc30/commodore pc 30 iii even.bin", - "roms/machines/cmdpc30/commodore pc 30 iii odd.bin", - 0x000f8000, 32768, 0); + "roms/machines/cmdpc30/commodore pc 30 iii odd.bin", + 0x000f8000, 32768, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_init(model); mem_remap_top(384); if (fdc_type == FDC_INTERNAL) - device_add(&fdc_at_device); + device_add(&fdc_at_device); cmd_uart = device_add(&ns8250_device); diff --git a/src/machine/m_at_compaq.c b/src/machine/m_at_compaq.c index 686032493..2b22002dc 100644 --- a/src/machine/m_at_compaq.c +++ b/src/machine/m_at_compaq.c @@ -41,29 +41,26 @@ #include <86box/vid_cga.h> #include <86box/vid_cga_comp.h> - -enum -{ +enum { COMPAQ_PORTABLEII = 0, COMPAQ_PORTABLEIII, COMPAQ_PORTABLEIII386, COMPAQ_DESKPRO386 }; -#define CGA_RGB 0 +#define CGA_RGB 0 #define CGA_COMPOSITE 1 #define COMPOSITE_OLD 0 #define COMPOSITE_NEW 1 /*Very rough estimate*/ -#define VID_CLOCK (double)(651 * 416 * 60) - +#define VID_CLOCK (double) (651 * 416 * 60) /* Mapping of attributes to colours */ -static uint32_t amber, black; -static uint32_t blinkcols[256][2]; -static uint32_t normcols[256][2]; +static uint32_t amber, black; +static uint32_t blinkcols[256][2]; +static uint32_t normcols[256][2]; /* Video options set by the motherboard; they will be picked up by the card * on the next poll. @@ -77,225 +74,207 @@ static int8_t cpq_st_display_internal = -1; static void compaq_plasma_display_set(uint8_t internal) { - cpq_st_display_internal = internal; + cpq_st_display_internal = internal; } static uint8_t compaq_plasma_display_get(void) { - return cpq_st_display_internal; + return cpq_st_display_internal; } - -typedef struct compaq_plasma_t -{ - mem_mapping_t plasma_mapping; - cga_t cga; - uint8_t port_23c6; - uint8_t internal_monitor; - uint8_t attrmap; /* Attribute mapping register */ - int linepos, displine; - uint8_t *vram; - uint64_t dispontime, dispofftime; - int dispon, fullchange; +typedef struct compaq_plasma_t { + mem_mapping_t plasma_mapping; + cga_t cga; + uint8_t port_23c6; + uint8_t internal_monitor; + uint8_t attrmap; /* Attribute mapping register */ + int linepos, displine; + uint8_t *vram; + uint64_t dispontime, dispofftime; + int dispon, fullchange; } compaq_plasma_t; -static uint8_t cga_crtcmask[32] = -{ - 0xff, 0xff, 0xff, 0xff, 0x7f, 0x1f, 0x7f, 0x7f, 0xf3, 0x1f, 0x7f, 0x1f, 0x3f, 0xff, 0x3f, 0xff, - 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +static uint8_t cga_crtcmask[32] = { + 0xff, 0xff, 0xff, 0xff, 0x7f, 0x1f, 0x7f, 0x7f, 0xf3, 0x1f, 0x7f, 0x1f, 0x3f, 0xff, 0x3f, 0xff, + 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - /* Compaq Deskpro 386 remaps RAM from 0xA0000-0xFFFFF to 0xFA0000-0xFFFFFF */ -static mem_mapping_t ram_mapping; +static mem_mapping_t ram_mapping; static void compaq_plasma_recalcattrs(compaq_plasma_t *self); static void compaq_plasma_recalctimings(compaq_plasma_t *self) { - double _dispontime, _dispofftime, disptime; + double _dispontime, _dispofftime, disptime; - if (!self->internal_monitor && !(self->port_23c6 & 1)) { - cga_recalctimings(&self->cga); - return; - } + if (!self->internal_monitor && !(self->port_23c6 & 1)) { + cga_recalctimings(&self->cga); + return; + } - disptime = 651; - _dispontime = 640; - _dispofftime = disptime - _dispontime; - self->dispontime = (uint64_t)(_dispontime * (cpuclock / VID_CLOCK) * (double)(1ull << 32)); - self->dispofftime = (uint64_t)(_dispofftime * (cpuclock / VID_CLOCK) * (double)(1ull << 32)); + disptime = 651; + _dispontime = 640; + _dispofftime = disptime - _dispontime; + self->dispontime = (uint64_t) (_dispontime * (cpuclock / VID_CLOCK) * (double) (1ull << 32)); + self->dispofftime = (uint64_t) (_dispofftime * (cpuclock / VID_CLOCK) * (double) (1ull << 32)); } static void compaq_plasma_write(uint32_t addr, uint8_t val, void *priv) { - compaq_plasma_t *self = (compaq_plasma_t *)priv; + compaq_plasma_t *self = (compaq_plasma_t *) priv; - self->vram[addr & 0x7fff] = val; + self->vram[addr & 0x7fff] = val; } - static uint8_t compaq_plasma_read(uint32_t addr, void *priv) { - compaq_plasma_t *self = (compaq_plasma_t *)priv; - uint8_t ret; + compaq_plasma_t *self = (compaq_plasma_t *) priv; + uint8_t ret; - ret = (self->vram[addr & 0x7fff]); + ret = (self->vram[addr & 0x7fff]); - return ret; + return ret; } /* Draw a row of text in 80-column mode */ static void compaq_plasma_text80(compaq_plasma_t *self) { - uint32_t cols[2]; - int x, c; - uint8_t chr, attr; - int drawcursor; - int cursorline; - int blink; - uint16_t addr; - uint8_t sc; - uint16_t ma = (self->cga.crtc[13] | (self->cga.crtc[12] << 8)) & 0x7fff; - uint16_t ca = (self->cga.crtc[15] | (self->cga.crtc[14] << 8)) & 0x7fff; + uint32_t cols[2]; + int x, c; + uint8_t chr, attr; + int drawcursor; + int cursorline; + int blink; + uint16_t addr; + uint8_t sc; + uint16_t ma = (self->cga.crtc[13] | (self->cga.crtc[12] << 8)) & 0x7fff; + uint16_t ca = (self->cga.crtc[15] | (self->cga.crtc[14] << 8)) & 0x7fff; - sc = (self->displine) & 15; - addr = ((ma & ~1) + (self->displine >> 4) * 80) * 2; - ma += (self->displine >> 4) * 80; + sc = (self->displine) & 15; + addr = ((ma & ~1) + (self->displine >> 4) * 80) * 2; + ma += (self->displine >> 4) * 80; - if ((self->cga.crtc[10] & 0x60) == 0x20) - cursorline = 0; - else - cursorline = ((self->cga.crtc[10] & 0x0F)*2 <= sc) && - ((self->cga.crtc[11] & 0x0F)*2 >= sc); + if ((self->cga.crtc[10] & 0x60) == 0x20) + cursorline = 0; + else + cursorline = ((self->cga.crtc[10] & 0x0F) * 2 <= sc) && ((self->cga.crtc[11] & 0x0F) * 2 >= sc); - for (x = 0; x < 80; x++) { - chr = self->vram[(addr + 2 * x) & 0x7FFF]; - attr = self->vram[(addr + 2 * x + 1) & 0x7FFF]; - drawcursor = ((ma == ca) && cursorline && - (self->cga.cgamode & 8) && (self->cga.cgablink & 16)); + for (x = 0; x < 80; x++) { + chr = self->vram[(addr + 2 * x) & 0x7FFF]; + attr = self->vram[(addr + 2 * x + 1) & 0x7FFF]; + drawcursor = ((ma == ca) && cursorline && (self->cga.cgamode & 8) && (self->cga.cgablink & 16)); - blink = ((self->cga.cgablink & 16) && (self->cga.cgamode & 0x20) && - (attr & 0x80) && !drawcursor); + blink = ((self->cga.cgablink & 16) && (self->cga.cgamode & 0x20) && (attr & 0x80) && !drawcursor); - if (self->cga.cgamode & 0x20) { /* Blink */ - cols[1] = blinkcols[attr][1]; - cols[0] = blinkcols[attr][0]; - if (blink) - cols[1] = cols[0]; - } else { - cols[1] = normcols[attr][1]; - cols[0] = normcols[attr][0]; - } - if (drawcursor) { - for (c = 0; c < 8; c++) - ((uint32_t *)buffer32->line[self->displine])[(x << 3) + c] = cols[(fontdatm[chr][sc] & (1 << (c ^ 7))) ? 1 : 0] ^ (amber ^ black); - } else { - for (c = 0; c < 8; c++) - ((uint32_t *)buffer32->line[self->displine])[(x << 3) + c] = cols[(fontdatm[chr][sc] & (1 << (c ^ 7))) ? 1 : 0]; - } - ++ma; - } + if (self->cga.cgamode & 0x20) { /* Blink */ + cols[1] = blinkcols[attr][1]; + cols[0] = blinkcols[attr][0]; + if (blink) + cols[1] = cols[0]; + } else { + cols[1] = normcols[attr][1]; + cols[0] = normcols[attr][0]; + } + if (drawcursor) { + for (c = 0; c < 8; c++) + ((uint32_t *) buffer32->line[self->displine])[(x << 3) + c] = cols[(fontdatm[chr][sc] & (1 << (c ^ 7))) ? 1 : 0] ^ (amber ^ black); + } else { + for (c = 0; c < 8; c++) + ((uint32_t *) buffer32->line[self->displine])[(x << 3) + c] = cols[(fontdatm[chr][sc] & (1 << (c ^ 7))) ? 1 : 0]; + } + ++ma; + } } /* Draw a row of text in 40-column mode */ static void compaq_plasma_text40(compaq_plasma_t *self) { - uint32_t cols[2]; - int x, c; - uint8_t chr, attr; - int drawcursor; - int cursorline; - int blink; - uint16_t addr; - uint8_t sc; - uint16_t ma = (self->cga.crtc[13] | (self->cga.crtc[12] << 8)) & 0x7fff; - uint16_t ca = (self->cga.crtc[15] | (self->cga.crtc[14] << 8)) & 0x7fff; + uint32_t cols[2]; + int x, c; + uint8_t chr, attr; + int drawcursor; + int cursorline; + int blink; + uint16_t addr; + uint8_t sc; + uint16_t ma = (self->cga.crtc[13] | (self->cga.crtc[12] << 8)) & 0x7fff; + uint16_t ca = (self->cga.crtc[15] | (self->cga.crtc[14] << 8)) & 0x7fff; - sc = (self->displine) & 15; - addr = ((ma & ~1) + (self->displine >> 4) * 40) * 2; - ma += (self->displine >> 4) * 40; + sc = (self->displine) & 15; + addr = ((ma & ~1) + (self->displine >> 4) * 40) * 2; + ma += (self->displine >> 4) * 40; - if ((self->cga.crtc[10] & 0x60) == 0x20) - cursorline = 0; - else - cursorline = ((self->cga.crtc[10] & 0x0F)*2 <= sc) && - ((self->cga.crtc[11] & 0x0F)*2 >= sc); + if ((self->cga.crtc[10] & 0x60) == 0x20) + cursorline = 0; + else + cursorline = ((self->cga.crtc[10] & 0x0F) * 2 <= sc) && ((self->cga.crtc[11] & 0x0F) * 2 >= sc); - for (x = 0; x < 40; x++) { - chr = self->vram[(addr + 2 * x) & 0x7FFF]; - attr = self->vram[(addr + 2 * x + 1) & 0x7FFF]; - drawcursor = ((ma == ca) && cursorline && - (self->cga.cgamode & 8) && (self->cga.cgablink & 16)); + for (x = 0; x < 40; x++) { + chr = self->vram[(addr + 2 * x) & 0x7FFF]; + attr = self->vram[(addr + 2 * x + 1) & 0x7FFF]; + drawcursor = ((ma == ca) && cursorline && (self->cga.cgamode & 8) && (self->cga.cgablink & 16)); - blink = ((self->cga.cgablink & 16) && (self->cga.cgamode & 0x20) && - (attr & 0x80) && !drawcursor); + blink = ((self->cga.cgablink & 16) && (self->cga.cgamode & 0x20) && (attr & 0x80) && !drawcursor); - if (self->cga.cgamode & 0x20) { /* Blink */ - cols[1] = blinkcols[attr][1]; - cols[0] = blinkcols[attr][0]; - if (blink) - cols[1] = cols[0]; - } else { - cols[1] = normcols[attr][1]; - cols[0] = normcols[attr][0]; - } - if (drawcursor) { - for (c = 0; c < 8; c++) { - ((uint32_t *)buffer32->line[self->displine])[(x << 4) + c*2] = - ((uint32_t *)buffer32->line[self->displine])[(x << 4) + c*2 + 1] = cols[(fontdatm[chr][sc] & (1 << (c ^ 7))) ? 1 : 0] ^ (amber ^ black); - } - } else { - for (c = 0; c < 8; c++) { - ((uint32_t *)buffer32->line[self->displine])[(x << 4) + c*2] = - ((uint32_t *)buffer32->line[self->displine])[(x << 4) + c*2+1] = cols[(fontdatm[chr][sc] & (1 << (c ^ 7))) ? 1 : 0]; - } - } - ++ma; - } + if (self->cga.cgamode & 0x20) { /* Blink */ + cols[1] = blinkcols[attr][1]; + cols[0] = blinkcols[attr][0]; + if (blink) + cols[1] = cols[0]; + } else { + cols[1] = normcols[attr][1]; + cols[0] = normcols[attr][0]; + } + if (drawcursor) { + for (c = 0; c < 8; c++) { + ((uint32_t *) buffer32->line[self->displine])[(x << 4) + c * 2] = ((uint32_t *) buffer32->line[self->displine])[(x << 4) + c * 2 + 1] = cols[(fontdatm[chr][sc] & (1 << (c ^ 7))) ? 1 : 0] ^ (amber ^ black); + } + } else { + for (c = 0; c < 8; c++) { + ((uint32_t *) buffer32->line[self->displine])[(x << 4) + c * 2] = ((uint32_t *) buffer32->line[self->displine])[(x << 4) + c * 2 + 1] = cols[(fontdatm[chr][sc] & (1 << (c ^ 7))) ? 1 : 0]; + } + } + ++ma; + } } - /* Draw a line in CGA 640x200 or Compaq Plasma 640x400 mode */ static void compaq_plasma_cgaline6(compaq_plasma_t *self) { - int x, c; - uint8_t dat; - uint32_t ink = 0; - uint16_t addr; - uint32_t fg = (self->cga.cgacol & 0x0F) ? amber : black; - uint32_t bg = black; + int x, c; + uint8_t dat; + uint32_t ink = 0; + uint16_t addr; + uint32_t fg = (self->cga.cgacol & 0x0F) ? amber : black; + uint32_t bg = black; - uint16_t ma = (self->cga.crtc[13] | (self->cga.crtc[12] << 8)) & 0x7fff; + uint16_t ma = (self->cga.crtc[13] | (self->cga.crtc[12] << 8)) & 0x7fff; - if ((self->cga.crtc[9] == 3) || (self->port_23c6 & 1)) /* 640*400 */ { - addr = ((self->displine) & 1) * 0x2000 + - ((self->displine >> 1) & 1) * 0x4000 + - (self->displine >> 2) * 80 + - ((ma & ~1) << 1); - } else { - addr = ((self->displine >> 1) & 1) * 0x2000 + - (self->displine >> 2) * 80 + - ((ma & ~1) << 1); - } - for (x = 0; x < 80; x++) { - dat = self->vram[(addr & 0x7FFF)]; - addr++; + if ((self->cga.crtc[9] == 3) || (self->port_23c6 & 1)) /* 640*400 */ { + addr = ((self->displine) & 1) * 0x2000 + ((self->displine >> 1) & 1) * 0x4000 + (self->displine >> 2) * 80 + ((ma & ~1) << 1); + } else { + addr = ((self->displine >> 1) & 1) * 0x2000 + (self->displine >> 2) * 80 + ((ma & ~1) << 1); + } + for (x = 0; x < 80; x++) { + dat = self->vram[(addr & 0x7FFF)]; + addr++; - for (c = 0; c < 8; c++) { - ink = (dat & 0x80) ? fg : bg; - if (!(self->cga.cgamode & 8)) ink = black; - ((uint32_t *)buffer32->line[self->displine])[x*8+c] = ink; - dat <<= 1; - } - } + for (c = 0; c < 8; c++) { + ink = (dat & 0x80) ? fg : bg; + if (!(self->cga.cgamode & 8)) + ink = black; + ((uint32_t *) buffer32->line[self->displine])[x * 8 + c] = ink; + dat <<= 1; + } + } } /* Draw a line in CGA 320x200 mode. Here the CGA colours are converted to @@ -303,374 +282,380 @@ compaq_plasma_cgaline6(compaq_plasma_t *self) static void compaq_plasma_cgaline4(compaq_plasma_t *self) { - int x, c; - uint8_t dat, pattern; - uint32_t ink0 = 0, ink1 = 0; - uint16_t addr; + int x, c; + uint8_t dat, pattern; + uint32_t ink0 = 0, ink1 = 0; + uint16_t addr; - uint16_t ma = (self->cga.crtc[13] | (self->cga.crtc[12] << 8)) & 0x7fff; + uint16_t ma = (self->cga.crtc[13] | (self->cga.crtc[12] << 8)) & 0x7fff; - /* 320*200 */ - addr = ((self->displine >> 1) & 1) * 0x2000 + - (self->displine >> 2) * 80 + - ((ma & ~1) << 1); + /* 320*200 */ + addr = ((self->displine >> 1) & 1) * 0x2000 + (self->displine >> 2) * 80 + ((ma & ~1) << 1); - for (x = 0; x < 80; x++) { - dat = self->vram[(addr & 0x7FFF)]; - addr++; + for (x = 0; x < 80; x++) { + dat = self->vram[(addr & 0x7FFF)]; + addr++; - for (c = 0; c < 4; c++) { - pattern = (dat & 0xC0) >> 6; - if (!(self->cga.cgamode & 8)) - pattern = 0; + for (c = 0; c < 4; c++) { + pattern = (dat & 0xC0) >> 6; + if (!(self->cga.cgamode & 8)) + pattern = 0; - switch (pattern & 3) { - case 0: ink0 = ink1 = black; break; - case 1: if (self->displine & 1) { - ink0 = black; ink1 = black; - } else { - ink0 = amber; ink1 = black; - } - break; - case 2: if (self->displine & 1) { - ink0 = black; ink1 = amber; - } else { - ink0 = amber; ink1 = black; - } - break; - case 3: ink0 = ink1 = amber; break; - - } - ((uint32_t *)buffer32->line[self->displine])[x*8+2*c] = ink0; - ((uint32_t *)buffer32->line[self->displine])[x*8+2*c+1] = ink1; - dat <<= 2; - } - } + switch (pattern & 3) { + case 0: + ink0 = ink1 = black; + break; + case 1: + if (self->displine & 1) { + ink0 = black; + ink1 = black; + } else { + ink0 = amber; + ink1 = black; + } + break; + case 2: + if (self->displine & 1) { + ink0 = black; + ink1 = amber; + } else { + ink0 = amber; + ink1 = black; + } + break; + case 3: + ink0 = ink1 = amber; + break; + } + ((uint32_t *) buffer32->line[self->displine])[x * 8 + 2 * c] = ink0; + ((uint32_t *) buffer32->line[self->displine])[x * 8 + 2 * c + 1] = ink1; + dat <<= 2; + } + } } static void compaq_plasma_out(uint16_t addr, uint8_t val, void *priv) { - compaq_plasma_t *self = (compaq_plasma_t *)priv; - uint8_t old; + compaq_plasma_t *self = (compaq_plasma_t *) priv; + uint8_t old; - switch (addr) { - /* Emulated CRTC, register select */ - case 0x3d4: - self->cga.crtcreg = val & 31; - break; + switch (addr) { + /* Emulated CRTC, register select */ + case 0x3d4: + self->cga.crtcreg = val & 31; + break; - /* Emulated CRTC, value */ - case 0x3d5: - old = self->cga.crtc[self->cga.crtcreg]; - self->cga.crtc[self->cga.crtcreg] = val & cga_crtcmask[self->cga.crtcreg]; + /* Emulated CRTC, value */ + case 0x3d5: + old = self->cga.crtc[self->cga.crtcreg]; + self->cga.crtc[self->cga.crtcreg] = val & cga_crtcmask[self->cga.crtcreg]; - /* Register 0x12 controls the attribute mappings for the - * plasma screen. */ - if (self->cga.crtcreg == 0x12) { - self->attrmap = val; - compaq_plasma_recalcattrs(self); - break; - } + /* Register 0x12 controls the attribute mappings for the + * plasma screen. */ + if (self->cga.crtcreg == 0x12) { + self->attrmap = val; + compaq_plasma_recalcattrs(self); + break; + } - if (old != val) { - if (self->cga.crtcreg < 0xe || self->cga.crtcreg > 0x10) { - self->fullchange = changeframecount; - compaq_plasma_recalctimings(self); - } - } - break; + if (old != val) { + if (self->cga.crtcreg < 0xe || self->cga.crtcreg > 0x10) { + self->fullchange = changeframecount; + compaq_plasma_recalctimings(self); + } + } + break; - case 0x3d8: - self->cga.cgamode = val; - break; + case 0x3d8: + self->cga.cgamode = val; + break; - case 0x3d9: - self->cga.cgacol = val; - break; + case 0x3d9: + self->cga.cgacol = val; + break; - case 0x13c6: - if (val & 8) - compaq_plasma_display_set(1); - else - compaq_plasma_display_set(0); - break; + case 0x13c6: + if (val & 8) + compaq_plasma_display_set(1); + else + compaq_plasma_display_set(0); + break; - case 0x23c6: - self->port_23c6 = val; - if (val & 8) /* Disable internal CGA */ - mem_mapping_disable(&self->plasma_mapping); - else - mem_mapping_enable(&self->plasma_mapping); - break; - } + case 0x23c6: + self->port_23c6 = val; + if (val & 8) /* Disable internal CGA */ + mem_mapping_disable(&self->plasma_mapping); + else + mem_mapping_enable(&self->plasma_mapping); + break; + } } - static uint8_t compaq_plasma_in(uint16_t addr, void *priv) { - compaq_plasma_t *self = (compaq_plasma_t *)priv; - uint8_t ret = 0xff; + compaq_plasma_t *self = (compaq_plasma_t *) priv; + uint8_t ret = 0xff; - switch (addr) { - case 0x3d4: - ret = self->cga.crtcreg; - break; + switch (addr) { + case 0x3d4: + ret = self->cga.crtcreg; + break; - case 0x3d5: - if (self->cga.crtcreg == 0x12) { - ret = self->attrmap & 0x0F; - if (self->internal_monitor) - ret |= 0x30; /* Plasma / CRT */ - } else - ret = self->cga.crtc[self->cga.crtcreg]; - break; + case 0x3d5: + if (self->cga.crtcreg == 0x12) { + ret = self->attrmap & 0x0F; + if (self->internal_monitor) + ret |= 0x30; /* Plasma / CRT */ + } else + ret = self->cga.crtc[self->cga.crtcreg]; + break; - case 0x3da: - ret = self->cga.cgastat; - break; + case 0x3da: + ret = self->cga.cgastat; + break; - case 0x13c6: - if (compaq_plasma_display_get()) - ret = 8; - else - ret = 0; - break; + case 0x13c6: + if (compaq_plasma_display_get()) + ret = 8; + else + ret = 0; + break; - case 0x23c6: - ret = self->port_23c6; - break; - } + case 0x23c6: + ret = self->port_23c6; + break; + } - return ret; + return ret; } static void compaq_plasma_poll(void *p) { - compaq_plasma_t *self = (compaq_plasma_t *)p; + compaq_plasma_t *self = (compaq_plasma_t *) p; - /* Switch between internal plasma and external CRT display. */ - if (cpq_st_display_internal != -1 && cpq_st_display_internal != self->internal_monitor) { - self->internal_monitor = cpq_st_display_internal; - compaq_plasma_recalctimings(self); - } + /* Switch between internal plasma and external CRT display. */ + if (cpq_st_display_internal != -1 && cpq_st_display_internal != self->internal_monitor) { + self->internal_monitor = cpq_st_display_internal; + compaq_plasma_recalctimings(self); + } - if (!self->internal_monitor && !(self->port_23c6 & 1)) { - cga_poll(&self->cga); - return; - } + if (!self->internal_monitor && !(self->port_23c6 & 1)) { + cga_poll(&self->cga); + return; + } - if (!self->linepos) { - timer_advance_u64(&self->cga.timer, self->dispofftime); - self->cga.cgastat |= 1; - self->linepos = 1; - if (self->dispon) { - if (self->displine == 0) - video_wait_for_buffer(); + if (!self->linepos) { + timer_advance_u64(&self->cga.timer, self->dispofftime); + self->cga.cgastat |= 1; + self->linepos = 1; + if (self->dispon) { + if (self->displine == 0) + video_wait_for_buffer(); - /* Graphics */ - if (self->cga.cgamode & 0x02) { - if (self->cga.cgamode & 0x10) - compaq_plasma_cgaline6(self); - else - compaq_plasma_cgaline4(self); - } - else if (self->cga.cgamode & 0x01) /* High-res text */ - compaq_plasma_text80(self); - else - compaq_plasma_text40(self); - } - self->displine++; - /* Hardcode a fixed refresh rate and VSYNC timing */ - if (self->displine == 400) { /* Start of VSYNC */ - self->cga.cgastat |= 8; - self->dispon = 0; - } - if (self->displine == 416) { /* End of VSYNC */ - self->displine = 0; - self->cga.cgastat &= ~8; - self->dispon = 1; - } - } else { - if (self->dispon) - self->cga.cgastat &= ~1; - - timer_advance_u64(&self->cga.timer, self->dispontime); - self->linepos = 0; - - if (self->displine == 400) { - /* Hardcode 640x400 window size */ - if ((640 != xsize) || (400 != ysize) || video_force_resize_get()) { - xsize = 640; - ysize = 400; - if (xsize < 64) - xsize = 656; - if (ysize < 32) - ysize = 200; - set_screen_size(xsize, ysize); - - if (video_force_resize_get()) - video_force_resize_set(0); - } - video_blit_memtoscreen(0, 0, xsize, ysize); - frames++; - - /* Fixed 640x400 resolution */ - video_res_x = 640; - video_res_y = 400; - - if (self->cga.cgamode & 0x02) { - if (self->cga.cgamode & 0x10) - video_bpp = 1; - else - video_bpp = 2; - - } else - video_bpp = 0; - self->cga.cgablink++; - } + /* Graphics */ + if (self->cga.cgamode & 0x02) { + if (self->cga.cgamode & 0x10) + compaq_plasma_cgaline6(self); + else + compaq_plasma_cgaline4(self); + } else if (self->cga.cgamode & 0x01) /* High-res text */ + compaq_plasma_text80(self); + else + compaq_plasma_text40(self); } + self->displine++; + /* Hardcode a fixed refresh rate and VSYNC timing */ + if (self->displine == 400) { /* Start of VSYNC */ + self->cga.cgastat |= 8; + self->dispon = 0; + } + if (self->displine == 416) { /* End of VSYNC */ + self->displine = 0; + self->cga.cgastat &= ~8; + self->dispon = 1; + } + } else { + if (self->dispon) + self->cga.cgastat &= ~1; + + timer_advance_u64(&self->cga.timer, self->dispontime); + self->linepos = 0; + + if (self->displine == 400) { + /* Hardcode 640x400 window size */ + if ((640 != xsize) || (400 != ysize) || video_force_resize_get()) { + xsize = 640; + ysize = 400; + if (xsize < 64) + xsize = 656; + if (ysize < 32) + ysize = 200; + set_screen_size(xsize, ysize); + + if (video_force_resize_get()) + video_force_resize_set(0); + } + video_blit_memtoscreen(0, 0, xsize, ysize); + frames++; + + /* Fixed 640x400 resolution */ + video_res_x = 640; + video_res_y = 400; + + if (self->cga.cgamode & 0x02) { + if (self->cga.cgamode & 0x10) + video_bpp = 1; + else + video_bpp = 2; + + } else + video_bpp = 0; + self->cga.cgablink++; + } + } } static void compaq_plasma_recalcattrs(compaq_plasma_t *self) { - int n; + int n; - /* val behaves as follows: - * Bit 0: Attributes 01-06, 08-0E are inverse video - * Bit 1: Attributes 01-06, 08-0E are bold - * Bit 2: Attributes 11-16, 18-1F, 21-26, 28-2F ... F1-F6, F8-FF - * are inverse video - * Bit 3: Attributes 11-16, 18-1F, 21-26, 28-2F ... F1-F6, F8-FF - * are bold */ + /* val behaves as follows: + * Bit 0: Attributes 01-06, 08-0E are inverse video + * Bit 1: Attributes 01-06, 08-0E are bold + * Bit 2: Attributes 11-16, 18-1F, 21-26, 28-2F ... F1-F6, F8-FF + * are inverse video + * Bit 3: Attributes 11-16, 18-1F, 21-26, 28-2F ... F1-F6, F8-FF + * are bold */ - /* Set up colours */ - amber = makecol(0xff, 0x7D, 0x00); - black = makecol(0x64, 0x19, 0x00); + /* Set up colours */ + amber = makecol(0xff, 0x7D, 0x00); + black = makecol(0x64, 0x19, 0x00); - /* Initialise the attribute mapping. Start by defaulting everything - * to black on amber, and with bold set by bit 3 */ - for (n = 0; n < 256; n++) { - blinkcols[n][0] = normcols[n][0] = amber; - blinkcols[n][1] = normcols[n][1] = black; - } + /* Initialise the attribute mapping. Start by defaulting everything + * to black on amber, and with bold set by bit 3 */ + for (n = 0; n < 256; n++) { + blinkcols[n][0] = normcols[n][0] = amber; + blinkcols[n][1] = normcols[n][1] = black; + } - /* Colours 0x11-0xFF are controlled by bits 2 and 3 of the - * passed value. Exclude x0 and x8, which are always black on - * amber. */ - for (n = 0x11; n <= 0xFF; n++) { - if ((n & 7) == 0) - continue; - if (self->attrmap & 4) { /* Inverse */ - blinkcols[n][0] = normcols[n][0] = amber; - blinkcols[n][1] = normcols[n][1] = black; - } else { /* Normal */ - blinkcols[n][0] = normcols[n][0] = black; - blinkcols[n][1] = normcols[n][1] = amber; - } - } - /* Set up the 01-0E range, controlled by bits 0 and 1 of the - * passed value. When blinking is enabled this also affects 81-8E. */ - for (n = 0x01; n <= 0x0E; n++) { - if (n == 7) - continue; - if (self->attrmap & 1) { - blinkcols[n][0] = normcols[n][0] = amber; - blinkcols[n][1] = normcols[n][1] = black; - blinkcols[n+128][0] = amber; - blinkcols[n+128][1] = black; - } else { - blinkcols[n][0] = normcols[n][0] = black; - blinkcols[n][1] = normcols[n][1] = amber; - blinkcols[n+128][0] = black; - blinkcols[n+128][1] = amber; - } - } - /* Colours 07 and 0F are always amber on black. If blinking is - * enabled so are 87 and 8F. */ - for (n = 0x07; n <= 0x0F; n += 8) { - blinkcols[n][0] = normcols[n][0] = black; - blinkcols[n][1] = normcols[n][1] = amber; - blinkcols[n+128][0] = black; - blinkcols[n+128][1] = amber; - } - /* When not blinking, colours 81-8F are always amber on black. */ - for (n = 0x81; n <= 0x8F; n ++) { - normcols[n][0] = black; - normcols[n][1] = amber; - } + /* Colours 0x11-0xFF are controlled by bits 2 and 3 of the + * passed value. Exclude x0 and x8, which are always black on + * amber. */ + for (n = 0x11; n <= 0xFF; n++) { + if ((n & 7) == 0) + continue; + if (self->attrmap & 4) { /* Inverse */ + blinkcols[n][0] = normcols[n][0] = amber; + blinkcols[n][1] = normcols[n][1] = black; + } else { /* Normal */ + blinkcols[n][0] = normcols[n][0] = black; + blinkcols[n][1] = normcols[n][1] = amber; + } + } + /* Set up the 01-0E range, controlled by bits 0 and 1 of the + * passed value. When blinking is enabled this also affects 81-8E. */ + for (n = 0x01; n <= 0x0E; n++) { + if (n == 7) + continue; + if (self->attrmap & 1) { + blinkcols[n][0] = normcols[n][0] = amber; + blinkcols[n][1] = normcols[n][1] = black; + blinkcols[n + 128][0] = amber; + blinkcols[n + 128][1] = black; + } else { + blinkcols[n][0] = normcols[n][0] = black; + blinkcols[n][1] = normcols[n][1] = amber; + blinkcols[n + 128][0] = black; + blinkcols[n + 128][1] = amber; + } + } + /* Colours 07 and 0F are always amber on black. If blinking is + * enabled so are 87 and 8F. */ + for (n = 0x07; n <= 0x0F; n += 8) { + blinkcols[n][0] = normcols[n][0] = black; + blinkcols[n][1] = normcols[n][1] = amber; + blinkcols[n + 128][0] = black; + blinkcols[n + 128][1] = amber; + } + /* When not blinking, colours 81-8F are always amber on black. */ + for (n = 0x81; n <= 0x8F; n++) { + normcols[n][0] = black; + normcols[n][1] = amber; + } - /* Finally do the ones which are solid black. These differ between - * the normal and blinking mappings */ - for (n = 0; n <= 0xFF; n += 0x11) - normcols[n][0] = normcols[n][1] = black; + /* Finally do the ones which are solid black. These differ between + * the normal and blinking mappings */ + for (n = 0; n <= 0xFF; n += 0x11) + normcols[n][0] = normcols[n][1] = black; - /* In the blinking range, 00 11 22 .. 77 and 80 91 A2 .. F7 are black */ - for (n = 0; n <= 0x77; n += 0x11) { - blinkcols[n][0] = blinkcols[n][1] = black; - blinkcols[n+128][0] = blinkcols[n+128][1] = black; - } + /* In the blinking range, 00 11 22 .. 77 and 80 91 A2 .. F7 are black */ + for (n = 0; n <= 0x77; n += 0x11) { + blinkcols[n][0] = blinkcols[n][1] = black; + blinkcols[n + 128][0] = blinkcols[n + 128][1] = black; + } } static void * compaq_plasma_init(const device_t *info) { - int display_type; - compaq_plasma_t *self = malloc(sizeof(compaq_plasma_t)); - memset(self, 0, sizeof(compaq_plasma_t)); + int display_type; + compaq_plasma_t *self = malloc(sizeof(compaq_plasma_t)); + memset(self, 0, sizeof(compaq_plasma_t)); - display_type = device_get_config_int("display_type"); - self->cga.composite = (display_type != CGA_RGB); - self->cga.revision = device_get_config_int("composite_type"); + display_type = device_get_config_int("display_type"); + self->cga.composite = (display_type != CGA_RGB); + self->cga.revision = device_get_config_int("composite_type"); - self->vram = malloc(0x8000); - self->internal_monitor = 1; + self->vram = malloc(0x8000); + self->internal_monitor = 1; - cga_comp_init(self->cga.revision); - timer_add(&self->cga.timer, compaq_plasma_poll, self, 1); - mem_mapping_add(&self->plasma_mapping, 0xb8000, 0x08000, compaq_plasma_read, NULL, NULL, compaq_plasma_write, NULL, NULL, NULL /*self->cga.vram*/, MEM_MAPPING_EXTERNAL, self); - io_sethandler(0x03d0, 0x0010, compaq_plasma_in, NULL, NULL, compaq_plasma_out, NULL, NULL, self); - io_sethandler(0x13c6, 0x0001, compaq_plasma_in, NULL, NULL, compaq_plasma_out, NULL, NULL, self); - io_sethandler(0x23c6, 0x0001, compaq_plasma_in, NULL, NULL, compaq_plasma_out, NULL, NULL, self); + cga_comp_init(self->cga.revision); + timer_add(&self->cga.timer, compaq_plasma_poll, self, 1); + mem_mapping_add(&self->plasma_mapping, 0xb8000, 0x08000, compaq_plasma_read, NULL, NULL, compaq_plasma_write, NULL, NULL, NULL /*self->cga.vram*/, MEM_MAPPING_EXTERNAL, self); + io_sethandler(0x03d0, 0x0010, compaq_plasma_in, NULL, NULL, compaq_plasma_out, NULL, NULL, self); + io_sethandler(0x13c6, 0x0001, compaq_plasma_in, NULL, NULL, compaq_plasma_out, NULL, NULL, self); + io_sethandler(0x23c6, 0x0001, compaq_plasma_in, NULL, NULL, compaq_plasma_out, NULL, NULL, self); - /* Default attribute mapping is 4 */ - self->attrmap = 4; - compaq_plasma_recalcattrs(self); + /* Default attribute mapping is 4 */ + self->attrmap = 4; + compaq_plasma_recalcattrs(self); - self->cga.cgastat = 0xF4; - self->cga.vram = self->vram; + self->cga.cgastat = 0xF4; + self->cga.vram = self->vram; - overscan_x = overscan_y = 16; + overscan_x = overscan_y = 16; - self->cga.rgb_type = device_get_config_int("rgb_type"); - cga_palette = (self->cga.rgb_type << 1); - cgapal_rebuild(); + self->cga.rgb_type = device_get_config_int("rgb_type"); + cga_palette = (self->cga.rgb_type << 1); + cgapal_rebuild(); - return self; + return self; } static void compaq_plasma_close(void *p) { - compaq_plasma_t *self = (compaq_plasma_t *)p; + compaq_plasma_t *self = (compaq_plasma_t *) p; - free(self->vram); + free(self->vram); - free(self); + free(self); } static void compaq_plasma_speed_changed(void *p) { - compaq_plasma_t *self = (compaq_plasma_t *)p; + compaq_plasma_t *self = (compaq_plasma_t *) p; - compaq_plasma_recalctimings(self); + compaq_plasma_recalctimings(self); } const device_config_t compaq_plasma_config[] = { + // clang-format off { .name = "display_type", .description = "Display type", @@ -717,20 +702,21 @@ const device_config_t compaq_plasma_config[] = { } }, { .name = "", .description = "", .type = CONFIG_END } +// clang-format on }; const device_t compaq_plasma_device = { - .name = "Compaq Plasma", + .name = "Compaq Plasma", .internal_name = "compaq_plasma", - .flags = 0, - .local = 0, - .init = compaq_plasma_init, - .close = compaq_plasma_close, - .reset = NULL, + .flags = 0, + .local = 0, + .init = compaq_plasma_init, + .close = compaq_plasma_close, + .reset = NULL, { .available = NULL }, .speed_changed = compaq_plasma_speed_changed, - .force_redraw = NULL, - .config = compaq_plasma_config + .force_redraw = NULL, + .config = compaq_plasma_config }; static uint8_t @@ -739,30 +725,27 @@ read_ram(uint32_t addr, void *priv) addr = (addr & 0x7ffff) + 0x80000; addreadlookup(mem_logical_addr, addr); - return(ram[addr]); + return (ram[addr]); } - static uint16_t read_ramw(uint32_t addr, void *priv) { addr = (addr & 0x7ffff) + 0x80000; addreadlookup(mem_logical_addr, addr); - return(*(uint16_t *)&ram[addr]); + return (*(uint16_t *) &ram[addr]); } - static uint32_t read_raml(uint32_t addr, void *priv) { addr = (addr & 0x7ffff) + 0x80000; addreadlookup(mem_logical_addr, addr); - return(*(uint32_t *)&ram[addr]); + return (*(uint32_t *) &ram[addr]); } - static void write_ram(uint32_t addr, uint8_t val, void *priv) { @@ -772,7 +755,6 @@ write_ram(uint32_t addr, uint8_t val, void *priv) mem_write_ramb_page(addr, val, &pages[addr >> 12]); } - static void write_ramw(uint32_t addr, uint16_t val, void *priv) { @@ -782,7 +764,6 @@ write_ramw(uint32_t addr, uint16_t val, void *priv) mem_write_ramw_page(addr, val, &pages[addr >> 12]); } - static void write_raml(uint32_t addr, uint32_t val, void *priv) { @@ -796,91 +777,88 @@ static void machine_at_compaq_init(const machine_t *model, int type) { if (type != COMPAQ_DESKPRO386) - mem_remap_top(384); + mem_remap_top(384); if (fdc_type == FDC_INTERNAL) - device_add(&fdc_at_device); + device_add(&fdc_at_device); mem_mapping_add(&ram_mapping, 0xfa0000, 0x60000, read_ram, read_ramw, read_raml, write_ram, write_ramw, write_raml, - 0xa0000+ram, MEM_MAPPING_INTERNAL, NULL); + 0xa0000 + ram, MEM_MAPPING_INTERNAL, NULL); video_reset(gfxcard); - switch(type) { - case COMPAQ_PORTABLEII: - break; + switch (type) { + case COMPAQ_PORTABLEII: + break; - case COMPAQ_PORTABLEIII: - if (gfxcard == VID_INTERNAL) - device_add(&compaq_plasma_device); - break; + case COMPAQ_PORTABLEIII: + if (gfxcard == VID_INTERNAL) + device_add(&compaq_plasma_device); + break; - case COMPAQ_PORTABLEIII386: - if (hdc_current == 1) - device_add(&ide_isa_device); - if (gfxcard == VID_INTERNAL) - device_add(&compaq_plasma_device); - break; + case COMPAQ_PORTABLEIII386: + if (hdc_current == 1) + device_add(&ide_isa_device); + if (gfxcard == VID_INTERNAL) + device_add(&compaq_plasma_device); + break; - case COMPAQ_DESKPRO386: - if (hdc_current == 1) - device_add(&ide_isa_device); - break; + case COMPAQ_DESKPRO386: + if (hdc_current == 1) + device_add(&ide_isa_device); + break; } machine_at_init(model); } - int machine_at_portableii_init(const machine_t *model) { int ret; ret = bios_load_interleavedr("roms/machines/portableii/109740-001.rom", - "roms/machines/portableii/109739-001.rom", - 0x000f8000, 65536, 0); + "roms/machines/portableii/109739-001.rom", + 0x000f8000, 65536, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_compaq_init(model, COMPAQ_PORTABLEII); return ret; } - int machine_at_portableiii_init(const machine_t *model) { int ret; ret = bios_load_interleavedr("roms/machines/portableiii/Compaq Portable III - BIOS - 106779-002 - Even.bin", - "roms/machines/portableiii/Compaq Portable III - BIOS - 106778-002 - Odd.bin", - 0x000f8000, 65536, 0); + "roms/machines/portableiii/Compaq Portable III - BIOS - 106778-002 - Odd.bin", + 0x000f8000, 65536, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_compaq_init(model, COMPAQ_PORTABLEIII); return ret; } - int machine_at_portableiii386_init(const machine_t *model) { int ret; ret = bios_load_interleavedr("roms/machines/portableiii/Compaq Portable III - BIOS - 106779-002 - Even.bin", - "roms/machines/portableiii/Compaq Portable III - BIOS - 106778-002 - Odd.bin", - 0x000f8000, 65536, 0); + "roms/machines/portableiii/Compaq Portable III - BIOS - 106778-002 - Odd.bin", + 0x000f8000, 65536, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_compaq_init(model, COMPAQ_PORTABLEIII386); @@ -894,10 +872,10 @@ machine_at_deskpro386_init(const machine_t *model) int ret; ret = bios_load_linearr("roms/machines/deskpro386/1986-09-04-HI.json.bin", - 0x000fc000, 65536, 0); + 0x000fc000, 65536, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_compaq_init(model, COMPAQ_DESKPRO386); diff --git a/src/machine/m_at_misc.c b/src/machine/m_at_misc.c index b41735d74..ca1c78042 100644 --- a/src/machine/m_at_misc.c +++ b/src/machine/m_at_misc.c @@ -44,10 +44,10 @@ machine_at_vpc2007_init(const machine_t *model) int ret; ret = bios_load_linear("roms/machines/vpc2007/13500.bin", - 0x000c0000, 262144, 0); + 0x000c0000, 262144, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 2); is_vpc = 1; diff --git a/src/machine/m_at_slot1.c b/src/machine/m_at_slot1.c index f3b225ae1..1204384a5 100644 --- a/src/machine/m_at_slot1.c +++ b/src/machine/m_at_slot1.c @@ -46,27 +46,26 @@ machine_at_p65up5_cpknd_init(const machine_t *model) int ret; ret = bios_load_linear("roms/machines/p65up5/NDKN0218.AWD", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_p65up5_common_init(model, &i440fx_device); return ret; } - int machine_at_kn97_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/kn97/0116I.001", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -85,22 +84,21 @@ machine_at_kn97_init(const machine_t *model) device_add(&intel_flash_bxt_device); device_add(&lm78_device); /* fans: Chassis, CPU, Power; temperature: MB */ for (uint8_t i = 0; i < 3; i++) - hwm_values.fans[i] *= 2; /* BIOS reports fans with the wrong divisor for some reason */ + hwm_values.fans[i] *= 2; /* BIOS reports fans with the wrong divisor for some reason */ return ret; } - int machine_at_lx6_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/lx6/LX6C_PZ.B00", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 2); @@ -122,17 +120,16 @@ machine_at_lx6_init(const machine_t *model) return ret; } - int machine_at_spitfire_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/spitfire/SPIHM.02", - 0x000c0000, 262144, 0); + 0x000c0000, 262144, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 2); @@ -155,50 +152,48 @@ machine_at_spitfire_init(const machine_t *model) return ret; } - int machine_at_p6i440e2_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/p6i440e2/E2_v14sl.bin", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 2); pci_init(PCI_CONFIG_TYPE_1); pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4); - pci_register_slot(0x09, PCI_CARD_NORMAL, 1, 2, 3, 4); - pci_register_slot(0x0A, PCI_CARD_NORMAL, 2, 3, 4, 1); - pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); + pci_register_slot(0x09, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x0A, PCI_CARD_NORMAL, 2, 3, 4, 1); + pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); device_add(&i440ex_device); device_add(&piix4_device); device_add(&keyboard_ps2_ami_pci_device); device_add(&w83977tf_device); device_add(&sst_flash_29ee010_device); spd_register(SPD_TYPE_SDRAM, 0x03, 256); - device_add(&w83781d_device); /* fans: CPU, CHS, PS; temperatures: unused, CPU, System */ - hwm_values.temperatures[0] = 0; /* unused */ - hwm_values.voltages[1] = 1500; /* CPUVTT */ + device_add(&w83781d_device); /* fans: CPU, CHS, PS; temperatures: unused, CPU, System */ + hwm_values.temperatures[0] = 0; /* unused */ + hwm_values.voltages[1] = 1500; /* CPUVTT */ return ret; } - int machine_at_p2bls_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/p2bls/1014ls.003", - 0x000c0000, 262144, 0); + 0x000c0000, 262144, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 2); @@ -216,27 +211,26 @@ machine_at_p2bls_init(const machine_t *model) device_add(&piix4e_device); device_add(&keyboard_ps2_ami_pci_device); device_add(&w83977ef_device); - //device_add(ics9xxx_get(ICS9150_08)); /* setting proper speeds requires some interaction with the AS97127F ASIC */ + // device_add(ics9xxx_get(ICS9150_08)); /* setting proper speeds requires some interaction with the AS97127F ASIC */ device_add(&sst_flash_39sf020_device); spd_register(SPD_TYPE_SDRAM, 0xF, 256); - device_add(&w83781d_device); /* fans: Chassis, CPU, Power; temperatures: MB, unused, CPU */ - hwm_values.temperatures[1] = 0; /* unused */ + device_add(&w83781d_device); /* fans: Chassis, CPU, Power; temperatures: MB, unused, CPU */ + hwm_values.temperatures[1] = 0; /* unused */ hwm_values.temperatures[2] -= 3; /* CPU offset */ return ret; } - int machine_at_p3bf_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/p3bf/1008f.004", - 0x000c0000, 262144, 0); + 0x000c0000, 262144, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 2); @@ -257,23 +251,22 @@ machine_at_p3bf_init(const machine_t *model) device_add(ics9xxx_get(ICS9250_08)); device_add(&sst_flash_39sf020_device); spd_register(SPD_TYPE_SDRAM, 0xF, 256); - device_add(&as99127f_device); /* fans: Chassis, CPU, Power; temperatures: MB, JTPWR, CPU */ + device_add(&as99127f_device); /* fans: Chassis, CPU, Power; temperatures: MB, JTPWR, CPU */ hwm_values.voltages[4] = hwm_values.voltages[5]; /* +12V reading not in line with other boards; appears to be close to the -12V reading */ return ret; } - int machine_at_bf6_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/bf6/Beh_70.bin", - 0x000c0000, 262144, 0); + 0x000c0000, 262144, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 2); @@ -298,17 +291,16 @@ machine_at_bf6_init(const machine_t *model) return ret; } - int machine_at_ax6bc_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/ax6bc/AX6BC_R2.59.bin", - 0x000c0000, 262144, 0); + 0x000c0000, 262144, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 2); @@ -332,17 +324,16 @@ machine_at_ax6bc_init(const machine_t *model) return ret; } - int machine_at_atc6310bxii_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/atc6310bxii/6310s102.bin", - 0x000c0000, 262144, 0); + 0x000c0000, 262144, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 2); @@ -365,17 +356,16 @@ machine_at_atc6310bxii_init(const machine_t *model) return ret; } - int machine_at_686bx_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/686bx/6BX.F2a", - 0x000c0000, 262144, 0); + 0x000c0000, 262144, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 2); @@ -393,27 +383,26 @@ machine_at_686bx_init(const machine_t *model) device_add(&w83977tf_device); device_add(&intel_flash_bxt_device); spd_register(SPD_TYPE_SDRAM, 0xF, 256); - device_add(&w83781d_device); /* fans: CPU, unused, unused; temperatures: unused, CPU, unused */ - hwm_values.temperatures[0] = 0; /* unused */ + device_add(&w83781d_device); /* fans: CPU, unused, unused; temperatures: unused, CPU, unused */ + hwm_values.temperatures[0] = 0; /* unused */ hwm_values.temperatures[1] += 4; /* CPU offset */ - hwm_values.temperatures[2] = 0; /* unused */ - hwm_values.fans[1] = 0; /* unused */ - hwm_values.fans[2] = 0; /* unused */ + hwm_values.temperatures[2] = 0; /* unused */ + hwm_values.fans[1] = 0; /* unused */ + hwm_values.fans[2] = 0; /* unused */ return ret; } - int machine_at_p6sba_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/p6sba/SBAB21.ROM", - 0x000c0000, 262144, 0); + 0x000c0000, 262144, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 2); @@ -433,8 +422,8 @@ machine_at_p6sba_init(const machine_t *model) device_add(&keyboard_ps2_ami_pci_device); device_add(&intel_flash_bxt_device); spd_register(SPD_TYPE_SDRAM, 0x7, 256); - device_add(&w83781d_device); /* fans: CPU1, CPU2, Thermal Control; temperatures: unused, CPU1, CPU2? */ - hwm_values.fans[1] = 0; /* no CPU2 fan */ + device_add(&w83781d_device); /* fans: CPU1, CPU2, Thermal Control; temperatures: unused, CPU1, CPU2? */ + hwm_values.fans[1] = 0; /* no CPU2 fan */ hwm_values.temperatures[0] = 0; /* unused */ hwm_values.temperatures[2] = 0; /* CPU2? */ /* no CPU2 voltage */ @@ -442,17 +431,16 @@ machine_at_p6sba_init(const machine_t *model) return ret; } - int machine_at_s1846_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/s1846/bx46200f.rom", - 0x000c0000, 262144, 0); + 0x000c0000, 262144, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 2); @@ -474,8 +462,8 @@ machine_at_s1846_init(const machine_t *model) spd_register(SPD_TYPE_SDRAM, 0x7, 256); if (sound_card_current == SOUND_INTERNAL) { - device_add(&es1371_onboard_device); - device_add(&cs4297_device); /* found on other Tyan boards around the same time */ + device_add(&es1371_onboard_device); + device_add(&cs4297_device); /* found on other Tyan boards around the same time */ } return ret; @@ -487,10 +475,10 @@ machine_at_ficka6130_init(const machine_t *model) int ret; ret = bios_load_linear("roms/machines/ficka6130/qa4163.bin", - 0x000c0000, 262144, 0); + 0x000c0000, 262144, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 2); @@ -512,17 +500,16 @@ machine_at_ficka6130_init(const machine_t *model) return ret; } - int machine_at_p3v133_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/p3v133/1003.002", - 0x000c0000, 262144, 0); + 0x000c0000, 262144, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 2); @@ -543,24 +530,23 @@ machine_at_p3v133_init(const machine_t *model) device_add(ics9xxx_get(ICS9248_39)); device_add(&sst_flash_39sf020_device); spd_register(SPD_TYPE_SDRAM, 0x7, 512); - device_add(&w83781d_device); /* fans: Chassis, CPU, Power; temperatures: MB, unused, CPU */ - hwm_values.temperatures[1] = 0; /* unused */ + device_add(&w83781d_device); /* fans: Chassis, CPU, Power; temperatures: MB, unused, CPU */ + hwm_values.temperatures[1] = 0; /* unused */ hwm_values.temperatures[2] -= 3; /* CPU offset */ return ret; } - int machine_at_p3v4x_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/p3v4x/1006.004", - 0x000c0000, 262144, 0); + 0x000c0000, 262144, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 2); @@ -586,17 +572,16 @@ machine_at_p3v4x_init(const machine_t *model) return ret; } - int machine_at_vei8_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/vei8/QHW1001.BIN", - 0x000c0000, 262144, 0); + 0x000c0000, 262144, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 2); @@ -619,7 +604,6 @@ machine_at_vei8_init(const machine_t *model) return ret; } - static void machine_at_ms6168_common_init(const machine_t *model) { @@ -638,70 +622,66 @@ machine_at_ms6168_common_init(const machine_t *model) device_add(&w83977ef_device); if (gfxcard == VID_INTERNAL) - device_add(&voodoo_3_2000_agp_onboard_8m_device); + device_add(&voodoo_3_2000_agp_onboard_8m_device); device_add(&keyboard_ps2_ami_pci_device); device_add(&intel_flash_bxt_device); spd_register(SPD_TYPE_SDRAM, 0x3, 256); if (sound_card_current == SOUND_INTERNAL) { - device_add(&es1371_onboard_device); - device_add(&cs4297_device); + device_add(&es1371_onboard_device); + device_add(&cs4297_device); } } - const device_t * at_ms6168_get_device(void) { return &voodoo_3_2000_agp_onboard_8m_device; } - int machine_at_borapro_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/borapro/MS6168V2.50", - 0x000c0000, 262144, 0); + 0x000c0000, 262144, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_ms6168_common_init(model); return ret; } - int machine_at_ms6168_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/ms6168/w6168ims.130", - 0x000c0000, 262144, 0); + 0x000c0000, 262144, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_ms6168_common_init(model); return ret; } - int machine_at_m729_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/m729/M729NEW.BIN", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 2); @@ -716,7 +696,7 @@ machine_at_m729_init(const machine_t *model) pci_register_slot(0x12, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x10, PCI_CARD_NORMAL, 3, 4, 1, 2); device_add(&ali1621_device); - device_add(&ali1543c_device); /* +0 */ + device_add(&ali1543c_device); /* +0 */ device_add(&sst_flash_29ee010_device); spd_register(SPD_TYPE_SDRAM, 0x7, 512); diff --git a/src/machine/m_at_slot2.c b/src/machine/m_at_slot2.c index 359b94f60..daa831e7d 100644 --- a/src/machine/m_at_slot2.c +++ b/src/machine/m_at_slot2.c @@ -46,10 +46,10 @@ machine_at_6gxu_init(const machine_t *model) int ret; ret = bios_load_linear("roms/machines/6gxu/6gxu.f1c", - 0x000c0000, 262144, 0); + 0x000c0000, 262144, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 2); @@ -69,9 +69,9 @@ machine_at_6gxu_init(const machine_t *model) device_add(&w83977ef_device); device_add(&sst_flash_39sf020_device); spd_register(SPD_TYPE_SDRAM, 0xF, 512); - device_add(&w83782d_device); /* fans: CPU, Power, System; temperatures: System, CPU, unused */ - hwm_values.temperatures[2] = 0; /* unused */ - hwm_values.voltages[1] = 1500; /* VGTL */ + device_add(&w83782d_device); /* fans: CPU, Power, System; temperatures: System, CPU, unused */ + hwm_values.temperatures[2] = 0; /* unused */ + hwm_values.voltages[1] = 1500; /* VGTL */ return ret; } @@ -82,10 +82,10 @@ machine_at_s2dge_init(const machine_t *model) int ret; ret = bios_load_linear("roms/machines/s2dge/2gu7301.rom", - 0x000c0000, 262144, 0); + 0x000c0000, 262144, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 2); @@ -106,8 +106,8 @@ machine_at_s2dge_init(const machine_t *model) device_add(&w83977tf_device); device_add(&intel_flash_bxt_device); spd_register(SPD_TYPE_SDRAM, 0xF, 512); - device_add(&w83781d_device); /* fans: CPU1, CPU2, Thermal Control; temperatures: unused, CPU1, CPU2? */ - hwm_values.fans[1] = 0; /* no CPU2 fan */ + device_add(&w83781d_device); /* fans: CPU1, CPU2, Thermal Control; temperatures: unused, CPU1, CPU2? */ + hwm_values.fans[1] = 0; /* no CPU2 fan */ hwm_values.temperatures[0] = 0; /* unused */ hwm_values.temperatures[2] = 0; /* CPU2? */ @@ -120,10 +120,10 @@ machine_at_fw6400gx_init(const machine_t *model) int ret; ret = bios_load_linear("roms/machines/fw6400gx/FWGX1211.ROM", - 0x000c0000, 262144, 0); + 0x000c0000, 262144, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 2); @@ -145,9 +145,9 @@ machine_at_fw6400gx_init(const machine_t *model) device_add(ics9xxx_get(ICS9250_08)); device_add(&sst_flash_29ee020_device); spd_register(SPD_TYPE_SDRAM, 0xF, 512); - device_add(&w83781d_device); /* fans: Chassis, Power, CPU; temperatures: System, CPU, unused */ - hwm_values.temperatures[3] = 0; /* unused */ - hwm_values.voltages[1] = 1500; /* Vtt */ + device_add(&w83781d_device); /* fans: Chassis, Power, CPU; temperatures: System, CPU, unused */ + hwm_values.temperatures[3] = 0; /* unused */ + hwm_values.voltages[1] = 1500; /* Vtt */ return ret; } diff --git a/src/machine/m_at_socket370.c b/src/machine/m_at_socket370.c index 9daec8609..b73f54062 100644 --- a/src/machine/m_at_socket370.c +++ b/src/machine/m_at_socket370.c @@ -40,17 +40,16 @@ #include <86box/sound.h> #include <86box/snd_ac97.h> - int machine_at_s370slm_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/s370slm/3LM1202.rom", - 0x000c0000, 262144, 0); + 0x000c0000, 262144, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 2); @@ -68,24 +67,23 @@ machine_at_s370slm_init(const machine_t *model) device_add(&keyboard_ps2_ami_pci_device); device_add(&intel_flash_bxt_device); spd_register(SPD_TYPE_SDRAM, 0x7, 256); - device_add(&w83781d_device); /* fans: CPU, Fan 2, Chassis; temperatures: unused, CPU, unused */ + device_add(&w83781d_device); /* fans: CPU, Fan 2, Chassis; temperatures: unused, CPU, unused */ hwm_values.temperatures[0] = 0; /* unused */ hwm_values.temperatures[2] = 0; /* unused */ return ret; } - int machine_at_s1857_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/s1857/BX57200A.ROM", - 0x000c0000, 262144, 0); + 0x000c0000, 262144, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 2); @@ -107,24 +105,23 @@ machine_at_s1857_init(const machine_t *model) spd_register(SPD_TYPE_SDRAM, 0x7, 256); if (sound_card_current == SOUND_INTERNAL) { - device_add(&es1371_onboard_device); - device_add(&cs4297_device); /* found on other Tyan boards around the same time */ + device_add(&es1371_onboard_device); + device_add(&cs4297_device); /* found on other Tyan boards around the same time */ } return ret; } - int machine_at_p6bap_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/p6bap/bapa14a.BIN", - 0x000c0000, 262144, 0); + 0x000c0000, 262144, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 2); @@ -147,17 +144,16 @@ machine_at_p6bap_init(const machine_t *model) return ret; } - int machine_at_cubx_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/cubx/1008cu.004", - 0x000c0000, 262144, 0); + 0x000c0000, 262144, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 2); @@ -184,17 +180,16 @@ machine_at_cubx_init(const machine_t *model) return ret; } - int machine_at_atc7020bxii_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/atc7020bxii/7020s102.bin", - 0x000c0000, 262144, 0); + 0x000c0000, 262144, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 2); @@ -217,17 +212,16 @@ machine_at_atc7020bxii_init(const machine_t *model) return ret; } - int machine_at_ambx133_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/ambx133/mkbx2vg2.bin", - 0x000c0000, 262144, 0); + 0x000c0000, 262144, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 2); @@ -248,23 +242,22 @@ machine_at_ambx133_init(const machine_t *model) spd_register(SPD_TYPE_SDRAM, 0x7, 256); device_add(&gl518sm_2d_device); /* fans: CPUFAN1, CPUFAN2; temperature: CPU */ hwm_values.fans[1] += 500; - hwm_values.temperatures[0] += 4; /* CPU offset */ + hwm_values.temperatures[0] += 4; /* CPU offset */ hwm_values.voltages[1] = RESISTOR_DIVIDER(12000, 10, 2); /* different 12V divider in BIOS (10K/2K?) */ return ret; } - int machine_at_awo671r_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/awo671r/a08139c.bin", - 0x000c0000, 262144, 0); + 0x000c0000, 262144, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 2); @@ -288,17 +281,16 @@ machine_at_awo671r_init(const machine_t *model) return ret; } - int machine_at_63a1_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/63a1/63a-q3.bin", - 0x000c0000, 262144, 0); + 0x000c0000, 262144, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 2); @@ -321,17 +313,16 @@ machine_at_63a1_init(const machine_t *model) return ret; } - int machine_at_apas3_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/apas3/V0218SAG.BIN", - 0x000c0000, 262144, 0); + 0x000c0000, 262144, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 2); @@ -353,17 +344,16 @@ machine_at_apas3_init(const machine_t *model) return ret; } - int machine_at_gt694va_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/gt694va/21071100.bin", - 0x000c0000, 262144, 0); + 0x000c0000, 262144, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 2); @@ -381,32 +371,31 @@ machine_at_gt694va_init(const machine_t *model) device_add(&keyboard_ps2_ami_pci_device); device_add(&sst_flash_39sf020_device); spd_register(SPD_TYPE_SDRAM, 0x7, 1024); - device_add(&w83782d_device); /* fans: CPU, unused, unused; temperatures: System, CPU1, unused */ - hwm_values.voltages[1] = 1500; /* IN1 (unknown purpose, assumed Vtt) */ - hwm_values.fans[0] = 4500; /* BIOS does not display <4411 RPM */ - hwm_values.fans[1] = 0; /* unused */ - hwm_values.fans[2] = 0; /* unused */ - hwm_values.temperatures[2] = 0; /* unused */ + device_add(&w83782d_device); /* fans: CPU, unused, unused; temperatures: System, CPU1, unused */ + hwm_values.voltages[1] = 1500; /* IN1 (unknown purpose, assumed Vtt) */ + hwm_values.fans[0] = 4500; /* BIOS does not display <4411 RPM */ + hwm_values.fans[1] = 0; /* unused */ + hwm_values.fans[2] = 0; /* unused */ + hwm_values.temperatures[2] = 0; /* unused */ if (sound_card_current == SOUND_INTERNAL) { - device_add(&es1371_onboard_device); - device_add(&cs4297_device); /* assumed */ + device_add(&es1371_onboard_device); + device_add(&cs4297_device); /* assumed */ } return ret; } - int machine_at_cuv4xls_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/cuv4xls/1005LS.001", - 0x000c0000, 262144, 0); + 0x000c0000, 262144, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 2); @@ -431,7 +420,7 @@ machine_at_cuv4xls_init(const machine_t *model) device_add(&as99127f_device); /* fans: Chassis, CPU, Power; temperatures: MB, JTPWR, CPU */ if (sound_card_current == SOUND_INTERNAL) - device_add(&cmi8738_onboard_device); + device_add(&cmi8738_onboard_device); return ret; } @@ -442,10 +431,10 @@ machine_at_6via90ap_init(const machine_t *model) int ret; ret = bios_load_linear("roms/machines/6via90ap/90ap10.bin", - 0x000c0000, 262144, 0); + 0x000c0000, 262144, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 2); @@ -466,10 +455,10 @@ machine_at_6via90ap_init(const machine_t *model) spd_register(SPD_TYPE_SDRAM, 0x7, 1024); hwm_values.temperatures[0] += 2; /* CPU offset */ hwm_values.temperatures[1] += 2; /* System offset */ - hwm_values.temperatures[2] = 0; /* unused */ + hwm_values.temperatures[2] = 0; /* unused */ if (sound_card_current == SOUND_INTERNAL) - device_add(&alc100_device); /* ALC100P identified on similar Acorp boards (694TA, 6VIA90A1) */ + device_add(&alc100_device); /* ALC100P identified on similar Acorp boards (694TA, 6VIA90A1) */ return ret; } diff --git a/src/machine/m_at_socket4.c b/src/machine/m_at_socket4.c index 1dd74971d..f47a6f6df 100644 --- a/src/machine/m_at_socket4.c +++ b/src/machine/m_at_socket4.c @@ -39,10 +39,10 @@ #include <86box/nvr.h> #include <86box/scsi_ncr53c8xx.h> #include <86box/sio.h> +#include <86box/timer.h> #include <86box/video.h> #include <86box/machine.h> - void machine_at_premiere_common_init(const machine_t *model, int pci_switch) { @@ -62,7 +62,6 @@ machine_at_premiere_common_init(const machine_t *model, int pci_switch) device_add(&intel_flash_bxt_ami_device); } - void machine_at_award_common_init(const machine_t *model) { @@ -80,13 +79,12 @@ machine_at_award_common_init(const machine_t *model) pci_register_slot(0x02, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); if (fdc_type == FDC_INTERNAL) - device_add(&fdc_at_device); + device_add(&fdc_at_device); // device_add(&keyboard_ps2_pci_device); device_add(&keyboard_ps2_ami_pci_device); } - void machine_at_sp4_common_init(const machine_t *model) { @@ -110,17 +108,16 @@ machine_at_sp4_common_init(const machine_t *model) device_add(&intel_flash_bxt_device); } - int machine_at_excaliburpci_init(const machine_t *model) { int ret; ret = bios_load_linear_inverted("roms/machines/excaliburpci/S701P.ROM", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -142,17 +139,16 @@ machine_at_excaliburpci_init(const machine_t *model) return ret; } - int machine_at_p5mp3_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/p5mp3/0205.bin", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); device_add(&ide_pci_device); @@ -173,17 +169,16 @@ machine_at_p5mp3_init(const machine_t *model) return ret; } - int machine_at_dellxp60_init(const machine_t *model) { int ret; ret = bios_load_linear_inverted("roms/machines/dellxp60/XP60-A08.ROM", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); device_add(&ide_pci_2ch_device); @@ -206,17 +201,16 @@ machine_at_dellxp60_init(const machine_t *model) return ret; } - int machine_at_opti560l_init(const machine_t *model) { int ret; ret = bios_load_linear_inverted("roms/machines/opti560l/560L_A06.ROM", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); device_add(&ide_pci_2ch_device); @@ -236,17 +230,16 @@ machine_at_opti560l_init(const machine_t *model) return ret; } - int machine_at_ambradp60_init(const machine_t *model) { int ret; ret = bios_load_linear_combined("roms/machines/ambradp60/1004AF1P.BIO", - "roms/machines/ambradp60/1004AF1P.BI1", 0x1c000, 128); + "roms/machines/ambradp60/1004AF1P.BI1", 0x1c000, 128); if (bios_only || !ret) - return ret; + return ret; machine_at_premiere_common_init(model, 0); @@ -255,17 +248,16 @@ machine_at_ambradp60_init(const machine_t *model) return ret; } - int machine_at_valuepointp60_init(const machine_t *model) { int ret; ret = bios_load_linear_combined("roms/machines/valuepointp60/1006AV0M.BIO", - "roms/machines/valuepointp60/1006AV0M.BI1", 0x1d000, 128); + "roms/machines/valuepointp60/1006AV0M.BI1", 0x1d000, 128); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); device_add(&ide_pci_2ch_device); @@ -287,17 +279,16 @@ machine_at_valuepointp60_init(const machine_t *model) return ret; } - int machine_at_revenge_init(const machine_t *model) { int ret; ret = bios_load_linear_combined("roms/machines/revenge/1009af2_.bio", - "roms/machines/revenge/1009af2_.bi1", 0x1c000, 128); + "roms/machines/revenge/1009af2_.bi1", 0x1c000, 128); if (bios_only || !ret) - return ret; + return ret; machine_at_premiere_common_init(model, 0); @@ -306,17 +297,16 @@ machine_at_revenge_init(const machine_t *model) return ret; } - int machine_at_586mc1_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/586mc1/IS.34", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_award_common_init(model); @@ -327,17 +317,16 @@ machine_at_586mc1_init(const machine_t *model) return ret; } - int machine_at_pb520r_init(const machine_t *model) { int ret; ret = bios_load_linear_combined("roms/machines/pb520r/1009bc0r.bio", - "roms/machines/pb520r/1009bc0r.bi1", 0x1d000, 128); + "roms/machines/pb520r/1009bc0r.bi1", 0x1d000, 128); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -353,7 +342,7 @@ machine_at_pb520r_init(const machine_t *model) device_add(&ide_cmd640_pci_single_channel_device); if (gfxcard == VID_INTERNAL) - device_add(&gd5434_onboard_pci_device); + device_add(&gd5434_onboard_pci_device); device_add(&keyboard_ps2_pci_device); device_add(&sio_zb_device); @@ -369,10 +358,10 @@ machine_at_excalibur_init(const machine_t *model) int ret; ret = bios_load_linear_inverted("roms/machines/excalibur/S75P.ROM", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -384,17 +373,16 @@ machine_at_excalibur_init(const machine_t *model) return ret; } - int machine_at_p5vl_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/p5vl/SM507.ROM", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); pci_init(PCI_CONFIG_TYPE_1); @@ -408,22 +396,21 @@ machine_at_p5vl_init(const machine_t *model) device_add(&keyboard_at_ami_device); if (fdc_type == FDC_INTERNAL) - device_add(&fdc_at_device); + device_add(&fdc_at_device); return ret; } - int machine_at_excaliburpci2_init(const machine_t *model) { int ret; ret = bios_load_linear_inverted("roms/machines/excaliburpci2/S722P.ROM", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 2); device_add(&ami_1994_nvr_device); @@ -446,17 +433,16 @@ machine_at_excaliburpci2_init(const machine_t *model) return ret; } - int machine_at_p5sp4_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/p5sp4/0106.001", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_sp4_common_init(model); diff --git a/src/machine/m_at_socket5.c b/src/machine/m_at_socket5.c index 4fc7441bb..3d233d41c 100644 --- a/src/machine/m_at_socket5.c +++ b/src/machine/m_at_socket5.c @@ -42,17 +42,16 @@ #include <86box/video.h> #include <86box/machine.h> - int machine_at_plato_init(const machine_t *model) { int ret; ret = bios_load_linear_combined("roms/machines/plato/1016ax1_.bio", - "roms/machines/plato/1016ax1_.bi1", 0x1d000, 128); + "roms/machines/plato/1016ax1_.bi1", 0x1d000, 128); if (bios_only || !ret) - return ret; + return ret; machine_at_premiere_common_init(model, PCI_CAN_SWITCH_TYPE); @@ -61,17 +60,16 @@ machine_at_plato_init(const machine_t *model) return ret; } - int machine_at_ambradp90_init(const machine_t *model) { int ret; ret = bios_load_linear_combined("roms/machines/ambradp90/1002AX1P.BIO", - "roms/machines/ambradp90/1002AX1P.BI1", 0x1d000, 128); + "roms/machines/ambradp90/1002AX1P.BI1", 0x1d000, 128); if (bios_only || !ret) - return ret; + return ret; machine_at_premiere_common_init(model, PCI_CAN_SWITCH_TYPE); @@ -80,17 +78,16 @@ machine_at_ambradp90_init(const machine_t *model) return ret; } - int machine_at_430nx_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/430nx/IP.20", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_award_common_init(model); @@ -101,17 +98,16 @@ machine_at_430nx_init(const machine_t *model) return ret; } - int machine_at_acerv30_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/acerv30/V30R01N9.BIN", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -132,17 +128,16 @@ machine_at_acerv30_init(const machine_t *model) return ret; } - int machine_at_apollo_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/apollo/S728P.ROM", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 2); device_add(&ami_1995_nvr_device); @@ -163,17 +158,16 @@ machine_at_apollo_init(const machine_t *model) return ret; } - int machine_at_exp8551_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/exp8551/AMI20.BIO", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -193,17 +187,16 @@ machine_at_exp8551_init(const machine_t *model) return ret; } - int machine_at_zappa_init(const machine_t *model) { int ret; ret = bios_load_linear_combined("roms/machines/zappa/1006bs0_.bio", - "roms/machines/zappa/1006bs0_.bi1", 0x20000, 128); + "roms/machines/zappa/1006bs0_.bi1", 0x20000, 128); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -222,17 +215,16 @@ machine_at_zappa_init(const machine_t *model) return ret; } - int machine_at_powermatev_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/powermatev/BIOS.ROM", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -251,17 +243,16 @@ machine_at_powermatev_init(const machine_t *model) return ret; } - int machine_at_mb500n_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/mb500n/031396s.bin", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -281,17 +272,16 @@ machine_at_mb500n_init(const machine_t *model) return ret; } - int machine_at_hawk_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/hawk/HAWK.ROM", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 2); device_add(&ami_1994_nvr_device); @@ -311,17 +301,16 @@ machine_at_hawk_init(const machine_t *model) return ret; } - int machine_at_pat54pv_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/pat54pv/PAT54PV.bin", - 0x000f0000, 65536, 0); + 0x000f0000, 65536, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -329,22 +318,21 @@ machine_at_pat54pv_init(const machine_t *model) device_add(&keyboard_ps2_intel_ami_pci_device); if (fdc_type == FDC_INTERNAL) - device_add(&fdc_at_device); + device_add(&fdc_at_device); return ret; } - int machine_at_hot543_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/hot543/543_R21.BIN", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); pci_init(PCI_CONFIG_TYPE_1); @@ -358,39 +346,37 @@ machine_at_hot543_init(const machine_t *model) device_add(&keyboard_at_device); if (fdc_type == FDC_INTERNAL) - device_add(&fdc_at_device); + device_add(&fdc_at_device); return ret; } - int machine_at_p54sp4_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/p54sp4/SI5I0204.AWD", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_sp4_common_init(model); return ret; } - int machine_at_sq588_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/sq588/sq588b03.rom", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); diff --git a/src/machine/m_at_socket7.c b/src/machine/m_at_socket7.c index 2856a599c..043faddda 100644 --- a/src/machine/m_at_socket7.c +++ b/src/machine/m_at_socket7.c @@ -46,17 +46,16 @@ #include <86box/nvr.h> #include <86box/scsi_ncr53c8xx.h> - int machine_at_acerv35n_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/acerv35n/v35nd1s1.bin", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -78,17 +77,16 @@ machine_at_acerv35n_init(const machine_t *model) return ret; } - int machine_at_ap5vm_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/ap5vm/AP5V270.ROM", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -113,17 +111,16 @@ machine_at_ap5vm_init(const machine_t *model) return ret; } - int machine_at_p55t2p4_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/p55t2p4/0207_j2.bin", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -143,17 +140,16 @@ machine_at_p55t2p4_init(const machine_t *model) return ret; } - int machine_at_m7shi_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/m7shi/m7shi2n.rom", - 0x000c0000, 262144, 0); + 0x000c0000, 262144, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -173,21 +169,20 @@ machine_at_m7shi_init(const machine_t *model) return ret; } - int machine_at_tc430hx_init(const machine_t *model) { int ret; ret = bios_load_linear_combined2("roms/machines/tc430hx/1007DH0_.BIO", - "roms/machines/tc430hx/1007DH0_.BI1", - "roms/machines/tc430hx/1007DH0_.BI2", - "roms/machines/tc430hx/1007DH0_.BI3", - "roms/machines/tc430hx/1007DH0_.RCV", - 0x3a000, 128); + "roms/machines/tc430hx/1007DH0_.BI1", + "roms/machines/tc430hx/1007DH0_.BI2", + "roms/machines/tc430hx/1007DH0_.BI3", + "roms/machines/tc430hx/1007DH0_.RCV", + 0x3a000, 128); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -208,7 +203,6 @@ machine_at_tc430hx_init(const machine_t *model) return ret; } - /* Information about that machine on machine.h */ int machine_at_equium5200_init(const machine_t *model) @@ -216,14 +210,14 @@ machine_at_equium5200_init(const machine_t *model) int ret; ret = bios_load_linear_combined2("roms/machines/equium5200/1003DK08.BIO", - "roms/machines/equium5200/1003DK08.BI1", - "roms/machines/equium5200/1003DK08.BI2", - "roms/machines/equium5200/1003DK08.BI3", - "roms/machines/equium5200/1003DK08.RCV", - 0x3a000, 128); + "roms/machines/equium5200/1003DK08.BI1", + "roms/machines/equium5200/1003DK08.BI2", + "roms/machines/equium5200/1003DK08.BI3", + "roms/machines/equium5200/1003DK08.RCV", + 0x3a000, 128); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -244,21 +238,20 @@ machine_at_equium5200_init(const machine_t *model) return ret; } - int machine_at_pcv90_init(const machine_t *model) { int ret; ret = bios_load_linear_combined2("roms/machines/pcv90/1010DD04.BIO", - "roms/machines/pcv90/1010DD04.BI1", - "roms/machines/pcv90/1010DD04.BI2", - "roms/machines/pcv90/1010DD04.BI3", - "roms/machines/pcv90/1010DD04.RCV", - 0x3a000, 128); + "roms/machines/pcv90/1010DD04.BI1", + "roms/machines/pcv90/1010DD04.BI2", + "roms/machines/pcv90/1010DD04.BI3", + "roms/machines/pcv90/1010DD04.RCV", + 0x3a000, 128); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -279,34 +272,32 @@ machine_at_pcv90_init(const machine_t *model) return ret; } - int machine_at_p65up5_cp55t2d_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/p65up5/TD5I0201.AWD", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_p65up5_common_init(model, &i430hx_device); return ret; } - int machine_at_p55tvp4_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/p55tvp4/0204_128.BIN", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -319,24 +310,23 @@ machine_at_p55tvp4_init(const machine_t *model) pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); device_add(&i430vx_device); device_add(&piix3_device); - device_add(&keyboard_ps2_ami_pci_device); //It uses the AMIKEY KBC + device_add(&keyboard_ps2_ami_pci_device); // It uses the AMIKEY KBC device_add(&w83877f_device); device_add(&intel_flash_bxt_device); return ret; } - int machine_at_5ivg_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/5ivg/5IVG.BIN", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -355,24 +345,23 @@ machine_at_5ivg_init(const machine_t *model) return ret; } - int machine_at_8500tvxa_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/8500tvxa/tvx0619b.rom", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); pci_init(PCI_CONFIG_TYPE_1); pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x08, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x08, PCI_CARD_NORMAL, 1, 2, 3, 4); pci_register_slot(0x09, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x0A, PCI_CARD_NORMAL, 3, 4, 2, 1); pci_register_slot(0x0B, PCI_CARD_NORMAL, 4, 3, 2, 1); @@ -385,17 +374,16 @@ machine_at_8500tvxa_init(const machine_t *model) return ret; } - int machine_at_presario2240_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/presario2240/B0184008.ROM", - 0x000c0000, 262144, 0); + 0x000c0000, 262144, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 2); @@ -406,7 +394,7 @@ machine_at_presario2240_init(const machine_t *model) pci_register_slot(0x13, PCI_CARD_NORMAL, 1, 2, 3, 4); if (gfxcard == VID_INTERNAL) - device_add(&s3_trio64v2_dx_onboard_pci_device); + device_add(&s3_trio64v2_dx_onboard_pci_device); device_add(&i430vx_device); device_add(&piix3_device); @@ -417,17 +405,16 @@ machine_at_presario2240_init(const machine_t *model) return ret; } - int machine_at_presario4500_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/presario4500/B013300I.ROM", - 0x000c0000, 262144, 0); + 0x000c0000, 262144, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 2); @@ -438,7 +425,7 @@ machine_at_presario4500_init(const machine_t *model) pci_register_slot(0x13, PCI_CARD_NORMAL, 1, 2, 3, 4); if (gfxcard == VID_INTERNAL) - device_add(&s3_trio64v2_dx_onboard_pci_device); + device_add(&s3_trio64v2_dx_onboard_pci_device); device_add(&i430vx_device); device_add(&piix3_device); @@ -449,17 +436,16 @@ machine_at_presario4500_init(const machine_t *model) return ret; } - int machine_at_p55va_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/p55va/va021297.bin", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -479,17 +465,16 @@ machine_at_p55va_init(const machine_t *model) return ret; } - int machine_at_brio80xx_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/brio80xx/Hf0705.rom", - 0x000c0000, 262144, 0); + 0x000c0000, 262144, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -509,21 +494,20 @@ machine_at_brio80xx_init(const machine_t *model) return ret; } - int machine_at_pb680_init(const machine_t *model) { int ret; ret = bios_load_linear_combined2("roms/machines/pb680/1012DN0R.BIO", - "roms/machines/pb680/1012DN0R.BI1", - "roms/machines/pb680/1012DN0R.BI2", - "roms/machines/pb680/1012DN0R.BI3", - "roms/machines/pb680/1012DN0R.RCV", - 0x3a000, 128); + "roms/machines/pb680/1012DN0R.BI1", + "roms/machines/pb680/1012DN0R.BI2", + "roms/machines/pb680/1012DN0R.BI3", + "roms/machines/pb680/1012DN0R.RCV", + 0x3a000, 128); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -543,17 +527,16 @@ machine_at_pb680_init(const machine_t *model) return ret; } - int machine_at_mb520n_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/mb520n/520n503s.rom", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -573,17 +556,16 @@ machine_at_mb520n_init(const machine_t *model) return ret; } - int machine_at_i430vx_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/430vx/55XWUQ0E.BIN", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -603,17 +585,16 @@ machine_at_i430vx_init(const machine_t *model) return ret; } - int machine_at_nupro592_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/nupro592/np590b10.bin", - 0x000c0000, 262144, 0); + 0x000c0000, 262144, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 2); @@ -625,33 +606,32 @@ machine_at_nupro592_init(const machine_t *model) pci_register_slot(0x14, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x0B, PCI_CARD_NORMAL, 3, 4, 1, 2); /*Strongly suspect these are on-board slots*/ pci_register_slot(0x0C, PCI_CARD_NORMAL, 4, 1, 2, 3); - pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 4); /* PIIX4 */ + pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 4); /* PIIX4 */ device_add(&i430tx_device); device_add(&piix4_device); device_add(&keyboard_ps2_ami_pci_device); device_add(&w83977ef_device); device_add(&intel_flash_bxt_device); spd_register(SPD_TYPE_SDRAM, 0x3, 128); - device_add(&w83781d_device); /* fans: CPU1, unused, unused; temperatures: System, CPU1, unused */ + device_add(&w83781d_device); /* fans: CPU1, unused, unused; temperatures: System, CPU1, unused */ hwm_values.temperatures[2] = 0; /* unused */ - hwm_values.fans[1] = 0; /* unused */ - hwm_values.fans[2] = 0; /* unused */ + hwm_values.fans[1] = 0; /* unused */ + hwm_values.fans[2] = 0; /* unused */ /* -5V is not reported by the BIOS, but leave it set */ return ret; } - int machine_at_tx97_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/tx97/0112.001", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 2); @@ -661,7 +641,7 @@ machine_at_tx97_init(const machine_t *model) pci_register_slot(0x0B, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x0A, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x09, PCI_CARD_NORMAL, 4, 1, 2, 3); - pci_register_slot(0x01, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4); /* PIIX4 */ + pci_register_slot(0x01, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4); /* PIIX4 */ pci_register_slot(0x0D, PCI_CARD_NORMAL, 1, 2, 3, 4); pci_register_slot(0x08, PCI_CARD_NORMAL, 1, 2, 3, 4); device_add(&i430tx_device); @@ -670,48 +650,47 @@ machine_at_tx97_init(const machine_t *model) device_add(&w83877tf_acorp_device); device_add(&intel_flash_bxt_device); spd_register(SPD_TYPE_SDRAM, 0x3, 128); - device_add(&w83781d_device); /* fans: Chassis, CPU, Power; temperatures: MB, unused, CPU */ + device_add(&w83781d_device); /* fans: Chassis, CPU, Power; temperatures: MB, unused, CPU */ hwm_values.temperatures[1] = 0; /* unused */ /* CPU offset */ if (hwm_values.temperatures[2] < 32) /* prevent underflow */ - hwm_values.temperatures[2] = 0; + hwm_values.temperatures[2] = 0; else - hwm_values.temperatures[2] -= 32; + hwm_values.temperatures[2] -= 32; return ret; } - #if defined(DEV_BRANCH) && defined(USE_AN430TX) int machine_at_an430tx_init(const machine_t *model) { int ret; -#if 1 +# if 1 ret = bios_load_linear_combined2("roms/machines/an430tx/P10-0095.BIO", - "roms/machines/an430tx/P10-0095.BI1", - "roms/machines/an430tx/P10-0095.BI2", - "roms/machines/an430tx/P10-0095.BI3", - "roms/machines/an430tx/P10-0095.RCV", - 0x3a000, 160); -#else + "roms/machines/an430tx/P10-0095.BI1", + "roms/machines/an430tx/P10-0095.BI2", + "roms/machines/an430tx/P10-0095.BI3", + "roms/machines/an430tx/P10-0095.RCV", + 0x3a000, 160); +# else ret = bios_load_linear_combined2("roms/machines/an430tx/P06-0062.BIO", - "roms/machines/an430tx/P06-0062.BI1", - "roms/machines/an430tx/P06-0062.BI2", - "roms/machines/an430tx/P06-0062.BI3", - "roms/machines/an430tx/P10-0095.RCV", - 0x3a000, 160); -#endif + "roms/machines/an430tx/P06-0062.BI1", + "roms/machines/an430tx/P06-0062.BI2", + "roms/machines/an430tx/P06-0062.BI3", + "roms/machines/an430tx/P10-0095.RCV", + 0x3a000, 160); +# endif if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 2); pci_init(PCI_CONFIG_TYPE_1); pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4); /* PIIX4 */ + pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4); /* PIIX4 */ // pci_register_slot(0x08, PCI_CARD_VIDEO, 4, 0, 0, 0); pci_register_slot(0x0D, PCI_CARD_NORMAL, 1, 2, 3, 4); pci_register_slot(0x0E, PCI_CARD_NORMAL, 2, 3, 4, 1); @@ -728,17 +707,16 @@ machine_at_an430tx_init(const machine_t *model) } #endif - int machine_at_ym430tx_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/ym430tx/YM430TX.003", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 2); @@ -748,7 +726,7 @@ machine_at_ym430tx_init(const machine_t *model) pci_register_slot(0x0B, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x0A, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x09, PCI_CARD_NORMAL, 4, 1, 2, 3); - pci_register_slot(0x01, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4); /* PIIX4 */ + pci_register_slot(0x01, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4); /* PIIX4 */ pci_register_slot(0x0D, PCI_CARD_NORMAL, 1, 2, 3, 4); pci_register_slot(0x08, PCI_CARD_NORMAL, 1, 2, 3, 4); device_add(&i430tx_device); @@ -761,17 +739,16 @@ machine_at_ym430tx_init(const machine_t *model) return ret; } - int machine_at_mb540n_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/mb540n/Tx0720ug.bin", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 2); @@ -781,7 +758,7 @@ machine_at_mb540n_init(const machine_t *model) pci_register_slot(0x12, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x13, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x14, PCI_CARD_NORMAL, 1, 2, 3, 4); - pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4); /* PIIX4 */ + pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4); /* PIIX4 */ device_add(&i430tx_device); device_add(&piix4_device); device_add(&keyboard_ps2_pci_device); @@ -793,15 +770,15 @@ machine_at_mb540n_init(const machine_t *model) } int -machine_at_56a5_init(const machine_t* model) +machine_at_56a5_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/56a5/54p5b6b.bin", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 2); @@ -811,7 +788,7 @@ machine_at_56a5_init(const machine_t* model) pci_register_slot(0x12, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x13, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x14, PCI_CARD_NORMAL, 4, 1, 2, 3); - pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4); /* PIIX4 */ + pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4); /* PIIX4 */ pci_register_slot(0x10, PCI_CARD_NORMAL, 1, 2, 3, 4); device_add(&i430tx_device); device_add(&piix4_device); @@ -829,16 +806,16 @@ machine_at_p5mms98_init(const machine_t *model) int ret; ret = bios_load_linear("roms/machines/p5mms98/s981182.rom", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 2); pci_init(PCI_CONFIG_TYPE_1); pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4); /* PIIX4 */ + pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4); /* PIIX4 */ pci_register_slot(0x11, PCI_CARD_NORMAL, 1, 2, 3, 4); pci_register_slot(0x12, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x13, PCI_CARD_NORMAL, 3, 4, 1, 2); @@ -849,23 +826,22 @@ machine_at_p5mms98_init(const machine_t *model) device_add(&w83977tf_device); device_add(&intel_flash_bxt_device); spd_register(SPD_TYPE_SDRAM, 0x3, 128); - device_add(&lm78_device); /* fans: Thermal, CPU, Chassis; temperature: unused */ + device_add(&lm78_device); /* fans: Thermal, CPU, Chassis; temperature: unused */ device_add(&lm75_1_4a_device); /* temperature: CPU */ return ret; } - int machine_at_ficva502_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/ficva502/VA502bp.BIN", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 2); @@ -886,17 +862,16 @@ machine_at_ficva502_init(const machine_t *model) return ret; } - int machine_at_ficpa2012_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/ficpa2012/113jb16.awd", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 2); @@ -919,17 +894,16 @@ machine_at_ficpa2012_init(const machine_t *model) return ret; } - int machine_at_r534f_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/r534f/r534f008.bin", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -949,17 +923,16 @@ machine_at_r534f_init(const machine_t *model) return ret; } - int machine_at_ms5146_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/ms5146/A546MS11.ROM", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -979,17 +952,16 @@ machine_at_ms5146_init(const machine_t *model) return ret; } - int machine_at_m560_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/m560/5600410s.ami", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 2); @@ -1004,24 +976,23 @@ machine_at_m560_init(const machine_t *model) pci_register_slot(0x05, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x06, PCI_CARD_NORMAL, 4, 1, 2, 3); device_add(&ali1531_device); - device_add(&ali1543_device); /* -5 */ + device_add(&ali1543_device); /* -5 */ device_add(&sst_flash_29ee010_device); spd_register(SPD_TYPE_SDRAM, 0x3, 256); return ret; } - int machine_at_ms5164_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/ms5164/W564MS43.005", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 2); @@ -1038,7 +1009,7 @@ machine_at_ms5164_init(const machine_t *model) pci_register_slot(0x07, PCI_CARD_NORMAL, 1, 2, 3, 4); device_add(&ali1531_device); - device_add(&ali1543_device); /* -5 */ + device_add(&ali1543_device); /* -5 */ device_add(&sst_flash_29ee010_device); spd_register(SPD_TYPE_SDRAM, 0x3, 256); diff --git a/src/machine/m_at_socket7_3v.c b/src/machine/m_at_socket7_3v.c index c63d02347..21550ce89 100644 --- a/src/machine/m_at_socket7_3v.c +++ b/src/machine/m_at_socket7_3v.c @@ -45,7 +45,6 @@ #include <86box/fdc.h> #include <86box/nvr.h> - static void machine_at_thor_common_init(const machine_t *model, int mr) { @@ -61,7 +60,7 @@ machine_at_thor_common_init(const machine_t *model, int mr) pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); if (gfxcard == VID_INTERNAL) - device_add(&s3_phoenix_trio64vplus_onboard_pci_device); + device_add(&s3_phoenix_trio64vplus_onboard_pci_device); // device_add(&keyboard_ps2_ami_pci_device); device_add(&keyboard_ps2_intel_ami_pci_device); @@ -71,7 +70,6 @@ machine_at_thor_common_init(const machine_t *model, int mr) device_add(&intel_flash_bxt_ami_device); } - static void machine_at_p54tp4xe_common_init(const machine_t *model) { @@ -91,68 +89,64 @@ machine_at_p54tp4xe_common_init(const machine_t *model) device_add(&intel_flash_bxt_device); } - int machine_at_p54tp4xe_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/p54tp4xe/t15i0302.awd", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_p54tp4xe_common_init(model); return ret; } - int machine_at_p54tp4xe_mr_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/p54tp4xe/TRITON.BIO", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_p54tp4xe_common_init(model); return ret; } - int machine_at_gw2katx_init(const machine_t *model) { int ret; ret = bios_load_linear_combined("roms/machines/gw2katx/1003CN0T.BIO", - "roms/machines/gw2katx/1003CN0T.BI1", 0x20000, 128); + "roms/machines/gw2katx/1003CN0T.BI1", 0x20000, 128); if (bios_only || !ret) - return ret; + return ret; machine_at_thor_common_init(model, 0); return ret; } - int machine_at_thor_init(const machine_t *model) { int ret; ret = bios_load_linear_combined("roms/machines/thor/1006cn0_.bio", - "roms/machines/thor/1006cn0_.bi1", 0x20000, 128); + "roms/machines/thor/1006cn0_.bi1", 0x20000, 128); if (bios_only || !ret) - return ret; + return ret; machine_at_thor_common_init(model, 0); @@ -165,27 +159,26 @@ machine_at_mrthor_init(const machine_t *model) int ret; ret = bios_load_linear("roms/machines/mrthor/mr_atx.bio", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_thor_common_init(model, 1); return ret; } - int machine_at_endeavor_init(const machine_t *model) { int ret; ret = bios_load_linear_combined("roms/machines/endeavor/1006cb0_.bio", - "roms/machines/endeavor/1006cb0_.bi1", 0x1d000, 128); + "roms/machines/endeavor/1006cb0_.bi1", 0x1d000, 128); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -199,7 +192,7 @@ machine_at_endeavor_init(const machine_t *model) pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); if (gfxcard == VID_INTERNAL) - device_add(&s3_phoenix_trio64_onboard_pci_device); + device_add(&s3_phoenix_trio64_onboard_pci_device); device_add(&keyboard_ps2_intel_ami_pci_device); device_add(&i430fx_device); @@ -216,10 +209,10 @@ machine_at_ms5119_init(const machine_t *model) int ret; ret = bios_load_linear("roms/machines/ms5119/A37E.ROM", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -239,17 +232,16 @@ machine_at_ms5119_init(const machine_t *model) return ret; } - int machine_at_pb640_init(const machine_t *model) { int ret; ret = bios_load_linear_combined("roms/machines/pb640/1007CP0R.BIO", - "roms/machines/pb640/1007CP0R.BI1", 0x1d000, 128); + "roms/machines/pb640/1007CP0R.BI1", 0x1d000, 128); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -264,7 +256,7 @@ machine_at_pb640_init(const machine_t *model) device_add(&piix_rev02_device); if (gfxcard == VID_INTERNAL) - device_add(&gd5440_onboard_pci_device); + device_add(&gd5440_onboard_pci_device); device_add(&keyboard_ps2_intel_ami_pci_device); device_add(&pc87306_device); @@ -279,10 +271,10 @@ machine_at_fmb_init(const machine_t *model) int ret; ret = bios_load_linear("roms/machines/fmb/P5IV183.ROM", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -303,17 +295,16 @@ machine_at_fmb_init(const machine_t *model) return ret; } - int machine_at_acerm3a_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/acerm3a/r01-b3.bin", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -335,17 +326,16 @@ machine_at_acerm3a_init(const machine_t *model) return ret; } - int machine_at_ap53_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/ap53/ap53r2c0.rom", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -366,17 +356,16 @@ machine_at_ap53_init(const machine_t *model) return ret; } - int machine_at_8500tuc_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/8500tuc/Tuc0221b.rom", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -396,17 +385,16 @@ machine_at_8500tuc_init(const machine_t *model) return ret; } - int machine_at_p55t2s_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/p55t2s/s6y08t.rom", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -426,17 +414,16 @@ machine_at_p55t2s_init(const machine_t *model) return ret; } - int machine_at_p5vxb_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/p5vxb/P5VXB10.BIN", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -456,21 +443,20 @@ machine_at_p5vxb_init(const machine_t *model) return ret; } - int machine_at_gw2kte_init(const machine_t *model) { int ret; ret = bios_load_linear_combined2("roms/machines/gw2kte/1008CY1T.BIO", - "roms/machines/gw2kte/1008CY1T.BI1", - "roms/machines/gw2kte/1008CY1T.BI2", - "roms/machines/gw2kte/1008CY1T.BI3", - "roms/machines/gw2kte/1008CY1T.RCV", - 0x3a000, 128); + "roms/machines/gw2kte/1008CY1T.BI1", + "roms/machines/gw2kte/1008CY1T.BI2", + "roms/machines/gw2kte/1008CY1T.BI3", + "roms/machines/gw2kte/1008CY1T.RCV", + 0x3a000, 128); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -491,17 +477,16 @@ machine_at_gw2kte_init(const machine_t *model) return ret; } - int machine_at_ap5s_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/ap5s/AP5S150.BIN", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -521,17 +506,16 @@ machine_at_ap5s_init(const machine_t *model) return ret; } - int machine_at_vectra54_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/vectra54/GT0724.22", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 2); @@ -544,7 +528,7 @@ machine_at_vectra54_init(const machine_t *model) pci_register_slot(0x08, PCI_CARD_NORMAL, 3, 4, 1, 2); if (gfxcard == VID_INTERNAL) - device_add(&s3_phoenix_trio64_onboard_pci_device); + device_add(&s3_phoenix_trio64_onboard_pci_device); device_add(&keyboard_ps2_ami_pci_device); device_add(&i430fx_device); diff --git a/src/machine/m_at_socket8.c b/src/machine/m_at_socket8.c index 00545eff9..1a1618dc0 100644 --- a/src/machine/m_at_socket8.c +++ b/src/machine/m_at_socket8.c @@ -39,17 +39,16 @@ #include "cpu.h" #include <86box/machine.h> - int machine_at_p6rp4_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/p6rp4/OR6I0106.SMC", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 2); device_add(&p6rp4_nvr_device); @@ -74,17 +73,16 @@ machine_at_p6rp4_init(const machine_t *model) return ret; } - int machine_at_686nx_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/686nx/6nx.140", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -97,24 +95,23 @@ machine_at_686nx_init(const machine_t *model) pci_register_slot(0x0B, PCI_CARD_NORMAL, 4, 1, 2, 3); device_add(&i440fx_device); device_add(&piix3_device); - device_add(&keyboard_ps2_ami_pci_device); //Uses the AMIKEY keyboard controller + device_add(&keyboard_ps2_ami_pci_device); // Uses the AMIKEY keyboard controller device_add(&um8669f_device); device_add(&intel_flash_bxt_device); return ret; } - int machine_at_mb600n_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/mb600n/60915cs.rom", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -140,10 +137,10 @@ machine_at_acerv60n_init(const machine_t *model) int ret; ret = bios_load_linear("roms/machines/acerv60n/V60NE5.BIN", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -170,14 +167,14 @@ machine_at_vs440fx_init(const machine_t *model) int ret; ret = bios_load_linear_combined2("roms/machines/vs440fx/1018CS1_.BIO", - "roms/machines/vs440fx/1018CS1_.BI1", - "roms/machines/vs440fx/1018CS1_.BI2", - "roms/machines/vs440fx/1018CS1_.BI3", - "roms/machines/vs440fx/1018CS1_.RCV", - 0x3a000, 128); + "roms/machines/vs440fx/1018CS1_.BI1", + "roms/machines/vs440fx/1018CS1_.BI2", + "roms/machines/vs440fx/1018CS1_.BI3", + "roms/machines/vs440fx/1018CS1_.RCV", + 0x3a000, 128); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -204,14 +201,14 @@ machine_at_ap440fx_init(const machine_t *model) int ret; ret = bios_load_linear_combined2("roms/machines/ap440fx/1011CT1_.BIO", - "roms/machines/ap440fx/1011CT1_.BI1", - "roms/machines/ap440fx/1011CT1_.BI2", - "roms/machines/ap440fx/1011CT1_.BI3", - "roms/machines/ap440fx/1011CT1_.RCV", - 0x3a000, 128); + "roms/machines/ap440fx/1011CT1_.BI1", + "roms/machines/ap440fx/1011CT1_.BI2", + "roms/machines/ap440fx/1011CT1_.BI3", + "roms/machines/ap440fx/1011CT1_.RCV", + 0x3a000, 128); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -237,10 +234,10 @@ machine_at_8600ttc_init(const machine_t *model) int ret; ret = bios_load_linear("roms/machines/8600ttc/TTC0715B.ROM", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -266,10 +263,10 @@ machine_at_m6mi_init(const machine_t *model) int ret; ret = bios_load_linear("roms/machines/m6mi/M6MI05.ROM", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init(model); @@ -316,10 +313,10 @@ machine_at_p65up5_cp6nd_init(const machine_t *model) int ret; ret = bios_load_linear("roms/machines/p65up5/ND6I0218.AWD", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_p65up5_common_init(model, &i440fx_device); diff --git a/src/machine/m_at_sockets7.c b/src/machine/m_at_sockets7.c index a32bf3883..1dbba3715 100644 --- a/src/machine/m_at_sockets7.c +++ b/src/machine/m_at_sockets7.c @@ -44,17 +44,16 @@ #include <86box/snd_ac97.h> #include <86box/clock.h> - int machine_at_p5a_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/p5a/1011.005", - 0x000c0000, 262144, 0); + 0x000c0000, 262144, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 2); @@ -72,7 +71,7 @@ machine_at_p5a_init(const machine_t *model) pci_register_slot(0x0D, PCI_CARD_NORMAL, 4, 1, 2, 3); pci_register_slot(0x06, PCI_CARD_NORMAL, 3, 4, 1, 2); device_add(&ali1541_device); - device_add(&ali1543c_device); /* +0 */ + device_add(&ali1543c_device); /* +0 */ device_add(&sst_flash_39sf020_device); spd_register(SPD_TYPE_SDRAM, 0x7, 512); device_add(&w83781d_p5a_device); /* fans: Chassis, CPU, Power; temperatures: MB, unused, CPU */ @@ -80,17 +79,16 @@ machine_at_p5a_init(const machine_t *model) return ret; } - int machine_at_m579_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/m579/MS6260S_Socket7_ALi_M1542_AMI.BIN", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 2); @@ -105,24 +103,23 @@ machine_at_m579_init(const machine_t *model) pci_register_slot(0x12, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x14, PCI_CARD_NORMAL, 1, 2, 3, 4); device_add(&ali1541_device); - device_add(&ali1543c_device); /* +0 */ + device_add(&ali1543c_device); /* +0 */ device_add(&sst_flash_29ee010_device); spd_register(SPD_TYPE_SDRAM, 0x7, 512); return ret; } - int machine_at_5aa_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/5aa/GA-5AA.F7b", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 2); @@ -137,24 +134,23 @@ machine_at_5aa_init(const machine_t *model) pci_register_slot(0x09, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x0A, PCI_CARD_NORMAL, 3, 4, 1, 2); device_add(&ali1541_device); - device_add(&ali1543c_device); /* +0 */ + device_add(&ali1543c_device); /* +0 */ device_add(&sst_flash_29ee010_device); spd_register(SPD_TYPE_SDRAM, 0x7, 512); return ret; } - int machine_at_5ax_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/5ax/5AX.F4", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 2); @@ -171,24 +167,23 @@ machine_at_5ax_init(const machine_t *model) pci_register_slot(0x0B, PCI_CARD_NORMAL, 4, 1, 2, 3); pci_register_slot(0x0C, PCI_CARD_NORMAL, 1, 2, 3, 4); device_add(&ali1541_device); - device_add(&ali1543c_device); /* +0 */ + device_add(&ali1543c_device); /* +0 */ device_add(&sst_flash_29ee010_device); spd_register(SPD_TYPE_SDRAM, 0x7, 512); return ret; } - int machine_at_ax59pro_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/ax59pro/AX59P236.BIN", - 0x000c0000, 262144, 0); + 0x000c0000, 262144, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 2); @@ -211,17 +206,16 @@ machine_at_ax59pro_init(const machine_t *model) return ret; } - int machine_at_mvp3_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/ficva503p/je4333.bin", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 2); @@ -243,17 +237,16 @@ machine_at_mvp3_init(const machine_t *model) return ret; } - int machine_at_ficva503a_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/ficva503a/jn4116.bin", - 0x000c0000, 262144, 0); + 0x000c0000, 262144, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 2); @@ -273,25 +266,24 @@ machine_at_ficva503a_init(const machine_t *model) spd_register(SPD_TYPE_SDRAM, 0x7, 256); hwm_values.temperatures[0] += 2; /* CPU offset */ hwm_values.temperatures[1] += 2; /* System offset */ - hwm_values.temperatures[2] = 0; /* unused */ + hwm_values.temperatures[2] = 0; /* unused */ if (sound_card_current == SOUND_INTERNAL) - device_add(&wm9701a_device); /* on daughtercard */ + device_add(&wm9701a_device); /* on daughtercard */ return ret; } - int machine_at_5emapro_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/5emapro/5emo1aa2.bin", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_at_common_init_ex(model, 2); @@ -311,9 +303,9 @@ machine_at_5emapro_init(const machine_t *model) device_add(&sst_flash_39sf010_device); spd_register(SPD_TYPE_SDRAM, 0x7, 256); device_add(&via_vt82c686_hwm_device); /* fans: CPU1, Chassis; temperatures: CPU, System, unused */ - hwm_values.temperatures[0] += 2; /* CPU offset */ - hwm_values.temperatures[1] += 2; /* System offset */ - hwm_values.temperatures[2] = 0; /* unused */ + hwm_values.temperatures[0] += 2; /* CPU offset */ + hwm_values.temperatures[1] += 2; /* System offset */ + hwm_values.temperatures[2] = 0; /* unused */ return ret; } diff --git a/src/machine/m_at_t3100e.c b/src/machine/m_at_t3100e.c index afeea0a57..4757ea99a 100644 --- a/src/machine/m_at_t3100e.c +++ b/src/machine/m_at_t3100e.c @@ -167,643 +167,663 @@ #include <86box/machine.h> #include <86box/m_at_t3100e.h> - -extern uint8_t *ram; /* Physical RAM */ +extern uint8_t *ram; /* Physical RAM */ void at_init(); - /* The T3100e motherboard can (and does) dynamically reassign RAM between * conventional, XMS and EMS. This translates to monkeying with the mappings. */ extern mem_mapping_t base_mapping; -extern mem_mapping_t ram_low_mapping; /* This is to switch conventional RAM - * between 512k and 640k */ +extern mem_mapping_t ram_low_mapping; /* This is to switch conventional RAM + * between 512k and 640k */ -extern mem_mapping_t ram_mid_mapping; /* This will not be used */ +extern mem_mapping_t ram_mid_mapping; /* This will not be used */ -extern mem_mapping_t ram_high_mapping; /* This is RAM beyond 1Mb if any */ +extern mem_mapping_t ram_high_mapping; /* This is RAM beyond 1Mb if any */ extern uint8_t *ram; -static unsigned t3100e_ems_page_reg[] = -{ - 0x208, 0x4208, 0x8208, 0xc208, /* The first four map the first 2Mb */ - /* of RAM into the page frame */ - 0x218, 0x4218, 0x8218, 0xc218, /* The next four map the next 2Mb */ - /* of RAM */ - 0x258, 0x4258, 0x8258, 0xc258, /* and so on. */ - 0x268, 0x4268, 0x8268, 0xc268, +static unsigned t3100e_ems_page_reg[] = { + 0x208, + 0x4208, + 0x8208, + 0xc208, /* The first four map the first 2Mb */ + /* of RAM into the page frame */ + 0x218, + 0x4218, + 0x8218, + 0xc218, /* The next four map the next 2Mb */ + /* of RAM */ + 0x258, + 0x4258, + 0x8258, + 0xc258, /* and so on. */ + 0x268, + 0x4268, + 0x8268, + 0xc268, }; -struct t3100e_ems_regs -{ - uint8_t page[16]; - mem_mapping_t mapping[4]; - uint32_t page_exec[4]; /* Physical location of memory pages */ - uint32_t upper_base; /* Start of upper RAM */ - uint8_t upper_pages; /* Pages of EMS available from upper RAM */ - uint8_t upper_is_ems; /* Upper RAM is EMS? */ - mem_mapping_t upper_mapping; - uint8_t notify; /* Notification from keyboard controller */ - uint8_t turbo; /* 0 for 6MHz, else full speed */ - uint8_t mono; /* Emulates PC/AT 'mono' motherboard switch */ - /* Bit 0 is 0 for colour, 1 for mono */ +struct t3100e_ems_regs { + uint8_t page[16]; + mem_mapping_t mapping[4]; + uint32_t page_exec[4]; /* Physical location of memory pages */ + uint32_t upper_base; /* Start of upper RAM */ + uint8_t upper_pages; /* Pages of EMS available from upper RAM */ + uint8_t upper_is_ems; /* Upper RAM is EMS? */ + mem_mapping_t upper_mapping; + uint8_t notify; /* Notification from keyboard controller */ + uint8_t turbo; /* 0 for 6MHz, else full speed */ + uint8_t mono; /* Emulates PC/AT 'mono' motherboard switch */ + /* Bit 0 is 0 for colour, 1 for mono */ } t3100e_ems; void t3100e_ems_out(uint16_t addr, uint8_t val, void *p); - #ifdef ENABLE_T3100E_LOG int t3100e_do_log = ENABLE_T3100E_LOG; - static void t3100e_log(const char *fmt, ...) { - va_list ap; + va_list ap; - if (t3100e_do_log) - { - va_start(ap, fmt); - pclog_ex(fmt, ap); - va_end(ap); - } + if (t3100e_do_log) { + va_start(ap, fmt); + pclog_ex(fmt, ap); + va_end(ap); + } } #else -#define t3100e_log(fmt, ...) +# define t3100e_log(fmt, ...) #endif - /* Given a memory address (which ought to be in the page frame at 0xD0000), * which page does it relate to? */ -static int addr_to_page(uint32_t addr) +static int +addr_to_page(uint32_t addr) { - if ((addr & 0xF0000) == 0xD0000) - { - return ((addr >> 14) & 3); - } - return -1; + if ((addr & 0xF0000) == 0xD0000) { + return ((addr >> 14) & 3); + } + return -1; } /* And vice versa: Given a page slot, which memory address does it * correspond to? */ -static uint32_t page_to_addr(int pg) +static uint32_t +page_to_addr(int pg) { - return 0xD0000 + ((pg & 3) * 16384); + return 0xD0000 + ((pg & 3) * 16384); } /* Given an EMS page ID, return its physical address in RAM. */ -uint32_t t3100e_ems_execaddr(struct t3100e_ems_regs *regs, - int pg, uint16_t val) +uint32_t +t3100e_ems_execaddr(struct t3100e_ems_regs *regs, + int pg, uint16_t val) { - uint32_t addr; + uint32_t addr; - if (!(val & 0x80)) return 0; /* Bit 7 reset => not mapped */ + if (!(val & 0x80)) + return 0; /* Bit 7 reset => not mapped */ - val &= 0x7F; - val += (0x80 * (pg >> 2)); /* The high bits of the register bank */ - /* are used to extend val to allow up */ - /* to 8Mb of EMS to be accessed */ + val &= 0x7F; + val += (0x80 * (pg >> 2)); /* The high bits of the register bank */ + /* are used to extend val to allow up */ + /* to 8Mb of EMS to be accessed */ - /* Is it in the upper memory range? */ - if (regs->upper_is_ems) - { - if (val < regs->upper_pages) - { - addr = regs->upper_base + 0x4000 * val; - return addr; - } - val -= regs->upper_pages; - } - /* Otherwise work down from the top of high RAM (so, the more EMS, - * the less XMS) */ - if ((val * 0x4000) + 0x100000 >= (mem_size * 1024)) - { - return 0; /* Not enough high RAM for this page */ - } - /* High RAM found */ - addr = (mem_size * 1024) - 0x4000 * (val + 1); + /* Is it in the upper memory range? */ + if (regs->upper_is_ems) { + if (val < regs->upper_pages) { + addr = regs->upper_base + 0x4000 * val; + return addr; + } + val -= regs->upper_pages; + } + /* Otherwise work down from the top of high RAM (so, the more EMS, + * the less XMS) */ + if ((val * 0x4000) + 0x100000 >= (mem_size * 1024)) { + return 0; /* Not enough high RAM for this page */ + } + /* High RAM found */ + addr = (mem_size * 1024) - 0x4000 * (val + 1); - return addr; + return addr; } - /* The registers governing the EMS ports are in rather a nonintuitive order */ -static int port_to_page(uint16_t addr) +static int +port_to_page(uint16_t addr) { - switch (addr) - { - case 0x208: return 0; - case 0x4208: return 1; - case 0x8208: return 2; - case 0xC208: return 3; - case 0x218: return 4; - case 0x4218: return 5; - case 0x8218: return 6; - case 0xC218: return 7; - case 0x258: return 8; - case 0x4258: return 9; - case 0x8258: return 10; - case 0xC258: return 11; - case 0x268: return 12; - case 0x4268: return 13; - case 0x8268: return 14; - case 0xC268: return 15; - } - return -1; + switch (addr) { + case 0x208: + return 0; + case 0x4208: + return 1; + case 0x8208: + return 2; + case 0xC208: + return 3; + case 0x218: + return 4; + case 0x4218: + return 5; + case 0x8218: + return 6; + case 0xC218: + return 7; + case 0x258: + return 8; + case 0x4258: + return 9; + case 0x8258: + return 10; + case 0xC258: + return 11; + case 0x268: + return 12; + case 0x4268: + return 13; + case 0x8268: + return 14; + case 0xC268: + return 15; + } + return -1; } /* Used to dump the memory mapping table, for debugging void dump_mappings() { - mem_mapping_t *mm = base_mapping.next; + mem_mapping_t *mm = base_mapping.next; - if (!t3100e_log) return; - while (mm) - { - const char *name = ""; - uint32_t offset = (uint32_t)(mm->exec - ram); + if (!t3100e_log) return; + while (mm) + { + const char *name = ""; + uint32_t offset = (uint32_t)(mm->exec - ram); - if (mm == &ram_low_mapping ) name = "LOW "; - if (mm == &ram_mid_mapping ) name = "MID "; - if (mm == &ram_high_mapping) name = "HIGH"; - if (mm == &t3100e_ems.upper_mapping) name = "UPPR"; - if (mm == &t3100e_ems.mapping[0]) - { - name = "EMS0"; - offset = t3100e_ems.page_exec[0]; - } - if (mm == &t3100e_ems.mapping[1]) - { - name = "EMS1"; - offset = t3100e_ems.page_exec[1]; - } - if (mm == &t3100e_ems.mapping[2]) - { - name = "EMS2"; - offset = t3100e_ems.page_exec[2]; - } - if (mm == &t3100e_ems.mapping[3]) - { - name = "EMS3"; - offset = t3100e_ems.page_exec[3]; - } + if (mm == &ram_low_mapping ) name = "LOW "; + if (mm == &ram_mid_mapping ) name = "MID "; + if (mm == &ram_high_mapping) name = "HIGH"; + if (mm == &t3100e_ems.upper_mapping) name = "UPPR"; + if (mm == &t3100e_ems.mapping[0]) + { + name = "EMS0"; + offset = t3100e_ems.page_exec[0]; + } + if (mm == &t3100e_ems.mapping[1]) + { + name = "EMS1"; + offset = t3100e_ems.page_exec[1]; + } + if (mm == &t3100e_ems.mapping[2]) + { + name = "EMS2"; + offset = t3100e_ems.page_exec[2]; + } + if (mm == &t3100e_ems.mapping[3]) + { + name = "EMS3"; + offset = t3100e_ems.page_exec[3]; + } - t3100e_log(" %p | base=%05x size=%05x %c @ %06x %s\n", mm, - mm->base, mm->size, mm->enable ? 'Y' : 'N', - offset, name); + t3100e_log(" %p | base=%05x size=%05x %c @ %06x %s\n", mm, + mm->base, mm->size, mm->enable ? 'Y' : 'N', + offset, name); - mm = mm->next; - } + mm = mm->next; + } }*/ -void t3100e_map_ram(uint8_t val) +void +t3100e_map_ram(uint8_t val) { - int n; - int32_t upper_len; + int n; + int32_t upper_len; #ifdef ENABLE_T3100E_LOG - t3100e_log("OUT 0x8084, %02x [ set memory mapping :", val | 0x40); - if (val & 1) t3100e_log("ENABLE_EMS "); - if (val & 2) t3100e_log("ENABLE_XMS "); - if (val & 4) t3100e_log("640K "); - if (val & 8) t3100e_log("X8X "); - if (val & 16) t3100e_log("UPPER_IS_XMS "); - t3100e_log("\n"); + t3100e_log("OUT 0x8084, %02x [ set memory mapping :", val | 0x40); + if (val & 1) + t3100e_log("ENABLE_EMS "); + if (val & 2) + t3100e_log("ENABLE_XMS "); + if (val & 4) + t3100e_log("640K "); + if (val & 8) + t3100e_log("X8X "); + if (val & 16) + t3100e_log("UPPER_IS_XMS "); + t3100e_log("\n"); #endif - /* Bit 2 controls size of conventional memory */ - if (val & 4) - { - t3100e_ems.upper_base = 0xA0000; - t3100e_ems.upper_pages = 24; - } - else - { - t3100e_ems.upper_base = 0x80000; - t3100e_ems.upper_pages = 32; - } - upper_len = t3100e_ems.upper_pages * 16384; + /* Bit 2 controls size of conventional memory */ + if (val & 4) { + t3100e_ems.upper_base = 0xA0000; + t3100e_ems.upper_pages = 24; + } else { + t3100e_ems.upper_base = 0x80000; + t3100e_ems.upper_pages = 32; + } + upper_len = t3100e_ems.upper_pages * 16384; - mem_mapping_set_addr(&ram_low_mapping, 0, t3100e_ems.upper_base); - /* Bit 0 set if upper RAM is EMS */ - t3100e_ems.upper_is_ems = (val & 1); + mem_mapping_set_addr(&ram_low_mapping, 0, t3100e_ems.upper_base); + /* Bit 0 set if upper RAM is EMS */ + t3100e_ems.upper_is_ems = (val & 1); - /* Bit 1 set if high RAM is enabled */ - if (val & 2) - { - mem_mapping_enable(&ram_high_mapping); - } - else - { - mem_mapping_disable(&ram_high_mapping); - } + /* Bit 1 set if high RAM is enabled */ + if (val & 2) { + mem_mapping_enable(&ram_high_mapping); + } else { + mem_mapping_disable(&ram_high_mapping); + } - /* Bit 4 set if upper RAM is mapped to high memory - * (and bit 1 set if XMS enabled) */ - if ((val & 0x12) == 0x12) - { - mem_mapping_set_addr(&t3100e_ems.upper_mapping, - mem_size * 1024, - upper_len); - mem_mapping_enable(&t3100e_ems.upper_mapping); - mem_mapping_set_exec(&t3100e_ems.upper_mapping, ram + t3100e_ems.upper_base); - } - else - { - mem_mapping_disable(&t3100e_ems.upper_mapping); - } - /* Recalculate EMS mappings */ - for (n = 0; n < 4; n++) - { - t3100e_ems_out(t3100e_ems_page_reg[n], t3100e_ems.page[n], - &t3100e_ems); - } + /* Bit 4 set if upper RAM is mapped to high memory + * (and bit 1 set if XMS enabled) */ + if ((val & 0x12) == 0x12) { + mem_mapping_set_addr(&t3100e_ems.upper_mapping, + mem_size * 1024, + upper_len); + mem_mapping_enable(&t3100e_ems.upper_mapping); + mem_mapping_set_exec(&t3100e_ems.upper_mapping, ram + t3100e_ems.upper_base); + } else { + mem_mapping_disable(&t3100e_ems.upper_mapping); + } + /* Recalculate EMS mappings */ + for (n = 0; n < 4; n++) { + t3100e_ems_out(t3100e_ems_page_reg[n], t3100e_ems.page[n], + &t3100e_ems); + } - //dump_mappings(); + // dump_mappings(); } - -void t3100e_notify_set(uint8_t value) +void +t3100e_notify_set(uint8_t value) { - t3100e_ems.notify = value; + t3100e_ems.notify = value; } -void t3100e_mono_set(uint8_t value) +void +t3100e_mono_set(uint8_t value) { - t3100e_ems.mono = value; + t3100e_ems.mono = value; } -uint8_t t3100e_mono_get(void) +uint8_t +t3100e_mono_get(void) { - return t3100e_ems.mono; + return t3100e_ems.mono; } -void t3100e_turbo_set(uint8_t value) +void +t3100e_turbo_set(uint8_t value) { - t3100e_ems.turbo = value; - if (!value) - { - cpu_dynamic_switch(0); /* 286/6 */ - } - else - { - cpu_dynamic_switch(cpu); - } + t3100e_ems.turbo = value; + if (!value) { + cpu_dynamic_switch(0); /* 286/6 */ + } else { + cpu_dynamic_switch(cpu); + } } - - -uint8_t t3100e_sys_in(uint16_t addr, void *p) +uint8_t +t3100e_sys_in(uint16_t addr, void *p) { - struct t3100e_ems_regs *regs = (struct t3100e_ems_regs *)p; + struct t3100e_ems_regs *regs = (struct t3100e_ems_regs *) p; - /* The low 4 bits always seem to be 0x0C. The high 4 are a - * notification sent by the keyboard controller when it detects - * an [Fn] key combination */ - t3100e_log("IN 0x8084\n"); - return 0x0C | (regs->notify << 4); + /* The low 4 bits always seem to be 0x0C. The high 4 are a + * notification sent by the keyboard controller when it detects + * an [Fn] key combination */ + t3100e_log("IN 0x8084\n"); + return 0x0C | (regs->notify << 4); } - - /* Handle writes to the T3100e system control port at 0x8084 */ -void t3100e_sys_out(uint16_t addr, uint8_t val, void *p) +void +t3100e_sys_out(uint16_t addr, uint8_t val, void *p) { -// struct t3100e_ems_regs *regs = (struct t3100e_ems_regs *)p; + // struct t3100e_ems_regs *regs = (struct t3100e_ems_regs *)p; - switch (val & 0xE0) - { - case 0x00: /* Set serial port IRQs. Not implemented */ - t3100e_log("OUT 0x8084, %02x [ set serial port IRQs]\n", val); - break; - case 0x40: /* Set RAM mappings. */ - t3100e_map_ram(val & 0x1F); - break; + switch (val & 0xE0) { + case 0x00: /* Set serial port IRQs. Not implemented */ + t3100e_log("OUT 0x8084, %02x [ set serial port IRQs]\n", val); + break; + case 0x40: /* Set RAM mappings. */ + t3100e_map_ram(val & 0x1F); + break; - case 0x80: /* Set video options. */ - t3100e_video_options_set(val & 0x1F); break; + case 0x80: /* Set video options. */ + t3100e_video_options_set(val & 0x1F); + break; - /* Other options not implemented. */ - default: t3100e_log("OUT 0x8084, %02x\n", val); break; - } + /* Other options not implemented. */ + default: + t3100e_log("OUT 0x8084, %02x\n", val); + break; + } } - -uint8_t t3100e_config_get(void) +uint8_t +t3100e_config_get(void) { -/* The byte returned: - Bit 7: Set if internal plasma display enabled - Bit 6: Set if running at 6MHz, clear at full speed - Bit 5: Always 1? - Bit 4: Set if the FD2MB jumper is present (internal floppy is ?tri-mode) - Bit 3: Clear if the FD2 jumper is present (two internal floppies) - Bit 2: Set if the internal drive is A:, clear if B: - Bit 1: Set if the parallel port is configured as a floppy connector - for the second drive. - Bit 0: Set if the F2HD jumper is present (internal floppy is 720k) - */ - uint8_t value = 0x28; /* Start with bits 5 and 3 set. */ + /* The byte returned: + Bit 7: Set if internal plasma display enabled + Bit 6: Set if running at 6MHz, clear at full speed + Bit 5: Always 1? + Bit 4: Set if the FD2MB jumper is present (internal floppy is ?tri-mode) + Bit 3: Clear if the FD2 jumper is present (two internal floppies) + Bit 2: Set if the internal drive is A:, clear if B: + Bit 1: Set if the parallel port is configured as a floppy connector + for the second drive. + Bit 0: Set if the F2HD jumper is present (internal floppy is 720k) + */ + uint8_t value = 0x28; /* Start with bits 5 and 3 set. */ - int type_a = fdd_get_type(0); - int type_b = fdd_get_type(1); - int prt_switch; /* External drive type: 0=> none, 1=>A, 2=>B */ + int type_a = fdd_get_type(0); + int type_b = fdd_get_type(1); + int prt_switch; /* External drive type: 0=> none, 1=>A, 2=>B */ -/* Get display setting */ - if (t3100e_display_get()) value |= 0x80; - if (!t3100e_ems.turbo) value |= 0x40; + /* Get display setting */ + if (t3100e_display_get()) + value |= 0x80; + if (!t3100e_ems.turbo) + value |= 0x40; -/* Try to determine the floppy types.*/ + /* Try to determine the floppy types.*/ - prt_switch = (type_b ? 2 : 0); - switch(type_a) - { -/* Since a T3100e cannot have an internal 5.25" drive, mark 5.25" A: drive as - * being external, and set the internal type based on type_b. */ - case 1: /* 360k */ - case 2: /* 1.2Mb */ - case 3: /* 1.2Mb RPMx2*/ - prt_switch = 1; /* External drive is A: */ - switch (type_b) - { - case 1: /* 360k */ - case 4: value |= 1; break; /* 720k */ - case 6: value |= 0x10; break; /* Tri-mode */ - /* All others will be treated as 1.4M */ - } - break; - case 4: value |= 0x01; /* 720k */ - if (type_a == type_b) - { - value &= (~8); /* Two internal drives */ - prt_switch = 0; /* No external drive */ - } - break; - case 5: /* 1.4M */ - case 7: /* 2.8M */ - if (type_a == type_b) - { - value &= (~8); /* Two internal drives */ - prt_switch = 0; /* No external drive */ - } - break; - case 6: /* 3-mode */ - value |= 0x10; - if (type_a == type_b) - { - value &= (~8); /* Two internal drives */ - prt_switch = 0; /* No external drive */ - } - break; - } /* End switch */ - switch (prt_switch) - { - case 0: value |= 4; break; /* No external floppy */ - case 1: value |= 2; break; /* External floppy is A: */ - case 2: value |= 6; break; /* External floppy is B: */ - } - return value; + prt_switch = (type_b ? 2 : 0); + switch (type_a) { + /* Since a T3100e cannot have an internal 5.25" drive, mark 5.25" A: drive as + * being external, and set the internal type based on type_b. */ + case 1: /* 360k */ + case 2: /* 1.2Mb */ + case 3: /* 1.2Mb RPMx2*/ + prt_switch = 1; /* External drive is A: */ + switch (type_b) { + case 1: /* 360k */ + case 4: + value |= 1; + break; /* 720k */ + case 6: + value |= 0x10; + break; /* Tri-mode */ + /* All others will be treated as 1.4M */ + } + break; + case 4: + value |= 0x01; /* 720k */ + if (type_a == type_b) { + value &= (~8); /* Two internal drives */ + prt_switch = 0; /* No external drive */ + } + break; + case 5: /* 1.4M */ + case 7: /* 2.8M */ + if (type_a == type_b) { + value &= (~8); /* Two internal drives */ + prt_switch = 0; /* No external drive */ + } + break; + case 6: /* 3-mode */ + value |= 0x10; + if (type_a == type_b) { + value &= (~8); /* Two internal drives */ + prt_switch = 0; /* No external drive */ + } + break; + } /* End switch */ + switch (prt_switch) { + case 0: + value |= 4; + break; /* No external floppy */ + case 1: + value |= 2; + break; /* External floppy is A: */ + case 2: + value |= 6; + break; /* External floppy is B: */ + } + return value; } - /* Read EMS page register */ -uint8_t t3100e_ems_in(uint16_t addr, void *p) +uint8_t +t3100e_ems_in(uint16_t addr, void *p) { - struct t3100e_ems_regs *regs = (struct t3100e_ems_regs *)p; + struct t3100e_ems_regs *regs = (struct t3100e_ems_regs *) p; - int page = port_to_page(addr); - if (page >= 0) - return regs->page[page]; - else { - fatal("t3100e_ems_in(): invalid address"); - return 0xff; - } + int page = port_to_page(addr); + if (page >= 0) + return regs->page[page]; + else { + fatal("t3100e_ems_in(): invalid address"); + return 0xff; + } } /* Write EMS page register */ -void t3100e_ems_out(uint16_t addr, uint8_t val, void *p) +void +t3100e_ems_out(uint16_t addr, uint8_t val, void *p) { - struct t3100e_ems_regs *regs = (struct t3100e_ems_regs *)p; - int pg = port_to_page(addr); + struct t3100e_ems_regs *regs = (struct t3100e_ems_regs *) p; + int pg = port_to_page(addr); - if (pg == -1) - return; + if (pg == -1) + return; - regs->page_exec[pg & 3] = t3100e_ems_execaddr(regs, pg, val); - t3100e_log("EMS: page %d %02x -> %02x [%06x]\n", - pg, regs->page[pg], val, regs->page_exec[pg & 3]); - regs->page[pg] = val; + regs->page_exec[pg & 3] = t3100e_ems_execaddr(regs, pg, val); + t3100e_log("EMS: page %d %02x -> %02x [%06x]\n", + pg, regs->page[pg], val, regs->page_exec[pg & 3]); + regs->page[pg] = val; - pg &= 3; -/* Bit 7 set if page is enabled, reset if page is disabled */ - if (regs->page_exec[pg]) - { - t3100e_log("Enabling EMS RAM at %05x\n", - page_to_addr(pg)); - mem_mapping_enable(®s->mapping[pg]); - mem_mapping_set_exec(®s->mapping[pg], ram + regs->page_exec[pg]); - } - else - { - t3100e_log("Disabling EMS RAM at %05x\n", - page_to_addr(pg)); - mem_mapping_disable(®s->mapping[pg]); - } + pg &= 3; + /* Bit 7 set if page is enabled, reset if page is disabled */ + if (regs->page_exec[pg]) { + t3100e_log("Enabling EMS RAM at %05x\n", + page_to_addr(pg)); + mem_mapping_enable(®s->mapping[pg]); + mem_mapping_set_exec(®s->mapping[pg], ram + regs->page_exec[pg]); + } else { + t3100e_log("Disabling EMS RAM at %05x\n", + page_to_addr(pg)); + mem_mapping_disable(®s->mapping[pg]); + } } - /* Read RAM in the EMS page frame */ -static uint8_t ems_read_ram(uint32_t addr, void *priv) +static uint8_t +ems_read_ram(uint32_t addr, void *priv) { - struct t3100e_ems_regs *regs = (struct t3100e_ems_regs *)priv; - int pg = addr_to_page(addr); + struct t3100e_ems_regs *regs = (struct t3100e_ems_regs *) priv; + int pg = addr_to_page(addr); - if (pg < 0) return 0xFF; - addr = regs->page_exec[pg] + (addr & 0x3FFF); - return ram[addr]; + if (pg < 0) + return 0xFF; + addr = regs->page_exec[pg] + (addr & 0x3FFF); + return ram[addr]; } - - - -static uint16_t ems_read_ramw(uint32_t addr, void *priv) +static uint16_t +ems_read_ramw(uint32_t addr, void *priv) { - struct t3100e_ems_regs *regs = (struct t3100e_ems_regs *)priv; - int pg = addr_to_page(addr); + struct t3100e_ems_regs *regs = (struct t3100e_ems_regs *) priv; + int pg = addr_to_page(addr); - if (pg < 0) return 0xFFFF; - //t3100e_log("ems_read_ramw addr=%05x ", addr); - addr = regs->page_exec[pg] + (addr & 0x3FFF); - //t3100e_log("-> %06x val=%04x\n", addr, *(uint16_t *)&ram[addr]); - return *(uint16_t *)&ram[addr]; + if (pg < 0) + return 0xFFFF; + // t3100e_log("ems_read_ramw addr=%05x ", addr); + addr = regs->page_exec[pg] + (addr & 0x3FFF); + // t3100e_log("-> %06x val=%04x\n", addr, *(uint16_t *)&ram[addr]); + return *(uint16_t *) &ram[addr]; } - -static uint32_t ems_read_raml(uint32_t addr, void *priv) +static uint32_t +ems_read_raml(uint32_t addr, void *priv) { - struct t3100e_ems_regs *regs = (struct t3100e_ems_regs *)priv; - int pg = addr_to_page(addr); + struct t3100e_ems_regs *regs = (struct t3100e_ems_regs *) priv; + int pg = addr_to_page(addr); - if (pg < 0) return 0xFFFFFFFF; - addr = regs->page_exec[pg] + (addr & 0x3FFF); - return *(uint32_t *)&ram[addr]; + if (pg < 0) + return 0xFFFFFFFF; + addr = regs->page_exec[pg] + (addr & 0x3FFF); + return *(uint32_t *) &ram[addr]; } /* Write RAM in the EMS page frame */ -static void ems_write_ram(uint32_t addr, uint8_t val, void *priv) +static void +ems_write_ram(uint32_t addr, uint8_t val, void *priv) { - struct t3100e_ems_regs *regs = (struct t3100e_ems_regs *)priv; - int pg = addr_to_page(addr); + struct t3100e_ems_regs *regs = (struct t3100e_ems_regs *) priv; + int pg = addr_to_page(addr); - if (pg < 0) return; - addr = regs->page_exec[pg] + (addr & 0x3FFF); - ram[addr] = val; + if (pg < 0) + return; + addr = regs->page_exec[pg] + (addr & 0x3FFF); + ram[addr] = val; } - -static void ems_write_ramw(uint32_t addr, uint16_t val, void *priv) +static void +ems_write_ramw(uint32_t addr, uint16_t val, void *priv) { - struct t3100e_ems_regs *regs = (struct t3100e_ems_regs *)priv; - int pg = addr_to_page(addr); + struct t3100e_ems_regs *regs = (struct t3100e_ems_regs *) priv; + int pg = addr_to_page(addr); - if (pg < 0) return; - //t3100e_log("ems_write_ramw addr=%05x ", addr); - addr = regs->page_exec[pg] + (addr & 0x3FFF); - //t3100e_log("-> %06x val=%04x\n", addr, val); + if (pg < 0) + return; + // t3100e_log("ems_write_ramw addr=%05x ", addr); + addr = regs->page_exec[pg] + (addr & 0x3FFF); + // t3100e_log("-> %06x val=%04x\n", addr, val); - *(uint16_t *)&ram[addr] = val; + *(uint16_t *) &ram[addr] = val; } - -static void ems_write_raml(uint32_t addr, uint32_t val, void *priv) +static void +ems_write_raml(uint32_t addr, uint32_t val, void *priv) { - struct t3100e_ems_regs *regs = (struct t3100e_ems_regs *)priv; - int pg = addr_to_page(addr); + struct t3100e_ems_regs *regs = (struct t3100e_ems_regs *) priv; + int pg = addr_to_page(addr); - if (pg < 0) return; - addr = regs->page_exec[pg] + (addr & 0x3FFF); - *(uint32_t *)&ram[addr] = val; + if (pg < 0) + return; + addr = regs->page_exec[pg] + (addr & 0x3FFF); + *(uint32_t *) &ram[addr] = val; } - - /* Read RAM in the upper area. This is basically what the 'remapped' * mapping in mem.c does, except that the upper area can move around */ -static uint8_t upper_read_ram(uint32_t addr, void *priv) +static uint8_t +upper_read_ram(uint32_t addr, void *priv) { - struct t3100e_ems_regs *regs = (struct t3100e_ems_regs *)priv; + struct t3100e_ems_regs *regs = (struct t3100e_ems_regs *) priv; - addr = (addr - (1024 * mem_size)) + regs->upper_base; - return ram[addr]; + addr = (addr - (1024 * mem_size)) + regs->upper_base; + return ram[addr]; } -static uint16_t upper_read_ramw(uint32_t addr, void *priv) +static uint16_t +upper_read_ramw(uint32_t addr, void *priv) { - struct t3100e_ems_regs *regs = (struct t3100e_ems_regs *)priv; + struct t3100e_ems_regs *regs = (struct t3100e_ems_regs *) priv; - addr = (addr - (1024 * mem_size)) + regs->upper_base; - return *(uint16_t *)&ram[addr]; + addr = (addr - (1024 * mem_size)) + regs->upper_base; + return *(uint16_t *) &ram[addr]; } -static uint32_t upper_read_raml(uint32_t addr, void *priv) +static uint32_t +upper_read_raml(uint32_t addr, void *priv) { - struct t3100e_ems_regs *regs = (struct t3100e_ems_regs *)priv; + struct t3100e_ems_regs *regs = (struct t3100e_ems_regs *) priv; - addr = (addr - (1024 * mem_size)) + regs->upper_base; - return *(uint32_t *)&ram[addr]; + addr = (addr - (1024 * mem_size)) + regs->upper_base; + return *(uint32_t *) &ram[addr]; } - -static void upper_write_ram(uint32_t addr, uint8_t val, void *priv) +static void +upper_write_ram(uint32_t addr, uint8_t val, void *priv) { - struct t3100e_ems_regs *regs = (struct t3100e_ems_regs *)priv; + struct t3100e_ems_regs *regs = (struct t3100e_ems_regs *) priv; - addr = (addr - (1024 * mem_size)) + regs->upper_base; - ram[addr] = val; + addr = (addr - (1024 * mem_size)) + regs->upper_base; + ram[addr] = val; } - -static void upper_write_ramw(uint32_t addr, uint16_t val, void *priv) +static void +upper_write_ramw(uint32_t addr, uint16_t val, void *priv) { - struct t3100e_ems_regs *regs = (struct t3100e_ems_regs *)priv; + struct t3100e_ems_regs *regs = (struct t3100e_ems_regs *) priv; - addr = (addr - (1024 * mem_size)) + regs->upper_base; - *(uint16_t *)&ram[addr] = val; + addr = (addr - (1024 * mem_size)) + regs->upper_base; + *(uint16_t *) &ram[addr] = val; } - - -static void upper_write_raml(uint32_t addr, uint32_t val, void *priv) +static void +upper_write_raml(uint32_t addr, uint32_t val, void *priv) { - struct t3100e_ems_regs *regs = (struct t3100e_ems_regs *)priv; + struct t3100e_ems_regs *regs = (struct t3100e_ems_regs *) priv; - addr = (addr - (1024 * mem_size)) + regs->upper_base; - *(uint32_t *)&ram[addr] = val; + addr = (addr - (1024 * mem_size)) + regs->upper_base; + *(uint32_t *) &ram[addr] = val; } - - - -int machine_at_t3100e_init(const machine_t *model) +int +machine_at_t3100e_init(const machine_t *model) { - int ret; + int ret; - ret = bios_load_linear("roms/machines/t3100e/t3100e.rom", - 0x000f0000, 65536, 0); + ret = bios_load_linear("roms/machines/t3100e/t3100e.rom", + 0x000f0000, 65536, 0); - if (bios_only || !ret) - return ret; + if (bios_only || !ret) + return ret; - int pg; + int pg; - memset(&t3100e_ems, 0, sizeof(t3100e_ems)); + memset(&t3100e_ems, 0, sizeof(t3100e_ems)); - machine_at_common_ide_init(model); + machine_at_common_ide_init(model); - device_add(&keyboard_at_toshiba_device); + device_add(&keyboard_at_toshiba_device); - if (fdc_type == FDC_INTERNAL) - { - device_add(&fdc_at_device); - } + if (fdc_type == FDC_INTERNAL) { + device_add(&fdc_at_device); + } - /* Hook up system control port */ - io_sethandler(0x8084, 0x0001, - t3100e_sys_in, NULL, NULL, - t3100e_sys_out, NULL, NULL, &t3100e_ems); + /* Hook up system control port */ + io_sethandler(0x8084, 0x0001, + t3100e_sys_in, NULL, NULL, + t3100e_sys_out, NULL, NULL, &t3100e_ems); - /* Start monitoring all 16 EMS registers */ - for (pg = 0; pg < 16; pg++) - { - io_sethandler(t3100e_ems_page_reg[pg], 0x0001, - t3100e_ems_in, NULL, NULL, - t3100e_ems_out, NULL, NULL, &t3100e_ems); - } + /* Start monitoring all 16 EMS registers */ + for (pg = 0; pg < 16; pg++) { + io_sethandler(t3100e_ems_page_reg[pg], 0x0001, + t3100e_ems_in, NULL, NULL, + t3100e_ems_out, NULL, NULL, &t3100e_ems); + } - /* Map the EMS page frame */ - for (pg = 0; pg < 4; pg++) - { - t3100e_log("Adding memory map at %x for page %d\n", page_to_addr(pg), pg); - mem_mapping_add(&t3100e_ems.mapping[pg], - page_to_addr(pg), 16384, - ems_read_ram, ems_read_ramw, ems_read_raml, - ems_write_ram, ems_write_ramw, ems_write_raml, - NULL, MEM_MAPPING_EXTERNAL, - &t3100e_ems); - /* Start them all off disabled */ - mem_mapping_disable(&t3100e_ems.mapping[pg]); - } - /* Mapping for upper RAM when in use as XMS*/ - mem_mapping_add(&t3100e_ems.upper_mapping, mem_size * 1024, 384 * 1024, - upper_read_ram, upper_read_ramw, upper_read_raml, - upper_write_ram, upper_write_ramw, upper_write_raml, - NULL, MEM_MAPPING_INTERNAL, &t3100e_ems); - mem_mapping_disable(&t3100e_ems.upper_mapping); + /* Map the EMS page frame */ + for (pg = 0; pg < 4; pg++) { + t3100e_log("Adding memory map at %x for page %d\n", page_to_addr(pg), pg); + mem_mapping_add(&t3100e_ems.mapping[pg], + page_to_addr(pg), 16384, + ems_read_ram, ems_read_ramw, ems_read_raml, + ems_write_ram, ems_write_ramw, ems_write_raml, + NULL, MEM_MAPPING_EXTERNAL, + &t3100e_ems); + /* Start them all off disabled */ + mem_mapping_disable(&t3100e_ems.mapping[pg]); + } + /* Mapping for upper RAM when in use as XMS*/ + mem_mapping_add(&t3100e_ems.upper_mapping, mem_size * 1024, 384 * 1024, + upper_read_ram, upper_read_ramw, upper_read_raml, + upper_write_ram, upper_write_ramw, upper_write_raml, + NULL, MEM_MAPPING_INTERNAL, &t3100e_ems); + mem_mapping_disable(&t3100e_ems.upper_mapping); - device_add(&t3100e_device); + device_add(&t3100e_device); - return ret; + return ret; } diff --git a/src/machine/m_at_t3100e_vid.c b/src/machine/m_at_t3100e_vid.c index 88aaabdec..84244f09e 100644 --- a/src/machine/m_at_t3100e_vid.c +++ b/src/machine/m_at_t3100e_vid.c @@ -67,17 +67,15 @@ #include <86box/vid_cga.h> #include <86box/m_at_t3100e.h> - #define T3100E_XSIZE 640 #define T3100E_YSIZE 400 /*Very rough estimate*/ -#define VID_CLOCK (double)(651 * 416 * 60) - +#define VID_CLOCK (double) (651 * 416 * 60) /* Mapping of attributes to colours */ static uint32_t amber, black; -static uint8_t boldcols[256]; /* Which attributes use the bold font */ +static uint8_t boldcols[256]; /* Which attributes use the bold font */ static uint32_t blinkcols[256][2]; static uint32_t normcols[256][2]; @@ -89,684 +87,621 @@ static uint32_t normcols[256][2]; * Bits 0,1: Font set (not currently implemented) */ static uint8_t st_video_options; -static int8_t st_display_internal = -1; +static int8_t st_display_internal = -1; -void t3100e_video_options_set(uint8_t options) +void +t3100e_video_options_set(uint8_t options) { - st_video_options = options; + st_video_options = options; } -void t3100e_display_set(uint8_t internal) +void +t3100e_display_set(uint8_t internal) { - st_display_internal = internal; + st_display_internal = internal; } -uint8_t t3100e_display_get() +uint8_t +t3100e_display_get() { - return st_display_internal; + return st_display_internal; } +typedef struct t3100e_t { + mem_mapping_t mapping; -typedef struct t3100e_t -{ - mem_mapping_t mapping; + cga_t cga; /* The CGA is used for the external + * display; most of its registers are + * ignored by the plasma display. */ - cga_t cga; /* The CGA is used for the external - * display; most of its registers are - * ignored by the plasma display. */ + int font; /* Current font, 0-3 */ + int enabled; /* Hardware enabled, 0 or 1 */ + int internal; /* Using internal display? */ + uint8_t attrmap; /* Attribute mapping register */ - int font; /* Current font, 0-3 */ - int enabled; /* Hardware enabled, 0 or 1 */ - int internal; /* Using internal display? */ - uint8_t attrmap; /* Attribute mapping register */ + uint64_t dispontime, dispofftime; - uint64_t dispontime, dispofftime; + int linepos, displine; + int vc; + int dispon; + int vsynctime; + uint8_t video_options; - int linepos, displine; - int vc; - int dispon; - int vsynctime; - uint8_t video_options; - - uint8_t *vram; + uint8_t *vram; } t3100e_t; -static video_timings_t timing_t3100e = {VIDEO_ISA, 8,16,32, 8,16,32}; +static video_timings_t timing_t3100e = { VIDEO_ISA, 8, 16, 32, 8, 16, 32 }; - -void t3100e_recalctimings(t3100e_t *t3100e); -void t3100e_write(uint32_t addr, uint8_t val, void *p); +void t3100e_recalctimings(t3100e_t *t3100e); +void t3100e_write(uint32_t addr, uint8_t val, void *p); uint8_t t3100e_read(uint32_t addr, void *p); -void t3100e_recalcattrs(t3100e_t *t3100e); +void t3100e_recalcattrs(t3100e_t *t3100e); - -void t3100e_out(uint16_t addr, uint8_t val, void *p) +void +t3100e_out(uint16_t addr, uint8_t val, void *p) { - t3100e_t *t3100e = (t3100e_t *)p; - switch (addr) - { - /* Emulated CRTC, register select */ - case 0x3d0: case 0x3d2: case 0x3d4: case 0x3d6: - cga_out(addr, val, &t3100e->cga); - break; + t3100e_t *t3100e = (t3100e_t *) p; + switch (addr) { + /* Emulated CRTC, register select */ + case 0x3d0: + case 0x3d2: + case 0x3d4: + case 0x3d6: + cga_out(addr, val, &t3100e->cga); + break; - /* Emulated CRTC, value */ - case 0x3d1: case 0x3d3: case 0x3d5: case 0x3d7: - /* Register 0x12 controls the attribute mappings for the - * plasma screen. */ - if (t3100e->cga.crtcreg == 0x12) - { - t3100e->attrmap = val; - t3100e_recalcattrs(t3100e); - return; - } - cga_out(addr, val, &t3100e->cga); + /* Emulated CRTC, value */ + case 0x3d1: + case 0x3d3: + case 0x3d5: + case 0x3d7: + /* Register 0x12 controls the attribute mappings for the + * plasma screen. */ + if (t3100e->cga.crtcreg == 0x12) { + t3100e->attrmap = val; + t3100e_recalcattrs(t3100e); + return; + } + cga_out(addr, val, &t3100e->cga); - t3100e_recalctimings(t3100e); - return; + t3100e_recalctimings(t3100e); + return; - /* CGA control register */ - case 0x3D8: - cga_out(addr, val, &t3100e->cga); - return; - /* CGA colour register */ - case 0x3D9: - cga_out(addr, val, &t3100e->cga); - return; - } + /* CGA control register */ + case 0x3D8: + cga_out(addr, val, &t3100e->cga); + return; + /* CGA colour register */ + case 0x3D9: + cga_out(addr, val, &t3100e->cga); + return; + } } -uint8_t t3100e_in(uint16_t addr, void *p) +uint8_t +t3100e_in(uint16_t addr, void *p) { - t3100e_t *t3100e = (t3100e_t *)p; - uint8_t val; + t3100e_t *t3100e = (t3100e_t *) p; + uint8_t val; - switch (addr) - { - case 0x3d1: case 0x3d3: case 0x3d5: case 0x3d7: - if (t3100e->cga.crtcreg == 0x12) - { - val = t3100e->attrmap & 0x0F; - if (t3100e->internal) val |= 0x30; /* Plasma / CRT */ - return val; - } - } + switch (addr) { + case 0x3d1: + case 0x3d3: + case 0x3d5: + case 0x3d7: + if (t3100e->cga.crtcreg == 0x12) { + val = t3100e->attrmap & 0x0F; + if (t3100e->internal) + val |= 0x30; /* Plasma / CRT */ + return val; + } + } - return cga_in(addr, &t3100e->cga); + return cga_in(addr, &t3100e->cga); } - - - -void t3100e_write(uint32_t addr, uint8_t val, void *p) +void +t3100e_write(uint32_t addr, uint8_t val, void *p) { - t3100e_t *t3100e = (t3100e_t *)p; + t3100e_t *t3100e = (t3100e_t *) p; - t3100e->vram[addr & 0x7fff] = val; - cycles -= 4; + t3100e->vram[addr & 0x7fff] = val; + cycles -= 4; } - - -uint8_t t3100e_read(uint32_t addr, void *p) +uint8_t +t3100e_read(uint32_t addr, void *p) { - t3100e_t *t3100e = (t3100e_t *)p; - cycles -= 4; + t3100e_t *t3100e = (t3100e_t *) p; + cycles -= 4; - return t3100e->vram[addr & 0x7fff]; + return t3100e->vram[addr & 0x7fff]; } - - -void t3100e_recalctimings(t3100e_t *t3100e) +void +t3100e_recalctimings(t3100e_t *t3100e) { - double disptime; - double _dispontime, _dispofftime; + double disptime; + double _dispontime, _dispofftime; - if (!t3100e->internal) - { - cga_recalctimings(&t3100e->cga); - return; - } - disptime = 651; - _dispontime = 640; - _dispofftime = disptime - _dispontime; - t3100e->dispontime = (uint64_t)(_dispontime * (cpuclock / VID_CLOCK) * (double)(1ull << 32)); - t3100e->dispofftime = (uint64_t)(_dispofftime * (cpuclock / VID_CLOCK) * (double)(1ull << 32)); + if (!t3100e->internal) { + cga_recalctimings(&t3100e->cga); + return; + } + disptime = 651; + _dispontime = 640; + _dispofftime = disptime - _dispontime; + t3100e->dispontime = (uint64_t) (_dispontime * (cpuclock / VID_CLOCK) * (double) (1ull << 32)); + t3100e->dispofftime = (uint64_t) (_dispofftime * (cpuclock / VID_CLOCK) * (double) (1ull << 32)); } - /* Draw a row of text in 80-column mode */ -void t3100e_text_row80(t3100e_t *t3100e) +void +t3100e_text_row80(t3100e_t *t3100e) { - uint32_t cols[2]; - int x, c; - uint8_t chr, attr; - int drawcursor; - int cursorline; - int bold; - int blink; - uint16_t addr; - uint8_t sc; - uint16_t ma = (t3100e->cga.crtc[13] | (t3100e->cga.crtc[12] << 8)) & 0x7fff; - uint16_t ca = (t3100e->cga.crtc[15] | (t3100e->cga.crtc[14] << 8)) & 0x7fff; + uint32_t cols[2]; + int x, c; + uint8_t chr, attr; + int drawcursor; + int cursorline; + int bold; + int blink; + uint16_t addr; + uint8_t sc; + uint16_t ma = (t3100e->cga.crtc[13] | (t3100e->cga.crtc[12] << 8)) & 0x7fff; + uint16_t ca = (t3100e->cga.crtc[15] | (t3100e->cga.crtc[14] << 8)) & 0x7fff; - sc = (t3100e->displine) & 15; - addr = ((ma & ~1) + (t3100e->displine >> 4) * 80) * 2; - ma += (t3100e->displine >> 4) * 80; + sc = (t3100e->displine) & 15; + addr = ((ma & ~1) + (t3100e->displine >> 4) * 80) * 2; + ma += (t3100e->displine >> 4) * 80; - if ((t3100e->cga.crtc[10] & 0x60) == 0x20) - { - cursorline = 0; - } - else - { - cursorline = ((t3100e->cga.crtc[10] & 0x0F)*2 <= sc) && - ((t3100e->cga.crtc[11] & 0x0F)*2 >= sc); - } - for (x = 0; x < 80; x++) + if ((t3100e->cga.crtc[10] & 0x60) == 0x20) { + cursorline = 0; + } else { + cursorline = ((t3100e->cga.crtc[10] & 0x0F) * 2 <= sc) && ((t3100e->cga.crtc[11] & 0x0F) * 2 >= sc); + } + for (x = 0; x < 80; x++) { + chr = t3100e->vram[(addr + 2 * x) & 0x7FFF]; + attr = t3100e->vram[(addr + 2 * x + 1) & 0x7FFF]; + drawcursor = ((ma == ca) && cursorline && (t3100e->cga.cgamode & 8) && (t3100e->cga.cgablink & 16)); + + blink = ((t3100e->cga.cgablink & 16) && (t3100e->cga.cgamode & 0x20) && (attr & 0x80) && !drawcursor); + + if (t3100e->video_options & 4) + bold = boldcols[attr] ? chr + 256 : chr; + else + bold = boldcols[attr] ? chr : chr + 256; + bold += 512 * (t3100e->video_options & 3); + + if (t3100e->cga.cgamode & 0x20) /* Blink */ { - chr = t3100e->vram[(addr + 2 * x) & 0x7FFF]; - attr = t3100e->vram[(addr + 2 * x + 1) & 0x7FFF]; - drawcursor = ((ma == ca) && cursorline && - (t3100e->cga.cgamode & 8) && (t3100e->cga.cgablink & 16)); - - blink = ((t3100e->cga.cgablink & 16) && (t3100e->cga.cgamode & 0x20) && - (attr & 0x80) && !drawcursor); - - if (t3100e->video_options & 4) - bold = boldcols[attr] ? chr + 256 : chr; - else - bold = boldcols[attr] ? chr : chr + 256; - bold += 512 * (t3100e->video_options & 3); - - if (t3100e->cga.cgamode & 0x20) /* Blink */ - { - cols[1] = blinkcols[attr][1]; - cols[0] = blinkcols[attr][0]; - if (blink) cols[1] = cols[0]; - } - else - { - cols[1] = normcols[attr][1]; - cols[0] = normcols[attr][0]; - } - if (drawcursor) - { - for (c = 0; c < 8; c++) - { - ((uint32_t *)buffer32->line[t3100e->displine])[(x << 3) + c] = cols[(fontdatm[bold][sc] & (1 << (c ^ 7))) ? 1 : 0] ^ (amber ^ black); - } - } - else - { - for (c = 0; c < 8; c++) - ((uint32_t *)buffer32->line[t3100e->displine])[(x << 3) + c] = cols[(fontdatm[bold][sc] & (1 << (c ^ 7))) ? 1 : 0]; - } - ++ma; - } + cols[1] = blinkcols[attr][1]; + cols[0] = blinkcols[attr][0]; + if (blink) + cols[1] = cols[0]; + } else { + cols[1] = normcols[attr][1]; + cols[0] = normcols[attr][0]; + } + if (drawcursor) { + for (c = 0; c < 8; c++) { + ((uint32_t *) buffer32->line[t3100e->displine])[(x << 3) + c] = cols[(fontdatm[bold][sc] & (1 << (c ^ 7))) ? 1 : 0] ^ (amber ^ black); + } + } else { + for (c = 0; c < 8; c++) + ((uint32_t *) buffer32->line[t3100e->displine])[(x << 3) + c] = cols[(fontdatm[bold][sc] & (1 << (c ^ 7))) ? 1 : 0]; + } + ++ma; + } } /* Draw a row of text in 40-column mode */ -void t3100e_text_row40(t3100e_t *t3100e) +void +t3100e_text_row40(t3100e_t *t3100e) { - uint32_t cols[2]; - int x, c; - uint8_t chr, attr; - int drawcursor; - int cursorline; - int bold; - int blink; - uint16_t addr; - uint8_t sc; - uint16_t ma = (t3100e->cga.crtc[13] | (t3100e->cga.crtc[12] << 8)) & 0x7fff; - uint16_t ca = (t3100e->cga.crtc[15] | (t3100e->cga.crtc[14] << 8)) & 0x7fff; + uint32_t cols[2]; + int x, c; + uint8_t chr, attr; + int drawcursor; + int cursorline; + int bold; + int blink; + uint16_t addr; + uint8_t sc; + uint16_t ma = (t3100e->cga.crtc[13] | (t3100e->cga.crtc[12] << 8)) & 0x7fff; + uint16_t ca = (t3100e->cga.crtc[15] | (t3100e->cga.crtc[14] << 8)) & 0x7fff; - sc = (t3100e->displine) & 15; - addr = ((ma & ~1) + (t3100e->displine >> 4) * 40) * 2; - ma += (t3100e->displine >> 4) * 40; + sc = (t3100e->displine) & 15; + addr = ((ma & ~1) + (t3100e->displine >> 4) * 40) * 2; + ma += (t3100e->displine >> 4) * 40; - if ((t3100e->cga.crtc[10] & 0x60) == 0x20) - { - cursorline = 0; - } - else - { - cursorline = ((t3100e->cga.crtc[10] & 0x0F)*2 <= sc) && - ((t3100e->cga.crtc[11] & 0x0F)*2 >= sc); - } - for (x = 0; x < 40; x++) + if ((t3100e->cga.crtc[10] & 0x60) == 0x20) { + cursorline = 0; + } else { + cursorline = ((t3100e->cga.crtc[10] & 0x0F) * 2 <= sc) && ((t3100e->cga.crtc[11] & 0x0F) * 2 >= sc); + } + for (x = 0; x < 40; x++) { + chr = t3100e->vram[(addr + 2 * x) & 0x7FFF]; + attr = t3100e->vram[(addr + 2 * x + 1) & 0x7FFF]; + drawcursor = ((ma == ca) && cursorline && (t3100e->cga.cgamode & 8) && (t3100e->cga.cgablink & 16)); + + blink = ((t3100e->cga.cgablink & 16) && (t3100e->cga.cgamode & 0x20) && (attr & 0x80) && !drawcursor); + + if (t3100e->video_options & 4) + bold = boldcols[attr] ? chr + 256 : chr; + else + bold = boldcols[attr] ? chr : chr + 256; + bold += 512 * (t3100e->video_options & 3); + + if (t3100e->cga.cgamode & 0x20) /* Blink */ { - chr = t3100e->vram[(addr + 2 * x) & 0x7FFF]; - attr = t3100e->vram[(addr + 2 * x + 1) & 0x7FFF]; - drawcursor = ((ma == ca) && cursorline && - (t3100e->cga.cgamode & 8) && (t3100e->cga.cgablink & 16)); - - blink = ((t3100e->cga.cgablink & 16) && (t3100e->cga.cgamode & 0x20) && - (attr & 0x80) && !drawcursor); - - if (t3100e->video_options & 4) - bold = boldcols[attr] ? chr + 256 : chr; - else bold = boldcols[attr] ? chr : chr + 256; - bold += 512 * (t3100e->video_options & 3); - - if (t3100e->cga.cgamode & 0x20) /* Blink */ - { - cols[1] = blinkcols[attr][1]; - cols[0] = blinkcols[attr][0]; - if (blink) cols[1] = cols[0]; - } - else - { - cols[1] = normcols[attr][1]; - cols[0] = normcols[attr][0]; - } - if (drawcursor) - { - for (c = 0; c < 8; c++) - { - ((uint32_t *)buffer32->line[t3100e->displine])[(x << 4) + c*2] = - ((uint32_t *)buffer32->line[t3100e->displine])[(x << 4) + c*2 + 1] = cols[(fontdatm[bold][sc] & (1 << (c ^ 7))) ? 1 : 0] ^ (amber ^ black); - } - } - else - { - for (c = 0; c < 8; c++) - { - ((uint32_t *)buffer32->line[t3100e->displine])[(x << 4) + c*2] = - ((uint32_t *)buffer32->line[t3100e->displine])[(x << 4) + c*2+1] = cols[(fontdatm[bold][sc] & (1 << (c ^ 7))) ? 1 : 0]; - } - } - ++ma; - } + cols[1] = blinkcols[attr][1]; + cols[0] = blinkcols[attr][0]; + if (blink) + cols[1] = cols[0]; + } else { + cols[1] = normcols[attr][1]; + cols[0] = normcols[attr][0]; + } + if (drawcursor) { + for (c = 0; c < 8; c++) { + ((uint32_t *) buffer32->line[t3100e->displine])[(x << 4) + c * 2] = ((uint32_t *) buffer32->line[t3100e->displine])[(x << 4) + c * 2 + 1] = cols[(fontdatm[bold][sc] & (1 << (c ^ 7))) ? 1 : 0] ^ (amber ^ black); + } + } else { + for (c = 0; c < 8; c++) { + ((uint32_t *) buffer32->line[t3100e->displine])[(x << 4) + c * 2] = ((uint32_t *) buffer32->line[t3100e->displine])[(x << 4) + c * 2 + 1] = cols[(fontdatm[bold][sc] & (1 << (c ^ 7))) ? 1 : 0]; + } + } + ++ma; + } } - - - /* Draw a line in CGA 640x200 or T3100e 640x400 mode */ -void t3100e_cgaline6(t3100e_t *t3100e) +void +t3100e_cgaline6(t3100e_t *t3100e) { - int x, c; - uint8_t dat; - uint32_t ink = 0; - uint16_t addr; - uint32_t fg = (t3100e->cga.cgacol & 0x0F) ? amber : black; - uint32_t bg = black; + int x, c; + uint8_t dat; + uint32_t ink = 0; + uint16_t addr; + uint32_t fg = (t3100e->cga.cgacol & 0x0F) ? amber : black; + uint32_t bg = black; - uint16_t ma = (t3100e->cga.crtc[13] | (t3100e->cga.crtc[12] << 8)) & 0x7fff; + uint16_t ma = (t3100e->cga.crtc[13] | (t3100e->cga.crtc[12] << 8)) & 0x7fff; - if (t3100e->cga.crtc[9] == 3) /* 640*400 */ - { - addr = ((t3100e->displine) & 1) * 0x2000 + - ((t3100e->displine >> 1) & 1) * 0x4000 + - (t3100e->displine >> 2) * 80 + - ((ma & ~1) << 1); - } - else - { - addr = ((t3100e->displine >> 1) & 1) * 0x2000 + - (t3100e->displine >> 2) * 80 + - ((ma & ~1) << 1); - } - for (x = 0; x < 80; x++) - { - dat = t3100e->vram[addr & 0x7FFF]; - addr++; + if (t3100e->cga.crtc[9] == 3) /* 640*400 */ + { + addr = ((t3100e->displine) & 1) * 0x2000 + ((t3100e->displine >> 1) & 1) * 0x4000 + (t3100e->displine >> 2) * 80 + ((ma & ~1) << 1); + } else { + addr = ((t3100e->displine >> 1) & 1) * 0x2000 + (t3100e->displine >> 2) * 80 + ((ma & ~1) << 1); + } + for (x = 0; x < 80; x++) { + dat = t3100e->vram[addr & 0x7FFF]; + addr++; - for (c = 0; c < 8; c++) - { - ink = (dat & 0x80) ? fg : bg; - if (!(t3100e->cga.cgamode & 8)) ink = black; - ((uint32_t *)buffer32->line[t3100e->displine])[x*8+c] = ink; - dat = dat << 1; - } - } + for (c = 0; c < 8; c++) { + ink = (dat & 0x80) ? fg : bg; + if (!(t3100e->cga.cgamode & 8)) + ink = black; + ((uint32_t *) buffer32->line[t3100e->displine])[x * 8 + c] = ink; + dat = dat << 1; + } + } } - /* Draw a line in CGA 320x200 mode. Here the CGA colours are converted to * dither patterns: colour 1 to 25% grey, colour 2 to 50% grey */ -void t3100e_cgaline4(t3100e_t *t3100e) +void +t3100e_cgaline4(t3100e_t *t3100e) { - int x, c; - uint8_t dat, pattern; - uint32_t ink0 = 0, ink1 = 0; - uint16_t addr; + int x, c; + uint8_t dat, pattern; + uint32_t ink0 = 0, ink1 = 0; + uint16_t addr; - uint16_t ma = (t3100e->cga.crtc[13] | (t3100e->cga.crtc[12] << 8)) & 0x7fff; - if (t3100e->cga.crtc[9] == 3) /* 320*400 undocumented */ - { - addr = ((t3100e->displine) & 1) * 0x2000 + - ((t3100e->displine >> 1) & 1) * 0x4000 + - (t3100e->displine >> 2) * 80 + - ((ma & ~1) << 1); - } - else /* 320*200 */ - { - addr = ((t3100e->displine >> 1) & 1) * 0x2000 + - (t3100e->displine >> 2) * 80 + - ((ma & ~1) << 1); - } - for (x = 0; x < 80; x++) - { - dat = t3100e->vram[addr & 0x7FFF]; - addr++; + uint16_t ma = (t3100e->cga.crtc[13] | (t3100e->cga.crtc[12] << 8)) & 0x7fff; + if (t3100e->cga.crtc[9] == 3) /* 320*400 undocumented */ + { + addr = ((t3100e->displine) & 1) * 0x2000 + ((t3100e->displine >> 1) & 1) * 0x4000 + (t3100e->displine >> 2) * 80 + ((ma & ~1) << 1); + } else /* 320*200 */ + { + addr = ((t3100e->displine >> 1) & 1) * 0x2000 + (t3100e->displine >> 2) * 80 + ((ma & ~1) << 1); + } + for (x = 0; x < 80; x++) { + dat = t3100e->vram[addr & 0x7FFF]; + addr++; - for (c = 0; c < 4; c++) - { - pattern = (dat & 0xC0) >> 6; - if (!(t3100e->cga.cgamode & 8)) pattern = 0; + for (c = 0; c < 4; c++) { + pattern = (dat & 0xC0) >> 6; + if (!(t3100e->cga.cgamode & 8)) + pattern = 0; - switch (pattern & 3) - { - case 0: ink0 = ink1 = black; break; - case 1: if (t3100e->displine & 1) - { - ink0 = black; ink1 = black; - } - else - { - ink0 = amber; ink1 = black; - } - break; - case 2: if (t3100e->displine & 1) - { - ink0 = black; ink1 = amber; - } - else - { - ink0 = amber; ink1 = black; - } - break; - case 3: ink0 = ink1 = amber; break; - - } - ((uint32_t *)buffer32->line[t3100e->displine])[x*8+2*c] = ink0; - ((uint32_t *)buffer32->line[t3100e->displine])[x*8+2*c+1] = ink1; - dat = dat << 2; - } - } + switch (pattern & 3) { + case 0: + ink0 = ink1 = black; + break; + case 1: + if (t3100e->displine & 1) { + ink0 = black; + ink1 = black; + } else { + ink0 = amber; + ink1 = black; + } + break; + case 2: + if (t3100e->displine & 1) { + ink0 = black; + ink1 = amber; + } else { + ink0 = amber; + ink1 = black; + } + break; + case 3: + ink0 = ink1 = amber; + break; + } + ((uint32_t *) buffer32->line[t3100e->displine])[x * 8 + 2 * c] = ink0; + ((uint32_t *) buffer32->line[t3100e->displine])[x * 8 + 2 * c + 1] = ink1; + dat = dat << 2; + } + } } - - - - - -void t3100e_poll(void *p) +void +t3100e_poll(void *p) { - t3100e_t *t3100e = (t3100e_t *)p; + t3100e_t *t3100e = (t3100e_t *) p; - if (t3100e->video_options != st_video_options) - { - t3100e->video_options = st_video_options; + if (t3100e->video_options != st_video_options) { + t3100e->video_options = st_video_options; - if (t3100e->video_options & 8) /* Disable internal CGA */ - mem_mapping_disable(&t3100e->mapping); - else mem_mapping_enable(&t3100e->mapping); - - /* Set the font used for the external display */ - t3100e->cga.fontbase = (512 * (t3100e->video_options & 3)) - + ((t3100e->video_options & 4) ? 256 : 0); - - } - /* Switch between internal plasma and external CRT display. */ - if (st_display_internal != -1 && st_display_internal != t3100e->internal) - { - t3100e->internal = st_display_internal; - t3100e_recalctimings(t3100e); - } - if (!t3100e->internal) - { - cga_poll(&t3100e->cga); - return; - } - - - if (!t3100e->linepos) - { - timer_advance_u64(&t3100e->cga.timer, t3100e->dispofftime); - t3100e->cga.cgastat |= 1; - t3100e->linepos = 1; - if (t3100e->dispon) - { - if (t3100e->displine == 0) - { - video_wait_for_buffer(); - } - - /* Graphics */ - if (t3100e->cga.cgamode & 0x02) - { - if (t3100e->cga.cgamode & 0x10) - t3100e_cgaline6(t3100e); - else t3100e_cgaline4(t3100e); - } - else - if (t3100e->cga.cgamode & 0x01) /* High-res text */ - { - t3100e_text_row80(t3100e); - } - else - { - t3100e_text_row40(t3100e); - } - } - t3100e->displine++; - /* Hardcode a fixed refresh rate and VSYNC timing */ - if (t3100e->displine == 400) /* Start of VSYNC */ - { - t3100e->cga.cgastat |= 8; - t3100e->dispon = 0; - } - if (t3100e->displine == 416) /* End of VSYNC */ - { - t3100e->displine = 0; - t3100e->cga.cgastat &= ~8; - t3100e->dispon = 1; - } - } + if (t3100e->video_options & 8) /* Disable internal CGA */ + mem_mapping_disable(&t3100e->mapping); else - { - if (t3100e->dispon) - { - t3100e->cga.cgastat &= ~1; - } - timer_advance_u64(&t3100e->cga.timer, t3100e->dispontime); - t3100e->linepos = 0; - - if (t3100e->displine == 400) - { -/* Hardcode 640x400 window size */ - if ((T3100E_XSIZE != xsize) || (T3100E_YSIZE != ysize) || video_force_resize_get()) - { - xsize = T3100E_XSIZE; - ysize = T3100E_YSIZE; - if (xsize < 64) xsize = 656; - if (ysize < 32) ysize = 200; - set_screen_size(xsize, ysize); - - if (video_force_resize_get()) - video_force_resize_set(0); - } - video_blit_memtoscreen(0, 0, xsize, ysize); - - frames++; - /* Fixed 640x400 resolution */ - video_res_x = T3100E_XSIZE; - video_res_y = T3100E_YSIZE; - - if (t3100e->cga.cgamode & 0x02) - { - if (t3100e->cga.cgamode & 0x10) - video_bpp = 1; - else video_bpp = 2; - - } - else video_bpp = 0; - t3100e->cga.cgablink++; - } - } -} - - - -void t3100e_recalcattrs(t3100e_t *t3100e) -{ - int n; - - /* val behaves as follows: - * Bit 0: Attributes 01-06, 08-0E are inverse video - * Bit 1: Attributes 01-06, 08-0E are bold - * Bit 2: Attributes 11-16, 18-1F, 21-26, 28-2F ... F1-F6, F8-FF - * are inverse video - * Bit 3: Attributes 11-16, 18-1F, 21-26, 28-2F ... F1-F6, F8-FF - * are bold */ - - /* Set up colours */ - amber = makecol(0xf7, 0x7C, 0x34); - black = makecol(0x17, 0x0C, 0x00); - - /* Initialise the attribute mapping. Start by defaulting everything - * to black on amber, and with bold set by bit 3 */ - for (n = 0; n < 256; n++) - { - boldcols[n] = (n & 8) != 0; - blinkcols[n][0] = normcols[n][0] = amber; - blinkcols[n][1] = normcols[n][1] = black; - } - - /* Colours 0x11-0xFF are controlled by bits 2 and 3 of the - * passed value. Exclude x0 and x8, which are always black on - * amber. */ - for (n = 0x11; n <= 0xFF; n++) - { - if ((n & 7) == 0) continue; - if (t3100e->attrmap & 4) /* Inverse */ - { - blinkcols[n][0] = normcols[n][0] = amber; - blinkcols[n][1] = normcols[n][1] = black; - } - else /* Normal */ - { - blinkcols[n][0] = normcols[n][0] = black; - blinkcols[n][1] = normcols[n][1] = amber; - } - if (t3100e->attrmap & 8) boldcols[n] = 1; /* Bold */ - } - /* Set up the 01-0E range, controlled by bits 0 and 1 of the - * passed value. When blinking is enabled this also affects 81-8E. */ - for (n = 0x01; n <= 0x0E; n++) - { - if (n == 7) continue; - if (t3100e->attrmap & 1) - { - blinkcols[n][0] = normcols[n][0] = amber; - blinkcols[n][1] = normcols[n][1] = black; - blinkcols[n+128][0] = amber; - blinkcols[n+128][1] = black; - } - else - { - blinkcols[n][0] = normcols[n][0] = black; - blinkcols[n][1] = normcols[n][1] = amber; - blinkcols[n+128][0] = black; - blinkcols[n+128][1] = amber; - } - if (t3100e->attrmap & 2) boldcols[n] = 1; - } - /* Colours 07 and 0F are always amber on black. If blinking is - * enabled so are 87 and 8F. */ - for (n = 0x07; n <= 0x0F; n += 8) - { - blinkcols[n][0] = normcols[n][0] = black; - blinkcols[n][1] = normcols[n][1] = amber; - blinkcols[n+128][0] = black; - blinkcols[n+128][1] = amber; - } - /* When not blinking, colours 81-8F are always amber on black. */ - for (n = 0x81; n <= 0x8F; n ++) - { - normcols[n][0] = black; - normcols[n][1] = amber; - boldcols[n] = (n & 0x08) != 0; - } - - - /* Finally do the ones which are solid black. These differ between - * the normal and blinking mappings */ - for (n = 0; n <= 0xFF; n += 0x11) - { - normcols[n][0] = normcols[n][1] = black; - } - /* In the blinking range, 00 11 22 .. 77 and 80 91 A2 .. F7 are black */ - for (n = 0; n <= 0x77; n += 0x11) - { - blinkcols[n][0] = blinkcols[n][1] = black; - blinkcols[n+128][0] = blinkcols[n+128][1] = black; - } -} - - -void *t3100e_init(const device_t *info) -{ - t3100e_t *t3100e = malloc(sizeof(t3100e_t)); - memset(t3100e, 0, sizeof(t3100e_t)); - loadfont("roms/machines/t3100e/t3100e_font.bin", 5); - cga_init(&t3100e->cga); - video_inform(VIDEO_FLAG_TYPE_CGA, &timing_t3100e); - - t3100e->internal = 1; - - /* 32k video RAM */ - t3100e->vram = malloc(0x8000); - - timer_set_callback(&t3100e->cga.timer, t3100e_poll); - timer_set_p(&t3100e->cga.timer, t3100e); - - /* Occupy memory between 0xB8000 and 0xBFFFF */ - mem_mapping_add(&t3100e->mapping, 0xb8000, 0x8000, t3100e_read, NULL, NULL, t3100e_write, NULL, NULL, NULL, 0, t3100e); - /* Respond to CGA I/O ports */ - io_sethandler(0x03d0, 0x000c, t3100e_in, NULL, NULL, t3100e_out, NULL, NULL, t3100e); - - /* Default attribute mapping is 4 */ - t3100e->attrmap = 4; - t3100e_recalcattrs(t3100e); - -/* Start off in 80x25 text mode */ - t3100e->cga.cgastat = 0xF4; - t3100e->cga.vram = t3100e->vram; - t3100e->enabled = 1; - t3100e->video_options = 0xFF; - return t3100e; -} - -void t3100e_close(void *p) -{ - t3100e_t *t3100e = (t3100e_t *)p; - - free(t3100e->vram); - free(t3100e); -} - -void t3100e_speed_changed(void *p) -{ - t3100e_t *t3100e = (t3100e_t *)p; + mem_mapping_enable(&t3100e->mapping); + /* Set the font used for the external display */ + t3100e->cga.fontbase = (512 * (t3100e->video_options & 3)) + + ((t3100e->video_options & 4) ? 256 : 0); + } + /* Switch between internal plasma and external CRT display. */ + if (st_display_internal != -1 && st_display_internal != t3100e->internal) { + t3100e->internal = st_display_internal; t3100e_recalctimings(t3100e); + } + if (!t3100e->internal) { + cga_poll(&t3100e->cga); + return; + } + + if (!t3100e->linepos) { + timer_advance_u64(&t3100e->cga.timer, t3100e->dispofftime); + t3100e->cga.cgastat |= 1; + t3100e->linepos = 1; + if (t3100e->dispon) { + if (t3100e->displine == 0) { + video_wait_for_buffer(); + } + + /* Graphics */ + if (t3100e->cga.cgamode & 0x02) { + if (t3100e->cga.cgamode & 0x10) + t3100e_cgaline6(t3100e); + else + t3100e_cgaline4(t3100e); + } else if (t3100e->cga.cgamode & 0x01) /* High-res text */ + { + t3100e_text_row80(t3100e); + } else { + t3100e_text_row40(t3100e); + } + } + t3100e->displine++; + /* Hardcode a fixed refresh rate and VSYNC timing */ + if (t3100e->displine == 400) /* Start of VSYNC */ + { + t3100e->cga.cgastat |= 8; + t3100e->dispon = 0; + } + if (t3100e->displine == 416) /* End of VSYNC */ + { + t3100e->displine = 0; + t3100e->cga.cgastat &= ~8; + t3100e->dispon = 1; + } + } else { + if (t3100e->dispon) { + t3100e->cga.cgastat &= ~1; + } + timer_advance_u64(&t3100e->cga.timer, t3100e->dispontime); + t3100e->linepos = 0; + + if (t3100e->displine == 400) { + /* Hardcode 640x400 window size */ + if ((T3100E_XSIZE != xsize) || (T3100E_YSIZE != ysize) || video_force_resize_get()) { + xsize = T3100E_XSIZE; + ysize = T3100E_YSIZE; + if (xsize < 64) + xsize = 656; + if (ysize < 32) + ysize = 200; + set_screen_size(xsize, ysize); + + if (video_force_resize_get()) + video_force_resize_set(0); + } + video_blit_memtoscreen(0, 0, xsize, ysize); + + frames++; + /* Fixed 640x400 resolution */ + video_res_x = T3100E_XSIZE; + video_res_y = T3100E_YSIZE; + + if (t3100e->cga.cgamode & 0x02) { + if (t3100e->cga.cgamode & 0x10) + video_bpp = 1; + else + video_bpp = 2; + + } else + video_bpp = 0; + t3100e->cga.cgablink++; + } + } +} + +void +t3100e_recalcattrs(t3100e_t *t3100e) +{ + int n; + + /* val behaves as follows: + * Bit 0: Attributes 01-06, 08-0E are inverse video + * Bit 1: Attributes 01-06, 08-0E are bold + * Bit 2: Attributes 11-16, 18-1F, 21-26, 28-2F ... F1-F6, F8-FF + * are inverse video + * Bit 3: Attributes 11-16, 18-1F, 21-26, 28-2F ... F1-F6, F8-FF + * are bold */ + + /* Set up colours */ + amber = makecol(0xf7, 0x7C, 0x34); + black = makecol(0x17, 0x0C, 0x00); + + /* Initialise the attribute mapping. Start by defaulting everything + * to black on amber, and with bold set by bit 3 */ + for (n = 0; n < 256; n++) { + boldcols[n] = (n & 8) != 0; + blinkcols[n][0] = normcols[n][0] = amber; + blinkcols[n][1] = normcols[n][1] = black; + } + + /* Colours 0x11-0xFF are controlled by bits 2 and 3 of the + * passed value. Exclude x0 and x8, which are always black on + * amber. */ + for (n = 0x11; n <= 0xFF; n++) { + if ((n & 7) == 0) + continue; + if (t3100e->attrmap & 4) /* Inverse */ + { + blinkcols[n][0] = normcols[n][0] = amber; + blinkcols[n][1] = normcols[n][1] = black; + } else /* Normal */ + { + blinkcols[n][0] = normcols[n][0] = black; + blinkcols[n][1] = normcols[n][1] = amber; + } + if (t3100e->attrmap & 8) + boldcols[n] = 1; /* Bold */ + } + /* Set up the 01-0E range, controlled by bits 0 and 1 of the + * passed value. When blinking is enabled this also affects 81-8E. */ + for (n = 0x01; n <= 0x0E; n++) { + if (n == 7) + continue; + if (t3100e->attrmap & 1) { + blinkcols[n][0] = normcols[n][0] = amber; + blinkcols[n][1] = normcols[n][1] = black; + blinkcols[n + 128][0] = amber; + blinkcols[n + 128][1] = black; + } else { + blinkcols[n][0] = normcols[n][0] = black; + blinkcols[n][1] = normcols[n][1] = amber; + blinkcols[n + 128][0] = black; + blinkcols[n + 128][1] = amber; + } + if (t3100e->attrmap & 2) + boldcols[n] = 1; + } + /* Colours 07 and 0F are always amber on black. If blinking is + * enabled so are 87 and 8F. */ + for (n = 0x07; n <= 0x0F; n += 8) { + blinkcols[n][0] = normcols[n][0] = black; + blinkcols[n][1] = normcols[n][1] = amber; + blinkcols[n + 128][0] = black; + blinkcols[n + 128][1] = amber; + } + /* When not blinking, colours 81-8F are always amber on black. */ + for (n = 0x81; n <= 0x8F; n++) { + normcols[n][0] = black; + normcols[n][1] = amber; + boldcols[n] = (n & 0x08) != 0; + } + + /* Finally do the ones which are solid black. These differ between + * the normal and blinking mappings */ + for (n = 0; n <= 0xFF; n += 0x11) { + normcols[n][0] = normcols[n][1] = black; + } + /* In the blinking range, 00 11 22 .. 77 and 80 91 A2 .. F7 are black */ + for (n = 0; n <= 0x77; n += 0x11) { + blinkcols[n][0] = blinkcols[n][1] = black; + blinkcols[n + 128][0] = blinkcols[n + 128][1] = black; + } +} + +void * +t3100e_init(const device_t *info) +{ + t3100e_t *t3100e = malloc(sizeof(t3100e_t)); + memset(t3100e, 0, sizeof(t3100e_t)); + loadfont("roms/machines/t3100e/t3100e_font.bin", 5); + cga_init(&t3100e->cga); + video_inform(VIDEO_FLAG_TYPE_CGA, &timing_t3100e); + + t3100e->internal = 1; + + /* 32k video RAM */ + t3100e->vram = malloc(0x8000); + + timer_set_callback(&t3100e->cga.timer, t3100e_poll); + timer_set_p(&t3100e->cga.timer, t3100e); + + /* Occupy memory between 0xB8000 and 0xBFFFF */ + mem_mapping_add(&t3100e->mapping, 0xb8000, 0x8000, t3100e_read, NULL, NULL, t3100e_write, NULL, NULL, NULL, 0, t3100e); + /* Respond to CGA I/O ports */ + io_sethandler(0x03d0, 0x000c, t3100e_in, NULL, NULL, t3100e_out, NULL, NULL, t3100e); + + /* Default attribute mapping is 4 */ + t3100e->attrmap = 4; + t3100e_recalcattrs(t3100e); + + /* Start off in 80x25 text mode */ + t3100e->cga.cgastat = 0xF4; + t3100e->cga.vram = t3100e->vram; + t3100e->enabled = 1; + t3100e->video_options = 0xFF; + return t3100e; +} + +void +t3100e_close(void *p) +{ + t3100e_t *t3100e = (t3100e_t *) p; + + free(t3100e->vram); + free(t3100e); +} + +void +t3100e_speed_changed(void *p) +{ + t3100e_t *t3100e = (t3100e_t *) p; + + t3100e_recalctimings(t3100e); } const device_t t3100e_device = { - .name = "Toshiba T3100e", + .name = "Toshiba T3100e", .internal_name = "t3100e", - .flags = 0, - .local = 0, - .init = t3100e_init, - .close = t3100e_close, - .reset = NULL, + .flags = 0, + .local = 0, + .init = t3100e_init, + .close = t3100e_close, + .reset = NULL, { .available = NULL }, .speed_changed = t3100e_speed_changed, - .force_redraw = NULL, - .config = NULL + .force_redraw = NULL, + .config = NULL }; diff --git a/src/machine/m_europc.c b/src/machine/m_europc.c index 905515225..2fdbc852f 100644 --- a/src/machine/m_europc.c +++ b/src/machine/m_europc.c @@ -105,65 +105,58 @@ #include <86box/video.h> #include <86box/machine.h> - -#define EUROPC_DEBUG 0 /* current debugging level */ - +#define EUROPC_DEBUG 0 /* current debugging level */ /* M3002 RTC chip registers. */ -#define MRTC_SECONDS 0x00 /* BCD, 00-59 */ -#define MRTC_MINUTES 0x01 /* BCD, 00-59 */ -#define MRTC_HOURS 0x02 /* BCD, 00-23 */ -#define MRTC_DAYS 0x03 /* BCD, 01-31 */ -#define MRTC_MONTHS 0x04 /* BCD, 01-12 */ -#define MRTC_YEARS 0x05 /* BCD, 00-99 (year only) */ -#define MRTC_WEEKDAY 0x06 /* BCD, 01-07 */ -#define MRTC_WEEKNO 0x07 /* BCD, 01-52 */ -#define MRTC_CONF_A 0x08 /* EuroPC config, binary */ -#define MRTC_CONF_B 0x09 /* EuroPC config, binary */ -#define MRTC_CONF_C 0x0a /* EuroPC config, binary */ -#define MRTC_CONF_D 0x0b /* EuroPC config, binary */ -#define MRTC_CONF_E 0x0c /* EuroPC config, binary */ -#define MRTC_CHECK_LO 0x0d /* Checksum, low byte */ -#define MRTC_CHECK_HI 0x0e /* Checksum, high byte */ -#define MRTC_CTRLSTAT 0x0f /* RTC control/status, binary */ +#define MRTC_SECONDS 0x00 /* BCD, 00-59 */ +#define MRTC_MINUTES 0x01 /* BCD, 00-59 */ +#define MRTC_HOURS 0x02 /* BCD, 00-23 */ +#define MRTC_DAYS 0x03 /* BCD, 01-31 */ +#define MRTC_MONTHS 0x04 /* BCD, 01-12 */ +#define MRTC_YEARS 0x05 /* BCD, 00-99 (year only) */ +#define MRTC_WEEKDAY 0x06 /* BCD, 01-07 */ +#define MRTC_WEEKNO 0x07 /* BCD, 01-52 */ +#define MRTC_CONF_A 0x08 /* EuroPC config, binary */ +#define MRTC_CONF_B 0x09 /* EuroPC config, binary */ +#define MRTC_CONF_C 0x0a /* EuroPC config, binary */ +#define MRTC_CONF_D 0x0b /* EuroPC config, binary */ +#define MRTC_CONF_E 0x0c /* EuroPC config, binary */ +#define MRTC_CHECK_LO 0x0d /* Checksum, low byte */ +#define MRTC_CHECK_HI 0x0e /* Checksum, high byte */ +#define MRTC_CTRLSTAT 0x0f /* RTC control/status, binary */ typedef struct { - uint16_t jim; /* JIM base address */ + uint16_t jim; /* JIM base address */ - uint8_t regs[16]; /* JIM internal regs (8) */ + uint8_t regs[16]; /* JIM internal regs (8) */ - nvr_t nvr; /* NVR */ - uint8_t nvr_stat; - uint8_t nvr_addr; + nvr_t nvr; /* NVR */ + uint8_t nvr_stat; + uint8_t nvr_addr; - void * mouse; + void *mouse; } europc_t; - static europc_t europc; - #ifdef ENABLE_EUROPC_LOG int europc_do_log = ENABLE_EUROPC_LOG; - static void europc_log(const char *fmt, ...) { - va_list ap; + va_list ap; - if (europc_do_log) - { - va_start(ap, fmt); - pclog_ex(fmt, ap); - va_end(ap); - } + if (europc_do_log) { + va_start(ap, fmt); + pclog_ex(fmt, ap); + va_end(ap); + } } #else -#define europc_log(fmt, ...) +# define europc_log(fmt, ...) #endif - /* * This is called every second through the NVR/RTC hook. * @@ -180,56 +173,55 @@ static void europc_rtc_tick(nvr_t *nvr) { uint8_t *regs; - int mon, yr; + int mon, yr; /* Only if RTC is running.. */ regs = nvr->regs; - if (! (regs[MRTC_CTRLSTAT] & 0x01)) return; + if (!(regs[MRTC_CTRLSTAT] & 0x01)) + return; regs[MRTC_SECONDS] = RTC_BCDINC(nvr->regs[MRTC_SECONDS], 1); if (regs[MRTC_SECONDS] >= RTC_BCD(60)) { - regs[MRTC_SECONDS] = RTC_BCD(0); - regs[MRTC_MINUTES] = RTC_BCDINC(regs[MRTC_MINUTES], 1); - if (regs[MRTC_MINUTES] >= RTC_BCD(60)) { - regs[MRTC_MINUTES] = RTC_BCD(0); - regs[MRTC_HOURS] = RTC_BCDINC(regs[MRTC_HOURS], 1); - if (regs[MRTC_HOURS] >= RTC_BCD(24)) { - regs[MRTC_HOURS] = RTC_BCD(0); - regs[MRTC_DAYS] = RTC_BCDINC(regs[MRTC_DAYS], 1); - mon = RTC_DCB(regs[MRTC_MONTHS]); - yr = RTC_DCB(regs[MRTC_YEARS]) + 1900; - if (RTC_DCB(regs[MRTC_DAYS]) > nvr_get_days(mon, yr)) { - regs[MRTC_DAYS] = RTC_BCD(1); - regs[MRTC_MONTHS] = RTC_BCDINC(regs[MRTC_MONTHS], 1); - if (regs[MRTC_MONTHS] > RTC_BCD(12)) { - regs[MRTC_MONTHS] = RTC_BCD(1); - regs[MRTC_YEARS] = RTC_BCDINC(regs[MRTC_YEARS], 1) & 0xff; - } - } - } - } + regs[MRTC_SECONDS] = RTC_BCD(0); + regs[MRTC_MINUTES] = RTC_BCDINC(regs[MRTC_MINUTES], 1); + if (regs[MRTC_MINUTES] >= RTC_BCD(60)) { + regs[MRTC_MINUTES] = RTC_BCD(0); + regs[MRTC_HOURS] = RTC_BCDINC(regs[MRTC_HOURS], 1); + if (regs[MRTC_HOURS] >= RTC_BCD(24)) { + regs[MRTC_HOURS] = RTC_BCD(0); + regs[MRTC_DAYS] = RTC_BCDINC(regs[MRTC_DAYS], 1); + mon = RTC_DCB(regs[MRTC_MONTHS]); + yr = RTC_DCB(regs[MRTC_YEARS]) + 1900; + if (RTC_DCB(regs[MRTC_DAYS]) > nvr_get_days(mon, yr)) { + regs[MRTC_DAYS] = RTC_BCD(1); + regs[MRTC_MONTHS] = RTC_BCDINC(regs[MRTC_MONTHS], 1); + if (regs[MRTC_MONTHS] > RTC_BCD(12)) { + regs[MRTC_MONTHS] = RTC_BCD(1); + regs[MRTC_YEARS] = RTC_BCDINC(regs[MRTC_YEARS], 1) & 0xff; + } + } + } + } } } - /* Get the current NVR time. */ static void rtc_time_get(uint8_t *regs, struct tm *tm) { /* NVR is in BCD data mode. */ - tm->tm_sec = RTC_DCB(regs[MRTC_SECONDS]); - tm->tm_min = RTC_DCB(regs[MRTC_MINUTES]); + tm->tm_sec = RTC_DCB(regs[MRTC_SECONDS]); + tm->tm_min = RTC_DCB(regs[MRTC_MINUTES]); tm->tm_hour = RTC_DCB(regs[MRTC_HOURS]); tm->tm_wday = (RTC_DCB(regs[MRTC_WEEKDAY]) - 1); tm->tm_mday = RTC_DCB(regs[MRTC_DAYS]); - tm->tm_mon = (RTC_DCB(regs[MRTC_MONTHS]) - 1); + tm->tm_mon = (RTC_DCB(regs[MRTC_MONTHS]) - 1); tm->tm_year = RTC_DCB(regs[MRTC_YEARS]); #if USE_Y2K tm->tm_year += (RTC_DCB(regs[MRTC_CENTURY]) * 100) - 1900; #endif } - /* Set the current NVR time. */ static void rtc_time_set(uint8_t *regs, struct tm *tm) @@ -237,17 +229,16 @@ rtc_time_set(uint8_t *regs, struct tm *tm) /* NVR is in BCD data mode. */ regs[MRTC_SECONDS] = RTC_BCD(tm->tm_sec); regs[MRTC_MINUTES] = RTC_BCD(tm->tm_min); - regs[MRTC_HOURS] = RTC_BCD(tm->tm_hour); + regs[MRTC_HOURS] = RTC_BCD(tm->tm_hour); regs[MRTC_WEEKDAY] = RTC_BCD(tm->tm_wday + 1); - regs[MRTC_DAYS] = RTC_BCD(tm->tm_mday); - regs[MRTC_MONTHS] = RTC_BCD(tm->tm_mon + 1); - regs[MRTC_YEARS] = RTC_BCD(tm->tm_year % 100); + regs[MRTC_DAYS] = RTC_BCD(tm->tm_mday); + regs[MRTC_MONTHS] = RTC_BCD(tm->tm_mon + 1); + regs[MRTC_YEARS] = RTC_BCD(tm->tm_year % 100); #if USE_Y2K - regs[MRTC_CENTURY] = RTC_BCD((tm->tm_year+1900) / 100); + regs[MRTC_CENTURY] = RTC_BCD((tm->tm_year + 1900) / 100); #endif } - static void rtc_start(nvr_t *nvr) { @@ -255,13 +246,13 @@ rtc_start(nvr_t *nvr) /* Initialize the internal and chip times. */ if (time_sync & TIME_SYNC_ENABLED) { - /* Use the internal clock's time. */ - nvr_time_get(&tm); - rtc_time_set(nvr->regs, &tm); + /* Use the internal clock's time. */ + nvr_time_get(&tm); + rtc_time_set(nvr->regs, &tm); } else { - /* Set the internal clock from the chip time. */ - rtc_time_get(nvr->regs, &tm); - nvr_time_set(&tm); + /* Set the internal clock from the chip time. */ + rtc_time_get(nvr->regs, &tm); + nvr_time_set(&tm); } #if 0 @@ -270,36 +261,34 @@ rtc_start(nvr_t *nvr) #endif } - /* Create a valid checksum for the current NVR data. */ static uint8_t rtc_checksum(uint8_t *ptr) { uint8_t sum; - int i; + int i; /* Calculate all bytes with XOR. */ sum = 0x00; - for (i=MRTC_CONF_A; i<=MRTC_CONF_E; i++) - sum += ptr[i]; + for (i = MRTC_CONF_A; i <= MRTC_CONF_E; i++) + sum += ptr[i]; - return(sum); + return (sum); } - /* Reset the machine's NVR to a sane state. */ static void rtc_reset(nvr_t *nvr) { /* Initialize the RTC to a known state. */ - nvr->regs[MRTC_SECONDS] = RTC_BCD(0); /* seconds */ - nvr->regs[MRTC_MINUTES] = RTC_BCD(0); /* minutes */ - nvr->regs[MRTC_HOURS] = RTC_BCD(0); /* hours */ - nvr->regs[MRTC_DAYS] = RTC_BCD(1); /* days */ - nvr->regs[MRTC_MONTHS] = RTC_BCD(1); /* months */ - nvr->regs[MRTC_YEARS] = RTC_BCD(80); /* years */ - nvr->regs[MRTC_WEEKDAY] = RTC_BCD(1); /* weekday */ - nvr->regs[MRTC_WEEKNO] = RTC_BCD(1); /* weekno */ + nvr->regs[MRTC_SECONDS] = RTC_BCD(0); /* seconds */ + nvr->regs[MRTC_MINUTES] = RTC_BCD(0); /* minutes */ + nvr->regs[MRTC_HOURS] = RTC_BCD(0); /* hours */ + nvr->regs[MRTC_DAYS] = RTC_BCD(1); /* days */ + nvr->regs[MRTC_MONTHS] = RTC_BCD(1); /* months */ + nvr->regs[MRTC_YEARS] = RTC_BCD(80); /* years */ + nvr->regs[MRTC_WEEKDAY] = RTC_BCD(1); /* weekday */ + nvr->regs[MRTC_WEEKNO] = RTC_BCD(1); /* weekno */ /* * EuroPC System Configuration: @@ -349,214 +338,210 @@ rtc_reset(nvr_t *nvr) * [E] 7:4 unknown * 3:0 country (00=Deutschland, 0A=ASCII) */ - nvr->regs[MRTC_CONF_A] = 0x00; /* CONFIG A */ - nvr->regs[MRTC_CONF_B] = 0x0A; /* CONFIG B */ - nvr->regs[MRTC_CONF_C] = 0x28; /* CONFIG C */ - nvr->regs[MRTC_CONF_D] = 0x12; /* CONFIG D */ - nvr->regs[MRTC_CONF_E] = 0x0A; /* CONFIG E */ + nvr->regs[MRTC_CONF_A] = 0x00; /* CONFIG A */ + nvr->regs[MRTC_CONF_B] = 0x0A; /* CONFIG B */ + nvr->regs[MRTC_CONF_C] = 0x28; /* CONFIG C */ + nvr->regs[MRTC_CONF_D] = 0x12; /* CONFIG D */ + nvr->regs[MRTC_CONF_E] = 0x0A; /* CONFIG E */ - nvr->regs[MRTC_CHECK_LO] = 0x00; /* checksum (LO) */ - nvr->regs[MRTC_CHECK_HI] = 0x00; /* checksum (HI) */ + nvr->regs[MRTC_CHECK_LO] = 0x00; /* checksum (LO) */ + nvr->regs[MRTC_CHECK_HI] = 0x00; /* checksum (HI) */ - nvr->regs[MRTC_CTRLSTAT] = 0x01; /* status/control */ + nvr->regs[MRTC_CTRLSTAT] = 0x01; /* status/control */ /* Generate a valid checksum. */ nvr->regs[MRTC_CHECK_LO] = rtc_checksum(nvr->regs); } - /* Execute a JIM control command. */ static void jim_set(europc_t *sys, uint8_t reg, uint8_t val) { - switch(reg) { - case 0: /* MISC control (WO) */ - // bit0: enable MOUSE - // bit1: enable joystick - break; + switch (reg) { + case 0: /* MISC control (WO) */ + // bit0: enable MOUSE + // bit1: enable joystick + break; - case 2: /* AGA control */ - if (! (val & 0x80)) { - /* Reset AGA. */ - break; - } + case 2: /* AGA control */ + if (!(val & 0x80)) { + /* Reset AGA. */ + break; + } - switch (val) { - case 0x1f: /* 0001 1111 */ - case 0x0b: /* 0000 1011 */ - //europc_jim.mode=AGA_MONO; - europc_log("EuroPC: AGA Monochrome mode!\n"); - break; + switch (val) { + case 0x1f: /* 0001 1111 */ + case 0x0b: /* 0000 1011 */ + // europc_jim.mode=AGA_MONO; + europc_log("EuroPC: AGA Monochrome mode!\n"); + break; - case 0x18: /* 0001 1000 */ - case 0x1a: /* 0001 1010 */ - //europc_jim.mode=AGA_COLOR; - break; + case 0x18: /* 0001 1000 */ + case 0x1a: /* 0001 1010 */ + // europc_jim.mode=AGA_COLOR; + break; - case 0x0e: /* 0000 1100 */ - /*80 columns? */ - europc_log("EuroPC: AGA 80-column mode!\n"); - break; + case 0x0e: /* 0000 1100 */ + /*80 columns? */ + europc_log("EuroPC: AGA 80-column mode!\n"); + break; - case 0x0d: /* 0000 1011 */ - /*40 columns? */ - europc_log("EuroPC: AGA 40-column mode!\n"); - break; + case 0x0d: /* 0000 1011 */ + /*40 columns? */ + europc_log("EuroPC: AGA 40-column mode!\n"); + break; - default: - //europc_jim.mode=AGA_OFF; - break; - } - break; + default: + // europc_jim.mode=AGA_OFF; + break; + } + break; - case 4: /* CPU Speed control */ - switch(val & 0xc0) { - case 0x00: /* 4.77 MHz */ -// cpu_set_clockscale(0, 1.0/2); - break; + case 4: /* CPU Speed control */ + switch (val & 0xc0) { + case 0x00: /* 4.77 MHz */ + // cpu_set_clockscale(0, 1.0/2); + break; - case 0x40: /* 7.16 MHz */ -// cpu_set_clockscale(0, 3.0/4); - break; + case 0x40: /* 7.16 MHz */ + // cpu_set_clockscale(0, 3.0/4); + break; - default: /* 9.54 MHz */ -// cpu_set_clockscale(0, 1);break; - break; - } - break; + default: /* 9.54 MHz */ + // cpu_set_clockscale(0, 1);break; + break; + } + break; - default: - break; + default: + break; } sys->regs[reg] = val; } - /* Write to one of the JIM registers. */ static void jim_write(uint16_t addr, uint8_t val, void *priv) { - europc_t *sys = (europc_t *)priv; - uint8_t b; + europc_t *sys = (europc_t *) priv; + uint8_t b; #if EUROPC_DEBUG > 1 europc_log("EuroPC: jim_wr(%04x, %02x)\n", addr, val); #endif switch (addr & 0x000f) { - case 0x00: /* JIM internal registers (WRONLY) */ - case 0x01: - case 0x02: - case 0x03: - case 0x04: /* JIM internal registers (R/W) */ - case 0x05: - case 0x06: - case 0x07: - jim_set(sys, (addr & 0x07), val); - break; + case 0x00: /* JIM internal registers (WRONLY) */ + case 0x01: + case 0x02: + case 0x03: + case 0x04: /* JIM internal registers (R/W) */ + case 0x05: + case 0x06: + case 0x07: + jim_set(sys, (addr & 0x07), val); + break; - case 0x0a: /* M3002 RTC INDEX/DATA register */ - switch(sys->nvr_stat) { - case 0: /* save index */ - sys->nvr_addr = val & 0x0f; - sys->nvr_stat++; - break; + case 0x0a: /* M3002 RTC INDEX/DATA register */ + switch (sys->nvr_stat) { + case 0: /* save index */ + sys->nvr_addr = val & 0x0f; + sys->nvr_stat++; + break; - case 1: /* save data HI nibble */ - b = sys->nvr.regs[sys->nvr_addr] & 0x0f; - b |= (val << 4); - sys->nvr.regs[sys->nvr_addr] = b; - sys->nvr_stat++; - nvr_dosave++; - break; + case 1: /* save data HI nibble */ + b = sys->nvr.regs[sys->nvr_addr] & 0x0f; + b |= (val << 4); + sys->nvr.regs[sys->nvr_addr] = b; + sys->nvr_stat++; + nvr_dosave++; + break; - case 2: /* save data LO nibble */ - b = sys->nvr.regs[sys->nvr_addr] & 0xf0; - b |= (val & 0x0f); - sys->nvr.regs[sys->nvr_addr] = b; - sys->nvr_stat = 0; - nvr_dosave++; - break; - } - break; + case 2: /* save data LO nibble */ + b = sys->nvr.regs[sys->nvr_addr] & 0xf0; + b |= (val & 0x0f); + sys->nvr.regs[sys->nvr_addr] = b; + sys->nvr_stat = 0; + nvr_dosave++; + break; + } + break; - default: - europc_log("EuroPC: invalid JIM write %02x, val %02x\n", addr, val); - break; + default: + europc_log("EuroPC: invalid JIM write %02x, val %02x\n", addr, val); + break; } } - /* Read from one of the JIM registers. */ static uint8_t jim_read(uint16_t addr, void *priv) { - europc_t *sys = (europc_t *)priv; - uint8_t r = 0xff; + europc_t *sys = (europc_t *) priv; + uint8_t r = 0xff; switch (addr & 0x000f) { - case 0x00: /* JIM internal registers (WRONLY) */ - case 0x01: - case 0x02: - case 0x03: - r = 0x00; - break; + case 0x00: /* JIM internal registers (WRONLY) */ + case 0x01: + case 0x02: + case 0x03: + r = 0x00; + break; - case 0x04: /* JIM internal registers (R/W) */ - case 0x05: - case 0x06: - case 0x07: - r = sys->regs[addr & 0x07]; - break; + case 0x04: /* JIM internal registers (R/W) */ + case 0x05: + case 0x06: + case 0x07: + r = sys->regs[addr & 0x07]; + break; - case 0x0a: /* M3002 RTC INDEX/DATA register */ - switch(sys->nvr_stat) { - case 0: - r = 0x00; - break; + case 0x0a: /* M3002 RTC INDEX/DATA register */ + switch (sys->nvr_stat) { + case 0: + r = 0x00; + break; - case 1: /* read data HI nibble */ - r = (sys->nvr.regs[sys->nvr_addr] >> 4); - sys->nvr_stat++; - break; + case 1: /* read data HI nibble */ + r = (sys->nvr.regs[sys->nvr_addr] >> 4); + sys->nvr_stat++; + break; - case 2: /* read data LO nibble */ - r = (sys->nvr.regs[sys->nvr_addr] & 0x0f); - sys->nvr_stat = 0; - break; - } - break; + case 2: /* read data LO nibble */ + r = (sys->nvr.regs[sys->nvr_addr] & 0x0f); + sys->nvr_stat = 0; + break; + } + break; - default: - europc_log("EuroPC: invalid JIM read %02x\n", addr); - break; + default: + europc_log("EuroPC: invalid JIM read %02x\n", addr); + break; } #if EUROPC_DEBUG > 1 europc_log("EuroPC: jim_rd(%04x): %02x\n", addr, r); #endif - return(r); + return (r); } - /* Initialize the mainboard 'device' of the machine. */ static void * europc_boot(const device_t *info) { europc_t *sys = &europc; - uint8_t b; + uint8_t b; #if EUROPC_DEBUG europc_log("EuroPC: booting mainboard..\n"); #endif europc_log("EuroPC: NVR=[ %02x %02x %02x %02x %02x ] %sVALID\n", - sys->nvr.regs[MRTC_CONF_A], sys->nvr.regs[MRTC_CONF_B], - sys->nvr.regs[MRTC_CONF_C], sys->nvr.regs[MRTC_CONF_D], - sys->nvr.regs[MRTC_CONF_E], - (sys->nvr.regs[MRTC_CHECK_LO]!=rtc_checksum(sys->nvr.regs))?"IN":""); + sys->nvr.regs[MRTC_CONF_A], sys->nvr.regs[MRTC_CONF_B], + sys->nvr.regs[MRTC_CONF_C], sys->nvr.regs[MRTC_CONF_D], + sys->nvr.regs[MRTC_CONF_E], + (sys->nvr.regs[MRTC_CHECK_LO] != rtc_checksum(sys->nvr.regs)) ? "IN" : ""); /* * Now that we have initialized the NVR (either from file, @@ -566,57 +551,57 @@ europc_boot(const device_t *info) b = (sys->nvr.regs[MRTC_CONF_D] & ~0x17); video_reset(gfxcard); if (video_is_cga()) - b |= 0x12; /* external video, CGA80 */ + b |= 0x12; /* external video, CGA80 */ else if (video_is_mda()) - b |= 0x03; /* external video, mono */ + b |= 0x03; /* external video, mono */ else - b |= 0x10; /* external video, special */ + b |= 0x10; /* external video, special */ sys->nvr.regs[MRTC_CONF_D] = b; /* Update the memory size. */ b = (sys->nvr.regs[MRTC_CONF_C] & 0xf3); - switch(mem_size) { - case 256: - b |= 0x04; - break; + switch (mem_size) { + case 256: + b |= 0x04; + break; - case 512: - b |= 0x08; - break; + case 512: + b |= 0x08; + break; - case 640: - b |= 0x00; - break; + case 640: + b |= 0x00; + break; } sys->nvr.regs[MRTC_CONF_C] = b; /* Update CPU speed. */ b = (sys->nvr.regs[MRTC_CONF_D] & 0x3f); - switch(cpu) { - case 0: /* 8088, 4.77 MHz */ - b |= 0x00; - break; + switch (cpu) { + case 0: /* 8088, 4.77 MHz */ + b |= 0x00; + break; - case 1: /* 8088, 7.15 MHz */ - b |= 0x40; - break; + case 1: /* 8088, 7.15 MHz */ + b |= 0x40; + break; - case 2: /* 8088, 9.56 MHz */ - b |= 0x80; - break; + case 2: /* 8088, 9.56 MHz */ + b |= 0x80; + break; } sys->nvr.regs[MRTC_CONF_D] = b; /* Set up game port. */ b = (sys->nvr.regs[MRTC_CONF_C] & 0xfc); if (mouse_type == MOUSE_TYPE_INTERNAL) { - sys->mouse = device_add(&mouse_logibus_onboard_device); - mouse_bus_set_irq(sys->mouse, 2); - /* Configure the port for (Bus Mouse Compatible) Mouse. */ - b |= 0x01; + sys->mouse = device_add(&mouse_logibus_onboard_device); + mouse_bus_set_irq(sys->mouse, 2); + /* Configure the port for (Bus Mouse Compatible) Mouse. */ + b |= 0x01; } else if (joystick_type) - b |= 0x02; /* enable port as joysticks */ + b |= 0x02; /* enable port as joysticks */ sys->nvr.regs[MRTC_CONF_C] = b; #if 0 @@ -637,36 +622,36 @@ europc_boot(const device_t *info) * the way of other cards that need this range. */ io_sethandler(sys->jim, 16, - jim_read,NULL,NULL, jim_write,NULL,NULL, sys); + jim_read, NULL, NULL, jim_write, NULL, NULL, sys); /* Only after JIM has been initialized. */ - (void)device_add(&keyboard_xt_device); + (void) device_add(&keyboard_xt_device); /* Enable and set up the FDC. */ - (void)device_add(&fdc_xt_device); + (void) device_add(&fdc_xt_device); - /* + /* * Set up and enable the HD20 disk controller. * * We only do this if we have not configured another one. */ if (hdc_current == 1) - (void)device_add(&xta_hd20_device); + (void) device_add(&xta_hd20_device); - return(sys); + return (sys); } - static void europc_close(void *priv) { nvr_t *nvr = &europc.nvr; if (nvr->fn != NULL) - free(nvr->fn); + free(nvr->fn); } static const device_config_t europc_config[] = { + // clang-format off { .name = "js9", .description = "JS9 Jumper (JIM)", @@ -682,20 +667,21 @@ static const device_config_t europc_config[] = { }, }, { .name = "", .description = "", .type = CONFIG_END } + // clang-format on }; const device_t europc_device = { - .name = "EuroPC System Board", + .name = "EuroPC System Board", .internal_name = "europc", - .flags = 0, - .local = 0, - .init = europc_boot, - .close = europc_close, - .reset = NULL, + .flags = 0, + .local = 0, + .init = europc_boot, + .close = europc_close, + .reset = NULL, { .available = NULL }, .speed_changed = NULL, - .force_redraw = NULL, - .config = europc_config + .force_redraw = NULL, + .config = europc_config }; /* @@ -712,10 +698,10 @@ machine_europc_init(const machine_t *model) int ret; ret = bios_load_linear("roms/machines/europc/50145", - 0x000f8000, 32768, 0); + 0x000f8000, 32768, 0); if (bios_only || !ret) - return ret; + return ret; machine_common_init(model); pit_devs[0].set_out_func(pit_devs[0].data, 1, pit_refresh_timer_xt); @@ -728,12 +714,12 @@ machine_europc_init(const machine_t *model) /* This is machine specific. */ europc.nvr.size = model->nvrmask + 1; - europc.nvr.irq = -1; + europc.nvr.irq = -1; /* Set up any local handlers here. */ europc.nvr.reset = rtc_reset; europc.nvr.start = rtc_start; - europc.nvr.tick = europc_rtc_tick; + europc.nvr.tick = europc_rtc_tick; /* Initialize the actual NVR. */ nvr_init(&europc.nvr); diff --git a/src/machine/m_pcjr.c b/src/machine/m_pcjr.c index 2665ea164..0ea34ea19 100644 --- a/src/machine/m_pcjr.c +++ b/src/machine/m_pcjr.c @@ -49,58 +49,55 @@ #include <86box/vid_cga_comp.h> #include <86box/machine.h> +#define PCJR_RGB 0 +#define PCJR_COMPOSITE 1 -#define PCJR_RGB 0 -#define PCJR_COMPOSITE 1 - -#define STAT_PARITY 0x80 -#define STAT_RTIMEOUT 0x40 -#define STAT_TTIMEOUT 0x20 -#define STAT_LOCK 0x10 -#define STAT_CD 0x08 -#define STAT_SYSFLAG 0x04 -#define STAT_IFULL 0x02 -#define STAT_OFULL 0x01 - +#define STAT_PARITY 0x80 +#define STAT_RTIMEOUT 0x40 +#define STAT_TTIMEOUT 0x20 +#define STAT_LOCK 0x10 +#define STAT_CD 0x08 +#define STAT_SYSFLAG 0x04 +#define STAT_IFULL 0x02 +#define STAT_OFULL 0x01 typedef struct { /* Video Controller stuff. */ mem_mapping_t mapping; - uint8_t crtc[32]; - int crtcreg; - int array_index; - uint8_t array[32]; - int array_ff; - int memctrl; - uint8_t stat; - int addr_mode; - uint8_t *vram, - *b8000; - int linepos, displine; - int sc, vc; - int dispon; - int con, coff, cursoron, blink; - int vsynctime; - int fullchange; - int vadj; - uint16_t ma, maback; - uint64_t dispontime, dispofftime; - pc_timer_t timer; - int firstline, lastline; - int composite; + uint8_t crtc[32]; + int crtcreg; + int array_index; + uint8_t array[32]; + int array_ff; + int memctrl; + uint8_t stat; + int addr_mode; + uint8_t *vram, + *b8000; + int linepos, displine; + int sc, vc; + int dispon; + int con, coff, cursoron, blink; + int vsynctime; + int fullchange; + int vadj; + uint16_t ma, maback; + uint64_t dispontime, dispofftime; + pc_timer_t timer; + int firstline, lastline; + int composite; /* Keyboard Controller stuff. */ - int latched; - int data; - int serial_data[44]; - int serial_pos; - uint8_t pa; - uint8_t pb; - pc_timer_t send_delay_timer; + int latched; + int data; + int serial_data[44]; + int serial_pos; + uint8_t pa; + uint8_t pb; + pc_timer_t send_delay_timer; } pcjr_t; -static video_timings_t timing_dram = {VIDEO_BUS, 0,0,0, 0,0,0}; /*No additional waitstates*/ - +static video_timings_t timing_dram = { VIDEO_BUS, 0, 0, 0, 0, 0, 0 }; /*No additional waitstates*/ static uint8_t crtcmask[32] = { 0xff, 0xff, 0xff, 0xff, 0x7f, 0x1f, 0x7f, 0x7f, @@ -108,664 +105,611 @@ static uint8_t crtcmask[32] = { 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -static uint8_t key_queue[16]; -static int key_queue_start = 0, - key_queue_end = 0; - +static uint8_t key_queue[16]; +static int key_queue_start = 0, + key_queue_end = 0; static void recalc_address(pcjr_t *pcjr) { if ((pcjr->memctrl & 0xc0) == 0xc0) { - pcjr->vram = &ram[(pcjr->memctrl & 0x06) << 14]; - pcjr->b8000 = &ram[(pcjr->memctrl & 0x30) << 11]; + pcjr->vram = &ram[(pcjr->memctrl & 0x06) << 14]; + pcjr->b8000 = &ram[(pcjr->memctrl & 0x30) << 11]; } else { - pcjr->vram = &ram[(pcjr->memctrl & 0x07) << 14]; - pcjr->b8000 = &ram[(pcjr->memctrl & 0x38) << 11]; + pcjr->vram = &ram[(pcjr->memctrl & 0x07) << 14]; + pcjr->b8000 = &ram[(pcjr->memctrl & 0x38) << 11]; } } - static void recalc_timings(pcjr_t *pcjr) { double _dispontime, _dispofftime, disptime; if (pcjr->array[0] & 1) { - disptime = pcjr->crtc[0] + 1; - _dispontime = pcjr->crtc[1]; + disptime = pcjr->crtc[0] + 1; + _dispontime = pcjr->crtc[1]; } else { - disptime = (pcjr->crtc[0] + 1) << 1; - _dispontime = pcjr->crtc[1] << 1; + disptime = (pcjr->crtc[0] + 1) << 1; + _dispontime = pcjr->crtc[1] << 1; } _dispofftime = disptime - _dispontime; - _dispontime *= CGACONST; + _dispontime *= CGACONST; _dispofftime *= CGACONST; - pcjr->dispontime = (uint64_t)(_dispontime); - pcjr->dispofftime = (uint64_t)(_dispofftime); + pcjr->dispontime = (uint64_t) (_dispontime); + pcjr->dispofftime = (uint64_t) (_dispofftime); } - static void vid_out(uint16_t addr, uint8_t val, void *p) { - pcjr_t *pcjr = (pcjr_t *)p; + pcjr_t *pcjr = (pcjr_t *) p; uint8_t old; switch (addr) { - case 0x3d4: - pcjr->crtcreg = val & 0x1f; - return; + case 0x3d4: + pcjr->crtcreg = val & 0x1f; + return; - case 0x3d5: - old = pcjr->crtc[pcjr->crtcreg]; - pcjr->crtc[pcjr->crtcreg] = val & crtcmask[pcjr->crtcreg]; - if (old != val) { - if (pcjr->crtcreg < 0xe || pcjr->crtcreg > 0x10) { - pcjr->fullchange = changeframecount; - recalc_timings(pcjr); - } - } - return; + case 0x3d5: + old = pcjr->crtc[pcjr->crtcreg]; + pcjr->crtc[pcjr->crtcreg] = val & crtcmask[pcjr->crtcreg]; + if (old != val) { + if (pcjr->crtcreg < 0xe || pcjr->crtcreg > 0x10) { + pcjr->fullchange = changeframecount; + recalc_timings(pcjr); + } + } + return; - case 0x3da: - if (!pcjr->array_ff) - pcjr->array_index = val & 0x1f; - else { - if (pcjr->array_index & 0x10) - val &= 0x0f; - pcjr->array[pcjr->array_index & 0x1f] = val; - if (!(pcjr->array_index & 0x1f)) - update_cga16_color(val); - } - pcjr->array_ff = !pcjr->array_ff; - break; + case 0x3da: + if (!pcjr->array_ff) + pcjr->array_index = val & 0x1f; + else { + if (pcjr->array_index & 0x10) + val &= 0x0f; + pcjr->array[pcjr->array_index & 0x1f] = val; + if (!(pcjr->array_index & 0x1f)) + update_cga16_color(val); + } + pcjr->array_ff = !pcjr->array_ff; + break; - case 0x3df: - pcjr->memctrl = val; - pcjr->addr_mode = val >> 6; - recalc_address(pcjr); - break; + case 0x3df: + pcjr->memctrl = val; + pcjr->addr_mode = val >> 6; + recalc_address(pcjr); + break; } } - static uint8_t vid_in(uint16_t addr, void *p) { - pcjr_t *pcjr = (pcjr_t *)p; - uint8_t ret = 0xff; + pcjr_t *pcjr = (pcjr_t *) p; + uint8_t ret = 0xff; switch (addr) { - case 0x3d4: - ret = pcjr->crtcreg; - break; + case 0x3d4: + ret = pcjr->crtcreg; + break; - case 0x3d5: - ret = pcjr->crtc[pcjr->crtcreg]; - break; + case 0x3d5: + ret = pcjr->crtc[pcjr->crtcreg]; + break; - case 0x3da: - pcjr->array_ff = 0; - pcjr->stat ^= 0x10; - ret = pcjr->stat; - break; + case 0x3da: + pcjr->array_ff = 0; + pcjr->stat ^= 0x10; + ret = pcjr->stat; + break; } - return(ret); + return (ret); } - static void vid_write(uint32_t addr, uint8_t val, void *p) { - pcjr_t *pcjr = (pcjr_t *)p; + pcjr_t *pcjr = (pcjr_t *) p; - if (pcjr->memctrl == -1) return; + if (pcjr->memctrl == -1) + return; pcjr->b8000[addr & 0x3fff] = val; } - static uint8_t vid_read(uint32_t addr, void *p) { - pcjr_t *pcjr = (pcjr_t *)p; + pcjr_t *pcjr = (pcjr_t *) p; - if (pcjr->memctrl == -1) return(0xff); + if (pcjr->memctrl == -1) + return (0xff); - return(pcjr->b8000[addr & 0x3fff]); + return (pcjr->b8000[addr & 0x3fff]); } - static void vid_poll(void *p) { - pcjr_t *pcjr = (pcjr_t *)p; - uint16_t ca = (pcjr->crtc[15] | (pcjr->crtc[14] << 8)) & 0x3fff; - int drawcursor; - int x, c, xs_temp, ys_temp; - int oldvc; - uint8_t chr, attr; + pcjr_t *pcjr = (pcjr_t *) p; + uint16_t ca = (pcjr->crtc[15] | (pcjr->crtc[14] << 8)) & 0x3fff; + int drawcursor; + int x, c, xs_temp, ys_temp; + int oldvc; + uint8_t chr, attr; uint16_t dat; - int cols[4]; - int oldsc; + int cols[4]; + int oldsc; - if (! pcjr->linepos) { - timer_advance_u64(&pcjr->timer, pcjr->dispofftime); - pcjr->stat &= ~1; - pcjr->linepos = 1; - oldsc = pcjr->sc; - if ((pcjr->crtc[8] & 3) == 3) - pcjr->sc = (pcjr->sc << 1) & 7; - if (pcjr->dispon) { - uint16_t offset = 0; - uint16_t mask = 0x1fff; + if (!pcjr->linepos) { + timer_advance_u64(&pcjr->timer, pcjr->dispofftime); + pcjr->stat &= ~1; + pcjr->linepos = 1; + oldsc = pcjr->sc; + if ((pcjr->crtc[8] & 3) == 3) + pcjr->sc = (pcjr->sc << 1) & 7; + if (pcjr->dispon) { + uint16_t offset = 0; + uint16_t mask = 0x1fff; - if (pcjr->displine < pcjr->firstline) { - pcjr->firstline = pcjr->displine; - video_wait_for_buffer(); - } - pcjr->lastline = pcjr->displine; - cols[0] = (pcjr->array[2] & 0xf) + 16; - for (c = 0; c < 8; c++) { - ((uint32_t *)buffer32->line[pcjr->displine])[c] = cols[0]; - if (pcjr->array[0] & 1) { - buffer32->line[(pcjr->displine << 1)][c + (pcjr->crtc[1] << 3) + 8] = - buffer32->line[(pcjr->displine << 1) + 1][c + (pcjr->crtc[1] << 3) + 8] = cols[0]; - } else { - buffer32->line[(pcjr->displine << 1)][c + (pcjr->crtc[1] << 4) + 8] = - buffer32->line[(pcjr->displine << 1) + 1][c + (pcjr->crtc[1] << 4) + 8] = cols[0]; - } - } + if (pcjr->displine < pcjr->firstline) { + pcjr->firstline = pcjr->displine; + video_wait_for_buffer(); + } + pcjr->lastline = pcjr->displine; + cols[0] = (pcjr->array[2] & 0xf) + 16; + for (c = 0; c < 8; c++) { + ((uint32_t *) buffer32->line[pcjr->displine])[c] = cols[0]; + if (pcjr->array[0] & 1) { + buffer32->line[(pcjr->displine << 1)][c + (pcjr->crtc[1] << 3) + 8] = buffer32->line[(pcjr->displine << 1) + 1][c + (pcjr->crtc[1] << 3) + 8] = cols[0]; + } else { + buffer32->line[(pcjr->displine << 1)][c + (pcjr->crtc[1] << 4) + 8] = buffer32->line[(pcjr->displine << 1) + 1][c + (pcjr->crtc[1] << 4) + 8] = cols[0]; + } + } - switch (pcjr->addr_mode) { - case 0: /*Alpha*/ - offset = 0; - mask = 0x3fff; - break; - case 1: /*Low resolution graphics*/ - offset = (pcjr->sc & 1) * 0x2000; - break; - case 3: /*High resolution graphics*/ - offset = (pcjr->sc & 3) * 0x2000; - break; - } - switch ((pcjr->array[0] & 0x13) | ((pcjr->array[3] & 0x08) << 5)) { - case 0x13: /*320x200x16*/ - for (x = 0; x < pcjr->crtc[1]; x++) { - dat = (pcjr->vram[((pcjr->ma << 1) & mask) + offset] << 8) | - pcjr->vram[((pcjr->ma << 1) & mask) + offset + 1]; - pcjr->ma++; - buffer32->line[(pcjr->displine << 1)][(x << 3) + 8] = buffer32->line[(pcjr->displine << 1)][(x << 3) + 9] = - buffer32->line[(pcjr->displine << 1) + 1][(x << 3) + 8] = buffer32->line[(pcjr->displine << 1) + 1][(x << 3) + 9] = - pcjr->array[((dat >> 12) & pcjr->array[1]) + 16] + 16; - buffer32->line[(pcjr->displine << 1)][(x << 3) + 10] = buffer32->line[(pcjr->displine << 1)][(x << 3) + 11] = - buffer32->line[(pcjr->displine << 1) + 1][(x << 3) + 10] = buffer32->line[(pcjr->displine << 1) + 1][(x << 3) + 11] = - pcjr->array[((dat >> 8) & pcjr->array[1]) + 16] + 16; - buffer32->line[(pcjr->displine << 1)][(x << 3) + 12] = buffer32->line[(pcjr->displine << 1)][(x << 3) + 13] = - buffer32->line[(pcjr->displine << 1) + 1][(x << 3) + 12] = buffer32->line[(pcjr->displine << 1) + 1][(x << 3) + 13] = - pcjr->array[((dat >> 4) & pcjr->array[1]) + 16] + 16; - buffer32->line[(pcjr->displine << 1)][(x << 3) + 14] = buffer32->line[(pcjr->displine << 1)][(x << 3) + 15] = - buffer32->line[(pcjr->displine << 1) + 1][(x << 3) + 14] = buffer32->line[(pcjr->displine << 1) + 1][(x << 3) + 15] = - pcjr->array[(dat & pcjr->array[1]) + 16] + 16; - } - break; - case 0x12: /*160x200x16*/ - for (x = 0; x < pcjr->crtc[1]; x++) { - dat = (pcjr->vram[((pcjr->ma << 1) & mask) + offset] << 8) | - pcjr->vram[((pcjr->ma << 1) & mask) + offset + 1]; - pcjr->ma++; - buffer32->line[(pcjr->displine << 1)][(x << 4) + 8] = buffer32->line[(pcjr->displine << 1)][(x << 4) + 9] = - buffer32->line[(pcjr->displine << 1)][(x << 4) + 10] = buffer32->line[(pcjr->displine << 1)][(x << 4) + 11] = - buffer32->line[(pcjr->displine << 1) + 1][(x << 4) + 8] = buffer32->line[(pcjr->displine << 1) + 1][(x << 4) + 9] = - buffer32->line[(pcjr->displine << 1) + 1][(x << 4) + 10] = buffer32->line[(pcjr->displine << 1) + 1][(x << 4) + 11] = - pcjr->array[((dat >> 12) & pcjr->array[1]) + 16] + 16; - buffer32->line[(pcjr->displine << 1)][(x << 4) + 12] = buffer32->line[(pcjr->displine << 1)][(x << 4) + 13] = - buffer32->line[(pcjr->displine << 1)][(x << 4) + 14] = buffer32->line[(pcjr->displine << 1)][(x << 4) + 15] = - buffer32->line[(pcjr->displine << 1) + 1][(x << 4) + 12] = buffer32->line[(pcjr->displine << 1) + 1][(x << 4) + 13] = - buffer32->line[(pcjr->displine << 1) + 1][(x << 4) + 14] = buffer32->line[(pcjr->displine << 1) + 1][(x << 4) + 15] = - pcjr->array[((dat >> 8) & pcjr->array[1]) + 16] + 16; - buffer32->line[(pcjr->displine << 1)][(x << 4) + 16] = buffer32->line[(pcjr->displine << 1)][(x << 4) + 17] = - buffer32->line[(pcjr->displine << 1)][(x << 4) + 18] = buffer32->line[(pcjr->displine << 1)][(x << 4) + 19] = - buffer32->line[(pcjr->displine << 1) + 1][(x << 4) + 16] = buffer32->line[(pcjr->displine << 1) + 1][(x << 4) + 17] = - buffer32->line[(pcjr->displine << 1) + 1][(x << 4) + 18] = buffer32->line[(pcjr->displine << 1) + 1][(x << 4) + 19] = - pcjr->array[((dat >> 4) & pcjr->array[1]) + 16] + 16; - buffer32->line[(pcjr->displine << 1)][(x << 4) + 20] = buffer32->line[(pcjr->displine << 1)][(x << 4) + 21] = - buffer32->line[(pcjr->displine << 1)][(x << 4) + 22] = buffer32->line[(pcjr->displine << 1)][(x << 4) + 23] = - buffer32->line[(pcjr->displine << 1) + 1][(x << 4) + 20] = buffer32->line[(pcjr->displine << 1) + 1][(x << 4) + 21] = - buffer32->line[(pcjr->displine << 1) + 1][(x << 4) + 22] = buffer32->line[(pcjr->displine << 1) + 1][(x << 4) + 23] = - pcjr->array[(dat & pcjr->array[1]) + 16] + 16; - } - break; - case 0x03: /*640x200x4*/ - for (x = 0; x < pcjr->crtc[1]; x++) { - dat = (pcjr->vram[((pcjr->ma << 1) & mask) + offset] << 8) | - pcjr->vram[((pcjr->ma << 1) & mask) + offset + 1]; - pcjr->ma++; - for (c = 0; c < 8; c++) { - chr = (dat >> 7) & 1; - chr |= ((dat >> 14) & 2); - buffer32->line[(pcjr->displine << 1)][(x << 3) + 8 + c] = buffer32->line[(pcjr->displine << 1) + 1][(x << 3) + 8 + c] = - pcjr->array[(chr & pcjr->array[1]) + 16] + 16; - dat <<= 1; - } - } - break; - case 0x01: /*80 column text*/ - for (x = 0; x < pcjr->crtc[1]; x++) { - chr = pcjr->vram[((pcjr->ma << 1) & mask) + offset]; - attr = pcjr->vram[((pcjr->ma << 1) & mask) + offset + 1]; - drawcursor = ((pcjr->ma == ca) && pcjr->con && pcjr->cursoron); - if (pcjr->array[3] & 4) { - cols[1] = pcjr->array[ ((attr & 15) & pcjr->array[1]) + 16] + 16; - cols[0] = pcjr->array[(((attr >> 4) & 7) & pcjr->array[1]) + 16] + 16; - if ((pcjr->blink & 16) && (attr & 0x80) && !drawcursor) - cols[1] = cols[0]; - } else { - cols[1] = pcjr->array[((attr & 15) & pcjr->array[1]) + 16] + 16; - cols[0] = pcjr->array[((attr >> 4) & pcjr->array[1]) + 16] + 16; - } - if (pcjr->sc & 8) { - for (c = 0; c < 8; c++) { - buffer32->line[(pcjr->displine << 1)][(x << 3) + c + 8] = - buffer32->line[(pcjr->displine << 1) + 1][(x << 3) + c + 8] = cols[0]; - } - } else { - for (c = 0; c < 8; c++) { - buffer32->line[(pcjr->displine << 1)][(x << 3) + c + 8] = - buffer32->line[(pcjr->displine << 1) + 1][(x << 3) + c + 8] = - cols[(fontdat[chr][pcjr->sc & 7] & (1 << (c ^ 7))) ? 1 : 0]; - } - } - if (drawcursor) { - for (c = 0; c < 8; c++) { - buffer32->line[(pcjr->displine << 1)][(x << 3) + c + 8] ^= 15; - buffer32->line[(pcjr->displine << 1) + 1][(x << 3) + c + 8] ^= 15; - } - } - pcjr->ma++; - } - break; - case 0x00: /*40 column text*/ - for (x = 0; x < pcjr->crtc[1]; x++) { - chr = pcjr->vram[((pcjr->ma << 1) & mask) + offset]; - attr = pcjr->vram[((pcjr->ma << 1) & mask) + offset + 1]; - drawcursor = ((pcjr->ma == ca) && pcjr->con && pcjr->cursoron); - if (pcjr->array[3] & 4) { - cols[1] = pcjr->array[ ((attr & 15) & pcjr->array[1]) + 16] + 16; - cols[0] = pcjr->array[(((attr >> 4) & 7) & pcjr->array[1]) + 16] + 16; - if ((pcjr->blink & 16) && (attr & 0x80) && !drawcursor) - cols[1] = cols[0]; - } else { - cols[1] = pcjr->array[((attr & 15) & pcjr->array[1]) + 16] + 16; - cols[0] = pcjr->array[((attr >> 4) & pcjr->array[1]) + 16] + 16; - } - pcjr->ma++; - if (pcjr->sc & 8) { - for (c = 0; c < 8; c++) { - buffer32->line[(pcjr->displine << 1)][(x << 4) + (c << 1) + 8] = - buffer32->line[(pcjr->displine << 1)][(x << 4) + (c << 1) + 1 + 8] = - buffer32->line[(pcjr->displine << 1) + 1][(x << 4) + (c << 1) + 8] = - buffer32->line[(pcjr->displine << 1) + 1][(x << 4) + (c << 1) + 1 + 8] = cols[0]; - } - } else { - for (c = 0; c < 8; c++) { - buffer32->line[(pcjr->displine << 1)][(x << 4) + (c << 1) + 8] = - buffer32->line[(pcjr->displine << 1)][(x << 4) + (c << 1) + 1 + 8] = - buffer32->line[(pcjr->displine << 1) + 1][(x << 4) + (c << 1) + 8] = - buffer32->line[(pcjr->displine << 1) + 1][(x << 4) + (c << 1) + 1 + 8] = - cols[(fontdat[chr][pcjr->sc & 7] & (1 << (c ^ 7))) ? 1 : 0]; - } - } - if (drawcursor) { - for (c = 0; c < 16; c++) { - buffer32->line[(pcjr->displine << 1)][(x << 4) + c + 8] ^= 15; - buffer32->line[(pcjr->displine << 1) + 1][(x << 4) + c + 8] ^= 15; - } - } - } - break; - case 0x02: /*320x200x4*/ - cols[0] = pcjr->array[0 + 16] + 16; - cols[1] = pcjr->array[1 + 16] + 16; - cols[2] = pcjr->array[2 + 16] + 16; - cols[3] = pcjr->array[3 + 16] + 16; - for (x = 0; x < pcjr->crtc[1]; x++) { - dat = (pcjr->vram[((pcjr->ma << 1) & mask) + offset] << 8) | - pcjr->vram[((pcjr->ma << 1) & mask) + offset + 1]; - pcjr->ma++; - for (c = 0; c < 8; c++) { - buffer32->line[(pcjr->displine << 1)][(x << 4) + (c << 1) + 8] = - buffer32->line[(pcjr->displine << 1)][(x << 4) + (c << 1) + 1 + 8] = - buffer32->line[(pcjr->displine << 1) + 1][(x << 4) + (c << 1) + 8] = - buffer32->line[(pcjr->displine << 1) + 1][(x << 4) + (c << 1) + 1 + 8] = cols[dat >> 14]; - dat <<= 2; - } - } - break; - case 0x102: /*640x200x2*/ - cols[0] = pcjr->array[0 + 16] + 16; - cols[1] = pcjr->array[1 + 16] + 16; - for (x = 0; x < pcjr->crtc[1]; x++) { - dat = (pcjr->vram[((pcjr->ma << 1) & mask) + offset] << 8) | - pcjr->vram[((pcjr->ma << 1) & mask) + offset + 1]; - pcjr->ma++; - for (c = 0; c < 16; c++) { - buffer32->line[(pcjr->displine << 1)][(x << 4) + c + 8] = - buffer32->line[(pcjr->displine << 1) + 1][(x << 4) + c + 8] = - cols[dat >> 15]; - dat <<= 1; - } - } - break; - } - } else { - if (pcjr->array[3] & 4) { - if (pcjr->array[0] & 1) { - hline(buffer32, 0, (pcjr->displine << 1), (pcjr->crtc[1] << 3) + 16, (pcjr->array[2] & 0xf) + 16); - hline(buffer32, 0, (pcjr->displine << 1) + 1, (pcjr->crtc[1] << 3) + 16, (pcjr->array[2] & 0xf) + 16); - } else { - hline(buffer32, 0, (pcjr->displine << 1), (pcjr->crtc[1] << 4) + 16, (pcjr->array[2] & 0xf) + 16); - hline(buffer32, 0, (pcjr->displine << 1) + 1, (pcjr->crtc[1] << 4) + 16, (pcjr->array[2] & 0xf) + 16); - } - } else { - cols[0] = pcjr->array[0 + 16] + 16; - if (pcjr->array[0] & 1) { - hline(buffer32, 0, (pcjr->displine << 1), (pcjr->crtc[1] << 3) + 16, cols[0]); - hline(buffer32, 0, (pcjr->displine << 1) + 1, (pcjr->crtc[1] << 3) + 16, cols[0]); - } else { - hline(buffer32, 0, (pcjr->displine << 1), (pcjr->crtc[1] << 4) + 16, cols[0]); - hline(buffer32, 0, (pcjr->displine << 1) + 1, (pcjr->crtc[1] << 4) + 16, cols[0]); - } - } - } - if (pcjr->array[0] & 1) x = (pcjr->crtc[1] << 3) + 16; - else x = (pcjr->crtc[1] << 4) + 16; - if (pcjr->composite) { - Composite_Process(pcjr->array[0], 0, x >> 2, buffer32->line[(pcjr->displine << 1)]); - Composite_Process(pcjr->array[0], 0, x >> 2, buffer32->line[(pcjr->displine << 1) + 1]); - } - pcjr->sc = oldsc; - if (pcjr->vc == pcjr->crtc[7] && !pcjr->sc) { - pcjr->stat |= 8; - } - pcjr->displine++; - if (pcjr->displine >= 360) - pcjr->displine = 0; + switch (pcjr->addr_mode) { + case 0: /*Alpha*/ + offset = 0; + mask = 0x3fff; + break; + case 1: /*Low resolution graphics*/ + offset = (pcjr->sc & 1) * 0x2000; + break; + case 3: /*High resolution graphics*/ + offset = (pcjr->sc & 3) * 0x2000; + break; + } + switch ((pcjr->array[0] & 0x13) | ((pcjr->array[3] & 0x08) << 5)) { + case 0x13: /*320x200x16*/ + for (x = 0; x < pcjr->crtc[1]; x++) { + dat = (pcjr->vram[((pcjr->ma << 1) & mask) + offset] << 8) | pcjr->vram[((pcjr->ma << 1) & mask) + offset + 1]; + pcjr->ma++; + buffer32->line[(pcjr->displine << 1)][(x << 3) + 8] = buffer32->line[(pcjr->displine << 1)][(x << 3) + 9] = buffer32->line[(pcjr->displine << 1) + 1][(x << 3) + 8] = buffer32->line[(pcjr->displine << 1) + 1][(x << 3) + 9] = pcjr->array[((dat >> 12) & pcjr->array[1]) + 16] + 16; + buffer32->line[(pcjr->displine << 1)][(x << 3) + 10] = buffer32->line[(pcjr->displine << 1)][(x << 3) + 11] = buffer32->line[(pcjr->displine << 1) + 1][(x << 3) + 10] = buffer32->line[(pcjr->displine << 1) + 1][(x << 3) + 11] = pcjr->array[((dat >> 8) & pcjr->array[1]) + 16] + 16; + buffer32->line[(pcjr->displine << 1)][(x << 3) + 12] = buffer32->line[(pcjr->displine << 1)][(x << 3) + 13] = buffer32->line[(pcjr->displine << 1) + 1][(x << 3) + 12] = buffer32->line[(pcjr->displine << 1) + 1][(x << 3) + 13] = pcjr->array[((dat >> 4) & pcjr->array[1]) + 16] + 16; + buffer32->line[(pcjr->displine << 1)][(x << 3) + 14] = buffer32->line[(pcjr->displine << 1)][(x << 3) + 15] = buffer32->line[(pcjr->displine << 1) + 1][(x << 3) + 14] = buffer32->line[(pcjr->displine << 1) + 1][(x << 3) + 15] = pcjr->array[(dat & pcjr->array[1]) + 16] + 16; + } + break; + case 0x12: /*160x200x16*/ + for (x = 0; x < pcjr->crtc[1]; x++) { + dat = (pcjr->vram[((pcjr->ma << 1) & mask) + offset] << 8) | pcjr->vram[((pcjr->ma << 1) & mask) + offset + 1]; + pcjr->ma++; + buffer32->line[(pcjr->displine << 1)][(x << 4) + 8] = buffer32->line[(pcjr->displine << 1)][(x << 4) + 9] = buffer32->line[(pcjr->displine << 1)][(x << 4) + 10] = buffer32->line[(pcjr->displine << 1)][(x << 4) + 11] = buffer32->line[(pcjr->displine << 1) + 1][(x << 4) + 8] = buffer32->line[(pcjr->displine << 1) + 1][(x << 4) + 9] = buffer32->line[(pcjr->displine << 1) + 1][(x << 4) + 10] = buffer32->line[(pcjr->displine << 1) + 1][(x << 4) + 11] = pcjr->array[((dat >> 12) & pcjr->array[1]) + 16] + 16; + buffer32->line[(pcjr->displine << 1)][(x << 4) + 12] = buffer32->line[(pcjr->displine << 1)][(x << 4) + 13] = buffer32->line[(pcjr->displine << 1)][(x << 4) + 14] = buffer32->line[(pcjr->displine << 1)][(x << 4) + 15] = buffer32->line[(pcjr->displine << 1) + 1][(x << 4) + 12] = buffer32->line[(pcjr->displine << 1) + 1][(x << 4) + 13] = buffer32->line[(pcjr->displine << 1) + 1][(x << 4) + 14] = buffer32->line[(pcjr->displine << 1) + 1][(x << 4) + 15] = pcjr->array[((dat >> 8) & pcjr->array[1]) + 16] + 16; + buffer32->line[(pcjr->displine << 1)][(x << 4) + 16] = buffer32->line[(pcjr->displine << 1)][(x << 4) + 17] = buffer32->line[(pcjr->displine << 1)][(x << 4) + 18] = buffer32->line[(pcjr->displine << 1)][(x << 4) + 19] = buffer32->line[(pcjr->displine << 1) + 1][(x << 4) + 16] = buffer32->line[(pcjr->displine << 1) + 1][(x << 4) + 17] = buffer32->line[(pcjr->displine << 1) + 1][(x << 4) + 18] = buffer32->line[(pcjr->displine << 1) + 1][(x << 4) + 19] = pcjr->array[((dat >> 4) & pcjr->array[1]) + 16] + 16; + buffer32->line[(pcjr->displine << 1)][(x << 4) + 20] = buffer32->line[(pcjr->displine << 1)][(x << 4) + 21] = buffer32->line[(pcjr->displine << 1)][(x << 4) + 22] = buffer32->line[(pcjr->displine << 1)][(x << 4) + 23] = buffer32->line[(pcjr->displine << 1) + 1][(x << 4) + 20] = buffer32->line[(pcjr->displine << 1) + 1][(x << 4) + 21] = buffer32->line[(pcjr->displine << 1) + 1][(x << 4) + 22] = buffer32->line[(pcjr->displine << 1) + 1][(x << 4) + 23] = pcjr->array[(dat & pcjr->array[1]) + 16] + 16; + } + break; + case 0x03: /*640x200x4*/ + for (x = 0; x < pcjr->crtc[1]; x++) { + dat = (pcjr->vram[((pcjr->ma << 1) & mask) + offset] << 8) | pcjr->vram[((pcjr->ma << 1) & mask) + offset + 1]; + pcjr->ma++; + for (c = 0; c < 8; c++) { + chr = (dat >> 7) & 1; + chr |= ((dat >> 14) & 2); + buffer32->line[(pcjr->displine << 1)][(x << 3) + 8 + c] = buffer32->line[(pcjr->displine << 1) + 1][(x << 3) + 8 + c] = pcjr->array[(chr & pcjr->array[1]) + 16] + 16; + dat <<= 1; + } + } + break; + case 0x01: /*80 column text*/ + for (x = 0; x < pcjr->crtc[1]; x++) { + chr = pcjr->vram[((pcjr->ma << 1) & mask) + offset]; + attr = pcjr->vram[((pcjr->ma << 1) & mask) + offset + 1]; + drawcursor = ((pcjr->ma == ca) && pcjr->con && pcjr->cursoron); + if (pcjr->array[3] & 4) { + cols[1] = pcjr->array[((attr & 15) & pcjr->array[1]) + 16] + 16; + cols[0] = pcjr->array[(((attr >> 4) & 7) & pcjr->array[1]) + 16] + 16; + if ((pcjr->blink & 16) && (attr & 0x80) && !drawcursor) + cols[1] = cols[0]; + } else { + cols[1] = pcjr->array[((attr & 15) & pcjr->array[1]) + 16] + 16; + cols[0] = pcjr->array[((attr >> 4) & pcjr->array[1]) + 16] + 16; + } + if (pcjr->sc & 8) { + for (c = 0; c < 8; c++) { + buffer32->line[(pcjr->displine << 1)][(x << 3) + c + 8] = buffer32->line[(pcjr->displine << 1) + 1][(x << 3) + c + 8] = cols[0]; + } + } else { + for (c = 0; c < 8; c++) { + buffer32->line[(pcjr->displine << 1)][(x << 3) + c + 8] = buffer32->line[(pcjr->displine << 1) + 1][(x << 3) + c + 8] = cols[(fontdat[chr][pcjr->sc & 7] & (1 << (c ^ 7))) ? 1 : 0]; + } + } + if (drawcursor) { + for (c = 0; c < 8; c++) { + buffer32->line[(pcjr->displine << 1)][(x << 3) + c + 8] ^= 15; + buffer32->line[(pcjr->displine << 1) + 1][(x << 3) + c + 8] ^= 15; + } + } + pcjr->ma++; + } + break; + case 0x00: /*40 column text*/ + for (x = 0; x < pcjr->crtc[1]; x++) { + chr = pcjr->vram[((pcjr->ma << 1) & mask) + offset]; + attr = pcjr->vram[((pcjr->ma << 1) & mask) + offset + 1]; + drawcursor = ((pcjr->ma == ca) && pcjr->con && pcjr->cursoron); + if (pcjr->array[3] & 4) { + cols[1] = pcjr->array[((attr & 15) & pcjr->array[1]) + 16] + 16; + cols[0] = pcjr->array[(((attr >> 4) & 7) & pcjr->array[1]) + 16] + 16; + if ((pcjr->blink & 16) && (attr & 0x80) && !drawcursor) + cols[1] = cols[0]; + } else { + cols[1] = pcjr->array[((attr & 15) & pcjr->array[1]) + 16] + 16; + cols[0] = pcjr->array[((attr >> 4) & pcjr->array[1]) + 16] + 16; + } + pcjr->ma++; + if (pcjr->sc & 8) { + for (c = 0; c < 8; c++) { + buffer32->line[(pcjr->displine << 1)][(x << 4) + (c << 1) + 8] = buffer32->line[(pcjr->displine << 1)][(x << 4) + (c << 1) + 1 + 8] = buffer32->line[(pcjr->displine << 1) + 1][(x << 4) + (c << 1) + 8] = buffer32->line[(pcjr->displine << 1) + 1][(x << 4) + (c << 1) + 1 + 8] = cols[0]; + } + } else { + for (c = 0; c < 8; c++) { + buffer32->line[(pcjr->displine << 1)][(x << 4) + (c << 1) + 8] = buffer32->line[(pcjr->displine << 1)][(x << 4) + (c << 1) + 1 + 8] = buffer32->line[(pcjr->displine << 1) + 1][(x << 4) + (c << 1) + 8] = buffer32->line[(pcjr->displine << 1) + 1][(x << 4) + (c << 1) + 1 + 8] = cols[(fontdat[chr][pcjr->sc & 7] & (1 << (c ^ 7))) ? 1 : 0]; + } + } + if (drawcursor) { + for (c = 0; c < 16; c++) { + buffer32->line[(pcjr->displine << 1)][(x << 4) + c + 8] ^= 15; + buffer32->line[(pcjr->displine << 1) + 1][(x << 4) + c + 8] ^= 15; + } + } + } + break; + case 0x02: /*320x200x4*/ + cols[0] = pcjr->array[0 + 16] + 16; + cols[1] = pcjr->array[1 + 16] + 16; + cols[2] = pcjr->array[2 + 16] + 16; + cols[3] = pcjr->array[3 + 16] + 16; + for (x = 0; x < pcjr->crtc[1]; x++) { + dat = (pcjr->vram[((pcjr->ma << 1) & mask) + offset] << 8) | pcjr->vram[((pcjr->ma << 1) & mask) + offset + 1]; + pcjr->ma++; + for (c = 0; c < 8; c++) { + buffer32->line[(pcjr->displine << 1)][(x << 4) + (c << 1) + 8] = buffer32->line[(pcjr->displine << 1)][(x << 4) + (c << 1) + 1 + 8] = buffer32->line[(pcjr->displine << 1) + 1][(x << 4) + (c << 1) + 8] = buffer32->line[(pcjr->displine << 1) + 1][(x << 4) + (c << 1) + 1 + 8] = cols[dat >> 14]; + dat <<= 2; + } + } + break; + case 0x102: /*640x200x2*/ + cols[0] = pcjr->array[0 + 16] + 16; + cols[1] = pcjr->array[1 + 16] + 16; + for (x = 0; x < pcjr->crtc[1]; x++) { + dat = (pcjr->vram[((pcjr->ma << 1) & mask) + offset] << 8) | pcjr->vram[((pcjr->ma << 1) & mask) + offset + 1]; + pcjr->ma++; + for (c = 0; c < 16; c++) { + buffer32->line[(pcjr->displine << 1)][(x << 4) + c + 8] = buffer32->line[(pcjr->displine << 1) + 1][(x << 4) + c + 8] = cols[dat >> 15]; + dat <<= 1; + } + } + break; + } + } else { + if (pcjr->array[3] & 4) { + if (pcjr->array[0] & 1) { + hline(buffer32, 0, (pcjr->displine << 1), (pcjr->crtc[1] << 3) + 16, (pcjr->array[2] & 0xf) + 16); + hline(buffer32, 0, (pcjr->displine << 1) + 1, (pcjr->crtc[1] << 3) + 16, (pcjr->array[2] & 0xf) + 16); + } else { + hline(buffer32, 0, (pcjr->displine << 1), (pcjr->crtc[1] << 4) + 16, (pcjr->array[2] & 0xf) + 16); + hline(buffer32, 0, (pcjr->displine << 1) + 1, (pcjr->crtc[1] << 4) + 16, (pcjr->array[2] & 0xf) + 16); + } + } else { + cols[0] = pcjr->array[0 + 16] + 16; + if (pcjr->array[0] & 1) { + hline(buffer32, 0, (pcjr->displine << 1), (pcjr->crtc[1] << 3) + 16, cols[0]); + hline(buffer32, 0, (pcjr->displine << 1) + 1, (pcjr->crtc[1] << 3) + 16, cols[0]); + } else { + hline(buffer32, 0, (pcjr->displine << 1), (pcjr->crtc[1] << 4) + 16, cols[0]); + hline(buffer32, 0, (pcjr->displine << 1) + 1, (pcjr->crtc[1] << 4) + 16, cols[0]); + } + } + } + if (pcjr->array[0] & 1) + x = (pcjr->crtc[1] << 3) + 16; + else + x = (pcjr->crtc[1] << 4) + 16; + if (pcjr->composite) { + Composite_Process(pcjr->array[0], 0, x >> 2, buffer32->line[(pcjr->displine << 1)]); + Composite_Process(pcjr->array[0], 0, x >> 2, buffer32->line[(pcjr->displine << 1) + 1]); + } + pcjr->sc = oldsc; + if (pcjr->vc == pcjr->crtc[7] && !pcjr->sc) { + pcjr->stat |= 8; + } + pcjr->displine++; + if (pcjr->displine >= 360) + pcjr->displine = 0; } else { - timer_advance_u64(&pcjr->timer, pcjr->dispontime); - if (pcjr->dispon) - pcjr->stat |= 1; - pcjr->linepos = 0; - if (pcjr->vsynctime) { - pcjr->vsynctime--; - if (!pcjr->vsynctime) { - pcjr->stat &= ~8; - } - } - if (pcjr->sc == (pcjr->crtc[11] & 31) || ((pcjr->crtc[8] & 3) == 3 && pcjr->sc == ((pcjr->crtc[11] & 31) >> 1))) { - pcjr->con = 0; - pcjr->coff = 1; - } - if (pcjr->vadj) { - pcjr->sc++; - pcjr->sc &= 31; - pcjr->ma = pcjr->maback; - pcjr->vadj--; - if (!pcjr->vadj) { - pcjr->dispon = 1; - pcjr->ma = pcjr->maback = (pcjr->crtc[13] | (pcjr->crtc[12] << 8)) & 0x3fff; - pcjr->sc = 0; - } - } else if (pcjr->sc == pcjr->crtc[9] || ((pcjr->crtc[8] & 3) == 3 && pcjr->sc == (pcjr->crtc[9] >> 1))) { - pcjr->maback = pcjr->ma; - pcjr->sc = 0; - oldvc = pcjr->vc; - pcjr->vc++; - pcjr->vc &= 127; - if (pcjr->vc == pcjr->crtc[6]) - pcjr->dispon = 0; - if (oldvc == pcjr->crtc[4]) { - pcjr->vc = 0; - pcjr->vadj = pcjr->crtc[5]; - if (!pcjr->vadj) - pcjr->dispon = 1; - if (!pcjr->vadj) - pcjr->ma = pcjr->maback = (pcjr->crtc[13] | (pcjr->crtc[12] << 8)) & 0x3fff; - if ((pcjr->crtc[10] & 0x60) == 0x20) pcjr->cursoron = 0; - else pcjr->cursoron = pcjr->blink & 16; - } - if (pcjr->vc == pcjr->crtc[7]) { - pcjr->dispon = 0; - pcjr->displine = 0; - pcjr->vsynctime = 16; - picint(1 << 5); - if (pcjr->crtc[7]) { - if (pcjr->array[0] & 1) x = (pcjr->crtc[1] << 3) + 16; - else x = (pcjr->crtc[1] << 4) + 16; - pcjr->lastline++; + timer_advance_u64(&pcjr->timer, pcjr->dispontime); + if (pcjr->dispon) + pcjr->stat |= 1; + pcjr->linepos = 0; + if (pcjr->vsynctime) { + pcjr->vsynctime--; + if (!pcjr->vsynctime) { + pcjr->stat &= ~8; + } + } + if (pcjr->sc == (pcjr->crtc[11] & 31) || ((pcjr->crtc[8] & 3) == 3 && pcjr->sc == ((pcjr->crtc[11] & 31) >> 1))) { + pcjr->con = 0; + pcjr->coff = 1; + } + if (pcjr->vadj) { + pcjr->sc++; + pcjr->sc &= 31; + pcjr->ma = pcjr->maback; + pcjr->vadj--; + if (!pcjr->vadj) { + pcjr->dispon = 1; + pcjr->ma = pcjr->maback = (pcjr->crtc[13] | (pcjr->crtc[12] << 8)) & 0x3fff; + pcjr->sc = 0; + } + } else if (pcjr->sc == pcjr->crtc[9] || ((pcjr->crtc[8] & 3) == 3 && pcjr->sc == (pcjr->crtc[9] >> 1))) { + pcjr->maback = pcjr->ma; + pcjr->sc = 0; + oldvc = pcjr->vc; + pcjr->vc++; + pcjr->vc &= 127; + if (pcjr->vc == pcjr->crtc[6]) + pcjr->dispon = 0; + if (oldvc == pcjr->crtc[4]) { + pcjr->vc = 0; + pcjr->vadj = pcjr->crtc[5]; + if (!pcjr->vadj) + pcjr->dispon = 1; + if (!pcjr->vadj) + pcjr->ma = pcjr->maback = (pcjr->crtc[13] | (pcjr->crtc[12] << 8)) & 0x3fff; + if ((pcjr->crtc[10] & 0x60) == 0x20) + pcjr->cursoron = 0; + else + pcjr->cursoron = pcjr->blink & 16; + } + if (pcjr->vc == pcjr->crtc[7]) { + pcjr->dispon = 0; + pcjr->displine = 0; + pcjr->vsynctime = 16; + picint(1 << 5); + if (pcjr->crtc[7]) { + if (pcjr->array[0] & 1) + x = (pcjr->crtc[1] << 3) + 16; + else + x = (pcjr->crtc[1] << 4) + 16; + pcjr->lastline++; - xs_temp = x; - ys_temp = (pcjr->lastline - pcjr->firstline) << 1; + xs_temp = x; + ys_temp = (pcjr->lastline - pcjr->firstline) << 1; - if ((xs_temp > 0) && (ys_temp > 0)) { - if (xs_temp < 64) xs_temp = 656; - if (ys_temp < 32) ys_temp = 400; - if (!enable_overscan) - xs_temp -= 16; + if ((xs_temp > 0) && (ys_temp > 0)) { + if (xs_temp < 64) + xs_temp = 656; + if (ys_temp < 32) + ys_temp = 400; + if (!enable_overscan) + xs_temp -= 16; - if ((xs_temp != xsize) || (ys_temp != ysize) || video_force_resize_get()) { - xsize = xs_temp; - ysize = ys_temp; - set_screen_size(xsize, ysize + (enable_overscan ? 16 : 0)); + if ((xs_temp != xsize) || (ys_temp != ysize) || video_force_resize_get()) { + xsize = xs_temp; + ysize = ys_temp; + set_screen_size(xsize, ysize + (enable_overscan ? 16 : 0)); - if (video_force_resize_get()) - video_force_resize_set(0); - } + if (video_force_resize_get()) + video_force_resize_set(0); + } - if (enable_overscan) { - if (pcjr->composite) - video_blit_memtoscreen(0, (pcjr->firstline - 4) << 1, - xsize, ((pcjr->lastline - pcjr->firstline) + 8) << 1); - else - video_blit_memtoscreen_8(0, (pcjr->firstline - 4) << 1, - xsize, ((pcjr->lastline - pcjr->firstline) + 8) << 1); - } else { - if (pcjr->composite) - video_blit_memtoscreen(8, pcjr->firstline << 1, - xsize, (pcjr->lastline - pcjr->firstline) << 1); - else - video_blit_memtoscreen_8(8, pcjr->firstline << 1, - xsize, (pcjr->lastline - pcjr->firstline) << 1); - } - } + if (enable_overscan) { + if (pcjr->composite) + video_blit_memtoscreen(0, (pcjr->firstline - 4) << 1, + xsize, ((pcjr->lastline - pcjr->firstline) + 8) << 1); + else + video_blit_memtoscreen_8(0, (pcjr->firstline - 4) << 1, + xsize, ((pcjr->lastline - pcjr->firstline) + 8) << 1); + } else { + if (pcjr->composite) + video_blit_memtoscreen(8, pcjr->firstline << 1, + xsize, (pcjr->lastline - pcjr->firstline) << 1); + else + video_blit_memtoscreen_8(8, pcjr->firstline << 1, + xsize, (pcjr->lastline - pcjr->firstline) << 1); + } + } - frames++; - video_res_x = xsize; - video_res_y = ysize; - } - pcjr->firstline = 1000; - pcjr->lastline = 0; - pcjr->blink++; - } - } else { - pcjr->sc++; - pcjr->sc &= 31; - pcjr->ma = pcjr->maback; - } - if ((pcjr->sc == (pcjr->crtc[10] & 31) || ((pcjr->crtc[8] & 3) == 3 && pcjr->sc == ((pcjr->crtc[10] & 31) >> 1)))) - pcjr->con = 1; + frames++; + video_res_x = xsize; + video_res_y = ysize; + } + pcjr->firstline = 1000; + pcjr->lastline = 0; + pcjr->blink++; + } + } else { + pcjr->sc++; + pcjr->sc &= 31; + pcjr->ma = pcjr->maback; + } + if ((pcjr->sc == (pcjr->crtc[10] & 31) || ((pcjr->crtc[8] & 3) == 3 && pcjr->sc == ((pcjr->crtc[10] & 31) >> 1)))) + pcjr->con = 1; } } - static void kbd_write(uint16_t port, uint8_t val, void *priv) { - pcjr_t *pcjr = (pcjr_t *)priv; + pcjr_t *pcjr = (pcjr_t *) priv; if ((port >= 0xa0) && (port <= 0xa7)) - port = 0xa0; + port = 0xa0; switch (port) { - case 0x60: - pcjr->pa = val; - break; + case 0x60: + pcjr->pa = val; + break; - case 0x61: - pcjr->pb = val; + case 0x61: + pcjr->pb = val; - timer_process(); + timer_process(); - if (cassette != NULL) - pc_cas_set_motor(cassette, (pcjr->pb & 0x08) == 0); + if (cassette != NULL) + pc_cas_set_motor(cassette, (pcjr->pb & 0x08) == 0); - speaker_update(); - speaker_gated = val & 1; - speaker_enable = val & 2; - if (speaker_enable) - was_speaker_enable = 1; - pit_devs[0].set_gate(pit_devs[0].data, 2, val & 1); - sn76489_mute = speaker_mute = 1; - switch (val & 0x60) { - case 0x00: - speaker_mute = 0; - break; + speaker_update(); + speaker_gated = val & 1; + speaker_enable = val & 2; + if (speaker_enable) + was_speaker_enable = 1; + pit_devs[0].set_gate(pit_devs[0].data, 2, val & 1); + sn76489_mute = speaker_mute = 1; + switch (val & 0x60) { + case 0x00: + speaker_mute = 0; + break; - case 0x60: - sn76489_mute = 0; - break; - } - break; + case 0x60: + sn76489_mute = 0; + break; + } + break; - case 0xa0: - nmi_mask = val & 0x80; - pit_devs[0].set_using_timer(pit_devs[0].data, 1, !(val & 0x20)); - break; + case 0xa0: + nmi_mask = val & 0x80; + pit_devs[0].set_using_timer(pit_devs[0].data, 1, !(val & 0x20)); + break; } } - static uint8_t kbd_read(uint16_t port, void *priv) { - pcjr_t *pcjr = (pcjr_t *)priv; - uint8_t ret = 0xff; + pcjr_t *pcjr = (pcjr_t *) priv; + uint8_t ret = 0xff; if ((port >= 0xa0) && (port <= 0xa7)) - port = 0xa0; + port = 0xa0; switch (port) { - case 0x60: - ret = pcjr->pa; - break; + case 0x60: + ret = pcjr->pa; + break; - case 0x61: - ret = pcjr->pb; - break; + case 0x61: + ret = pcjr->pb; + break; - case 0x62: - ret = (pcjr->latched ? 1 : 0); - ret |= 0x02; /*Modem card not installed*/ - if ((pcjr->pb & 0x08) || (cassette == NULL)) - ret |= (ppispeakon ? 0x10 : 0); - else - ret |= (pc_cas_get_inp(cassette) ? 0x10 : 0); - ret |= (ppispeakon ? 0x10 : 0); - ret |= (ppispeakon ? 0x20 : 0); - ret |= (pcjr->data ? 0x40: 0); - if (pcjr->data) - ret |= 0x40; - break; + case 0x62: + ret = (pcjr->latched ? 1 : 0); + ret |= 0x02; /*Modem card not installed*/ + if ((pcjr->pb & 0x08) || (cassette == NULL)) + ret |= (ppispeakon ? 0x10 : 0); + else + ret |= (pc_cas_get_inp(cassette) ? 0x10 : 0); + ret |= (ppispeakon ? 0x10 : 0); + ret |= (ppispeakon ? 0x20 : 0); + ret |= (pcjr->data ? 0x40 : 0); + if (pcjr->data) + ret |= 0x40; + break; - case 0xa0: - pcjr->latched = 0; - ret = 0; - break; + case 0xa0: + pcjr->latched = 0; + ret = 0; + break; } - return(ret); + return (ret); } - static void kbd_poll(void *priv) { - pcjr_t *pcjr = (pcjr_t *)priv; - int c, p = 0, key; + pcjr_t *pcjr = (pcjr_t *) priv; + int c, p = 0, key; timer_advance_u64(&pcjr->send_delay_timer, 220 * TIMER_USEC); - if (key_queue_start != key_queue_end && - !pcjr->serial_pos && !pcjr->latched) { - key = key_queue[key_queue_start]; + if (key_queue_start != key_queue_end && !pcjr->serial_pos && !pcjr->latched) { + key = key_queue[key_queue_start]; - key_queue_start = (key_queue_start + 1) & 0xf; + key_queue_start = (key_queue_start + 1) & 0xf; - pcjr->latched = 1; - pcjr->serial_data[0] = 1; /*Start bit*/ - pcjr->serial_data[1] = 0; + pcjr->latched = 1; + pcjr->serial_data[0] = 1; /*Start bit*/ + pcjr->serial_data[1] = 0; - for (c = 0; c < 8; c++) { - if (key & (1 << c)) { - pcjr->serial_data[(c + 1) * 2] = 1; - pcjr->serial_data[(c + 1) * 2 + 1] = 0; - p++; - } else { - pcjr->serial_data[(c + 1) * 2] = 0; - pcjr->serial_data[(c + 1) * 2 + 1] = 1; - } - } + for (c = 0; c < 8; c++) { + if (key & (1 << c)) { + pcjr->serial_data[(c + 1) * 2] = 1; + pcjr->serial_data[(c + 1) * 2 + 1] = 0; + p++; + } else { + pcjr->serial_data[(c + 1) * 2] = 0; + pcjr->serial_data[(c + 1) * 2 + 1] = 1; + } + } - if (p & 1) { /*Parity*/ - pcjr->serial_data[9 * 2] = 1; - pcjr->serial_data[9 * 2 + 1] = 0; - } else { - pcjr->serial_data[9 * 2] = 0; - pcjr->serial_data[9 * 2 + 1] = 1; - } + if (p & 1) { /*Parity*/ + pcjr->serial_data[9 * 2] = 1; + pcjr->serial_data[9 * 2 + 1] = 0; + } else { + pcjr->serial_data[9 * 2] = 0; + pcjr->serial_data[9 * 2 + 1] = 1; + } - for (c = 0; c < 11; c++) { /*11 stop bits*/ - pcjr->serial_data[(c + 10) * 2] = 0; - pcjr->serial_data[(c + 10) * 2 + 1] = 0; - } + for (c = 0; c < 11; c++) { /*11 stop bits*/ + pcjr->serial_data[(c + 10) * 2] = 0; + pcjr->serial_data[(c + 10) * 2 + 1] = 0; + } - pcjr->serial_pos++; + pcjr->serial_pos++; } if (pcjr->serial_pos) { - pcjr->data = pcjr->serial_data[pcjr->serial_pos - 1]; - nmi = pcjr->data; - pcjr->serial_pos++; - if (pcjr->serial_pos == 42+1) - pcjr->serial_pos = 0; + pcjr->data = pcjr->serial_data[pcjr->serial_pos - 1]; + nmi = pcjr->data; + pcjr->serial_pos++; + if (pcjr->serial_pos == 42 + 1) + pcjr->serial_pos = 0; } } - static void kbd_adddata(uint16_t val) { key_queue[key_queue_end] = val; - key_queue_end = (key_queue_end + 1) & 0xf; + key_queue_end = (key_queue_end + 1) & 0xf; } - - - static void kbd_adddata_ex(uint16_t val) { - kbd_adddata_process(val, kbd_adddata); + kbd_adddata_process(val, kbd_adddata); } - static void speed_changed(void *priv) { - pcjr_t *pcjr = (pcjr_t *)priv; + pcjr_t *pcjr = (pcjr_t *) priv; recalc_timings(pcjr); } @@ -783,6 +727,7 @@ pit_irq0_timer_pcjr(int new_out, int old_out) } static const device_config_t pcjr_config[] = { + // clang-format off { .name = "display_type", .description = "Display type", @@ -798,6 +743,7 @@ static const device_config_t pcjr_config[] = { } }, { .name = "", .description = "", .type = CONFIG_END } + // clang-format on }; const device_t pcjr_device = { @@ -817,21 +763,21 @@ const device_t pcjr_device = { int machine_pcjr_init(const machine_t *model) { - int display_type; + int display_type; pcjr_t *pcjr; int ret; ret = bios_load_linear("roms/machines/ibmpcjr/bios.rom", - 0x000f0000, 65536, 0); + 0x000f0000, 65536, 0); if (bios_only || !ret) - return ret; + return ret; pcjr = malloc(sizeof(pcjr_t)); memset(pcjr, 0x00, sizeof(pcjr_t)); - pcjr->memctrl = -1; - display_type = machine_get_config_int("display_type"); + pcjr->memctrl = -1; + display_type = machine_get_config_int("display_type"); pcjr->composite = (display_type != PCJR_RGB); pic_init_pcjr(); @@ -843,10 +789,10 @@ machine_pcjr_init(const machine_t *model) video_reset(gfxcard); loadfont("roms/video/mda/mda.rom", 0); mem_mapping_add(&pcjr->mapping, 0xb8000, 0x08000, - vid_read, NULL, NULL, - vid_write, NULL, NULL, NULL, 0, pcjr); + vid_read, NULL, NULL, + vid_write, NULL, NULL, NULL, 0, pcjr); io_sethandler(0x03d0, 16, - vid_in, NULL, NULL, vid_out, NULL, NULL, pcjr); + vid_in, NULL, NULL, vid_out, NULL, NULL, pcjr); timer_add(&pcjr->timer, vid_poll, pcjr, 1); video_inform(VIDEO_FLAG_TYPE_CGA, &timing_dram); device_add_ex(&pcjr_device, pcjr); @@ -854,12 +800,12 @@ machine_pcjr_init(const machine_t *model) cgapal_rebuild(); /* Initialize the keyboard. */ - keyboard_scan = 1; + keyboard_scan = 1; key_queue_start = key_queue_end = 0; io_sethandler(0x0060, 4, - kbd_read, NULL, NULL, kbd_write, NULL, NULL, pcjr); + kbd_read, NULL, NULL, kbd_write, NULL, NULL, pcjr); io_sethandler(0x00a0, 8, - kbd_read, NULL, NULL, kbd_write, NULL, NULL, pcjr); + kbd_read, NULL, NULL, kbd_write, NULL, NULL, pcjr); timer_add(&pcjr->send_delay_timer, kbd_poll, pcjr, 1); keyboard_set_table(scancode_xt); keyboard_send = kbd_adddata_ex; @@ -872,7 +818,7 @@ machine_pcjr_init(const machine_t *model) device_add(&fdc_pcjr_device); device_add(&ns8250_pcjr_device); - serial_set_next_inst(SERIAL_MAX); /* So that serial_standalone_init() won't do anything. */ + serial_set_next_inst(SERIAL_MAX); /* So that serial_standalone_init() won't do anything. */ return ret; } diff --git a/src/machine/m_ps1.c b/src/machine/m_ps1.c index 19abb00bf..8b18dbf02 100644 --- a/src/machine/m_ps1.c +++ b/src/machine/m_ps1.c @@ -64,208 +64,198 @@ #include <86box/machine.h> #include <86box/sound.h> - typedef struct { - int model; + int model; - rom_t mid_rom, high_rom; + rom_t mid_rom, high_rom; - uint8_t ps1_91, - ps1_92, - ps1_94, - ps1_102, - ps1_103, - ps1_104, - ps1_105, - ps1_190; - int ps1_e0_addr; - uint8_t ps1_e0_regs[256]; + uint8_t ps1_91, + ps1_92, + ps1_94, + ps1_102, + ps1_103, + ps1_104, + ps1_105, + ps1_190; + int ps1_e0_addr; + uint8_t ps1_e0_regs[256]; - serial_t *uart; + serial_t *uart; } ps1_t; - static void recalc_memory(ps1_t *ps) { /* Enable first 512K */ mem_set_mem_state(0x00000, 0x80000, - (ps->ps1_e0_regs[0] & 0x01) ? - (MEM_READ_INTERNAL | MEM_WRITE_INTERNAL) : - (MEM_READ_EXTANY | MEM_WRITE_EXTANY)); + (ps->ps1_e0_regs[0] & 0x01) ? (MEM_READ_INTERNAL | MEM_WRITE_INTERNAL) : (MEM_READ_EXTANY | MEM_WRITE_EXTANY)); /* Enable 512-640K */ mem_set_mem_state(0x80000, 0x20000, - (ps->ps1_e0_regs[1] & 0x01) ? - (MEM_READ_INTERNAL | MEM_WRITE_INTERNAL) : - (MEM_READ_EXTANY | MEM_WRITE_EXTANY)); + (ps->ps1_e0_regs[1] & 0x01) ? (MEM_READ_INTERNAL | MEM_WRITE_INTERNAL) : (MEM_READ_EXTANY | MEM_WRITE_EXTANY)); } - static void ps1_write(uint16_t port, uint8_t val, void *priv) { - ps1_t *ps = (ps1_t *)priv; + ps1_t *ps = (ps1_t *) priv; switch (port) { - case 0x0092: - if (ps->model != 2011) { - if (val & 1) { - softresetx86(); - cpu_set_edx(); - } - ps->ps1_92 = val & ~1; - } else { - ps->ps1_92 = val; - } - mem_a20_alt = val & 2; - mem_a20_recalc(); - break; + case 0x0092: + if (ps->model != 2011) { + if (val & 1) { + softresetx86(); + cpu_set_edx(); + } + ps->ps1_92 = val & ~1; + } else { + ps->ps1_92 = val; + } + mem_a20_alt = val & 2; + mem_a20_recalc(); + break; - case 0x0094: - ps->ps1_94 = val; - break; + case 0x0094: + ps->ps1_94 = val; + break; - case 0x00e0: - if (ps->model != 2011) { - ps->ps1_e0_addr = val; - } - break; + case 0x00e0: + if (ps->model != 2011) { + ps->ps1_e0_addr = val; + } + break; - case 0x00e1: - if (ps->model != 2011) { - ps->ps1_e0_regs[ps->ps1_e0_addr] = val; - recalc_memory(ps); - } - break; + case 0x00e1: + if (ps->model != 2011) { + ps->ps1_e0_regs[ps->ps1_e0_addr] = val; + recalc_memory(ps); + } + break; - case 0x0102: - if (!(ps->ps1_94 & 0x80)) { - lpt1_remove(); - serial_remove(ps->uart); - if (val & 0x04) { - if (val & 0x08) - serial_setup(ps->uart, COM1_ADDR, COM1_IRQ); - else - serial_setup(ps->uart, COM2_ADDR, COM2_IRQ); - } - if (val & 0x10) { - switch ((val >> 5) & 3) - { - case 0: - lpt1_init(LPT_MDA_ADDR); - break; - case 1: - lpt1_init(LPT1_ADDR); - break; - case 2: - lpt1_init(LPT2_ADDR); - break; - } - } - ps->ps1_102 = val; - } - break; + case 0x0102: + if (!(ps->ps1_94 & 0x80)) { + lpt1_remove(); + serial_remove(ps->uart); + if (val & 0x04) { + if (val & 0x08) + serial_setup(ps->uart, COM1_ADDR, COM1_IRQ); + else + serial_setup(ps->uart, COM2_ADDR, COM2_IRQ); + } + if (val & 0x10) { + switch ((val >> 5) & 3) { + case 0: + lpt1_init(LPT_MDA_ADDR); + break; + case 1: + lpt1_init(LPT1_ADDR); + break; + case 2: + lpt1_init(LPT2_ADDR); + break; + } + } + ps->ps1_102 = val; + } + break; - case 0x0103: - ps->ps1_103 = val; - break; + case 0x0103: + ps->ps1_103 = val; + break; - case 0x0104: - ps->ps1_104 = val; - break; + case 0x0104: + ps->ps1_104 = val; + break; - case 0x0105: - ps->ps1_105 = val; - break; + case 0x0105: + ps->ps1_105 = val; + break; - case 0x0190: - ps->ps1_190 = val; - break; + case 0x0190: + ps->ps1_190 = val; + break; } } - static uint8_t ps1_read(uint16_t port, void *priv) { - ps1_t *ps = (ps1_t *)priv; + ps1_t *ps = (ps1_t *) priv; uint8_t ret = 0xff; switch (port) { - case 0x0091: - ret = ps->ps1_91; - ps->ps1_91 = 0; - break; + case 0x0091: + ret = ps->ps1_91; + ps->ps1_91 = 0; + break; - case 0x0092: - ret = ps->ps1_92; - break; + case 0x0092: + ret = ps->ps1_92; + break; - case 0x0094: - ret = ps->ps1_94; - break; + case 0x0094: + ret = ps->ps1_94; + break; - case 0x00e1: - if (ps->model != 2011) { - ret = ps->ps1_e0_regs[ps->ps1_e0_addr]; - } - break; + case 0x00e1: + if (ps->model != 2011) { + ret = ps->ps1_e0_regs[ps->ps1_e0_addr]; + } + break; - case 0x0102: - if (ps->model == 2011) - ret = ps->ps1_102 | 0x08; - else - ret = ps->ps1_102; - break; + case 0x0102: + if (ps->model == 2011) + ret = ps->ps1_102 | 0x08; + else + ret = ps->ps1_102; + break; - case 0x0103: - ret = ps->ps1_103; - break; + case 0x0103: + ret = ps->ps1_103; + break; - case 0x0104: - ret = ps->ps1_104; - break; + case 0x0104: + ret = ps->ps1_104; + break; - case 0x0105: - if (ps->model == 2011) - ret = ps->ps1_105; - else - ret = ps->ps1_105 | 0x80; - break; + case 0x0105: + if (ps->model == 2011) + ret = ps->ps1_105; + else + ret = ps->ps1_105 | 0x80; + break; - case 0x0190: - ret = ps->ps1_190; - break; + case 0x0190: + ret = ps->ps1_190; + break; - default: - break; + default: + break; } - return(ret); + return (ret); } - static void ps1_setup(int model) { ps1_t *ps; - void *priv; + void *priv; - ps = (ps1_t *)malloc(sizeof(ps1_t)); + ps = (ps1_t *) malloc(sizeof(ps1_t)); memset(ps, 0x00, sizeof(ps1_t)); ps->model = model; io_sethandler(0x0091, 1, - ps1_read, NULL, NULL, ps1_write, NULL, NULL, ps); + ps1_read, NULL, NULL, ps1_write, NULL, NULL, ps); io_sethandler(0x0092, 1, - ps1_read, NULL, NULL, ps1_write, NULL, NULL, ps); + ps1_read, NULL, NULL, ps1_write, NULL, NULL, ps); io_sethandler(0x0094, 1, - ps1_read, NULL, NULL, ps1_write, NULL, NULL, ps); + ps1_read, NULL, NULL, ps1_write, NULL, NULL, ps); io_sethandler(0x0102, 4, - ps1_read, NULL, NULL, ps1_write, NULL, NULL, ps); + ps1_read, NULL, NULL, ps1_write, NULL, NULL, ps); io_sethandler(0x0190, 1, - ps1_read, NULL, NULL, ps1_write, NULL, NULL, ps); + ps1_read, NULL, NULL, ps1_write, NULL, NULL, ps); ps->uart = device_add_inst(&ns16450_device, 1); @@ -277,47 +267,47 @@ ps1_setup(int model) device_add(&ps_nvr_device); if (model == 2011) { - rom_init(&ps->high_rom, - "roms/machines/ibmps1es/f80000.bin", - 0xf80000, 0x80000, 0x7ffff, 0, MEM_MAPPING_EXTERNAL); + rom_init(&ps->high_rom, + "roms/machines/ibmps1es/f80000.bin", + 0xf80000, 0x80000, 0x7ffff, 0, MEM_MAPPING_EXTERNAL); - lpt2_remove(); + lpt2_remove(); - device_add(&ps1snd_device); + device_add(&ps1snd_device); - device_add(&fdc_at_ps1_device); + device_add(&fdc_at_ps1_device); - /* Enable the builtin HDC. */ - if (hdc_current == 1) { - priv = device_add(&ps1_hdc_device); + /* Enable the builtin HDC. */ + if (hdc_current == 1) { + priv = device_add(&ps1_hdc_device); - ps1_hdc_inform(priv, &ps->ps1_91); - } + ps1_hdc_inform(priv, &ps->ps1_91); + } - /* Enable the PS/1 VGA controller. */ - device_add(&ps1vga_device); + /* Enable the PS/1 VGA controller. */ + device_add(&ps1vga_device); } else if (model == 2121) { - io_sethandler(0x00e0, 2, - ps1_read, NULL, NULL, ps1_write, NULL, NULL, ps); + io_sethandler(0x00e0, 2, + ps1_read, NULL, NULL, ps1_write, NULL, NULL, ps); - if (rom_present("roms/machines/ibmps1_2121/F80000.BIN")) { - rom_init(&ps->mid_rom, - "roms/machines/ibmps1_2121/F80000.BIN", - 0xf80000, 0x40000, 0x3ffff, 0, MEM_MAPPING_EXTERNAL); - } - rom_init(&ps->high_rom, - "roms/machines/ibmps1_2121/FC0000.BIN", - 0xfc0000, 0x40000, 0x3ffff, 0, MEM_MAPPING_EXTERNAL); + if (rom_present("roms/machines/ibmps1_2121/F80000.BIN")) { + rom_init(&ps->mid_rom, + "roms/machines/ibmps1_2121/F80000.BIN", + 0xf80000, 0x40000, 0x3ffff, 0, MEM_MAPPING_EXTERNAL); + } + rom_init(&ps->high_rom, + "roms/machines/ibmps1_2121/FC0000.BIN", + 0xfc0000, 0x40000, 0x3ffff, 0, MEM_MAPPING_EXTERNAL); - /* Initialize the video controller. */ - if (gfxcard == VID_INTERNAL) - device_add(&ibm_ps1_2121_device); + /* Initialize the video controller. */ + if (gfxcard == VID_INTERNAL) + device_add(&ibm_ps1_2121_device); - device_add(&fdc_at_ps1_device); + device_add(&fdc_at_ps1_device); - device_add(&ide_isa_device); + device_add(&ide_isa_device); - device_add(&ps1snd_device); + device_add(&ps1snd_device); } } @@ -339,17 +329,16 @@ ps1_common_init(const machine_t *model) standalone_gameport_type = &gameport_201_device; } - int machine_ps1_m2011_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/ibmps1es/f80000.bin", - 0x000e0000, 131072, 0x60000); + 0x000e0000, 131072, 0x60000); if (bios_only || !ret) - return ret; + return ret; ps1_common_init(model); @@ -358,17 +347,16 @@ machine_ps1_m2011_init(const machine_t *model) return ret; } - int machine_ps1_m2121_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/ibmps1_2121/FC0000.BIN", - 0x000e0000, 131072, 0x20000); + 0x000e0000, 131072, 0x20000); if (bios_only || !ret) - return ret; + return ret; ps1_common_init(model); diff --git a/src/machine/m_ps1_hdc.c b/src/machine/m_ps1_hdc.c index e7cff2478..9492fd696 100644 --- a/src/machine/m_ps1_hdc.c +++ b/src/machine/m_ps1_hdc.c @@ -101,10 +101,8 @@ #include <86box/ui.h> #include <86box/machine.h> - -#define HDC_TIME (50*TIMER_USEC) -#define HDC_TYPE_USER 47 /* user drive type */ - +#define HDC_TIME (50 * TIMER_USEC) +#define HDC_TYPE_USER 47 /* user drive type */ enum { STATE_IDLE = 0, @@ -118,45 +116,43 @@ enum { STATE_FDONE }; - /* Command values. These deviate from the XTA ones. */ -#define CMD_READ_SECTORS 0x01 /* regular read-date */ -#define CMD_READ_VERIFY 0x02 /* read for verify, no data */ -#define CMD_READ_EXT 0x03 /* read extended (ecc) */ -#define CMD_READ_ID 0x05 /* read ID mark on cyl */ -#define CMD_RECALIBRATE 0x08 /* recalibrate to track0 */ -#define CMD_WRITE_SECTORS 0x09 /* regular write-data */ -#define CMD_WRITE_VERIFY 0x0a /* write-data with verify */ -#define CMD_WRITE_EXT 0x0b /* write extended (ecc) */ -#define CMD_FORMAT_DRIVE 0x0d /* format entire disk */ -#define CMD_SEEK 0x0e /* seek */ -#define CMD_FORMAT_TRACK 0x0f /* format one track */ +#define CMD_READ_SECTORS 0x01 /* regular read-date */ +#define CMD_READ_VERIFY 0x02 /* read for verify, no data */ +#define CMD_READ_EXT 0x03 /* read extended (ecc) */ +#define CMD_READ_ID 0x05 /* read ID mark on cyl */ +#define CMD_RECALIBRATE 0x08 /* recalibrate to track0 */ +#define CMD_WRITE_SECTORS 0x09 /* regular write-data */ +#define CMD_WRITE_VERIFY 0x0a /* write-data with verify */ +#define CMD_WRITE_EXT 0x0b /* write extended (ecc) */ +#define CMD_FORMAT_DRIVE 0x0d /* format entire disk */ +#define CMD_SEEK 0x0e /* seek */ +#define CMD_FORMAT_TRACK 0x0f /* format one track */ /* Attachment Status register (reg 2R) values (IBM PS/1 2011.) */ -#define ASR_TX_EN 0x01 /* transfer enable */ -#define ASR_INT_REQ 0x02 /* interrupt request */ -#define ASR_BUSY 0x04 /* busy */ -#define ASR_DIR 0x08 /* direction */ -#define ASR_DATA_REQ 0x10 /* data request */ +#define ASR_TX_EN 0x01 /* transfer enable */ +#define ASR_INT_REQ 0x02 /* interrupt request */ +#define ASR_BUSY 0x04 /* busy */ +#define ASR_DIR 0x08 /* direction */ +#define ASR_DATA_REQ 0x10 /* data request */ /* Attachment Control register (2W) values (IBM PS/1 2011.) */ -#define ACR_DMA_EN 0x01 /* DMA enable */ -#define ACR_INT_EN 0x02 /* interrupt enable */ -#define ACR_RESET 0x80 /* reset */ +#define ACR_DMA_EN 0x01 /* DMA enable */ +#define ACR_INT_EN 0x02 /* interrupt enable */ +#define ACR_RESET 0x80 /* reset */ /* Interrupt Status register (4R) values (IBM PS/1 2011.) */ -#define ISR_EQUIP_CHECK 0x01 /* internal hardware error */ -#define ISR_ERP_INVOKED 0x02 /* error recovery invoked */ -#define ISR_CMD_REJECT 0x20 /* command reject */ -#define ISR_INVALID_CMD 0x40 /* invalid command */ -#define ISR_TERMINATION 0x80 /* termination error */ +#define ISR_EQUIP_CHECK 0x01 /* internal hardware error */ +#define ISR_ERP_INVOKED 0x02 /* error recovery invoked */ +#define ISR_CMD_REJECT 0x20 /* command reject */ +#define ISR_INVALID_CMD 0x40 /* invalid command */ +#define ISR_TERMINATION 0x80 /* termination error */ /* Attention register (4W) values (IBM PS/1 2011.) */ -#define ATT_DATA 0x10 /* data request */ -#define ATT_SSB 0x20 /* sense summary block */ -#define ATT_CSB 0x40 /* command specify block */ -#define ATT_CCB 0x80 /* command control block */ - +#define ATT_DATA 0x10 /* data request */ +#define ATT_SSB 0x20 /* sense summary block */ +#define ATT_CSB 0x40 /* command specify block */ +#define ATT_CCB 0x80 /* command control block */ /* * Define the Sense Summary Block. @@ -166,59 +162,59 @@ enum { * each command is completed, after an error, or before the * block is transferred. */ -#pragma pack(push,1) +#pragma pack(push, 1) typedef struct { /* Status byte 0. */ - uint8_t track_0 :1, /* T0 */ - mbz1 :1, /* 0 */ - mbz2 :1, /* 0 */ - cylinder_err :1, /* CE */ - write_fault :1, /* WF */ - mbz3 :1, /* 0 */ - seek_end :1, /* SE */ - not_ready :1; /* NR */ + uint8_t track_0 : 1, /* T0 */ + mbz1 : 1, /* 0 */ + mbz2 : 1, /* 0 */ + cylinder_err : 1, /* CE */ + write_fault : 1, /* WF */ + mbz3 : 1, /* 0 */ + seek_end : 1, /* SE */ + not_ready : 1; /* NR */ /* Status byte 1. */ - uint8_t id_not_found :1, /* ID */ - mbz4 :1, /* 0 */ - mbz5 :1, /* 0 */ - wrong_cyl :1, /* WC */ - all_bit_set :1, /* BT */ - mark_not_found :1, /* AM */ - ecc_crc_err :1, /* ET */ - ecc_crc_field :1; /* EF */ + uint8_t id_not_found : 1, /* ID */ + mbz4 : 1, /* 0 */ + mbz5 : 1, /* 0 */ + wrong_cyl : 1, /* WC */ + all_bit_set : 1, /* BT */ + mark_not_found : 1, /* AM */ + ecc_crc_err : 1, /* ET */ + ecc_crc_field : 1; /* EF */ /* Status byte 2. */ - uint8_t headsel_state :4, /* headsel state[4] */ - defective_sector:1, /* DS */ - retried_ok :1, /* RG */ - need_reset :1, /* RR */ + uint8_t headsel_state : 4, /* headsel state[4] */ + defective_sector : 1, /* DS */ + retried_ok : 1, /* RG */ + need_reset : 1, /* RR */ #if 1 - valid :1; /* 0 (abused as VALID) */ + valid : 1; /* 0 (abused as VALID) */ #else - mbz6 :1; /* 0 */ + mbz6 : 1; /* 0 */ #endif /* Most recent ID field seen. */ - uint8_t last_cyl_low; /* Cyl_Low[8] */ - uint8_t last_head :4, /* HD[4] */ - mbz7 :1, /* 0 */ - last_cyl_high :2, /* Cyl_high[2] */ - last_def_sect :1; /* DS */ - uint8_t last_sect; /* Sect[8] */ + uint8_t last_cyl_low; /* Cyl_Low[8] */ + uint8_t last_head : 4, /* HD[4] */ + mbz7 : 1, /* 0 */ + last_cyl_high : 2, /* Cyl_high[2] */ + last_def_sect : 1; /* DS */ + uint8_t last_sect; /* Sect[8] */ - uint8_t sect_size; /* Size[8] = 02 */ + uint8_t sect_size; /* Size[8] = 02 */ /* Current position. */ - uint8_t curr_cyl_high :2, /* Cyl_High_[2] */ - mbz8 :1, /* 0 */ - mbz9 :1, /* 0 */ - curr_head :4; /* HD_2[4] */ - uint8_t curr_cyl_low; /* Cyl_Low_2[8] */ + uint8_t curr_cyl_high : 2, /* Cyl_High_[2] */ + mbz8 : 1, /* 0 */ + mbz9 : 1, /* 0 */ + curr_head : 4; /* HD_2[4] */ + uint8_t curr_cyl_low; /* Cyl_Low_2[8] */ - uint8_t sect_corr; /* sectors corrected */ + uint8_t sect_corr; /* sectors corrected */ - uint8_t retries; /* retries */ + uint8_t retries; /* retries */ /* * This byte shows the progress of the controller through the @@ -253,11 +249,11 @@ typedef struct { * 4. When the transfer is complete, the low nibble equals hex 4 * and the high nibble is unchanged. */ - uint8_t cmd_syndrome; /* command syndrome */ + uint8_t cmd_syndrome; /* command syndrome */ - uint8_t drive_type; /* drive type */ + uint8_t drive_type; /* drive type */ - uint8_t rsvd; /* reserved byte */ + uint8_t rsvd; /* reserved byte */ } ssb_t; #pragma pack(pop) @@ -295,22 +291,22 @@ typedef struct { * being formatted, an additional byte is sent with all * bits 0. */ -#pragma pack(push,1) +#pragma pack(push, 1) typedef struct { - uint8_t cyl_high :2, /* cylinder [9:8] bits */ - defective_sector:1, /* DS */ - mbz1 :1, /* 0 */ - head :4; /* head number */ + uint8_t cyl_high : 2, /* cylinder [9:8] bits */ + defective_sector : 1, /* DS */ + mbz1 : 1, /* 0 */ + head : 4; /* head number */ - uint8_t cyl_low; /* cylinder [7:0] bits */ + uint8_t cyl_low; /* cylinder [7:0] bits */ - uint8_t sector; /* sector number */ + uint8_t sector; /* sector number */ - uint8_t mbz2 :1, /* 0 */ - mbo :1, /* 1 */ - mbz3 :6; /* 000000 */ + uint8_t mbz2 : 1, /* 0 */ + mbo : 1, /* 1 */ + mbz3 : 6; /* 000000 */ - uint8_t fill; /* filler byte */ + uint8_t fill; /* filler byte */ } fcb_t; #pragma pack(pop) @@ -321,97 +317,95 @@ typedef struct { * command control block to the controller. It can be sent * through a DMA or PIO operation. */ -#pragma pack(push,1) +#pragma pack(push, 1) typedef struct { - uint8_t ec_p :1, /* EC/P (ecc/park) */ - mbz1 :1, /* 0 */ - auto_seek :1, /* AS (auto-seek) */ - no_data :1, /* ND (no data) */ - cmd :4; /* command code[4] */ + uint8_t ec_p : 1, /* EC/P (ecc/park) */ + mbz1 : 1, /* 0 */ + auto_seek : 1, /* AS (auto-seek) */ + no_data : 1, /* ND (no data) */ + cmd : 4; /* command code[4] */ - uint8_t cyl_high :2, /* cylinder [9:8] bits */ - mbz2 :2, /* 00 */ - head :4; /* head number */ + uint8_t cyl_high : 2, /* cylinder [9:8] bits */ + mbz2 : 2, /* 00 */ + head : 4; /* head number */ - uint8_t cyl_low; /* cylinder [7:0] bits */ + uint8_t cyl_low; /* cylinder [7:0] bits */ - uint8_t sector; /* sector number */ + uint8_t sector; /* sector number */ - uint8_t mbz3 :1, /* 0 */ - mbo1 :1, /* 1 */ - mbz4 :6; /* 000000 */ + uint8_t mbz3 : 1, /* 0 */ + mbo1 : 1, /* 1 */ + mbz4 : 6; /* 000000 */ - uint8_t count; /* blk count/interleave */ + uint8_t count; /* blk count/interleave */ } ccb_t; #pragma pack(pop) /* Define the hard drive geometry table. */ typedef struct { - uint16_t cyl; - uint8_t hpc; - uint8_t spt; - int16_t wpc; - int16_t lz; + uint16_t cyl; + uint8_t hpc; + uint8_t spt; + int16_t wpc; + int16_t lz; } geom_t; /* Define an attached drive. */ typedef struct { - int8_t id, /* drive ID on bus */ - present, /* drive is present */ - hdd_num, /* index to global disk table */ - type; /* drive type ID */ + int8_t id, /* drive ID on bus */ + present, /* drive is present */ + hdd_num, /* index to global disk table */ + type; /* drive type ID */ - uint16_t cur_cyl; /* last known position of heads */ + uint16_t cur_cyl; /* last known position of heads */ - uint8_t spt, /* active drive parameters */ - hpc; - uint16_t tracks; + uint8_t spt, /* active drive parameters */ + hpc; + uint16_t tracks; - uint8_t cfg_spt, /* configured drive parameters */ - cfg_hpc; - uint16_t cfg_tracks; + uint8_t cfg_spt, /* configured drive parameters */ + cfg_hpc; + uint16_t cfg_tracks; } drive_t; - typedef struct { - uint16_t base; /* controller base I/O address */ - int8_t irq; /* controller IRQ channel */ - int8_t dma; /* controller DMA channel */ + uint16_t base; /* controller base I/O address */ + int8_t irq; /* controller IRQ channel */ + int8_t dma; /* controller DMA channel */ /* Registers. */ - uint8_t attn, /* ATTENTION register */ - ctrl, /* Control register (ACR) */ - status, /* Status register (ASR) */ - intstat; /* Interrupt Status register (ISR) */ + uint8_t attn, /* ATTENTION register */ + ctrl, /* Control register (ACR) */ + status, /* Status register (ASR) */ + intstat; /* Interrupt Status register (ISR) */ - uint8_t *reg_91; /* handle to system board's register 0x91 */ + uint8_t *reg_91; /* handle to system board's register 0x91 */ /* Controller state. */ - uint64_t callback; - pc_timer_t timer; - int8_t state, /* controller state */ - reset; /* reset state counter */ + uint64_t callback; + pc_timer_t timer; + int8_t state, /* controller state */ + reset; /* reset state counter */ /* Data transfer. */ - int16_t buf_idx, /* buffer index and pointer */ - buf_len; - uint8_t *buf_ptr; + int16_t buf_idx, /* buffer index and pointer */ + buf_len; + uint8_t *buf_ptr; /* Current operation parameters. */ - ssb_t ssb; /* sense block */ - ccb_t ccb; /* command control block */ - uint16_t track; /* requested track# */ - uint8_t head, /* requested head# */ - sector; /* requested sector# */ - int count; /* requested sector count */ + ssb_t ssb; /* sense block */ + ccb_t ccb; /* command control block */ + uint16_t track; /* requested track# */ + uint8_t head, /* requested head# */ + sector; /* requested sector# */ + int count; /* requested sector count */ - drive_t drives[XTA_NUM]; /* the attached drive(s) */ + drive_t drives[XTA_NUM]; /* the attached drive(s) */ - uint8_t data[512]; /* data buffer */ - uint8_t sector_buf[512]; /* sector buffer */ + uint8_t data[512]; /* data buffer */ + uint8_t sector_buf[512]; /* sector buffer */ } hdc_t; - /* * IBM hard drive types 1-44. * @@ -422,6 +416,7 @@ typedef struct { * p-comp Zone */ static const geom_t ibm_type_table[] = { + // clang-format off { 0, 0, 0, 0, 0 }, /* 0 (none) */ { 306, 4, 17, 128, 305 }, /* 1 10 MB */ { 615, 4, 17, 300, 615 }, /* 2 20 MB */ @@ -467,43 +462,41 @@ static const geom_t ibm_type_table[] = { { 654, 2, 32, -1, 674 }, /* 42 20 MB */ { 923, 5, 36, -1, 1023 }, /* 43 81 MB */ { 531, 8, 39, -1, 532 } /* 44 81 MB */ + // clang-format on }; - #ifdef ENABLE_PS1_HDC_LOG int ps1_hdc_do_log = ENABLE_PS1_HDC_LOG; - static void ps1_hdc_log(const char *fmt, ...) { - va_list ap; + va_list ap; - if (ps1_hdc_do_log) - { - va_start(ap, fmt); - pclog_ex(fmt, ap); - va_end(ap); - } + if (ps1_hdc_do_log) { + va_start(ap, fmt); + pclog_ex(fmt, ap); + va_end(ap); + } } #else -#define ps1_hdc_log(fmt, ...) +# define ps1_hdc_log(fmt, ...) #endif static void hdc_set_callback(hdc_t *dev, uint64_t callback) { if (!dev) { - return; + return; } if (callback) { - dev->callback = callback; - timer_set_delay_u64(&dev->timer, dev->callback); - } else { - dev->callback = 0; - timer_disable(&dev->timer); - } + dev->callback = callback; + timer_set_delay_u64(&dev->timer, dev->callback); + } else { + dev->callback = 0; + timer_disable(&dev->timer); + } } /* FIXME: we should use the disk/hdd_table.c code with custom tables! */ @@ -511,80 +504,75 @@ static int ibm_drive_type(drive_t *drive) { const geom_t *ptr; - int i; + int i; for (i = 0; i < (sizeof(ibm_type_table) / sizeof(geom_t)); i++) { - ptr = &ibm_type_table[i]; - if ((drive->tracks == ptr->cyl) && - (drive->hpc == ptr->hpc) && (drive->spt == ptr->spt)) return(i); + ptr = &ibm_type_table[i]; + if ((drive->tracks == ptr->cyl) && (drive->hpc == ptr->hpc) && (drive->spt == ptr->spt)) + return (i); } - return(HDC_TYPE_USER); + return (HDC_TYPE_USER); } - static void set_intr(hdc_t *dev, int raise) { if (raise) { - dev->status |= ASR_INT_REQ; - if (dev->ctrl & ACR_INT_EN) - picint(1 << dev->irq); + dev->status |= ASR_INT_REQ; + if (dev->ctrl & ACR_INT_EN) + picint(1 << dev->irq); } else { - dev->status &= ~ASR_INT_REQ; - picintc(1 << dev->irq); + dev->status &= ~ASR_INT_REQ; + picintc(1 << dev->irq); } } - /* Get the logical (block) address of a CHS triplet. */ static int get_sector(hdc_t *dev, drive_t *drive, off64_t *addr) { if (drive->cur_cyl != dev->track) { - ps1_hdc_log("HDC: get_sector: wrong cylinder %d/%d\n", - drive->cur_cyl, dev->track); - dev->ssb.wrong_cyl = 1; - return(1); + ps1_hdc_log("HDC: get_sector: wrong cylinder %d/%d\n", + drive->cur_cyl, dev->track); + dev->ssb.wrong_cyl = 1; + return (1); } if (dev->head >= drive->hpc) { - ps1_hdc_log("HDC: get_sector: past end of heads\n"); - dev->ssb.cylinder_err = 1; - return(1); + ps1_hdc_log("HDC: get_sector: past end of heads\n"); + dev->ssb.cylinder_err = 1; + return (1); } if (dev->sector > drive->spt) { - ps1_hdc_log("HDC: get_sector: past end of sectors\n"); - dev->ssb.mark_not_found = 1; - return(1); + ps1_hdc_log("HDC: get_sector: past end of sectors\n"); + dev->ssb.mark_not_found = 1; + return (1); } /* Calculate logical address (block number) of desired sector. */ - *addr = ((((off64_t) dev->track*drive->hpc) + \ - dev->head)*drive->spt) + dev->sector - 1; + *addr = ((((off64_t) dev->track * drive->hpc) + dev->head) * drive->spt) + dev->sector - 1; - return(0); + return (0); } - static void next_sector(hdc_t *dev, drive_t *drive) { if (++dev->sector > drive->spt) { - dev->sector = 1; - if (++dev->head >= drive->hpc) { - dev->head = 0; - dev->track++; - if (++drive->cur_cyl >= drive->tracks) { - drive->cur_cyl = drive->tracks-1; - dev->ssb.cylinder_err = 1; - } - } + dev->sector = 1; + if (++dev->head >= drive->hpc) { + dev->head = 0; + dev->track++; + if (++drive->cur_cyl >= drive->tracks) { + drive->cur_cyl = drive->tracks - 1; + dev->ssb.cylinder_err = 1; + } + } } } - /* Finish up. Repeated all over, so a function it is now. */ static void do_finish(hdc_t *dev) @@ -598,29 +586,27 @@ do_finish(hdc_t *dev) set_intr(dev, 1); } - /* Seek to a cylinder. */ static int do_seek(hdc_t *dev, drive_t *drive, uint16_t cyl) { if (cyl >= drive->tracks) { - dev->ssb.cylinder_err = 1; - return(1); + dev->ssb.cylinder_err = 1; + return (1); } - dev->track = cyl; + dev->track = cyl; drive->cur_cyl = dev->track; - return(0); + return (0); } - /* Format a track or an entire drive. */ static void do_format(hdc_t *dev, drive_t *drive, ccb_t *ccb) { - int start_cyl, end_cyl; - int intr = 0, val; + int start_cyl, end_cyl; + int intr = 0, val; off64_t addr; #if 0 fcb_t *fcb; @@ -628,443 +614,441 @@ do_format(hdc_t *dev, drive_t *drive, ccb_t *ccb) /* Get the parameters from the CCB. */ if (ccb->cmd == CMD_FORMAT_DRIVE) { - start_cyl = 0; - end_cyl = drive->tracks; + start_cyl = 0; + end_cyl = drive->tracks; } else { - start_cyl = (ccb->cyl_low | (ccb->cyl_high << 8)); - end_cyl = start_cyl + 1; + start_cyl = (ccb->cyl_low | (ccb->cyl_high << 8)); + end_cyl = start_cyl + 1; } switch (dev->state) { - case STATE_IDLE: - /* Ready to transfer the FCB data in. */ - dev->state = STATE_RDATA; - dev->buf_idx = 0; - dev->buf_ptr = dev->data; - dev->buf_len = ccb->count * sizeof(fcb_t); - if (dev->buf_len & 1) - dev->buf_len++; /* must be even */ + case STATE_IDLE: + /* Ready to transfer the FCB data in. */ + dev->state = STATE_RDATA; + dev->buf_idx = 0; + dev->buf_ptr = dev->data; + dev->buf_len = ccb->count * sizeof(fcb_t); + if (dev->buf_len & 1) + dev->buf_len++; /* must be even */ - /* Enable for PIO or DMA, as needed. */ + /* Enable for PIO or DMA, as needed. */ #if NOT_USED - if (dev->ctrl & ACR_DMA_EN) - hdc_set_callback(dev, HDC_TIME); - else + if (dev->ctrl & ACR_DMA_EN) + hdc_set_callback(dev, HDC_TIME); + else #endif - dev->status |= ASR_DATA_REQ; - break; + dev->status |= ASR_DATA_REQ; + break; - case STATE_RDATA: - /* Perform DMA. */ - while (dev->buf_idx < dev->buf_len) { - val = dma_channel_read(dev->dma); - if (val == DMA_NODATA) { - dev->intstat |= ISR_EQUIP_CHECK; - dev->ssb.need_reset = 1; - intr = 1; - break; - } - dev->buf_ptr[dev->buf_idx] = (val & 0xff); - dev->buf_idx++; - } - dev->state = STATE_RDONE; - hdc_set_callback(dev, HDC_TIME); - break; + case STATE_RDATA: + /* Perform DMA. */ + while (dev->buf_idx < dev->buf_len) { + val = dma_channel_read(dev->dma); + if (val == DMA_NODATA) { + dev->intstat |= ISR_EQUIP_CHECK; + dev->ssb.need_reset = 1; + intr = 1; + break; + } + dev->buf_ptr[dev->buf_idx] = (val & 0xff); + dev->buf_idx++; + } + dev->state = STATE_RDONE; + hdc_set_callback(dev, HDC_TIME); + break; - case STATE_RDONE: - if (! (dev->ctrl & ACR_DMA_EN)) - dev->status &= ~ASR_DATA_REQ; + case STATE_RDONE: + if (!(dev->ctrl & ACR_DMA_EN)) + dev->status &= ~ASR_DATA_REQ; - /* Point to the FCB we got. */ + /* Point to the FCB we got. */ #if 0 fcb = (fcb_t *)dev->data; #endif - dev->state = STATE_FINIT; - /*FALLTHROUGH*/ + dev->state = STATE_FINIT; + /*FALLTHROUGH*/ - case STATE_FINIT: + case STATE_FINIT: do_fmt: - /* Activate the status icon. */ - ui_sb_update_icon(SB_HDD|HDD_BUS_XTA, 1); + /* Activate the status icon. */ + ui_sb_update_icon(SB_HDD | HDD_BUS_XTA, 1); - /* Seek to cylinder. */ - if (do_seek(dev, drive, start_cyl)) { - intr = 1; - break; - } - dev->head = ccb->head; - dev->sector = 1; + /* Seek to cylinder. */ + if (do_seek(dev, drive, start_cyl)) { + intr = 1; + break; + } + dev->head = ccb->head; + dev->sector = 1; - /* Get address of sector to write. */ - if (get_sector(dev, drive, &addr)) { - intr = 1; - break; - } + /* Get address of sector to write. */ + if (get_sector(dev, drive, &addr)) { + intr = 1; + break; + } - /* - * For now, we don't use the info from - * the FCB, although we should at least - * use it's "filler byte" value... - */ + /* + * For now, we don't use the info from + * the FCB, although we should at least + * use it's "filler byte" value... + */ #if 0 hdd_image_zero_ex(drive->hdd_num, addr, fcb->fill, drive->spt); #else - hdd_image_zero(drive->hdd_num, addr, drive->spt); + hdd_image_zero(drive->hdd_num, addr, drive->spt); #endif - /* Done with this track. */ - dev->state = STATE_FDONE; - /*FALLTHROUGH*/ + /* Done with this track. */ + dev->state = STATE_FDONE; + /*FALLTHROUGH*/ - case STATE_FDONE: - /* One more track done. */ - if (++start_cyl == end_cyl) { - intr = 1; - break; - } + case STATE_FDONE: + /* One more track done. */ + if (++start_cyl == end_cyl) { + intr = 1; + break; + } - /* De-activate the status icon. */ - ui_sb_update_icon(SB_HDD|HDD_BUS_XTA, 0); + /* De-activate the status icon. */ + ui_sb_update_icon(SB_HDD | HDD_BUS_XTA, 0); - /* This saves us a LOT of code. */ - dev->state = STATE_FINIT; - goto do_fmt; + /* This saves us a LOT of code. */ + dev->state = STATE_FINIT; + goto do_fmt; } /* If we errored out, go back idle. */ if (intr) { - /* De-activate the status icon. */ - ui_sb_update_icon(SB_HDD|HDD_BUS_XTA, 0); + /* De-activate the status icon. */ + ui_sb_update_icon(SB_HDD | HDD_BUS_XTA, 0); - do_finish(dev); + do_finish(dev); } } - /* Execute the CCB we just received. */ static void hdc_callback(void *priv) { - hdc_t *dev = (hdc_t *)priv; - ccb_t *ccb = &dev->ccb; + hdc_t *dev = (hdc_t *) priv; + ccb_t *ccb = &dev->ccb; drive_t *drive; - off64_t addr; - int no_data = 0; - int val; + off64_t addr; + int no_data = 0; + int val; /* Cancel timer. */ dev->callback = 0; /* Clear the SSB error bits. */ - dev->ssb.track_0 = 0; - dev->ssb.cylinder_err = 0; - dev->ssb.write_fault = 0; - dev->ssb.seek_end = 0; - dev->ssb.not_ready = 0; - dev->ssb.id_not_found = 0; - dev->ssb.wrong_cyl = 0; - dev->ssb.all_bit_set = 0; + dev->ssb.track_0 = 0; + dev->ssb.cylinder_err = 0; + dev->ssb.write_fault = 0; + dev->ssb.seek_end = 0; + dev->ssb.not_ready = 0; + dev->ssb.id_not_found = 0; + dev->ssb.wrong_cyl = 0; + dev->ssb.all_bit_set = 0; dev->ssb.mark_not_found = 0; - dev->ssb.ecc_crc_err = 0; - dev->ssb.ecc_crc_field = 0; - dev->ssb.valid = 1; + dev->ssb.ecc_crc_err = 0; + dev->ssb.ecc_crc_field = 0; + dev->ssb.valid = 1; /* We really only support one drive, but ohwell. */ drive = &dev->drives[0]; switch (ccb->cmd) { - case CMD_READ_VERIFY: - no_data = 1; - /*FALLTHROUGH*/ + case CMD_READ_VERIFY: + no_data = 1; + /*FALLTHROUGH*/ - case CMD_READ_SECTORS: - if (! drive->present) { - dev->ssb.not_ready = 1; - do_finish(dev); - return; - } + case CMD_READ_SECTORS: + if (!drive->present) { + dev->ssb.not_ready = 1; + do_finish(dev); + return; + } - switch (dev->state) { - case STATE_IDLE: - /* Seek to cylinder if requested. */ - if (ccb->auto_seek) { - if (do_seek(dev, drive, - (ccb->cyl_low|(ccb->cyl_high<<8)))) { - do_finish(dev); - return; - } - } - dev->head = ccb->head; - dev->sector = ccb->sector; + switch (dev->state) { + case STATE_IDLE: + /* Seek to cylinder if requested. */ + if (ccb->auto_seek) { + if (do_seek(dev, drive, + (ccb->cyl_low | (ccb->cyl_high << 8)))) { + do_finish(dev); + return; + } + } + dev->head = ccb->head; + dev->sector = ccb->sector; - /* Get sector count and size. */ - dev->count = (int)ccb->count; - dev->buf_len = (128 << dev->ssb.sect_size); + /* Get sector count and size. */ + dev->count = (int) ccb->count; + dev->buf_len = (128 << dev->ssb.sect_size); - dev->state = STATE_SEND; - /*FALLTHROUGH*/ + dev->state = STATE_SEND; + /*FALLTHROUGH*/ - case STATE_SEND: - /* Activate the status icon. */ - ui_sb_update_icon(SB_HDD|HDD_BUS_XTA, 1); + case STATE_SEND: + /* Activate the status icon. */ + ui_sb_update_icon(SB_HDD | HDD_BUS_XTA, 1); do_send: - /* Get address of sector to load. */ - if (get_sector(dev, drive, &addr)) { - /* De-activate the status icon. */ - ui_sb_update_icon(SB_HDD|HDD_BUS_XTA, 0); - do_finish(dev); - return; - } + /* Get address of sector to load. */ + if (get_sector(dev, drive, &addr)) { + /* De-activate the status icon. */ + ui_sb_update_icon(SB_HDD | HDD_BUS_XTA, 0); + do_finish(dev); + return; + } - /* Read the block from the image. */ - hdd_image_read(drive->hdd_num, addr, 1, - (uint8_t *)dev->sector_buf); + /* Read the block from the image. */ + hdd_image_read(drive->hdd_num, addr, 1, + (uint8_t *) dev->sector_buf); - /* Ready to transfer the data out. */ - dev->state = STATE_SDATA; - dev->buf_idx = 0; - if (no_data) { - /* Delay a bit, no actual transfer. */ - hdc_set_callback(dev, HDC_TIME); - } else { - if (dev->ctrl & ACR_DMA_EN) { - /* DMA enabled. */ - dev->buf_ptr = dev->sector_buf; - hdc_set_callback(dev, HDC_TIME); - } else { - /* No DMA, do PIO. */ - dev->status |= (ASR_DATA_REQ|ASR_DIR); + /* Ready to transfer the data out. */ + dev->state = STATE_SDATA; + dev->buf_idx = 0; + if (no_data) { + /* Delay a bit, no actual transfer. */ + hdc_set_callback(dev, HDC_TIME); + } else { + if (dev->ctrl & ACR_DMA_EN) { + /* DMA enabled. */ + dev->buf_ptr = dev->sector_buf; + hdc_set_callback(dev, HDC_TIME); + } else { + /* No DMA, do PIO. */ + dev->status |= (ASR_DATA_REQ | ASR_DIR); - /* Copy from sector to data. */ - memcpy(dev->data, - dev->sector_buf, - dev->buf_len); - dev->buf_ptr = dev->data; - } - } - break; + /* Copy from sector to data. */ + memcpy(dev->data, + dev->sector_buf, + dev->buf_len); + dev->buf_ptr = dev->data; + } + } + break; - case STATE_SDATA: - if (! no_data) { - /* Perform DMA. */ - while (dev->buf_idx < dev->buf_len) { - val = dma_channel_write(dev->dma, - *dev->buf_ptr++); - if (val == DMA_NODATA) { - ps1_hdc_log("HDC: CMD_READ_SECTORS out of data (idx=%d, len=%d)!\n", dev->buf_idx, dev->buf_len); + case STATE_SDATA: + if (!no_data) { + /* Perform DMA. */ + while (dev->buf_idx < dev->buf_len) { + val = dma_channel_write(dev->dma, + *dev->buf_ptr++); + if (val == DMA_NODATA) { + ps1_hdc_log("HDC: CMD_READ_SECTORS out of data (idx=%d, len=%d)!\n", dev->buf_idx, dev->buf_len); - /* De-activate the status icon. */ - ui_sb_update_icon(SB_HDD|HDD_BUS_XTA, 0); + /* De-activate the status icon. */ + ui_sb_update_icon(SB_HDD | HDD_BUS_XTA, 0); - dev->intstat |= ISR_EQUIP_CHECK; - dev->ssb.need_reset = 1; - do_finish(dev); - return; - } - dev->buf_idx++; - } - } - dev->state = STATE_SDONE; - hdc_set_callback(dev, HDC_TIME); - break; + dev->intstat |= ISR_EQUIP_CHECK; + dev->ssb.need_reset = 1; + do_finish(dev); + return; + } + dev->buf_idx++; + } + } + dev->state = STATE_SDONE; + hdc_set_callback(dev, HDC_TIME); + break; - case STATE_SDONE: - dev->buf_idx = 0; - if (--dev->count == 0) { - /* De-activate the status icon. */ - ui_sb_update_icon(SB_HDD|HDD_BUS_XTA, 0); + case STATE_SDONE: + dev->buf_idx = 0; + if (--dev->count == 0) { + /* De-activate the status icon. */ + ui_sb_update_icon(SB_HDD | HDD_BUS_XTA, 0); - if (! (dev->ctrl & ACR_DMA_EN)) - dev->status &= ~(ASR_DATA_REQ|ASR_DIR); - dev->ssb.cmd_syndrome = 0xD4; - do_finish(dev); - return; - } + if (!(dev->ctrl & ACR_DMA_EN)) + dev->status &= ~(ASR_DATA_REQ | ASR_DIR); + dev->ssb.cmd_syndrome = 0xD4; + do_finish(dev); + return; + } - /* Addvance to next sector. */ - next_sector(dev, drive); + /* Addvance to next sector. */ + next_sector(dev, drive); - /* This saves us a LOT of code. */ - dev->state = STATE_SEND; - goto do_send; - } - break; + /* This saves us a LOT of code. */ + dev->state = STATE_SEND; + goto do_send; + } + break; - case CMD_READ_EXT: /* READ_EXT */ - case CMD_READ_ID: /* READ_ID */ - if (! drive->present) { - dev->ssb.not_ready = 1; - do_finish(dev); - return; - } + case CMD_READ_EXT: /* READ_EXT */ + case CMD_READ_ID: /* READ_ID */ + if (!drive->present) { + dev->ssb.not_ready = 1; + do_finish(dev); + return; + } - dev->intstat |= ISR_INVALID_CMD; - do_finish(dev); - break; + dev->intstat |= ISR_INVALID_CMD; + do_finish(dev); + break; - case CMD_RECALIBRATE: /* RECALIBRATE */ - if (drive->present) { - dev->track = drive->cur_cyl = 0; - } else { - dev->ssb.not_ready = 1; - dev->intstat |= ISR_TERMINATION; - } + case CMD_RECALIBRATE: /* RECALIBRATE */ + if (drive->present) { + dev->track = drive->cur_cyl = 0; + } else { + dev->ssb.not_ready = 1; + dev->intstat |= ISR_TERMINATION; + } - do_finish(dev); - break; + do_finish(dev); + break; - case CMD_WRITE_VERIFY: - no_data = 1; - /*FALLTHROUGH*/ + case CMD_WRITE_VERIFY: + no_data = 1; + /*FALLTHROUGH*/ - case CMD_WRITE_SECTORS: - if (! drive->present) { - dev->ssb.not_ready = 1; - do_finish(dev); - return; - } + case CMD_WRITE_SECTORS: + if (!drive->present) { + dev->ssb.not_ready = 1; + do_finish(dev); + return; + } - switch (dev->state) { - case STATE_IDLE: - /* Seek to cylinder if requested. */ - if (ccb->auto_seek) { - if (do_seek(dev, drive, - (ccb->cyl_low|(ccb->cyl_high<<8)))) { - do_finish(dev); - return; - } - } - dev->head = ccb->head; - dev->sector = ccb->sector; + switch (dev->state) { + case STATE_IDLE: + /* Seek to cylinder if requested. */ + if (ccb->auto_seek) { + if (do_seek(dev, drive, + (ccb->cyl_low | (ccb->cyl_high << 8)))) { + do_finish(dev); + return; + } + } + dev->head = ccb->head; + dev->sector = ccb->sector; - /* Get sector count and size. */ - dev->count = (int)ccb->count; - dev->buf_len = (128 << dev->ssb.sect_size); + /* Get sector count and size. */ + dev->count = (int) ccb->count; + dev->buf_len = (128 << dev->ssb.sect_size); - dev->state = STATE_RECV; - /*FALLTHROUGH*/ + dev->state = STATE_RECV; + /*FALLTHROUGH*/ - case STATE_RECV: - /* Activate the status icon. */ - ui_sb_update_icon(SB_HDD|HDD_BUS_XTA, 1); + case STATE_RECV: + /* Activate the status icon. */ + ui_sb_update_icon(SB_HDD | HDD_BUS_XTA, 1); do_recv: - /* Ready to transfer the data in. */ - dev->state = STATE_RDATA; - dev->buf_idx = 0; - if (no_data) { - /* Delay a bit, no actual transfer. */ - hdc_set_callback(dev, HDC_TIME); - } else { - if (dev->ctrl & ACR_DMA_EN) { - /* DMA enabled. */ - dev->buf_ptr = dev->sector_buf; - hdc_set_callback(dev, HDC_TIME); - } else { - /* No DMA, do PIO. */ - dev->buf_ptr = dev->data; - dev->status |= ASR_DATA_REQ; - } - } - break; + /* Ready to transfer the data in. */ + dev->state = STATE_RDATA; + dev->buf_idx = 0; + if (no_data) { + /* Delay a bit, no actual transfer. */ + hdc_set_callback(dev, HDC_TIME); + } else { + if (dev->ctrl & ACR_DMA_EN) { + /* DMA enabled. */ + dev->buf_ptr = dev->sector_buf; + hdc_set_callback(dev, HDC_TIME); + } else { + /* No DMA, do PIO. */ + dev->buf_ptr = dev->data; + dev->status |= ASR_DATA_REQ; + } + } + break; - case STATE_RDATA: - if (! no_data) { - /* Perform DMA. */ - while (dev->buf_idx < dev->buf_len) { - val = dma_channel_read(dev->dma); - if (val == DMA_NODATA) { - ps1_hdc_log("HDC: CMD_WRITE_SECTORS out of data (idx=%d, len=%d)!\n", dev->buf_idx, dev->buf_len); + case STATE_RDATA: + if (!no_data) { + /* Perform DMA. */ + while (dev->buf_idx < dev->buf_len) { + val = dma_channel_read(dev->dma); + if (val == DMA_NODATA) { + ps1_hdc_log("HDC: CMD_WRITE_SECTORS out of data (idx=%d, len=%d)!\n", dev->buf_idx, dev->buf_len); - /* De-activate the status icon. */ - ui_sb_update_icon(SB_HDD|HDD_BUS_XTA, 0); + /* De-activate the status icon. */ + ui_sb_update_icon(SB_HDD | HDD_BUS_XTA, 0); - dev->intstat |= ISR_EQUIP_CHECK; - dev->ssb.need_reset = 1; - do_finish(dev); - return; - } - dev->buf_ptr[dev->buf_idx] = (val & 0xff); - dev->buf_idx++; - } - } - dev->state = STATE_RDONE; - hdc_set_callback(dev, HDC_TIME); - break; + dev->intstat |= ISR_EQUIP_CHECK; + dev->ssb.need_reset = 1; + do_finish(dev); + return; + } + dev->buf_ptr[dev->buf_idx] = (val & 0xff); + dev->buf_idx++; + } + } + dev->state = STATE_RDONE; + hdc_set_callback(dev, HDC_TIME); + break; - case STATE_RDONE: - /* Copy from data to sector if PIO. */ - if (! (dev->ctrl & ACR_DMA_EN)) - memcpy(dev->sector_buf, - dev->data, - dev->buf_len); + case STATE_RDONE: + /* Copy from data to sector if PIO. */ + if (!(dev->ctrl & ACR_DMA_EN)) + memcpy(dev->sector_buf, + dev->data, + dev->buf_len); - /* Get address of sector to write. */ - if (get_sector(dev, drive, &addr)) { - /* De-activate the status icon. */ - ui_sb_update_icon(SB_HDD|HDD_BUS_XTA, 0); + /* Get address of sector to write. */ + if (get_sector(dev, drive, &addr)) { + /* De-activate the status icon. */ + ui_sb_update_icon(SB_HDD | HDD_BUS_XTA, 0); - do_finish(dev); - return; - } + do_finish(dev); + return; + } - /* Write the block to the image. */ - hdd_image_write(drive->hdd_num, addr, 1, - (uint8_t *)dev->sector_buf); + /* Write the block to the image. */ + hdd_image_write(drive->hdd_num, addr, 1, + (uint8_t *) dev->sector_buf); - dev->buf_idx = 0; - if (--dev->count == 0) { - /* De-activate the status icon. */ - ui_sb_update_icon(SB_HDD|HDD_BUS_XTA, 0); + dev->buf_idx = 0; + if (--dev->count == 0) { + /* De-activate the status icon. */ + ui_sb_update_icon(SB_HDD | HDD_BUS_XTA, 0); - if (! (dev->ctrl & ACR_DMA_EN)) - dev->status &= ~ASR_DATA_REQ; - dev->ssb.cmd_syndrome = 0xD4; - do_finish(dev); - return; - } + if (!(dev->ctrl & ACR_DMA_EN)) + dev->status &= ~ASR_DATA_REQ; + dev->ssb.cmd_syndrome = 0xD4; + do_finish(dev); + return; + } - /* Advance to next sector. */ - next_sector(dev, drive); + /* Advance to next sector. */ + next_sector(dev, drive); - /* This saves us a LOT of code. */ - dev->state = STATE_RECV; - goto do_recv; - } - break; + /* This saves us a LOT of code. */ + dev->state = STATE_RECV; + goto do_recv; + } + break; - case CMD_FORMAT_DRIVE: - case CMD_FORMAT_TRACK: - do_format(dev, drive, ccb); - break; + case CMD_FORMAT_DRIVE: + case CMD_FORMAT_TRACK: + do_format(dev, drive, ccb); + break; - case CMD_SEEK: - if (! drive->present) { - dev->ssb.not_ready = 1; - do_finish(dev); - return; - } + case CMD_SEEK: + if (!drive->present) { + dev->ssb.not_ready = 1; + do_finish(dev); + return; + } - if (ccb->ec_p == 1) { - /* Park the heads. */ - val = do_seek(dev, drive, drive->tracks-1); - } else { - /* Seek to cylinder. */ - val = do_seek(dev, drive, - (ccb->cyl_low|(ccb->cyl_high<<8))); - } - if (! val) - dev->ssb.seek_end = 1; - do_finish(dev); - break; + if (ccb->ec_p == 1) { + /* Park the heads. */ + val = do_seek(dev, drive, drive->tracks - 1); + } else { + /* Seek to cylinder. */ + val = do_seek(dev, drive, + (ccb->cyl_low | (ccb->cyl_high << 8))); + } + if (!val) + dev->ssb.seek_end = 1; + do_finish(dev); + break; - default: - dev->intstat |= ISR_INVALID_CMD; - do_finish(dev); + default: + dev->intstat |= ISR_INVALID_CMD; + do_finish(dev); } } - /* Prepare to send the SSB block. */ static void hdc_send_ssb(hdc_t *dev) @@ -1074,24 +1058,24 @@ hdc_send_ssb(hdc_t *dev) /* We only support one drive, really, but ohwell. */ drive = &dev->drives[0]; - if (! dev->ssb.valid) { - /* Create a valid SSB. */ - memset(&dev->ssb, 0x00, sizeof(dev->ssb)); - dev->ssb.sect_size = 0x02; /* 512 bytes */ - dev->ssb.drive_type = drive->type; + if (!dev->ssb.valid) { + /* Create a valid SSB. */ + memset(&dev->ssb, 0x00, sizeof(dev->ssb)); + dev->ssb.sect_size = 0x02; /* 512 bytes */ + dev->ssb.drive_type = drive->type; } /* Update position fields. */ - dev->ssb.track_0 = !!(dev->track == 0); - dev->ssb.last_cyl_low = dev->ssb.curr_cyl_low; + dev->ssb.track_0 = !!(dev->track == 0); + dev->ssb.last_cyl_low = dev->ssb.curr_cyl_low; dev->ssb.last_cyl_high = dev->ssb.curr_cyl_high; - dev->ssb.last_head = dev->ssb.curr_head; + dev->ssb.last_head = dev->ssb.curr_head; dev->ssb.curr_cyl_high = ((dev->track >> 8) & 0x03); - dev->ssb.curr_cyl_low = (dev->track & 0xff); - dev->ssb.curr_head = (dev->head & 0x0f); + dev->ssb.curr_cyl_low = (dev->track & 0xff); + dev->ssb.curr_head = (dev->head & 0x0f); dev->ssb.headsel_state = dev->ssb.curr_head; - dev->ssb.last_sect = dev->sector; + dev->ssb.last_sect = dev->sector; /* We abuse an unused MBZ bit, so clear it. */ dev->ssb.valid = 0; @@ -1099,169 +1083,166 @@ hdc_send_ssb(hdc_t *dev) /* Set up the transfer buffer for the SSB. */ dev->buf_idx = 0; dev->buf_len = sizeof(dev->ssb); - dev->buf_ptr = (uint8_t *)&dev->ssb; + dev->buf_ptr = (uint8_t *) &dev->ssb; /* Done with the SSB. */ dev->attn &= ~ATT_SSB; } - /* Read one of the controller registers. */ static uint8_t hdc_read(uint16_t port, void *priv) { - hdc_t *dev = (hdc_t *)priv; + hdc_t *dev = (hdc_t *) priv; uint8_t ret = 0xff; /* TRM: tell system board we are alive. */ *dev->reg_91 |= 0x01; switch (port & 7) { - case 0: /* DATA register */ - if (dev->state == STATE_SDATA) { - if (dev->buf_idx > dev->buf_len) { - ps1_hdc_log("HDC: read with empty buffer!\n"); - dev->state = STATE_IDLE; - dev->intstat |= ISR_INVALID_CMD; - dev->status &= (ASR_TX_EN|ASR_DATA_REQ|ASR_DIR); - set_intr(dev, 1); - break; - } + case 0: /* DATA register */ + if (dev->state == STATE_SDATA) { + if (dev->buf_idx > dev->buf_len) { + ps1_hdc_log("HDC: read with empty buffer!\n"); + dev->state = STATE_IDLE; + dev->intstat |= ISR_INVALID_CMD; + dev->status &= (ASR_TX_EN | ASR_DATA_REQ | ASR_DIR); + set_intr(dev, 1); + break; + } - ret = dev->buf_ptr[dev->buf_idx]; - if (++dev->buf_idx == dev->buf_len) { - /* Data block sent OK. */ - dev->status &= ~(ASR_TX_EN|ASR_DATA_REQ|ASR_DIR); - dev->state = STATE_IDLE; - } - } - break; + ret = dev->buf_ptr[dev->buf_idx]; + if (++dev->buf_idx == dev->buf_len) { + /* Data block sent OK. */ + dev->status &= ~(ASR_TX_EN | ASR_DATA_REQ | ASR_DIR); + dev->state = STATE_IDLE; + } + } + break; - case 2: /* ASR */ - ret = dev->status; - break; + case 2: /* ASR */ + ret = dev->status; + break; - case 4: /* ISR */ - ret = dev->intstat; - dev->intstat = 0x00; - break; + case 4: /* ISR */ + ret = dev->intstat; + dev->intstat = 0x00; + break; } - return(ret); + return (ret); } - static void hdc_write(uint16_t port, uint8_t val, void *priv) { - hdc_t *dev = (hdc_t *)priv; + hdc_t *dev = (hdc_t *) priv; /* TRM: tell system board we are alive. */ *dev->reg_91 |= 0x01; switch (port & 7) { - case 0: /* DATA register */ - if (dev->state == STATE_RDATA) { - if (dev->buf_idx >= dev->buf_len) { - ps1_hdc_log("HDC: write with full buffer!\n"); - dev->intstat |= ISR_INVALID_CMD; - dev->status &= ~ASR_DATA_REQ; - set_intr(dev, 1); - break; - } + case 0: /* DATA register */ + if (dev->state == STATE_RDATA) { + if (dev->buf_idx >= dev->buf_len) { + ps1_hdc_log("HDC: write with full buffer!\n"); + dev->intstat |= ISR_INVALID_CMD; + dev->status &= ~ASR_DATA_REQ; + set_intr(dev, 1); + break; + } - /* Store the data into the buffer. */ - dev->buf_ptr[dev->buf_idx] = val; - if (++dev->buf_idx == dev->buf_len) { - /* We got all the data we need. */ - dev->status &= ~ASR_DATA_REQ; - dev->state = STATE_IDLE; + /* Store the data into the buffer. */ + dev->buf_ptr[dev->buf_idx] = val; + if (++dev->buf_idx == dev->buf_len) { + /* We got all the data we need. */ + dev->status &= ~ASR_DATA_REQ; + dev->state = STATE_IDLE; - /* If we were receiving a CCB, execute it. */ - if (dev->attn & ATT_CCB) { - /* - * If we were already busy with - * a CCB, then it must have had - * some new data using PIO. - */ - if (dev->status & ASR_BUSY) - dev->state = STATE_RDONE; - else - dev->status |= ASR_BUSY; + /* If we were receiving a CCB, execute it. */ + if (dev->attn & ATT_CCB) { + /* + * If we were already busy with + * a CCB, then it must have had + * some new data using PIO. + */ + if (dev->status & ASR_BUSY) + dev->state = STATE_RDONE; + else + dev->status |= ASR_BUSY; - /* Schedule command execution. */ - hdc_set_callback(dev, HDC_TIME); - } - } - } - break; + /* Schedule command execution. */ + hdc_set_callback(dev, HDC_TIME); + } + } + } + break; - case 2: /* ACR */ - dev->ctrl = val; - if (val & ACR_INT_EN) - set_intr(dev, 0); /* clear IRQ */ + case 2: /* ACR */ + dev->ctrl = val; + if (val & ACR_INT_EN) + set_intr(dev, 0); /* clear IRQ */ - if (dev->reset != 0) { - if (++dev->reset == 3) { - dev->reset = 0; + if (dev->reset != 0) { + if (++dev->reset == 3) { + dev->reset = 0; - set_intr(dev, 1); - } - break; - } + set_intr(dev, 1); + } + break; + } - if (val & ACR_RESET) - dev->reset = 1; - break; + if (val & ACR_RESET) + dev->reset = 1; + break; - case 4: /* ATTN */ - dev->status &= ~ASR_INT_REQ; - if (val & ATT_DATA) { - /* Dunno. Start PIO/DMA now? */ - } + case 4: /* ATTN */ + dev->status &= ~ASR_INT_REQ; + if (val & ATT_DATA) { + /* Dunno. Start PIO/DMA now? */ + } - if (val & ATT_SSB) { - if (dev->attn & ATT_CCB) { - /* Hey now, we're still busy for you! */ - dev->intstat |= ISR_INVALID_CMD; - set_intr(dev, 1); - break; - } + if (val & ATT_SSB) { + if (dev->attn & ATT_CCB) { + /* Hey now, we're still busy for you! */ + dev->intstat |= ISR_INVALID_CMD; + set_intr(dev, 1); + break; + } - /* OK, prepare for sending an SSB. */ - dev->attn |= ATT_SSB; + /* OK, prepare for sending an SSB. */ + dev->attn |= ATT_SSB; - /* Grab or initialize an SSB to send. */ - hdc_send_ssb(dev); + /* Grab or initialize an SSB to send. */ + hdc_send_ssb(dev); - dev->state = STATE_SDATA; - dev->status |= (ASR_TX_EN|ASR_DATA_REQ|ASR_DIR); - set_intr(dev, 1); - } + dev->state = STATE_SDATA; + dev->status |= (ASR_TX_EN | ASR_DATA_REQ | ASR_DIR); + set_intr(dev, 1); + } - if (val & ATT_CCB) { - dev->attn |= ATT_CCB; + if (val & ATT_CCB) { + dev->attn |= ATT_CCB; - /* Set up the transfer buffer for a CCB. */ - dev->buf_idx = 0; - dev->buf_len = sizeof(dev->ccb); - dev->buf_ptr = (uint8_t *)&dev->ccb; + /* Set up the transfer buffer for a CCB. */ + dev->buf_idx = 0; + dev->buf_len = sizeof(dev->ccb); + dev->buf_ptr = (uint8_t *) &dev->ccb; - dev->state = STATE_RDATA; - dev->status |= ASR_DATA_REQ; - set_intr(dev, 1); - } - break; + dev->state = STATE_RDATA; + dev->status |= ASR_DATA_REQ; + set_intr(dev, 1); + } + break; } } - static void * ps1_hdc_init(const device_t *info) { drive_t *drive; - hdc_t *dev; - int c, i; + hdc_t *dev; + int c, i; /* Allocate and initialize device block. */ dev = malloc(sizeof(hdc_t)); @@ -1269,44 +1250,45 @@ ps1_hdc_init(const device_t *info) /* Set up controller parameters for PS/1 2011. */ dev->base = 0x0320; - dev->irq = 14; - dev->dma = 3; + dev->irq = 14; + dev->dma = 3; ps1_hdc_log("HDC: initializing (I/O=%04X, IRQ=%d, DMA=%d)\n", - dev->base, dev->irq, dev->dma); + dev->base, dev->irq, dev->dma); /* Load any disks for this device class. */ c = 0; for (i = 0; i < HDD_NUM; i++) { - if ((hdd[i].bus == HDD_BUS_XTA) && (hdd[i].xta_channel < 1)) { - drive = &dev->drives[hdd[i].xta_channel]; + if ((hdd[i].bus == HDD_BUS_XTA) && (hdd[i].xta_channel < 1)) { + drive = &dev->drives[hdd[i].xta_channel]; - if (! hdd_image_load(i)) { - drive->present = 0; - continue; - } - drive->id = c; + if (!hdd_image_load(i)) { + drive->present = 0; + continue; + } + drive->id = c; - /* These are the "hardware" parameters (from the image.) */ - drive->cfg_spt = (uint8_t)(hdd[i].spt & 0xff); - drive->cfg_hpc = (uint8_t)(hdd[i].hpc & 0xff); - drive->cfg_tracks = (uint16_t)hdd[i].tracks; + /* These are the "hardware" parameters (from the image.) */ + drive->cfg_spt = (uint8_t) (hdd[i].spt & 0xff); + drive->cfg_hpc = (uint8_t) (hdd[i].hpc & 0xff); + drive->cfg_tracks = (uint16_t) hdd[i].tracks; - /* Use them as "active" parameters until overwritten. */ - drive->spt = drive->cfg_spt; - drive->hpc = drive->cfg_hpc; - drive->tracks = drive->cfg_tracks; + /* Use them as "active" parameters until overwritten. */ + drive->spt = drive->cfg_spt; + drive->hpc = drive->cfg_hpc; + drive->tracks = drive->cfg_tracks; - drive->type = ibm_drive_type(drive); - drive->hdd_num = i; - drive->present = 1; + drive->type = ibm_drive_type(drive); + drive->hdd_num = i; + drive->present = 1; - ps1_hdc_log("HDC: drive%d (type %d: cyl=%d,hd=%d,spt=%d), disk %d\n", - hdd[i].xta_channel, drive->type, - drive->tracks, drive->hpc, drive->spt, i); + ps1_hdc_log("HDC: drive%d (type %d: cyl=%d,hd=%d,spt=%d), disk %d\n", + hdd[i].xta_channel, drive->type, + drive->tracks, drive->hpc, drive->spt, i); - if (++c > 1) break; - } + if (++c > 1) + break; + } } /* Sectors are 1-based. */ @@ -1314,32 +1296,31 @@ ps1_hdc_init(const device_t *info) /* Enable the I/O block. */ io_sethandler(dev->base, 5, - hdc_read,NULL,NULL, hdc_write,NULL,NULL, dev); + hdc_read, NULL, NULL, hdc_write, NULL, NULL, dev); /* Create a timer for command delays. */ - timer_add(&dev->timer, hdc_callback, dev, 0); + timer_add(&dev->timer, hdc_callback, dev, 0); - return(dev); + return (dev); } - static void ps1_hdc_close(void *priv) { - hdc_t *dev = (hdc_t *)priv; + hdc_t *dev = (hdc_t *) priv; drive_t *drive; - int d; + int d; /* Remove the I/O handler. */ io_removehandler(dev->base, 5, - hdc_read,NULL,NULL, hdc_write,NULL,NULL, dev); + hdc_read, NULL, NULL, hdc_write, NULL, NULL, dev); /* Close all disks and their images. */ for (d = 0; d < XTA_NUM; d++) { - drive = &dev->drives[d]; + drive = &dev->drives[d]; - if (drive->present) - hdd_image_close(drive->hdd_num); + if (drive->present) + hdd_image_close(drive->hdd_num); } /* Release the device. */ @@ -1347,17 +1328,17 @@ ps1_hdc_close(void *priv) } const device_t ps1_hdc_device = { - .name = "PS/1 2011 Fixed Disk Controller", + .name = "PS/1 2011 Fixed Disk Controller", .internal_name = "ps1_hdc", - .flags = DEVICE_ISA | DEVICE_PS2, - .local = 0, - .init = ps1_hdc_init, - .close = ps1_hdc_close, - .reset = NULL, + .flags = DEVICE_ISA | DEVICE_PS2, + .local = 0, + .init = ps1_hdc_init, + .close = ps1_hdc_close, + .reset = NULL, { .available = NULL }, .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL + .force_redraw = NULL, + .config = NULL }; /* @@ -1375,7 +1356,7 @@ const device_t ps1_hdc_device = { void ps1_hdc_inform(void *priv, uint8_t *reg_91) { - hdc_t *dev = (hdc_t *)priv; + hdc_t *dev = (hdc_t *) priv; dev->reg_91 = reg_91; } diff --git a/src/machine/m_ps2_isa.c b/src/machine/m_ps2_isa.c index 094fc8a5f..af4fc5849 100644 --- a/src/machine/m_ps2_isa.c +++ b/src/machine/m_ps2_isa.c @@ -25,28 +25,26 @@ #include <86box/video.h> #include <86box/machine.h> - typedef struct { - int model; + int model; int cpu_type; - uint8_t ps2_91, - ps2_92, - ps2_94, - ps2_102, - ps2_103, - ps2_104, - ps2_105, - ps2_190; + uint8_t ps2_91, + ps2_92, + ps2_94, + ps2_102, + ps2_103, + ps2_104, + ps2_105, + ps2_190; serial_t *uart; } ps2_isa_t; - static void ps2_write(uint16_t port, uint8_t val, void *priv) { - ps2_isa_t *ps2 = (ps2_isa_t *)priv; + ps2_isa_t *ps2 = (ps2_isa_t *) priv; switch (port) { case 0x0094: @@ -98,16 +96,15 @@ ps2_write(uint16_t port, uint8_t val, void *priv) } } - static uint8_t ps2_read(uint16_t port, void *priv) { - ps2_isa_t *ps2 = (ps2_isa_t *)priv; - uint8_t temp = 0xff; + ps2_isa_t *ps2 = (ps2_isa_t *) priv; + uint8_t temp = 0xff; switch (port) { case 0x0091: - temp = ps2->ps2_91; + temp = ps2->ps2_91; ps2->ps2_91 = 0; break; @@ -139,34 +136,32 @@ ps2_read(uint16_t port, void *priv) return temp; } - static void ps2_isa_setup(int model, int cpu_type) { ps2_isa_t *ps2; - void *priv; + void *priv; - ps2 = (ps2_isa_t *)malloc(sizeof(ps2_isa_t)); + ps2 = (ps2_isa_t *) malloc(sizeof(ps2_isa_t)); memset(ps2, 0x00, sizeof(ps2_isa_t)); - ps2->model = model; + ps2->model = model; ps2->cpu_type = cpu_type; - io_sethandler(0x0091, 1, - ps2_read, NULL, NULL, ps2_write, NULL, NULL, ps2); + ps2_read, NULL, NULL, ps2_write, NULL, NULL, ps2); io_sethandler(0x0094, 1, - ps2_read, NULL, NULL, ps2_write, NULL, NULL, ps2); + ps2_read, NULL, NULL, ps2_write, NULL, NULL, ps2); io_sethandler(0x0102, 4, - ps2_read, NULL, NULL, ps2_write, NULL, NULL, ps2); + ps2_read, NULL, NULL, ps2_write, NULL, NULL, ps2); io_sethandler(0x0190, 1, - ps2_read, NULL, NULL, ps2_write, NULL, NULL, ps2); + ps2_read, NULL, NULL, ps2_write, NULL, NULL, ps2); ps2->uart = device_add_inst(&ns16450_device, 1); lpt1_remove(); lpt1_init(LPT_MDA_ADDR); - device_add(&port_92_device); + device_add(&port_92_device); mem_remap_top(384); @@ -183,7 +178,6 @@ ps2_isa_setup(int model, int cpu_type) device_add(&ps1vga_device); } - static void ps2_isa_common_init(const machine_t *model) { @@ -199,7 +193,6 @@ ps2_isa_common_init(const machine_t *model) device_add(&port_6x_ps2_device); } - int machine_ps2_m30_286_init(const machine_t *model) { diff --git a/src/machine/m_ps2_mca.c b/src/machine/m_ps2_mca.c index 665d42972..37077ac89 100644 --- a/src/machine/m_ps2_mca.c +++ b/src/machine/m_ps2_mca.c @@ -35,7 +35,7 @@ * 59 Temple Place - Suite 330 * Boston, MA 02111-1307 * USA. -*/ + */ #include #include #include @@ -69,39 +69,38 @@ #include <86box/video.h> #include <86box/machine.h> - static struct { - uint8_t adapter_setup; - uint8_t option[4]; - uint8_t pos_vga; - uint8_t setup; - uint8_t sys_ctrl_port_a; - uint8_t subaddr_lo, subaddr_hi; + uint8_t adapter_setup; + uint8_t option[4]; + uint8_t pos_vga; + uint8_t setup; + uint8_t sys_ctrl_port_a; + uint8_t subaddr_lo, subaddr_hi; - uint8_t memory_bank[8]; + uint8_t memory_bank[8]; - uint8_t io_id; - uint16_t planar_id; + uint8_t io_id; + uint16_t planar_id; - mem_mapping_t split_mapping; - mem_mapping_t expansion_mapping; - mem_mapping_t cache_mapping; + mem_mapping_t split_mapping; + mem_mapping_t expansion_mapping; + mem_mapping_t cache_mapping; - uint8_t (*planar_read)(uint16_t port); - void (*planar_write)(uint16_t port, uint8_t val); + uint8_t (*planar_read)(uint16_t port); + void (*planar_write)(uint16_t port, uint8_t val); - uint8_t mem_regs[3]; + uint8_t mem_regs[3]; - uint32_t split_addr, split_size; - uint32_t split_phys; + uint32_t split_addr, split_size; + uint32_t split_phys; - uint8_t mem_pos_regs[8]; - uint8_t mem_2mb_pos_regs[8]; + uint8_t mem_pos_regs[8]; + uint8_t mem_2mb_pos_regs[8]; - int pending_cache_miss; + int pending_cache_miss; - serial_t *uart; + serial_t *uart; } ps2; /*The model 70 type 3/4 BIOS performs cache testing. Since 86Box doesn't have any @@ -138,703 +137,683 @@ static struct */ static uint8_t ps2_cache[65536]; -static int ps2_cache_valid[65536/8]; - +static int ps2_cache_valid[65536 / 8]; #ifdef ENABLE_PS2_MCA_LOG int ps2_mca_do_log = ENABLE_PS2_MCA_LOG; - static void ps2_mca_log(const char *fmt, ...) { va_list ap; if (ps2_mca_do_log) { - va_start(ap, fmt); - pclog_ex(fmt, ap); - va_end(ap); + va_start(ap, fmt); + pclog_ex(fmt, ap); + va_end(ap); } } #else -#define ps2_mca_log(fmt, ...) +# define ps2_mca_log(fmt, ...) #endif - -static uint8_t ps2_read_cache_ram(uint32_t addr, void *priv) +static uint8_t +ps2_read_cache_ram(uint32_t addr, void *priv) { - ps2_mca_log("ps2_read_cache_ram: addr=%08x %i %04x:%04x\n", addr, ps2_cache_valid[addr >> 3], CS,cpu_state.pc); - if (!ps2_cache_valid[addr >> 3]) - { - ps2_cache_valid[addr >> 3] = 1; - ps2.mem_regs[2] |= 0x80; - } - else - ps2.pending_cache_miss = 0; + ps2_mca_log("ps2_read_cache_ram: addr=%08x %i %04x:%04x\n", addr, ps2_cache_valid[addr >> 3], CS, cpu_state.pc); + if (!ps2_cache_valid[addr >> 3]) { + ps2_cache_valid[addr >> 3] = 1; + ps2.mem_regs[2] |= 0x80; + } else + ps2.pending_cache_miss = 0; - return ps2_cache[addr]; + return ps2_cache[addr]; } -static uint16_t ps2_read_cache_ramw(uint32_t addr, void *priv) +static uint16_t +ps2_read_cache_ramw(uint32_t addr, void *priv) { - ps2_mca_log("ps2_read_cache_ramw: addr=%08x %i %04x:%04x\n", addr, ps2_cache_valid[addr >> 3], CS,cpu_state.pc); - if (!ps2_cache_valid[addr >> 3]) - { - ps2_cache_valid[addr >> 3] = 1; - ps2.mem_regs[2] |= 0x80; - } - else - ps2.pending_cache_miss = 0; + ps2_mca_log("ps2_read_cache_ramw: addr=%08x %i %04x:%04x\n", addr, ps2_cache_valid[addr >> 3], CS, cpu_state.pc); + if (!ps2_cache_valid[addr >> 3]) { + ps2_cache_valid[addr >> 3] = 1; + ps2.mem_regs[2] |= 0x80; + } else + ps2.pending_cache_miss = 0; - return *(uint16_t *)&ps2_cache[addr]; + return *(uint16_t *) &ps2_cache[addr]; } -static uint32_t ps2_read_cache_raml(uint32_t addr, void *priv) +static uint32_t +ps2_read_cache_raml(uint32_t addr, void *priv) { - ps2_mca_log("ps2_read_cache_raml: addr=%08x %i %04x:%04x\n", addr, ps2_cache_valid[addr >> 3], CS,cpu_state.pc); - if (!ps2_cache_valid[addr >> 3]) - { - ps2_cache_valid[addr >> 3] = 1; - ps2.mem_regs[2] |= 0x80; - } - else - ps2.pending_cache_miss = 0; + ps2_mca_log("ps2_read_cache_raml: addr=%08x %i %04x:%04x\n", addr, ps2_cache_valid[addr >> 3], CS, cpu_state.pc); + if (!ps2_cache_valid[addr >> 3]) { + ps2_cache_valid[addr >> 3] = 1; + ps2.mem_regs[2] |= 0x80; + } else + ps2.pending_cache_miss = 0; - return *(uint32_t *)&ps2_cache[addr]; + return *(uint32_t *) &ps2_cache[addr]; } -static void ps2_write_cache_ram(uint32_t addr, uint8_t val, void *priv) +static void +ps2_write_cache_ram(uint32_t addr, uint8_t val, void *priv) { - ps2_mca_log("ps2_write_cache_ram: addr=%08x val=%02x %04x:%04x %i\n", addr, val, CS,cpu_state.pc); - ps2_cache[addr] = val; + ps2_mca_log("ps2_write_cache_ram: addr=%08x val=%02x %04x:%04x %i\n", addr, val, CS, cpu_state.pc); + ps2_cache[addr] = val; } -void ps2_cache_clean(void) +void +ps2_cache_clean(void) { - memset(ps2_cache_valid, 0, sizeof(ps2_cache_valid)); + memset(ps2_cache_valid, 0, sizeof(ps2_cache_valid)); } -static uint8_t ps2_read_split_ram(uint32_t addr, void *priv) +static uint8_t +ps2_read_split_ram(uint32_t addr, void *priv) { - addr = (addr % (ps2.split_size << 10)) + ps2.split_phys; - return mem_read_ram(addr, priv); + addr = (addr % (ps2.split_size << 10)) + ps2.split_phys; + return mem_read_ram(addr, priv); } -static uint16_t ps2_read_split_ramw(uint32_t addr, void *priv) +static uint16_t +ps2_read_split_ramw(uint32_t addr, void *priv) { - addr = (addr % (ps2.split_size << 10)) + ps2.split_phys; - return mem_read_ramw(addr, priv); + addr = (addr % (ps2.split_size << 10)) + ps2.split_phys; + return mem_read_ramw(addr, priv); } -static uint32_t ps2_read_split_raml(uint32_t addr, void *priv) +static uint32_t +ps2_read_split_raml(uint32_t addr, void *priv) { - addr = (addr % (ps2.split_size << 10)) + ps2.split_phys; - return mem_read_raml(addr, priv); + addr = (addr % (ps2.split_size << 10)) + ps2.split_phys; + return mem_read_raml(addr, priv); } -static void ps2_write_split_ram(uint32_t addr, uint8_t val, void *priv) +static void +ps2_write_split_ram(uint32_t addr, uint8_t val, void *priv) { - addr = (addr % (ps2.split_size << 10)) + ps2.split_phys; - mem_write_ram(addr, val, priv); + addr = (addr % (ps2.split_size << 10)) + ps2.split_phys; + mem_write_ram(addr, val, priv); } -static void ps2_write_split_ramw(uint32_t addr, uint16_t val, void *priv) +static void +ps2_write_split_ramw(uint32_t addr, uint16_t val, void *priv) { - addr = (addr % (ps2.split_size << 10)) + ps2.split_phys; - mem_write_ramw(addr, val, priv); + addr = (addr % (ps2.split_size << 10)) + ps2.split_phys; + mem_write_ramw(addr, val, priv); } -static void ps2_write_split_raml(uint32_t addr, uint32_t val, void *priv) +static void +ps2_write_split_raml(uint32_t addr, uint32_t val, void *priv) { - addr = (addr % (ps2.split_size << 10)) + ps2.split_phys; - mem_write_raml(addr, val, priv); + addr = (addr % (ps2.split_size << 10)) + ps2.split_phys; + mem_write_raml(addr, val, priv); } - -#define PS2_SETUP_IO 0x80 -#define PS2_SETUP_VGA 0x20 +#define PS2_SETUP_IO 0x80 +#define PS2_SETUP_VGA 0x20 #define PS2_ADAPTER_SETUP 0x08 -static uint8_t model_50_read(uint16_t port) +static uint8_t +model_50_read(uint16_t port) { - switch (port) - { - case 0x100: - return ps2.planar_id & 0xff; - case 0x101: - return ps2.planar_id >> 8; - case 0x102: - return ps2.option[0]; - case 0x103: - return ps2.option[1]; - case 0x104: - return ps2.option[2]; - case 0x105: - return ps2.option[3]; - case 0x106: - return ps2.subaddr_lo; - case 0x107: - return ps2.subaddr_hi; - } - return 0xff; + switch (port) { + case 0x100: + return ps2.planar_id & 0xff; + case 0x101: + return ps2.planar_id >> 8; + case 0x102: + return ps2.option[0]; + case 0x103: + return ps2.option[1]; + case 0x104: + return ps2.option[2]; + case 0x105: + return ps2.option[3]; + case 0x106: + return ps2.subaddr_lo; + case 0x107: + return ps2.subaddr_hi; + } + return 0xff; } -static uint8_t model_55sx_read(uint16_t port) +static uint8_t +model_55sx_read(uint16_t port) { - switch (port) - { - case 0x100: - return ps2.planar_id & 0xff; - case 0x101: - return ps2.planar_id >> 8; - case 0x102: - return ps2.option[0]; - case 0x103: - return ps2.option[1]; - case 0x104: - return ps2.memory_bank[ps2.option[3] & 7]; - case 0x105: - return ps2.option[3]; - case 0x106: - return ps2.subaddr_lo; - case 0x107: - return ps2.subaddr_hi; - } - return 0xff; + switch (port) { + case 0x100: + return ps2.planar_id & 0xff; + case 0x101: + return ps2.planar_id >> 8; + case 0x102: + return ps2.option[0]; + case 0x103: + return ps2.option[1]; + case 0x104: + return ps2.memory_bank[ps2.option[3] & 7]; + case 0x105: + return ps2.option[3]; + case 0x106: + return ps2.subaddr_lo; + case 0x107: + return ps2.subaddr_hi; + } + return 0xff; } -static uint8_t model_70_type3_read(uint16_t port) +static uint8_t +model_70_type3_read(uint16_t port) { - switch (port) - { - case 0x100: - return ps2.planar_id & 0xff; - case 0x101: - return ps2.planar_id >> 8; - case 0x102: - return ps2.option[0]; - case 0x103: - return ps2.option[1]; - case 0x104: - return ps2.option[2]; - case 0x105: - return ps2.option[3]; - case 0x106: - return ps2.subaddr_lo; - case 0x107: - return ps2.subaddr_hi; - } - return 0xff; + switch (port) { + case 0x100: + return ps2.planar_id & 0xff; + case 0x101: + return ps2.planar_id >> 8; + case 0x102: + return ps2.option[0]; + case 0x103: + return ps2.option[1]; + case 0x104: + return ps2.option[2]; + case 0x105: + return ps2.option[3]; + case 0x106: + return ps2.subaddr_lo; + case 0x107: + return ps2.subaddr_hi; + } + return 0xff; } -static uint8_t model_80_read(uint16_t port) +static uint8_t +model_80_read(uint16_t port) { - switch (port) - { - case 0x100: - return ps2.planar_id & 0xff; - case 0x101: - return ps2.planar_id >> 8; - case 0x102: - return ps2.option[0]; - case 0x103: - return ps2.option[1]; - case 0x104: - return ps2.option[2]; - case 0x105: - return ps2.option[3]; - case 0x106: - return ps2.subaddr_lo; - case 0x107: - return ps2.subaddr_hi; - } - return 0xff; + switch (port) { + case 0x100: + return ps2.planar_id & 0xff; + case 0x101: + return ps2.planar_id >> 8; + case 0x102: + return ps2.option[0]; + case 0x103: + return ps2.option[1]; + case 0x104: + return ps2.option[2]; + case 0x105: + return ps2.option[3]; + case 0x106: + return ps2.subaddr_lo; + case 0x107: + return ps2.subaddr_hi; + } + return 0xff; } -static void model_50_write(uint16_t port, uint8_t val) +static void +model_50_write(uint16_t port, uint8_t val) { - switch (port) - { - case 0x100: - ps2.io_id = val; - break; - case 0x101: - break; - case 0x102: - lpt1_remove(); - serial_remove(ps2.uart); - if (val & 0x04) - { - if (val & 0x08) - serial_setup(ps2.uart, COM1_ADDR, COM1_IRQ); - else - serial_setup(ps2.uart, COM2_ADDR, COM2_IRQ); + switch (port) { + case 0x100: + ps2.io_id = val; + break; + case 0x101: + break; + case 0x102: + lpt1_remove(); + serial_remove(ps2.uart); + if (val & 0x04) { + if (val & 0x08) + serial_setup(ps2.uart, COM1_ADDR, COM1_IRQ); + else + serial_setup(ps2.uart, COM2_ADDR, COM2_IRQ); + } + if (val & 0x10) { + switch ((val >> 5) & 3) { + case 0: + lpt1_init(LPT_MDA_ADDR); + break; + case 1: + lpt1_init(LPT1_ADDR); + break; + case 2: + lpt1_init(LPT2_ADDR); + break; } - if (val & 0x10) - { - switch ((val >> 5) & 3) - { - case 0: - lpt1_init(LPT_MDA_ADDR); - break; - case 1: - lpt1_init(LPT1_ADDR); - break; - case 2: - lpt1_init(LPT2_ADDR); - break; - } - } - ps2.option[0] = val; - break; - case 0x103: - ps2.option[1] = val; - break; - case 0x104: - ps2.option[2] = val; - break; - case 0x105: - ps2.option[3] = val; - break; - case 0x106: - ps2.subaddr_lo = val; - break; - case 0x107: - ps2.subaddr_hi = val; - break; - } + } + ps2.option[0] = val; + break; + case 0x103: + ps2.option[1] = val; + break; + case 0x104: + ps2.option[2] = val; + break; + case 0x105: + ps2.option[3] = val; + break; + case 0x106: + ps2.subaddr_lo = val; + break; + case 0x107: + ps2.subaddr_hi = val; + break; + } } - -static void model_55sx_mem_recalc(void) +static void +model_55sx_mem_recalc(void) { - int i, j, state; + int i, j, state; #ifdef ENABLE_PS2_MCA_LOG - int enabled_mem = 0; + int enabled_mem = 0; #endif - int base = 0, remap_size = (ps2.option[3] & 0x10) ? 384 : 256; - int bit_mask = 0x00, max_rows = 4; - int bank_to_rows[16] = { 4, 2, 1, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 2, 1, 0 }; + int base = 0, remap_size = (ps2.option[3] & 0x10) ? 384 : 256; + int bit_mask = 0x00, max_rows = 4; + int bank_to_rows[16] = { 4, 2, 1, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 2, 1, 0 }; - ps2_mca_log("%02X %02X\n", ps2.option[1], ps2.option[3]); + ps2_mca_log("%02X %02X\n", ps2.option[1], ps2.option[3]); - mem_remap_top(remap_size); - mem_set_mem_state(0x00000000, (mem_size + 384) * 1024, MEM_READ_EXTERNAL | MEM_WRITE_EXTERNAL); - mem_set_mem_state(0x000e0000, 0x00020000, MEM_READ_EXTANY | MEM_WRITE_DISABLED); + mem_remap_top(remap_size); + mem_set_mem_state(0x00000000, (mem_size + 384) * 1024, MEM_READ_EXTERNAL | MEM_WRITE_EXTERNAL); + mem_set_mem_state(0x000e0000, 0x00020000, MEM_READ_EXTANY | MEM_WRITE_DISABLED); - for (i = 0; i < 2; i++) - { - max_rows = bank_to_rows[(ps2.memory_bank[i] >> 4) & 0x0f]; + for (i = 0; i < 2; i++) { + max_rows = bank_to_rows[(ps2.memory_bank[i] >> 4) & 0x0f]; - if (max_rows == 0) - continue; + if (max_rows == 0) + continue; - for (j = 0; j < max_rows; j++) - { - if (ps2.memory_bank[i] & (1 << j)) { - ps2_mca_log("Set memory at %06X-%06X to internal\n", (base * 1024), (base * 1024) + (((base > 0) ? 1024 : 640) * 1024) - 1); - mem_set_mem_state(base * 1024, ((base > 0) ? 1024 : 640) * 1024, MEM_READ_INTERNAL | MEM_WRITE_INTERNAL); + for (j = 0; j < max_rows; j++) { + if (ps2.memory_bank[i] & (1 << j)) { + ps2_mca_log("Set memory at %06X-%06X to internal\n", (base * 1024), (base * 1024) + (((base > 0) ? 1024 : 640) * 1024) - 1); + mem_set_mem_state(base * 1024, ((base > 0) ? 1024 : 640) * 1024, MEM_READ_INTERNAL | MEM_WRITE_INTERNAL); #ifdef ENABLE_PS2_MCA_LOG - enabled_mem += 1024; + enabled_mem += 1024; #endif - bit_mask |= (1 << (j + (i << 2))); - } - base += 1024; - } - } + bit_mask |= (1 << (j + (i << 2))); + } + base += 1024; + } + } #ifdef ENABLE_PS2_MCA_LOG - ps2_mca_log("Enabled memory: %i kB (%02X)\n", enabled_mem, bit_mask); + ps2_mca_log("Enabled memory: %i kB (%02X)\n", enabled_mem, bit_mask); #endif - if (ps2.option[3] & 0x10) - { - /* Enable ROM. */ - ps2_mca_log("Enable ROM\n"); - state = MEM_READ_EXTANY; - } - else - { - /* Disable ROM. */ - if ((ps2.option[1] & 1) && !(ps2.option[3] & 0x20) && (bit_mask & 0x01)) - { - /* Disable RAM between 640 kB and 1 MB. */ - ps2_mca_log("Disable ROM, enable RAM\n"); - state = MEM_READ_INTERNAL; - } - else - { - ps2_mca_log("Disable ROM, disable RAM\n"); - state = MEM_READ_DISABLED; - } - } - - /* Write always disabled. */ - state |= MEM_WRITE_DISABLED; - - mem_set_mem_state(0xe0000, 0x20000, state); - - /* if (!(ps2.option[3] & 0x08)) - { - ps2_mca_log("Memory not yet configured\n"); - return; - } */ - - ps2_mca_log("Enable shadow mapping at %06X-%06X\n", (mem_size * 1024), (mem_size * 1024) + (remap_size * 1024) - 1); - - if ((ps2.option[1] & 1) && !(ps2.option[3] & 0x20) && (bit_mask & 0x01)) { - ps2_mca_log("Set memory at %06X-%06X to internal\n", (mem_size * 1024), (mem_size * 1024) + (remap_size * 1024) - 1); - mem_set_mem_state(mem_size * 1024, remap_size * 1024, MEM_READ_INTERNAL | MEM_WRITE_INTERNAL); - } - - flushmmucache_nopc(); -} - - -static void model_55sx_write(uint16_t port, uint8_t val) -{ - switch (port) - { - case 0x100: - ps2.io_id = val; - break; - case 0x101: - break; - case 0x102: - lpt1_remove(); - serial_remove(ps2.uart); - if (val & 0x04) - { - if (val & 0x08) - serial_setup(ps2.uart, COM1_ADDR, COM1_IRQ); - else - serial_setup(ps2.uart, COM2_ADDR, COM2_IRQ); - } - if (val & 0x10) - { - switch ((val >> 5) & 3) - { - case 0: - lpt1_init(LPT_MDA_ADDR); - break; - case 1: - lpt1_init(LPT1_ADDR); - break; - case 2: - lpt1_init(LPT2_ADDR); - break; - } - } - ps2.option[0] = val; - break; - case 0x103: - ps2_mca_log("Write POS1: %02X\n", val); - ps2.option[1] = val; - model_55sx_mem_recalc(); - break; - case 0x104: - ps2.memory_bank[ps2.option[3] & 7] &= ~0xf; - ps2.memory_bank[ps2.option[3] & 7] |= (val & 0xf); - ps2_mca_log("Write memory bank %i: %02X\n", ps2.option[3] & 7, val); - model_55sx_mem_recalc(); - break; - case 0x105: - ps2_mca_log("Write POS3: %02X\n", val); - ps2.option[3] = val; - model_55sx_mem_recalc(); - break; - case 0x106: - ps2.subaddr_lo = val; - break; - case 0x107: - ps2.subaddr_hi = val; - break; + if (ps2.option[3] & 0x10) { + /* Enable ROM. */ + ps2_mca_log("Enable ROM\n"); + state = MEM_READ_EXTANY; + } else { + /* Disable ROM. */ + if ((ps2.option[1] & 1) && !(ps2.option[3] & 0x20) && (bit_mask & 0x01)) { + /* Disable RAM between 640 kB and 1 MB. */ + ps2_mca_log("Disable ROM, enable RAM\n"); + state = MEM_READ_INTERNAL; + } else { + ps2_mca_log("Disable ROM, disable RAM\n"); + state = MEM_READ_DISABLED; } + } + + /* Write always disabled. */ + state |= MEM_WRITE_DISABLED; + + mem_set_mem_state(0xe0000, 0x20000, state); + + /* if (!(ps2.option[3] & 0x08)) + { + ps2_mca_log("Memory not yet configured\n"); + return; + } */ + + ps2_mca_log("Enable shadow mapping at %06X-%06X\n", (mem_size * 1024), (mem_size * 1024) + (remap_size * 1024) - 1); + + if ((ps2.option[1] & 1) && !(ps2.option[3] & 0x20) && (bit_mask & 0x01)) { + ps2_mca_log("Set memory at %06X-%06X to internal\n", (mem_size * 1024), (mem_size * 1024) + (remap_size * 1024) - 1); + mem_set_mem_state(mem_size * 1024, remap_size * 1024, MEM_READ_INTERNAL | MEM_WRITE_INTERNAL); + } + + flushmmucache_nopc(); } -static void model_70_type3_write(uint16_t port, uint8_t val) +static void +model_55sx_write(uint16_t port, uint8_t val) { - switch (port) - { - case 0x100: - break; - case 0x101: - break; - case 0x102: - lpt1_remove(); - serial_remove(ps2.uart); - if (val & 0x04) - { - if (val & 0x08) - serial_setup(ps2.uart, COM1_ADDR, COM1_IRQ); - else - serial_setup(ps2.uart, COM2_ADDR, COM2_IRQ); + switch (port) { + case 0x100: + ps2.io_id = val; + break; + case 0x101: + break; + case 0x102: + lpt1_remove(); + serial_remove(ps2.uart); + if (val & 0x04) { + if (val & 0x08) + serial_setup(ps2.uart, COM1_ADDR, COM1_IRQ); + else + serial_setup(ps2.uart, COM2_ADDR, COM2_IRQ); + } + if (val & 0x10) { + switch ((val >> 5) & 3) { + case 0: + lpt1_init(LPT_MDA_ADDR); + break; + case 1: + lpt1_init(LPT1_ADDR); + break; + case 2: + lpt1_init(LPT2_ADDR); + break; } - if (val & 0x10) - { - switch ((val >> 5) & 3) - { - case 0: - lpt1_init(LPT_MDA_ADDR); - break; - case 1: - lpt1_init(LPT1_ADDR); - break; - case 2: - lpt1_init(LPT2_ADDR); - break; - } - } - ps2.option[0] = val; - break; - case 0x103: - if (ps2.planar_id == 0xfff9) - ps2.option[1] = (ps2.option[1] & 0x0f) | (val & 0xf0); - break; - case 0x104: - if (ps2.planar_id == 0xfff9) - ps2.option[2] = val; - break; - case 0x105: - ps2.option[3] = val; - break; - case 0x106: - ps2.subaddr_lo = val; - break; - case 0x107: - ps2.subaddr_hi = val; - break; - } + } + ps2.option[0] = val; + break; + case 0x103: + ps2_mca_log("Write POS1: %02X\n", val); + ps2.option[1] = val; + model_55sx_mem_recalc(); + break; + case 0x104: + ps2.memory_bank[ps2.option[3] & 7] &= ~0xf; + ps2.memory_bank[ps2.option[3] & 7] |= (val & 0xf); + ps2_mca_log("Write memory bank %i: %02X\n", ps2.option[3] & 7, val); + model_55sx_mem_recalc(); + break; + case 0x105: + ps2_mca_log("Write POS3: %02X\n", val); + ps2.option[3] = val; + model_55sx_mem_recalc(); + break; + case 0x106: + ps2.subaddr_lo = val; + break; + case 0x107: + ps2.subaddr_hi = val; + break; + } } - -static void model_80_write(uint16_t port, uint8_t val) +static void +model_70_type3_write(uint16_t port, uint8_t val) { - switch (port) - { - case 0x100: - break; - case 0x101: - break; - case 0x102: - lpt1_remove(); - serial_remove(ps2.uart); - if (val & 0x04) - { - if (val & 0x08) - serial_setup(ps2.uart, COM1_ADDR, COM1_IRQ); - else - serial_setup(ps2.uart, COM2_ADDR, COM2_IRQ); + switch (port) { + case 0x100: + break; + case 0x101: + break; + case 0x102: + lpt1_remove(); + serial_remove(ps2.uart); + if (val & 0x04) { + if (val & 0x08) + serial_setup(ps2.uart, COM1_ADDR, COM1_IRQ); + else + serial_setup(ps2.uart, COM2_ADDR, COM2_IRQ); + } + if (val & 0x10) { + switch ((val >> 5) & 3) { + case 0: + lpt1_init(LPT_MDA_ADDR); + break; + case 1: + lpt1_init(LPT1_ADDR); + break; + case 2: + lpt1_init(LPT2_ADDR); + break; } - if (val & 0x10) - { - switch ((val >> 5) & 3) - { - case 0: - lpt1_init(LPT_MDA_ADDR); - break; - case 1: - lpt1_init(LPT1_ADDR); - break; - case 2: - lpt1_init(LPT2_ADDR); - break; - } - } - ps2.option[0] = val; - break; - case 0x103: + } + ps2.option[0] = val; + break; + case 0x103: + if (ps2.planar_id == 0xfff9) ps2.option[1] = (ps2.option[1] & 0x0f) | (val & 0xf0); - break; - case 0x104: + break; + case 0x104: + if (ps2.planar_id == 0xfff9) ps2.option[2] = val; - break; - case 0x105: - ps2.option[3] = val; - break; - case 0x106: - ps2.subaddr_lo = val; - break; - case 0x107: - ps2.subaddr_hi = val; - break; - } + break; + case 0x105: + ps2.option[3] = val; + break; + case 0x106: + ps2.subaddr_lo = val; + break; + case 0x107: + ps2.subaddr_hi = val; + break; + } } -uint8_t ps2_mca_read(uint16_t port, void *p) +static void +model_80_write(uint16_t port, uint8_t val) { - uint8_t temp; + switch (port) { + case 0x100: + break; + case 0x101: + break; + case 0x102: + lpt1_remove(); + serial_remove(ps2.uart); + if (val & 0x04) { + if (val & 0x08) + serial_setup(ps2.uart, COM1_ADDR, COM1_IRQ); + else + serial_setup(ps2.uart, COM2_ADDR, COM2_IRQ); + } + if (val & 0x10) { + switch ((val >> 5) & 3) { + case 0: + lpt1_init(LPT_MDA_ADDR); + break; + case 1: + lpt1_init(LPT1_ADDR); + break; + case 2: + lpt1_init(LPT2_ADDR); + break; + } + } + ps2.option[0] = val; + break; + case 0x103: + ps2.option[1] = (ps2.option[1] & 0x0f) | (val & 0xf0); + break; + case 0x104: + ps2.option[2] = val; + break; + case 0x105: + ps2.option[3] = val; + break; + case 0x106: + ps2.subaddr_lo = val; + break; + case 0x107: + ps2.subaddr_hi = val; + break; + } +} - switch (port) - { - case 0x91: - // fatal("Read 91 setup=%02x adapter=%02x\n", ps2.setup, ps2.adapter_setup); - if (!(ps2.setup & PS2_SETUP_IO)) - temp = 0x00; - else if (!(ps2.setup & PS2_SETUP_VGA)) - temp = 0x00; - else if (ps2.adapter_setup & PS2_ADAPTER_SETUP) - temp = 0x00; - else - temp = !mca_feedb(); - temp |= 0xfe; - break; - case 0x94: - temp = ps2.setup; - break; - case 0x96: - temp = ps2.adapter_setup | 0x70; - break; - case 0x100: - if (!(ps2.setup & PS2_SETUP_IO)) - temp = ps2.planar_read(port); - else if (!(ps2.setup & PS2_SETUP_VGA)) - temp = 0xfd; - else if (ps2.adapter_setup & PS2_ADAPTER_SETUP) - temp = mca_read(port); - else - temp = 0xff; - break; - case 0x101: - if (!(ps2.setup & PS2_SETUP_IO)) - temp = ps2.planar_read(port); - else if (!(ps2.setup & PS2_SETUP_VGA)) - temp = 0xef; - else if (ps2.adapter_setup & PS2_ADAPTER_SETUP) - temp = mca_read(port); - else - temp = 0xff; - break; - case 0x102: - if (!(ps2.setup & PS2_SETUP_IO)) - temp = ps2.planar_read(port); - else if (!(ps2.setup & PS2_SETUP_VGA)) - temp = ps2.pos_vga; - else if (ps2.adapter_setup & PS2_ADAPTER_SETUP) - temp = mca_read(port); - else - temp = 0xff; - break; - case 0x103: - if (!(ps2.setup & PS2_SETUP_IO)) - temp = ps2.planar_read(port); - else if ((ps2.setup & PS2_SETUP_VGA) && (ps2.adapter_setup & PS2_ADAPTER_SETUP)) - temp = mca_read(port); - else - temp = 0xff; - break; - case 0x104: - if (!(ps2.setup & PS2_SETUP_IO)) - temp = ps2.planar_read(port); - else if ((ps2.setup & PS2_SETUP_VGA) && (ps2.adapter_setup & PS2_ADAPTER_SETUP)) - temp = mca_read(port); - else - temp = 0xff; - break; - case 0x105: - if (!(ps2.setup & PS2_SETUP_IO)) - temp = ps2.planar_read(port); - else if ((ps2.setup & PS2_SETUP_VGA) && (ps2.adapter_setup & PS2_ADAPTER_SETUP)) - temp = mca_read(port); - else - temp = 0xff; - break; - case 0x106: - if (!(ps2.setup & PS2_SETUP_IO)) - temp = ps2.planar_read(port); - else if ((ps2.setup & PS2_SETUP_VGA) && (ps2.adapter_setup & PS2_ADAPTER_SETUP)) - temp = mca_read(port); - else - temp = 0xff; - break; - case 0x107: - if (!(ps2.setup & PS2_SETUP_IO)) - temp = ps2.planar_read(port); - else if ((ps2.setup & PS2_SETUP_VGA) && (ps2.adapter_setup & PS2_ADAPTER_SETUP)) - temp = mca_read(port); - else - temp = 0xff; - break; +uint8_t +ps2_mca_read(uint16_t port, void *p) +{ + uint8_t temp; - default: + switch (port) { + case 0x91: + // fatal("Read 91 setup=%02x adapter=%02x\n", ps2.setup, ps2.adapter_setup); + if (!(ps2.setup & PS2_SETUP_IO)) + temp = 0x00; + else if (!(ps2.setup & PS2_SETUP_VGA)) + temp = 0x00; + else if (ps2.adapter_setup & PS2_ADAPTER_SETUP) + temp = 0x00; + else + temp = !mca_feedb(); + temp |= 0xfe; + break; + case 0x94: + temp = ps2.setup; + break; + case 0x96: + temp = ps2.adapter_setup | 0x70; + break; + case 0x100: + if (!(ps2.setup & PS2_SETUP_IO)) + temp = ps2.planar_read(port); + else if (!(ps2.setup & PS2_SETUP_VGA)) + temp = 0xfd; + else if (ps2.adapter_setup & PS2_ADAPTER_SETUP) + temp = mca_read(port); + else temp = 0xff; - break; - } + break; + case 0x101: + if (!(ps2.setup & PS2_SETUP_IO)) + temp = ps2.planar_read(port); + else if (!(ps2.setup & PS2_SETUP_VGA)) + temp = 0xef; + else if (ps2.adapter_setup & PS2_ADAPTER_SETUP) + temp = mca_read(port); + else + temp = 0xff; + break; + case 0x102: + if (!(ps2.setup & PS2_SETUP_IO)) + temp = ps2.planar_read(port); + else if (!(ps2.setup & PS2_SETUP_VGA)) + temp = ps2.pos_vga; + else if (ps2.adapter_setup & PS2_ADAPTER_SETUP) + temp = mca_read(port); + else + temp = 0xff; + break; + case 0x103: + if (!(ps2.setup & PS2_SETUP_IO)) + temp = ps2.planar_read(port); + else if ((ps2.setup & PS2_SETUP_VGA) && (ps2.adapter_setup & PS2_ADAPTER_SETUP)) + temp = mca_read(port); + else + temp = 0xff; + break; + case 0x104: + if (!(ps2.setup & PS2_SETUP_IO)) + temp = ps2.planar_read(port); + else if ((ps2.setup & PS2_SETUP_VGA) && (ps2.adapter_setup & PS2_ADAPTER_SETUP)) + temp = mca_read(port); + else + temp = 0xff; + break; + case 0x105: + if (!(ps2.setup & PS2_SETUP_IO)) + temp = ps2.planar_read(port); + else if ((ps2.setup & PS2_SETUP_VGA) && (ps2.adapter_setup & PS2_ADAPTER_SETUP)) + temp = mca_read(port); + else + temp = 0xff; + break; + case 0x106: + if (!(ps2.setup & PS2_SETUP_IO)) + temp = ps2.planar_read(port); + else if ((ps2.setup & PS2_SETUP_VGA) && (ps2.adapter_setup & PS2_ADAPTER_SETUP)) + temp = mca_read(port); + else + temp = 0xff; + break; + case 0x107: + if (!(ps2.setup & PS2_SETUP_IO)) + temp = ps2.planar_read(port); + else if ((ps2.setup & PS2_SETUP_VGA) && (ps2.adapter_setup & PS2_ADAPTER_SETUP)) + temp = mca_read(port); + else + temp = 0xff; + break; - ps2_mca_log("ps2_read: port=%04x temp=%02x\n", port, temp); + default: + temp = 0xff; + break; + } - return temp; + ps2_mca_log("ps2_read: port=%04x temp=%02x\n", port, temp); + + return temp; } -static void ps2_mca_write(uint16_t port, uint8_t val, void *p) +static void +ps2_mca_write(uint16_t port, uint8_t val, void *p) { - ps2_mca_log("ps2_write: port=%04x val=%02x %04x:%04x\n", port, val, CS,cpu_state.pc); + ps2_mca_log("ps2_write: port=%04x val=%02x %04x:%04x\n", port, val, CS, cpu_state.pc); - switch (port) - { - case 0x94: - ps2.setup = val; - break; - case 0x96: - if ((val & 0x80) && !(ps2.adapter_setup & 0x80)) - mca_reset(); - ps2.adapter_setup = val; - mca_set_index(val & 7); - break; - case 0x100: - if (!(ps2.setup & PS2_SETUP_IO)) - ps2.planar_write(port, val); - else if ((ps2.setup & PS2_SETUP_VGA) && (ps2.adapter_setup & PS2_ADAPTER_SETUP)) - mca_write(port, val); - break; - case 0x101: - if (!(ps2.setup & PS2_SETUP_IO)) - ps2.planar_write(port, val); - else if ((ps2.setup & PS2_SETUP_VGA) && (ps2.setup & PS2_SETUP_VGA) && (ps2.adapter_setup & PS2_ADAPTER_SETUP)) - mca_write(port, val); - break; - case 0x102: - if (!(ps2.setup & PS2_SETUP_IO)) - ps2.planar_write(port, val); - else if (!(ps2.setup & PS2_SETUP_VGA)) - ps2.pos_vga = val; - else if (ps2.adapter_setup & PS2_ADAPTER_SETUP) - mca_write(port, val); - break; - case 0x103: - if (!(ps2.setup & PS2_SETUP_IO)) - ps2.planar_write(port, val); - else if (ps2.adapter_setup & PS2_ADAPTER_SETUP) - mca_write(port, val); - break; - case 0x104: - if (!(ps2.setup & PS2_SETUP_IO)) - ps2.planar_write(port, val); - else if (ps2.adapter_setup & PS2_ADAPTER_SETUP) - mca_write(port, val); - break; - case 0x105: - if (!(ps2.setup & PS2_SETUP_IO)) - ps2.planar_write(port, val); - else if (ps2.adapter_setup & PS2_ADAPTER_SETUP) - mca_write(port, val); - break; - case 0x106: - if (!(ps2.setup & PS2_SETUP_IO)) - ps2.planar_write(port, val); - else if (ps2.adapter_setup & PS2_ADAPTER_SETUP) - mca_write(port, val); - break; - case 0x107: - if (!(ps2.setup & PS2_SETUP_IO)) - ps2.planar_write(port, val); - else if (ps2.adapter_setup & PS2_ADAPTER_SETUP) - mca_write(port, val); - break; - } + switch (port) { + case 0x94: + ps2.setup = val; + break; + case 0x96: + if ((val & 0x80) && !(ps2.adapter_setup & 0x80)) + mca_reset(); + ps2.adapter_setup = val; + mca_set_index(val & 7); + break; + case 0x100: + if (!(ps2.setup & PS2_SETUP_IO)) + ps2.planar_write(port, val); + else if ((ps2.setup & PS2_SETUP_VGA) && (ps2.adapter_setup & PS2_ADAPTER_SETUP)) + mca_write(port, val); + break; + case 0x101: + if (!(ps2.setup & PS2_SETUP_IO)) + ps2.planar_write(port, val); + else if ((ps2.setup & PS2_SETUP_VGA) && (ps2.setup & PS2_SETUP_VGA) && (ps2.adapter_setup & PS2_ADAPTER_SETUP)) + mca_write(port, val); + break; + case 0x102: + if (!(ps2.setup & PS2_SETUP_IO)) + ps2.planar_write(port, val); + else if (!(ps2.setup & PS2_SETUP_VGA)) + ps2.pos_vga = val; + else if (ps2.adapter_setup & PS2_ADAPTER_SETUP) + mca_write(port, val); + break; + case 0x103: + if (!(ps2.setup & PS2_SETUP_IO)) + ps2.planar_write(port, val); + else if (ps2.adapter_setup & PS2_ADAPTER_SETUP) + mca_write(port, val); + break; + case 0x104: + if (!(ps2.setup & PS2_SETUP_IO)) + ps2.planar_write(port, val); + else if (ps2.adapter_setup & PS2_ADAPTER_SETUP) + mca_write(port, val); + break; + case 0x105: + if (!(ps2.setup & PS2_SETUP_IO)) + ps2.planar_write(port, val); + else if (ps2.adapter_setup & PS2_ADAPTER_SETUP) + mca_write(port, val); + break; + case 0x106: + if (!(ps2.setup & PS2_SETUP_IO)) + ps2.planar_write(port, val); + else if (ps2.adapter_setup & PS2_ADAPTER_SETUP) + mca_write(port, val); + break; + case 0x107: + if (!(ps2.setup & PS2_SETUP_IO)) + ps2.planar_write(port, val); + else if (ps2.adapter_setup & PS2_ADAPTER_SETUP) + mca_write(port, val); + break; + } } -static void ps2_mca_board_common_init() +static void +ps2_mca_board_common_init() { io_sethandler(0x0091, 0x0001, ps2_mca_read, NULL, NULL, ps2_mca_write, NULL, NULL, NULL); io_sethandler(0x0094, 0x0001, ps2_mca_read, NULL, NULL, ps2_mca_write, NULL, NULL, NULL); io_sethandler(0x0096, 0x0001, ps2_mca_read, NULL, NULL, ps2_mca_write, NULL, NULL, NULL); io_sethandler(0x0100, 0x0008, ps2_mca_read, NULL, NULL, ps2_mca_write, NULL, NULL, NULL); - device_add(&port_6x_ps2_device); + device_add(&port_6x_ps2_device); device_add(&port_92_device); ps2.setup = 0xff; @@ -842,385 +821,384 @@ static void ps2_mca_board_common_init() lpt1_init(LPT_MDA_ADDR); } -static uint8_t ps2_mem_expansion_read(int port, void *p) +static uint8_t +ps2_mem_expansion_read(int port, void *p) { - return ps2.mem_pos_regs[port & 7]; + return ps2.mem_pos_regs[port & 7]; } -static void ps2_mem_expansion_write(int port, uint8_t val, void *p) +static void +ps2_mem_expansion_write(int port, uint8_t val, void *p) { - if (port < 0x102 || port == 0x104) - return; + if (port < 0x102 || port == 0x104) + return; - ps2.mem_pos_regs[port & 7] = val; + ps2.mem_pos_regs[port & 7] = val; - if (ps2.mem_pos_regs[2] & 1) - mem_mapping_enable(&ps2.expansion_mapping); - else - mem_mapping_disable(&ps2.expansion_mapping); + if (ps2.mem_pos_regs[2] & 1) + mem_mapping_enable(&ps2.expansion_mapping); + else + mem_mapping_disable(&ps2.expansion_mapping); } -static uint8_t ps2_mem_expansion_feedb(void *p) +static uint8_t +ps2_mem_expansion_feedb(void *p) { - return (ps2.mem_pos_regs[2] & 1); + return (ps2.mem_pos_regs[2] & 1); } -static void ps2_mca_mem_fffc_init(int start_mb) +static void +ps2_mca_mem_fffc_init(int start_mb) { - uint32_t planar_size, expansion_start; + uint32_t planar_size, expansion_start; - planar_size = (start_mb - 1) << 20; - expansion_start = start_mb << 20; + planar_size = (start_mb - 1) << 20; + expansion_start = start_mb << 20; - mem_mapping_set_addr(&ram_high_mapping, 0x100000, planar_size); + mem_mapping_set_addr(&ram_high_mapping, 0x100000, planar_size); - ps2.mem_pos_regs[0] = 0xff; - ps2.mem_pos_regs[1] = 0xfc; + ps2.mem_pos_regs[0] = 0xff; + ps2.mem_pos_regs[1] = 0xfc; - switch ((mem_size / 1024) - start_mb) - { - case 1: - ps2.mem_pos_regs[4] = 0xfc; /* 11 11 11 00 = 0 0 0 1 */ - break; - case 2: - ps2.mem_pos_regs[4] = 0xfe; /* 11 11 11 10 = 0 0 0 2 */ - break; - case 3: - ps2.mem_pos_regs[4] = 0xf2; /* 11 11 00 10 = 0 0 1 2 */ - break; - case 4: - ps2.mem_pos_regs[4] = 0xfa; /* 11 11 10 10 = 0 0 2 2 */ - break; - case 5: - ps2.mem_pos_regs[4] = 0xca; /* 11 00 10 10 = 0 1 2 2 */ - break; - case 6: - ps2.mem_pos_regs[4] = 0xea; /* 11 10 10 10 = 0 2 2 2 */ - break; - case 7: - ps2.mem_pos_regs[4] = 0x2a; /* 00 10 10 10 = 1 2 2 2 */ - break; - case 8: - ps2.mem_pos_regs[4] = 0xaa; /* 10 10 10 10 = 2 2 2 2 */ - break; - } + switch ((mem_size / 1024) - start_mb) { + case 1: + ps2.mem_pos_regs[4] = 0xfc; /* 11 11 11 00 = 0 0 0 1 */ + break; + case 2: + ps2.mem_pos_regs[4] = 0xfe; /* 11 11 11 10 = 0 0 0 2 */ + break; + case 3: + ps2.mem_pos_regs[4] = 0xf2; /* 11 11 00 10 = 0 0 1 2 */ + break; + case 4: + ps2.mem_pos_regs[4] = 0xfa; /* 11 11 10 10 = 0 0 2 2 */ + break; + case 5: + ps2.mem_pos_regs[4] = 0xca; /* 11 00 10 10 = 0 1 2 2 */ + break; + case 6: + ps2.mem_pos_regs[4] = 0xea; /* 11 10 10 10 = 0 2 2 2 */ + break; + case 7: + ps2.mem_pos_regs[4] = 0x2a; /* 00 10 10 10 = 1 2 2 2 */ + break; + case 8: + ps2.mem_pos_regs[4] = 0xaa; /* 10 10 10 10 = 2 2 2 2 */ + break; + } - mca_add(ps2_mem_expansion_read, ps2_mem_expansion_write, ps2_mem_expansion_feedb, NULL, NULL); - mem_mapping_add(&ps2.expansion_mapping, - expansion_start, - (mem_size - (start_mb << 10)) << 10, - mem_read_ram, - mem_read_ramw, - mem_read_raml, - mem_write_ram, - mem_write_ramw, - mem_write_raml, - &ram[expansion_start], - MEM_MAPPING_INTERNAL, - NULL); - mem_mapping_disable(&ps2.expansion_mapping); + mca_add(ps2_mem_expansion_read, ps2_mem_expansion_write, ps2_mem_expansion_feedb, NULL, NULL); + mem_mapping_add(&ps2.expansion_mapping, + expansion_start, + (mem_size - (start_mb << 10)) << 10, + mem_read_ram, + mem_read_ramw, + mem_read_raml, + mem_write_ram, + mem_write_ramw, + mem_write_raml, + &ram[expansion_start], + MEM_MAPPING_INTERNAL, + NULL); + mem_mapping_disable(&ps2.expansion_mapping); } -static void ps2_mca_mem_d071_init(int start_mb) +static void +ps2_mca_mem_d071_init(int start_mb) { - uint32_t planar_size, expansion_start; + uint32_t planar_size, expansion_start; - planar_size = (start_mb - 1) << 20; - expansion_start = start_mb << 20; + planar_size = (start_mb - 1) << 20; + expansion_start = start_mb << 20; - mem_mapping_set_addr(&ram_high_mapping, 0x100000, planar_size); + mem_mapping_set_addr(&ram_high_mapping, 0x100000, planar_size); - ps2.mem_pos_regs[0] = 0xd0; - ps2.mem_pos_regs[1] = 0x71; - ps2.mem_pos_regs[4] = (mem_size / 1024) - start_mb; + ps2.mem_pos_regs[0] = 0xd0; + ps2.mem_pos_regs[1] = 0x71; + ps2.mem_pos_regs[4] = (mem_size / 1024) - start_mb; - mca_add(ps2_mem_expansion_read, ps2_mem_expansion_write, ps2_mem_expansion_feedb, NULL, NULL); - mem_mapping_add(&ps2.expansion_mapping, - expansion_start, - (mem_size - (start_mb << 10)) << 10, - mem_read_ram, - mem_read_ramw, - mem_read_raml, - mem_write_ram, - mem_write_ramw, - mem_write_raml, - &ram[expansion_start], - MEM_MAPPING_INTERNAL, - NULL); - mem_mapping_disable(&ps2.expansion_mapping); + mca_add(ps2_mem_expansion_read, ps2_mem_expansion_write, ps2_mem_expansion_feedb, NULL, NULL); + mem_mapping_add(&ps2.expansion_mapping, + expansion_start, + (mem_size - (start_mb << 10)) << 10, + mem_read_ram, + mem_read_ramw, + mem_read_raml, + mem_write_ram, + mem_write_ramw, + mem_write_raml, + &ram[expansion_start], + MEM_MAPPING_INTERNAL, + NULL); + mem_mapping_disable(&ps2.expansion_mapping); } - -static void ps2_mca_board_model_50_init(int slots) +static void +ps2_mca_board_model_50_init(int slots) { - ps2_mca_board_common_init(); + ps2_mca_board_common_init(); - mem_remap_top(384); - mca_init(slots); - device_add(&keyboard_ps2_mca_2_device); + mem_remap_top(384); + mca_init(slots); + device_add(&keyboard_ps2_mca_2_device); - ps2.planar_read = model_50_read; - ps2.planar_write = model_50_write; + ps2.planar_read = model_50_read; + ps2.planar_write = model_50_write; - if (mem_size > 2048) - { - /* Only 2 MB supported on planar, create a memory expansion card for the rest */ - ps2_mca_mem_fffc_init(2); - } + if (mem_size > 2048) { + /* Only 2 MB supported on planar, create a memory expansion card for the rest */ + ps2_mca_mem_fffc_init(2); + } - if (gfxcard == VID_INTERNAL) - device_add(&ps1vga_mca_device); + if (gfxcard == VID_INTERNAL) + device_add(&ps1vga_mca_device); } -static void ps2_mca_board_model_55sx_init(int has_sec_nvram, int slots) +static void +ps2_mca_board_model_55sx_init(int has_sec_nvram, int slots) { - ps2_mca_board_common_init(); + ps2_mca_board_common_init(); - ps2.option[1] = 0x00; - ps2.option[2] = 0x00; - ps2.option[3] = 0x10; + ps2.option[1] = 0x00; + ps2.option[2] = 0x00; + ps2.option[3] = 0x10; - memset(ps2.memory_bank, 0xf0, 8); - switch (mem_size/1024) - { - case 1: - ps2.memory_bank[0] = 0x61; - break; - case 2: - ps2.memory_bank[0] = 0x51; - break; - case 3: - ps2.memory_bank[0] = 0x51; - ps2.memory_bank[1] = 0x61; - break; - case 4: - ps2.memory_bank[0] = 0x51; - ps2.memory_bank[1] = 0x51; - break; - case 5: - ps2.memory_bank[0] = 0x01; - ps2.memory_bank[1] = 0x61; - break; - case 6: - ps2.memory_bank[0] = 0x01; - ps2.memory_bank[1] = 0x51; - break; - case 7: /*Not supported*/ - ps2.memory_bank[0] = 0x01; - ps2.memory_bank[1] = 0x51; - break; - case 8: - ps2.memory_bank[0] = 0x01; - ps2.memory_bank[1] = 0x01; - break; - } + memset(ps2.memory_bank, 0xf0, 8); + switch (mem_size / 1024) { + case 1: + ps2.memory_bank[0] = 0x61; + break; + case 2: + ps2.memory_bank[0] = 0x51; + break; + case 3: + ps2.memory_bank[0] = 0x51; + ps2.memory_bank[1] = 0x61; + break; + case 4: + ps2.memory_bank[0] = 0x51; + ps2.memory_bank[1] = 0x51; + break; + case 5: + ps2.memory_bank[0] = 0x01; + ps2.memory_bank[1] = 0x61; + break; + case 6: + ps2.memory_bank[0] = 0x01; + ps2.memory_bank[1] = 0x51; + break; + case 7: /*Not supported*/ + ps2.memory_bank[0] = 0x01; + ps2.memory_bank[1] = 0x51; + break; + case 8: + ps2.memory_bank[0] = 0x01; + ps2.memory_bank[1] = 0x01; + break; + } - mca_init(slots); - device_add(&keyboard_ps2_mca_device); - - if (has_sec_nvram == 1) - device_add(&ps2_nvr_55ls_device); - else if (has_sec_nvram == 2) - device_add(&ps2_nvr_device); - - ps2.planar_read = model_55sx_read; - ps2.planar_write = model_55sx_write; - - if (gfxcard == VID_INTERNAL) - device_add(&ps1vga_mca_device); - - model_55sx_mem_recalc(); -} - -static void mem_encoding_update(void) -{ - mem_mapping_disable(&ps2.split_mapping); - - if (ps2.split_size > 0) - mem_set_mem_state(ps2.split_addr, ps2.split_size << 10, MEM_READ_EXTANY | MEM_WRITE_EXTANY); - if (((mem_size << 10) - (1 << 20)) > 0) - mem_set_mem_state(1 << 20, (mem_size << 10) - (1 << 20), MEM_READ_INTERNAL | MEM_WRITE_INTERNAL); - - ps2.split_addr = ((uint32_t) (ps2.mem_regs[0] & 0xf)) << 20; - if (!ps2.split_addr) - ps2.split_addr = 1 << 20; - - if (ps2.mem_regs[1] & 2) { - mem_set_mem_state(0xe0000, 0x20000, MEM_READ_EXTANY | MEM_WRITE_INTERNAL); - ps2_mca_log("PS/2 Model 80-111: ROM space enabled\n"); - } else { - mem_set_mem_state(0xe0000, 0x20000, MEM_READ_INTERNAL | MEM_WRITE_DISABLED); - ps2_mca_log("PS/2 Model 80-111: ROM space disabled\n"); - } - - if (ps2.mem_regs[1] & 4) { - mem_mapping_set_addr(&ram_low_mapping, 0x00000, 0x80000); - ps2_mca_log("PS/2 Model 80-111: 00080000- 0009FFFF disabled\n"); - } else { - mem_mapping_set_addr(&ram_low_mapping, 0x00000, 0xa0000); - ps2_mca_log("PS/2 Model 80-111: 00080000- 0009FFFF enabled\n"); - } - - if (!(ps2.mem_regs[1] & 8)) - { - if (ps2.mem_regs[1] & 4) { - ps2.split_size = 384; - ps2.split_phys = 0x80000; - } else { - ps2.split_size = 256; - ps2.split_phys = 0xa0000; - } - - mem_set_mem_state(ps2.split_addr, ps2.split_size << 10, MEM_READ_INTERNAL | MEM_WRITE_INTERNAL); - mem_mapping_set_exec(&ps2.split_mapping, &ram[ps2.split_phys]); - mem_mapping_set_addr(&ps2.split_mapping, ps2.split_addr, ps2.split_size << 10); - - ps2_mca_log("PS/2 Model 80-111: Split memory block enabled at %08X\n", ps2.split_addr); - } else { - ps2.split_size = 0; - ps2_mca_log("PS/2 Model 80-111: Split memory block disabled\n"); - } - - flushmmucache_nopc(); -} - -static uint8_t mem_encoding_read(uint16_t addr, void *p) -{ - switch (addr) - { - case 0xe0: - return ps2.mem_regs[0]; - case 0xe1: - return ps2.mem_regs[1]; - } - return 0xff; -} -static void mem_encoding_write(uint16_t addr, uint8_t val, void *p) -{ - switch (addr) - { - case 0xe0: - ps2.mem_regs[0] = val; - break; - case 0xe1: - ps2.mem_regs[1] = val; - break; - } - mem_encoding_update(); -} - -static uint8_t mem_encoding_read_cached(uint16_t addr, void *p) -{ - switch (addr) - { - case 0xe0: - return ps2.mem_regs[0]; - case 0xe1: - return ps2.mem_regs[1]; - case 0xe2: - return ps2.mem_regs[2]; - } - return 0xff; -} - -static void mem_encoding_write_cached(uint16_t addr, uint8_t val, void *p) -{ - uint8_t old; - - switch (addr) - { - case 0xe0: - ps2.mem_regs[0] = val; - break; - case 0xe1: - ps2.mem_regs[1] = val; - break; - case 0xe2: - old = ps2.mem_regs[2]; - ps2.mem_regs[2] = (ps2.mem_regs[2] & 0x80) | (val & ~0x88); - if (val & 2) - { - ps2_mca_log("Clear latch - %i\n", ps2.pending_cache_miss); - if (ps2.pending_cache_miss) - ps2.mem_regs[2] |= 0x80; - else - ps2.mem_regs[2] &= ~0x80; - ps2.pending_cache_miss = 0; - } - - if ((val & 0x21) == 0x20 && (old & 0x21) != 0x20) - ps2.pending_cache_miss = 1; - if ((val & 0x21) == 0x01 && (old & 0x21) != 0x01) - ps2_cache_clean(); -#if 1 - // FIXME: Look into this!!! - if (val & 0x01) - ram_mid_mapping.flags |= MEM_MAPPING_ROM_WS; - else - ram_mid_mapping.flags &= ~MEM_MAPPING_ROM_WS; -#endif - break; - } - ps2_mca_log("mem_encoding_write: addr=%02x val=%02x %04x:%04x %02x %02x\n", addr, val, CS,cpu_state.pc, ps2.mem_regs[1],ps2.mem_regs[2]); - mem_encoding_update(); - if ((ps2.mem_regs[1] & 0x10) && (ps2.mem_regs[2] & 0x21) == 0x20) - { - mem_mapping_disable(&ram_low_mapping); - mem_mapping_enable(&ps2.cache_mapping); - flushmmucache(); - } - else - { - mem_mapping_disable(&ps2.cache_mapping); - mem_mapping_enable(&ram_low_mapping); - flushmmucache(); - } -} - -static void ps2_mca_board_model_70_type34_init(int is_type4, int slots) -{ - ps2_mca_board_common_init(); - - ps2.split_addr = mem_size * 1024; - mca_init(slots); - device_add(&keyboard_ps2_mca_device); - - ps2.planar_read = model_70_type3_read; - ps2.planar_write = model_70_type3_write; + mca_init(slots); + device_add(&keyboard_ps2_mca_device); + if (has_sec_nvram == 1) + device_add(&ps2_nvr_55ls_device); + else if (has_sec_nvram == 2) device_add(&ps2_nvr_device); - io_sethandler(0x00e0, 0x0003, mem_encoding_read_cached, NULL, NULL, mem_encoding_write_cached, NULL, NULL, NULL); + ps2.planar_read = model_55sx_read; + ps2.planar_write = model_55sx_write; - ps2.mem_regs[1] = 2; + if (gfxcard == VID_INTERNAL) + device_add(&ps1vga_mca_device); - switch (mem_size/1024) - { - case 2: - ps2.option[1] = 0xa6; - ps2.option[2] = 0x01; - break; - case 4: - ps2.option[1] = 0xaa; - ps2.option[2] = 0x01; - break; - case 6: - ps2.option[1] = 0xca; - ps2.option[2] = 0x01; - break; - case 8: - default: - ps2.option[1] = 0xca; - ps2.option[2] = 0x02; - break; + model_55sx_mem_recalc(); +} + +static void +mem_encoding_update(void) +{ + mem_mapping_disable(&ps2.split_mapping); + + if (ps2.split_size > 0) + mem_set_mem_state(ps2.split_addr, ps2.split_size << 10, MEM_READ_EXTANY | MEM_WRITE_EXTANY); + if (((mem_size << 10) - (1 << 20)) > 0) + mem_set_mem_state(1 << 20, (mem_size << 10) - (1 << 20), MEM_READ_INTERNAL | MEM_WRITE_INTERNAL); + + ps2.split_addr = ((uint32_t) (ps2.mem_regs[0] & 0xf)) << 20; + if (!ps2.split_addr) + ps2.split_addr = 1 << 20; + + if (ps2.mem_regs[1] & 2) { + mem_set_mem_state(0xe0000, 0x20000, MEM_READ_EXTANY | MEM_WRITE_INTERNAL); + ps2_mca_log("PS/2 Model 80-111: ROM space enabled\n"); + } else { + mem_set_mem_state(0xe0000, 0x20000, MEM_READ_INTERNAL | MEM_WRITE_DISABLED); + ps2_mca_log("PS/2 Model 80-111: ROM space disabled\n"); + } + + if (ps2.mem_regs[1] & 4) { + mem_mapping_set_addr(&ram_low_mapping, 0x00000, 0x80000); + ps2_mca_log("PS/2 Model 80-111: 00080000- 0009FFFF disabled\n"); + } else { + mem_mapping_set_addr(&ram_low_mapping, 0x00000, 0xa0000); + ps2_mca_log("PS/2 Model 80-111: 00080000- 0009FFFF enabled\n"); + } + + if (!(ps2.mem_regs[1] & 8)) { + if (ps2.mem_regs[1] & 4) { + ps2.split_size = 384; + ps2.split_phys = 0x80000; + } else { + ps2.split_size = 256; + ps2.split_phys = 0xa0000; } - if (is_type4) - ps2.option[2] |= 0x04; /*486 CPU*/ + mem_set_mem_state(ps2.split_addr, ps2.split_size << 10, MEM_READ_INTERNAL | MEM_WRITE_INTERNAL); + mem_mapping_set_exec(&ps2.split_mapping, &ram[ps2.split_phys]); + mem_mapping_set_addr(&ps2.split_mapping, ps2.split_addr, ps2.split_size << 10); - mem_mapping_add(&ps2.split_mapping, - (mem_size+256) * 1024, - 256*1024, + ps2_mca_log("PS/2 Model 80-111: Split memory block enabled at %08X\n", ps2.split_addr); + } else { + ps2.split_size = 0; + ps2_mca_log("PS/2 Model 80-111: Split memory block disabled\n"); + } + + flushmmucache_nopc(); +} + +static uint8_t +mem_encoding_read(uint16_t addr, void *p) +{ + switch (addr) { + case 0xe0: + return ps2.mem_regs[0]; + case 0xe1: + return ps2.mem_regs[1]; + } + return 0xff; +} +static void +mem_encoding_write(uint16_t addr, uint8_t val, void *p) +{ + switch (addr) { + case 0xe0: + ps2.mem_regs[0] = val; + break; + case 0xe1: + ps2.mem_regs[1] = val; + break; + } + mem_encoding_update(); +} + +static uint8_t +mem_encoding_read_cached(uint16_t addr, void *p) +{ + switch (addr) { + case 0xe0: + return ps2.mem_regs[0]; + case 0xe1: + return ps2.mem_regs[1]; + case 0xe2: + return ps2.mem_regs[2]; + } + return 0xff; +} + +static void +mem_encoding_write_cached(uint16_t addr, uint8_t val, void *p) +{ + uint8_t old; + + switch (addr) { + case 0xe0: + ps2.mem_regs[0] = val; + break; + case 0xe1: + ps2.mem_regs[1] = val; + break; + case 0xe2: + old = ps2.mem_regs[2]; + ps2.mem_regs[2] = (ps2.mem_regs[2] & 0x80) | (val & ~0x88); + if (val & 2) { + ps2_mca_log("Clear latch - %i\n", ps2.pending_cache_miss); + if (ps2.pending_cache_miss) + ps2.mem_regs[2] |= 0x80; + else + ps2.mem_regs[2] &= ~0x80; + ps2.pending_cache_miss = 0; + } + + if ((val & 0x21) == 0x20 && (old & 0x21) != 0x20) + ps2.pending_cache_miss = 1; + if ((val & 0x21) == 0x01 && (old & 0x21) != 0x01) + ps2_cache_clean(); +#if 1 + // FIXME: Look into this!!! + if (val & 0x01) + ram_mid_mapping.flags |= MEM_MAPPING_ROM_WS; + else + ram_mid_mapping.flags &= ~MEM_MAPPING_ROM_WS; +#endif + break; + } + ps2_mca_log("mem_encoding_write: addr=%02x val=%02x %04x:%04x %02x %02x\n", addr, val, CS, cpu_state.pc, ps2.mem_regs[1], ps2.mem_regs[2]); + mem_encoding_update(); + if ((ps2.mem_regs[1] & 0x10) && (ps2.mem_regs[2] & 0x21) == 0x20) { + mem_mapping_disable(&ram_low_mapping); + mem_mapping_enable(&ps2.cache_mapping); + flushmmucache(); + } else { + mem_mapping_disable(&ps2.cache_mapping); + mem_mapping_enable(&ram_low_mapping); + flushmmucache(); + } +} + +static void +ps2_mca_board_model_70_type34_init(int is_type4, int slots) +{ + ps2_mca_board_common_init(); + + ps2.split_addr = mem_size * 1024; + mca_init(slots); + device_add(&keyboard_ps2_mca_device); + + ps2.planar_read = model_70_type3_read; + ps2.planar_write = model_70_type3_write; + + device_add(&ps2_nvr_device); + + io_sethandler(0x00e0, 0x0003, mem_encoding_read_cached, NULL, NULL, mem_encoding_write_cached, NULL, NULL, NULL); + + ps2.mem_regs[1] = 2; + + switch (mem_size / 1024) { + case 2: + ps2.option[1] = 0xa6; + ps2.option[2] = 0x01; + break; + case 4: + ps2.option[1] = 0xaa; + ps2.option[2] = 0x01; + break; + case 6: + ps2.option[1] = 0xca; + ps2.option[2] = 0x01; + break; + case 8: + default: + ps2.option[1] = 0xca; + ps2.option[2] = 0x02; + break; + } + + if (is_type4) + ps2.option[2] |= 0x04; /*486 CPU*/ + + mem_mapping_add(&ps2.split_mapping, + (mem_size + 256) * 1024, + 256 * 1024, ps2_read_split_ram, ps2_read_split_ramw, ps2_read_split_raml, @@ -1230,9 +1208,9 @@ static void ps2_mca_board_model_70_type34_init(int is_type4, int slots) &ram[0xa0000], MEM_MAPPING_INTERNAL, NULL); - mem_mapping_disable(&ps2.split_mapping); + mem_mapping_disable(&ps2.split_mapping); - mem_mapping_add(&ps2.cache_mapping, + mem_mapping_add(&ps2.cache_mapping, 0, (is_type4) ? (8 * 1024) : (64 * 1024), ps2_read_cache_ram, @@ -1244,84 +1222,82 @@ static void ps2_mca_board_model_70_type34_init(int is_type4, int slots) ps2_cache, MEM_MAPPING_INTERNAL, NULL); - mem_mapping_disable(&ps2.cache_mapping); + mem_mapping_disable(&ps2.cache_mapping); - if (ps2.planar_id == 0xfff9) { - if (mem_size > 4096) - { - /* Only 4 MB supported on planar, create a memory expansion card for the rest */ - if (mem_size > 12288) { - ps2_mca_mem_d071_init(4); - } else { - ps2_mca_mem_fffc_init(4); - } - } - } else { - if (mem_size > 8192) - { - /* Only 8 MB supported on planar, create a memory expansion card for the rest */ - if (mem_size > 16384) - ps2_mca_mem_d071_init(8); - else { - ps2_mca_mem_fffc_init(8); - } - } - } + if (ps2.planar_id == 0xfff9) { + if (mem_size > 4096) { + /* Only 4 MB supported on planar, create a memory expansion card for the rest */ + if (mem_size > 12288) { + ps2_mca_mem_d071_init(4); + } else { + ps2_mca_mem_fffc_init(4); + } + } + } else { + if (mem_size > 8192) { + /* Only 8 MB supported on planar, create a memory expansion card for the rest */ + if (mem_size > 16384) + ps2_mca_mem_d071_init(8); + else { + ps2_mca_mem_fffc_init(8); + } + } + } - if (gfxcard == VID_INTERNAL) - device_add(&ps1vga_mca_device); + if (gfxcard == VID_INTERNAL) + device_add(&ps1vga_mca_device); } -static void ps2_mca_board_model_80_type2_init(int is486) +static void +ps2_mca_board_model_80_type2_init(int is486) { - ps2_mca_board_common_init(); + ps2_mca_board_common_init(); - ps2.split_addr = mem_size * 1024; - mca_init(8); - device_add(&keyboard_ps2_mca_device); + ps2.split_addr = mem_size * 1024; + mca_init(8); + device_add(&keyboard_ps2_mca_device); - ps2.planar_read = model_80_read; - ps2.planar_write = model_80_write; + ps2.planar_read = model_80_read; + ps2.planar_write = model_80_write; - device_add(&ps2_nvr_device); + device_add(&ps2_nvr_device); - io_sethandler(0x00e0, 0x0002, mem_encoding_read, NULL, NULL, mem_encoding_write, NULL, NULL, NULL); + io_sethandler(0x00e0, 0x0002, mem_encoding_read, NULL, NULL, mem_encoding_write, NULL, NULL, NULL); - ps2.mem_regs[1] = 2; + ps2.mem_regs[1] = 2; - /* Note by Kotori: I rewrote this because the original code was using - Model 80 Type 1-style 1 MB memory card settings, which are *NOT* - supported by Model 80 Type 2. */ - switch (mem_size/1024) - { - case 1: - ps2.option[1] = 0x0e; /* 11 10 = 0 2 */ - ps2.mem_regs[1] = 0xd2; /* 01 = 1 (first) */ - ps2.mem_regs[0] = 0xf0; /* 11 = invalid */ - break; - case 2: - ps2.option[1] = 0x0e; /* 11 10 = 0 2 */ - ps2.mem_regs[1] = 0xc2; /* 00 = 2 */ - ps2.mem_regs[0] = 0xf0; /* 11 = invalid */ - break; - case 3: - ps2.option[1] = 0x0a; /* 10 10 = 2 2 */ - ps2.mem_regs[1] = 0xc2; /* 00 = 2 */ - ps2.mem_regs[0] = 0xd0; /* 01 = 1 (first) */ - break; - case 4: - default: - ps2.option[1] = 0x0a; /* 10 10 = 2 2 */ - ps2.mem_regs[1] = 0xc2; /* 00 = 2 */ - ps2.mem_regs[0] = 0xc0; /* 00 = 2 */ - break; - } + /* Note by Kotori: I rewrote this because the original code was using + Model 80 Type 1-style 1 MB memory card settings, which are *NOT* + supported by Model 80 Type 2. */ + switch (mem_size / 1024) { + case 1: + ps2.option[1] = 0x0e; /* 11 10 = 0 2 */ + ps2.mem_regs[1] = 0xd2; /* 01 = 1 (first) */ + ps2.mem_regs[0] = 0xf0; /* 11 = invalid */ + break; + case 2: + ps2.option[1] = 0x0e; /* 11 10 = 0 2 */ + ps2.mem_regs[1] = 0xc2; /* 00 = 2 */ + ps2.mem_regs[0] = 0xf0; /* 11 = invalid */ + break; + case 3: + ps2.option[1] = 0x0a; /* 10 10 = 2 2 */ + ps2.mem_regs[1] = 0xc2; /* 00 = 2 */ + ps2.mem_regs[0] = 0xd0; /* 01 = 1 (first) */ + break; + case 4: + default: + ps2.option[1] = 0x0a; /* 10 10 = 2 2 */ + ps2.mem_regs[1] = 0xc2; /* 00 = 2 */ + ps2.mem_regs[0] = 0xc0; /* 00 = 2 */ + break; + } - ps2.mem_regs[0] |= ((mem_size/1024) & 0x0f); + ps2.mem_regs[0] |= ((mem_size / 1024) & 0x0f); - mem_mapping_add(&ps2.split_mapping, - (mem_size+256) * 1024, - 256*1024, + mem_mapping_add(&ps2.split_mapping, + (mem_size + 256) * 1024, + 256 * 1024, ps2_read_split_ram, ps2_read_split_ramw, ps2_read_split_raml, @@ -1331,194 +1307,188 @@ static void ps2_mca_board_model_80_type2_init(int is486) &ram[0xa0000], MEM_MAPPING_INTERNAL, NULL); - mem_mapping_disable(&ps2.split_mapping); + mem_mapping_disable(&ps2.split_mapping); - if ((mem_size > 4096) && !is486) - { - /* Only 4 MB supported on planar, create a memory expansion card for the rest */ - if (mem_size > 12288) - ps2_mca_mem_d071_init(4); - else { - ps2_mca_mem_fffc_init(4); - } + if ((mem_size > 4096) && !is486) { + /* Only 4 MB supported on planar, create a memory expansion card for the rest */ + if (mem_size > 12288) + ps2_mca_mem_d071_init(4); + else { + ps2_mca_mem_fffc_init(4); } + } - if (gfxcard == VID_INTERNAL) - device_add(&ps1vga_mca_device); + if (gfxcard == VID_INTERNAL) + device_add(&ps1vga_mca_device); - ps2.split_size = 0; + ps2.split_size = 0; } - static void machine_ps2_common_init(const machine_t *model) { - machine_common_init(model); + machine_common_init(model); - if (fdc_type == FDC_INTERNAL) - device_add(&fdc_at_device); + if (fdc_type == FDC_INTERNAL) + device_add(&fdc_at_device); - dma16_init(); - ps2_dma_init(); - device_add(&ps_no_nmi_nvr_device); - pic2_init(); + dma16_init(); + ps2_dma_init(); + device_add(&ps_no_nmi_nvr_device); + pic2_init(); - int pit_type = ((pit_mode == -1 && is486) || pit_mode == 1) ? PIT_8254_FAST : PIT_8254; - pit_ps2_init(pit_type); + int pit_type = ((pit_mode == -1 && is486) || pit_mode == 1) ? PIT_8254_FAST : PIT_8254; + pit_ps2_init(pit_type); - nmi_mask = 0x80; + nmi_mask = 0x80; - ps2.uart = device_add_inst(&ns16550_device, 1); + ps2.uart = device_add_inst(&ns16550_device, 1); } - int machine_ps2_model_50_init(const machine_t *model) { - int ret; + int ret; - ret = bios_load_interleaved("roms/machines/ibmps2_m50/90x7420.zm13", - "roms/machines/ibmps2_m50/90x7429.zm18", - 0x000f0000, 131072, 0); - ret &= bios_load_aux_interleaved("roms/machines/ibmps2_m50/90x7423.zm14", - "roms/machines/ibmps2_m50/90x7426.zm16", - 0x000e0000, 65536, 0); + ret = bios_load_interleaved("roms/machines/ibmps2_m50/90x7420.zm13", + "roms/machines/ibmps2_m50/90x7429.zm18", + 0x000f0000, 131072, 0); + ret &= bios_load_aux_interleaved("roms/machines/ibmps2_m50/90x7423.zm14", + "roms/machines/ibmps2_m50/90x7426.zm16", + 0x000e0000, 65536, 0); - if (bios_only || !ret) - return ret; + if (bios_only || !ret) + return ret; - machine_ps2_common_init(model); + machine_ps2_common_init(model); - ps2.planar_id = 0xfbff; - ps2_mca_board_model_50_init(4); + ps2.planar_id = 0xfbff; + ps2_mca_board_model_50_init(4); - return ret; + return ret; } int machine_ps2_model_60_init(const machine_t *model) { - int ret; + int ret; - ret = bios_load_interleaved("roms/machines/ibmps2_m50/90x7420.zm13", - "roms/machines/ibmps2_m50/90x7429.zm18", - 0x000f0000, 131072, 0); - ret &= bios_load_aux_interleaved("roms/machines/ibmps2_m50/90x7423.zm14", - "roms/machines/ibmps2_m50/90x7426.zm16", - 0x000e0000, 65536, 0); + ret = bios_load_interleaved("roms/machines/ibmps2_m50/90x7420.zm13", + "roms/machines/ibmps2_m50/90x7429.zm18", + 0x000f0000, 131072, 0); + ret &= bios_load_aux_interleaved("roms/machines/ibmps2_m50/90x7423.zm14", + "roms/machines/ibmps2_m50/90x7426.zm16", + 0x000e0000, 65536, 0); - if (bios_only || !ret) - return ret; + if (bios_only || !ret) + return ret; - machine_ps2_common_init(model); + machine_ps2_common_init(model); - ps2.planar_id = 0xf7ff; - ps2_mca_board_model_50_init(8); + ps2.planar_id = 0xf7ff; + ps2_mca_board_model_50_init(8); - return ret; + return ret; } - int machine_ps2_model_55sx_init(const machine_t *model) { - int ret; + int ret; - ret = bios_load_interleaved("roms/machines/ibmps2_m55sx/33f8146.zm41", - "roms/machines/ibmps2_m55sx/33f8145.zm40", - 0x000e0000, 131072, 0); + ret = bios_load_interleaved("roms/machines/ibmps2_m55sx/33f8146.zm41", + "roms/machines/ibmps2_m55sx/33f8145.zm40", + 0x000e0000, 131072, 0); - if (bios_only || !ret) - return ret; + if (bios_only || !ret) + return ret; - machine_ps2_common_init(model); + machine_ps2_common_init(model); - ps2.planar_id = 0xfffb; - ps2_mca_board_model_55sx_init(0, 4); + ps2.planar_id = 0xfffb; + ps2_mca_board_model_55sx_init(0, 4); - return ret; + return ret; } - int machine_ps2_model_65sx_init(const machine_t *model) { - int ret; + int ret; - ret = bios_load_interleaved("roms/machines/ibmps2_m65sx/64F3608.BIN", - "roms/machines/ibmps2_m65sx/64F3611.BIN", - 0x000e0000, 131072, 0); + ret = bios_load_interleaved("roms/machines/ibmps2_m65sx/64F3608.BIN", + "roms/machines/ibmps2_m65sx/64F3611.BIN", + 0x000e0000, 131072, 0); - if (bios_only || !ret) - return ret; + if (bios_only || !ret) + return ret; - machine_ps2_common_init(model); + machine_ps2_common_init(model); - ps2.planar_id = 0xe3ff; - ps2_mca_board_model_55sx_init(1, 8); + ps2.planar_id = 0xe3ff; + ps2_mca_board_model_55sx_init(1, 8); - return ret; + return ret; } int machine_ps2_model_70_type3_init(const machine_t *model) { - int ret; + int ret; - ret = bios_load_interleaved("roms/machines/ibmps2_m70_type3/70-a_even.bin", - "roms/machines/ibmps2_m70_type3/70-a_odd.bin", - 0x000e0000, 131072, 0); + ret = bios_load_interleaved("roms/machines/ibmps2_m70_type3/70-a_even.bin", + "roms/machines/ibmps2_m70_type3/70-a_odd.bin", + 0x000e0000, 131072, 0); - if (bios_only || !ret) - return ret; + if (bios_only || !ret) + return ret; - machine_ps2_common_init(model); + machine_ps2_common_init(model); - ps2.planar_id = 0xf9ff; + ps2.planar_id = 0xf9ff; - ps2_mca_board_model_70_type34_init(0, 4); + ps2_mca_board_model_70_type34_init(0, 4); - return ret; + return ret; } - int machine_ps2_model_80_init(const machine_t *model) { - int ret; + int ret; - ret = bios_load_interleaved("roms/machines/ibmps2_m80/15f6637.bin", - "roms/machines/ibmps2_m80/15f6639.bin", - 0x000e0000, 131072, 0); + ret = bios_load_interleaved("roms/machines/ibmps2_m80/15f6637.bin", + "roms/machines/ibmps2_m80/15f6639.bin", + 0x000e0000, 131072, 0); - if (bios_only || !ret) - return ret; + if (bios_only || !ret) + return ret; machine_ps2_common_init(model); ps2.planar_id = 0xfdff; ps2_mca_board_model_80_type2_init(0); - return ret; + return ret; } int machine_ps2_model_80_axx_init(const machine_t *model) { - int ret; + int ret; - ret = bios_load_interleaved("roms/machines/ibmps2_m80/64f4356.bin", - "roms/machines/ibmps2_m80/64f4355.bin", - 0x000e0000, 131072, 0); + ret = bios_load_interleaved("roms/machines/ibmps2_m80/64f4356.bin", + "roms/machines/ibmps2_m80/64f4355.bin", + 0x000e0000, 131072, 0); - if (bios_only || !ret) - return ret; + if (bios_only || !ret) + return ret; - machine_ps2_common_init(model); + machine_ps2_common_init(model); - ps2.planar_id = 0xfff9; + ps2.planar_id = 0xfff9; - ps2_mca_board_model_70_type34_init(0, 8); + ps2_mca_board_model_70_type34_init(0, 8); - return ret; + return ret; } diff --git a/src/machine/m_tandy.c b/src/machine/m_tandy.c index d6c628a90..61fe19465 100644 --- a/src/machine/m_tandy.c +++ b/src/machine/m_tandy.c @@ -44,20 +44,17 @@ #include <86box/vid_cga_comp.h> #include <86box/machine.h> - enum { TANDY_RGB = 0, TANDY_COMPOSITE }; - enum { TYPE_TANDY = 0, TYPE_TANDY1000HX, TYPE_TANDY1000SL2 }; - enum { EEPROM_IDLE = 0, EEPROM_GET_OPERATION, @@ -65,76 +62,75 @@ enum { EEPROM_WRITE }; - typedef struct { - mem_mapping_t mapping; - mem_mapping_t vram_mapping; + mem_mapping_t mapping; + mem_mapping_t vram_mapping; - uint8_t crtc[32]; - int crtcreg; + uint8_t crtc[32]; + int crtcreg; - int array_index; - uint8_t array[256]; - int memctrl; - uint8_t mode, col; - uint8_t stat; + int array_index; + uint8_t array[256]; + int memctrl; + uint8_t mode, col; + uint8_t stat; - uint8_t *vram, *b8000; - uint32_t b8000_mask; - uint32_t b8000_limit; - uint8_t planar_ctrl; + uint8_t *vram, *b8000; + uint32_t b8000_mask; + uint32_t b8000_limit; + uint8_t planar_ctrl; - int linepos, - displine; - int sc, vc; - int dispon; - int con, coff, - cursoron, - blink; - int fullchange; - int vsynctime; - int vadj; - uint16_t ma, maback; + int linepos, + displine; + int sc, vc; + int dispon; + int con, coff, + cursoron, + blink; + int fullchange; + int vsynctime; + int vadj; + uint16_t ma, maback; - uint64_t dispontime, - dispofftime; - pc_timer_t timer; - int firstline, - lastline; + uint64_t dispontime, + dispofftime; + pc_timer_t timer; + int firstline, + lastline; - int composite; + int composite; } t1kvid_t; typedef struct { - char *path; + char *path; - int state; - int count; - int addr; - int clk; - uint16_t data; - uint16_t store[64]; + int state; + int count; + int addr; + int clk; + uint16_t data; + uint16_t store[64]; } t1keep_t; typedef struct { - mem_mapping_t ram_mapping; - mem_mapping_t rom_mapping; /* SL2 */ + mem_mapping_t ram_mapping; + mem_mapping_t rom_mapping; /* SL2 */ - uint8_t *rom; /* SL2 */ - uint8_t ram_bank; - uint8_t rom_bank; /* SL2 */ - int rom_offset; /* SL2 */ + uint8_t *rom; /* SL2 */ + uint8_t ram_bank; + uint8_t rom_bank; /* SL2 */ + int rom_offset; /* SL2 */ - uint32_t base; - int is_sl2; + uint32_t base; + int is_sl2; - t1kvid_t *vid; + t1kvid_t *vid; } tandy_t; -static video_timings_t timing_dram = {VIDEO_BUS, 0,0,0, 0,0,0}; /*No additional waitstates*/ - +static video_timings_t timing_dram = { VIDEO_BUS, 0, 0, 0, 0, 0, 0 }; /*No additional waitstates*/ static const scancode scancode_tandy[512] = { + // clang-format off { {0}, {0} }, { {0x01, 0}, {0x81, 0} }, { {0x02, 0}, {0x82, 0} }, { {0x03, 0}, {0x83, 0} }, { {0x04, 0}, {0x84, 0} }, { {0x05, 0}, {0x85, 0} }, @@ -391,6 +387,7 @@ static const scancode scancode_tandy[512] = { { {0}, {0} }, { {0}, {0} }, /*1f8*/ { {0}, {0} }, { {0}, {0} }, { {0}, {0} }, { {0}, {0} } /*1fc*/ + // clang-format on }; static uint8_t crtcmask[32] = { 0xff, 0xff, 0xff, 0xff, 0x7f, 0x1f, 0x7f, 0x7f, @@ -406,32 +403,27 @@ static uint8_t crtcmask_sl[32] = { }; static int eep_data_out; - -static uint8_t vid_in(uint16_t addr, void *priv); -static void vid_out(uint16_t addr, uint8_t val, void *priv); - +static uint8_t vid_in(uint16_t addr, void *priv); +static void vid_out(uint16_t addr, uint8_t val, void *priv); #ifdef ENABLE_TANDY_LOG int tandy_do_log = ENABLE_TANDY_LOG; - static void tandy_log(const char *fmt, ...) { - va_list ap; + va_list ap; - if (tandy_do_log) - { - va_start(ap, fmt); - pclog_ex(fmt, ap); - va_end(ap); - } + if (tandy_do_log) { + va_start(ap, fmt); + pclog_ex(fmt, ap); + va_end(ap); + } } #else -#define tandy_log(fmt, ...) +# define tandy_log(fmt, ...) #endif - static void recalc_mapping(tandy_t *dev) { @@ -439,19 +431,18 @@ recalc_mapping(tandy_t *dev) mem_mapping_disable(&vid->mapping); io_removehandler(0x03d0, 16, - vid_in, NULL, NULL, vid_out, NULL, NULL, dev); + vid_in, NULL, NULL, vid_out, NULL, NULL, dev); if (vid->planar_ctrl & 4) { - mem_mapping_enable(&vid->mapping); - if (vid->array[5] & 1) - mem_mapping_set_addr(&vid->mapping, 0xa0000, 0x10000); - else - mem_mapping_set_addr(&vid->mapping, 0xb8000, 0x8000); - io_sethandler(0x03d0, 16, vid_in,NULL,NULL, vid_out,NULL,NULL, dev); + mem_mapping_enable(&vid->mapping); + if (vid->array[5] & 1) + mem_mapping_set_addr(&vid->mapping, 0xa0000, 0x10000); + else + mem_mapping_set_addr(&vid->mapping, 0xb8000, 0x8000); + io_sethandler(0x03d0, 16, vid_in, NULL, NULL, vid_out, NULL, NULL, dev); } } - static void recalc_timings(tandy_t *dev) { @@ -460,38 +451,36 @@ recalc_timings(tandy_t *dev) double _dispontime, _dispofftime, disptime; if (vid->mode & 1) { - disptime = vid->crtc[0] + 1; - _dispontime = vid->crtc[1]; + disptime = vid->crtc[0] + 1; + _dispontime = vid->crtc[1]; } else { - disptime = (vid->crtc[0] + 1) << 1; - _dispontime = vid->crtc[1] << 1; + disptime = (vid->crtc[0] + 1) << 1; + _dispontime = vid->crtc[1] << 1; } _dispofftime = disptime - _dispontime; - _dispontime *= CGACONST; + _dispontime *= CGACONST; _dispofftime *= CGACONST; - vid->dispontime = (uint64_t)(_dispontime); - vid->dispofftime = (uint64_t)(_dispofftime); + vid->dispontime = (uint64_t) (_dispontime); + vid->dispofftime = (uint64_t) (_dispofftime); } - static void recalc_address(tandy_t *dev) { t1kvid_t *vid = dev->vid; if ((vid->memctrl & 0xc0) == 0xc0) { - vid->vram = &ram[((vid->memctrl & 0x06) << 14) + dev->base]; - vid->b8000 = &ram[((vid->memctrl & 0x30) << 11) + dev->base]; - vid->b8000_mask = 0x7fff; + vid->vram = &ram[((vid->memctrl & 0x06) << 14) + dev->base]; + vid->b8000 = &ram[((vid->memctrl & 0x30) << 11) + dev->base]; + vid->b8000_mask = 0x7fff; } else { - vid->vram = &ram[((vid->memctrl & 0x07) << 14) + dev->base]; - vid->b8000 = &ram[((vid->memctrl & 0x38) << 11) + dev->base]; - vid->b8000_mask = 0x3fff; + vid->vram = &ram[((vid->memctrl & 0x07) << 14) + dev->base]; + vid->b8000 = &ram[((vid->memctrl & 0x38) << 11) + dev->base]; + vid->b8000_mask = 0x3fff; } } - static void recalc_address_sl(tandy_t *dev) { @@ -500,650 +489,594 @@ recalc_address_sl(tandy_t *dev) vid->b8000_limit = 0x8000; if (vid->array[5] & 1) { - vid->vram = &ram[((vid->memctrl & 0x04) << 14) + dev->base]; - vid->b8000 = &ram[((vid->memctrl & 0x20) << 11) + dev->base]; + vid->vram = &ram[((vid->memctrl & 0x04) << 14) + dev->base]; + vid->b8000 = &ram[((vid->memctrl & 0x20) << 11) + dev->base]; } else if ((vid->memctrl & 0xc0) == 0xc0) { - vid->vram = &ram[((vid->memctrl & 0x06) << 14) + dev->base]; - vid->b8000 = &ram[((vid->memctrl & 0x30) << 11) + dev->base]; + vid->vram = &ram[((vid->memctrl & 0x06) << 14) + dev->base]; + vid->b8000 = &ram[((vid->memctrl & 0x30) << 11) + dev->base]; } else { - vid->vram = &ram[((vid->memctrl & 0x07) << 14) + dev->base]; - vid->b8000 = &ram[((vid->memctrl & 0x38) << 11) + dev->base]; - if ((vid->memctrl & 0x38) == 0x38) - vid->b8000_limit = 0x4000; + vid->vram = &ram[((vid->memctrl & 0x07) << 14) + dev->base]; + vid->b8000 = &ram[((vid->memctrl & 0x38) << 11) + dev->base]; + if ((vid->memctrl & 0x38) == 0x38) + vid->b8000_limit = 0x4000; } } - static void vid_out(uint16_t addr, uint8_t val, void *priv) { - tandy_t *dev = (tandy_t *)priv; + tandy_t *dev = (tandy_t *) priv; t1kvid_t *vid = dev->vid; - uint8_t old; + uint8_t old; if ((addr >= 0x3d0) && (addr <= 0x3d7)) - addr = (addr & 0xff9) | 0x004; + addr = (addr & 0xff9) | 0x004; switch (addr) { - case 0x03d4: - vid->crtcreg = val & 0x1f; - break; + case 0x03d4: + vid->crtcreg = val & 0x1f; + break; - case 0x03d5: - old = vid->crtc[vid->crtcreg]; - if (dev->is_sl2) - vid->crtc[vid->crtcreg] = val & crtcmask_sl[vid->crtcreg]; - else - vid->crtc[vid->crtcreg] = val & crtcmask[vid->crtcreg]; - if (old != val) { - if (vid->crtcreg < 0xe || vid->crtcreg > 0x10) { - vid->fullchange = changeframecount; - recalc_timings(dev); - } - } - break; + case 0x03d5: + old = vid->crtc[vid->crtcreg]; + if (dev->is_sl2) + vid->crtc[vid->crtcreg] = val & crtcmask_sl[vid->crtcreg]; + else + vid->crtc[vid->crtcreg] = val & crtcmask[vid->crtcreg]; + if (old != val) { + if (vid->crtcreg < 0xe || vid->crtcreg > 0x10) { + vid->fullchange = changeframecount; + recalc_timings(dev); + } + } + break; - case 0x03d8: - vid->mode = val; - if (! dev->is_sl2) - update_cga16_color(vid->mode); - break; + case 0x03d8: + vid->mode = val; + if (!dev->is_sl2) + update_cga16_color(vid->mode); + break; - case 0x03d9: - vid->col = val; - break; + case 0x03d9: + vid->col = val; + break; - case 0x03da: - vid->array_index = val & 0x1f; - break; + case 0x03da: + vid->array_index = val & 0x1f; + break; - case 0x03de: - if (vid->array_index & 16) - val &= 0xf; - vid->array[vid->array_index & 0x1f] = val; - if (dev->is_sl2) { - if ((vid->array_index & 0x1f) == 5) { - recalc_mapping(dev); - recalc_address_sl(dev); - } - } - break; + case 0x03de: + if (vid->array_index & 16) + val &= 0xf; + vid->array[vid->array_index & 0x1f] = val; + if (dev->is_sl2) { + if ((vid->array_index & 0x1f) == 5) { + recalc_mapping(dev); + recalc_address_sl(dev); + } + } + break; - case 0x03df: - vid->memctrl = val; - if (dev->is_sl2) - recalc_address_sl(dev); - else - recalc_address(dev); - break; + case 0x03df: + vid->memctrl = val; + if (dev->is_sl2) + recalc_address_sl(dev); + else + recalc_address(dev); + break; - case 0x0065: - if (val == 8) return; /*Hack*/ - vid->planar_ctrl = val; - recalc_mapping(dev); - break; + case 0x0065: + if (val == 8) + return; /*Hack*/ + vid->planar_ctrl = val; + recalc_mapping(dev); + break; } } - static uint8_t vid_in(uint16_t addr, void *priv) { - tandy_t *dev = (tandy_t *)priv; + tandy_t *dev = (tandy_t *) priv; t1kvid_t *vid = dev->vid; - uint8_t ret = 0xff; + uint8_t ret = 0xff; if ((addr >= 0x3d0) && (addr <= 0x3d7)) - addr = (addr & 0xff9) | 0x004; + addr = (addr & 0xff9) | 0x004; switch (addr) { - case 0x03d4: - ret = vid->crtcreg; - break; + case 0x03d4: + ret = vid->crtcreg; + break; - case 0x03d5: - ret = vid->crtc[vid->crtcreg]; - break; + case 0x03d5: + ret = vid->crtc[vid->crtcreg]; + break; - case 0x03da: - ret = vid->stat; - break; + case 0x03da: + ret = vid->stat; + break; } - return(ret); + return (ret); } - static void vid_write(uint32_t addr, uint8_t val, void *priv) { - tandy_t *dev = (tandy_t *)priv; + tandy_t *dev = (tandy_t *) priv; t1kvid_t *vid = dev->vid; - if (vid->memctrl == -1) return; + if (vid->memctrl == -1) + return; if (dev->is_sl2) { - if (vid->array[5] & 1) - vid->b8000[addr & 0xffff] = val; - else { - if ((addr & 0x7fff) < vid->b8000_limit) - vid->b8000[addr & 0x7fff] = val; - } + if (vid->array[5] & 1) + vid->b8000[addr & 0xffff] = val; + else { + if ((addr & 0x7fff) < vid->b8000_limit) + vid->b8000[addr & 0x7fff] = val; + } } else { - vid->b8000[addr & vid->b8000_mask] = val; + vid->b8000[addr & vid->b8000_mask] = val; } } - static uint8_t vid_read(uint32_t addr, void *priv) { - tandy_t *dev = (tandy_t *)priv; + tandy_t *dev = (tandy_t *) priv; t1kvid_t *vid = dev->vid; - if (vid->memctrl == -1) return(0xff); + if (vid->memctrl == -1) + return (0xff); if (dev->is_sl2) { - if (vid->array[5] & 1) - return(vid->b8000[addr & 0xffff]); - if ((addr & 0x7fff) < vid->b8000_limit) - return(vid->b8000[addr & 0x7fff]); - else - return(0xff); + if (vid->array[5] & 1) + return (vid->b8000[addr & 0xffff]); + if ((addr & 0x7fff) < vid->b8000_limit) + return (vid->b8000[addr & 0x7fff]); + else + return (0xff); } else { - return(vid->b8000[addr & vid->b8000_mask]); + return (vid->b8000[addr & vid->b8000_mask]); } } - static void vid_poll(void *priv) { - tandy_t *dev = (tandy_t *)priv; + tandy_t *dev = (tandy_t *) priv; t1kvid_t *vid = dev->vid; - uint16_t ca = (vid->crtc[15] | (vid->crtc[14] << 8)) & 0x3fff; - int drawcursor; - int x, c, xs_temp, ys_temp; - int oldvc; - uint8_t chr, attr; - uint16_t dat; - int cols[4]; - int col; - int oldsc; + uint16_t ca = (vid->crtc[15] | (vid->crtc[14] << 8)) & 0x3fff; + int drawcursor; + int x, c, xs_temp, ys_temp; + int oldvc; + uint8_t chr, attr; + uint16_t dat; + int cols[4]; + int col; + int oldsc; - if (! vid->linepos) { - timer_advance_u64(&vid->timer, vid->dispofftime); - vid->stat |= 1; - vid->linepos = 1; - oldsc = vid->sc; - if ((vid->crtc[8] & 3) == 3) - vid->sc = (vid->sc << 1) & 7; - if (vid->dispon) { - if (vid->displine < vid->firstline) { - vid->firstline = vid->displine; - video_wait_for_buffer(); - } - vid->lastline = vid->displine; - cols[0] = (vid->array[2] & 0xf) + 16; - for (c = 0; c < 8; c++) { - if (vid->array[3] & 4) { - buffer32->line[(vid->displine << 1)][c] = buffer32->line[(vid->displine << 1) + 1][c] = cols[0]; - if (vid->mode & 1) { - buffer32->line[(vid->displine << 1)][c + (vid->crtc[1] << 3) + 8] = - buffer32->line[(vid->displine << 1) + 1][c + (vid->crtc[1] << 3) + 8] = cols[0]; - } else { - buffer32->line[(vid->displine << 1)][c + (vid->crtc[1] << 4) + 8] = - buffer32->line[(vid->displine << 1) + 1][c + (vid->crtc[1] << 4) + 8] = cols[0]; - } - } else if ((vid->mode & 0x12) == 0x12) { - buffer32->line[(vid->displine << 1)][c] = buffer32->line[(vid->displine << 1) + 1][c] = 0; - if (vid->mode & 1) { - buffer32->line[(vid->displine << 1)][c + (vid->crtc[1] << 3) + 8] = - buffer32->line[(vid->displine << 1) + 1][c + (vid->crtc[1] << 3) + 8] = 0; - } else { - buffer32->line[(vid->displine << 1)][c + (vid->crtc[1] << 4) + 8] = - buffer32->line[(vid->displine << 1) + 1][c + (vid->crtc[1] << 4) + 8] = 0; - } - } else { - buffer32->line[(vid->displine << 1)][c] = buffer32->line[(vid->displine << 1) + 1][c] = (vid->col & 15) + 16; - if (vid->mode & 1) { - buffer32->line[(vid->displine << 1)][c + (vid->crtc[1] << 3) + 8] = - buffer32->line[(vid->displine << 1) + 1][c + (vid->crtc[1] << 3) + 8] = (vid->col & 15) + 16; - } else { - buffer32->line[(vid->displine << 1)][c + (vid->crtc[1] << 4) + 8] = - buffer32->line[(vid->displine << 1) + 1][c + (vid->crtc[1] << 4) + 8] = (vid->col & 15) + 16; - } - } - } - if (dev->is_sl2 && (vid->array[5] & 1)) { /*640x200x16*/ - for (x = 0; x < vid->crtc[1]*2; x++) { - dat = (vid->vram[(vid->ma << 1) & 0xffff] << 8) | - vid->vram[((vid->ma << 1) + 1) & 0xffff]; - vid->ma++; - buffer32->line[(vid->displine << 1)][(x << 2) + 8] = buffer32->line[(vid->displine << 1) + 1][(x << 2) + 8] = - vid->array[((dat >> 12) & 0xf) + 16] + 16; - buffer32->line[(vid->displine << 1)][(x << 2) + 9] = buffer32->line[(vid->displine << 1) + 1][(x << 2) + 9] = - vid->array[((dat >> 8) & 0xf) + 16] + 16; - buffer32->line[(vid->displine << 1)][(x << 2) + 10] = buffer32->line[(vid->displine << 1) + 1][(x << 2) + 10] = - vid->array[((dat >> 4) & 0xf) + 16] + 16; - buffer32->line[(vid->displine << 1)][(x << 2) + 11] = buffer32->line[(vid->displine << 1) + 1][(x << 2) + 11] = - vid->array[(dat & 0xf) + 16] + 16; - } - } else if ((vid->array[3] & 0x10) && (vid->mode & 1)) { /*320x200x16*/ - for (x = 0; x < vid->crtc[1]; x++) { - dat = (vid->vram[((vid->ma << 1) & 0x1fff) + ((vid->sc & 3) * 0x2000)] << 8) | - vid->vram[((vid->ma << 1) & 0x1fff) + ((vid->sc & 3) * 0x2000) + 1]; - vid->ma++; - buffer32->line[(vid->displine << 1)][(x << 3) + 8] = buffer32->line[(vid->displine << 1) + 1][(x << 3) + 8] = - buffer32->line[(vid->displine << 1)][(x << 3) + 9] = buffer32->line[(vid->displine << 1) + 1][(x << 3) + 9] = - vid->array[((dat >> 12) & vid->array[1]) + 16] + 16; - buffer32->line[(vid->displine << 1)][(x << 3) + 10] = buffer32->line[(vid->displine << 1) + 1][(x << 3) + 10] = - buffer32->line[(vid->displine << 1)][(x << 3) + 11] = buffer32->line[(vid->displine << 1) + 1][(x << 3) + 11] = - vid->array[((dat >> 8) & vid->array[1]) + 16] + 16; - buffer32->line[(vid->displine << 1)][(x << 3) + 12] = buffer32->line[(vid->displine << 1) + 1][(x << 3) + 12] = - buffer32->line[(vid->displine << 1)][(x << 3) + 13] = buffer32->line[(vid->displine << 1) + 1][(x << 3) + 13] = - vid->array[((dat >> 4) & vid->array[1]) + 16] + 16; - buffer32->line[(vid->displine << 1)][(x << 3) + 14] = buffer32->line[(vid->displine << 1) + 1][(x << 3) + 14] = - buffer32->line[(vid->displine << 1)][(x << 3) + 15] = buffer32->line[(vid->displine << 1) + 1][(x << 3) + 15] = - vid->array[(dat & vid->array[1]) + 16] + 16; - } - } else if (vid->array[3] & 0x10) { /*160x200x16*/ - for (x = 0; x < vid->crtc[1]; x++) { - if (dev->is_sl2) { - dat = (vid->vram[((vid->ma << 1) & 0x1fff) + ((vid->sc & 1) * 0x2000)] << 8) | - vid->vram[((vid->ma << 1) & 0x1fff) + ((vid->sc & 1) * 0x2000) + 1]; - } else { - dat = (vid->vram[((vid->ma << 1) & 0x1fff) + ((vid->sc & 3) * 0x2000)] << 8) | - vid->vram[((vid->ma << 1) & 0x1fff) + ((vid->sc & 3) * 0x2000) + 1]; - } - vid->ma++; - buffer32->line[(vid->displine << 1)][(x << 4) + 8] = buffer32->line[(vid->displine << 1) + 1][(x << 4) + 8] = - buffer32->line[(vid->displine << 1)][(x << 4) + 9] = buffer32->line[(vid->displine << 1) + 1][(x << 4) + 9] = - buffer32->line[(vid->displine << 1)][(x << 4) + 10] = buffer32->line[(vid->displine << 1) + 1][(x << 4) + 10] = - buffer32->line[(vid->displine << 1)][(x << 4) + 11] = buffer32->line[(vid->displine << 1) + 1][(x << 4) + 11] = - vid->array[((dat >> 12) & vid->array[1]) + 16] + 16; - buffer32->line[(vid->displine << 1)][(x << 4) + 12] = buffer32->line[(vid->displine << 1) + 1][(x << 4) + 12] = - buffer32->line[(vid->displine << 1)][(x << 4) + 13] = buffer32->line[(vid->displine << 1) + 1][(x << 4) + 13] = - buffer32->line[(vid->displine << 1)][(x << 4) + 14] = buffer32->line[(vid->displine << 1) + 1][(x << 4) + 14] = - buffer32->line[(vid->displine << 1)][(x << 4) + 15] = buffer32->line[(vid->displine << 1) + 1][(x << 4) + 15] = - vid->array[((dat >> 8) & vid->array[1]) + 16] + 16; - buffer32->line[(vid->displine << 1)][(x << 4) + 16] = buffer32->line[(vid->displine << 1) + 1][(x << 4) + 16] = - buffer32->line[(vid->displine << 1)][(x << 4) + 17] = buffer32->line[(vid->displine << 1) + 1][(x << 4) + 17] = - buffer32->line[(vid->displine << 1)][(x << 4) + 18] = buffer32->line[(vid->displine << 1) + 1][(x << 4) + 18] = - buffer32->line[(vid->displine << 1)][(x << 4) + 19] = buffer32->line[(vid->displine << 1) + 1][(x << 4) + 19] = - vid->array[((dat >> 4) & vid->array[1]) + 16] + 16; - buffer32->line[(vid->displine << 1)][(x << 4) + 20] = buffer32->line[(vid->displine << 1) + 1][(x << 4) + 20] = - buffer32->line[(vid->displine << 1)][(x << 4) + 21] = buffer32->line[(vid->displine << 1) + 1][(x << 4) + 21] = - buffer32->line[(vid->displine << 1)][(x << 4) + 22] = buffer32->line[(vid->displine << 1) + 1][(x << 4) + 22] = - buffer32->line[(vid->displine << 1)][(x << 4) + 23] = buffer32->line[(vid->displine << 1) + 1][(x << 4) + 23] = - vid->array[(dat & vid->array[1]) + 16] + 16; - } - } else if (vid->array[3] & 0x08) { /*640x200x4 - this implementation is a complete guess!*/ - for (x = 0; x < vid->crtc[1]; x++) { - dat = (vid->vram[((vid->ma << 1) & 0x1fff) + ((vid->sc & 3) * 0x2000)] << 8) | - vid->vram[((vid->ma << 1) & 0x1fff) + ((vid->sc & 3) * 0x2000) + 1]; - vid->ma++; - for (c = 0; c < 8; c++) { - chr = (dat >> 6) & 2; - chr |= ((dat >> 15) & 1); - buffer32->line[(vid->displine << 1)][(x << 3) + 8 + c] = buffer32->line[(vid->displine << 1) + 1][(x << 3) + 8 + c] = - vid->array[(chr & vid->array[1]) + 16] + 16; - dat <<= 1; - } - } - } else if (vid->mode & 1) { - for (x = 0; x < vid->crtc[1]; x++) { - chr = vid->vram[ (vid->ma << 1) & 0x3fff]; - attr = vid->vram[((vid->ma << 1) + 1) & 0x3fff]; - drawcursor = ((vid->ma == ca) && vid->con && vid->cursoron); - if (vid->mode & 0x20) { - cols[1] = vid->array[ ((attr & 15) & vid->array[1]) + 16] + 16; - cols[0] = vid->array[(((attr >> 4) & 7) & vid->array[1]) + 16] + 16; - if ((vid->blink & 16) && (attr & 0x80) && !drawcursor) - cols[1] = cols[0]; - } else { - cols[1] = vid->array[((attr & 15) & vid->array[1]) + 16] + 16; - cols[0] = vid->array[((attr >> 4) & vid->array[1]) + 16] + 16; - } - if (vid->sc & 8) { - for (c = 0; c < 8; c++) { - buffer32->line[(vid->displine << 1)][(x << 3) + c + 8] = buffer32->line[(vid->displine << 1) + 1][(x << 3) + c + 8] = - cols[0]; - } - } else { - for (c = 0; c < 8; c++) { - if (vid->sc == 8) { - buffer32->line[(vid->displine << 1)][(x << 3) + c + 8] = buffer32->line[(vid->displine << 1) + 1][(x << 3) + c + 8] = - cols[(fontdat[chr][7] & (1 << (c ^ 7))) ? 1 : 0]; - } else { - buffer32->line[(vid->displine << 1)][(x << 3) + c + 8] = buffer32->line[(vid->displine << 1) + 1][(x << 3) + c + 8] = - cols[(fontdat[chr][vid->sc & 7] & (1 << (c ^ 7))) ? 1 : 0]; - } - } - } - if (drawcursor) { - for (c = 0; c < 8; c++) { - buffer32->line[(vid->displine << 1)][(x << 3) + c + 8] ^= 15; - buffer32->line[(vid->displine << 1) + 1][(x << 3) + c + 8] ^= 15; - } - } - vid->ma++; - } - } else if (! (vid->mode & 2)) { - for (x = 0; x < vid->crtc[1]; x++) { - chr = vid->vram[ (vid->ma << 1) & 0x3fff]; - attr = vid->vram[((vid->ma << 1) + 1) & 0x3fff]; - drawcursor = ((vid->ma == ca) && vid->con && vid->cursoron); - if (vid->mode & 0x20) { - cols[1] = vid->array[ ((attr & 15) & vid->array[1]) + 16] + 16; - cols[0] = vid->array[(((attr >> 4) & 7) & vid->array[1]) + 16] + 16; - if ((vid->blink & 16) && (attr & 0x80) && !drawcursor) - cols[1] = cols[0]; - } else { - cols[1] = vid->array[((attr & 15) & vid->array[1]) + 16] + 16; - cols[0] = vid->array[((attr >> 4) & vid->array[1]) + 16] + 16; - } - vid->ma++; - if (vid->sc & 8) { - for (c = 0; c < 8; c++) - buffer32->line[(vid->displine << 1)][(x << 4) + (c << 1) + 8] = buffer32->line[(vid->displine << 1)][(x << 4) + (c << 1) + 1 + 8] = - cols[0]; - } else { - for (c = 0; c < 8; c++) { - if (vid->sc == 8) { - buffer32->line[(vid->displine << 1)][(x << 4) + (c << 1) + 8] = buffer32->line[(vid->displine << 1) + 1][(x << 4) + (c << 1) + 8] = - buffer32->line[(vid->displine << 1)][(x << 4) + (c << 1) + 1 + 8] = buffer32->line[(vid->displine << 1) + 1][(x << 4) + (c << 1) + 1 + 8] = - cols[(fontdat[chr][7] & (1 << (c ^ 7))) ? 1 : 0]; - } else { - buffer32->line[(vid->displine << 1)][(x << 4) + (c << 1) + 8] = buffer32->line[(vid->displine << 1) + 1][(x << 4) + (c << 1) + 8] = - buffer32->line[(vid->displine << 1)][(x << 4) + (c << 1) + 1 + 8] = buffer32->line[(vid->displine << 1) + 1][(x << 4) + (c << 1) + 1 + 8] = - cols[(fontdat[chr][vid->sc & 7] & (1 << (c ^ 7))) ? 1 : 0]; - } - } - } - if (drawcursor) { - for (c = 0; c < 16; c++) { - buffer32->line[(vid->displine << 1)][(x << 4) + c + 8] ^= 15; - buffer32->line[(vid->displine << 1) + 1][(x << 4) + c + 8] ^= 15; - } - } - } - } else if (! (vid->mode & 16)) { - cols[0] = (vid->col & 15); - col = (vid->col & 16) ? 8 : 0; - if (vid->mode & 4) { - cols[1] = col | 3; - cols[2] = col | 4; - cols[3] = col | 7; - } else if (vid->col & 32) { - cols[1] = col | 3; - cols[2] = col | 5; - cols[3] = col | 7; - } else { - cols[1] = col | 2; - cols[2] = col | 4; - cols[3] = col | 6; - } - cols[0] = vid->array[(cols[0] & vid->array[1]) + 16] + 16; - cols[1] = vid->array[(cols[1] & vid->array[1]) + 16] + 16; - cols[2] = vid->array[(cols[2] & vid->array[1]) + 16] + 16; - cols[3] = vid->array[(cols[3] & vid->array[1]) + 16] + 16; - for (x = 0; x < vid->crtc[1]; x++) { - dat = (vid->vram[((vid->ma << 1) & 0x1fff) + ((vid->sc & 1) * 0x2000)] << 8) | - vid->vram[((vid->ma << 1) & 0x1fff) + ((vid->sc & 1) * 0x2000) + 1]; - vid->ma++; - for (c = 0; c < 8; c++) { - buffer32->line[(vid->displine << 1)][(x << 4) + (c << 1) + 8] = buffer32->line[(vid->displine << 1) + 1][(x << 4) + (c << 1) + 8] = - buffer32->line[(vid->displine << 1)][(x << 4) + (c << 1) + 1 + 8] = buffer32->line[(vid->displine << 1) + 1][(x << 4) + (c << 1) + 1 + 8] = - cols[dat >> 14]; - dat <<= 2; - } - } - } else { - cols[0] = 0; - cols[1] = vid->array[(vid->col & vid->array[1]) + 16] + 16; - for (x = 0; x < vid->crtc[1]; x++) { - dat = (vid->vram[((vid->ma << 1) & 0x1fff) + ((vid->sc & 1) * 0x2000)] << 8) | - vid->vram[((vid->ma << 1) & 0x1fff) + ((vid->sc & 1) * 0x2000) + 1]; - vid->ma++; - for (c = 0; c < 16; c++) { - buffer32->line[(vid->displine << 1)][(x << 4) + c + 8] = buffer32->line[(vid->displine << 1) + 1][(x << 4) + c + 8] = - cols[dat >> 15]; - dat <<= 1; - } - } - } - } else { - if (vid->array[3] & 4) { - if (vid->mode & 1) { - hline(buffer32, 0, (vid->displine << 1), (vid->crtc[1] << 3) + 16, (vid->array[2] & 0xf) + 16); - hline(buffer32, 0, (vid->displine << 1) + 1, (vid->crtc[1] << 3) + 16, (vid->array[2] & 0xf) + 16); - } else { - hline(buffer32, 0, (vid->displine << 1), (vid->crtc[1] << 4) + 16, (vid->array[2] & 0xf) + 16); - hline(buffer32, 0, (vid->displine << 1) + 1, (vid->crtc[1] << 4) + 16, (vid->array[2] & 0xf) + 16); - } - } else { - cols[0] = ((vid->mode & 0x12) == 0x12) ? 0 : (vid->col & 0xf) + 16; - if (vid->mode & 1) { - hline(buffer32, 0, (vid->displine << 1), (vid->crtc[1] << 3) + 16, cols[0]); - hline(buffer32, 0, (vid->displine << 1) + 1, (vid->crtc[1] << 3) + 16, cols[0]); - } else { - hline(buffer32, 0, (vid->displine << 1), (vid->crtc[1] << 4) + 16, cols[0]); - hline(buffer32, 0, (vid->displine << 1) + 1, (vid->crtc[1] << 4) + 16, cols[0]); - } - } - } + if (!vid->linepos) { + timer_advance_u64(&vid->timer, vid->dispofftime); + vid->stat |= 1; + vid->linepos = 1; + oldsc = vid->sc; + if ((vid->crtc[8] & 3) == 3) + vid->sc = (vid->sc << 1) & 7; + if (vid->dispon) { + if (vid->displine < vid->firstline) { + vid->firstline = vid->displine; + video_wait_for_buffer(); + } + vid->lastline = vid->displine; + cols[0] = (vid->array[2] & 0xf) + 16; + for (c = 0; c < 8; c++) { + if (vid->array[3] & 4) { + buffer32->line[(vid->displine << 1)][c] = buffer32->line[(vid->displine << 1) + 1][c] = cols[0]; + if (vid->mode & 1) { + buffer32->line[(vid->displine << 1)][c + (vid->crtc[1] << 3) + 8] = buffer32->line[(vid->displine << 1) + 1][c + (vid->crtc[1] << 3) + 8] = cols[0]; + } else { + buffer32->line[(vid->displine << 1)][c + (vid->crtc[1] << 4) + 8] = buffer32->line[(vid->displine << 1) + 1][c + (vid->crtc[1] << 4) + 8] = cols[0]; + } + } else if ((vid->mode & 0x12) == 0x12) { + buffer32->line[(vid->displine << 1)][c] = buffer32->line[(vid->displine << 1) + 1][c] = 0; + if (vid->mode & 1) { + buffer32->line[(vid->displine << 1)][c + (vid->crtc[1] << 3) + 8] = buffer32->line[(vid->displine << 1) + 1][c + (vid->crtc[1] << 3) + 8] = 0; + } else { + buffer32->line[(vid->displine << 1)][c + (vid->crtc[1] << 4) + 8] = buffer32->line[(vid->displine << 1) + 1][c + (vid->crtc[1] << 4) + 8] = 0; + } + } else { + buffer32->line[(vid->displine << 1)][c] = buffer32->line[(vid->displine << 1) + 1][c] = (vid->col & 15) + 16; + if (vid->mode & 1) { + buffer32->line[(vid->displine << 1)][c + (vid->crtc[1] << 3) + 8] = buffer32->line[(vid->displine << 1) + 1][c + (vid->crtc[1] << 3) + 8] = (vid->col & 15) + 16; + } else { + buffer32->line[(vid->displine << 1)][c + (vid->crtc[1] << 4) + 8] = buffer32->line[(vid->displine << 1) + 1][c + (vid->crtc[1] << 4) + 8] = (vid->col & 15) + 16; + } + } + } + if (dev->is_sl2 && (vid->array[5] & 1)) { /*640x200x16*/ + for (x = 0; x < vid->crtc[1] * 2; x++) { + dat = (vid->vram[(vid->ma << 1) & 0xffff] << 8) | vid->vram[((vid->ma << 1) + 1) & 0xffff]; + vid->ma++; + buffer32->line[(vid->displine << 1)][(x << 2) + 8] = buffer32->line[(vid->displine << 1) + 1][(x << 2) + 8] = vid->array[((dat >> 12) & 0xf) + 16] + 16; + buffer32->line[(vid->displine << 1)][(x << 2) + 9] = buffer32->line[(vid->displine << 1) + 1][(x << 2) + 9] = vid->array[((dat >> 8) & 0xf) + 16] + 16; + buffer32->line[(vid->displine << 1)][(x << 2) + 10] = buffer32->line[(vid->displine << 1) + 1][(x << 2) + 10] = vid->array[((dat >> 4) & 0xf) + 16] + 16; + buffer32->line[(vid->displine << 1)][(x << 2) + 11] = buffer32->line[(vid->displine << 1) + 1][(x << 2) + 11] = vid->array[(dat & 0xf) + 16] + 16; + } + } else if ((vid->array[3] & 0x10) && (vid->mode & 1)) { /*320x200x16*/ + for (x = 0; x < vid->crtc[1]; x++) { + dat = (vid->vram[((vid->ma << 1) & 0x1fff) + ((vid->sc & 3) * 0x2000)] << 8) | vid->vram[((vid->ma << 1) & 0x1fff) + ((vid->sc & 3) * 0x2000) + 1]; + vid->ma++; + buffer32->line[(vid->displine << 1)][(x << 3) + 8] = buffer32->line[(vid->displine << 1) + 1][(x << 3) + 8] = buffer32->line[(vid->displine << 1)][(x << 3) + 9] = buffer32->line[(vid->displine << 1) + 1][(x << 3) + 9] = vid->array[((dat >> 12) & vid->array[1]) + 16] + 16; + buffer32->line[(vid->displine << 1)][(x << 3) + 10] = buffer32->line[(vid->displine << 1) + 1][(x << 3) + 10] = buffer32->line[(vid->displine << 1)][(x << 3) + 11] = buffer32->line[(vid->displine << 1) + 1][(x << 3) + 11] = vid->array[((dat >> 8) & vid->array[1]) + 16] + 16; + buffer32->line[(vid->displine << 1)][(x << 3) + 12] = buffer32->line[(vid->displine << 1) + 1][(x << 3) + 12] = buffer32->line[(vid->displine << 1)][(x << 3) + 13] = buffer32->line[(vid->displine << 1) + 1][(x << 3) + 13] = vid->array[((dat >> 4) & vid->array[1]) + 16] + 16; + buffer32->line[(vid->displine << 1)][(x << 3) + 14] = buffer32->line[(vid->displine << 1) + 1][(x << 3) + 14] = buffer32->line[(vid->displine << 1)][(x << 3) + 15] = buffer32->line[(vid->displine << 1) + 1][(x << 3) + 15] = vid->array[(dat & vid->array[1]) + 16] + 16; + } + } else if (vid->array[3] & 0x10) { /*160x200x16*/ + for (x = 0; x < vid->crtc[1]; x++) { + if (dev->is_sl2) { + dat = (vid->vram[((vid->ma << 1) & 0x1fff) + ((vid->sc & 1) * 0x2000)] << 8) | vid->vram[((vid->ma << 1) & 0x1fff) + ((vid->sc & 1) * 0x2000) + 1]; + } else { + dat = (vid->vram[((vid->ma << 1) & 0x1fff) + ((vid->sc & 3) * 0x2000)] << 8) | vid->vram[((vid->ma << 1) & 0x1fff) + ((vid->sc & 3) * 0x2000) + 1]; + } + vid->ma++; + buffer32->line[(vid->displine << 1)][(x << 4) + 8] = buffer32->line[(vid->displine << 1) + 1][(x << 4) + 8] = buffer32->line[(vid->displine << 1)][(x << 4) + 9] = buffer32->line[(vid->displine << 1) + 1][(x << 4) + 9] = buffer32->line[(vid->displine << 1)][(x << 4) + 10] = buffer32->line[(vid->displine << 1) + 1][(x << 4) + 10] = buffer32->line[(vid->displine << 1)][(x << 4) + 11] = buffer32->line[(vid->displine << 1) + 1][(x << 4) + 11] = vid->array[((dat >> 12) & vid->array[1]) + 16] + 16; + buffer32->line[(vid->displine << 1)][(x << 4) + 12] = buffer32->line[(vid->displine << 1) + 1][(x << 4) + 12] = buffer32->line[(vid->displine << 1)][(x << 4) + 13] = buffer32->line[(vid->displine << 1) + 1][(x << 4) + 13] = buffer32->line[(vid->displine << 1)][(x << 4) + 14] = buffer32->line[(vid->displine << 1) + 1][(x << 4) + 14] = buffer32->line[(vid->displine << 1)][(x << 4) + 15] = buffer32->line[(vid->displine << 1) + 1][(x << 4) + 15] = vid->array[((dat >> 8) & vid->array[1]) + 16] + 16; + buffer32->line[(vid->displine << 1)][(x << 4) + 16] = buffer32->line[(vid->displine << 1) + 1][(x << 4) + 16] = buffer32->line[(vid->displine << 1)][(x << 4) + 17] = buffer32->line[(vid->displine << 1) + 1][(x << 4) + 17] = buffer32->line[(vid->displine << 1)][(x << 4) + 18] = buffer32->line[(vid->displine << 1) + 1][(x << 4) + 18] = buffer32->line[(vid->displine << 1)][(x << 4) + 19] = buffer32->line[(vid->displine << 1) + 1][(x << 4) + 19] = vid->array[((dat >> 4) & vid->array[1]) + 16] + 16; + buffer32->line[(vid->displine << 1)][(x << 4) + 20] = buffer32->line[(vid->displine << 1) + 1][(x << 4) + 20] = buffer32->line[(vid->displine << 1)][(x << 4) + 21] = buffer32->line[(vid->displine << 1) + 1][(x << 4) + 21] = buffer32->line[(vid->displine << 1)][(x << 4) + 22] = buffer32->line[(vid->displine << 1) + 1][(x << 4) + 22] = buffer32->line[(vid->displine << 1)][(x << 4) + 23] = buffer32->line[(vid->displine << 1) + 1][(x << 4) + 23] = vid->array[(dat & vid->array[1]) + 16] + 16; + } + } else if (vid->array[3] & 0x08) { /*640x200x4 - this implementation is a complete guess!*/ + for (x = 0; x < vid->crtc[1]; x++) { + dat = (vid->vram[((vid->ma << 1) & 0x1fff) + ((vid->sc & 3) * 0x2000)] << 8) | vid->vram[((vid->ma << 1) & 0x1fff) + ((vid->sc & 3) * 0x2000) + 1]; + vid->ma++; + for (c = 0; c < 8; c++) { + chr = (dat >> 6) & 2; + chr |= ((dat >> 15) & 1); + buffer32->line[(vid->displine << 1)][(x << 3) + 8 + c] = buffer32->line[(vid->displine << 1) + 1][(x << 3) + 8 + c] = vid->array[(chr & vid->array[1]) + 16] + 16; + dat <<= 1; + } + } + } else if (vid->mode & 1) { + for (x = 0; x < vid->crtc[1]; x++) { + chr = vid->vram[(vid->ma << 1) & 0x3fff]; + attr = vid->vram[((vid->ma << 1) + 1) & 0x3fff]; + drawcursor = ((vid->ma == ca) && vid->con && vid->cursoron); + if (vid->mode & 0x20) { + cols[1] = vid->array[((attr & 15) & vid->array[1]) + 16] + 16; + cols[0] = vid->array[(((attr >> 4) & 7) & vid->array[1]) + 16] + 16; + if ((vid->blink & 16) && (attr & 0x80) && !drawcursor) + cols[1] = cols[0]; + } else { + cols[1] = vid->array[((attr & 15) & vid->array[1]) + 16] + 16; + cols[0] = vid->array[((attr >> 4) & vid->array[1]) + 16] + 16; + } + if (vid->sc & 8) { + for (c = 0; c < 8; c++) { + buffer32->line[(vid->displine << 1)][(x << 3) + c + 8] = buffer32->line[(vid->displine << 1) + 1][(x << 3) + c + 8] = cols[0]; + } + } else { + for (c = 0; c < 8; c++) { + if (vid->sc == 8) { + buffer32->line[(vid->displine << 1)][(x << 3) + c + 8] = buffer32->line[(vid->displine << 1) + 1][(x << 3) + c + 8] = cols[(fontdat[chr][7] & (1 << (c ^ 7))) ? 1 : 0]; + } else { + buffer32->line[(vid->displine << 1)][(x << 3) + c + 8] = buffer32->line[(vid->displine << 1) + 1][(x << 3) + c + 8] = cols[(fontdat[chr][vid->sc & 7] & (1 << (c ^ 7))) ? 1 : 0]; + } + } + } + if (drawcursor) { + for (c = 0; c < 8; c++) { + buffer32->line[(vid->displine << 1)][(x << 3) + c + 8] ^= 15; + buffer32->line[(vid->displine << 1) + 1][(x << 3) + c + 8] ^= 15; + } + } + vid->ma++; + } + } else if (!(vid->mode & 2)) { + for (x = 0; x < vid->crtc[1]; x++) { + chr = vid->vram[(vid->ma << 1) & 0x3fff]; + attr = vid->vram[((vid->ma << 1) + 1) & 0x3fff]; + drawcursor = ((vid->ma == ca) && vid->con && vid->cursoron); + if (vid->mode & 0x20) { + cols[1] = vid->array[((attr & 15) & vid->array[1]) + 16] + 16; + cols[0] = vid->array[(((attr >> 4) & 7) & vid->array[1]) + 16] + 16; + if ((vid->blink & 16) && (attr & 0x80) && !drawcursor) + cols[1] = cols[0]; + } else { + cols[1] = vid->array[((attr & 15) & vid->array[1]) + 16] + 16; + cols[0] = vid->array[((attr >> 4) & vid->array[1]) + 16] + 16; + } + vid->ma++; + if (vid->sc & 8) { + for (c = 0; c < 8; c++) + buffer32->line[(vid->displine << 1)][(x << 4) + (c << 1) + 8] = buffer32->line[(vid->displine << 1)][(x << 4) + (c << 1) + 1 + 8] = cols[0]; + } else { + for (c = 0; c < 8; c++) { + if (vid->sc == 8) { + buffer32->line[(vid->displine << 1)][(x << 4) + (c << 1) + 8] = buffer32->line[(vid->displine << 1) + 1][(x << 4) + (c << 1) + 8] = buffer32->line[(vid->displine << 1)][(x << 4) + (c << 1) + 1 + 8] = buffer32->line[(vid->displine << 1) + 1][(x << 4) + (c << 1) + 1 + 8] = cols[(fontdat[chr][7] & (1 << (c ^ 7))) ? 1 : 0]; + } else { + buffer32->line[(vid->displine << 1)][(x << 4) + (c << 1) + 8] = buffer32->line[(vid->displine << 1) + 1][(x << 4) + (c << 1) + 8] = buffer32->line[(vid->displine << 1)][(x << 4) + (c << 1) + 1 + 8] = buffer32->line[(vid->displine << 1) + 1][(x << 4) + (c << 1) + 1 + 8] = cols[(fontdat[chr][vid->sc & 7] & (1 << (c ^ 7))) ? 1 : 0]; + } + } + } + if (drawcursor) { + for (c = 0; c < 16; c++) { + buffer32->line[(vid->displine << 1)][(x << 4) + c + 8] ^= 15; + buffer32->line[(vid->displine << 1) + 1][(x << 4) + c + 8] ^= 15; + } + } + } + } else if (!(vid->mode & 16)) { + cols[0] = (vid->col & 15); + col = (vid->col & 16) ? 8 : 0; + if (vid->mode & 4) { + cols[1] = col | 3; + cols[2] = col | 4; + cols[3] = col | 7; + } else if (vid->col & 32) { + cols[1] = col | 3; + cols[2] = col | 5; + cols[3] = col | 7; + } else { + cols[1] = col | 2; + cols[2] = col | 4; + cols[3] = col | 6; + } + cols[0] = vid->array[(cols[0] & vid->array[1]) + 16] + 16; + cols[1] = vid->array[(cols[1] & vid->array[1]) + 16] + 16; + cols[2] = vid->array[(cols[2] & vid->array[1]) + 16] + 16; + cols[3] = vid->array[(cols[3] & vid->array[1]) + 16] + 16; + for (x = 0; x < vid->crtc[1]; x++) { + dat = (vid->vram[((vid->ma << 1) & 0x1fff) + ((vid->sc & 1) * 0x2000)] << 8) | vid->vram[((vid->ma << 1) & 0x1fff) + ((vid->sc & 1) * 0x2000) + 1]; + vid->ma++; + for (c = 0; c < 8; c++) { + buffer32->line[(vid->displine << 1)][(x << 4) + (c << 1) + 8] = buffer32->line[(vid->displine << 1) + 1][(x << 4) + (c << 1) + 8] = buffer32->line[(vid->displine << 1)][(x << 4) + (c << 1) + 1 + 8] = buffer32->line[(vid->displine << 1) + 1][(x << 4) + (c << 1) + 1 + 8] = cols[dat >> 14]; + dat <<= 2; + } + } + } else { + cols[0] = 0; + cols[1] = vid->array[(vid->col & vid->array[1]) + 16] + 16; + for (x = 0; x < vid->crtc[1]; x++) { + dat = (vid->vram[((vid->ma << 1) & 0x1fff) + ((vid->sc & 1) * 0x2000)] << 8) | vid->vram[((vid->ma << 1) & 0x1fff) + ((vid->sc & 1) * 0x2000) + 1]; + vid->ma++; + for (c = 0; c < 16; c++) { + buffer32->line[(vid->displine << 1)][(x << 4) + c + 8] = buffer32->line[(vid->displine << 1) + 1][(x << 4) + c + 8] = cols[dat >> 15]; + dat <<= 1; + } + } + } + } else { + if (vid->array[3] & 4) { + if (vid->mode & 1) { + hline(buffer32, 0, (vid->displine << 1), (vid->crtc[1] << 3) + 16, (vid->array[2] & 0xf) + 16); + hline(buffer32, 0, (vid->displine << 1) + 1, (vid->crtc[1] << 3) + 16, (vid->array[2] & 0xf) + 16); + } else { + hline(buffer32, 0, (vid->displine << 1), (vid->crtc[1] << 4) + 16, (vid->array[2] & 0xf) + 16); + hline(buffer32, 0, (vid->displine << 1) + 1, (vid->crtc[1] << 4) + 16, (vid->array[2] & 0xf) + 16); + } + } else { + cols[0] = ((vid->mode & 0x12) == 0x12) ? 0 : (vid->col & 0xf) + 16; + if (vid->mode & 1) { + hline(buffer32, 0, (vid->displine << 1), (vid->crtc[1] << 3) + 16, cols[0]); + hline(buffer32, 0, (vid->displine << 1) + 1, (vid->crtc[1] << 3) + 16, cols[0]); + } else { + hline(buffer32, 0, (vid->displine << 1), (vid->crtc[1] << 4) + 16, cols[0]); + hline(buffer32, 0, (vid->displine << 1) + 1, (vid->crtc[1] << 4) + 16, cols[0]); + } + } + } - if (vid->mode & 1) - x = (vid->crtc[1] << 3) + 16; - else - x = (vid->crtc[1] << 4) + 16; - if (!dev->is_sl2 && vid->composite) { - Composite_Process(vid->mode, 0, x >> 2, buffer32->line[(vid->displine << 1)]); - Composite_Process(vid->mode, 0, x >> 2, buffer32->line[(vid->displine << 1) + 1]); - } - vid->sc = oldsc; - if (vid->vc == vid->crtc[7] && !vid->sc) - vid->stat |= 8; - vid->displine++; - if (vid->displine >= 360) - vid->displine = 0; + if (vid->mode & 1) + x = (vid->crtc[1] << 3) + 16; + else + x = (vid->crtc[1] << 4) + 16; + if (!dev->is_sl2 && vid->composite) { + Composite_Process(vid->mode, 0, x >> 2, buffer32->line[(vid->displine << 1)]); + Composite_Process(vid->mode, 0, x >> 2, buffer32->line[(vid->displine << 1) + 1]); + } + vid->sc = oldsc; + if (vid->vc == vid->crtc[7] && !vid->sc) + vid->stat |= 8; + vid->displine++; + if (vid->displine >= 360) + vid->displine = 0; } else { - timer_advance_u64(&vid->timer, vid->dispontime); - if (vid->dispon) - vid->stat &= ~1; - vid->linepos = 0; - if (vid->vsynctime) { - vid->vsynctime--; - if (! vid->vsynctime) - vid->stat &= ~8; - } - if (vid->sc == (vid->crtc[11] & 31) || ((vid->crtc[8] & 3) == 3 && vid->sc == ((vid->crtc[11] & 31) >> 1))) { - vid->con = 0; - vid->coff = 1; - } - if (vid->vadj) { - vid->sc++; - vid->sc &= 31; - vid->ma = vid->maback; - vid->vadj--; - if (! vid->vadj) { - vid->dispon = 1; - if (dev->is_sl2 && (vid->array[5] & 1)) - vid->ma = vid->maback = vid->crtc[13] | (vid->crtc[12] << 8); - else - vid->ma = vid->maback = (vid->crtc[13] | (vid->crtc[12] << 8)) & 0x3fff; - vid->sc = 0; - } - } else if (vid->sc == vid->crtc[9] || ((vid->crtc[8] & 3) == 3 && vid->sc == (vid->crtc[9] >> 1))) { - vid->maback = vid->ma; - vid->sc = 0; - oldvc = vid->vc; - vid->vc++; - if (dev->is_sl2) - vid->vc &= 255; - else - vid->vc &= 127; - if (vid->vc == vid->crtc[6]) - vid->dispon = 0; - if (oldvc == vid->crtc[4]) { - vid->vc = 0; - vid->vadj = vid->crtc[5]; - if (! vid->vadj) - vid->dispon = 1; - if (! vid->vadj) { - if (dev->is_sl2 && (vid->array[5] & 1)) - vid->ma = vid->maback = vid->crtc[13] | (vid->crtc[12] << 8); - else - vid->ma = vid->maback = (vid->crtc[13] | (vid->crtc[12] << 8)) & 0x3fff; - } - if ((vid->crtc[10] & 0x60) == 0x20) - vid->cursoron = 0; - else - vid->cursoron = vid->blink & 16; - } - if (vid->vc == vid->crtc[7]) { - vid->dispon = 0; - vid->displine = 0; - vid->vsynctime = 16; - if (vid->crtc[7]) { - if (vid->mode & 1) - x = (vid->crtc[1] << 3) + 16; - else - x = (vid->crtc[1] << 4) + 16; - vid->lastline++; + timer_advance_u64(&vid->timer, vid->dispontime); + if (vid->dispon) + vid->stat &= ~1; + vid->linepos = 0; + if (vid->vsynctime) { + vid->vsynctime--; + if (!vid->vsynctime) + vid->stat &= ~8; + } + if (vid->sc == (vid->crtc[11] & 31) || ((vid->crtc[8] & 3) == 3 && vid->sc == ((vid->crtc[11] & 31) >> 1))) { + vid->con = 0; + vid->coff = 1; + } + if (vid->vadj) { + vid->sc++; + vid->sc &= 31; + vid->ma = vid->maback; + vid->vadj--; + if (!vid->vadj) { + vid->dispon = 1; + if (dev->is_sl2 && (vid->array[5] & 1)) + vid->ma = vid->maback = vid->crtc[13] | (vid->crtc[12] << 8); + else + vid->ma = vid->maback = (vid->crtc[13] | (vid->crtc[12] << 8)) & 0x3fff; + vid->sc = 0; + } + } else if (vid->sc == vid->crtc[9] || ((vid->crtc[8] & 3) == 3 && vid->sc == (vid->crtc[9] >> 1))) { + vid->maback = vid->ma; + vid->sc = 0; + oldvc = vid->vc; + vid->vc++; + if (dev->is_sl2) + vid->vc &= 255; + else + vid->vc &= 127; + if (vid->vc == vid->crtc[6]) + vid->dispon = 0; + if (oldvc == vid->crtc[4]) { + vid->vc = 0; + vid->vadj = vid->crtc[5]; + if (!vid->vadj) + vid->dispon = 1; + if (!vid->vadj) { + if (dev->is_sl2 && (vid->array[5] & 1)) + vid->ma = vid->maback = vid->crtc[13] | (vid->crtc[12] << 8); + else + vid->ma = vid->maback = (vid->crtc[13] | (vid->crtc[12] << 8)) & 0x3fff; + } + if ((vid->crtc[10] & 0x60) == 0x20) + vid->cursoron = 0; + else + vid->cursoron = vid->blink & 16; + } + if (vid->vc == vid->crtc[7]) { + vid->dispon = 0; + vid->displine = 0; + vid->vsynctime = 16; + if (vid->crtc[7]) { + if (vid->mode & 1) + x = (vid->crtc[1] << 3) + 16; + else + x = (vid->crtc[1] << 4) + 16; + vid->lastline++; - xs_temp = x; - ys_temp = (vid->lastline - vid->firstline) << 1; + xs_temp = x; + ys_temp = (vid->lastline - vid->firstline) << 1; - if ((xs_temp > 0) && (ys_temp > 0)) { - if (xs_temp < 64) xs_temp = 656; - if (ys_temp < 32) ys_temp = 400; - if (!enable_overscan) - xs_temp -= 16; + if ((xs_temp > 0) && (ys_temp > 0)) { + if (xs_temp < 64) + xs_temp = 656; + if (ys_temp < 32) + ys_temp = 400; + if (!enable_overscan) + xs_temp -= 16; - if (((xs_temp != xsize) || (ys_temp != ysize) || video_force_resize_get())) { - xsize = xs_temp; - ysize = ys_temp; - set_screen_size(xsize, ysize + (enable_overscan ? 16 : 0)); + if (((xs_temp != xsize) || (ys_temp != ysize) || video_force_resize_get())) { + xsize = xs_temp; + ysize = ys_temp; + set_screen_size(xsize, ysize + (enable_overscan ? 16 : 0)); - if (video_force_resize_get()) - video_force_resize_set(0); - } + if (video_force_resize_get()) + video_force_resize_set(0); + } - if (enable_overscan) { - if (!dev->is_sl2 && vid->composite) - video_blit_memtoscreen(0, (vid->firstline - 4) << 1, - xsize, ((vid->lastline - vid->firstline) + 8) << 1); - else - video_blit_memtoscreen_8(0, (vid->firstline - 4) << 1, - xsize, ((vid->lastline - vid->firstline) + 8) << 1); - } else { - if (!dev->is_sl2 && vid->composite) - video_blit_memtoscreen(8, vid->firstline << 1, - xsize, (vid->lastline - vid->firstline) << 1); - else - video_blit_memtoscreen_8(8, vid->firstline << 1, - xsize, (vid->lastline - vid->firstline) << 1); - } - } + if (enable_overscan) { + if (!dev->is_sl2 && vid->composite) + video_blit_memtoscreen(0, (vid->firstline - 4) << 1, + xsize, ((vid->lastline - vid->firstline) + 8) << 1); + else + video_blit_memtoscreen_8(0, (vid->firstline - 4) << 1, + xsize, ((vid->lastline - vid->firstline) + 8) << 1); + } else { + if (!dev->is_sl2 && vid->composite) + video_blit_memtoscreen(8, vid->firstline << 1, + xsize, (vid->lastline - vid->firstline) << 1); + else + video_blit_memtoscreen_8(8, vid->firstline << 1, + xsize, (vid->lastline - vid->firstline) << 1); + } + } - frames++; + frames++; - video_res_x = xsize; - video_res_y = ysize; - if ((vid->array[3] & 0x10) && (vid->mode & 1)) { /*320x200x16*/ - video_res_x /= 2; - video_bpp = 4; - } else if (vid->array[3] & 0x10) { /*160x200x16*/ - video_res_x /= 4; - video_bpp = 4; - } else if (vid->array[3] & 0x08) { /*640x200x4 - this implementation is a complete guess!*/ - video_bpp = 2; - } else if (vid->mode & 1) { - video_res_x /= 8; - video_res_y /= vid->crtc[9] + 1; - video_bpp = 0; - } else if (! (vid->mode & 2)) { - video_res_x /= 16; - video_res_y /= vid->crtc[9] + 1; - video_bpp = 0; - } else if (! (vid->mode & 16)) { - video_res_x /= 2; - video_bpp = 2; - } else { - video_bpp = 1; - } - } - vid->firstline = 1000; - vid->lastline = 0; - vid->blink++; - } - } else { - vid->sc++; - vid->sc &= 31; - vid->ma = vid->maback; - } - if ((vid->sc == (vid->crtc[10] & 31) || ((vid->crtc[8] & 3) == 3 && vid->sc == ((vid->crtc[10] & 31) >> 1)))) - vid->con = 1; + video_res_x = xsize; + video_res_y = ysize; + if ((vid->array[3] & 0x10) && (vid->mode & 1)) { /*320x200x16*/ + video_res_x /= 2; + video_bpp = 4; + } else if (vid->array[3] & 0x10) { /*160x200x16*/ + video_res_x /= 4; + video_bpp = 4; + } else if (vid->array[3] & 0x08) { /*640x200x4 - this implementation is a complete guess!*/ + video_bpp = 2; + } else if (vid->mode & 1) { + video_res_x /= 8; + video_res_y /= vid->crtc[9] + 1; + video_bpp = 0; + } else if (!(vid->mode & 2)) { + video_res_x /= 16; + video_res_y /= vid->crtc[9] + 1; + video_bpp = 0; + } else if (!(vid->mode & 16)) { + video_res_x /= 2; + video_bpp = 2; + } else { + video_bpp = 1; + } + } + vid->firstline = 1000; + vid->lastline = 0; + vid->blink++; + } + } else { + vid->sc++; + vid->sc &= 31; + vid->ma = vid->maback; + } + if ((vid->sc == (vid->crtc[10] & 31) || ((vid->crtc[8] & 3) == 3 && vid->sc == ((vid->crtc[10] & 31) >> 1)))) + vid->con = 1; } } - static void vid_speed_changed(void *priv) { - tandy_t *dev = (tandy_t *)priv; + tandy_t *dev = (tandy_t *) priv; recalc_timings(dev); } - static void vid_close(void *priv) { - tandy_t *dev = (tandy_t *)priv; + tandy_t *dev = (tandy_t *) priv; free(dev->vid); dev->vid = NULL; } - static void vid_init(tandy_t *dev) { - int display_type; + int display_type; t1kvid_t *vid; vid = malloc(sizeof(t1kvid_t)); memset(vid, 0x00, sizeof(t1kvid_t)); vid->memctrl = -1; - dev->vid = vid; + dev->vid = vid; video_inform(VIDEO_FLAG_TYPE_CGA, &timing_dram); - display_type = machine_get_config_int("display_type"); + display_type = machine_get_config_int("display_type"); vid->composite = (display_type != TANDY_RGB); cga_comp_init(1); if (dev->is_sl2) { - vid->b8000_limit = 0x8000; - vid->planar_ctrl = 4; - overscan_x = overscan_y = 16; + vid->b8000_limit = 0x8000; + vid->planar_ctrl = 4; + overscan_x = overscan_y = 16; - io_sethandler(0x0065, 1, vid_in,NULL,NULL, vid_out,NULL,NULL, dev); + io_sethandler(0x0065, 1, vid_in, NULL, NULL, vid_out, NULL, NULL, dev); } else - vid->b8000_mask = 0x3fff; + vid->b8000_mask = 0x3fff; timer_add(&vid->timer, vid_poll, dev, 1); mem_mapping_add(&vid->mapping, 0xb8000, 0x08000, - vid_read,NULL,NULL, vid_write,NULL,NULL, NULL, 0, dev); + vid_read, NULL, NULL, vid_write, NULL, NULL, NULL, 0, dev); io_sethandler(0x03d0, 16, - vid_in,NULL,NULL, vid_out,NULL,NULL, dev); + vid_in, NULL, NULL, vid_out, NULL, NULL, dev); } - const device_config_t vid_config[] = { + // clang-format off { .name = "display_type", .description = "Display type", @@ -1159,339 +1092,330 @@ const device_config_t vid_config[] = { } }, { .name = "", .description = "", .type = CONFIG_END } + // clang-format on }; const device_t vid_device = { - .name = "Tandy 1000", + .name = "Tandy 1000", .internal_name = "tandy1000_video", - .flags = 0, - .local = 0, - .init = NULL, - .close = vid_close, - .reset = NULL, + .flags = 0, + .local = 0, + .init = NULL, + .close = vid_close, + .reset = NULL, { .available = NULL }, .speed_changed = vid_speed_changed, - .force_redraw = NULL, - .config = vid_config + .force_redraw = NULL, + .config = vid_config }; const device_t vid_device_hx = { - .name = "Tandy 1000 HX", + .name = "Tandy 1000 HX", .internal_name = "tandy1000_hx_video", - .flags = 0, - .local = 0, - .init = NULL, - .close = vid_close, - .reset = NULL, + .flags = 0, + .local = 0, + .init = NULL, + .close = vid_close, + .reset = NULL, { .available = NULL }, .speed_changed = vid_speed_changed, - .force_redraw = NULL, - .config = vid_config + .force_redraw = NULL, + .config = vid_config }; const device_t vid_device_sl = { - .name = "Tandy 1000SL2", + .name = "Tandy 1000SL2", .internal_name = "tandy1000_sl_video", - .flags = 0, - .local = 1, - .init = NULL, - .close = vid_close, - .reset = NULL, + .flags = 0, + .local = 1, + .init = NULL, + .close = vid_close, + .reset = NULL, { .available = NULL }, .speed_changed = vid_speed_changed, - .force_redraw = NULL, - .config = NULL + .force_redraw = NULL, + .config = NULL }; static void eep_write(uint16_t addr, uint8_t val, void *priv) { - t1keep_t *eep = (t1keep_t *)priv; + t1keep_t *eep = (t1keep_t *) priv; - if ((val & 4) && !eep->clk) switch (eep->state) { - case EEPROM_IDLE: - switch (eep->count) { - case 0: - if (! (val & 3)) - eep->count = 1; - else - eep->count = 0; - break; + if ((val & 4) && !eep->clk) + switch (eep->state) { + case EEPROM_IDLE: + switch (eep->count) { + case 0: + if (!(val & 3)) + eep->count = 1; + else + eep->count = 0; + break; - case 1: - if ((val & 3) == 2) - eep->count = 2; - else - eep->count = 0; - break; + case 1: + if ((val & 3) == 2) + eep->count = 2; + else + eep->count = 0; + break; - case 2: - if ((val & 3) == 3) - eep->state = EEPROM_GET_OPERATION; - eep->count = 0; - break; - } - break; + case 2: + if ((val & 3) == 3) + eep->state = EEPROM_GET_OPERATION; + eep->count = 0; + break; + } + break; - case EEPROM_GET_OPERATION: - eep->data = (eep->data << 1) | (val & 1); - eep->count++; - if (eep->count == 8) { - eep->count = 0; - eep->addr = eep->data & 0x3f; - switch (eep->data & 0xc0) { - case 0x40: - eep->state = EEPROM_WRITE; - break; + case EEPROM_GET_OPERATION: + eep->data = (eep->data << 1) | (val & 1); + eep->count++; + if (eep->count == 8) { + eep->count = 0; + eep->addr = eep->data & 0x3f; + switch (eep->data & 0xc0) { + case 0x40: + eep->state = EEPROM_WRITE; + break; - case 0x80: - eep->state = EEPROM_READ; - eep->data = eep->store[eep->addr]; - break; + case 0x80: + eep->state = EEPROM_READ; + eep->data = eep->store[eep->addr]; + break; - default: - eep->state = EEPROM_IDLE; - break; - } - } - break; + default: + eep->state = EEPROM_IDLE; + break; + } + } + break; - case EEPROM_READ: - eep_data_out = eep->data & 0x8000; - eep->data <<= 1; - eep->count++; - if (eep->count == 16) { - eep->count = 0; - eep->state = EEPROM_IDLE; - } - break; + case EEPROM_READ: + eep_data_out = eep->data & 0x8000; + eep->data <<= 1; + eep->count++; + if (eep->count == 16) { + eep->count = 0; + eep->state = EEPROM_IDLE; + } + break; - case EEPROM_WRITE: - eep->data = (eep->data << 1) | (val & 1); - eep->count++; - if (eep->count == 16) { - eep->count = 0; - eep->state = EEPROM_IDLE; - eep->store[eep->addr] = eep->data; - } - break; - } + case EEPROM_WRITE: + eep->data = (eep->data << 1) | (val & 1); + eep->count++; + if (eep->count == 16) { + eep->count = 0; + eep->state = EEPROM_IDLE; + eep->store[eep->addr] = eep->data; + } + break; + } eep->clk = val & 4; } - static void * eep_init(const device_t *info) { t1keep_t *eep; - FILE *f = NULL; + FILE *f = NULL; - eep = (t1keep_t *)malloc(sizeof(t1keep_t)); + eep = (t1keep_t *) malloc(sizeof(t1keep_t)); memset(eep, 0x00, sizeof(t1keep_t)); switch (info->local) { - case TYPE_TANDY1000HX: - eep->path = "tandy1000hx.bin"; - break; - - case TYPE_TANDY1000SL2: - eep->path = "tandy1000sl2.bin"; - break; + case TYPE_TANDY1000HX: + eep->path = "tandy1000hx.bin"; + break; + case TYPE_TANDY1000SL2: + eep->path = "tandy1000sl2.bin"; + break; } f = nvr_fopen(eep->path, "rb"); if (f != NULL) { - if (fread(eep->store, 1, 128, f) != 128) - fatal("eep_init(): Error reading Tandy EEPROM\n"); - (void)fclose(f); + if (fread(eep->store, 1, 128, f) != 128) + fatal("eep_init(): Error reading Tandy EEPROM\n"); + (void) fclose(f); } else - memset(eep->store, 0x00, 128); + memset(eep->store, 0x00, 128); - io_sethandler(0x037c, 1, NULL,NULL,NULL, eep_write,NULL,NULL, eep); + io_sethandler(0x037c, 1, NULL, NULL, NULL, eep_write, NULL, NULL, eep); - return(eep); + return (eep); } - static void eep_close(void *priv) { - t1keep_t *eep = (t1keep_t *)priv; - FILE *f = NULL; + t1keep_t *eep = (t1keep_t *) priv; + FILE *f = NULL; f = nvr_fopen(eep->path, "wb"); if (f != NULL) { - (void)fwrite(eep->store, 128, 1, f); - (void)fclose(f); + (void) fwrite(eep->store, 128, 1, f); + (void) fclose(f); } free(eep); } static const device_t eep_1000hx_device = { - .name = "Tandy 1000HX EEPROM", + .name = "Tandy 1000HX EEPROM", .internal_name = "eep_1000hx", - .flags = 0, - .local = TYPE_TANDY1000HX, - .init = eep_init, - .close = eep_close, - .reset = NULL, + .flags = 0, + .local = TYPE_TANDY1000HX, + .init = eep_init, + .close = eep_close, + .reset = NULL, { .available = NULL }, .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL + .force_redraw = NULL, + .config = NULL }; static const device_t eep_1000sl2_device = { - .name = "Tandy 1000SL2 EEPROM", + .name = "Tandy 1000SL2 EEPROM", .internal_name = "eep_1000sl2", - .flags = 0, - .local = TYPE_TANDY1000SL2, - .init = eep_init, - .close = eep_close, - .reset = NULL, + .flags = 0, + .local = TYPE_TANDY1000SL2, + .init = eep_init, + .close = eep_close, + .reset = NULL, { .available = NULL }, .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL + .force_redraw = NULL, + .config = NULL }; static void tandy_write(uint16_t addr, uint8_t val, void *priv) { - tandy_t *dev = (tandy_t *)priv; + tandy_t *dev = (tandy_t *) priv; switch (addr) { - case 0x00a0: - mem_mapping_set_addr(&dev->ram_mapping, - ((val >> 1) & 7) * 128 * 1024, 0x20000); - dev->ram_bank = val; - break; + case 0x00a0: + mem_mapping_set_addr(&dev->ram_mapping, + ((val >> 1) & 7) * 128 * 1024, 0x20000); + dev->ram_bank = val; + break; - case 0xffe8: - if ((val & 0xe) == 0xe) - mem_mapping_disable(&dev->ram_mapping); - else - mem_mapping_set_addr(&dev->ram_mapping, - ((val >> 1) & 7) * 128 * 1024, - 0x20000); - recalc_address_sl(dev); - dev->ram_bank = val; - break; + case 0xffe8: + if ((val & 0xe) == 0xe) + mem_mapping_disable(&dev->ram_mapping); + else + mem_mapping_set_addr(&dev->ram_mapping, + ((val >> 1) & 7) * 128 * 1024, + 0x20000); + recalc_address_sl(dev); + dev->ram_bank = val; + break; - case 0xffea: - dev->rom_bank = val; - dev->rom_offset = ((val ^ 4) & 7) * 0x10000; - mem_mapping_set_exec(&dev->rom_mapping, - &dev->rom[dev->rom_offset]); + case 0xffea: + dev->rom_bank = val; + dev->rom_offset = ((val ^ 4) & 7) * 0x10000; + mem_mapping_set_exec(&dev->rom_mapping, + &dev->rom[dev->rom_offset]); } } - static uint8_t tandy_read(uint16_t addr, void *priv) { - tandy_t *dev = (tandy_t *)priv; - uint8_t ret = 0xff; + tandy_t *dev = (tandy_t *) priv; + uint8_t ret = 0xff; switch (addr) { - case 0x00a0: - ret = dev->ram_bank; - break; + case 0x00a0: + ret = dev->ram_bank; + break; - case 0xffe8: - ret = dev->ram_bank; - break; + case 0xffe8: + ret = dev->ram_bank; + break; - case 0xffea: - ret = (dev->rom_bank ^ 0x10); - break; + case 0xffea: + ret = (dev->rom_bank ^ 0x10); + break; } - return(ret); + return (ret); } - static void write_ram(uint32_t addr, uint8_t val, void *priv) { - tandy_t *dev = (tandy_t *)priv; + tandy_t *dev = (tandy_t *) priv; ram[dev->base + (addr & 0x1ffff)] = val; } - static uint8_t read_ram(uint32_t addr, void *priv) { - tandy_t *dev = (tandy_t *)priv; + tandy_t *dev = (tandy_t *) priv; - return(ram[dev->base + (addr & 0x1ffff)]); + return (ram[dev->base + (addr & 0x1ffff)]); } - static uint8_t read_rom(uint32_t addr, void *priv) { - tandy_t *dev = (tandy_t *)priv; + tandy_t *dev = (tandy_t *) priv; uint32_t addr2 = (addr & 0xffff) + dev->rom_offset; - return(dev->rom[addr2]); + return (dev->rom[addr2]); } - static uint16_t read_romw(uint32_t addr, void *priv) { - tandy_t *dev = (tandy_t *)priv; + tandy_t *dev = (tandy_t *) priv; uint32_t addr2 = (addr & 0xffff) + dev->rom_offset; - return(*(uint16_t *)&dev->rom[addr2]); + return (*(uint16_t *) &dev->rom[addr2]); } - static uint32_t read_roml(uint32_t addr, void *priv) { - tandy_t *dev = (tandy_t *)priv; + tandy_t *dev = (tandy_t *) priv; - return(*(uint32_t *)&dev->rom[addr]); + return (*(uint32_t *) &dev->rom[addr]); } - static void init_rom(tandy_t *dev) { - dev->rom = (uint8_t *)malloc(0x80000); + dev->rom = (uint8_t *) malloc(0x80000); #if 1 - if (! rom_load_interleaved("roms/machines/tandy1000sl2/8079047.hu1", - "roms/machines/tandy1000sl2/8079048.hu2", - 0x000000, 0x80000, 0, dev->rom)) { - tandy_log("TANDY: unable to load BIOS for 1000/SL2 !\n"); - free(dev->rom); - dev->rom = NULL; - return; + if (!rom_load_interleaved("roms/machines/tandy1000sl2/8079047.hu1", + "roms/machines/tandy1000sl2/8079048.hu2", + 0x000000, 0x80000, 0, dev->rom)) { + tandy_log("TANDY: unable to load BIOS for 1000/SL2 !\n"); + free(dev->rom); + dev->rom = NULL; + return; } #else f = rom_fopen("roms/machines/tandy1000sl2/8079047.hu1", "rb"); ff = rom_fopen("roms/machines/tandy1000sl2/8079048.hu2", "rb"); for (c = 0x0000; c < 0x80000; c += 2) { - dev->rom[c] = getc(f); - dev->rom[c + 1] = getc(ff); + dev->rom[c] = getc(f); + dev->rom[c + 1] = getc(ff); } fclose(ff); fclose(f); #endif mem_mapping_add(&dev->rom_mapping, 0xe0000, 0x10000, - read_rom, read_romw, read_roml, NULL, NULL, NULL, - dev->rom, MEM_MAPPING_EXTERNAL, dev); + read_rom, read_romw, read_roml, NULL, NULL, NULL, + dev->rom, MEM_MAPPING_EXTERNAL, dev); } - static void machine_tandy1k_init(const machine_t *model, int type) { @@ -1510,46 +1434,46 @@ machine_tandy1k_init(const machine_t *model, int type) */ dev->base = (mem_size - 128) * 1024; mem_mapping_add(&dev->ram_mapping, 0x80000, 0x20000, - read_ram,NULL,NULL, write_ram,NULL,NULL, NULL, 0, dev); + read_ram, NULL, NULL, write_ram, NULL, NULL, NULL, 0, dev); mem_mapping_set_addr(&ram_low_mapping, 0, dev->base); device_add(&keyboard_tandy_device); if (fdc_type == FDC_INTERNAL) - device_add(&fdc_xt_tandy_device); + device_add(&fdc_xt_tandy_device); video_reset(gfxcard); - switch(type) { - case TYPE_TANDY: - keyboard_set_table(scancode_tandy); - io_sethandler(0x00a0, 1, - tandy_read,NULL,NULL,tandy_write,NULL,NULL,dev); - vid_init(dev); - device_add_ex(&vid_device, dev); - device_add(&sn76489_device); - break; + switch (type) { + case TYPE_TANDY: + keyboard_set_table(scancode_tandy); + io_sethandler(0x00a0, 1, + tandy_read, NULL, NULL, tandy_write, NULL, NULL, dev); + vid_init(dev); + device_add_ex(&vid_device, dev); + device_add(&sn76489_device); + break; - case TYPE_TANDY1000HX: - keyboard_set_table(scancode_tandy); - io_sethandler(0x00a0, 1, - tandy_read,NULL,NULL,tandy_write,NULL,NULL,dev); - vid_init(dev); - device_add_ex(&vid_device, dev); - device_add(&ncr8496_device); - device_add(&eep_1000hx_device); - break; + case TYPE_TANDY1000HX: + keyboard_set_table(scancode_tandy); + io_sethandler(0x00a0, 1, + tandy_read, NULL, NULL, tandy_write, NULL, NULL, dev); + vid_init(dev); + device_add_ex(&vid_device, dev); + device_add(&ncr8496_device); + device_add(&eep_1000hx_device); + break; - case TYPE_TANDY1000SL2: - dev->is_sl2 = 1; - init_rom(dev); - io_sethandler(0xffe8, 8, - tandy_read,NULL,NULL,tandy_write,NULL,NULL,dev); - vid_init(dev); - device_add_ex(&vid_device_sl, dev); - device_add(&pssj_device); - device_add(&eep_1000sl2_device); - break; + case TYPE_TANDY1000SL2: + dev->is_sl2 = 1; + init_rom(dev); + io_sethandler(0xffe8, 8, + tandy_read, NULL, NULL, tandy_write, NULL, NULL, dev); + vid_init(dev); + device_add_ex(&vid_device_sl, dev); + device_add(&pssj_device); + device_add(&eep_1000sl2_device); + break; } standalone_gameport_type = &gameport_device; @@ -1557,59 +1481,55 @@ machine_tandy1k_init(const machine_t *model, int type) eep_data_out = 0x0000; } - int tandy1k_eeprom_read(void) { - return(eep_data_out); + return (eep_data_out); } - int machine_tandy_init(const machine_t *model) { int ret; ret = bios_load_linearr("roms/machines/tandy/tandy1t1.020", - 0x000f0000, 131072, 0); + 0x000f0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_tandy1k_init(model, TYPE_TANDY); return ret; } - int machine_tandy1000hx_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/tandy1000hx/v020000.u12", - 0x000e0000, 131072, 0); + 0x000e0000, 131072, 0); if (bios_only || !ret) - return ret; + return ret; machine_tandy1k_init(model, TYPE_TANDY1000HX); return ret; } - int machine_tandy1000sl2_init(const machine_t *model) { int ret; ret = bios_load_interleaved("roms/machines/tandy1000sl2/8079047.hu1", - "roms/machines/tandy1000sl2/8079048.hu2", - 0x000f0000, 65536, 0x18000); + "roms/machines/tandy1000sl2/8079048.hu2", + 0x000f0000, 65536, 0x18000); if (bios_only || !ret) - return ret; + return ret; machine_tandy1k_init(model, TYPE_TANDY1000SL2); diff --git a/src/machine/m_v86p.c b/src/machine/m_v86p.c index 022c9baec..4642d6b80 100644 --- a/src/machine/m_v86p.c +++ b/src/machine/m_v86p.c @@ -50,47 +50,47 @@ int machine_v86p_init(const machine_t *model) { - int ret, rom = 0; + int ret, rom = 0; - ret = bios_load_interleavedr("roms/machines/v86p/INTEL8086AWD_BIOS_S3.1_V86P_122089_Even.rom", - "roms/machines/v86p/INTEL8086AWD_BIOS_S3.1_V86P_122089_Odd.rom", - 0x000f8000, 65536, 0); + ret = bios_load_interleavedr("roms/machines/v86p/INTEL8086AWD_BIOS_S3.1_V86P_122089_Even.rom", + "roms/machines/v86p/INTEL8086AWD_BIOS_S3.1_V86P_122089_Odd.rom", + 0x000f8000, 65536, 0); - if (!ret) { - /* Try an older version of the BIOS. */ - rom = 1; - ret = bios_load_interleavedr("roms/machines/v86p/INTEL8086AWD_BIOS_S3.1_V86P_090489_Even.rom", - "roms/machines/v86p/INTEL8086AWD_BIOS_S3.1_V86P_090489_Odd.rom", - 0x000f8000, 65536, 0); - } + if (!ret) { + /* Try an older version of the BIOS. */ + rom = 1; + ret = bios_load_interleavedr("roms/machines/v86p/INTEL8086AWD_BIOS_S3.1_V86P_090489_Even.rom", + "roms/machines/v86p/INTEL8086AWD_BIOS_S3.1_V86P_090489_Odd.rom", + 0x000f8000, 65536, 0); + } - if (!ret) { - /* Try JVERNET's BIOS. */ - rom = 2; - ret = bios_load_linear("roms/machines/v86p/V86P.ROM", - 0x000f0000, 65536, 0); - } + if (!ret) { + /* Try JVERNET's BIOS. */ + rom = 2; + ret = bios_load_linear("roms/machines/v86p/V86P.ROM", + 0x000f0000, 65536, 0); + } - if (bios_only || !ret) - return ret; + if (bios_only || !ret) + return ret; - if (rom == 2) - loadfont("roms/machines/v86p/V86P.FON", 8); - else - loadfont("roms/machines/v86p/v86pfont.rom", 8); + if (rom == 2) + loadfont("roms/machines/v86p/V86P.FON", 8); + else + loadfont("roms/machines/v86p/v86pfont.rom", 8); - machine_common_init(model); + machine_common_init(model); - device_add(&ct_82c100_device); - device_add(&f82c606_device); + device_add(&ct_82c100_device); + device_add(&f82c606_device); - device_add(&keyboard_xt_device); + device_add(&keyboard_xt_device); - if (fdc_type == FDC_INTERNAL) - device_add(&fdc_xt_device); + if (fdc_type == FDC_INTERNAL) + device_add(&fdc_xt_device); - if (gfxcard == VID_INTERNAL) - device_add(&f82c425_video_device); + if (gfxcard == VID_INTERNAL) + device_add(&f82c425_video_device); - return ret; + return ret; } diff --git a/src/machine/m_xt.c b/src/machine/m_xt.c index 5b31920c5..cd9a78df6 100644 --- a/src/machine/m_xt.c +++ b/src/machine/m_xt.c @@ -27,33 +27,32 @@ machine_xt_common_init(const machine_t *model) pit_devs[0].set_out_func(pit_devs[0].data, 1, pit_refresh_timer_xt); if (fdc_type == FDC_INTERNAL) - device_add(&fdc_xt_device); + device_add(&fdc_xt_device); nmi_init(); standalone_gameport_type = &gameport_device; } - int machine_pc_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/ibmpc/BIOS_5150_24APR81_U33.BIN", - 0x000fe000, 40960, 0); + 0x000fe000, 40960, 0); if (ret) { - bios_load_aux_linear("roms/machines/ibmpc/IBM 5150 - Cassette BASIC version C1.00 - U29 - 5700019.bin", - 0x000f6000, 8192, 0); - bios_load_aux_linear("roms/machines/ibmpc/IBM 5150 - Cassette BASIC version C1.00 - U30 - 5700027.bin", - 0x000f8000, 8192, 0); - bios_load_aux_linear("roms/machines/ibmpc/IBM 5150 - Cassette BASIC version C1.00 - U31 - 5700035.bin", - 0x000fa000, 8192, 0); - bios_load_aux_linear("roms/machines/ibmpc/IBM 5150 - Cassette BASIC version C1.00 - U32 - 5700043.bin", - 0x000fc000, 8192, 0); + bios_load_aux_linear("roms/machines/ibmpc/IBM 5150 - Cassette BASIC version C1.00 - U29 - 5700019.bin", + 0x000f6000, 8192, 0); + bios_load_aux_linear("roms/machines/ibmpc/IBM 5150 - Cassette BASIC version C1.00 - U30 - 5700027.bin", + 0x000f8000, 8192, 0); + bios_load_aux_linear("roms/machines/ibmpc/IBM 5150 - Cassette BASIC version C1.00 - U31 - 5700035.bin", + 0x000fa000, 8192, 0); + bios_load_aux_linear("roms/machines/ibmpc/IBM 5150 - Cassette BASIC version C1.00 - U32 - 5700043.bin", + 0x000fc000, 8192, 0); } if (bios_only || !ret) - return ret; + return ret; device_add(&keyboard_pc_device); @@ -62,31 +61,30 @@ machine_pc_init(const machine_t *model) return ret; } - int machine_pc82_init(const machine_t *model) { int ret, ret2; ret = bios_load_linear("roms/machines/ibmpc82/pc102782.bin", - 0x000fe000, 40960, 0); + 0x000fe000, 40960, 0); if (ret) { - ret2 = bios_load_aux_linear("roms/machines/ibmpc82/ibm-basic-1.10.rom", - 0x000f6000, 32768, 0); - if (!ret2) { - bios_load_aux_linear("roms/machines/ibmpc82/basicc11.f6", - 0x000f6000, 8192, 0); - bios_load_aux_linear("roms/machines/ibmpc82/basicc11.f8", - 0x000f8000, 8192, 0); - bios_load_aux_linear("roms/machines/ibmpc82/basicc11.fa", - 0x000fa000, 8192, 0); - bios_load_aux_linear("roms/machines/ibmpc82/basicc11.fc", - 0x000fc000, 8192, 0); - } + ret2 = bios_load_aux_linear("roms/machines/ibmpc82/ibm-basic-1.10.rom", + 0x000f6000, 32768, 0); + if (!ret2) { + bios_load_aux_linear("roms/machines/ibmpc82/basicc11.f6", + 0x000f6000, 8192, 0); + bios_load_aux_linear("roms/machines/ibmpc82/basicc11.f8", + 0x000f8000, 8192, 0); + bios_load_aux_linear("roms/machines/ibmpc82/basicc11.fa", + 0x000fa000, 8192, 0); + bios_load_aux_linear("roms/machines/ibmpc82/basicc11.fc", + 0x000fc000, 8192, 0); + } } if (bios_only || !ret) - return ret; + return ret; device_add(&keyboard_pc82_device); device_add(&ibm_5161_device); @@ -96,7 +94,6 @@ machine_pc82_init(const machine_t *model) return ret; } - static void machine_xt_init_ex(const machine_t *model) { @@ -105,27 +102,26 @@ machine_xt_init_ex(const machine_t *model) machine_xt_common_init(model); } - int machine_xt_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/ibmxt/xt.rom", - 0x000f0000, 65536, 0); + 0x000f0000, 65536, 0); if (!ret) { - ret = bios_load_linear("roms/machines/ibmxt/1501512.u18", - 0x000fe000, 65536, 0x6000); - if (ret) { - bios_load_aux_linear("roms/machines/ibmxt/1501512.u18", - 0x000f8000, 24576, 0); - bios_load_aux_linear("roms/machines/ibmxt/5000027.u19", - 0x000f0000, 32768, 0); - } + ret = bios_load_linear("roms/machines/ibmxt/1501512.u18", + 0x000fe000, 65536, 0x6000); + if (ret) { + bios_load_aux_linear("roms/machines/ibmxt/1501512.u18", + 0x000f8000, 24576, 0); + bios_load_aux_linear("roms/machines/ibmxt/5000027.u19", + 0x000f0000, 32768, 0); + } } if (bios_only || !ret) - return ret; + return ret; machine_xt_init_ex(model); @@ -134,17 +130,16 @@ machine_xt_init(const machine_t *model) return ret; } - int machine_genxt_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/genxt/pcxt.rom", - 0x000fe000, 8192, 0); + 0x000fe000, 8192, 0); if (bios_only || !ret) - return ret; + return ret; machine_xt_init_ex(model); @@ -157,16 +152,16 @@ machine_xt86_init(const machine_t *model) int ret; ret = bios_load_linear("roms/machines/ibmxt86/BIOS_5160_09MAY86_U18_59X7268_62X0890_27256_F800.BIN", - 0x000fe000, 65536, 0x6000); + 0x000fe000, 65536, 0x6000); if (ret) { - (void) bios_load_aux_linear("roms/machines/ibmxt86/BIOS_5160_09MAY86_U18_59X7268_62X0890_27256_F800.BIN", - 0x000f8000, 24576, 0); - (void) bios_load_aux_linear("roms/machines/ibmxt86/BIOS_5160_09MAY86_U19_62X0819_68X4370_27256_F000.BIN", - 0x000f0000, 32768, 0); + (void) bios_load_aux_linear("roms/machines/ibmxt86/BIOS_5160_09MAY86_U18_59X7268_62X0890_27256_F800.BIN", + 0x000f8000, 24576, 0); + (void) bios_load_aux_linear("roms/machines/ibmxt86/BIOS_5160_09MAY86_U19_62X0819_68X4370_27256_F000.BIN", + 0x000f0000, 32768, 0); } if (bios_only || !ret) - return ret; + return ret; device_add(&keyboard_xt86_device); device_add(&ibm_5161_device); @@ -176,7 +171,6 @@ machine_xt86_init(const machine_t *model) return ret; } - static void machine_xt_clone_init(const machine_t *model) { @@ -191,10 +185,10 @@ machine_xt_americxt_init(const machine_t *model) int ret; ret = bios_load_linear("roms/machines/americxt/AMERICXT.ROM", - 0x000fe000, 8192, 0); + 0x000fe000, 8192, 0); if (bios_only || !ret) - return ret; + return ret; machine_xt_clone_init(model); @@ -207,10 +201,10 @@ machine_xt_amixt_init(const machine_t *model) int ret; ret = bios_load_linear("roms/machines/amixt/ami_8088_bios_31jan89.bin", - 0x000fe000, 8192, 0); + 0x000fe000, 8192, 0); if (bios_only || !ret) - return ret; + return ret; machine_xt_clone_init(model); @@ -223,151 +217,143 @@ machine_xt_znic_init(const machine_t *model) int ret; ret = bios_load_linear("roms/machines/znic/ibmzen.rom", - 0x000fe000, 8192, 0); + 0x000fe000, 8192, 0); if (bios_only || !ret) - return ret; + return ret; machine_xt_clone_init(model); return ret; } - int machine_xt_dtk_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/dtk/dtk_erso_2.42_2764.bin", - 0x000fe000, 8192, 0); + 0x000fe000, 8192, 0); if (bios_only || !ret) - return ret; + return ret; machine_xt_clone_init(model); return ret; } - int machine_xt_jukopc_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/jukopc/000o001.bin", - 0x000fe000, 8192, 0); + 0x000fe000, 8192, 0); if (bios_only || !ret) - return ret; + return ret; machine_xt_clone_init(model); return ret; } - int machine_xt_openxt_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/openxt/pcxt31.bin", - 0x000fe000, 8192, 0); + 0x000fe000, 8192, 0); if (bios_only || !ret) - return ret; + return ret; machine_xt_clone_init(model); return ret; } - int machine_xt_pcxt_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/pcxt/u18.rom", - 0x000f8000, 65536, 0); + 0x000f8000, 65536, 0); if (ret) { - bios_load_aux_linear("roms/machines/pcxt/u19.rom", - 0x000f0000, 32768, 0); + bios_load_aux_linear("roms/machines/pcxt/u19.rom", + 0x000f0000, 32768, 0); } if (bios_only || !ret) - return ret; + return ret; machine_xt_clone_init(model); return ret; } - int machine_xt_pxxt_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/pxxt/000p001.bin", - 0x000fe000, 8192, 0); + 0x000fe000, 8192, 0); if (bios_only || !ret) - return ret; + return ret; machine_xt_clone_init(model); return ret; } - int machine_xt_iskra3104_init(const machine_t *model) { int ret; ret = bios_load_interleaved("roms/machines/iskra3104/198.bin", - "roms/machines/iskra3104/199.bin", - 0x000fc000, 16384, 0); + "roms/machines/iskra3104/199.bin", + 0x000fc000, 16384, 0); if (bios_only || !ret) - return ret; + return ret; machine_xt_clone_init(model); return ret; } - int machine_xt_pc4i_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/pc4i/NCR_PC4i_BIOSROM_1985.BIN", - 0x000fc000, 16384, 0); + 0x000fc000, 16384, 0); if (bios_only || !ret) - return ret; + return ret; machine_xt_clone_init(model); return ret; } - int machine_xt_mpc1600_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/mpc1600/mpc4.34_merged.bin", - 0x000fc000, 16384, 0); + 0x000fc000, 16384, 0); if (bios_only || !ret) - return ret; + return ret; device_add(&keyboard_pc82_device); @@ -376,22 +362,21 @@ machine_xt_mpc1600_init(const machine_t *model) return ret; } - int machine_xt_pcspirit_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/pcspirit/u1101.bin", - 0x000fe000, 16384, 0); + 0x000fe000, 16384, 0); if (ret) { - bios_load_aux_linear("roms/machines/pcspirit/u1103.bin", - 0x000fc000, 8192, 0); + bios_load_aux_linear("roms/machines/pcspirit/u1103.bin", + 0x000fc000, 8192, 0); } if (bios_only || !ret) - return ret; + return ret; device_add(&keyboard_pc82_device); @@ -400,17 +385,16 @@ machine_xt_pcspirit_init(const machine_t *model) return ret; } - int machine_xt_pc700_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/pc700/multitech pc-700 3.1.bin", - 0x000fe000, 8192, 0); + 0x000fe000, 8192, 0); if (bios_only || !ret) - return ret; + return ret; device_add(&keyboard_pc_device); @@ -419,17 +403,16 @@ machine_xt_pc700_init(const machine_t *model) return ret; } - int -machine_xt_pc500_init(const machine_t* model) +machine_xt_pc500_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/pc500/rom404.bin", - 0x000f8000, 32768, 0); + 0x000f8000, 32768, 0); if (bios_only || !ret) - return ret; + return ret; device_add(&keyboard_pc_device); @@ -444,10 +427,10 @@ machine_xt_vendex_init(const machine_t *model) int ret; ret = bios_load_linear("roms/machines/vendex/Vendex Turbo 888 XT - ROM BIOS - VER 2.03C.bin", - 0x000fc000, 16384, 0); + 0x000fc000, 16384, 0); if (bios_only || !ret) - return ret; + return ret; machine_xt_clone_init(model); @@ -460,15 +443,15 @@ machine_xt_super16t_init(const machine_t *model) int ret; ret = bios_load_linear("roms/machines/super16t/Hyundai SUPER-16T - System BIOS HEA v1.12Ta (16k)(MBM27128)(1986).BIN", - 0x000fc000, 16384, 0); + 0x000fc000, 16384, 0); if (bios_only || !ret) - return ret; + return ret; machine_xt_clone_init(model); /* On-board FDC cannot be disabled */ - device_add(&fdc_xt_device); + device_add(&fdc_xt_device); return ret; } @@ -479,15 +462,15 @@ machine_xt_super16te_init(const machine_t *model) int ret; ret = bios_load_linear("roms/machines/super16te/Hyundai SUPER-16TE - System BIOS v2.00Id (16k)(D27128A)(1989).BIN", - 0x000fc000, 16384, 0); + 0x000fc000, 16384, 0); if (bios_only || !ret) - return ret; + return ret; machine_xt_clone_init(model); /* On-board FDC cannot be disabled */ - device_add(&fdc_xt_device); + device_add(&fdc_xt_device); return ret; } @@ -498,15 +481,15 @@ machine_xt_top88_init(const machine_t *model) int ret; ret = bios_load_linear("roms/machines/top88/Hyosung Topstar 88T - BIOS version 3.0.bin", - 0x000fc000, 16384, 0); + 0x000fc000, 16384, 0); if (bios_only || !ret) - return ret; + return ret; machine_xt_clone_init(model); /* On-board FDC cannot be disabled */ - device_add(&fdc_xt_device); + device_add(&fdc_xt_device); return ret; } @@ -517,10 +500,10 @@ machine_xt_kaypropc_init(const machine_t *model) int ret; ret = bios_load_linear("roms/machines/kaypropc/Kaypro_v2.03K.bin", - 0x000fe000, 8192, 0); + 0x000fe000, 8192, 0); if (bios_only || !ret) - return ret; + return ret; machine_xt_clone_init(model); @@ -533,15 +516,15 @@ machine_xt_sansx16_init(const machine_t *model) int ret; ret = bios_load_linear("roms/machines/sansx16/tmm27128ad.bin.bin", - 0x000fc000, 16384, 0); + 0x000fc000, 16384, 0); if (bios_only || !ret) - return ret; + return ret; machine_xt_clone_init(model); /* On-board FDC cannot be disabled */ - device_add(&fdc_xt_device); + device_add(&fdc_xt_device); return ret; } @@ -552,10 +535,10 @@ machine_xt_bw230_init(const machine_t *model) int ret; ret = bios_load_linear("roms/machines/bw230/bondwell.bin", - 0x000fe000, 8192, 0); + 0x000fe000, 8192, 0); if (bios_only || !ret) - return ret; + return ret; machine_xt_clone_init(model); diff --git a/src/machine/m_xt_compaq.c b/src/machine/m_xt_compaq.c index a705f0e2b..d66c15eaf 100644 --- a/src/machine/m_xt_compaq.c +++ b/src/machine/m_xt_compaq.c @@ -43,10 +43,10 @@ machine_xt_compaq_deskpro_init(const machine_t *model) int ret; ret = bios_load_linear("roms/machines/deskpro/Compaq - BIOS - Revision J - 106265-002.bin", - 0x000fe000, 8192, 0); + 0x000fe000, 8192, 0); if (bios_only || !ret) - return ret; + return ret; machine_common_init(model); @@ -54,7 +54,7 @@ machine_xt_compaq_deskpro_init(const machine_t *model) device_add(&keyboard_xt_compaq_device); if (fdc_type == FDC_INTERNAL) - device_add(&fdc_xt_device); + device_add(&fdc_xt_device); nmi_init(); standalone_gameport_type = &gameport_device; @@ -64,17 +64,16 @@ machine_xt_compaq_deskpro_init(const machine_t *model) return ret; } - int machine_xt_compaq_portable_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/portable/compaq portable plus 100666-001 rev c u47.bin", - 0x000fe000, 8192, 0); + 0x000fe000, 8192, 0); if (bios_only || !ret) - return ret; + return ret; machine_common_init(model); @@ -82,10 +81,10 @@ machine_xt_compaq_portable_init(const machine_t *model) device_add(&keyboard_xt_compaq_device); if (fdc_type == FDC_INTERNAL) - device_add(&fdc_xt_device); + device_add(&fdc_xt_device); nmi_init(); if (joystick_type) - device_add(&gameport_device); + device_add(&gameport_device); lpt1_remove(); lpt1_init(LPT_MDA_ADDR); diff --git a/src/machine/m_xt_laserxt.c b/src/machine/m_xt_laserxt.c index 21681a5c2..02635ee8b 100644 --- a/src/machine/m_xt_laserxt.c +++ b/src/machine/m_xt_laserxt.c @@ -20,150 +20,150 @@ #include <86box/gameport.h> #include <86box/keyboard.h> - -static int laserxt_emspage[4]; -static int laserxt_emscontrol[4]; +static int laserxt_emspage[4]; +static int laserxt_emscontrol[4]; static mem_mapping_t laserxt_ems_mapping[4]; -static int laserxt_ems_baseaddr_index = 0; -static int laserxt_is_lxt3 = 0; +static int laserxt_ems_baseaddr_index = 0; +static int laserxt_is_lxt3 = 0; - -static uint32_t get_laserxt_ems_addr(uint32_t addr) +static uint32_t +get_laserxt_ems_addr(uint32_t addr) { - if(laserxt_emspage[(addr >> 14) & 3] & 0x80) - { - addr = (!laserxt_is_lxt3 ? 0x70000 + (((mem_size + 64) & 255) << 10) : 0x30000 + (((mem_size + 320) & 511) << 10)) + ((laserxt_emspage[(addr >> 14) & 3] & 0x0F) << 14) + ((laserxt_emspage[(addr >> 14) & 3] & 0x40) << 12) + (addr & 0x3FFF); - } + if (laserxt_emspage[(addr >> 14) & 3] & 0x80) { + addr = (!laserxt_is_lxt3 ? 0x70000 + (((mem_size + 64) & 255) << 10) : 0x30000 + (((mem_size + 320) & 511) << 10)) + ((laserxt_emspage[(addr >> 14) & 3] & 0x0F) << 14) + ((laserxt_emspage[(addr >> 14) & 3] & 0x40) << 12) + (addr & 0x3FFF); + } - return addr; + return addr; } - -static void laserxt_write(uint16_t port, uint8_t val, void *priv) +static void +laserxt_write(uint16_t port, uint8_t val, void *priv) { - int i; - uint32_t paddr, vaddr; - switch (port) - { - case 0x0208: case 0x4208: case 0x8208: case 0xC208: - laserxt_emspage[port >> 14] = val; - paddr = 0xC0000 + (port & 0xC000) + (((laserxt_ems_baseaddr_index + (4 - (port >> 14))) & 0x0C) << 14); - if(val & 0x80) - { - mem_mapping_enable(&laserxt_ems_mapping[port >> 14]); - vaddr = get_laserxt_ems_addr(paddr); - mem_mapping_set_exec(&laserxt_ems_mapping[port >> 14], ram + vaddr); - } - else - { - mem_mapping_disable(&laserxt_ems_mapping[port >> 14]); - } - flushmmucache(); - break; - case 0x0209: case 0x4209: case 0x8209: case 0xC209: - laserxt_emscontrol[port >> 14] = val; - laserxt_ems_baseaddr_index = 0; - for(i=0; i<4; i++) - { - laserxt_ems_baseaddr_index |= (laserxt_emscontrol[i] & 0x80) >> (7 - i); - } + int i; + uint32_t paddr, vaddr; + switch (port) { + case 0x0208: + case 0x4208: + case 0x8208: + case 0xC208: + laserxt_emspage[port >> 14] = val; + paddr = 0xC0000 + (port & 0xC000) + (((laserxt_ems_baseaddr_index + (4 - (port >> 14))) & 0x0C) << 14); + if (val & 0x80) { + mem_mapping_enable(&laserxt_ems_mapping[port >> 14]); + vaddr = get_laserxt_ems_addr(paddr); + mem_mapping_set_exec(&laserxt_ems_mapping[port >> 14], ram + vaddr); + } else { + mem_mapping_disable(&laserxt_ems_mapping[port >> 14]); + } + flushmmucache(); + break; + case 0x0209: + case 0x4209: + case 0x8209: + case 0xC209: + laserxt_emscontrol[port >> 14] = val; + laserxt_ems_baseaddr_index = 0; + for (i = 0; i < 4; i++) { + laserxt_ems_baseaddr_index |= (laserxt_emscontrol[i] & 0x80) >> (7 - i); + } - mem_mapping_set_addr(&laserxt_ems_mapping[0], 0xC0000 + (((laserxt_ems_baseaddr_index + 4) & 0x0C) << 14), 0x4000); - mem_mapping_set_addr(&laserxt_ems_mapping[1], 0xC4000 + (((laserxt_ems_baseaddr_index + 3) & 0x0C) << 14), 0x4000); - mem_mapping_set_addr(&laserxt_ems_mapping[2], 0xC8000 + (((laserxt_ems_baseaddr_index + 2) & 0x0C) << 14), 0x4000); - mem_mapping_set_addr(&laserxt_ems_mapping[3], 0xCC000 + (((laserxt_ems_baseaddr_index + 1) & 0x0C) << 14), 0x4000); - flushmmucache(); - break; - } + mem_mapping_set_addr(&laserxt_ems_mapping[0], 0xC0000 + (((laserxt_ems_baseaddr_index + 4) & 0x0C) << 14), 0x4000); + mem_mapping_set_addr(&laserxt_ems_mapping[1], 0xC4000 + (((laserxt_ems_baseaddr_index + 3) & 0x0C) << 14), 0x4000); + mem_mapping_set_addr(&laserxt_ems_mapping[2], 0xC8000 + (((laserxt_ems_baseaddr_index + 2) & 0x0C) << 14), 0x4000); + mem_mapping_set_addr(&laserxt_ems_mapping[3], 0xCC000 + (((laserxt_ems_baseaddr_index + 1) & 0x0C) << 14), 0x4000); + flushmmucache(); + break; + } } - -static uint8_t laserxt_read(uint16_t port, void *priv) +static uint8_t +laserxt_read(uint16_t port, void *priv) { - switch (port) - { - case 0x0208: case 0x4208: case 0x8208: case 0xC208: - return laserxt_emspage[port >> 14]; - case 0x0209: case 0x4209: case 0x8209: case 0xC209: - return laserxt_emscontrol[port >> 14]; - break; - } - return 0xff; + switch (port) { + case 0x0208: + case 0x4208: + case 0x8208: + case 0xC208: + return laserxt_emspage[port >> 14]; + case 0x0209: + case 0x4209: + case 0x8209: + case 0xC209: + return laserxt_emscontrol[port >> 14]; + break; + } + return 0xff; } - -static void mem_write_laserxtems(uint32_t addr, uint8_t val, void *priv) +static void +mem_write_laserxtems(uint32_t addr, uint8_t val, void *priv) { - addr = get_laserxt_ems_addr(addr); - if (addr < (mem_size << 10)) - ram[addr] = val; + addr = get_laserxt_ems_addr(addr); + if (addr < (mem_size << 10)) + ram[addr] = val; } - -static uint8_t mem_read_laserxtems(uint32_t addr, void *priv) +static uint8_t +mem_read_laserxtems(uint32_t addr, void *priv) { - uint8_t val = 0xFF; - addr = get_laserxt_ems_addr(addr); - if (addr < (mem_size << 10)) - val = ram[addr]; - return val; + uint8_t val = 0xFF; + addr = get_laserxt_ems_addr(addr); + if (addr < (mem_size << 10)) + val = ram[addr]; + return val; } - -static void laserxt_init(int is_lxt3) +static void +laserxt_init(int is_lxt3) { - int i; + int i; - if(mem_size > 640) - { - io_sethandler(0x0208, 0x0002, laserxt_read, NULL, NULL, laserxt_write, NULL, NULL, NULL); - io_sethandler(0x4208, 0x0002, laserxt_read, NULL, NULL, laserxt_write, NULL, NULL, NULL); - io_sethandler(0x8208, 0x0002, laserxt_read, NULL, NULL, laserxt_write, NULL, NULL, NULL); - io_sethandler(0xc208, 0x0002, laserxt_read, NULL, NULL, laserxt_write, NULL, NULL, NULL); - mem_mapping_set_addr(&ram_low_mapping, 0, !is_lxt3 ? 0x70000 + (((mem_size + 64) & 255) << 10) : 0x30000 + (((mem_size + 320) & 511) << 10)); - } + if (mem_size > 640) { + io_sethandler(0x0208, 0x0002, laserxt_read, NULL, NULL, laserxt_write, NULL, NULL, NULL); + io_sethandler(0x4208, 0x0002, laserxt_read, NULL, NULL, laserxt_write, NULL, NULL, NULL); + io_sethandler(0x8208, 0x0002, laserxt_read, NULL, NULL, laserxt_write, NULL, NULL, NULL); + io_sethandler(0xc208, 0x0002, laserxt_read, NULL, NULL, laserxt_write, NULL, NULL, NULL); + mem_mapping_set_addr(&ram_low_mapping, 0, !is_lxt3 ? 0x70000 + (((mem_size + 64) & 255) << 10) : 0x30000 + (((mem_size + 320) & 511) << 10)); + } - for (i = 0; i < 4; i++) - { - laserxt_emspage[i] = 0x7F; - laserxt_emscontrol[i] = (i == 3) ? 0x00 : 0x80; - mem_mapping_add(&laserxt_ems_mapping[i], 0xE0000 + (i << 14), 0x4000, mem_read_laserxtems, NULL, NULL, mem_write_laserxtems, NULL, NULL, ram + 0xA0000 + (i << 14), 0, NULL); - mem_mapping_disable(&laserxt_ems_mapping[i]); - } - mem_set_mem_state(0x0c0000, 0x40000, MEM_READ_EXTANY | MEM_WRITE_EXTANY); - laserxt_is_lxt3 = is_lxt3; + for (i = 0; i < 4; i++) { + laserxt_emspage[i] = 0x7F; + laserxt_emscontrol[i] = (i == 3) ? 0x00 : 0x80; + mem_mapping_add(&laserxt_ems_mapping[i], 0xE0000 + (i << 14), 0x4000, mem_read_laserxtems, NULL, NULL, mem_write_laserxtems, NULL, NULL, ram + 0xA0000 + (i << 14), 0, NULL); + mem_mapping_disable(&laserxt_ems_mapping[i]); + } + mem_set_mem_state(0x0c0000, 0x40000, MEM_READ_EXTANY | MEM_WRITE_EXTANY); + laserxt_is_lxt3 = is_lxt3; } - int machine_xt_laserxt_init(const machine_t *model) { - int ret; + int ret; - ret = bios_load_linear("roms/machines/ltxt/27c64.bin", - 0x000fe000, 8192, 0); + ret = bios_load_linear("roms/machines/ltxt/27c64.bin", + 0x000fe000, 8192, 0); - if (bios_only || !ret) - return ret; + if (bios_only || !ret) + return ret; - machine_xt_init(model); + machine_xt_init(model); - laserxt_init(0); + laserxt_init(0); - return ret; + return ret; } - int machine_xt_lxt3_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/lxt3/27c64d.bin", - 0x000fe000, 8192, 0); + 0x000fe000, 8192, 0); if (bios_only || !ret) - return ret; + return ret; machine_common_init(model); @@ -172,7 +172,7 @@ machine_xt_lxt3_init(const machine_t *model) device_add(&keyboard_xt_lxt3_device); if (fdc_type == FDC_INTERNAL) - device_add(&fdc_xt_device); + device_add(&fdc_xt_device); nmi_init(); standalone_gameport_type = &gameport_device; diff --git a/src/machine/m_xt_olivetti.c b/src/machine/m_xt_olivetti.c index 62fcda138..1d53a588e 100644 --- a/src/machine/m_xt_olivetti.c +++ b/src/machine/m_xt_olivetti.c @@ -54,122 +54,116 @@ #include <86box/vid_colorplus.h> #include <86box/vid_cga_comp.h> -#define STAT_PARITY 0x80 -#define STAT_RTIMEOUT 0x40 -#define STAT_TTIMEOUT 0x20 -#define STAT_LOCK 0x10 -#define STAT_CD 0x08 -#define STAT_SYSFLAG 0x04 -#define STAT_IFULL 0x02 -#define STAT_OFULL 0x01 +#define STAT_PARITY 0x80 +#define STAT_RTIMEOUT 0x40 +#define STAT_TTIMEOUT 0x20 +#define STAT_LOCK 0x10 +#define STAT_CD 0x08 +#define STAT_SYSFLAG 0x04 +#define STAT_IFULL 0x02 +#define STAT_OFULL 0x01 -#define PLANTRONICS_MODE 1 +#define PLANTRONICS_MODE 1 #define OLIVETTI_OGC_MODE 0 -#define CGA_RGB 0 -#define CGA_COMPOSITE 1 +#define CGA_RGB 0 +#define CGA_COMPOSITE 1 typedef struct { /* Keyboard stuff. */ - int wantirq; - uint8_t command; - uint8_t status; - uint8_t out; - uint8_t output_port; - int param, - param_total; - uint8_t params[16]; - uint8_t scan[7]; + int wantirq; + uint8_t command; + uint8_t status; + uint8_t out; + uint8_t output_port; + int param, + param_total; + uint8_t params[16]; + uint8_t scan[7]; /* Mouse stuff. */ - int mouse_mode; - int x, y, b; - pc_timer_t send_delay_timer; + int mouse_mode; + int x, y, b; + pc_timer_t send_delay_timer; } m24_kbd_t; typedef struct { - ogc_t ogc; - colorplus_t colorplus; - int mode; + ogc_t ogc; + colorplus_t colorplus; + int mode; } m19_vid_t; -static uint8_t key_queue[16]; -static int key_queue_start = 0, - key_queue_end = 0; +static uint8_t key_queue[16]; +static int key_queue_start = 0, + key_queue_end = 0; -video_timings_t timing_m19_vid = {VIDEO_ISA, 8, 16, 32, 8, 16, 32}; - -const device_t m19_vid_device; +video_timings_t timing_m19_vid = { VIDEO_ISA, 8, 16, 32, 8, 16, 32 }; +const device_t m19_vid_device; #ifdef ENABLE_M24VID_LOG int m24vid_do_log = ENABLE_M24VID_LOG; - static void m24_log(const char *fmt, ...) { va_list ap; if (m24vid_do_log) { - va_start(ap, fmt); - vfprintf(stdlog, fmt, ap); - va_end(ap); - fflush(stdlog); + va_start(ap, fmt); + vfprintf(stdlog, fmt, ap); + va_end(ap); + fflush(stdlog); } } #else -#define m24_log(fmt, ...) +# define m24_log(fmt, ...) #endif - static void m24_kbd_poll(void *priv) { - m24_kbd_t *m24_kbd = (m24_kbd_t *)priv; + m24_kbd_t *m24_kbd = (m24_kbd_t *) priv; timer_advance_u64(&m24_kbd->send_delay_timer, 1000 * TIMER_USEC); if (m24_kbd->wantirq) { - m24_kbd->wantirq = 0; - picint(2); + m24_kbd->wantirq = 0; + picint(2); #if ENABLE_KEYBOARD_LOG - m24_log("M24: take IRQ\n"); + m24_log("M24: take IRQ\n"); #endif } if (!(m24_kbd->status & STAT_OFULL) && key_queue_start != key_queue_end) { #if ENABLE_KEYBOARD_LOG - m24_log("Reading %02X from the key queue at %i\n", - m24_kbd->out, key_queue_start); + m24_log("Reading %02X from the key queue at %i\n", + m24_kbd->out, key_queue_start); #endif - m24_kbd->out = key_queue[key_queue_start]; - key_queue_start = (key_queue_start + 1) & 0xf; - m24_kbd->status |= STAT_OFULL; - m24_kbd->status &= ~STAT_IFULL; - m24_kbd->wantirq = 1; + m24_kbd->out = key_queue[key_queue_start]; + key_queue_start = (key_queue_start + 1) & 0xf; + m24_kbd->status |= STAT_OFULL; + m24_kbd->status &= ~STAT_IFULL; + m24_kbd->wantirq = 1; } } - static void m24_kbd_adddata(uint16_t val) { key_queue[key_queue_end] = val; - key_queue_end = (key_queue_end + 1) & 0xf; + key_queue_end = (key_queue_end + 1) & 0xf; } - static void m24_kbd_adddata_ex(uint16_t val) { kbd_adddata_process(val, m24_kbd_adddata); } - static void m24_kbd_write(uint16_t port, uint8_t val, void *priv) { - m24_kbd_t *m24_kbd = (m24_kbd_t *)priv; + m24_kbd_t *m24_kbd = (m24_kbd_t *) priv; #if ENABLE_KEYBOARD_LOG m24_log("M24: write %04X %02X\n", port, val); @@ -180,115 +174,113 @@ m24_kbd_write(uint16_t port, uint8_t val, void *priv) output = 3; #endif switch (port) { - case 0x60: - if (m24_kbd->param != m24_kbd->param_total) { - m24_kbd->params[m24_kbd->param++] = val; - if (m24_kbd->param == m24_kbd->param_total) { - switch (m24_kbd->command) { - case 0x11: - m24_kbd->mouse_mode = 0; - m24_kbd->scan[0] = m24_kbd->params[0]; - m24_kbd->scan[1] = m24_kbd->params[1]; - m24_kbd->scan[2] = m24_kbd->params[2]; - m24_kbd->scan[3] = m24_kbd->params[3]; - m24_kbd->scan[4] = m24_kbd->params[4]; - m24_kbd->scan[5] = m24_kbd->params[5]; - m24_kbd->scan[6] = m24_kbd->params[6]; - break; + case 0x60: + if (m24_kbd->param != m24_kbd->param_total) { + m24_kbd->params[m24_kbd->param++] = val; + if (m24_kbd->param == m24_kbd->param_total) { + switch (m24_kbd->command) { + case 0x11: + m24_kbd->mouse_mode = 0; + m24_kbd->scan[0] = m24_kbd->params[0]; + m24_kbd->scan[1] = m24_kbd->params[1]; + m24_kbd->scan[2] = m24_kbd->params[2]; + m24_kbd->scan[3] = m24_kbd->params[3]; + m24_kbd->scan[4] = m24_kbd->params[4]; + m24_kbd->scan[5] = m24_kbd->params[5]; + m24_kbd->scan[6] = m24_kbd->params[6]; + break; - case 0x12: - m24_kbd->mouse_mode = 1; - m24_kbd->scan[0] = m24_kbd->params[0]; - m24_kbd->scan[1] = m24_kbd->params[1]; - m24_kbd->scan[2] = m24_kbd->params[2]; - break; + case 0x12: + m24_kbd->mouse_mode = 1; + m24_kbd->scan[0] = m24_kbd->params[0]; + m24_kbd->scan[1] = m24_kbd->params[1]; + m24_kbd->scan[2] = m24_kbd->params[2]; + break; - default: - m24_log("M24: bad keyboard command complete %02X\n", m24_kbd->command); - } - } - } else { - m24_kbd->command = val; - switch (val) { - case 0x01: /*Self-test*/ - break; + default: + m24_log("M24: bad keyboard command complete %02X\n", m24_kbd->command); + } + } + } else { + m24_kbd->command = val; + switch (val) { + case 0x01: /*Self-test*/ + break; - case 0x05: /*Read ID*/ - m24_kbd_adddata(0x00); - break; + case 0x05: /*Read ID*/ + m24_kbd_adddata(0x00); + break; - case 0x11: - m24_kbd->param = 0; - m24_kbd->param_total = 9; - break; + case 0x11: + m24_kbd->param = 0; + m24_kbd->param_total = 9; + break; - case 0x12: - m24_kbd->param = 0; - m24_kbd->param_total = 4; - break; + case 0x12: + m24_kbd->param = 0; + m24_kbd->param_total = 4; + break; - default: - m24_log("M24: bad keyboard command %02X\n", val); - } - } - break; + default: + m24_log("M24: bad keyboard command %02X\n", val); + } + } + break; - case 0x61: - ppi.pb = val; + case 0x61: + ppi.pb = val; - speaker_update(); - speaker_gated = val & 1; - speaker_enable = val & 2; - if (speaker_enable) - was_speaker_enable = 1; - pit_devs[0].set_gate(pit_devs[0].data, 2, val & 1); - break; + speaker_update(); + speaker_gated = val & 1; + speaker_enable = val & 2; + if (speaker_enable) + was_speaker_enable = 1; + pit_devs[0].set_gate(pit_devs[0].data, 2, val & 1); + break; } } - static uint8_t m24_kbd_read(uint16_t port, void *priv) { - m24_kbd_t *m24_kbd = (m24_kbd_t *)priv; - uint8_t ret = 0xff; + m24_kbd_t *m24_kbd = (m24_kbd_t *) priv; + uint8_t ret = 0xff; switch (port) { - case 0x60: - ret = m24_kbd->out; - if (key_queue_start == key_queue_end) { - m24_kbd->status &= ~STAT_OFULL; - m24_kbd->wantirq = 0; - } else { - m24_kbd->out = key_queue[key_queue_start]; - key_queue_start = (key_queue_start + 1) & 0xf; - m24_kbd->status |= STAT_OFULL; - m24_kbd->status &= ~STAT_IFULL; - m24_kbd->wantirq = 1; - } - break; + case 0x60: + ret = m24_kbd->out; + if (key_queue_start == key_queue_end) { + m24_kbd->status &= ~STAT_OFULL; + m24_kbd->wantirq = 0; + } else { + m24_kbd->out = key_queue[key_queue_start]; + key_queue_start = (key_queue_start + 1) & 0xf; + m24_kbd->status |= STAT_OFULL; + m24_kbd->status &= ~STAT_IFULL; + m24_kbd->wantirq = 1; + } + break; - case 0x61: - ret = ppi.pb; - break; + case 0x61: + ret = ppi.pb; + break; - case 0x64: - ret = m24_kbd->status; - m24_kbd->status &= ~(STAT_RTIMEOUT | STAT_TTIMEOUT); - break; + case 0x64: + ret = m24_kbd->status; + m24_kbd->status &= ~(STAT_RTIMEOUT | STAT_TTIMEOUT); + break; - default: - m24_log("\nBad M24 keyboard read %04X\n", port); + default: + m24_log("\nBad M24 keyboard read %04X\n", port); } - return(ret); + return (ret); } - static void m24_kbd_close(void *priv) { - m24_kbd_t *kbd = (m24_kbd_t *)priv; + m24_kbd_t *kbd = (m24_kbd_t *) priv; /* Stop the timer. */ timer_disable(&kbd->send_delay_timer); @@ -299,127 +291,135 @@ m24_kbd_close(void *priv) keyboard_send = NULL; io_removehandler(0x0060, 2, - m24_kbd_read, NULL, NULL, m24_kbd_write, NULL, NULL, kbd); + m24_kbd_read, NULL, NULL, m24_kbd_write, NULL, NULL, kbd); io_removehandler(0x0064, 1, - m24_kbd_read, NULL, NULL, m24_kbd_write, NULL, NULL, kbd); + m24_kbd_read, NULL, NULL, m24_kbd_write, NULL, NULL, kbd); free(kbd); } - static void m24_kbd_reset(void *priv) { - m24_kbd_t *m24_kbd = (m24_kbd_t *)priv; + m24_kbd_t *m24_kbd = (m24_kbd_t *) priv; /* Initialize the keyboard. */ - m24_kbd->status = STAT_LOCK | STAT_CD; + m24_kbd->status = STAT_LOCK | STAT_CD; m24_kbd->wantirq = 0; - keyboard_scan = 1; + keyboard_scan = 1; m24_kbd->param = m24_kbd->param_total = 0; - m24_kbd->mouse_mode = 0; - m24_kbd->scan[0] = 0x1c; - m24_kbd->scan[1] = 0x53; - m24_kbd->scan[2] = 0x01; - m24_kbd->scan[3] = 0x4b; - m24_kbd->scan[4] = 0x4d; - m24_kbd->scan[5] = 0x48; - m24_kbd->scan[6] = 0x50; + m24_kbd->mouse_mode = 0; + m24_kbd->scan[0] = 0x1c; + m24_kbd->scan[1] = 0x53; + m24_kbd->scan[2] = 0x01; + m24_kbd->scan[3] = 0x4b; + m24_kbd->scan[4] = 0x4d; + m24_kbd->scan[5] = 0x48; + m24_kbd->scan[6] = 0x50; } - static int ms_poll(int x, int y, int z, int b, void *priv) { - m24_kbd_t *m24_kbd = (m24_kbd_t *)priv; + m24_kbd_t *m24_kbd = (m24_kbd_t *) priv; m24_kbd->x += x; m24_kbd->y += y; - if (((key_queue_end - key_queue_start) & 0xf) > 14) return(0xff); + if (((key_queue_end - key_queue_start) & 0xf) > 14) + return (0xff); if ((b & 1) && !(m24_kbd->b & 1)) - m24_kbd_adddata(m24_kbd->scan[0]); + m24_kbd_adddata(m24_kbd->scan[0]); if (!(b & 1) && (m24_kbd->b & 1)) - m24_kbd_adddata(m24_kbd->scan[0] | 0x80); + m24_kbd_adddata(m24_kbd->scan[0] | 0x80); m24_kbd->b = (m24_kbd->b & ~1) | (b & 1); - if (((key_queue_end - key_queue_start) & 0xf) > 14) return(0xff); + if (((key_queue_end - key_queue_start) & 0xf) > 14) + return (0xff); if ((b & 2) && !(m24_kbd->b & 2)) - m24_kbd_adddata(m24_kbd->scan[2]); + m24_kbd_adddata(m24_kbd->scan[2]); if (!(b & 2) && (m24_kbd->b & 2)) - m24_kbd_adddata(m24_kbd->scan[2] | 0x80); + m24_kbd_adddata(m24_kbd->scan[2] | 0x80); m24_kbd->b = (m24_kbd->b & ~2) | (b & 2); - if (((key_queue_end - key_queue_start) & 0xf) > 14) return(0xff); + if (((key_queue_end - key_queue_start) & 0xf) > 14) + return (0xff); if ((b & 4) && !(m24_kbd->b & 4)) - m24_kbd_adddata(m24_kbd->scan[1]); + m24_kbd_adddata(m24_kbd->scan[1]); if (!(b & 4) && (m24_kbd->b & 4)) - m24_kbd_adddata(m24_kbd->scan[1] | 0x80); + m24_kbd_adddata(m24_kbd->scan[1] | 0x80); m24_kbd->b = (m24_kbd->b & ~4) | (b & 4); if (m24_kbd->mouse_mode) { - if (((key_queue_end - key_queue_start) & 0xf) > 12) return(0xff); + if (((key_queue_end - key_queue_start) & 0xf) > 12) + return (0xff); - if (!m24_kbd->x && !m24_kbd->y) return(0xff); + if (!m24_kbd->x && !m24_kbd->y) + return (0xff); - m24_kbd->y = -m24_kbd->y; + m24_kbd->y = -m24_kbd->y; - if (m24_kbd->x < -127) m24_kbd->x = -127; - if (m24_kbd->x > 127) m24_kbd->x = 127; - if (m24_kbd->x < -127) m24_kbd->x = 0x80 | ((-m24_kbd->x) & 0x7f); + if (m24_kbd->x < -127) + m24_kbd->x = -127; + if (m24_kbd->x > 127) + m24_kbd->x = 127; + if (m24_kbd->x < -127) + m24_kbd->x = 0x80 | ((-m24_kbd->x) & 0x7f); - if (m24_kbd->y < -127) m24_kbd->y = -127; - if (m24_kbd->y > 127) m24_kbd->y = 127; - if (m24_kbd->y < -127) m24_kbd->y = 0x80 | ((-m24_kbd->y) & 0x7f); + if (m24_kbd->y < -127) + m24_kbd->y = -127; + if (m24_kbd->y > 127) + m24_kbd->y = 127; + if (m24_kbd->y < -127) + m24_kbd->y = 0x80 | ((-m24_kbd->y) & 0x7f); - m24_kbd_adddata(0xfe); - m24_kbd_adddata(m24_kbd->x); - m24_kbd_adddata(m24_kbd->y); + m24_kbd_adddata(0xfe); + m24_kbd_adddata(m24_kbd->x); + m24_kbd_adddata(m24_kbd->y); - m24_kbd->x = m24_kbd->y = 0; + m24_kbd->x = m24_kbd->y = 0; } else { - while (m24_kbd->x < -4) { - if (((key_queue_end - key_queue_start) & 0xf) > 14) - return(0xff); - m24_kbd->x += 4; - m24_kbd_adddata(m24_kbd->scan[3]); - } - while (m24_kbd->x > 4) { - if (((key_queue_end - key_queue_start) & 0xf) > 14) - return(0xff); - m24_kbd->x -= 4; - m24_kbd_adddata(m24_kbd->scan[4]); - } - while (m24_kbd->y < -4) { - if (((key_queue_end - key_queue_start) & 0xf) > 14) - return(0xff); - m24_kbd->y += 4; - m24_kbd_adddata(m24_kbd->scan[5]); - } - while (m24_kbd->y > 4) { - if (((key_queue_end - key_queue_start) & 0xf) > 14) - return(0xff); - m24_kbd->y -= 4; - m24_kbd_adddata(m24_kbd->scan[6]); - } + while (m24_kbd->x < -4) { + if (((key_queue_end - key_queue_start) & 0xf) > 14) + return (0xff); + m24_kbd->x += 4; + m24_kbd_adddata(m24_kbd->scan[3]); + } + while (m24_kbd->x > 4) { + if (((key_queue_end - key_queue_start) & 0xf) > 14) + return (0xff); + m24_kbd->x -= 4; + m24_kbd_adddata(m24_kbd->scan[4]); + } + while (m24_kbd->y < -4) { + if (((key_queue_end - key_queue_start) & 0xf) > 14) + return (0xff); + m24_kbd->y += 4; + m24_kbd_adddata(m24_kbd->scan[5]); + } + while (m24_kbd->y > 4) { + if (((key_queue_end - key_queue_start) & 0xf) > 14) + return (0xff); + m24_kbd->y -= 4; + m24_kbd_adddata(m24_kbd->scan[6]); + } } - return(0); + return (0); } - static void m24_kbd_init(m24_kbd_t *kbd) { /* Initialize the keyboard. */ io_sethandler(0x0060, 2, - m24_kbd_read, NULL, NULL, m24_kbd_write, NULL, NULL, kbd); + m24_kbd_read, NULL, NULL, m24_kbd_write, NULL, NULL, kbd); io_sethandler(0x0064, 1, - m24_kbd_read, NULL, NULL, m24_kbd_write, NULL, NULL, kbd); + m24_kbd_read, NULL, NULL, m24_kbd_write, NULL, NULL, kbd); keyboard_send = m24_kbd_adddata_ex; m24_kbd_reset(kbd); timer_add(&kbd->send_delay_timer, m24_kbd_poll, kbd, 1); @@ -432,104 +432,97 @@ m24_kbd_init(m24_kbd_t *kbd) keyboard_set_is_amstrad(0); } - static void m19_vid_out(uint16_t addr, uint8_t val, void *priv) { - m19_vid_t *vid = (m19_vid_t *)priv; - int oldmode = vid->mode; + m19_vid_t *vid = (m19_vid_t *) priv; + int oldmode = vid->mode; /* activating plantronics mode */ if (addr == 0x3dd) { - /* already in graphics mode */ - if ((val & 0x30) && (vid->ogc.cga.cgamode & 0x2)) - vid->mode = PLANTRONICS_MODE; - else - vid->mode = OLIVETTI_OGC_MODE; - /* setting graphics mode */ + /* already in graphics mode */ + if ((val & 0x30) && (vid->ogc.cga.cgamode & 0x2)) + vid->mode = PLANTRONICS_MODE; + else + vid->mode = OLIVETTI_OGC_MODE; + /* setting graphics mode */ } else if (addr == 0x3d8) { - if ((val & 0x2) && (vid->colorplus.control & 0x30)) - vid->mode = PLANTRONICS_MODE; - else - vid->mode = OLIVETTI_OGC_MODE; + if ((val & 0x2) && (vid->colorplus.control & 0x30)) + vid->mode = PLANTRONICS_MODE; + else + vid->mode = OLIVETTI_OGC_MODE; } /* video mode changed */ if (oldmode != vid->mode) { - /* activate Plantronics emulation */ - if (vid->mode == PLANTRONICS_MODE){ - timer_disable(&vid->ogc.cga.timer); - timer_set_delay_u64(&vid->colorplus.cga.timer, 0); - /* return to OGC mode */ - } else { - timer_disable(&vid->colorplus.cga.timer); - timer_set_delay_u64(&vid->ogc.cga.timer, 0); - } + /* activate Plantronics emulation */ + if (vid->mode == PLANTRONICS_MODE) { + timer_disable(&vid->ogc.cga.timer); + timer_set_delay_u64(&vid->colorplus.cga.timer, 0); + /* return to OGC mode */ + } else { + timer_disable(&vid->colorplus.cga.timer); + timer_set_delay_u64(&vid->ogc.cga.timer, 0); + } - colorplus_recalctimings(&vid->colorplus); - ogc_recalctimings(&vid->ogc); + colorplus_recalctimings(&vid->colorplus); + ogc_recalctimings(&vid->ogc); } colorplus_out(addr, val, &vid->colorplus); ogc_out(addr, val, &vid->ogc); } - static uint8_t m19_vid_in(uint16_t addr, void *priv) { - m19_vid_t *vid = (m19_vid_t *)priv; + m19_vid_t *vid = (m19_vid_t *) priv; if (vid->mode == PLANTRONICS_MODE) - return colorplus_in(addr, &vid->colorplus); + return colorplus_in(addr, &vid->colorplus); else - return ogc_in(addr, &vid->ogc); + return ogc_in(addr, &vid->ogc); } - static uint8_t m19_vid_read(uint32_t addr, void *priv) { - m19_vid_t *vid = (m19_vid_t *)priv; + m19_vid_t *vid = (m19_vid_t *) priv; vid->colorplus.cga.mapping = vid->ogc.cga.mapping; if (vid->mode == PLANTRONICS_MODE) - return colorplus_read(addr, &vid->colorplus); + return colorplus_read(addr, &vid->colorplus); else - return ogc_read(addr, &vid->ogc); + return ogc_read(addr, &vid->ogc); } - static void m19_vid_write(uint32_t addr, uint8_t val, void *priv) { - m19_vid_t *vid = (m19_vid_t *)priv; + m19_vid_t *vid = (m19_vid_t *) priv; colorplus_write(addr, val, &vid->colorplus); ogc_write(addr, val, &vid->ogc); } - static void m19_vid_close(void *priv) { - m19_vid_t *vid = (m19_vid_t *)priv; + m19_vid_t *vid = (m19_vid_t *) priv; free(vid->ogc.cga.vram); free(vid->colorplus.cga.vram); free(vid); } - static void m19_vid_speed_changed(void *priv) { - m19_vid_t *vid = (m19_vid_t *)priv; + m19_vid_t *vid = (m19_vid_t *) priv; colorplus_recalctimings(&vid->colorplus); ogc_recalctimings(&vid->ogc); } - static void m19_vid_init(m19_vid_t *vid) { @@ -545,8 +538,8 @@ m19_vid_init(m19_vid_t *vid) /* OGC emulation part begin */ loadfont_ex("roms/machines/m19/BIOS.BIN", 1, 90); /* composite is not working yet */ - vid->ogc.cga.composite = 0; // (display_type != CGA_RGB); - vid->ogc.cga.revision = device_get_config_int("composite_type"); + vid->ogc.cga.composite = 0; // (display_type != CGA_RGB); + vid->ogc.cga.revision = device_get_config_int("composite_type"); vid->ogc.cga.snow_enabled = device_get_config_int("snow_enabled"); vid->ogc.cga.vram = malloc(0x8000); @@ -554,15 +547,15 @@ m19_vid_init(m19_vid_t *vid) /* cga_comp_init(vid->ogc.cga.revision); */ vid->ogc.cga.rgb_type = device_get_config_int("rgb_type"); - cga_palette = (vid->ogc.cga.rgb_type << 1); + cga_palette = (vid->ogc.cga.rgb_type << 1); cgapal_rebuild(); ogc_mdaattr_rebuild(); /* color display */ - if (device_get_config_int("rgb_type")==0 || device_get_config_int("rgb_type") == 4) - vid->ogc.mono_display = 0; + if (device_get_config_int("rgb_type") == 0 || device_get_config_int("rgb_type") == 4) + vid->ogc.mono_display = 0; else - vid->ogc.mono_display = 1; + vid->ogc.mono_display = 1; /* OGC emulation part end */ /* Plantronics emulation part begin*/ @@ -578,7 +571,7 @@ m19_vid_init(m19_vid_t *vid) timer_add(&vid->ogc.cga.timer, ogc_poll, &vid->ogc, 1); timer_add(&vid->colorplus.cga.timer, colorplus_poll, &vid->colorplus, 1); timer_disable(&vid->colorplus.cga.timer); - mem_mapping_add(&vid->ogc.cga.mapping, 0xb8000, 0x08000, m19_vid_read, NULL, NULL, m19_vid_write, NULL, NULL, NULL, MEM_MAPPING_EXTERNAL, vid); + mem_mapping_add(&vid->ogc.cga.mapping, 0xb8000, 0x08000, m19_vid_read, NULL, NULL, m19_vid_write, NULL, NULL, NULL, MEM_MAPPING_EXTERNAL, vid); io_sethandler(0x03d0, 0x0010, m19_vid_in, NULL, NULL, m19_vid_out, NULL, NULL, vid); vid->mode = OLIVETTI_OGC_MODE; @@ -587,20 +580,21 @@ m19_vid_init(m19_vid_t *vid) } const device_t m24_kbd_device = { - .name = "Olivetti M24 keyboard and mouse", + .name = "Olivetti M24 keyboard and mouse", .internal_name = "m24_kbd", - .flags = 0, - .local = 0, - .init = NULL, - .close = m24_kbd_close, - .reset = m24_kbd_reset, + .flags = 0, + .local = 0, + .init = NULL, + .close = m24_kbd_close, + .reset = m24_kbd_reset, { .available = NULL }, .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL + .force_redraw = NULL, + .config = NULL }; const device_config_t m19_vid_config[] = { + // clang-format off { /* Olivetti / ATT compatible displays */ .name = "rgb_type", @@ -626,123 +620,124 @@ const device_config_t m19_vid_config[] = { .default_int = 1, }, { .name = "", .description = "", .type = CONFIG_END } + // clang-format on }; const device_t m19_vid_device = { - .name = "Olivetti M19 graphics card", + .name = "Olivetti M19 graphics card", .internal_name = "m19_vid", - .flags = 0, - .local = 0, - .init = NULL, - .close = m19_vid_close, - .reset = NULL, + .flags = 0, + .local = 0, + .init = NULL, + .close = m19_vid_close, + .reset = NULL, { .available = NULL }, .speed_changed = m19_vid_speed_changed, - .force_redraw = NULL, - .config = m19_vid_config + .force_redraw = NULL, + .config = m19_vid_config }; static uint8_t m24_read(uint16_t port, void *priv) { uint8_t ret = 0x00; - int i, fdd_count = 0; + int i, fdd_count = 0; switch (port) { - /* - * port 66: - * DIPSW-0 on mainboard (off=present=1) - * bit 7 - 2764 (off) / 2732 (on) ROM (BIOS < 1.36) - * bit 7 - Use (off) / do not use (on) memory bank 1 (BIOS >= 1.36) - * bit 6 - n/a - * bit 5 - 8530 (off) / 8250 (on) SCC - * bit 4 - 8087 present - * bits 3-0 - installed memory - */ - case 0x66: - /* Switch 5 - 8087 present */ - if (hasfpu) - ret |= 0x10; - /* - * Switches 1, 2, 3, 4 - installed memory - * Switch 8 - Use memory bank 1 - */ - switch (mem_size) { - case 128: - ret |= 0x1; - break; - case 256: - ret |= 0x2|0x80; - break; - case 384: - ret |= 0x1|0x2|0x80; - break; - case 512: - ret |= 0x8; - break; - case 640: - default: - ret |= 0x1|0x8|0x80; - break; - } - /* - * port 67: - * DIPSW-1 on mainboard (off=present=1) - * bits 7-6 - number of drives - * bits 5-4 - display adapter - * bit 3 - video scroll CPU (on) / slow scroll (off) - * bit 2 - BIOS HD on mainboard (on) / on controller (off) - * bit 1 - FDD fast (off) / slow (on) start drive - * bit 0 - 96 TPI (720 KB 3.5") (off) / 48 TPI (360 KB 5.25") FDD drive - * - * Display adapter: - * off off 80x25 mono - * off on 40x25 color - * on off 80x25 color - * on on EGA/VGA (works only for BIOS ROM 1.43) - */ - case 0x67: - for (i = 0; i < FDD_NUM; i++) { - if (fdd_get_flags(i)) - fdd_count++; - } + /* + * port 66: + * DIPSW-0 on mainboard (off=present=1) + * bit 7 - 2764 (off) / 2732 (on) ROM (BIOS < 1.36) + * bit 7 - Use (off) / do not use (on) memory bank 1 (BIOS >= 1.36) + * bit 6 - n/a + * bit 5 - 8530 (off) / 8250 (on) SCC + * bit 4 - 8087 present + * bits 3-0 - installed memory + */ + case 0x66: + /* Switch 5 - 8087 present */ + if (hasfpu) + ret |= 0x10; + /* + * Switches 1, 2, 3, 4 - installed memory + * Switch 8 - Use memory bank 1 + */ + switch (mem_size) { + case 128: + ret |= 0x1; + break; + case 256: + ret |= 0x2 | 0x80; + break; + case 384: + ret |= 0x1 | 0x2 | 0x80; + break; + case 512: + ret |= 0x8; + break; + case 640: + default: + ret |= 0x1 | 0x8 | 0x80; + break; + } + /* + * port 67: + * DIPSW-1 on mainboard (off=present=1) + * bits 7-6 - number of drives + * bits 5-4 - display adapter + * bit 3 - video scroll CPU (on) / slow scroll (off) + * bit 2 - BIOS HD on mainboard (on) / on controller (off) + * bit 1 - FDD fast (off) / slow (on) start drive + * bit 0 - 96 TPI (720 KB 3.5") (off) / 48 TPI (360 KB 5.25") FDD drive + * + * Display adapter: + * off off 80x25 mono + * off on 40x25 color + * on off 80x25 color + * on on EGA/VGA (works only for BIOS ROM 1.43) + */ + case 0x67: + for (i = 0; i < FDD_NUM; i++) { + if (fdd_get_flags(i)) + fdd_count++; + } - /* Switches 7, 8 - floppy drives. */ - if (!fdd_count) - ret |= 0x00; - else - ret |= ((fdd_count - 1) << 6); + /* Switches 7, 8 - floppy drives. */ + if (!fdd_count) + ret |= 0x00; + else + ret |= ((fdd_count - 1) << 6); - /* Switches 5, 6 - monitor type */ - if (video_is_mda()) - ret |= 0x30; - else if (video_is_cga()) - ret |= 0x20; /* 0x10 would be 40x25 */ - else - ret |= 0x0; + /* Switches 5, 6 - monitor type */ + if (video_is_mda()) + ret |= 0x30; + else if (video_is_cga()) + ret |= 0x20; /* 0x10 would be 40x25 */ + else + ret |= 0x0; - /* Switch 3 - Disable internal BIOS HD */ - ret |= 0x4; + /* Switch 3 - Disable internal BIOS HD */ + ret |= 0x4; - /* Switch 2 - Set fast startup */ - ret |= 0x2; + /* Switch 2 - Set fast startup */ + ret |= 0x2; } - return(ret); + return (ret); } int machine_xt_m24_init(const machine_t *model) { - int ret; + int ret; m24_kbd_t *m24_kbd; ret = bios_load_interleaved("roms/machines/m24/olivetti_m24_bios_version_1.44_low_even.bin", - "roms/machines/m24/olivetti_m24_bios_version_1.44_high_odd.bin", - 0x000fc000, 16384, 0); + "roms/machines/m24/olivetti_m24_bios_version_1.44_high_odd.bin", + 0x000fc000, 16384, 0); if (bios_only || !ret) - return ret; + return ret; m24_kbd = (m24_kbd_t *) malloc(sizeof(m24_kbd_t)); memset(m24_kbd, 0x00, sizeof(m24_kbd_t)); @@ -751,7 +746,7 @@ machine_xt_m24_init(const machine_t *model) /* On-board FDC can be disabled only on M24SP */ if (fdc_type == FDC_INTERNAL) - device_add(&fdc_xt_device); + device_add(&fdc_xt_device); /* Address 66-67 = mainboard dip-switch settings */ io_sethandler(0x0066, 2, m24_read, NULL, NULL, NULL, NULL, NULL, NULL); @@ -766,7 +761,7 @@ machine_xt_m24_init(const machine_t *model) video_reset(gfxcard); if (gfxcard == VID_INTERNAL) - device_add(&ogc_m24_device); + device_add(&ogc_m24_device); m24_kbd_init(m24_kbd); device_add_ex(&m24_kbd_device, m24_kbd); @@ -784,11 +779,11 @@ machine_xt_m240_init(const machine_t *model) int ret; ret = bios_load_interleaved("roms/machines/m240/olivetti_m240_pch6_2.04_low.bin", - "roms/machines/m240/olivetti_m240_pch5_2.04_high.bin", - 0x000f8000, 32768, 0); + "roms/machines/m240/olivetti_m240_pch5_2.04_high.bin", + 0x000f8000, 32768, 0); if (bios_only || !ret) - return ret; + return ret; machine_common_init(model); @@ -810,17 +805,16 @@ machine_xt_m240_init(const machine_t *model) device_add(&at_nvr_device); if (fdc_type == FDC_INTERNAL) - device_add(&fdc_xt_device); + device_add(&fdc_xt_device); if (joystick_type) - device_add(&gameport_device); + device_add(&gameport_device); nmi_init(); return ret; } - /* * Current bugs: * - 640x400x2 graphics mode not supported (bit 0 of register 0x3de cannot be set) @@ -833,10 +827,10 @@ machine_xt_m19_init(const machine_t *model) int ret; ret = bios_load_linear("roms/machines/m19/BIOS.BIN", - 0x000fc000, 16384, 0); + 0x000fc000, 16384, 0); if (bios_only || !ret) - return ret; + return ret; m19_vid_t *vid; diff --git a/src/machine/m_xt_philips.c b/src/machine/m_xt_philips.c index b10e3a37e..2c5bbb53d 100644 --- a/src/machine/m_xt_philips.c +++ b/src/machine/m_xt_philips.c @@ -41,13 +41,11 @@ #include <86box/io.h> #include <86box/video.h> - typedef struct { - uint8_t reg; + uint8_t reg; } philips_t; - #ifdef ENABLE_PHILIPS_LOG int philips_do_log = ENABLE_PHILIPS_LOG; static void @@ -58,11 +56,11 @@ philips_log(const char *fmt, ...) if (philips_do_log) { va_start(ap, fmt); pclog_ex(fmt, ap); - va_end(ap); + va_end(ap); } } #else -#define philips_log(fmt, ...) +# define philips_log(fmt, ...) #endif static void @@ -71,39 +69,38 @@ philips_write(uint16_t port, uint8_t val, void *priv) philips_t *dev = (philips_t *) priv; switch (port) { - /* port 0xc0 - * bit 7: turbo - * bits 4-5: rtc read/set (I2C Bus SDA/SCL?) - * bit 2: parity disabled - */ - case 0xc0: - dev->reg = val; - if (val & 0x80) - cpu_dynamic_switch(cpu); - else - cpu_dynamic_switch(0); - break; + /* port 0xc0 + * bit 7: turbo + * bits 4-5: rtc read/set (I2C Bus SDA/SCL?) + * bit 2: parity disabled + */ + case 0xc0: + dev->reg = val; + if (val & 0x80) + cpu_dynamic_switch(cpu); + else + cpu_dynamic_switch(0); + break; } philips_log("Philips XT Mainboard: Write %02x at %02x\n", val, port); - } static uint8_t philips_read(uint16_t port, void *priv) { philips_t *dev = (philips_t *) priv; - uint8_t ret = 0xff; + uint8_t ret = 0xff; switch (port) { - /* port 0xc0 - * bit 7: turbo - * bits 4-5: rtc read/set - * bit 2: parity disabled - */ - case 0xc0: - ret = dev->reg; - break; + /* port 0xc0 + * bit 7: turbo + * bits 4-5: rtc read/set + * bit 2: parity disabled + */ + case 0xc0: + ret = dev->reg; + break; } philips_log("Philips XT Mainboard: Read %02x at %02x\n", ret, port); @@ -111,7 +108,6 @@ philips_read(uint16_t port, void *priv) return ret; } - static void philips_close(void *priv) { @@ -134,17 +130,17 @@ philips_init(const device_t *info) } const device_t philips_device = { - .name = "Philips XT Mainboard", + .name = "Philips XT Mainboard", .internal_name = "philips", - .flags = 0, - .local = 0, - .init = philips_init, - .close = philips_close, - .reset = NULL, + .flags = 0, + .local = 0, + .init = philips_init, + .close = philips_close, + .reset = NULL, { .available = NULL }, .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL + .force_redraw = NULL, + .config = NULL }; void @@ -163,7 +159,6 @@ machine_xt_philips_common_init(const machine_t *model) device_add(&philips_device); device_add(&xta_hd20_device); - } int @@ -172,15 +167,15 @@ machine_xt_p3105_init(const machine_t *model) int ret; ret = bios_load_linear("roms/machines/p3105/philipsnms9100.bin", - 0x000fc000, 16384, 0); + 0x000fc000, 16384, 0); if (bios_only || !ret) - return ret; + return ret; machine_xt_philips_common_init(model); /* On-board FDC cannot be disabled */ - device_add(&fdc_xt_device); + device_add(&fdc_xt_device); return ret; } @@ -191,10 +186,10 @@ machine_xt_p3120_init(const machine_t *model) int ret; ret = bios_load_linear("roms/machines/p3120/philips_p3120.bin", - 0x000f8000, 32768, 0); + 0x000f8000, 32768, 0); if (bios_only || !ret) - return ret; + return ret; machine_xt_philips_common_init(model); diff --git a/src/machine/m_xt_t1000.c b/src/machine/m_xt_t1000.c index ba96b74e7..afad725a3 100644 --- a/src/machine/m_xt_t1000.c +++ b/src/machine/m_xt_t1000.c @@ -108,9 +108,7 @@ #include <86box/machine.h> #include <86box/m_xt_t1000.h> - -#define T1000_ROMSIZE (512*1024UL) /* Maximum ROM drive size is 512k */ - +#define T1000_ROMSIZE (512 * 1024UL) /* Maximum ROM drive size is 512k */ enum TC8521_ADDR { /* Page 0 registers */ @@ -127,125 +125,115 @@ enum TC8521_ADDR { TC8521_MONTH10, TC8521_YEAR1, TC8521_YEAR10, - TC8521_PAGE, /* PAGE register */ - TC8521_TEST, /* TEST register */ - TC8521_RESET, /* RESET register */ + TC8521_PAGE, /* PAGE register */ + TC8521_TEST, /* TEST register */ + TC8521_RESET, /* RESET register */ /* Page 1 registers */ - TC8521_24HR = 0x1A, + TC8521_24HR = 0x1A, TC8521_LEAPYEAR = 0x1B }; - typedef struct { /* ROM drive */ - uint8_t *romdrive; - uint8_t rom_ctl; - uint32_t rom_offset; + uint8_t *romdrive; + uint8_t rom_ctl; + uint32_t rom_offset; mem_mapping_t rom_mapping; /* CONFIG.SYS drive. */ - uint8_t t1000_nvram[160]; - uint8_t t1200_nvram[2048]; + uint8_t t1000_nvram[160]; + uint8_t t1200_nvram[2048]; /* System control registers */ - uint8_t sys_ctl[16]; - uint8_t syskeys; - uint8_t turbo; + uint8_t sys_ctl[16]; + uint8_t syskeys; + uint8_t turbo; /* NVRAM control */ - uint8_t nvr_c0; - uint8_t nvr_tick; - int nvr_addr; - uint8_t nvr_active; - mem_mapping_t nvr_mapping; /* T1200 NVRAM mapping */ + uint8_t nvr_c0; + uint8_t nvr_tick; + int nvr_addr; + uint8_t nvr_active; + mem_mapping_t nvr_mapping; /* T1200 NVRAM mapping */ /* EMS data */ - uint8_t ems_reg[4]; + uint8_t ems_reg[4]; mem_mapping_t mapping[4]; - uint32_t page_exec[4]; - uint8_t ems_port_index; - uint16_t ems_port; - uint8_t is_640k; - uint32_t ems_base; - int32_t ems_pages; + uint32_t page_exec[4]; + uint8_t ems_port_index; + uint16_t ems_port; + uint8_t is_640k; + uint32_t ems_base; + int32_t ems_pages; - fdc_t *fdc; + fdc_t *fdc; - nvr_t nvr; - int is_t1200; + nvr_t nvr; + int is_t1200; } t1000_t; - -static t1000_t t1000; - +static t1000_t t1000; #ifdef ENABLE_T1000_LOG int t1000_do_log = ENABLE_T1000_LOG; - static void t1000_log(const char *fmt, ...) { - va_list ap; + va_list ap; - if (t1000_do_log) - { - va_start(ap, fmt); - pclog_ex(fmt, ap); - va_end(ap); - } + if (t1000_do_log) { + va_start(ap, fmt); + pclog_ex(fmt, ap); + va_end(ap); + } } #else -#define t1000_log(fmt, ...) +# define t1000_log(fmt, ...) #endif - /* Set the chip time. */ static void tc8521_time_set(uint8_t *regs, struct tm *tm) { - regs[TC8521_SECOND1] = (tm->tm_sec % 10); + regs[TC8521_SECOND1] = (tm->tm_sec % 10); regs[TC8521_SECOND10] = (tm->tm_sec / 10); - regs[TC8521_MINUTE1] = (tm->tm_min % 10); + regs[TC8521_MINUTE1] = (tm->tm_min % 10); regs[TC8521_MINUTE10] = (tm->tm_min / 10); if (regs[TC8521_24HR] & 0x01) { - regs[TC8521_HOUR1] = (tm->tm_hour % 10); - regs[TC8521_HOUR10] = (tm->tm_hour / 10); + regs[TC8521_HOUR1] = (tm->tm_hour % 10); + regs[TC8521_HOUR10] = (tm->tm_hour / 10); } else { - regs[TC8521_HOUR1] = ((tm->tm_hour % 12) % 10); - regs[TC8521_HOUR10] = (((tm->tm_hour % 12) / 10) | - ((tm->tm_hour >= 12) ? 2 : 0)); + regs[TC8521_HOUR1] = ((tm->tm_hour % 12) % 10); + regs[TC8521_HOUR10] = (((tm->tm_hour % 12) / 10) | ((tm->tm_hour >= 12) ? 2 : 0)); } regs[TC8521_WEEKDAY] = tm->tm_wday; - regs[TC8521_DAY1] = (tm->tm_mday % 10); - regs[TC8521_DAY10] = (tm->tm_mday / 10); - regs[TC8521_MONTH1] = ((tm->tm_mon + 1) % 10); + regs[TC8521_DAY1] = (tm->tm_mday % 10); + regs[TC8521_DAY10] = (tm->tm_mday / 10); + regs[TC8521_MONTH1] = ((tm->tm_mon + 1) % 10); regs[TC8521_MONTH10] = ((tm->tm_mon + 1) / 10); - regs[TC8521_YEAR1] = ((tm->tm_year - 80) % 10); - regs[TC8521_YEAR10] = (((tm->tm_year - 80) % 100) / 10); + regs[TC8521_YEAR1] = ((tm->tm_year - 80) % 10); + regs[TC8521_YEAR10] = (((tm->tm_year - 80) % 100) / 10); } - /* Get the chip time. */ -#define nibbles(a) (regs[(a##1)] + 10 * regs[(a##10)]) +#define nibbles(a) (regs[(a##1)] + 10 * regs[(a##10)]) static void tc8521_time_get(uint8_t *regs, struct tm *tm) { tm->tm_sec = nibbles(TC8521_SECOND); tm->tm_min = nibbles(TC8521_MINUTE); if (regs[TC8521_24HR] & 0x01) - tm->tm_hour = nibbles(TC8521_HOUR); - else - tm->tm_hour = ((nibbles(TC8521_HOUR) % 12) + - (regs[TC8521_HOUR10] & 0x02) ? 12 : 0); + tm->tm_hour = nibbles(TC8521_HOUR); + else + tm->tm_hour = ((nibbles(TC8521_HOUR) % 12) + (regs[TC8521_HOUR10] & 0x02) ? 12 : 0); tm->tm_wday = regs[TC8521_WEEKDAY]; tm->tm_mday = nibbles(TC8521_DAY); - tm->tm_mon = (nibbles(TC8521_MONTH) - 1); + tm->tm_mon = (nibbles(TC8521_MONTH) - 1); tm->tm_year = (nibbles(TC8521_YEAR) + 1980); } - /* This is called every second through the NVR/RTC hook. */ static void tc8521_tick(nvr_t *nvr) @@ -253,7 +241,6 @@ tc8521_tick(nvr_t *nvr) t1000_log("TC8521: ping\n"); } - static void tc8521_start(nvr_t *nvr) { @@ -261,13 +248,13 @@ tc8521_start(nvr_t *nvr) /* Initialize the internal and chip times. */ if (time_sync & TIME_SYNC_ENABLED) { - /* Use the internal clock's time. */ - nvr_time_get(&tm); - tc8521_time_set(nvr->regs, &tm); + /* Use the internal clock's time. */ + nvr_time_get(&tm); + tc8521_time_set(nvr->regs, &tm); } else { - /* Set the internal clock from the chip time. */ - tc8521_time_get(nvr->regs, &tm); - nvr_time_set(&tm); + /* Set the internal clock from the chip time. */ + tc8521_time_get(nvr->regs, &tm); + nvr_time_set(&tm); } #if 0 @@ -276,46 +263,43 @@ tc8521_start(nvr_t *nvr) #endif } - /* Write to one of the chip registers. */ static void tc8521_write(uint16_t addr, uint8_t val, void *priv) { - nvr_t *nvr = (nvr_t *)priv; + nvr_t *nvr = (nvr_t *) priv; uint8_t page; /* Get to the correct register page. */ addr &= 0x0f; page = nvr->regs[0x0d] & 0x03; if (addr < 0x0d) - addr += (16 * page); + addr += (16 * page); if (addr >= 0x10 && nvr->regs[addr] != val) - nvr_dosave = 1; + nvr_dosave = 1; /* Store the new value. */ nvr->regs[addr] = val; } - /* Read from one of the chip registers. */ static uint8_t tc8521_read(uint16_t addr, void *priv) { - nvr_t *nvr = (nvr_t *)priv; + nvr_t *nvr = (nvr_t *) priv; uint8_t page; /* Get to the correct register page. */ addr &= 0x0f; page = nvr->regs[0x0d] & 0x03; if (addr < 0x0d) - addr += (16 * page); + addr += (16 * page); /* Grab and return the desired value. */ - return(nvr->regs[addr]); + return (nvr->regs[addr]); } - /* Reset the 8521 to a default state. */ static void tc8521_reset(nvr_t *nvr) @@ -326,124 +310,119 @@ tc8521_reset(nvr_t *nvr) /* Reset the RTC registers. */ memset(nvr->regs, 0x00, 16); nvr->regs[TC8521_WEEKDAY] = 0x01; - nvr->regs[TC8521_DAY1] = 0x01; - nvr->regs[TC8521_MONTH1] = 0x01; + nvr->regs[TC8521_DAY1] = 0x01; + nvr->regs[TC8521_MONTH1] = 0x01; } - static void tc8521_init(nvr_t *nvr, int size) { /* This is machine specific. */ nvr->size = size; - nvr->irq = -1; + nvr->irq = -1; /* Set up any local handlers here. */ nvr->reset = tc8521_reset; nvr->start = tc8521_start; - nvr->tick = tc8521_tick; + nvr->tick = tc8521_tick; /* Initialize the actual NVR. */ nvr_init(nvr); io_sethandler(0x02c0, 16, - tc8521_read,NULL,NULL, tc8521_write,NULL,NULL, nvr); - + tc8521_read, NULL, NULL, tc8521_write, NULL, NULL, nvr); } - /* Given an EMS page ID, return its physical address in RAM. */ static uint32_t ems_execaddr(t1000_t *sys, int pg, uint16_t val) { - if (!(val & 0x80)) return(0); /* Bit 7 reset => not mapped */ - if (!sys->ems_pages) return(0); /* No EMS available: all used by - * HardRAM or conventional RAM */ + if (!(val & 0x80)) + return (0); /* Bit 7 reset => not mapped */ + if (!sys->ems_pages) + return (0); /* No EMS available: all used by + * HardRAM or conventional RAM */ val &= 0x7f; #if 0 t1000_log("Select EMS page: %d of %d\n", val, sys->ems_pages); #endif if (val < sys->ems_pages) { - /* EMS is any memory above 512k, - with ems_base giving the start address */ - return((512 * 1024) + (sys->ems_base * 0x10000) + (0x4000 * val)); + /* EMS is any memory above 512k, + with ems_base giving the start address */ + return ((512 * 1024) + (sys->ems_base * 0x10000) + (0x4000 * val)); } - return(0); + return (0); } - static uint8_t ems_in(uint16_t addr, void *priv) { - t1000_t *sys = (t1000_t *)priv; + t1000_t *sys = (t1000_t *) priv; #if 0 t1000_log("ems_in(%04x)=%02x\n", addr, sys->ems_reg[(addr >> 14) & 3]); #endif - return(sys->ems_reg[(addr >> 14) & 3]); + return (sys->ems_reg[(addr >> 14) & 3]); } - static void ems_out(uint16_t addr, uint8_t val, void *priv) { - t1000_t *sys = (t1000_t *)priv; - int pg = (addr >> 14) & 3; + t1000_t *sys = (t1000_t *) priv; + int pg = (addr >> 14) & 3; #if 0 t1000_log("ems_out(%04x, %02x) pg=%d\n", addr, val, pg); #endif - sys->ems_reg[pg] = val; + sys->ems_reg[pg] = val; sys->page_exec[pg] = ems_execaddr(sys, pg, val); if (sys->page_exec[pg]) { - /* Page present */ - mem_mapping_enable(&sys->mapping[pg]); - mem_mapping_set_exec(&sys->mapping[pg], ram + sys->page_exec[pg]); + /* Page present */ + mem_mapping_enable(&sys->mapping[pg]); + mem_mapping_set_exec(&sys->mapping[pg], ram + sys->page_exec[pg]); } else { - mem_mapping_disable(&sys->mapping[pg]); + mem_mapping_disable(&sys->mapping[pg]); } } - /* Hardram size is in 64k units */ static void ems_set_hardram(t1000_t *sys, uint8_t val) { int n; - val &= 0x1f; /* Mask off pageframe address */ + val &= 0x1f; /* Mask off pageframe address */ if (val && mem_size > 512) - sys->ems_base = val; - else - sys->ems_base = 0; + sys->ems_base = val; + else + sys->ems_base = 0; #if 0 t1000_log("EMS base set to %02x\n", val); #endif sys->ems_pages = ((mem_size - 512) / 16) - 4 * sys->ems_base; - if (sys->ems_pages < 0) sys->ems_pages = 0; + if (sys->ems_pages < 0) + sys->ems_pages = 0; /* Recalculate EMS mappings */ for (n = 0; n < 4; n++) - ems_out(n << 14, sys->ems_reg[n], sys); + ems_out(n << 14, sys->ems_reg[n], sys); } - static void ems_set_640k(t1000_t *sys, uint8_t val) { if (val && mem_size >= 640) { - mem_mapping_set_addr(&ram_low_mapping, 0, 640 * 1024); - sys->is_640k = 1; + mem_mapping_set_addr(&ram_low_mapping, 0, 640 * 1024); + sys->is_640k = 1; } else { - mem_mapping_set_addr(&ram_low_mapping, 0, 512 * 1024); - sys->is_640k = 0; + mem_mapping_set_addr(&ram_low_mapping, 0, 512 * 1024); + sys->is_640k = 0; } } - static void ems_set_port(t1000_t *sys, uint8_t val) { @@ -453,25 +432,25 @@ ems_set_port(t1000_t *sys, uint8_t val) t1000_log("ems_set_port(%d)", val & 0x0f); #endif if (sys->ems_port) { - for (n = 0; n <= 0xc000; n += 0x4000) { - io_removehandler(sys->ems_port+n, 1, - ems_in,NULL,NULL, ems_out,NULL,NULL, sys); - } - sys->ems_port = 0; + for (n = 0; n <= 0xc000; n += 0x4000) { + io_removehandler(sys->ems_port + n, 1, + ems_in, NULL, NULL, ems_out, NULL, NULL, sys); + } + sys->ems_port = 0; } val &= 0x0f; sys->ems_port_index = val; if (val == 7) { - /* No EMS */ - sys->ems_port = 0; + /* No EMS */ + sys->ems_port = 0; } else { - sys->ems_port = 0x208 | (val << 4); - for (n = 0; n <= 0xc000; n += 0x4000) { - io_sethandler(sys->ems_port+n, 1, - ems_in,NULL,NULL, ems_out,NULL,NULL, sys); - } - sys->ems_port = 0; + sys->ems_port = 0x208 | (val << 4); + for (n = 0; n <= 0xc000; n += 0x4000) { + io_sethandler(sys->ems_port + n, 1, + ems_in, NULL, NULL, ems_out, NULL, NULL, sys); + } + sys->ems_port = 0; } #if 0 @@ -479,35 +458,34 @@ ems_set_port(t1000_t *sys, uint8_t val) #endif } - static int addr_to_page(uint32_t addr) { - return((addr - 0xd0000) / 0x4000); + return ((addr - 0xd0000) / 0x4000); } - /* Read RAM in the EMS page frame. */ static uint8_t ems_read_ram(uint32_t addr, void *priv) { - t1000_t *sys = (t1000_t *)priv; - int pg = addr_to_page(addr); + t1000_t *sys = (t1000_t *) priv; + int pg = addr_to_page(addr); - if (pg < 0) return(0xff); + if (pg < 0) + return (0xff); addr = sys->page_exec[pg] + (addr & 0x3fff); - return(ram[addr]); + return (ram[addr]); } - static uint16_t ems_read_ramw(uint32_t addr, void *priv) { - t1000_t *sys = (t1000_t *)priv; - int pg = addr_to_page(addr); + t1000_t *sys = (t1000_t *) priv; + int pg = addr_to_page(addr); - if (pg < 0) return(0xff); + if (pg < 0) + return (0xff); #if 0 t1000_log("ems_read_ramw addr=%05x ", addr); @@ -518,46 +496,47 @@ ems_read_ramw(uint32_t addr, void *priv) t1000_log("-> %06x val=%04x\n", addr, *(uint16_t *)&ram[addr]); #endif - return(*(uint16_t *)&ram[addr]); + return (*(uint16_t *) &ram[addr]); } - static uint32_t ems_read_raml(uint32_t addr, void *priv) { - t1000_t *sys = (t1000_t *)priv; - int pg = addr_to_page(addr); + t1000_t *sys = (t1000_t *) priv; + int pg = addr_to_page(addr); - if (pg < 0) return(0xff); + if (pg < 0) + return (0xff); addr = sys->page_exec[pg] + (addr & 0x3fff); - return(*(uint32_t *)&ram[addr]); + return (*(uint32_t *) &ram[addr]); } - /* Write RAM in the EMS page frame. */ static void ems_write_ram(uint32_t addr, uint8_t val, void *priv) { - t1000_t *sys = (t1000_t *)priv; - int pg = addr_to_page(addr); + t1000_t *sys = (t1000_t *) priv; + int pg = addr_to_page(addr); - if (pg < 0) return; + if (pg < 0) + return; addr = sys->page_exec[pg] + (addr & 0x3fff); - if (ram[addr] != val) nvr_dosave = 1; + if (ram[addr] != val) + nvr_dosave = 1; ram[addr] = val; } - static void ems_write_ramw(uint32_t addr, uint16_t val, void *priv) { - t1000_t *sys = (t1000_t *)priv; - int pg = addr_to_page(addr); + t1000_t *sys = (t1000_t *) priv; + int pg = addr_to_page(addr); - if (pg < 0) return; + if (pg < 0) + return; #if 0 t1000_log("ems_write_ramw addr=%05x ", addr); @@ -568,122 +547,121 @@ ems_write_ramw(uint32_t addr, uint16_t val, void *priv) t1000_log("-> %06x val=%04x\n", addr, val); #endif - if (*(uint16_t *)&ram[addr] != val) nvr_dosave = 1; + if (*(uint16_t *) &ram[addr] != val) + nvr_dosave = 1; - *(uint16_t *)&ram[addr] = val; + *(uint16_t *) &ram[addr] = val; } - static void ems_write_raml(uint32_t addr, uint32_t val, void *priv) { - t1000_t *sys = (t1000_t *)priv; - int pg = addr_to_page(addr); + t1000_t *sys = (t1000_t *) priv; + int pg = addr_to_page(addr); - if (pg < 0) return; + if (pg < 0) + return; addr = sys->page_exec[pg] + (addr & 0x3fff); - if (*(uint32_t *)&ram[addr] != val) nvr_dosave = 1; + if (*(uint32_t *) &ram[addr] != val) + nvr_dosave = 1; - *(uint32_t *)&ram[addr] = val; + *(uint32_t *) &ram[addr] = val; } - static uint8_t read_ctl(uint16_t addr, void *priv) { - t1000_t *sys = (t1000_t *)priv; - uint8_t ret = 0xff; + t1000_t *sys = (t1000_t *) priv; + uint8_t ret = 0xff; switch (addr & 0x0f) { - case 1: - ret = sys->syskeys; - break; + case 1: + ret = sys->syskeys; + break; - case 0x0f: /* Detect EMS board */ - switch (sys->sys_ctl[0x0e]) { - case 0x50: - if (mem_size > 512) - ret = (0x90 | sys->ems_port_index); - break; + case 0x0f: /* Detect EMS board */ + switch (sys->sys_ctl[0x0e]) { + case 0x50: + if (mem_size > 512) + ret = (0x90 | sys->ems_port_index); + break; - case 0x51: - /* 0x60 is the page frame address: - (0xd000 - 0xc400) / 0x20 */ - ret = (sys->ems_base | 0x60); - break; + case 0x51: + /* 0x60 is the page frame address: + (0xd000 - 0xc400) / 0x20 */ + ret = (sys->ems_base | 0x60); + break; - case 0x52: - ret = (sys->is_640k ? 0x80 : 0); - break; - } - break; + case 0x52: + ret = (sys->is_640k ? 0x80 : 0); + break; + } + break; - default: - ret = (sys->sys_ctl[addr & 0x0f]); + default: + ret = (sys->sys_ctl[addr & 0x0f]); } - return(ret); + return (ret); } - static void t1200_turbo_set(uint8_t value) { - if (value == t1000.turbo) return; + if (value == t1000.turbo) + return; t1000.turbo = value; - if (! value) - cpu_dynamic_switch(0); - else - cpu_dynamic_switch(cpu); + if (!value) + cpu_dynamic_switch(0); + else + cpu_dynamic_switch(cpu); } - static void write_ctl(uint16_t addr, uint8_t val, void *priv) { - t1000_t *sys = (t1000_t *)priv; + t1000_t *sys = (t1000_t *) priv; sys->sys_ctl[addr & 0x0f] = val; switch (addr & 0x0f) { - case 4: /* Video control */ - if (sys->sys_ctl[3] == 0x5A) { - t1000_video_options_set((val & 0x20) ? 1 : 0); - t1000_display_set((val & 0x40) ? 0 : 1); - if (sys->is_t1200) - t1200_turbo_set((val & 0x80) ? 1 : 0); - } - break; + case 4: /* Video control */ + if (sys->sys_ctl[3] == 0x5A) { + t1000_video_options_set((val & 0x20) ? 1 : 0); + t1000_display_set((val & 0x40) ? 0 : 1); + if (sys->is_t1200) + t1200_turbo_set((val & 0x80) ? 1 : 0); + } + break; - /* It looks as if the T1200, like the T3100, can disable - * its builtin video chipset if it detects the presence of - * another video card. */ - case 6: if (sys->is_t1200) - { - t1000_video_enable(val & 0x01 ? 0 : 1); - } - break; + /* It looks as if the T1200, like the T3100, can disable + * its builtin video chipset if it detects the presence of + * another video card. */ + case 6: + if (sys->is_t1200) { + t1000_video_enable(val & 0x01 ? 0 : 1); + } + break; - case 0x0f: /* EMS control */ - switch (sys->sys_ctl[0x0e]) { - case 0x50: - ems_set_port(sys, val); - break; + case 0x0f: /* EMS control */ + switch (sys->sys_ctl[0x0e]) { + case 0x50: + ems_set_port(sys, val); + break; - case 0x51: - ems_set_hardram(sys, val); - break; + case 0x51: + ems_set_hardram(sys, val); + break; - case 0x52: - ems_set_640k(sys, val); - break; - } - break; + case 0x52: + ems_set_640k(sys, val); + break; + } + break; } } - /* Ports 0xC0 to 0xC3 appear to have two purposes: * * > Access to the 160 bytes of non-volatile RAM containing CONFIG.SYS @@ -694,171 +672,168 @@ write_ctl(uint16_t addr, uint8_t val, void *priv) static uint8_t t1000_read_nvram(uint16_t addr, void *priv) { - t1000_t *sys = (t1000_t *)priv; - uint8_t tmp = 0xff; + t1000_t *sys = (t1000_t *) priv; + uint8_t tmp = 0xff; switch (addr) { - case 0xc2: /* Read next byte from NVRAM */ - if (sys->nvr_addr >= 0 && sys->nvr_addr < 160) - tmp = sys->t1000_nvram[sys->nvr_addr]; - sys->nvr_addr++; - break; + case 0xc2: /* Read next byte from NVRAM */ + if (sys->nvr_addr >= 0 && sys->nvr_addr < 160) + tmp = sys->t1000_nvram[sys->nvr_addr]; + sys->nvr_addr++; + break; - case 0xc3: /* Read floppy changeline and NVRAM ready state */ - tmp = fdc_read(0x03f7, t1000.fdc); + case 0xc3: /* Read floppy changeline and NVRAM ready state */ + tmp = fdc_read(0x03f7, t1000.fdc); - tmp = (tmp & 0x80) >> 3; /* Bit 4 is changeline */ - tmp |= (sys->nvr_active & 0xc0);/* Bits 6,7 are r/w mode */ - tmp |= 0x2e; /* Bits 5,3,2,1 always 1 */ - tmp |= (sys->nvr_active & 0x40) >> 6; /* Ready state */ - break; + tmp = (tmp & 0x80) >> 3; /* Bit 4 is changeline */ + tmp |= (sys->nvr_active & 0xc0); /* Bits 6,7 are r/w mode */ + tmp |= 0x2e; /* Bits 5,3,2,1 always 1 */ + tmp |= (sys->nvr_active & 0x40) >> 6; /* Ready state */ + break; } - return(tmp); + return (tmp); } - static void t1000_write_nvram(uint16_t addr, uint8_t val, void *priv) { - t1000_t *sys = (t1000_t *)priv; + t1000_t *sys = (t1000_t *) priv; /* * On the real T1000, port 0xC1 is only usable as the high byte * of a 16-bit write to port 0xC0, with 0x5A in the low byte. */ switch (addr) { - case 0xc0: - sys->nvr_c0 = val; - break; + case 0xc0: + sys->nvr_c0 = val; + break; - case 0xc1: /* Write next byte to NVRAM */ - if (sys->nvr_addr >= 0 && sys->nvr_addr < 160) { - if (sys->t1000_nvram[sys->nvr_addr] != val) - nvr_dosave = 1; - sys->t1000_nvram[sys->nvr_addr] = val; - } - sys->nvr_addr++; - break; + case 0xc1: /* Write next byte to NVRAM */ + if (sys->nvr_addr >= 0 && sys->nvr_addr < 160) { + if (sys->t1000_nvram[sys->nvr_addr] != val) + nvr_dosave = 1; + sys->t1000_nvram[sys->nvr_addr] = val; + } + sys->nvr_addr++; + break; - case 0xc2: - break; + case 0xc2: + break; - case 0xc3: - /* - * At start of NVRAM read / write, 0x80 is written to - * port 0xC3. This seems to reset the NVRAM address - * counter. A single byte is then written (0xff for - * write, 0x00 for read) which appears to be ignored. - * Simulate that by starting the address counter off - * at -1. - */ - sys->nvr_active = val; - if (val == 0x80) sys->nvr_addr = -1; - break; + case 0xc3: + /* + * At start of NVRAM read / write, 0x80 is written to + * port 0xC3. This seems to reset the NVRAM address + * counter. A single byte is then written (0xff for + * write, 0x00 for read) which appears to be ignored. + * Simulate that by starting the address counter off + * at -1. + */ + sys->nvr_active = val; + if (val == 0x80) + sys->nvr_addr = -1; + break; } } - -static -uint8_t read_t1200_nvram(uint32_t addr, void *priv) +static uint8_t +read_t1200_nvram(uint32_t addr, void *priv) { - t1000_t *sys = (t1000_t *)priv; + t1000_t *sys = (t1000_t *) priv; return sys->t1200_nvram[addr & 0x7FF]; } - -static void write_t1200_nvram(uint32_t addr, uint8_t value, void *priv) +static void +write_t1200_nvram(uint32_t addr, uint8_t value, void *priv) { - t1000_t *sys = (t1000_t *)priv; + t1000_t *sys = (t1000_t *) priv; if (sys->t1200_nvram[addr & 0x7FF] != value) - nvr_dosave = 1; + nvr_dosave = 1; sys->t1200_nvram[addr & 0x7FF] = value; } - /* Port 0xC8 controls the ROM drive */ static uint8_t t1000_read_rom_ctl(uint16_t addr, void *priv) { - t1000_t *sys = (t1000_t *)priv; + t1000_t *sys = (t1000_t *) priv; - return(sys->rom_ctl); + return (sys->rom_ctl); } - static void t1000_write_rom_ctl(uint16_t addr, uint8_t val, void *priv) { - t1000_t *sys = (t1000_t *)priv; + t1000_t *sys = (t1000_t *) priv; sys->rom_ctl = val; if (sys->romdrive && (val & 0x80)) { - /* Enable */ - sys->rom_offset = ((val & 0x7f) * 0x10000) % T1000_ROMSIZE; - mem_mapping_set_addr(&sys->rom_mapping, 0xa0000, 0x10000); - mem_mapping_set_exec(&sys->rom_mapping, sys->romdrive + sys->rom_offset); - mem_mapping_enable(&sys->rom_mapping); + /* Enable */ + sys->rom_offset = ((val & 0x7f) * 0x10000) % T1000_ROMSIZE; + mem_mapping_set_addr(&sys->rom_mapping, 0xa0000, 0x10000); + mem_mapping_set_exec(&sys->rom_mapping, sys->romdrive + sys->rom_offset); + mem_mapping_enable(&sys->rom_mapping); } else { - mem_mapping_disable(&sys->rom_mapping); + mem_mapping_disable(&sys->rom_mapping); } } - /* Read the ROM drive */ static uint8_t t1000_read_rom(uint32_t addr, void *priv) { - t1000_t *sys = (t1000_t *)priv; + t1000_t *sys = (t1000_t *) priv; - if (! sys->romdrive) return(0xff); + if (!sys->romdrive) + return (0xff); - return(sys->romdrive[sys->rom_offset + (addr & 0xffff)]); + return (sys->romdrive[sys->rom_offset + (addr & 0xffff)]); } - static uint16_t t1000_read_romw(uint32_t addr, void *priv) { - t1000_t *sys = (t1000_t *)priv; + t1000_t *sys = (t1000_t *) priv; - if (! sys->romdrive) return(0xffff); + if (!sys->romdrive) + return (0xffff); - return(*(uint16_t *)(&sys->romdrive[sys->rom_offset + (addr & 0xffff)])); + return (*(uint16_t *) (&sys->romdrive[sys->rom_offset + (addr & 0xffff)])); } - static uint32_t t1000_read_roml(uint32_t addr, void *priv) { - t1000_t *sys = (t1000_t *)priv; + t1000_t *sys = (t1000_t *) priv; - if (! sys->romdrive) return(0xffffffff); + if (!sys->romdrive) + return (0xffffffff); - return(*(uint32_t *)(&sys->romdrive[sys->rom_offset + (addr & 0xffff)])); + return (*(uint32_t *) (&sys->romdrive[sys->rom_offset + (addr & 0xffff)])); } int machine_xt_t1000_init(const machine_t *model) { FILE *f; - int pg; + int pg; int ret; ret = bios_load_linear("roms/machines/t1000/t1000.rom", - 0x000f8000, 32768, 0); + 0x000f8000, 32768, 0); if (bios_only || !ret) - return ret; + return ret; memset(&t1000, 0x00, sizeof(t1000)); - t1000.is_t1200 = 0; - t1000.turbo = 0xff; - t1000.ems_port_index = 7; /* EMS disabled */ + t1000.is_t1200 = 0; + t1000.turbo = 0xff; + t1000.ems_port_index = 7; /* EMS disabled */ /* Load the T1000 CGA Font ROM. */ loadfont("roms/machines/t1000/t1000font.bin", 2); @@ -871,43 +846,43 @@ machine_xt_t1000_init(const machine_t *model) */ f = rom_fopen("roms/machines/t1000/t1000dos.rom", "rb"); if (f != NULL) { - t1000.romdrive = malloc(T1000_ROMSIZE); - if (t1000.romdrive) { - memset(t1000.romdrive, 0xff, T1000_ROMSIZE); - if (fread(t1000.romdrive, 1, T1000_ROMSIZE, f) != T1000_ROMSIZE) - fatal("machine_xt_t1000_init(): Error reading DOS ROM data\n"); - } - fclose(f); + t1000.romdrive = malloc(T1000_ROMSIZE); + if (t1000.romdrive) { + memset(t1000.romdrive, 0xff, T1000_ROMSIZE); + if (fread(t1000.romdrive, 1, T1000_ROMSIZE, f) != T1000_ROMSIZE) + fatal("machine_xt_t1000_init(): Error reading DOS ROM data\n"); + } + fclose(f); } mem_mapping_add(&t1000.rom_mapping, 0xa0000, 0x10000, - t1000_read_rom,t1000_read_romw,t1000_read_roml, - NULL,NULL,NULL, NULL, MEM_MAPPING_EXTERNAL, &t1000); + t1000_read_rom, t1000_read_romw, t1000_read_roml, + NULL, NULL, NULL, NULL, MEM_MAPPING_EXTERNAL, &t1000); mem_mapping_disable(&t1000.rom_mapping); /* Map the EMS page frame */ for (pg = 0; pg < 4; pg++) { - mem_mapping_add(&t1000.mapping[pg], 0xd0000 + (0x4000 * pg), 16384, - ems_read_ram,ems_read_ramw,ems_read_raml, - ems_write_ram,ems_write_ramw,ems_write_raml, - NULL, MEM_MAPPING_EXTERNAL, &t1000); + mem_mapping_add(&t1000.mapping[pg], 0xd0000 + (0x4000 * pg), 16384, + ems_read_ram, ems_read_ramw, ems_read_raml, + ems_write_ram, ems_write_ramw, ems_write_raml, + NULL, MEM_MAPPING_EXTERNAL, &t1000); - /* Start them all off disabled */ - mem_mapping_disable(&t1000.mapping[pg]); + /* Start them all off disabled */ + mem_mapping_disable(&t1000.mapping[pg]); } /* Non-volatile RAM for CONFIG.SYS */ io_sethandler(0xc0, 4, - t1000_read_nvram,NULL,NULL, - t1000_write_nvram,NULL,NULL, &t1000); + t1000_read_nvram, NULL, NULL, + t1000_write_nvram, NULL, NULL, &t1000); /* ROM drive */ io_sethandler(0xc8, 1, - t1000_read_rom_ctl,NULL,NULL, - t1000_write_rom_ctl,NULL,NULL, &t1000); + t1000_read_rom_ctl, NULL, NULL, + t1000_write_rom_ctl, NULL, NULL, &t1000); /* System control functions, and add-on memory board */ io_sethandler(0xe0, 16, - read_ctl,NULL,NULL, write_ctl,NULL,NULL, &t1000); + read_ctl, NULL, NULL, write_ctl, NULL, NULL, &t1000); machine_common_init(model); @@ -922,19 +897,17 @@ machine_xt_t1000_init(const machine_t *model) nvr_set_ven_save(t1000_nvr_save); if (gfxcard == VID_INTERNAL) - device_add(&t1000_video_device); + device_add(&t1000_video_device); return ret; } - const device_t * t1200_get_device(void) { - return(&t1200_video_device); + return (&t1200_video_device); } - int machine_xt_t1200_init(const machine_t *model) { @@ -943,41 +916,41 @@ machine_xt_t1200_init(const machine_t *model) int ret; ret = bios_load_linear("roms/machines/t1200/t1200_019e.ic15.bin", - 0x000f8000, 32768, 0); + 0x000f8000, 32768, 0); if (bios_only || !ret) - return ret; + return ret; memset(&t1000, 0x00, sizeof(t1000)); - t1000.is_t1200 = 1; - t1000.ems_port_index = 7; /* EMS disabled */ + t1000.is_t1200 = 1; + t1000.ems_port_index = 7; /* EMS disabled */ /* Load the T1000 CGA Font ROM. */ loadfont("roms/machines/t1000/t1000font.bin", 2); /* Map the EMS page frame */ for (pg = 0; pg < 4; pg++) { - mem_mapping_add(&t1000.mapping[pg], - 0xd0000 + (0x4000 * pg), 16384, - ems_read_ram,ems_read_ramw,ems_read_raml, - ems_write_ram,ems_write_ramw,ems_write_raml, - NULL, MEM_MAPPING_EXTERNAL, &t1000); + mem_mapping_add(&t1000.mapping[pg], + 0xd0000 + (0x4000 * pg), 16384, + ems_read_ram, ems_read_ramw, ems_read_raml, + ems_write_ram, ems_write_ramw, ems_write_raml, + NULL, MEM_MAPPING_EXTERNAL, &t1000); - /* Start them all off disabled */ - mem_mapping_disable(&t1000.mapping[pg]); + /* Start them all off disabled */ + mem_mapping_disable(&t1000.mapping[pg]); } /* System control functions, and add-on memory board */ io_sethandler(0xe0, 16, - read_ctl,NULL,NULL, write_ctl,NULL,NULL, &t1000); + read_ctl, NULL, NULL, write_ctl, NULL, NULL, &t1000); machine_common_init(model); mem_mapping_add(&t1000.nvr_mapping, - 0x000f0000, 2048, - read_t1200_nvram, NULL, NULL, - write_t1200_nvram, NULL, NULL, - NULL, MEM_MAPPING_EXTERNAL, &t1000); + 0x000f0000, 2048, + read_t1200_nvram, NULL, NULL, + write_t1200_nvram, NULL, NULL, + NULL, MEM_MAPPING_EXTERNAL, &t1000); pit_devs[0].set_out_func(pit_devs[0].data, 1, pit_refresh_timer_xt); device_add(&keyboard_xt_device); @@ -990,12 +963,11 @@ machine_xt_t1200_init(const machine_t *model) nvr_set_ven_save(t1200_nvr_save); if (gfxcard == VID_INTERNAL) - device_add(&t1200_video_device); + device_add(&t1200_video_device); return ret; } - void t1000_syskey(uint8_t andmask, uint8_t ormask, uint8_t xormask) { @@ -1004,73 +976,68 @@ t1000_syskey(uint8_t andmask, uint8_t ormask, uint8_t xormask) t1000.syskeys ^= xormask; } - static void t1000_configsys_load(void) { FILE *f; - int size; + int size; memset(t1000.t1000_nvram, 0x1a, sizeof(t1000.t1000_nvram)); f = plat_fopen(nvr_path("t1000_config.nvr"), "rb"); if (f != NULL) { - size = sizeof(t1000.t1000_nvram); - if (fread(t1000.t1000_nvram, 1, size, f) != size) - fatal("t1000_configsys_load(): Error reading data\n"); - fclose(f); + size = sizeof(t1000.t1000_nvram); + if (fread(t1000.t1000_nvram, 1, size, f) != size) + fatal("t1000_configsys_load(): Error reading data\n"); + fclose(f); } } - static void t1000_configsys_save(void) { FILE *f; - int size; + int size; f = plat_fopen(nvr_path("t1000_config.nvr"), "wb"); if (f != NULL) { - size = sizeof(t1000.t1000_nvram); - if (fwrite(t1000.t1000_nvram, 1, size, f) != size) - fatal("t1000_configsys_save(): Error writing data\n"); - fclose(f); + size = sizeof(t1000.t1000_nvram); + if (fwrite(t1000.t1000_nvram, 1, size, f) != size) + fatal("t1000_configsys_save(): Error writing data\n"); + fclose(f); } } - static void t1200_state_load(void) { FILE *f; - int size; + int size; memset(t1000.t1200_nvram, 0, sizeof(t1000.t1200_nvram)); f = plat_fopen(nvr_path("t1200_state.nvr"), "rb"); if (f != NULL) { - size = sizeof(t1000.t1200_nvram); - if (fread(t1000.t1200_nvram, 1, size, f) != size) - fatal("t1200_state_load(): Error reading data\n"); - fclose(f); + size = sizeof(t1000.t1200_nvram); + if (fread(t1000.t1200_nvram, 1, size, f) != size) + fatal("t1200_state_load(): Error reading data\n"); + fclose(f); } } - static void t1200_state_save(void) { FILE *f; - int size; + int size; f = plat_fopen(nvr_path("t1200_state.nvr"), "wb"); if (f != NULL) { - size = sizeof(t1000.t1200_nvram); - if (fwrite(t1000.t1200_nvram, 1, size, f) != size) - fatal("t1200_state_save(): Error writing data\n"); - fclose(f); + size = sizeof(t1000.t1200_nvram); + if (fwrite(t1000.t1200_nvram, 1, size, f) != size) + fatal("t1200_state_save(): Error writing data\n"); + fclose(f); } } - /* All RAM beyond 512k is non-volatile */ static void t1000_emsboard_load(void) @@ -1078,30 +1045,28 @@ t1000_emsboard_load(void) FILE *f; if (mem_size > 512) { - f = plat_fopen(nvr_path("t1000_ems.nvr"), "rb"); - if (f != NULL) { - fread(&ram[512 * 1024], 1024, (mem_size - 512), f); - fclose(f); - } + f = plat_fopen(nvr_path("t1000_ems.nvr"), "rb"); + if (f != NULL) { + fread(&ram[512 * 1024], 1024, (mem_size - 512), f); + fclose(f); + } } } - static void t1000_emsboard_save(void) { FILE *f; if (mem_size > 512) { - f = plat_fopen(nvr_path("t1000_ems.nvr"), "wb"); - if (f != NULL) { - fwrite(&ram[512 * 1024], 1024, (mem_size - 512), f); - fclose(f); - } + f = plat_fopen(nvr_path("t1000_ems.nvr"), "wb"); + if (f != NULL) { + fwrite(&ram[512 * 1024], 1024, (mem_size - 512), f); + fclose(f); + } } } - void t1000_nvr_load(void) { @@ -1109,7 +1074,6 @@ t1000_nvr_load(void) t1000_configsys_load(); } - void t1000_nvr_save(void) { @@ -1117,7 +1081,6 @@ t1000_nvr_save(void) t1000_configsys_save(); } - void t1200_nvr_load(void) { @@ -1125,7 +1088,6 @@ t1200_nvr_load(void) t1200_state_load(); } - void t1200_nvr_save(void) { diff --git a/src/machine/m_xt_t1000_vid.c b/src/machine/m_xt_t1000_vid.c index 817b54042..d15a8f1c2 100644 --- a/src/machine/m_xt_t1000_vid.c +++ b/src/machine/m_xt_t1000_vid.c @@ -52,20 +52,17 @@ #include <86box/vid_cga.h> #include <86box/m_xt_t1000.h> - #define T1000_XSIZE 640 #define T1000_YSIZE 200 - /* Mapping of attributes to colours */ static uint32_t blue, grey; -static uint8_t boldcols[256]; /* Which attributes use the bold font */ +static uint8_t boldcols[256]; /* Which attributes use the bold font */ static uint32_t blinkcols[256][2]; static uint32_t normcols[256][2]; static uint8_t language; -static video_timings_t timing_t1000 = {VIDEO_ISA, 8,16,32, 8,16,32}; - +static video_timings_t timing_t1000 = { VIDEO_ISA, 8, 16, 32, 8, 16, 32 }; /* Video options set by the motherboard; they will be picked up by the card * on the next poll. @@ -74,673 +71,633 @@ static video_timings_t timing_t1000 = {VIDEO_ISA, 8,16,32, 8,16,32}; * Bit 0: Thin font */ static uint8_t st_video_options; -static uint8_t st_enabled = 1; -static int8_t st_display_internal = -1; +static uint8_t st_enabled = 1; +static int8_t st_display_internal = -1; -void t1000_video_options_set(uint8_t options) +void +t1000_video_options_set(uint8_t options) { - st_video_options = options & 1; - st_video_options |= language; + st_video_options = options & 1; + st_video_options |= language; } -void t1000_video_enable(uint8_t enabled) +void +t1000_video_enable(uint8_t enabled) { - st_enabled = enabled; + st_enabled = enabled; } -void t1000_display_set(uint8_t internal) +void +t1000_display_set(uint8_t internal) { - st_display_internal = (int8_t)internal; + st_display_internal = (int8_t) internal; } -uint8_t t1000_display_get() +uint8_t +t1000_display_get() { - return (uint8_t)st_display_internal; + return (uint8_t) st_display_internal; } +typedef struct t1000_t { + mem_mapping_t mapping; -typedef struct t1000_t -{ - mem_mapping_t mapping; + cga_t cga; /* The CGA is used for the external + * display; most of its registers are + * ignored by the plasma display. */ - cga_t cga; /* The CGA is used for the external - * display; most of its registers are - * ignored by the plasma display. */ + int font; /* Current font, 0-3 */ + int enabled; /* Hardware enabled, 0 or 1 */ + int internal; /* Using internal display? */ + uint8_t attrmap; /* Attribute mapping register */ - int font; /* Current font, 0-3 */ - int enabled; /* Hardware enabled, 0 or 1 */ - int internal; /* Using internal display? */ - uint8_t attrmap; /* Attribute mapping register */ + uint64_t dispontime, dispofftime; - uint64_t dispontime, dispofftime; + int linepos, displine; + int vc; + int dispon; + int vsynctime; + uint8_t video_options; + uint8_t backlight, invert; - int linepos, displine; - int vc; - int dispon; - int vsynctime; - uint8_t video_options; - uint8_t backlight, invert; - - uint8_t *vram; + uint8_t *vram; } t1000_t; - -static void t1000_recalctimings(t1000_t *t1000); -static void t1000_write(uint32_t addr, uint8_t val, void *p); +static void t1000_recalctimings(t1000_t *t1000); +static void t1000_write(uint32_t addr, uint8_t val, void *p); static uint8_t t1000_read(uint32_t addr, void *p); -static void t1000_recalcattrs(t1000_t *t1000); +static void t1000_recalcattrs(t1000_t *t1000); - -static void t1000_out(uint16_t addr, uint8_t val, void *p) +static void +t1000_out(uint16_t addr, uint8_t val, void *p) { - t1000_t *t1000 = (t1000_t *)p; - switch (addr) - { - /* Emulated CRTC, register select */ - case 0x3d0: case 0x3d2: case 0x3d4: case 0x3d6: - cga_out(addr, val, &t1000->cga); - break; + t1000_t *t1000 = (t1000_t *) p; + switch (addr) { + /* Emulated CRTC, register select */ + case 0x3d0: + case 0x3d2: + case 0x3d4: + case 0x3d6: + cga_out(addr, val, &t1000->cga); + break; - /* Emulated CRTC, value */ - case 0x3d1: case 0x3d3: case 0x3d5: case 0x3d7: - /* Register 0x12 controls the attribute mappings for the - * LCD screen. */ - if (t1000->cga.crtcreg == 0x12) - { - t1000->attrmap = val; - t1000_recalcattrs(t1000); - return; - } - cga_out(addr, val, &t1000->cga); + /* Emulated CRTC, value */ + case 0x3d1: + case 0x3d3: + case 0x3d5: + case 0x3d7: + /* Register 0x12 controls the attribute mappings for the + * LCD screen. */ + if (t1000->cga.crtcreg == 0x12) { + t1000->attrmap = val; + t1000_recalcattrs(t1000); + return; + } + cga_out(addr, val, &t1000->cga); - t1000_recalctimings(t1000); - return; + t1000_recalctimings(t1000); + return; - /* CGA control register */ - case 0x3D8: - cga_out(addr, val, &t1000->cga); - return; - /* CGA colour register */ - case 0x3D9: - cga_out(addr, val, &t1000->cga); - return; - } + /* CGA control register */ + case 0x3D8: + cga_out(addr, val, &t1000->cga); + return; + /* CGA colour register */ + case 0x3D9: + cga_out(addr, val, &t1000->cga); + return; + } } -static uint8_t t1000_in(uint16_t addr, void *p) +static uint8_t +t1000_in(uint16_t addr, void *p) { - t1000_t *t1000 = (t1000_t *)p; - uint8_t val; + t1000_t *t1000 = (t1000_t *) p; + uint8_t val; - switch (addr) - { - case 0x3d1: case 0x3d3: case 0x3d5: case 0x3d7: - if (t1000->cga.crtcreg == 0x12) - { - val = t1000->attrmap & 0x0F; - if (t1000->internal) val |= 0x20; /* LCD / CRT */ - return val; - } - } + switch (addr) { + case 0x3d1: + case 0x3d3: + case 0x3d5: + case 0x3d7: + if (t1000->cga.crtcreg == 0x12) { + val = t1000->attrmap & 0x0F; + if (t1000->internal) + val |= 0x20; /* LCD / CRT */ + return val; + } + } - return cga_in(addr, &t1000->cga); + return cga_in(addr, &t1000->cga); } - - - -static void t1000_write(uint32_t addr, uint8_t val, void *p) +static void +t1000_write(uint32_t addr, uint8_t val, void *p) { - t1000_t *t1000 = (t1000_t *)p; + t1000_t *t1000 = (t1000_t *) p; - t1000->vram[addr & 0x3fff] = val; - cycles -= 4; + t1000->vram[addr & 0x3fff] = val; + cycles -= 4; } -static uint8_t t1000_read(uint32_t addr, void *p) +static uint8_t +t1000_read(uint32_t addr, void *p) { - t1000_t *t1000 = (t1000_t *)p; - cycles -= 4; + t1000_t *t1000 = (t1000_t *) p; + cycles -= 4; - return t1000->vram[addr & 0x3fff]; + return t1000->vram[addr & 0x3fff]; } - - -static void t1000_recalctimings(t1000_t *t1000) +static void +t1000_recalctimings(t1000_t *t1000) { - double disptime; - double _dispontime, _dispofftime; + double disptime; + double _dispontime, _dispofftime; - if (!t1000->internal) - { - cga_recalctimings(&t1000->cga); - return; - } - disptime = 651; - _dispontime = 640; - _dispofftime = disptime - _dispontime; - t1000->dispontime = (uint64_t)(_dispontime * xt_cpu_multi); - t1000->dispofftime = (uint64_t)(_dispofftime * xt_cpu_multi); + if (!t1000->internal) { + cga_recalctimings(&t1000->cga); + return; + } + disptime = 651; + _dispontime = 640; + _dispofftime = disptime - _dispontime; + t1000->dispontime = (uint64_t) (_dispontime * xt_cpu_multi); + t1000->dispofftime = (uint64_t) (_dispofftime * xt_cpu_multi); } /* Draw a row of text in 80-column mode */ -static void t1000_text_row80(t1000_t *t1000) +static void +t1000_text_row80(t1000_t *t1000) { - uint32_t cols[2]; - int x, c; - uint8_t chr, attr; - int drawcursor; - int cursorline; - int bold; - int blink; - uint16_t addr; - uint8_t sc; - uint16_t ma = (t1000->cga.crtc[13] | (t1000->cga.crtc[12] << 8)) & 0x3fff; - uint16_t ca = (t1000->cga.crtc[15] | (t1000->cga.crtc[14] << 8)) & 0x3fff; + uint32_t cols[2]; + int x, c; + uint8_t chr, attr; + int drawcursor; + int cursorline; + int bold; + int blink; + uint16_t addr; + uint8_t sc; + uint16_t ma = (t1000->cga.crtc[13] | (t1000->cga.crtc[12] << 8)) & 0x3fff; + uint16_t ca = (t1000->cga.crtc[15] | (t1000->cga.crtc[14] << 8)) & 0x3fff; - sc = (t1000->displine) & 7; - addr = ((ma & ~1) + (t1000->displine >> 3) * 80) * 2; - ma += (t1000->displine >> 3) * 80; + sc = (t1000->displine) & 7; + addr = ((ma & ~1) + (t1000->displine >> 3) * 80) * 2; + ma += (t1000->displine >> 3) * 80; - if ((t1000->cga.crtc[10] & 0x60) == 0x20) - { - cursorline = 0; - } - else - { - cursorline = ((t1000->cga.crtc[10] & 0x0F) <= sc) && - ((t1000->cga.crtc[11] & 0x0F) >= sc); - } - for (x = 0; x < 80; x++) + if ((t1000->cga.crtc[10] & 0x60) == 0x20) { + cursorline = 0; + } else { + cursorline = ((t1000->cga.crtc[10] & 0x0F) <= sc) && ((t1000->cga.crtc[11] & 0x0F) >= sc); + } + for (x = 0; x < 80; x++) { + chr = t1000->vram[(addr + 2 * x) & 0x3FFF]; + attr = t1000->vram[(addr + 2 * x + 1) & 0x3FFF]; + drawcursor = ((ma == ca) && cursorline && (t1000->cga.cgamode & 8) && (t1000->cga.cgablink & 16)); + + blink = ((t1000->cga.cgablink & 16) && (t1000->cga.cgamode & 0x20) && (attr & 0x80) && !drawcursor); + + if (t1000->video_options & 1) + bold = boldcols[attr] ? chr : chr + 256; + else + bold = boldcols[attr] ? chr + 256 : chr; + if (t1000->video_options & 2) + bold += 512; + + if (t1000->cga.cgamode & 0x20) /* Blink */ { - chr = t1000->vram[(addr + 2 * x) & 0x3FFF]; - attr = t1000->vram[(addr + 2 * x + 1) & 0x3FFF]; - drawcursor = ((ma == ca) && cursorline && - (t1000->cga.cgamode & 8) && (t1000->cga.cgablink & 16)); - - blink = ((t1000->cga.cgablink & 16) && (t1000->cga.cgamode & 0x20) && - (attr & 0x80) && !drawcursor); - - if (t1000->video_options & 1) - bold = boldcols[attr] ? chr : chr + 256; - else - bold = boldcols[attr] ? chr + 256 : chr; - if (t1000->video_options & 2) - bold += 512; - - if (t1000->cga.cgamode & 0x20) /* Blink */ - { - cols[1] = blinkcols[attr][1]; - cols[0] = blinkcols[attr][0]; - if (blink) cols[1] = cols[0]; - } - else - { - cols[1] = normcols[attr][1]; - cols[0] = normcols[attr][0]; - } - if (drawcursor) - { - for (c = 0; c < 8; c++) - { - ((uint32_t *)buffer32->line[t1000->displine])[(x << 3) + c] = cols[(fontdat[bold][sc] & (1 << (c ^ 7))) ? 1 : 0] ^ (blue ^ grey); - } - } - else - { - for (c = 0; c < 8; c++) - ((uint32_t *)buffer32->line[t1000->displine])[(x << 3) + c] = cols[(fontdat[bold][sc] & (1 << (c ^ 7))) ? 1 : 0]; - } - ++ma; - } + cols[1] = blinkcols[attr][1]; + cols[0] = blinkcols[attr][0]; + if (blink) + cols[1] = cols[0]; + } else { + cols[1] = normcols[attr][1]; + cols[0] = normcols[attr][0]; + } + if (drawcursor) { + for (c = 0; c < 8; c++) { + ((uint32_t *) buffer32->line[t1000->displine])[(x << 3) + c] = cols[(fontdat[bold][sc] & (1 << (c ^ 7))) ? 1 : 0] ^ (blue ^ grey); + } + } else { + for (c = 0; c < 8; c++) + ((uint32_t *) buffer32->line[t1000->displine])[(x << 3) + c] = cols[(fontdat[bold][sc] & (1 << (c ^ 7))) ? 1 : 0]; + } + ++ma; + } } /* Draw a row of text in 40-column mode */ -static void t1000_text_row40(t1000_t *t1000) +static void +t1000_text_row40(t1000_t *t1000) { - uint32_t cols[2]; - int x, c; - uint8_t chr, attr; - int drawcursor; - int cursorline; - int bold; - int blink; - uint16_t addr; - uint8_t sc; - uint16_t ma = (t1000->cga.crtc[13] | (t1000->cga.crtc[12] << 8)) & 0x3fff; - uint16_t ca = (t1000->cga.crtc[15] | (t1000->cga.crtc[14] << 8)) & 0x3fff; + uint32_t cols[2]; + int x, c; + uint8_t chr, attr; + int drawcursor; + int cursorline; + int bold; + int blink; + uint16_t addr; + uint8_t sc; + uint16_t ma = (t1000->cga.crtc[13] | (t1000->cga.crtc[12] << 8)) & 0x3fff; + uint16_t ca = (t1000->cga.crtc[15] | (t1000->cga.crtc[14] << 8)) & 0x3fff; - sc = (t1000->displine) & 7; - addr = ((ma & ~1) + (t1000->displine >> 3) * 40) * 2; - ma += (t1000->displine >> 3) * 40; + sc = (t1000->displine) & 7; + addr = ((ma & ~1) + (t1000->displine >> 3) * 40) * 2; + ma += (t1000->displine >> 3) * 40; - if ((t1000->cga.crtc[10] & 0x60) == 0x20) - { - cursorline = 0; - } - else - { - cursorline = ((t1000->cga.crtc[10] & 0x0F) <= sc) && - ((t1000->cga.crtc[11] & 0x0F) >= sc); - } - for (x = 0; x < 40; x++) + if ((t1000->cga.crtc[10] & 0x60) == 0x20) { + cursorline = 0; + } else { + cursorline = ((t1000->cga.crtc[10] & 0x0F) <= sc) && ((t1000->cga.crtc[11] & 0x0F) >= sc); + } + for (x = 0; x < 40; x++) { + chr = t1000->vram[(addr + 2 * x) & 0x3FFF]; + attr = t1000->vram[(addr + 2 * x + 1) & 0x3FFF]; + drawcursor = ((ma == ca) && cursorline && (t1000->cga.cgamode & 8) && (t1000->cga.cgablink & 16)); + + blink = ((t1000->cga.cgablink & 16) && (t1000->cga.cgamode & 0x20) && (attr & 0x80) && !drawcursor); + + if (t1000->video_options & 1) + bold = boldcols[attr] ? chr : chr + 256; + else + bold = boldcols[attr] ? chr + 256 : chr; + if (t1000->video_options & 2) + bold += 512; + + if (t1000->cga.cgamode & 0x20) /* Blink */ { - chr = t1000->vram[(addr + 2 * x) & 0x3FFF]; - attr = t1000->vram[(addr + 2 * x + 1) & 0x3FFF]; - drawcursor = ((ma == ca) && cursorline && - (t1000->cga.cgamode & 8) && (t1000->cga.cgablink & 16)); - - blink = ((t1000->cga.cgablink & 16) && (t1000->cga.cgamode & 0x20) && - (attr & 0x80) && !drawcursor); - - if (t1000->video_options & 1) - bold = boldcols[attr] ? chr : chr + 256; - else - bold = boldcols[attr] ? chr + 256 : chr; - if (t1000->video_options & 2) - bold += 512; - - if (t1000->cga.cgamode & 0x20) /* Blink */ - { - cols[1] = blinkcols[attr][1]; - cols[0] = blinkcols[attr][0]; - if (blink) cols[1] = cols[0]; - } - else - { - cols[1] = normcols[attr][1]; - cols[0] = normcols[attr][0]; - } - if (drawcursor) - { - for (c = 0; c < 8; c++) - { - ((uint32_t *)buffer32->line[t1000->displine])[(x << 4) + c*2] = - ((uint32_t *)buffer32->line[t1000->displine])[(x << 4) + c*2 + 1] = cols[(fontdat[bold][sc] & (1 << (c ^ 7))) ? 1 : 0] ^ (blue ^ grey); - } - } - else - { - for (c = 0; c < 8; c++) - { - ((uint32_t *)buffer32->line[t1000->displine])[(x << 4) + c*2] = - ((uint32_t *)buffer32->line[t1000->displine])[(x << 4) + c*2+1] = cols[(fontdat[bold][sc] & (1 << (c ^ 7))) ? 1 : 0]; - } - } - ++ma; - } + cols[1] = blinkcols[attr][1]; + cols[0] = blinkcols[attr][0]; + if (blink) + cols[1] = cols[0]; + } else { + cols[1] = normcols[attr][1]; + cols[0] = normcols[attr][0]; + } + if (drawcursor) { + for (c = 0; c < 8; c++) { + ((uint32_t *) buffer32->line[t1000->displine])[(x << 4) + c * 2] = ((uint32_t *) buffer32->line[t1000->displine])[(x << 4) + c * 2 + 1] = cols[(fontdat[bold][sc] & (1 << (c ^ 7))) ? 1 : 0] ^ (blue ^ grey); + } + } else { + for (c = 0; c < 8; c++) { + ((uint32_t *) buffer32->line[t1000->displine])[(x << 4) + c * 2] = ((uint32_t *) buffer32->line[t1000->displine])[(x << 4) + c * 2 + 1] = cols[(fontdat[bold][sc] & (1 << (c ^ 7))) ? 1 : 0]; + } + } + ++ma; + } } /* Draw a line in CGA 640x200 mode */ -static void t1000_cgaline6(t1000_t *t1000) +static void +t1000_cgaline6(t1000_t *t1000) { - int x, c; - uint8_t dat; - uint32_t ink = 0; - uint16_t addr; - uint32_t fg = (t1000->cga.cgacol & 0x0F) ? blue : grey; - uint32_t bg = grey; + int x, c; + uint8_t dat; + uint32_t ink = 0; + uint16_t addr; + uint32_t fg = (t1000->cga.cgacol & 0x0F) ? blue : grey; + uint32_t bg = grey; - uint16_t ma = (t1000->cga.crtc[13] | (t1000->cga.crtc[12] << 8)) & 0x3fff; + uint16_t ma = (t1000->cga.crtc[13] | (t1000->cga.crtc[12] << 8)) & 0x3fff; - addr = ((t1000->displine) & 1) * 0x2000 + - (t1000->displine >> 1) * 80 + - ((ma & ~1) << 1); + addr = ((t1000->displine) & 1) * 0x2000 + (t1000->displine >> 1) * 80 + ((ma & ~1) << 1); - for (x = 0; x < 80; x++) - { - dat = t1000->vram[addr & 0x3FFF]; - addr++; + for (x = 0; x < 80; x++) { + dat = t1000->vram[addr & 0x3FFF]; + addr++; - for (c = 0; c < 8; c++) - { - ink = (dat & 0x80) ? fg : bg; - if (!(t1000->cga.cgamode & 8)) - ink = grey; - ((uint32_t *)buffer32->line[t1000->displine])[x*8+c] = ink; - dat = dat << 1; - } - } + for (c = 0; c < 8; c++) { + ink = (dat & 0x80) ? fg : bg; + if (!(t1000->cga.cgamode & 8)) + ink = grey; + ((uint32_t *) buffer32->line[t1000->displine])[x * 8 + c] = ink; + dat = dat << 1; + } + } } /* Draw a line in CGA 320x200 mode. Here the CGA colours are converted to * dither patterns: colour 1 to 25% grey, colour 2 to 50% grey */ -static void t1000_cgaline4(t1000_t *t1000) +static void +t1000_cgaline4(t1000_t *t1000) { - int x, c; - uint8_t dat, pattern; - uint32_t ink0, ink1; - uint16_t addr; + int x, c; + uint8_t dat, pattern; + uint32_t ink0, ink1; + uint16_t addr; - uint16_t ma = (t1000->cga.crtc[13] | (t1000->cga.crtc[12] << 8)) & 0x3fff; - addr = ((t1000->displine) & 1) * 0x2000 + - (t1000->displine >> 1) * 80 + - ((ma & ~1) << 1); + uint16_t ma = (t1000->cga.crtc[13] | (t1000->cga.crtc[12] << 8)) & 0x3fff; + addr = ((t1000->displine) & 1) * 0x2000 + (t1000->displine >> 1) * 80 + ((ma & ~1) << 1); - for (x = 0; x < 80; x++) - { - dat = t1000->vram[addr & 0x3FFF]; - addr++; + for (x = 0; x < 80; x++) { + dat = t1000->vram[addr & 0x3FFF]; + addr++; - for (c = 0; c < 4; c++) - { - pattern = (dat & 0xC0) >> 6; - if (!(t1000->cga.cgamode & 8)) pattern = 0; + for (c = 0; c < 4; c++) { + pattern = (dat & 0xC0) >> 6; + if (!(t1000->cga.cgamode & 8)) + pattern = 0; - switch (pattern & 3) - { - default: - case 0: ink0 = ink1 = grey; break; - case 1: if (t1000->displine & 1) - { - ink0 = grey; ink1 = grey; - } - else - { - ink0 = blue; ink1 = grey; - } - break; - case 2: if (t1000->displine & 1) - { - ink0 = grey; ink1 = blue; - } - else - { - ink0 = blue; ink1 = grey; - } - break; - case 3: ink0 = ink1 = blue; break; - - } - ((uint32_t *)buffer32->line[t1000->displine])[x*8+2*c] = ink0; - ((uint32_t *)buffer32->line[t1000->displine])[x*8+2*c+1] = ink1; - dat = dat << 2; - } - } + switch (pattern & 3) { + default: + case 0: + ink0 = ink1 = grey; + break; + case 1: + if (t1000->displine & 1) { + ink0 = grey; + ink1 = grey; + } else { + ink0 = blue; + ink1 = grey; + } + break; + case 2: + if (t1000->displine & 1) { + ink0 = grey; + ink1 = blue; + } else { + ink0 = blue; + ink1 = grey; + } + break; + case 3: + ink0 = ink1 = blue; + break; + } + ((uint32_t *) buffer32->line[t1000->displine])[x * 8 + 2 * c] = ink0; + ((uint32_t *) buffer32->line[t1000->displine])[x * 8 + 2 * c + 1] = ink1; + dat = dat << 2; + } + } } -static void t1000_poll(void *p) +static void +t1000_poll(void *p) { - t1000_t *t1000 = (t1000_t *)p; + t1000_t *t1000 = (t1000_t *) p; - if (t1000->video_options != st_video_options || - t1000->enabled != st_enabled) - { - t1000->video_options = st_video_options; - t1000->enabled = st_enabled; + if (t1000->video_options != st_video_options || t1000->enabled != st_enabled) { + t1000->video_options = st_video_options; + t1000->enabled = st_enabled; - /* Set the font used for the external display */ - t1000->cga.fontbase = ((t1000->video_options & 3) * 256); + /* Set the font used for the external display */ + t1000->cga.fontbase = ((t1000->video_options & 3) * 256); - if (t1000->enabled) /* Disable internal chipset */ - mem_mapping_enable(&t1000->mapping); - else - mem_mapping_disable(&t1000->mapping); - } - /* Switch between internal plasma and external CRT display. */ - if (st_display_internal != -1 && st_display_internal != t1000->internal) - { - t1000->internal = st_display_internal; - t1000_recalctimings(t1000); - } - if (!t1000->internal) - { - cga_poll(&t1000->cga); - return; - } - - if (!t1000->linepos) - { - timer_advance_u64(&t1000->cga.timer, t1000->dispofftime); - t1000->cga.cgastat |= 1; - t1000->linepos = 1; - if (t1000->dispon) - { - if (t1000->displine == 0) - { - video_wait_for_buffer(); - } - - /* Graphics */ - if (t1000->cga.cgamode & 0x02) - { - if (t1000->cga.cgamode & 0x10) - t1000_cgaline6(t1000); - else t1000_cgaline4(t1000); - } - else - if (t1000->cga.cgamode & 0x01) /* High-res text */ - { - t1000_text_row80(t1000); - } - else - { - t1000_text_row40(t1000); - } - } - t1000->displine++; - /* Hardcode a fixed refresh rate and VSYNC timing */ - if (t1000->displine == 200) /* Start of VSYNC */ - { - t1000->cga.cgastat |= 8; - t1000->dispon = 0; - } - if (t1000->displine == 216) /* End of VSYNC */ - { - t1000->displine = 0; - t1000->cga.cgastat &= ~8; - t1000->dispon = 1; - } - } + if (t1000->enabled) /* Disable internal chipset */ + mem_mapping_enable(&t1000->mapping); else - { - if (t1000->dispon) - { - t1000->cga.cgastat &= ~1; - } - timer_advance_u64(&t1000->cga.timer, t1000->dispontime); - t1000->linepos = 0; - - if (t1000->displine == 200) - { - /* Hardcode 640x200 window size */ - if ((T1000_XSIZE != xsize) || (T1000_YSIZE != ysize) || video_force_resize_get()) - { - xsize = T1000_XSIZE; - ysize = T1000_YSIZE; - if (xsize < 64) xsize = 656; - if (ysize < 32) ysize = 200; - set_screen_size(xsize, ysize); - - if (video_force_resize_get()) - video_force_resize_set(0); - } - video_blit_memtoscreen(0, 0, xsize, ysize); - - frames++; - /* Fixed 640x200 resolution */ - video_res_x = T1000_XSIZE; - video_res_y = T1000_YSIZE; - - if (t1000->cga.cgamode & 0x02) - { - if (t1000->cga.cgamode & 0x10) - video_bpp = 1; - else video_bpp = 2; - - } - else video_bpp = 0; - t1000->cga.cgablink++; - } - } -} - -static void t1000_recalcattrs(t1000_t *t1000) -{ - int n; - - /* val behaves as follows: - * Bit 0: Attributes 01-06, 08-0E are inverse video - * Bit 1: Attributes 01-06, 08-0E are bold - * Bit 2: Attributes 11-16, 18-1F, 21-26, 28-2F ... F1-F6, F8-FF - * are inverse video - * Bit 3: Attributes 11-16, 18-1F, 21-26, 28-2F ... F1-F6, F8-FF - * are bold */ - - /* Set up colours */ - if (t1000->invert) { - if (t1000->backlight) { - grey = makecol(0x2D, 0x39, 0x5A); - blue = makecol(0x85, 0xa0, 0xD6); - } else { - grey = makecol(0x0f, 0x21, 0x3f); - blue = makecol(0x1C, 0x71, 0x31); - } - } else { - if (t1000->backlight) { - blue = makecol(0x2D, 0x39, 0x5A); - grey = makecol(0x85, 0xa0, 0xD6); - } else { - blue = makecol(0x0f, 0x21, 0x3f); - grey = makecol(0x1C, 0x71, 0x31); - } - } - - /* Initialise the attribute mapping. Start by defaulting everything - * to grey on blue, and with bold set by bit 3 */ - for (n = 0; n < 256; n++) - { - boldcols[n] = (n & 8) != 0; - blinkcols[n][0] = normcols[n][0] = blue; - blinkcols[n][1] = normcols[n][1] = grey; - } - - /* Colours 0x11-0xFF are controlled by bits 2 and 3 of the - * passed value. Exclude x0 and x8, which are always grey on - * blue. */ - for (n = 0x11; n <= 0xFF; n++) - { - if ((n & 7) == 0) continue; - if (t1000->attrmap & 4) /* Inverse */ - { - blinkcols[n][0] = normcols[n][0] = blue; - blinkcols[n][1] = normcols[n][1] = grey; - } - else /* Normal */ - { - blinkcols[n][0] = normcols[n][0] = grey; - blinkcols[n][1] = normcols[n][1] = blue; - } - if (t1000->attrmap & 8) boldcols[n] = 1; /* Bold */ - } - /* Set up the 01-0E range, controlled by bits 0 and 1 of the - * passed value. When blinking is enabled this also affects 81-8E. */ - for (n = 0x01; n <= 0x0E; n++) - { - if (n == 7) continue; - if (t1000->attrmap & 1) - { - blinkcols[n][0] = normcols[n][0] = blue; - blinkcols[n][1] = normcols[n][1] = grey; - blinkcols[n+128][0] = blue; - blinkcols[n+128][1] = grey; - } - else - { - blinkcols[n][0] = normcols[n][0] = grey; - blinkcols[n][1] = normcols[n][1] = blue; - blinkcols[n+128][0] = grey; - blinkcols[n+128][1] = blue; - } - if (t1000->attrmap & 2) boldcols[n] = 1; - } - /* Colours 07 and 0F are always blue on grey. If blinking is - * enabled so are 87 and 8F. */ - for (n = 0x07; n <= 0x0F; n += 8) - { - blinkcols[n][0] = normcols[n][0] = grey; - blinkcols[n][1] = normcols[n][1] = blue; - blinkcols[n+128][0] = grey; - blinkcols[n+128][1] = blue; - } - /* When not blinking, colours 81-8F are always blue on grey. */ - for (n = 0x81; n <= 0x8F; n ++) - { - normcols[n][0] = grey; - normcols[n][1] = blue; - boldcols[n] = (n & 0x08) != 0; - } - - - /* Finally do the ones which are solid grey. These differ between - * the normal and blinking mappings */ - for (n = 0; n <= 0xFF; n += 0x11) - { - normcols[n][0] = normcols[n][1] = grey; - } - /* In the blinking range, 00 11 22 .. 77 and 80 91 A2 .. F7 are grey */ - for (n = 0; n <= 0x77; n += 0x11) - { - blinkcols[n][0] = blinkcols[n][1] = grey; - blinkcols[n+128][0] = blinkcols[n+128][1] = grey; - } -} - - -static void *t1000_init(const device_t *info) -{ - t1000_t *t1000 = malloc(sizeof(t1000_t)); - memset(t1000, 0, sizeof(t1000_t)); - loadfont("roms/machines/t1000/t1000font.bin", 8); - cga_init(&t1000->cga); - video_inform(VIDEO_FLAG_TYPE_CGA, &timing_t1000); - - t1000->internal = 1; - - t1000->backlight = device_get_config_int("backlight"); - t1000->invert = device_get_config_int("invert"); - - /* 16k video RAM */ - t1000->vram = malloc(0x4000); - - timer_set_callback(&t1000->cga.timer, t1000_poll); - timer_set_p(&t1000->cga.timer, t1000); - - /* Occupy memory between 0xB8000 and 0xBFFFF */ - mem_mapping_add(&t1000->mapping, 0xb8000, 0x8000, t1000_read, NULL, NULL, t1000_write, NULL, NULL, NULL, 0, t1000); - /* Respond to CGA I/O ports */ - io_sethandler(0x03d0, 0x000c, t1000_in, NULL, NULL, t1000_out, NULL, NULL, t1000); - - /* Default attribute mapping is 4 */ - t1000->attrmap = 4; - t1000_recalcattrs(t1000); - - /* Start off in 80x25 text mode */ - t1000->cga.cgastat = 0xF4; - t1000->cga.vram = t1000->vram; - t1000->enabled = 1; - t1000->video_options = 0x01; - language = device_get_config_int("display_language") ? 2 : 0; - return t1000; -} - -static void t1000_close(void *p) -{ - t1000_t *t1000 = (t1000_t *)p; - - free(t1000->vram); - free(t1000); -} - -static void t1000_speed_changed(void *p) -{ - t1000_t *t1000 = (t1000_t *)p; - + mem_mapping_disable(&t1000->mapping); + } + /* Switch between internal plasma and external CRT display. */ + if (st_display_internal != -1 && st_display_internal != t1000->internal) { + t1000->internal = st_display_internal; t1000_recalctimings(t1000); + } + if (!t1000->internal) { + cga_poll(&t1000->cga); + return; + } + + if (!t1000->linepos) { + timer_advance_u64(&t1000->cga.timer, t1000->dispofftime); + t1000->cga.cgastat |= 1; + t1000->linepos = 1; + if (t1000->dispon) { + if (t1000->displine == 0) { + video_wait_for_buffer(); + } + + /* Graphics */ + if (t1000->cga.cgamode & 0x02) { + if (t1000->cga.cgamode & 0x10) + t1000_cgaline6(t1000); + else + t1000_cgaline4(t1000); + } else if (t1000->cga.cgamode & 0x01) /* High-res text */ + { + t1000_text_row80(t1000); + } else { + t1000_text_row40(t1000); + } + } + t1000->displine++; + /* Hardcode a fixed refresh rate and VSYNC timing */ + if (t1000->displine == 200) /* Start of VSYNC */ + { + t1000->cga.cgastat |= 8; + t1000->dispon = 0; + } + if (t1000->displine == 216) /* End of VSYNC */ + { + t1000->displine = 0; + t1000->cga.cgastat &= ~8; + t1000->dispon = 1; + } + } else { + if (t1000->dispon) { + t1000->cga.cgastat &= ~1; + } + timer_advance_u64(&t1000->cga.timer, t1000->dispontime); + t1000->linepos = 0; + + if (t1000->displine == 200) { + /* Hardcode 640x200 window size */ + if ((T1000_XSIZE != xsize) || (T1000_YSIZE != ysize) || video_force_resize_get()) { + xsize = T1000_XSIZE; + ysize = T1000_YSIZE; + if (xsize < 64) + xsize = 656; + if (ysize < 32) + ysize = 200; + set_screen_size(xsize, ysize); + + if (video_force_resize_get()) + video_force_resize_set(0); + } + video_blit_memtoscreen(0, 0, xsize, ysize); + + frames++; + /* Fixed 640x200 resolution */ + video_res_x = T1000_XSIZE; + video_res_y = T1000_YSIZE; + + if (t1000->cga.cgamode & 0x02) { + if (t1000->cga.cgamode & 0x10) + video_bpp = 1; + else + video_bpp = 2; + + } else + video_bpp = 0; + t1000->cga.cgablink++; + } + } +} + +static void +t1000_recalcattrs(t1000_t *t1000) +{ + int n; + + /* val behaves as follows: + * Bit 0: Attributes 01-06, 08-0E are inverse video + * Bit 1: Attributes 01-06, 08-0E are bold + * Bit 2: Attributes 11-16, 18-1F, 21-26, 28-2F ... F1-F6, F8-FF + * are inverse video + * Bit 3: Attributes 11-16, 18-1F, 21-26, 28-2F ... F1-F6, F8-FF + * are bold */ + + /* Set up colours */ + if (t1000->invert) { + if (t1000->backlight) { + grey = makecol(0x2D, 0x39, 0x5A); + blue = makecol(0x85, 0xa0, 0xD6); + } else { + grey = makecol(0x0f, 0x21, 0x3f); + blue = makecol(0x1C, 0x71, 0x31); + } + } else { + if (t1000->backlight) { + blue = makecol(0x2D, 0x39, 0x5A); + grey = makecol(0x85, 0xa0, 0xD6); + } else { + blue = makecol(0x0f, 0x21, 0x3f); + grey = makecol(0x1C, 0x71, 0x31); + } + } + + /* Initialise the attribute mapping. Start by defaulting everything + * to grey on blue, and with bold set by bit 3 */ + for (n = 0; n < 256; n++) { + boldcols[n] = (n & 8) != 0; + blinkcols[n][0] = normcols[n][0] = blue; + blinkcols[n][1] = normcols[n][1] = grey; + } + + /* Colours 0x11-0xFF are controlled by bits 2 and 3 of the + * passed value. Exclude x0 and x8, which are always grey on + * blue. */ + for (n = 0x11; n <= 0xFF; n++) { + if ((n & 7) == 0) + continue; + if (t1000->attrmap & 4) /* Inverse */ + { + blinkcols[n][0] = normcols[n][0] = blue; + blinkcols[n][1] = normcols[n][1] = grey; + } else /* Normal */ + { + blinkcols[n][0] = normcols[n][0] = grey; + blinkcols[n][1] = normcols[n][1] = blue; + } + if (t1000->attrmap & 8) + boldcols[n] = 1; /* Bold */ + } + /* Set up the 01-0E range, controlled by bits 0 and 1 of the + * passed value. When blinking is enabled this also affects 81-8E. */ + for (n = 0x01; n <= 0x0E; n++) { + if (n == 7) + continue; + if (t1000->attrmap & 1) { + blinkcols[n][0] = normcols[n][0] = blue; + blinkcols[n][1] = normcols[n][1] = grey; + blinkcols[n + 128][0] = blue; + blinkcols[n + 128][1] = grey; + } else { + blinkcols[n][0] = normcols[n][0] = grey; + blinkcols[n][1] = normcols[n][1] = blue; + blinkcols[n + 128][0] = grey; + blinkcols[n + 128][1] = blue; + } + if (t1000->attrmap & 2) + boldcols[n] = 1; + } + /* Colours 07 and 0F are always blue on grey. If blinking is + * enabled so are 87 and 8F. */ + for (n = 0x07; n <= 0x0F; n += 8) { + blinkcols[n][0] = normcols[n][0] = grey; + blinkcols[n][1] = normcols[n][1] = blue; + blinkcols[n + 128][0] = grey; + blinkcols[n + 128][1] = blue; + } + /* When not blinking, colours 81-8F are always blue on grey. */ + for (n = 0x81; n <= 0x8F; n++) { + normcols[n][0] = grey; + normcols[n][1] = blue; + boldcols[n] = (n & 0x08) != 0; + } + + /* Finally do the ones which are solid grey. These differ between + * the normal and blinking mappings */ + for (n = 0; n <= 0xFF; n += 0x11) { + normcols[n][0] = normcols[n][1] = grey; + } + /* In the blinking range, 00 11 22 .. 77 and 80 91 A2 .. F7 are grey */ + for (n = 0; n <= 0x77; n += 0x11) { + blinkcols[n][0] = blinkcols[n][1] = grey; + blinkcols[n + 128][0] = blinkcols[n + 128][1] = grey; + } +} + +static void * +t1000_init(const device_t *info) +{ + t1000_t *t1000 = malloc(sizeof(t1000_t)); + memset(t1000, 0, sizeof(t1000_t)); + loadfont("roms/machines/t1000/t1000font.bin", 8); + cga_init(&t1000->cga); + video_inform(VIDEO_FLAG_TYPE_CGA, &timing_t1000); + + t1000->internal = 1; + + t1000->backlight = device_get_config_int("backlight"); + t1000->invert = device_get_config_int("invert"); + + /* 16k video RAM */ + t1000->vram = malloc(0x4000); + + timer_set_callback(&t1000->cga.timer, t1000_poll); + timer_set_p(&t1000->cga.timer, t1000); + + /* Occupy memory between 0xB8000 and 0xBFFFF */ + mem_mapping_add(&t1000->mapping, 0xb8000, 0x8000, t1000_read, NULL, NULL, t1000_write, NULL, NULL, NULL, 0, t1000); + /* Respond to CGA I/O ports */ + io_sethandler(0x03d0, 0x000c, t1000_in, NULL, NULL, t1000_out, NULL, NULL, t1000); + + /* Default attribute mapping is 4 */ + t1000->attrmap = 4; + t1000_recalcattrs(t1000); + + /* Start off in 80x25 text mode */ + t1000->cga.cgastat = 0xF4; + t1000->cga.vram = t1000->vram; + t1000->enabled = 1; + t1000->video_options = 0x01; + language = device_get_config_int("display_language") ? 2 : 0; + return t1000; +} + +static void +t1000_close(void *p) +{ + t1000_t *t1000 = (t1000_t *) p; + + free(t1000->vram); + free(t1000); +} + +static void +t1000_speed_changed(void *p) +{ + t1000_t *t1000 = (t1000_t *) p; + + t1000_recalctimings(t1000); } static const device_config_t t1000_config[] = { + // clang-format off { .name = "display_language", .description = "Language", @@ -766,32 +723,33 @@ static const device_config_t t1000_config[] = { .default_int = 0 }, { .name = "", .description = "", .type = CONFIG_END } + // clang-format on }; const device_t t1000_video_device = { - .name = "Toshiba T1000 Video", + .name = "Toshiba T1000 Video", .internal_name = "t1000_video", - .flags = 0, - .local = 0, - .init = t1000_init, - .close = t1000_close, - .reset = NULL, + .flags = 0, + .local = 0, + .init = t1000_init, + .close = t1000_close, + .reset = NULL, { .available = NULL }, .speed_changed = t1000_speed_changed, - .force_redraw = NULL, - .config = t1000_config + .force_redraw = NULL, + .config = t1000_config }; const device_t t1200_video_device = { - .name = "Toshiba T1200 Video", + .name = "Toshiba T1200 Video", .internal_name = "t1200_video", - .flags = 0, - .local = 0, - .init = t1000_init, - .close = t1000_close, - .reset = NULL, + .flags = 0, + .local = 0, + .init = t1000_init, + .close = t1000_close, + .reset = NULL, { .available = NULL }, .speed_changed = t1000_speed_changed, - .force_redraw = NULL, - .config = t1000_config + .force_redraw = NULL, + .config = t1000_config }; diff --git a/src/machine/m_xt_xi8088.c b/src/machine/m_xt_xi8088.c index 2a6187570..bbbc1a42c 100644 --- a/src/machine/m_xt_xi8088.c +++ b/src/machine/m_xt_xi8088.c @@ -27,17 +27,14 @@ #include <86box/m_xt_xi8088.h> -typedef struct xi8088_t -{ - uint8_t turbo; +typedef struct xi8088_t { + uint8_t turbo; - int turbo_setting; - int bios_128kb; + int turbo_setting; + int bios_128kb; } xi8088_t; - -static xi8088_t xi8088; - +static xi8088_t xi8088; uint8_t xi8088_turbo_get() @@ -45,53 +42,51 @@ xi8088_turbo_get() return xi8088.turbo; } - void xi8088_turbo_set(uint8_t value) { int c; if (!xi8088.turbo_setting) - return; + return; xi8088.turbo = value; if (!value) { - c = cpu; - cpu = 0; /* 8088/4.77 */ - cpu_set(); - cpu = c; + c = cpu; + cpu = 0; /* 8088/4.77 */ + cpu_set(); + cpu = c; } else - cpu_set(); + cpu_set(); } - int xi8088_bios_128kb(void) { return xi8088.bios_128kb; } - static void * xi8088_init(const device_t *info) { - xi8088.turbo = 1; + xi8088.turbo = 1; xi8088.turbo_setting = device_get_config_int("turbo_setting"); - xi8088.bios_128kb = device_get_config_int("bios_128kb"); + xi8088.bios_128kb = device_get_config_int("bios_128kb"); - mem_set_mem_state(0x0a0000, 0x20000, MEM_READ_EXTANY | MEM_WRITE_EXTANY); - mem_set_mem_state(0x0c0000, 0x08000, device_get_config_int("umb_c0000h_c7fff") ? (MEM_READ_INTERNAL | MEM_WRITE_INTERNAL) : (MEM_READ_EXTANY | MEM_WRITE_EXTANY)); - mem_set_mem_state(0x0c8000, 0x08000, device_get_config_int("umb_c8000h_cffff") ? (MEM_READ_INTERNAL | MEM_WRITE_INTERNAL) : (MEM_READ_EXTANY | MEM_WRITE_EXTANY)); - mem_set_mem_state(0x0d0000, 0x08000, device_get_config_int("umb_d0000h_d7fff") ? (MEM_READ_INTERNAL | MEM_WRITE_INTERNAL) : (MEM_READ_EXTANY | MEM_WRITE_EXTANY)); - mem_set_mem_state(0x0d8000, 0x08000, device_get_config_int("umb_d8000h_dffff") ? (MEM_READ_INTERNAL | MEM_WRITE_INTERNAL) : (MEM_READ_EXTANY | MEM_WRITE_EXTANY)); - mem_set_mem_state(0x0e0000, 0x08000, device_get_config_int("umb_e0000h_e7fff") ? (MEM_READ_INTERNAL | MEM_WRITE_INTERNAL) : (MEM_READ_EXTANY | MEM_WRITE_EXTANY)); - mem_set_mem_state(0x0e8000, 0x08000, device_get_config_int("umb_e8000h_effff") ? (MEM_READ_INTERNAL | MEM_WRITE_INTERNAL) : (MEM_READ_EXTANY | MEM_WRITE_EXTANY)); - mem_set_mem_state(0x0f0000, 0x10000, MEM_READ_EXTANY | MEM_WRITE_EXTANY); + mem_set_mem_state(0x0a0000, 0x20000, MEM_READ_EXTANY | MEM_WRITE_EXTANY); + mem_set_mem_state(0x0c0000, 0x08000, device_get_config_int("umb_c0000h_c7fff") ? (MEM_READ_INTERNAL | MEM_WRITE_INTERNAL) : (MEM_READ_EXTANY | MEM_WRITE_EXTANY)); + mem_set_mem_state(0x0c8000, 0x08000, device_get_config_int("umb_c8000h_cffff") ? (MEM_READ_INTERNAL | MEM_WRITE_INTERNAL) : (MEM_READ_EXTANY | MEM_WRITE_EXTANY)); + mem_set_mem_state(0x0d0000, 0x08000, device_get_config_int("umb_d0000h_d7fff") ? (MEM_READ_INTERNAL | MEM_WRITE_INTERNAL) : (MEM_READ_EXTANY | MEM_WRITE_EXTANY)); + mem_set_mem_state(0x0d8000, 0x08000, device_get_config_int("umb_d8000h_dffff") ? (MEM_READ_INTERNAL | MEM_WRITE_INTERNAL) : (MEM_READ_EXTANY | MEM_WRITE_EXTANY)); + mem_set_mem_state(0x0e0000, 0x08000, device_get_config_int("umb_e0000h_e7fff") ? (MEM_READ_INTERNAL | MEM_WRITE_INTERNAL) : (MEM_READ_EXTANY | MEM_WRITE_EXTANY)); + mem_set_mem_state(0x0e8000, 0x08000, device_get_config_int("umb_e8000h_effff") ? (MEM_READ_INTERNAL | MEM_WRITE_INTERNAL) : (MEM_READ_EXTANY | MEM_WRITE_EXTANY)); + mem_set_mem_state(0x0f0000, 0x10000, MEM_READ_EXTANY | MEM_WRITE_EXTANY); return &xi8088; } static const device_config_t xi8088_config[] = { + // clang-format off { .name = "turbo_setting", .description = "Turbo", @@ -161,20 +156,21 @@ static const device_config_t xi8088_config[] = { .default_int = 0 }, { .name = "", .description = "", .type = CONFIG_END } + // clang-format on }; const device_t xi8088_device = { - .name = "Xi8088", + .name = "Xi8088", .internal_name = "xi8088", - .flags = 0, - .local = 0, - .init = xi8088_init, - .close = NULL, - .reset = NULL, + .flags = 0, + .local = 0, + .init = xi8088_init, + .close = NULL, + .reset = NULL, { .available = NULL }, .speed_changed = NULL, - .force_redraw = NULL, - .config = xi8088_config + .force_redraw = NULL, + .config = xi8088_config }; int @@ -183,29 +179,29 @@ machine_xt_xi8088_init(const machine_t *model) int ret; if (bios_only) { - ret = bios_load_linear_inverted("roms/machines/xi8088/bios-xi8088-128k.bin", - 0x000e0000, 131072, 0); - ret |= bios_load_linear("roms/machines/xi8088/bios-xi8088.bin", - 0x000f0000, 65536, 0); + ret = bios_load_linear_inverted("roms/machines/xi8088/bios-xi8088-128k.bin", + 0x000e0000, 131072, 0); + ret |= bios_load_linear("roms/machines/xi8088/bios-xi8088.bin", + 0x000f0000, 65536, 0); } else { - device_add(&xi8088_device); + device_add(&xi8088_device); - if (xi8088_bios_128kb()) { - ret = bios_load_linear_inverted("roms/machines/xi8088/bios-xi8088-128k.bin", - 0x000e0000, 131072, 0); - } else { - ret = bios_load_linear("roms/machines/xi8088/bios-xi8088.bin", - 0x000f0000, 65536, 0); - } + if (xi8088_bios_128kb()) { + ret = bios_load_linear_inverted("roms/machines/xi8088/bios-xi8088-128k.bin", + 0x000e0000, 131072, 0); + } else { + ret = bios_load_linear("roms/machines/xi8088/bios-xi8088.bin", + 0x000f0000, 65536, 0); + } } if (bios_only || !ret) - return ret; + return ret; machine_common_init(model); if (fdc_type == FDC_INTERNAL) - device_add(&fdc_at_device); + device_add(&fdc_at_device); device_add(&keyboard_ps2_xi8088_device); device_add(&port_6x_xi8088_device); @@ -213,7 +209,7 @@ machine_xt_xi8088_init(const machine_t *model) device_add(&ibmat_nvr_device); pic2_init(); standalone_gameport_type = &gameport_device; - device_add(&sst_flash_39sf010_device); + device_add(&sst_flash_39sf010_device); return ret; } diff --git a/src/machine/m_xt_zenith.c b/src/machine/m_xt_zenith.c index 6eab9aee2..c8d1f53f7 100644 --- a/src/machine/m_xt_zenith.c +++ b/src/machine/m_xt_zenith.c @@ -47,78 +47,74 @@ #include <86box/io.h> #include <86box/vid_cga.h> - typedef struct { mem_mapping_t scratchpad_mapping; - uint8_t *scratchpad_ram; + uint8_t *scratchpad_ram; } zenith_t; - static uint8_t zenith_scratchpad_read(uint32_t addr, void *p) { - zenith_t *dev = (zenith_t *)p; + zenith_t *dev = (zenith_t *) p; return dev->scratchpad_ram[addr & 0x3fff]; } - static void zenith_scratchpad_write(uint32_t addr, uint8_t val, void *p) { - zenith_t *dev = (zenith_t *)p; + zenith_t *dev = (zenith_t *) p; dev->scratchpad_ram[addr & 0x3fff] = val; } - static void * zenith_scratchpad_init(const device_t *info) { zenith_t *dev; - dev = (zenith_t *)malloc(sizeof(zenith_t)); + dev = (zenith_t *) malloc(sizeof(zenith_t)); memset(dev, 0x00, sizeof(zenith_t)); dev->scratchpad_ram = malloc(0x4000); mem_mapping_add(&dev->scratchpad_mapping, 0xf0000, 0x4000, - zenith_scratchpad_read, NULL, NULL, - zenith_scratchpad_write, NULL, NULL, - dev->scratchpad_ram, MEM_MAPPING_EXTERNAL, dev); + zenith_scratchpad_read, NULL, NULL, + zenith_scratchpad_write, NULL, NULL, + dev->scratchpad_ram, MEM_MAPPING_EXTERNAL, dev); return dev; } - static void zenith_scratchpad_close(void *p) { - zenith_t *dev = (zenith_t *)p; + zenith_t *dev = (zenith_t *) p; free(dev->scratchpad_ram); free(dev); } static const device_t zenith_scratchpad_device = { - .name = "Zenith scratchpad RAM", + .name = "Zenith scratchpad RAM", .internal_name = "zenith_scratchpad", - .flags = 0, - .local = 0, - .init = zenith_scratchpad_init, - .close = zenith_scratchpad_close, - .reset = NULL, + .flags = 0, + .local = 0, + .init = zenith_scratchpad_init, + .close = zenith_scratchpad_close, + .reset = NULL, { .available = NULL }, .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL + .force_redraw = NULL, + .config = NULL }; void -machine_zenith_init(const machine_t *model){ +machine_zenith_init(const machine_t *model) +{ machine_common_init(model); if (fdc_type == FDC_INTERNAL) - device_add(&fdc_xt_device); + device_add(&fdc_xt_device); device_add(&zenith_scratchpad_device); @@ -127,7 +123,6 @@ machine_zenith_init(const machine_t *model){ device_add(&keyboard_xt_zenith_device); nmi_init(); - } /* @@ -140,18 +135,18 @@ machine_xt_z184_init(const machine_t *model) int ret; ret = bios_load_linear("roms/machines/zdsupers/z184m v3.1d.10d", - 0x000f8000, 32768, 0); + 0x000f8000, 32768, 0); if (bios_only || !ret) - return ret; + return ret; machine_zenith_init(model); - lpt1_remove(); /* only one parallel port */ + lpt1_remove(); /* only one parallel port */ lpt2_remove(); lpt1_init(0x278); device_add(&ns8250_device); - serial_set_next_inst(SERIAL_MAX); /* So that serial_standalone_init() won't do anything. */ + serial_set_next_inst(SERIAL_MAX); /* So that serial_standalone_init() won't do anything. */ device_add(&cga_device); @@ -163,14 +158,14 @@ machine_xt_z151_init(const machine_t *model) { int ret; ret = bios_load_linear("roms/machines/zdsz151/444-229-18.bin", - 0x000fc000, 32768, 0); + 0x000fc000, 32768, 0); if (ret) { bios_load_aux_linear("roms/machines/zdsz151/444-260-18.bin", - 0x000f8000, 16384, 0); + 0x000f8000, 16384, 0); } if (bios_only || !ret) - return ret; + return ret; machine_zenith_init(model); @@ -187,15 +182,15 @@ machine_xt_z159_init(const machine_t *model) int ret; ret = bios_load_linear("roms/machines/zdsz159/z159m v2.9e.10d", - 0x000f8000, 32768, 0); + 0x000f8000, 32768, 0); if (bios_only || !ret) - return ret; + return ret; machine_zenith_init(model); /* parallel port is on the memory board */ - lpt1_remove(); /* only one parallel port */ + lpt1_remove(); /* only one parallel port */ lpt2_remove(); lpt1_init(0x278); diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index 7194ca2d9..6a2624fec 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -663,21 +663,21 @@ const machine_t machines[] = { .max_voltage = 0, .min_multi = 0, .max_multi = 0, - }, + }, .bus_flags = MACHINE_PC, .flags = MACHINE_FLAGS_NONE, .ram = { .min = 128, .max = 640, .step = 64, - }, + }, .nvrmask = 0, .kbc = KBC_IBM_PC_XT, .kbc_p1 = 0xff00, .gpio = 0xffffffff, .device = NULL, .vid_device = NULL - }, + }, { .name = "[8088] Multitech PC-500", .internal_name = "pc500",